PageSourceSearch

https://sportsphysio.ie/static/version1789136505/frontend/Smartwav…/payments/express-checkout-element.min.js

js sportsphysio.ie collected 2026-09-24 13:31:30 UTC 45,377 bytes, 102 lines download raw bytes

1console.log('[Brippo] express-checkout-element.js loaded');window.brippoExpressCheckoutElement={PLACEMENT_ID:{PRODUCT_PAGE:'product_page',MINICART:'minicart',CART:'cart',CHECKOUT_TOP:'checkout',RECOVER_CHECKOUT:'recover_checkout',PAY_CHECKOUT:'pay_checkout',CHECKOUT_LIST:'checkout_list'},EVENTS:{beforePlaceOrder:null},checkoutListClickAction:null,checkoutListBeforePlaceOrder:null,elementsByPlacement:{},expressCheckoutElementByPlacement:{},lastTotalRequestedByPlacement:{},lastCartUpdateByPlacement:{},canMakePayments:null,placementsSubscribedToCartUpdates:[],invalidateCart:null,wasInitialized:false,wasInsertedIntoMinicart:false,paymentRequestByPlacement:{},initializeInFlightByPlacement:{},keepRegeneratingIfGoneCounter:0,checkout:{shippingAddress:null,billingAddress:null,shippingMethod:null,shippingDetails:null,email:null,},async initialize(){if(typeof BrippoPayments==='undefined'){console.log('[Brippo] express-checkout-element: Waiting for BrippoPayments to be defined...');setTimeout(()=>this.initialize(),100);return;}
2BrippoPayments.initialize().then();if(BrippoPayments.config){this.onBrippoPaymentsInitialized();}},onBrippoPaymentsInitialized(){if(this.wasInitialized){return;}
3this.wasInitialized=true;if(BrippoPayments.config.expressCheckoutElement.enabled!=="1"&&!BrippoPayments.isRecoverCheckout()&&!BrippoPayments.isPayCheckoutPage()){return;}else if(BrippoPayments.isRecoverCheckout()&&typeof brippoRecoverIsStockAvailable!=='undefined'&&!brippoRecoverIsStockAvailable){return;}
4if(window.location.href.indexOf('/checkout/cart')!==-1&&BrippoPayments.config.expressCheckoutElement[this.PLACEMENT_ID.CART].enabled==="1"){BrippoPayments.waitForElementToExists(this.getPlacementSelector(this.PLACEMENT_ID.CART),()=>{this.insertPlaceholder(this.PLACEMENT_ID.CART,this.generatePlaceholder(this.PLACEMENT_ID.CART));this.initializeExpressCheckout(this.PLACEMENT_ID.CART).then();});}
5if(document?.body?.classList&&document.body.classList.contains('catalog-product-view')&&BrippoPayments.config.expressCheckoutElement[this.PLACEMENT_ID.PRODUCT_PAGE].enabled==="1"){BrippoPayments.waitForElementToExists(this.getPlacementSelector(this.PLACEMENT_ID.PRODUCT_PAGE),()=>{this.insertPlaceholder(this.PLACEMENT_ID.PRODUCT_PAGE,this.generatePlaceholder(this.PLACEMENT_ID.PRODUCT_PAGE));this.initializeExpressCheckout(this.PLACEMENT_ID.PRODUCT_PAGE).then(()=>{this.keepRegeneratingIfGone(this.PLACEMENT_ID.PRODUCT_PAGE);});});}
6if(BrippoPayments.config.expressCheckoutElement[this.PLACEMENT_ID.MINICART].enabled==="1"){this.setupMinicart();}
7const isCheckoutPage=this.isCheckoutPage();if(isCheckoutPage&&BrippoPayments.config.expressCheckoutElement[this.PLACEMENT_ID.CHECKOUT_TOP].enabled==="1"){BrippoPayments.waitForElementToExists(this.getPlacementSelector(this.PLACEMENT_ID.CHECKOUT_TOP),()=>{this.insertPlaceholder(this.PLACEMENT_ID.CHECKOUT_TOP,this.generatePlaceholder(this.PLACEMENT_ID.CHECKOUT_TOP));this.initializeExpressCheckout(this.PLACEMENT_ID.CHECKOUT_TOP).then();});this.subscribeToCheckoutQuoteChanges();}
8if(BrippoPayments.isRecoverCheckout()){this.initializeExpressCheckout(this.PLACEMENT_ID.RECOVER_CHECKOUT).then();}
9if(BrippoPayments.isPayCheckoutPage()){this.initializeExpressCheckout(this.PLACEMENT_ID.PAY_CHECKOUT).then();}},async initializeExpressCheckout(placementId){if(!this.wasInitialized){return;}
10if(placementId===this.PLACEMENT_ID.MINICART&&!this.wasInsertedIntoMinicart){if(!(this.placementsSubscribedToCartUpdates.includes(placementId))){this.placementsSubscribedToCartUpdates.push(placementId);}
11return;}
12const container=document.getElementById(this.getElementUniqueId(placementId,'container'));if(!(this.placementsSubscribedToCartUpdates.includes(placementId))){this.placementsSubscribedToCartUpdates.push(placementId);}
13if(this.initializeInFlightByPlacement[placementId]){return;}
14this.initializeInFlightByPlacement[placementId]=true;const{error:paymentRequestOptionsError,paymentRequestOptions,checkoutOptions,elementsOptions,customerInfo}=await this.getPaymentRequestOptions(placementId);this.initializeInFlightByPlacement[placementId]=false;if(paymentRequestOptionsError){this.showPaymentError(placementId,paymentRequestOptionsError);return;}
15const blockedGroups=BrippoPayments.config.expressCheckoutElement['blockedCustomerGroups'];
15if(blockedGroups&&blockedGroups.includes(customerInfo.groupId)){console.log('Brippo won’t create payment request for Customer Group ['+customerInfo.groupId+'] ');if(container){container.style.display='none';}
16return;}
17let amount=parseFloat(paymentRequestOptions.amount);if(amount<=0){console.log('['+placementId+'] Brippo won’t create payment request for 0');if(container){container.style.display='none';}
18return;}
19if(placementId!==this.PLACEMENT_ID.RECOVER_CHECKOUT&&placementId!==this.PLACEMENT_ID.PAY_CHECKOUT){let minThreshold=parseInt(BrippoPayments.config.expressCheckoutElement[placementId].minAmount);let maxThreshold=parseInt(BrippoPayments.config.expressCheckoutElement[placementId].maxAmount);if((minThreshold&&amount / 100<minThreshold)||(maxThreshold&&amount / 100>maxThreshold)){console.log('['+placementId+'] Brippo won’t create payment request for amounts outside the margin'+'('+BrippoPayments.config.expressCheckoutElement[placementId].minAmount+' - '+
20BrippoPayments.config.expressCheckoutElement[placementId].maxAmount+')');if(container){container.style.display='none';}
21return;}}
22if(container){container.style.display='block';}
23if(placementId in this.lastTotalRequestedByPlacement&&this.lastTotalRequestedByPlacement[placementId]===paymentRequestOptions.amount){return;}
24this.lastTotalRequestedByPlacement[placementId]=paymentRequestOptions.amount;this.paymentRequestByPlacement[placementId]={paymentRequestOptions:paymentRequestOptions,checkoutOptions:checkoutOptions,elementsOptions:elementsOptions}
25if(placementId!==this.PLACEMENT_ID.MINICART||this.wasInsertedIntoMinicart){this.checkMountElementHealth(placementId,()=>{this.createExpressCheckoutElement(placementId,paymentRequestOptions,checkoutOptions,elementsOptions);BrippoPayments.reportAnalytic('magento2_ece_'+placementId);});}},generatePlaceholder(placementId){const orSeparatorMode=BrippoPayments.config.expressCheckoutElement[placementId].orSeparator;const separatorHtml='<div class="brippoExpressOrSeparator"><span class="separatorLine"></span><span class="separatorOr">OR</span><span class="separatorLine"></span></div>';let placeholderHtml='<div id="'+this.getElementUniqueId(placementId,'container')+'">';if('title'in BrippoPayments.config.expressCheckoutElement[placementId]&&BrippoPayments.config.expressCheckoutElement[placementId].title!==''){placeholderHtml+='<div class="step-title title abs-checkout-title expressCheckoutTitle">'
26+BrippoPayments.config.expressCheckoutElement[placementId].title+'</div>';}
27if(orSeparatorMode==='before'){placeholderHtml+=separatorHtml;}
28placeholderHtml+='<div id="'+this.getElementUniqueId(placementId,'error')+'" class="expressCheckoutError"></div>'
29+'<div id="'+this.getElementUniqueId(placementId,'mount')+'"></div>';if(orSeparatorMode==='after'){placeholderHtml+=separatorHtml;}
30placeholderHtml+='</div>';return placeholderHtml;},insertPlaceholder(placementId,html){const placementElement=document.querySelector(this.getPlacementSelector(placementId));let insertMode='afterBegin';if(placementId in BrippoPayments.config.expressCheckoutElement&&BrippoPayments.config.expressCheckoutElement[placementId].placementMode){insertMode=BrippoPayments.config.expressCheckoutElement[placementId].placementMode;}
31placementElement.insertAdjacentHTML(insertMode,html);},getElementUniqueId(placementId,type){const uniqueId='brippoExpressCheckout'+placementId;return uniqueId+'_'+type;},showPaymentError:function(placementId,message){let span=document.getElementById(this.getElementUniqueId(placementId,'error'));if(span){span.innerHTML='<span>'+message+'</span>';span.style.display="block";}},resetPaymentErrors:function(placementId){let span=document.getElementById(this.getElementUniqueId(placementId,'error'));if(span){span.style.display="none";}},checkMountElementHealth(placementId,callback){if(document.getElementById(this.getElementUniqueId(placementId,'mount'))){callback(true);}else{const selector=this.getPlacementSelector(placementId);BrippoPayments.waitForElementToExists(selector,()=>{const element=document.querySelector(selector);if(element){element.innerHTML+=this.generatePlaceholder(placementId);callback(true);}});}},getCheckoutBodyClasses(){return['checkout-index-index','hyva_checkout-index-index','onestepcheckout-index-index'].concat((BrippoPayments.config.expressCheckoutElement[this.PLACEMENT_ID.CHECKOUT_TOP].extraBodyClasses||'').split(',').map(c=>
31c.trim()).filter(Boolean));},isCheckoutPage(){return this.getCheckoutBodyClasses().some(c=>document.body.classList.contains(c));},getPlacementSelector(placementId){let placementSelector;switch(placementId){case this.PLACEMENT_ID.PRODUCT_PAGE:placementSelector='.box-tocart .actions, .items-end';break;case this.PLACEMENT_ID.CART:placementSelector='ul.checkout-methods-items';break;case this.PLACEMENT_ID.MINICART:placementSelector='#minicart-content-wrapper .actions, #cart-drawer [role="dialog"] .relative .flex';break;case this.PLACEMENT_ID.CHECKOUT_TOP:if(BrippoPayments.isMobileScreen()){placementSelector='#checkoutSteps';}else{placementSelector='.opc-block-summary, .checkout-onepage .area-right, .grid';}
32break;}
33if(placementId in BrippoPayments.config.expressCheckoutElement&&BrippoPayments.config.expressCheckoutElement[placementId].placementSelector&&BrippoPayments.config.expressCheckoutElement[placementId].placementSelector!==''){placementSelector=BrippoPayments.config.expressCheckoutElement[placementId].placementSelector}
34return placementSelector;},async getPaymentRequestOptions(placementId){this.resetPaymentErrors(placementId);let error,paymentRequestOptions,checkoutOptions,elementsOptions,appliedCoupon,customerInfo;const productInput=document.querySelector('input[name="product"]');const currentProductId=productInput?productInput.value:null;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.expressCheckoutElement.controllers.paymentRequest);const payload={placementId,currentProductId,...((placementId===this.PLACEMENT_ID.RECOVER_CHECKOUT)&&{recoverOrderId:brippoRecoverOrderEntityId}),...((placementId===this.PLACEMENT_ID.PAY_CHECKOUT)&&{paymentLinkId:brippoPayCheckoutId})};try{const response=await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload),});if(!response.ok){throw new Error(`${response.statusText} (Status code ${response.status})`);}
35const data=await response.json();if(data&&data.valid===1){console.log(`[${placementId}] Brippo Express Checkout payment request completed for ${data.options.amount}.`);paymentRequestOptions=data.options;checkoutOptions=data.checkoutOptions;elementsOptions=data.elementsOptions;customerInfo=data.customer;appliedCoupon=data.coupon;}else{throw new Error(data.message||`[${placementId}] An error occurred while processing the payment request.`);}}catch(err){error=BrippoPayments.prettifyErrorMessage(err.message);console.error(`[${placementId}] Failed fetching express checkout request:`,error);console.error(`[${placementId}] No more retries left.`);}
36return{error,paymentRequestOptions,checkoutOptions,elementsOptions,customerInfo,appliedCoupon};},createExpressCheckoutElement(placementId,options,checkoutOptions,elementsOptions){const elements=BrippoPayments.stripe.elements(this.failProofOptions(options,checkoutOptions));this.elementsByPlacement[placementId]=elements;const expressCheckoutElement=elements.create('expressCheckout',elementsOptions);this.mountExpressCheckout(placementId,expressCheckoutElement,checkoutOptions);},mountExpressCheckout(placementId,expressCheckoutElement,checkoutOptions){const elementToMountOn=document.getElementById(this.getElementUniqueId(placementId,'mount'));elementToMountOn.style.visibility='hidden';expressCheckoutElement.mount('#'+this.getElementUniqueId(placementId,'mount'));expressCheckoutElement.on('ready',({availablePaymentMethods})=>{this.onReadyHandler(placementId,availablePaymentMethods,elementToMountOn);});expressCheckoutElement.on('click',(event)=>{this.logWalletButtonClickedEvent(placementId,event);let productPageRequest;if(placementId===this.PLACEMENT_ID.PRODUCT_PAGE){const{error:validationError,request}=this.validateProductPageSelection();if(validationError){this.showPaymentError(placementId,validationError);return;}
37productPageRequest=request;}
38if(placementId===this.PLACEMENT_ID.CHECKOUT_LIST&&this.checkoutListClickAction){const{shouldProceed}=this.checkoutListClickAction();if(!shouldProceed){return;}}
39const{error}=this.onWalletButtonClickHandler(placementId,productPageRequest);if(error){this.showPaymentError(placementId,error);}else{const liveCheckoutOptions=this.paymentRequestByPlacement[placementId]?.checkoutOptions||checkoutOptions;console.log('['+placementId+'] Brippo: click resolved, shippingAddressRequired='
40+liveCheckoutOptions.shippingAddressRequired);event.resolve(this.failproofCheckoutOptions(placementId,liveCheckoutOptions,this.elementsByPlacement[placementId]?._commonOptions?.amount));}});expressCheckoutElement.on('shippingaddresschange',async(event)=>{const{error,updatedOptions,updatedCheckoutOptions}=await this.onShippingAddressChangeHandler(placementId,event.address);if(error){event.reject();}else{this.updateElementsIfRequired(placementId,updatedOptions);event.resolve(updatedCheckoutOptions);}});expressCheckoutElement.on('shippingratechange',async(event)=>{const{error,updatedOptions,updatedCheckoutOptions}=await this.onShippingOptionChangeHandler(placementId,event.shippingRate);if(error){event.reject();}else{this.updateElementsIfRequired(placementId,updatedOptions);event.resolve(updatedCheckoutOptions);}});expressCheckoutElement.on('confirm',async(event)=>{BrippoPayments.reportAnalytic('magento2_ece_'+placementId,'paymentConfirmed');await this.onConfirmHandler(placementId,event);});expressCheckoutElement.on('cancel',()=>{this.onCancelHandler(placementId);});},onReadyHandler(placementId,availablePaymentMethods,mountOnElement){if(!availablePaymentMethods){this.canMakePayments=false;console.log('No available payment methods available');}else{this.canMakePayments=true;mountOnElement.style.visibility='initial';const orSeparator=document.querySelector('#'+this.getElementUniqueId(placementId,'container')+' .brippoExpressOrSeparator');if(orSeparator){orSeparator.style.display='flex';}
41const title=document.querySelector('#'+this.getElementUniqueId(placementId,'container')+' .expressCheckoutTitle');if(title){title.style.display='block';}
42if(placementId===this.PLACEMENT_ID.CHECKOUT_LIST||placementId===this.PLACEMENT_ID.CHECKOUT_TOP){document.dispatchEvent(new CustomEvent('brippoExpressCheckoutElement_onReady',{detail:{placementId}}));}
43document.dispatchEvent(new CustomEvent('brippoOnIntegrationReady',{detail:{code:'brippo_payments_ece',placementId:placementId,availablePaymentMethods:availablePaymentMethods}}));}},onCancelHandler(placementId){console.log('['+placementId+'] onCancelHandler');BrippoPayments.hideVeilThrobber();},async onConfirmHandler(placementId,event){console.log('['+placementId+'] onConfirmHandler');BrippoPayments.showVeilThrobber(placementId);const elements=this.elementsByPlacement[placementId];const shippingAddress=event.shippingAddress;const billingDetails=event.billingDetails;const errorHandler=(step,errorMessage)=>{BrippoPayments.hideVeilThrobber();if(typeof errorMessage==='object'){if(errorMessage.message){errorMessage=errorMessage.message;}else{errorMessage=JSON.stringify(errorMessage);}}
44BrippoPayments.log('['+placementId+'] '+step,errorMessage);this.showPaymentError(placementId,errorMessage);return errorMessage;}
45console.log('['+placementId+'] Brippo: Submitting elements');const{error:submitError}=await elements.submit();if(submitError){errorHandler('submitting elements',submitError);return;}
46console.log('['+placementId+'] Brippo: Creating payment method...');const{error:paymentMethodError,paymentMethod}=await BrippoPayments.stripe.createPaymentMethod({elements,params:{billing_details:billingDetails}});if(paymentMethodError){errorHandler('creating payment method',paymentMethodError);return;}
47let clientSecret,orderId,paymentIntentId,orderIncrementId;if(placementId===this.PLACEMENT_ID.PAY_CHECKOUT){console.log('['+placementId+'] Brippo: Creating Payment Intent for Pay Checkout...');const{error:payCheckoutError,clientSecret:payCheckoutClientSecret,paymentIntentId:payCheckoutPaymentIntentId}=await this.createPayCheckoutPaymentIntent(paymentMethod);if(payCheckoutError){errorHandler('creating pi for pay checkout',payCheckoutError);return;}
48console.log('['+placementId+'] Brippo: Confirming pay checkout payment...');await BrippoPayments.stripe.confirmPayment({clientSecret:payCheckoutClientSecret,confirmParams:{payment_method:p
48aymentMethod.id,return_url:window.location.href,},redirect:'if_required'}).then((result)=>{if(result.error){errorHandler('confirming payment',result.error);this.reportPayCheckoutError(result.error.message||JSON.stringify(result.error),payCheckoutPaymentIntentId);}else{const piStatus=result.paymentIntent?result.paymentIntent.status:'unknown';if(piStatus==='succeeded'||piStatus==='requires_capture'||piStatus==='processing'){BrippoPayments.hideVeilThrobber();if(window.brippoPayCheckout){window.brippoPayCheckout.showSuccess();}
49this.completePayCheckout(payCheckoutPaymentIntentId,piStatus);}else{BrippoPayments.hideVeilThrobber();console.warn('[Pay Checkout] Unexpected payment intent status: '+piStatus);this.reportPayCheckoutError('Unexpected payment status: '+piStatus,payCheckoutPaymentIntentId);errorHandler('confirming payment','Payment was not completed. Status: '+piStatus);}}});return;}else if(placementId===this.PLACEMENT_ID.RECOVER_CHECKOUT){console.log('['+placementId+'] Brippo: Creating Payment Intent to recover order...');const{error:recoverOrderError,clientSecret:recoverOrderClientSecret,orderId:recoverOrderOrderId,paymentIntentId:recoverOrderPaymentIntentId,orderIncrementId:recoverOrderOrderIncrementId}=await this.recoverOrder(placementId,paymentMethod);if(recoverOrderError){errorHandler('creating pi for recover order',recoverOrderError);return;}
50clientSecret=recoverOrderClientSecret;orderId=recoverOrderOrderId;paymentIntentId=recoverOrderPaymentIntentId;orderIncrementId=recoverOrderOrderIncrementId;}else{console.log('['+placementId+'] Brippo: Placing order & Payment Intent...');const{error:placeOrderError,clientSecret:placeOrderClientSecret,orderId:placeOrderOrderId,orderIncrementId:placeOrderOrderIncrementId,paymentIntentId:placeOrderPaymentIntentId}=await this.placeOrderAndCreatePaymentIntent(placementId,paymentMethod,billingDetails,shippingAddress);if(placeOrderError){errorHandler('placing order & pi',placeOrderError);return;}
51clientSecret=placeOrderClientSecret;orderId=placeOrderOrderId;paymentIntentId=placeOrderPaymentIntentId;orderIncrementId=placeOrderOrderIncrementId;}
52console.log('['+placementId+'] Brippo: Confirming payment...');await BrippoPayments.stripe.confirmPayment({clientSecret,confirmParams:{payment_method:paymentMethod.id,...((this.checkout.shippingDetails)?{shipping:this.checkout.shippingDetails}:{}),},redirect:'if_required'}).then(async(result)=>{if(result.error){const failError=errorHandler('confirming payment',result.error);if(placementId!==this.PLACEMENT_ID.RECOVER_CHECKOUT){const piStatus=await BrippoPayments.getPaymentStatus(paymentIntentId);if(BrippoPayments.isPaidPaymentIntentStatus(piStatus)){console.warn('['+placementId+'] Brippo: Confirm failed but payment status is '
53+piStatus+'. Completing order #'+orderIncrementId+'...');const{error:completeError}=await this.completeOrder(placementId,orderId,orderIncrementId,paymentIntentId,piStatus);if(completeError){BrippoPayments.hideVeilThrobber();BrippoPayments.log('['+placementId+'] complete',completeError);}}else{await this.cancelOrder(placementId,orderId,orderIncrementId,failError);}}}else{const paymentIntent=result.paymentIntent;console.log('['+placementId+'] Brippo: Completing order #'+orderIncrementId+'...');const{error:completeError}=await this.completeOrder(placementId,orderId,orderIncrementId,paymentIntent.id,paymentIntent.status);if(completeError){BrippoPayments.hideVeilThrobber();BrippoPayments.log('['+placementId+'] complete',completeError);}}});},async placeOrderAndCreatePaymentIntent(placementId,paymentMethod,billingDetails,shippingAddress){this.resetPaymentErrors(placementId);document.dispatchEvent(this.EVENTS.beforePlaceOrder);if(placementId===this.PLACEMENT_ID.CHECKOUT_LIST&&this.checkoutListBeforePlaceOrder){const{error:beforePlaceOrderError}=await this.checkoutListBeforePlaceOrder();if(beforePlaceOrderError){return{error:beforePlaceOrderError,clientSecret:undefined,orderId:undefined,orderIncrementId:undefined,paymentIntentId:undefined};}}
54let clientSecret,orderId,orderIncrementId,paymentIntentId,error;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.expressCheckoutElement.controllers.placeOrder);await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({paymentMethod:paymentMethod,billingDetails:billingDetails,shippingAddress:shippingAddress,placementId:placementId,pickupInputValues:this.pickupInputValues(),checkoutBillingAddress:this.checkout.billingAddress,checkoutShippingAddress:this.checkout.shippingAddress,checkoutShippingMethod:this.checkout.shippingMethod,checkoutEmail:this.checkout.email,})}).then(response=>{if(!response.ok){throw new Error(response.statusText+' (Status code '+response.status+')');}
55return response.json();}).then(data=>{if(data&&data.valid===1){orderId=data.order_id;orderIncrementId=data.order_increment_id;paymentIntentId=data.payment_intent_id;clientSecret=data.client_secret;}else{error=data.message;}}).catch(err=>{error=BrippoPayments.prettifyErrorMessage(err.message);console.error('There was a problem while fetching express checkout placeOrder:',error);});return{error,clientSecret,orderId,orderIncrementId,paymentIntentId}},async recoverOrder(placementId,paymentMethod){this.resetPaymentErrors(placementId);let clientSecret,orderId,orderIncrementId,paymentIntentId,error;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.expressCheckoutElement.controllers.recoverOrder);await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({paymentMethod:paymentMethod,recoverOrderId:brippoRecoverOrderEntityId,linkSource:brippoRecoverLinkSource,isManual:brippoRecoverIsManual,isSoftFailRecovery:brippoRecoverIsSoftFailRecovery,notificationNumber:brippoRecoverNotification})}).then(response=>{if(!response.ok){throw new Error(response.statusText+' (Status code '+response.status+')');}
56return response.json();}).then(data=>{if(data&&data.valid===1){orderId=data.order_id;orderIncrementId=data.order_increment_id;paymentIntentId=data.payment_intent_id;clientSecret=data.client_secret;}else{error=data.message;}}).catch(err=>{error=BrippoPayments.prettifyErrorMessage(err.message);console.error('There was a problem while fetching express checkout recoverOrder:',error);});return{error,clientSecret,orderId,orderIncrementId,paymentIntentId}},async createPayCheckoutPaymentIntent(paymentMethod){const placementId=this.PLACEMENT_ID.PAY_CHECKOUT;this.resetPaymentErrors(placementId);let clientSecret,paymentIntentId,error;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.paymentElement.controllers.payCheckoutCreatePaymentIntent);await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({paymentMethod:paymentMethod,paymentLinkId:brippoPayCheckoutId})}).then(response=>{if(!response.ok){throw new Error(response.statusText+' (Status code '+response.status+')');}
57return response.json();}).then(data=>{if(data&&data.valid===1){paymentIntentId=data.payment_intent_id;clientSecret=data.client_secret;}else{error=data.message;}}).catch(err=>{error=BrippoPayments.prettifyErrorMessage(err.message);console.error('There was a problem while creating payment intent for pay checkout:',error);});return{error,clientSecret,paymentIntentId};},completePayCheckout(paymentIntentId,paymentIntentStatus){try{const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.paymentElement.controllers.payCheckoutComplete);fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({paymentIntentId:paymentIntentId,paymentLinkId:brippoPayCheckoutId,paymentIntentStatus:paymentIntentStatus})}).catch(err=>{console.error('[Pay Checkout] Complete notification failed:',err);});}catch(ex){console.error('[Pay Checkout] Complete notification failed:',ex);}},reportPayCheckoutError(errorMessage,paymentIntentId){try{const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.paymentElement.controllers.payCheckoutReportError);fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({paymentLinkId:brippoPayCheckoutId,paymentIntentId:paymentIntentId||'',errorMessage:typeof errorMessage==='object'?JSON.stringify(errorMessage):errorMessage})}).catch(err=>{console.error('[Pay Checkout] ReportError failed:',err);});}catch(ex){console.error('[Pay Checkout] ReportError failed:',ex);}},async completeOrder(placementId,orderId,orderIncrementId,paymentIntentId,paymentIntentStatus){let error;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.expressCheckoutElement.controllers.complete);await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({orderId,orderIncrementId,paymentIntentId,paymentIntentStatus,...((placementId===this.PLACEMENT_ID.RECOVER_CHECKOUT)&&{isOrderRecover:true})})}).then(response=>{if(!response.ok){throw new Error(response.statusText+' (Status code '+response.status+')');}
58return response.json();}).then(data=>{if(data&&data.valid===1&&data.url){if(window.brippoExpressCheckoutElement.invali
58dateCart){window.brippoExpressCheckoutElement.invalidateCart();}
59location.href=data.url;}else{error=(data&&data.message)||'Unable to complete the order.';BrippoPayments.hideVeilThrobber();this.showPaymentError(placementId,error);}}).catch(err=>{error=BrippoPayments.prettifyErrorMessage(err.message);console.error('There was a problem while fetching express checkout complete:',error);});return{error};},onShippingOptionChangeHandler:async function(placementId,shippingRate){console.log('['+placementId+'] Brippo: Shipping option changed...');this.resetPaymentErrors(placementId);let error,updatedOptions,updatedCheckoutOptions;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.expressCheckoutElement.controllers.addShippingMethod);await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({shippingOption:shippingRate,placementId:placementId})}).then(response=>{if(!response.ok){throw new Error(response.statusText+' (Status code '+response.status+')');}
60return response.json();}).then(data=>{if(data&&data.valid===1){updatedOptions=data.options;updatedCheckoutOptions=data.checkoutOptions;}else{error=data.message;}}).catch(err=>{error=BrippoPayments.prettifyErrorMessage(err.message);console.error('There was a problem while fetching express checkout addShippingMethod:',error);});if(error){this.showPaymentError(placementId,error);}
61return{error,updatedOptions,updatedCheckoutOptions}},onShippingAddressChangeHandler:async function(placementId,address){console.log('['+placementId+'] Brippo: Shipping address changed...');this.resetPaymentErrors(placementId);this.shippingAddress=address;let error,updatedOptions,updatedCheckoutOptions;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.expressCheckoutElement.controllers.addShippingAddress);const selectedDeliveryOption=this.getSelectedDeliveryOptionFromCart(placementId);await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({shippingAddress:address,placementId:placementId,selectedDeliveryOption:selectedDeliveryOption})}).then(response=>{if(!response.ok){throw new Error(response.statusText+' (Status code '+response.status+')');}
62return response.json();}).then(data=>{if(data&&data.valid===1){updatedOptions=data.options;updatedCheckoutOptions=data.checkoutOptions;}else{error=data.message;}}).catch(err=>{error=BrippoPayments.prettifyErrorMessage(err.message);console.error('There was a problem while fetching express checkout addShippingAddress:',error);});if(error){this.showPaymentError(placementId,error);}
63return{error,updatedOptions,updatedCheckoutOptions}},updateElementsIfRequired(placementId,options){if(this.lastTotalRequestedByPlacement[placementId]!==options.amount){this.lastTotalRequestedByPlacement[placementId]=options.amount;this.elementsByPlacement[placementId].update({amount:options.amount});}},async refreshCheckoutOptions(placementId){if(!this.paymentRequestByPlacement[placementId]||!this.elementsByPlacement[placementId]){return;}
64const{error,paymentRequestOptions,checkoutOptions}=await this.getPaymentRequestOptions(placementId);if(error||!paymentRequestOptions||!checkoutOptions){return;}
65this.paymentRequestByPlacement[placementId].paymentRequestOptions=paymentRequestOptions;this.paymentRequestByPlacement[placementId].checkoutOptions=checkoutOptions;console.log('['+placementId+'] Brippo: refreshed checkout options, shippingAddressRequired='
66+checkoutOptions.shippingAddressRequired+', amount='+paymentRequestOptions.amount);this.updateElementsIfRequired(placementId,paymentRequestOptions);},subscribeToCheckoutQuoteChanges(){const placementId=this.PLACEMENT_ID.CHECKOUT_TOP;document.addEventListener('brippoExpressCheckoutElement_refresh',(event)=>{this.refreshCheckoutOptions(event.detail?.placementId||placementId);});if(typeof require!=='function'){return;}
67require(['Magento_Checkout/js/model/quote'],(quote)=>{let quoteChangeDebounceTimer=null;const onQuoteChanged=()=>{clearTimeout(quoteChangeDebounceTimer);quoteChangeDebounceTimer=setTimeout(()=>this.refreshCheckoutOptions(placementId),800);};quote.shippingAddress.subscribe(onQuoteChanged);quote.shippingMethod.subscribe(onQuoteChanged);quote.totals.subscribe(onQuoteChanged);},()=>{console.log('Brippo: Magento_Checkout/js/model/quote is unavailable, the express checkout '
68+'wallet options will not be refreshed when the checkout quote changes.');});},onCartTotalUpdated(){window.brippoExpressCheckoutElement.placementsSubscribedToCartUpdates.forEac
68h((placementId)=>{window.brippoExpressCheckoutElement.initializeExpressCheckout(placementId).then();});},validateProductPageSelection(){const form=document.getElementById('product_addtocart_form');let request=[];let error;let isValid=true;const requiredInputs=form.querySelectorAll('input[aria-required="true"], input[data-validate],'+' select[aria-required="true"], select[data-validate]');requiredInputs.forEach(input=>{if(!input.value||input.value.trim()===''){error='Please select all required options for this product.';}
69const validateQuantities=()=>{try{const validateRules=JSON.parse(input.getAttribute('data-validate'));if(!validateRules||!('validate-item-quantity'in validateRules)){return;}
70const minAllowed=validateRules['validate-item-quantity'].minAllowed;const maxAllowed=validateRules['validate-item-quantity'].maxAllowed;const currentValue=parseFloat(input.value);if(!isNaN(minAllowed)&&currentValue<minAllowed){error=`Minimum quantity allowed is ${minAllowed}.`;}
71if(!isNaN(maxAllowed)&&currentValue>maxAllowed){error=`Maximum quantity allowed is ${maxAllowed}.`;}}catch(err){}}
72if(input.type==='number'&&input.getAttribute('data-validate')){validateQuantities();}});let totalQty=0;const qtyInputs=form.querySelectorAll('input[type="number"][data-validate*="validate-grouped-qty"]');if(qtyInputs.length>0){qtyInputs.forEach(input=>{totalQty+=parseFloat(input.value);});if(totalQty===0){error='Please specify the quantity of product(s).';}}
73const formData=new FormData(form);request=new URLSearchParams(formData).toString();return{error,request};},async onWalletButtonClickHandler(placementId,productPageRequest){if(placementId===this.PLACEMENT_ID.PRODUCT_PAGE){document.getElementById(this.getElementUniqueId(placementId,'mount')).classList.add('disabled');const{error:addToCartError,addToCartResponse}=await this.addToCart(placementId,productPageRequest);document.getElementById(this.getElementUniqueId(placementId,'mount')).classList.remove('disabled');if(addToCartError){return{error:addToCartError}}
74try{this.updateElementsIfRequired(placementId,addToCartResponse.options);console.log('['+placementId+'] onConfirmHandler');console.log('Brippo ['+placementId+']: Express Checkout payment request updated for '+addToCartResponse.options.total.amount+'.');}catch(err){console.log(err);}}
75return{error:null}},async addToCart(placementId,request){this.resetPaymentErrors(placementId);let error;let addToCartResponse;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.expressCheckoutElement.controllers.addToCart);BrippoPayments.showVeilThrobber();await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({request:request,shippingAddress:this.shippingAddress})}).then(response=>{if(!response.ok){throw new Error(response.statusText+' (Status code '+response.status+')');}
76return response.json();}).then(data=>{if(data.valid===1){addToCartResponse=data}else{error=data.message;}}).catch(err=>{error=BrippoPayments.prettifyErrorMessage(err.message);console.error('There was a problem while fetching express checkout addToCart:',error);});if(error){BrippoPayments.hideVeilThrobber();this.showPaymentError(placementId,error);}
77return{error,addToCartResponse}},bindConfigurableProductOptions:function(config,source){const self=this;const options=jQuery("#product-options-wrapper .configurable select.super-attribute-select");options.each(function(index){const onConfigurableProductChanged=self.onConfigurableProductChanged.bind(self,this,config,source);jQuery(this).change(onConfigurableProductChanged);});},onConfigurableProductChanged:function(element,config,source){const self=this;if(element.value){config.currentProductId=element.value;this.initPaymentRequest(config,source);}},setupMinicart(){const setupMinicartAfterDomLoaded=()=>{const miniCartButton=document.querySelector('.showcart, #menu-cart-icon');if(miniCartButton){const eventType=BrippoPayments.config.expressCheckoutElement[this.PLACEMENT_ID.MINICART].eventType;if(eventType==='click'||eventType==="both"){miniCartButton.addEventListener('click',()=>{this.onMinicartButtonClick();});}
78if(eventType==='hover'||eventType==="both"){miniCartButton.addEventListener('mouseover',()=>{this.onMinicartButtonClick();});}
79this.initializeExpressCheckout(this.PLACEMENT_ID.MINICART).then();}else{console.error('Brippo: Mini cart button not found.');}}
80if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',()=>{setupMinicartAfterDomLoaded();});}else{setupMinicartAfterDomLoaded();}},onMinicartButtonClick(){if(!this.wasInsertedIntoMinicart){this.wasInsertedIntoMinicart=true;BrippoPayments.waitForElementToExists(this.getPlacementSelector(this.PLACEMENT_ID.MINICART),()=>{this.insertPlaceholder(this.PLACEMENT_ID.MINICART,this.generatePlaceholder(this.PLACEMENT_ID.MINICART));if(this.PLACEMENT_ID.MINICART in this.paymentRequestByPlacement){const container=document.getElementById(this.getElementUniqueId(this.PLACEMENT_ID.MINICART,'container'));if(container){container.style.display='block';}
81this.checkMountElementHealth(this.PLACEMENT_ID.MINICART,()=>{this.createExpressCheckoutElement(this.PLACEMENT_ID.MINICART,this.paymentRequestByPlacement[this.PLACEMENT_ID.MINICART].paymentRequestOptions,this.paymentRequestByPlacement[this.PLACEMENT_ID.MINICART].checkoutOptions,this.paymentRequestByPlacement[this.PLACEMENT_ID.MINICART].elementsOptions);});}else{this.initializeExpressCheckout(this.PLACEMENT_ID.MINICART).then();}});}},async cancelOrder(placementId,orderId,orderIncrementId,errorMessage){let error;const url=BrippoPayments.normalizeFormKeyInUrl(BrippoPayments.config.expressCheckoutElement.controllers.cancel);await fetch(url,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({orderId:orderId,orderIncrementId:orderIncrementId,error:errorMessage})}).then(response=>{if(!response.ok){throw new Error(response.statusText+' (Status code '+response.status+')');}
82return response.json();}).then(data=>{if(data.completed===1&&data.url){if(window.brippoExpressCheckoutElement.invali
82dateCart){window.brippoExpressCheckoutElement.invalidateCart();}
83location.href=data.url;return;}
84if(data.valid===0){BrippoPayments.log('['+placementId+'] cancel',data.message);error=data.message
85if(data.message){this.showPaymentError(placementId,data.message);}}}).catch(err=>{error=BrippoPayments.prettifyErrorMessage(err.message);console.error('There was a problem while fetching express checkout cancelOrder:',error);});},failProofOptions(options,checkoutOptions){let lineItemsTotal=0;if(checkoutOptions&&checkoutOptions.lineItems){for(const lineItem of checkoutOptions.lineItems){lineItemsTotal+=Number(lineItem.amount);}}
86if(options&&options.amount&&Number(options.amount)<lineItemsTotal){options.amount=lineItemsTotal}
87return options;},failproofCheckoutOptions(placementId,options,currentTotal){try{if(!currentTotal){return options;}
88const sum=options.lineItems.reduce((acc,{amount=0})=>acc+amount,0);if(sum!==currentTotal){options.lineItems=[{name:'Grand Total',amount:currentTotal}];console.log('['+placementId+'] Brippo express checkout options were amended.');}}catch(e){console.error('Brippo: unable to failproofCheckoutOptions',e);}
89return options;},pickupInputValues(){const response=[];const pickupConfigText=BrippoPayments.config.expressCheckoutElement.pickupInputValues;let config;try{config=JSON.parse(pickupConfigText);}catch(e){console.error('Invalid JSON in pickupInputValues config:',e);return response;}
90try{const getOrdinal=day=>{if(day>3&&day<21)return'th';switch(day%10){case 1:return'st';case 2:return'nd';case 3:return'rd';default:return'th';}};config.forEach(({name,inputSelector,type})=>{const input=document.querySelector(inputSelector);if(!input||!input.value)return;let value=input.value;if(type==='date'){const date=new Date(value);const day=date.getDate();const suffix=getOrdinal(day);const weekday=new Intl.DateTimeFormat('en-GB',{weekday:'long'}).format(date);const month=new Intl.DateTimeFormat('en-GB',{month:'long'}).format(date);const year=date.getFullYear();value=`${weekday} ${day}${suffix} ${month} ${year}`;}
91response.push({name,value});});}catch(e){console.error('Unable to parse pickupInputValues',e);return response;}
92return response;},keepRegeneratingIfGone(placementId){setTimeout(()=>{if(!document.getElementById(this.getElementUniqueId(placementId,'mount'))){console.log('['+placementId+'] Brippo express checkout was removed. Regenerating...');this.lastTotalRequestedByPlacement[placementId]=null;BrippoPayments.waitForElementToExists(this.getPlacementSelector(placementId),()=>{this.insertPlaceholder(placementId,this.generatePlaceholder(placementId));this.initializeExpressCheckout(placementId).then(()=>{console.log('['+placementId+'] Brippo express checkout was regenerated.');});});}
93this.keepRegeneratingIfGoneCounter++
94if(this.keepRegeneratingIfGoneCounter<20){this.keepRegeneratingIfGone(placementId);}},2000);},getSelectedDeliveryOptionFromCart(placementId){if(placementId!==this.PLACEMENT_ID.CART&&placementId!==this.PLACEMENT_ID.MINICART&&placementId!==this.PLACEMENT_ID.CHECKOUT_TOP){return null;}
95try{if(typeof window.require!=='undefined'&&window.require.defined){try{if(window.require.defined('Magento_Checkout/js/model/quote')){const quote=window.require('Magento_Checkout/js/model/quote');if(quote&&quote.shippingMethod&&quote.shippingMethod()){const method=quote.shippingMethod();if(method.carrier_code&&method.method_code){const selectedMethod=method.carrier_code+'_'+method.method_code;console.log('['+placementId+'] Found selected delivery option from quote: '+selectedMethod);return selectedMethod;}}}
96if(window.require.defined('Magento_Checkout/js/checkout-data')){const checkoutData=window.require('Magento_Checkout/js/checkout-data');if(checkoutData&&checkoutData.getSelectedShippingRate){const shippingRate=checkoutData.getSelectedShippingRate();if(shippingRate&&shippingRate.carrier_code&&shippingRate.method_code){const selectedMethod=shippingRate.carrier_code+'_'+shippingRate.method_code;console.log('['+placementId+'] Found selected delivery option from checkout data: '+selectedMethod);return selectedMethod;}}}}catch(error){console.error('['+placementId+'] Error accessing loaded Magento modules:',error);}}
97const shippingMethodSelectors=['input[name="shipping_method"]:checked','input[type="radio"][name*="shipping"]:checked','.table-checkout-shipping-method input:checked','.shipping-method input:checked','[data-role="shipping-method"] input:checked'];for(const selector of shippingMethodSelectors){const selectedElement=document.querySelector(selector);if(selectedElement&&selectedElement.value){console.log('['+placementId+'] Found selected delivery option from DOM: '+selectedElement.value);return selectedElement.value;}}
98const shippingRows=document.querySelectorAll('.table-checkout-shipping-method tbody tr');for(const row of shippingRows){const radioInput=row.querySelector('input[type="radio"]');if(radioInput&&radioInput.checked){console.log('['+placementId+'] Found selected delivery option from table row: '+radioInput.value);return radioInput.value;}}
99if(typeof window.checkoutConfig!=='undefined'&&window.checkoutConfig.selectedShippingMethod){const selectedMethod=window.checkoutConfig.selectedShippingMethod;const methodId=selectedMethod.carrier_code+'_'+selectedMethod.method_code;console.log('['+placementId+'] Found selected delivery option from global checkout config: '+methodId);return methodId;}
100console.log('['+placementId+'] No selected delivery option found on cart page');return null;}catch(error){console.error('['+placementId+'] Error getting selected delivery option from cart:',error);return null;}},setCheckoutBillingAddress(billingAddress){this.checkout.billingAddress={firstname:billingAddress.firstname,lastname:billingAddress.lastname,street:billingAddress.street,city:billingAddress.city,countryId:billingAddress.countryId,postcode:billingAddress.postcode,telephone:billingAddress.telep
100hone,region:billingAddress.region,regionId:billingAddress.regionId}},setCheckoutShippingAddress(shippingAddress,shippingDetails){this.checkout.shippingAddress={firstname:shippingAddress.firstname,lastname:shippingAddress.lastname,street:shippingAddress.street,city:shippingAddress.city,countryId:shippingAddress.countryId,postcode:shippingAddress.postcode,telephone:shippingAddress.telephone,region:shippingAddress.region,regionId:shippingAddress.regionId};this.checkout.shippingDetails=shippingDetails;},setCheckoutShippingMethod(quote){this.checkout.shippingMethod=null;try{this.checkout.shippingMethod=quote.shippingMethod();}catch(e){console.log(e);}},setCheckoutEmail(email){this.checkout.email=email;},logWalletButtonClickedEvent(placementId,event){try{const paymentRequest=this.paymentRequestByPlacement[placementId];const billingAddress=this.checkout.billingAddress||{};const shippingAddress=this.checkout.shippingAddress||{};BrippoPayments.logCustomerEvent('wallet_button_clicked',{integration:'express_checkout_element',placementId:placementId,expressPaymentType:event.expressPaymentType||'',email:this.checkout.email||'',amount:paymentRequest?.paymentRequestOptions?.amount||'',billingFirstname:billingAddress.firstname||'',billingLastname:billingAddress.lastname||'',billingStreet:billingAddress.street?billingAddress.street.join(', '):'',billingCity:billingAddress.city||'',billingRegion:billingAddress.region||'',billingPostcode:billingAddress.postcode||'',billingCountry:billingAddress.countryId||'',billingPhone:billingAddress.telep
100hone||'',shippingFirstname:shippingAddress.firstname||'',shippingLastname:shippingAddress.lastname||'',shippingStreet:shippingAddress.street?shippingAddress.street.join(', '):'',shippingCity:shippingAddress.city||'',shippingRegion:shippingAddress.region||'',shippingPostcode:shippingAddress.postcode||'',shippingCountry:shippingAddress.countryId||'',shippingPhone:shippingAddress.telephone||'',userAgent:navigator.userAgent,pageUrl:window.location.href});}catch(e){console.error('Unable to log place order customer event',e);}}}
101document.addEventListener('onBrippoPaymentsInitializationComplete',()=>{window.brippoExpressCheckoutElement.onBrippoPaymentsInitialized();});window.brippoExpressCheckoutElement.initialize().then();window.brippoExpressCheckoutElement.EVENTS.beforePlaceOrder=new CustomEvent('brippoExpressCheckoutElement_beforePlaceOrder',{});if(typeof require==='function'){require(['Magento_Customer/js/customer-data'],function(customerData){if(customerData){window.brippoExpressCheckoutElement.invalidateCart=()=>{customerData.invalidate(['cart']);customerData.reload(['cart'],true);}
102let cart=customerData.get('cart');let cartUpdateDebounceTimer=null;cart.subscribe(()=>{clearTimeout(cartUpdateDebounceTimer);cartUpdateDebounceTimer=setTimeout(window.brippoExpressCheckoutElement.onCartTotalUpdated,1000);});}});}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.