rebill-web-components-sdk 1.8.3-beta.6 → 1.8.3-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/rebill-checkout.cjs.entry.js +5 -6
- package/dist/cjs/rebill-checkout.cjs.entry.js.map +1 -1
- package/dist/cjs/rebill-checkout.entry.cjs.js.map +1 -1
- package/dist/collection/components/checkout/rebill-checkout.js +6 -7
- package/dist/collection/components/checkout/rebill-checkout.js.map +1 -1
- package/dist/components/rebill-checkout.js +5 -6
- package/dist/components/rebill-checkout.js.map +1 -1
- package/dist/esm/rebill-checkout.entry.js +5 -6
- package/dist/esm/rebill-checkout.entry.js.map +1 -1
- package/dist/rebill-web-components-sdk/p-f6290439.entry.js +2 -0
- package/dist/rebill-web-components-sdk/p-f6290439.entry.js.map +1 -0
- package/dist/rebill-web-components-sdk/rebill-checkout.entry.esm.js.map +1 -1
- package/dist/rebill-web-components-sdk/rebill-checkout.entry.js +5 -6
- package/dist/rebill-web-components-sdk/rebill-checkout.entry.js.map +1 -1
- package/dist/types/components/checkout/rebill-checkout.d.ts +1 -1
- package/dist/types/components.d.ts +6 -6
- package/package.json +1 -1
- package/dist/rebill-web-components-sdk/p-8c585aa3.entry.js +0 -2
- package/dist/rebill-web-components-sdk/p-8c585aa3.entry.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as t,c as i,h as e}from"./p-DyaDabZ4.js";import{c as s}from"./p-BFhvUZPU.js";import{a as n,C as a}from"./p-C6wUNEUc.js";import{P as o,G as r,S as l}from"./p-ytXOVSla.js";import"./p-DCCCvIm8.js";import"./p-BZdRe5iW.js";import"./p-tu-WZjQJ.js";import{s as c,d as h,I as d,S as u,e as m,P as p,o as f,b as y}from"./p-CliZuMQR.js";import{m as b,g,b as w,i as k,P as x,a as v}from"./p-Ciz04Wes.js";import{B as C,g as I,i as j}from"./p-Do_vNuMa.js";import"./p-BFTU3MAI.js";import"./p-B2LDUv1-.js";import"./p-uZj1dMLQ.js";import"./p-DA598vBj.js";import"./p-BlJwPojH.js";import"./p-BYrqevT1.js";import"./p-Bf6g23G6.js";import"./p-lWh04UqG.js";import"./p-BxtGvHh6.js";import"./p-bcHxwlBu.js";import"./rebill-button.entry.esm.js";import"./p-CUhYsYSR.js";const P={checkoutSummary:true,submitButton:true,billingAddress:true,customerInformation:true,discountCode:true,logo:true,footer:true,sandboxMode:true,processingPayment:true,successPage:true,errorMessage:true};var M;(function(t){t["BAMBOO"]="bamboo_payment";t["FISERV"]="fiserv";t["KUSHKI"]="kushki";t["PAYWAY"]="payway";t["DOCK"]="dock";t["KLAP"]="klap";t["MOVII"]="movii";t["STRIPE"]="stripe";t["DECIDIR"]="decidir"})(M||(M={}));const S=async(t,i,e)=>{const s=await n.checkout.getRequiredFields({currency:t,method:i},e);return{fields:b(s.data),original:s.data}};const N=async()=>{const t=c.data?.itemInformation?.paymentMethods;const i=t.map((async t=>{try{const i=o.mapToAPMPaymentMethod(t,c.data?.pricing?.country);const e=await S(c.data.pricing.currency,i,c.data.organization.id);return{paymentMethod:t,...e}}catch(i){console.error(`Error getting required fields for ${t}:`,i);return{paymentMethod:t,fields:[],original:[]}}}));const e=await Promise.all(i);const s={};e.forEach((t=>{s[t.paymentMethod]={fields:t.fields,original:t.original}}));return s};const R=(t,i)=>{const e=i[t];if(e){return e}else{return{fields:[],original:[]}}};const D=t=>typeof t==="string"?JSON.parse(t):t;const q=t=>D(t);const z=()=>"190.188.127.250";const A=async({publicKey:t,instantProduct:i,instantPlan:e})=>{const s=D(i?i:e);const a=await n.sessions.createSDKInstantSessionRequest(s,g(),z(),t);const o={...a.data,...a.data.plan&&{plan:{...a.data.plan,description:s.description||[]}},...a.data.product&&{product:{...a.data.product,description:s.description||[]}}};const r=o;return r};const T=async({publicKey:t,productId:i,planId:e})=>{const s=await n.sessions.createSDKItemSessionRequest({...i?{productId:i}:{},...e?{planId:e}:{},idempotencyKey:g(),deviceId:"123123123",clientIP:z(),publicKey:t});const a=s.data;return a};const E=async({publicKey:t,checkoutLandingSession:i,instantProduct:e,instantPlan:s,productId:n,planId:a})=>{if(i){const t=await q(i);return{session:t,type:h.CHECKOUT_LANDING}}if(e||s){const i=await A({publicKey:t,instantProduct:e,instantPlan:s});return{session:i,type:h.INSTANT}}if(n||a){const i=await T({publicKey:t,productId:n,planId:a});return{session:i,type:h.SDK_ITEM}}};const B="@media (max-width: 1024px){.rebill-checkout{width:100%;flex-direction:column;gap:0;justify-content:flex-start;background:var(--rebill-color-background);padding:20px}.right-section-checkout .left-section{width:100%;height:100%;background:var(--rebill-color-background)}.checkout-form-section{display:flex;flex-direction:column;justify-content:flex-start;gap:24px;height:100%}.otp-container{display:flex;flex-direction:column;justify-content:flex-start;gap:24px}.rebill-checkout.full-width-layout .left-section{width:100%}.rebill-checkout.full-width-layout .left-section-container{max-width:none;width:100%}}@media (min-width: 1025px){.rebill-checkout{width:100%;min-height:600px;display:flex;flex-direction:row;justify-content:center;overflow-y:auto}.left-section{display:flex;width:60%;background:var(--rebill-color-background-left);justify-content:space-around}.right-section-checkout{display:flex;padding-top:72px;width:40%;background:var(--rebill-color-background-right);position:sticky;top:0;justify-content:center}.checkout-form-section{display:flex;flex-direction:column;justify-content:flex-start;margin-bottom:36px;gap:32px}.left-section-container{max-width:450px;min-width:450px;margin:2.5rem 2rem 1.5rem 2rem;display:flex;flex-direction:column}.checkout-summary-section{max-width:450px;min-width:350px;margin:0rem 2rem;background:var(--rebill-color-background-right);display:flex;flex-direction:column;justify-content:flex-start;width:100%}.checkout-form-section user-information,.checkout-form-section payment-method-selector,.checkout-form-section rebill-address,.checkout-summary-section rebill-summary{width:100%}.rebill-checkout.full-width-layout .left-section{width:100%;justify-content:stretch}.rebill-checkout.full-width-layout .left-section-container{max-width:none;min-width:auto;width:100%;margin:2.5rem 2rem 1.5rem 2rem}.pac-container{border-radius:4px;box-shadow:0 4px 8px rgba(0, 0, 0, 0.1);border:1px solid #e0e0e0;margin-top:4px;font-family:inherit}.pac-item{padding:10px 12px;cursor:pointer;border-top:none}.pac-item:first-child{border-top:none}.pac-item:hover{background-color:#f5f5f5}.pac-item-query{font-weight:500}.pac-icon{display:none}}.payment-button-container{display:flex;flex-direction:column;gap:16px;margin-bottom:16px}.animated-component{transition:all 0.3s ease-in-out;overflow:visible}.fade-in{animation:fadeIn 0.4s ease-in-out}.slide-in{animation:slideIn 0.5s ease-out}@keyframes fadeIn{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{from{opacity:0;transform:translateX(-20px);max-height:0}to{opacity:1;transform:translateX(0);max-height:450px}}.animated-component.hide{animation:fadeOut 0.3s ease-in-out forwards}@keyframes fadeOut{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(20px)}}rebill-mode-sandbox{position:fixed;bottom:50px;left:50%;transform:translateX(-50%);z-index:1000}@media (max-width: 1024px){rebill-test-mode-chip{bottom:46px}}@media (min-width: 1025px){rebill-test-mode-chip{bottom:46px}}.mode-sandbox-mobile-container{display:flex;align-items:center;width:100%;padding:0;margin:0;box-sizing:border-box}@media (min-width: 1451px){.left-section-container{min-width:450px;margin:2.5rem 5rem 1.5rem 5rem}.checkout-summary-section{min-width:450px;margin:0rem 5rem}}";const O=class{constructor(e){t(this,e);this.error=i(this,"error");this.success=i(this,"success");this.successRedirect=i(this,"successRedirect");this.formChange=i(this,"formChange");this.paymentMethodSelected=i(this,"paymentMethodSelected")}productId;planId;publicKey;instantProduct;instantPlan;display;customerInformation;oneClickCheckout=true;css;language;async handleLanguageChange(t,i){if(t&&t!==i){try{await d.changeLanguage(t);u.changeLanguage(t);console.log(`[RebillCheckout] Language changed from ${i} to ${t}`)}catch(t){console.error("[RebillCheckout] Failed to change language:",t)}}}error;success;successRedirect;formChange;checkoutLandingSession;externalPayment;rejectedPaymentCard=false;rejectedPaymentAPM=false;countries=[];currentPaymentMethod;checkoutResponse=null;isSubmitting=false;isCardSubmitting=false;isCardSuccess=false;isAPMSubmitting=false;isAPMSuccess=false;storedCheckoutResults=new Map;errorMessage=null;currentApmPaymentMethod=null;breakpoint=C.DESKTOP;showRefreshModal=false;cardError={showCardInvalid:false,type:null};initialData={};allRequiredFields={};currentRequiredFields=[];customerExists=false;showOtp=false;otpVerified=false;responseCheckoutCard=null;cardMode=null;formElement;emailDebounceTimeout=null;injectedStyleElement=null;get displayConfig(){if(!this.display){return P}if(typeof this.display==="string"){try{const t=JSON.parse(this.display);return{...P,...t}}catch(t){console.warn("Invalid display configuration string, using defaults:",t);return P}}return{...P,...this.display}}get parsedCustomerInformation(){if(!this.customerInformation){return null}if(typeof this.customerInformation==="string"){try{return JSON.parse(this.customerInformation)}catch(t){console.warn("Invalid customerInformation configuration string, ignoring:",t);return null}}return this.customerInformation}get filteredPaymentMethods(){const t=c.data?.itemInformation?.paymentMethods||[];const i=this.displayConfig.excludePaymentMethods;if(!i||i.length===0){return t}return t.filter((t=>!i.includes(t)))}getCombinedUserData(t={}){const i=c.data.userInformation;const e=this.parsedCustomerInformation;return{email:t.email||e?.email||i.email,fullName:t.fullName||e?.fullName||i.fullName,countryCodePhoneNumber:t.countryCodePhoneNumber||e?.phoneNumber?.countryCode||e?.countryCode||i.countryCode,phoneNumber:t.phoneNumber||e?.phoneNumber?.number||i.phoneNumber,documentType:t.documentType||e?.documentType||i.documentType,documentNumber:t.documentNumber||e?.documentNumber||i.documentNumber,"billing-country":t["billing-country"]||e?.address?.billingAddress?.country||i.address?.billingAddress?.country,"billing-state":t["billing-state"]||e?.address?.billingAddress?.state||i.address?.billingAddress?.state,"billing-address":t["billing-address"]||e?.address?.billingAddress?.address||i.address?.billingAddress?.address,"billing-city":t["billing-city"]||e?.address?.billingAddress?.city||i.address?.billingAddress?.city,"billing-zip":t["billing-zip"]||e?.address?.billingAddress?.zip||i.address?.billingAddress?.zip}}injectCustomCSS(){if(!this.css){return}this.cleanupInjectedCSS();const t=`rebill-checkout-css-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;if(this.css.startsWith("http://")||this.css.startsWith("https://")||this.css.startsWith("//")){const i=document.createElement("link");i.rel="stylesheet";i.href=this.css;i.id=t;i.setAttribute("data-rebill-injected","true");document.head.appendChild(i);this.injectedStyleElement=i}else{const i=document.createElement("style");i.id=t;i.setAttribute("data-rebill-injected","true");i.textContent=this.css;document.head.appendChild(i);this.injectedStyleElement=i}}cleanupInjectedCSS(){if(this.injectedStyleElement){try{this.injectedStyleElement.remove()}catch(t){console.warn("Error removing injected CSS:",t)}this.injectedStyleElement=null}}timeToRedirectAPM=5e3;resizeHandler=()=>{const t=I(window.innerWidth);if(t!==this.breakpoint){this.breakpoint=t}};disconnectedCallback(){window.removeEventListener("resize",this.resizeHandler);if(this.emailDebounceTimeout){clearTimeout(this.emailDebounceTimeout);this.emailDebounceTimeout=null}this.cleanupInjectedCSS()}async componentWillLoad(){try{this.resizeHandler();window.addEventListener("resize",this.resizeHandler);this.injectCustomCSS();if(this.language){await d.changeLanguage(this.language)}else{m()}const{session:t,type:i}=await E({publicKey:this.publicKey,checkoutLandingSession:this.checkoutLandingSession,instantProduct:this.instantProduct,instantPlan:this.instantPlan,productId:this.productId,planId:this.planId});u.initializeSession({session:t,type:i,payment:typeof this.externalPayment==="string"?JSON.parse(this.externalPayment):this.externalPayment});if(c.sessionRefreshed){this.showRefreshModal=true}r.loadGoogleMapsScript();const e=await n.data.getCountries();this.countries=e.data;this.initialData=this.getInitialData();this.allRequiredFields=await N();if(this.filteredPaymentMethods.length>0){if(c.data.paymentStatus===w.REJECTED||c.data.paymentStatus===w.APPROVED&&this.filteredPaymentMethods.includes(p.BANK_TRANSFER)){const t=this.filteredPaymentMethods.find((t=>t===p.BANK_TRANSFER));if(t){this.changePaymentMethod(t);u.setPaymentMethodSelected(t)}}else{this.changePaymentMethod(this.filteredPaymentMethods[0])}}if(this.oneClickCheckout){n.customers.exists({email:c.data?.prefilledData?.email},this.publicKey).then((t=>{this.customerExists=t.data.exists}))}this.cardMode=c.cardMode;f("cardMode",(()=>{this.cardMode=c.cardMode}))}catch(t){console.error("Error initializing checkout:",t)}}componentWillUpdate(){this.injectCustomCSS()}async changePaymentMethod(t){if(t!==this.currentPaymentMethod&&this.filteredPaymentMethods.includes(t)){if(this.checkoutResponse){this.checkoutResponse=null;u.clearCheckoutResponse()}this.currentPaymentMethod=t;u.setPaymentMethodSelected(t);if(t!==p.CARD){this.cardMode="input";u.setCardMode("input")}this.isSubmitting=false;this.currentApmPaymentMethod=o.mapToAPMPaymentMethod(t,c.data?.pricing?.country);if(t!==p.CASH&&t!==p.BANK_TRANSFER){this.checkoutResponse=null;u.clearCheckoutResponse()}else{this.checkoutResponse=null;u.clearCheckoutResponse()}this.paymentMethodSelected.emit(t);try{this.currentRequiredFields=R(t,this.allRequiredFields).fields;const i=await n.sessions.updateCurrentSessionPaymentMethod(c.data.sessionId,{paymentMethodName:o.mapToAPMPaymentMethod(t,c.data.pricing.country),paymentMethodType:t,currency:c.data.pricing.currency});u.setProviderKey(i.providerKey);if(i.providerKey===M.DECIDIR||c.data.providerKey===M.DECIDIR){const t=crypto.randomUUID();const i=await n.fingerPrint.getFingerPrint(t);c.deviceId=t;const e=i.result.script;const s=document.createElement("script");s.innerHTML=e;document.body.appendChild(s)}}catch(t){console.error("Failed to update payment method or get required fields:",t)}}}get currentPaymentError(){if(this.currentPaymentMethod===p.CARD){return this.rejectedPaymentCard}else if(this.currentPaymentMethod===p.CASH||this.currentPaymentMethod===p.BANK_TRANSFER){return this.rejectedPaymentAPM}return false}paymentMethodSelected;async handlePaymentMethodSelected(t){t.stopPropagation();const i=t.detail;this.changePaymentMethod(i);if(this.formElement){this.formElement.resetValidation()}}async handleSubmit(t){if(this.isSubmitting){return}this.rejectedPaymentCard=false;this.rejectedPaymentAPM=false;if(this.currentPaymentMethod===p.CARD){this.handleSubmitCard(t)}else if(this.currentPaymentMethod===p.CASH||this.currentPaymentMethod===p.BANK_TRANSFER){this.handleSubmitAPM(t)}}handleFormChange(t){const i=t.detail;let e=true;let s={};if(this.formElement?.errors){s=this.formElement.errors;e=Object.keys(s).length===0}this.formChange.emit({data:i,isValid:e,errors:Object.keys(s).length>0?s:undefined})}async handleSubmitCard(t){const i=t.detail;const e=this.getCombinedUserData(i);if(!c.data.cardTokenId&&!c.data.cardId){this.cardError={showCardInvalid:true,type:"card_error"};return}if(!c.data.cardInformation&&!c.data.cardId){this.cardError={showCardInvalid:true,type:"tokenization_error"};return}this.cardError={showCardInvalid:false,type:null};const s={transaction:{quantity:1,...c.data.discount.couponCode&&{couponCode:c.data.discount.couponCode}},installments:Number(i.installments||c.data.cardInformation?.installments?.selectedInstallment?.installment),...c.data.cardTokenId&&{cardTokenId:c.data.cardTokenId,...c.data?.itemInformation?.type!==y.PLAN&&{saveCard:c.saveCard}},...c.data.cardId&&{cardId:c.data.cardId},...(!this.otpVerified||this.cardMode==="input")&&{customer:{firstName:e.fullName?.split(" ")[0],lastName:e.fullName?.split(" ").slice(1).join(" "),email:e.email,phone:{countryCode:e.countryCodePhoneNumber,number:e.phoneNumber}}},billingDetails:{address:{lineOne:e["billing-address"],city:e["billing-city"],state:e["billing-state"],country:e["billing-country"],zipCode:e["billing-zip"]},identification:{type:e.documentType,value:e.documentNumber}},customAttributes:{...c.deviceId&&{deviceId:c.deviceId}},...c.metadata&&{paymentMetadata:c.metadata}};const o=g();this.isSubmitting=true;this.isCardSubmitting=true;try{const t=await n.checkout.createCardCheckoutRequest(c.data.sessionId,o,s,c.data.accessToken||undefined);u.setCheckoutResponse(t.data);this.responseCheckoutCard=t.data;if(t.data.result?.status.toUpperCase()===a.APPROVED){this.isCardSuccess=true;u.setPaymentStatus(w.APPROVED);this.success.emit({paymentMethod:this.currentPaymentMethod,data:t.data});c.data.cardInformation.lastFour=t.data.result?.cardLastFour}else{this.error.emit({paymentMethod:this.currentPaymentMethod,data:t.data});u.setCheckoutResponse(t.data);this.rejectedPaymentCard=true;this.errorMessage={message:t.data.error?.error?.message,type:t.data.error?.error?.type}}}catch(t){this.error.emit({paymentMethod:this.currentPaymentMethod,data:t.data});u.setCheckoutResponse(t.data);this.responseCheckoutCard=t.data;this.rejectedPaymentCard=true;this.errorMessage={message:t.data?.error?.message,type:t.data?.error?.type}}finally{this.isSubmitting=false;this.isCardSubmitting=false}}async handleSubmitAPM(t){if(this.currentPaymentMethod!==p.CASH&&this.currentPaymentMethod!==p.BANK_TRANSFER){return}this.isSubmitting=true;const i=t.detail;const e=this.getCombinedUserData(i);try{const t={address:{country:e["billing-country"]||"",state:e["billing-state"]||"",city:e["billing-city"]||"",zipCode:e["billing-zip"]||"",lineOne:e["billing-address"]||""},identification:{type:e.documentType,value:e.documentNumber}};const s=this.currentApmPaymentMethod||o.mapToAPMPaymentMethod(this.currentPaymentMethod,c.data?.pricing?.country);const a={transaction:{quantity:1,...c.data.discount.couponCode&&{couponCode:c.data.discount.couponCode}},method:s,billingDetails:t,redirect:{approved:window.location.origin+"/payment/success",rejected:window.location.origin+"/payment/failure"},paymentMetadata:c.metadata,customAttributes:{bank:i.bankId||c.data?.bankId?.code}};{a.customer={firstName:e.fullName?.split(" ")[0]||"",lastName:e.fullName?.split(" ").slice(1).join(" ")||"",email:e.email,phone:{countryCode:e.countryCodePhoneNumber||"",number:e.phoneNumber||""}}}const r=g();const l=await n.checkout.createAPMCheckoutRequest(c.data.sessionId,r,a);this.isSubmitting=false;this.checkoutResponse=l.data;this.storedCheckoutResults.set(this.currentPaymentMethod,l.data);if(l.data?.date){c.data.paymentDate=l.data.date;c.createdAt=l.data.date}if(l.data?.traceId){c.data.paymentReference=l.data.traceId}}catch(t){this.isSubmitting=false;this.checkoutResponse=t.data;this.errorMessage={alertTitle:"paymentErrors.APMError",message:w.APM_MENSAJE_ERROR,type:t.data?.error?.type,paymentMethod:this.currentPaymentMethod};this.rejectedPaymentAPM=true}}async submit(){if(this.formElement&&typeof this.formElement.submit==="function"){this.formElement.submit()}else{await this.handleSubmit({detail:{}})}}handlePaymentStatusChange=t=>{if(t.isCompleted){if(t.status===l.APPROVED){u.setPaymentStatus(w.APPROVED);this.success.emit({paymentMethod:this.currentPaymentMethod,data:this.checkoutResponse})}else if(t.status===l.REJECTED){u.setPaymentStatus(w.REJECTED);this.errorMessage={message:w.REJECTED,type:this.checkoutResponse?.error?.type}}}};async handleInputChange(t){if(t?.detail?.id==="email"&&this.oneClickCheckout){if(this.emailDebounceTimeout){clearTimeout(this.emailDebounceTimeout)}if(!t.detail.value||t.detail.value.trim()===""){this.customerExists=false;u.clearCustomerIdAndToken();return}this.emailDebounceTimeout=setTimeout((async()=>{try{const t=await n.customers.exists({email:c.data.userInformation.email},this.publicKey);this.customerExists=t.data.exists}catch(t){this.customerExists=false}}),500)}}validationSchema={email:s().when([],{is:()=>!this.otpVerified,then:t=>t.email("validation.emailInvalid").matches(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,"validation.emailInvalid").required("validation.emailRequired"),otherwise:t=>t.notRequired()}),fullName:s().when([],{is:()=>!this.otpVerified,then:t=>t.required("validation.fullNameRequired").matches(/^[a-zA-ZÀ-ÿ\u00f1\u00d1\s]{2,}\s+[a-zA-ZÀ-ÿ\u00f1\u00d1\s]{2,}$/,"validation.fullNameInvalid"),otherwise:t=>t.notRequired()}),isValidPhoneNumber:s().when([],{is:()=>k("phoneNumber",this.currentRequiredFields)&&!this.otpVerified||this.otpVerified&&this.cardMode==="input",then:t=>t.equals(["true"],"validation.phoneRequired"),otherwise:t=>t.notRequired()}),"billing-country":s().when([],{is:()=>k("billing-country",this.currentRequiredFields)&&!this.otpVerified||this.otpVerified&&this.cardMode==="input",then:t=>t.required("validation.countryRequired"),otherwise:t=>t.notRequired()}),"billing-state":s().when([],{is:()=>k("billing-state",this.currentRequiredFields)&&!this.otpVerified||this.otpVerified&&this.cardMode==="input",then:t=>t.required("validation.stateRequired"),otherwise:t=>t.notRequired()}),"billing-address":s().when([],{is:()=>k("billing-address",this.currentRequiredFields)&&!this.otpVerified||this.otpVerified&&this.cardMode==="input",then:t=>t.required("validation.addressRequired"),otherwise:t=>t.notRequired()}),"billing-city":s().when([],{is:()=>k("billing-city",this.currentRequiredFields)&&!this.otpVerified||this.otpVerified&&this.cardMode==="input",then:t=>t.required("validation.cityRequired"),otherwise:t=>t.notRequired()}),"billing-zip":s().when([],{is:()=>k("billing-zip",this.currentRequiredFields)&&!this.otpVerified||this.otpVerified&&this.cardMode==="input",then:t=>t.required("validation.zipRequired"),otherwise:t=>t.notRequired()}),bankId:s().when([],{is:()=>k("bankId",this.currentRequiredFields),then:t=>t.required("validation.bankRequired"),otherwise:t=>t.notRequired()}),installments:s().when([],{is:()=>this.currentPaymentMethod===p.CARD&&c.data.cardInformation.installments.isAvailableInstallments&&c.data.cardInformation?.installments?.installments.length>0&&c.data.itemInformation.type!==y.PLAN,then:t=>t.required("validation.installmentsRequired"),otherwise:t=>t.notRequired()}),documentType:s().when([],{is:()=>k("documentType",this.currentRequiredFields)&&!this.otpVerified||this.otpVerified&&this.cardMode==="input",then:t=>t.required("validation.documentTypeRequired"),otherwise:t=>t.notRequired()}),documentNumber:s().when([],{is:()=>k("documentNumber",this.currentRequiredFields)&&!this.otpVerified||this.otpVerified&&this.cardMode==="input",then:t=>t.required("validation.documentNumberRequired").min(7,"validation.documentInvalid"),otherwise:t=>t.notRequired()})};getInitialData=()=>({email:c.data.userInformation.email||"",fullName:c.data.userInformation.fullName||"",phoneNumber:c.data.userInformation.phoneNumber?.number||"",countryCodePhoneNumber:c.data.userInformation.countryCode||"",documentType:"",documentNumber:"","billing-country":c.data.userInformation.address?.billingAddress?.country||"","billing-state":c.data.userInformation?.address?.billingAddress?.state||"","billing-address":c.data.userInformation?.address?.billingAddress?.address||"","billing-city":c.data.userInformation?.address?.billingAddress?.city||"","billing-zip":c.data.userInformation?.address?.billingAddress?.zip||"",bankId:c.data.bankId?.code||"",card:"",installments:c.data.cardInformation?.installments?.selectedInstallment?.installment?.toString()||""});hasPrefilledAddress=()=>{const t=["billing-country","billing-state","billing-address","billing-city","billing-zip"];return t.some((t=>{const i=this.initialData[t];return i&&i.trim()!==""}))};get isQrCodeVisible(){return!!this.checkoutResponse?.result?.data?.qrCode}isPaymentApproved=()=>{if(c.data.paymentStatus===w.APPROVED){return true}return false};handleRebillAccountClick(t){this.showOtp=t.detail}handleReturnForm(t){this.showOtp=t.detail;u.clearCustomerIdAndToken()}handleSignOut(){this.showOtp=false;this.otpVerified=false;if(!c?.data?.prefilledData?.email){this.customerExists=false}u.clearCustomerIdAndToken();u.clearUserInformation();this.cardError={showCardInvalid:false,type:null};this.errorMessage=null;this.rejectedPaymentCard=false;this.rejectedPaymentAPM=false}handleCodeVerified(){this.otpVerified=true;this.showOtp=false;this.rejectedPaymentCard=false;this.errorMessage=null;this.cardError={showCardInvalid:false,type:null};if(this.formElement){this.formElement.resetValidation()}}isPaymentRejected(){return c.data.paymentStatus===w.REJECTED&&this.currentPaymentMethod===p.BANK_TRANSFER}render(){const t=this.countries.map((t=>({label:t.country,value:t.isoCountryCode})));const i=(t={})=>e("rebill-summary",{key:"295f4329167e76ca5f45e322116a8463930dff1e",totalAmount:c.data.pricing.total,currency:c.data.pricing.currency,itemTitle:c._session?.getTitle(),itemDescription:c._session?.getDescription(),itemAmount:c.data.pricing.subtotal,subtotal:c.data.pricing.subtotal,allowCoupon:c._session?.getAllowCoupon(this.displayConfig),currentBreakpoint:this.breakpoint,planFrequency:c._session?.getPlanFrequency(),planFrequencyCount:c._session?.getPlanFrequencyCount(),discountType:c.data.discount.discountType,discountedPercentage:c.data.discount.discountedPercentage,discountDuration:c.data.discount.discountDuration,discountAmount:c.data.discount.discountAmount,...t});return c.isInitialized&&e(e.Fragment,null,this.showRefreshModal&&e("rebill-modal-overlay",{key:"06530c75a9bd4d749fb206cc0c370458a264140e"}),this.displayConfig.processingPayment&&e("rebill-processing-payment",{key:"a8ebd9144dba4fbf657fb09598d104f3378adf33",style:{display:this.isCardSubmitting?"block":"none"}}),this.displayConfig.successPage&&this.isPaymentApproved()&&c.isInitialized?e("success-page",{typePaymentMethod:c.data.paymentMethodSelected,paymentMethodName:o.mapToAPMPaymentMethod(c.data.paymentMethodSelected||c.data.payment?.paymentMethodType,c.data?.pricing?.country),country:c.data?.pricing?.country,bank:c.data.payment?.paymentMethodMetadata?.bank||c.data.payment?.paymentMethodMetadata?.bank,cardLastFour:this.responseCheckoutCard?.result?.cardLastFour||c.data.cardInformation?.lastFour,paymentDate:c.data.paymentDate||this.responseCheckoutCard?.date||c.data.payment?.createdAt||this.checkoutResponse?.result?.data?.createdAt,referenceNumber:c.data.paymentReference||c.data.payment?.traceId||this.responseCheckoutCard?.traceId,onSuccessRedirect:t=>{this.successRedirect.emit(t.detail)},trialPeriodDays:c.data?.itemInformation?.trial?.trialPeriodDays,debitDay:c.data?.itemInformation?.debitDay,planAmount:c.data?.pricing?.planAmount}):e(e.Fragment,null,this.displayConfig.sandboxMode&&c.isSandbox&&c.data.sessionType===h.CHECKOUT_LANDING&&j(this.breakpoint,C.DESKTOP)&&e("div",{class:"mode-sandbox-mobile-container",style:{display:this.isCardSubmitting||this.isCardSuccess?"none":"block"}},e("rebill-mode-sandbox-mobile",null)),e("rebill-checkout-form",{ref:t=>this.formElement=t,style:{display:this.isCardSubmitting||this.isCardSuccess?"none":"block"},validationSchema:this.validationSchema,initialData:this.initialData,onSubmit:t=>this.handleSubmit(t),onChange:t=>this.handleFormChange(t),renderForm:({submit:s,formData:n,errors:a})=>{const o=!this.isCardSuccess&&this.checkoutResponse?.result&&(this.currentPaymentMethod===p.CASH||this.currentPaymentMethod===p.BANK_TRANSFER);return e("div",{class:`rebill-checkout ${!this.displayConfig.checkoutSummary?"full-width-layout":""}`},e("div",{class:"left-section"},e("div",{class:"left-section-container"},this.displayConfig.logo&&e("organization-logo",{organization:c.data.organization}),e("div",{class:"otp-container",style:{display:this.showOtp?"block":"none"}},e("otp-component",null)),e("div",{style:{display:this.showOtp?"none":"block"}},e("div",{class:"checkout-form-section"},this.displayConfig.checkoutSummary&&e("div",{class:"summary-mobile-tablet",style:{display:j(this.breakpoint,C.DESKTOP)?"block":"none"}},i({displayedComponents:["totalAmount","discount","timelineFreeTrial","timelineDebitDay","itemDetails"]})),!this.otpVerified&&this.displayConfig.customerInformation&&e("user-information",{customerExists:this.customerExists,disabled:this.isSubmitting,errors:{email:a.email,fullName:a.fullName}}),this.otpVerified&&this.displayConfig.customerInformation&&e("user-information-static",{variant:"otp",userInfo:{customerName:c.data.userInformation.fullName?.split(" ")[0],customerEmail:c.data.userInformation.email}}),e("div",{style:{display:"flex",flexDirection:"column",gap:"16px"}},e("payment-method-selector",{enabledPaymentMethods:this.filteredPaymentMethods,defaultSelected:this.currentPaymentMethod,disabled:this.isSubmitting,errorComponent:{showErrorComponent:this.displayConfig.errorMessage&&(this.currentPaymentError||this.isPaymentRejected()),alertTitle:this.errorMessage?.alertTitle,message:x.getErrorMessage(this.errorMessage)},country:c.data?.pricing?.country,installmentsError:a.installments,showDocument:(!this.otpVerified||this.otpVerified&&this.cardMode==="input")&&!o&&!this.isQrCodeVisible&&(k("documentNumber",this.currentRequiredFields)||k("documentType",this.currentRequiredFields)),documentTypeError:a.documentType,documentNumberError:a.documentNumber,cardError:this.cardError,customCSS:this.css}),!o&&(()=>{const t=k("bankId",this.currentRequiredFields);return t})()&&e("div",{class:"animated-component fade-in"},e("rebill-bank-selector",{banks:v("bank",this.allRequiredFields[this.currentPaymentMethod].original)||[],defaultSelectedBankId:n.bankId||"",error:a?.bankId}))),!o&&(!this.otpVerified||this.cardMode==="input")&&e(e.Fragment,null,this.displayConfig.billingAddress&&(k("billing-country",this.currentRequiredFields)||k("billing-state",this.currentRequiredFields)||k("billing-address",this.currentRequiredFields)||k("billing-city",this.currentRequiredFields)||k("billing-zip",this.currentRequiredFields))&&e("div",{class:"animated-component slide-in"},e("rebill-address",{disabled:this.isSubmitting,countryOptions:t,billingView:this.hasPrefilledAddress()?"form":"search",errors:{"billing-country":a["billing-country"],"billing-state":a["billing-state"],"billing-address":a["billing-address"],"billing-city":a["billing-city"],"billing-zip":a["billing-zip"]}})),this.displayConfig.customerInformation&&k("phoneNumber",this.currentRequiredFields)&&e("div",{class:"animated-component fade-in"},e("user-information-phone",{disabled:this.isSubmitting,error:a?.phoneNumber,countryCode:c.data.userInformation?.countryCode||c.data.country}))),o&&e("apm-checkout",{paymentMethod:this.currentPaymentMethod,referenceId:this.currentPaymentMethod===p.CASH?this.checkoutResponse?.result?.data?.referenceId:undefined,qrCodeData:this.currentPaymentMethod===p.BANK_TRANSFER?this.checkoutResponse?.result?.data?.qrCode:undefined,checkoutRequestId:this.checkoutResponse?.result?.checkoutRequestId,providerName:c.data.providerKey,expirationDate:(()=>{const t=new Date;t.setDate(t.getDate()+30);return t.toISOString()})(),onPaymentStatusChange:t=>this.handlePaymentStatusChange(t.detail),country:c.data?.pricing?.country,redirectUrl:this.checkoutResponse?.result?.data?.url,timeToRedirect:this.timeToRedirectAPM,bearerToken:this.checkoutResponse?.result?.data?.bearerToken}),this.displayConfig.checkoutSummary&&e("div",{class:"summary-price-details",style:{display:j(this.breakpoint,C.DESKTOP)?"block":"none"}},i({displayedComponents:["priceDetails"]})),this.displayConfig.submitButton&&!this.isQrCodeVisible&&e("div",{class:"payment-button-container"},e("payment-button",{paymentMethod:this.currentPaymentMethod,isLoading:this.isSubmitting,trialPeriodDays:c.data?.itemInformation?.trial?.trialPeriodDays,onSubmit:()=>{s()},redirectUrl:!!this.checkoutResponse?.result?.data?.url,timeToRedirect:this.timeToRedirectAPM,isDisabled:c.data.fetchingInstallments,country:c.data?.pricing?.country}),e("rebill-alert",{type:"secure",variant:"variant-secure",icon:"lock-outline",message:d.translate("otp.secureMessage")}))),this.displayConfig.sandboxMode&&c.isSandbox&&c.data.sessionType===h.CHECKOUT_LANDING&&!j(this.breakpoint,C.DESKTOP)&&e("rebill-mode-sandbox",null)),this.displayConfig.footer&&e("rebill-footer",{style:{marginTop:j(this.breakpoint,C.DESKTOP)?"16px":"auto"}}))),this.displayConfig.checkoutSummary&&e("div",{class:"right-section-checkout"},e("div",{class:"checkout-summary-section"},e("div",{class:"summary-desktop",style:{display:!j(this.breakpoint,C.DESKTOP)?"block":"none"}},i()))))}})))}static get watchers(){return{language:["handleLanguageChange"]}}};O.style=B;export{O as rebill_checkout};
|
|
2
|
+
//# sourceMappingURL=p-f6290439.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_DISPLAY_CONFIG","checkoutSummary","submitButton","billingAddress","customerInformation","discountCode","logo","footer","sandboxMode","processingPayment","successPage","errorMessage","PROVIDER_ENUM","getRequiredFields","async","currency","method","organizationId","requiredFieldsResponse","api","checkout","fields","mapRequiredFields","data","original","getAllRequiredFields","paymentMethods","sessionState","itemInformation","promises","map","paymentMethod","apiPaymentMethod","PaymentMethodMapper","mapToAPMPaymentMethod","pricing","country","result","organization","id","error","console","results","Promise","all","fieldsMap","forEach","getRequiredFieldsForMethod","allRequiredFields","storedFields","parseSession","session","JSON","parse","getCheckoutLandingSession","checkoutLandingSession","getCurerntIP","getSDKInstantItemSession","publicKey","instantProduct","instantPlan","response","sessions","createSDKInstantSessionRequest","generateIdempotencyKey","dataWithDescription","plan","description","product","instantSession","getSDKItemSession","productId","planId","createSDKItemSessionRequest","idempotencyKey","deviceId","clientIP","itemSession","getSessionToInitialize","type","SESSION_TYPE_ENUM","CHECKOUT_LANDING","INSTANT","SDK_ITEM","rebillCheckoutCss","RebillCheckout","display","oneClickCheckout","css","language","handleLanguageChange","newLanguage","oldLanguage","I18nService","changeLanguage","SessionStore","log","success","successRedirect","formChange","externalPayment","rejectedPaymentCard","rejectedPaymentAPM","countries","currentPaymentMethod","checkoutResponse","isSubmitting","isCardSubmitting","isCardSuccess","isAPMSubmitting","isAPMSuccess","storedCheckoutResults","Map","currentApmPaymentMethod","breakpoint","BREAKPOINT_ENUM","DESKTOP","showRefreshModal","cardError","showCardInvalid","initialData","currentRequiredFields","customerExists","showOtp","otpVerified","responseCheckoutCard","cardMode","formElement","emailDebounceTimeout","injectedStyleElement","displayConfig","this","parsed","warn","parsedCustomerInformation","filteredPaymentMethods","allPaymentMethods","excludedMethods","excludePaymentMethods","length","filter","includes","getCombinedUserData","formData","sessionUserInfo","userInformation","email","fullName","countryCodePhoneNumber","phoneNumber","countryCode","number","documentType","documentNumber","address","state","city","zip","injectCustomCSS","cleanupInjectedCSS","cssId","Date","now","Math","random","toString","substr","startsWith","linkElement","document","createElement","rel","href","setAttribute","head","appendChild","styleElement","textContent","remove","timeToRedirectAPM","resizeHandler","newBreakpoint","getBreakpoint","window","innerWidth","disconnectedCallback","removeEventListener","clearTimeout","componentWillLoad","addEventListener","initializeI18nWithSessionLanguage","sessionToInitialize","initializeSession","payment","sessionRefreshed","GoogleMapsService","loadGoogleMapsScript","getCountries","getInitialData","paymentStatus","PaymentStatusE","REJECTED","APPROVED","PAYMENT_METHOD_ENUM","BANK_TRANSFER","bankTransferMethod","find","changePaymentMethod","setPaymentMethodSelected","customers","exists","prefilledData","then","res","sessionOnChange","componentWillUpdate","clearCheckoutResponse","CARD","setCardMode","CASH","paymentMethodSelected","emit","updateCurrentSessionPaymentMethod","sessionId","paymentMethodName","paymentMethodType","setProviderKey","providerKey","DECIDIR","uuid","crypto","randomUUID","fingerprintResponse","fingerPrint","getFingerPrint","script","scriptElement","innerHTML","body","currentPaymentError","handlePaymentMethodSelected","event","stopPropagation","detail","resetValidation","handleSubmit","handleSubmitCard","handleSubmitAPM","handleFormChange","isValid","errors","Object","keys","undefined","combinedData","cardTokenId","cardId","cardInformation","checkoutRequest","transaction","quantity","discount","couponCode","installments","Number","selectedInstallment","installment","SESSION_ITEM_TYPE_ENUM","PLAN","saveCard","customer","firstName","split","lastName","slice","join","phone","billingDetails","lineOne","zipCode","identification","value","customAttributes","metadata","paymentMetadata","createCardCheckoutRequest","accessToken","setCheckoutResponse","status","toUpperCase","CheckoutStatusE","setPaymentStatus","lastFour","cardLastFour","message","apmPaymentMethod","redirect","approved","location","origin","rejected","bank","bankId","code","createAPMCheckoutRequest","set","date","paymentDate","createdAt","traceId","paymentReference","alertTitle","APM_MENSAJE_ERROR","submit","handlePaymentStatusChange","statusData","isCompleted","STATUS_REQ_CHECKOUT_APM","handleInputChange","trim","clearCustomerIdAndToken","setTimeout","validationSchema","yup.string","when","is","schema","matches","required","otherwise","notRequired","isValidPhoneNumber","isFieldRequired","equals","isAvailableInstallments","min","card","hasPrefilledAddress","billingFields","some","key","isQrCodeVisible","qrCode","isPaymentApproved","handleRebillAccountClick","handleReturnForm","handleSignOut","clearUserInformation","handleCodeVerified","isPaymentRejected","render","countryOptions","label","isoCountryCode","renderRebillSummary","props","h","totalAmount","total","itemTitle","_session","getTitle","itemDescription","getDescription","itemAmount","subtotal","allowCoupon","getAllowCoupon","currentBreakpoint","planFrequency","getPlanFrequency","planFrequencyCount","getPlanFrequencyCount","discountType","discountedPercentage","discountDuration","discountAmount","isInitialized","Fragment","style","typePaymentMethod","paymentMethodMetadata","referenceNumber","onSuccessRedirect","payload","trialPeriodDays","trial","debitDay","planAmount","isSandbox","sessionType","isBreakpointBelow","class","ref","el","onSubmit","args","onChange","renderForm","isAPMCheckoutVisible","displayedComponents","disabled","variant","userInfo","customerName","customerEmail","flexDirection","gap","enabledPaymentMethods","defaultSelected","errorComponent","showErrorComponent","PaymentErrorMapper","getErrorMessage","installmentsError","showDocument","documentTypeError","documentNumberError","customCSS","isBankRequired","banks","getFieldValues","defaultSelectedBankId","billingView","referenceId","qrCodeData","checkoutRequestId","providerName","expirationDate","setDate","getDate","toISOString","onPaymentStatusChange","redirectUrl","url","timeToRedirect","bearerToken","isLoading","isDisabled","fetchingInstallments","icon","translate","marginTop"],"sources":["src/models/display.model.ts","src/models/enums/provider.enum.ts","src/components/checkout/utils/getRequiredFields.ts","src/components/checkout/utils/getSessionToInitialize.ts","src/components/checkout/rebill-checkout.css?tag=rebill-checkout","src/components/checkout/rebill-checkout.tsx"],"sourcesContent":["import { PAYMENT_METHOD_ENUM } from './enums/payment-methods.enum';\n\n/**\n * Interface that defines which sections of the checkout should be displayed\n */\nexport interface DisplayConfig {\n /**\n * Whether to show the checkout summary section\n * @default true\n */\n checkoutSummary?: boolean;\n\n /**\n * Whether to show the submit/payment button\n * @default true\n */\n submitButton?: boolean;\n\n /**\n * Whether to show the billing address section\n * @default true\n */\n billingAddress?: boolean;\n\n /**\n * Whether to show the customer information section\n * @default true\n */\n customerInformation?: boolean;\n\n /**\n * Whether to show the discount code section\n * @default true\n */\n discountCode?: boolean;\n\n /**\n * Whether to show the organization logo\n * @default true\n */\n logo?: boolean;\n\n /**\n * Whether to show the footer\n * @default true\n */\n footer?: boolean;\n\n /**\n * Whether to show the sandbox mode interactive tools (test cards and documentation links)\n * @default true\n */\n sandboxMode?: boolean;\n\n /**\n * Array of payment methods to exclude from being displayed in the checkout\n * @default undefined\n * @example ['card', 'cash']\n */\n excludePaymentMethods?: PAYMENT_METHOD_ENUM[];\n\n /**\n * Whether to show the processing payment screen (loading state)\n * @default true\n */\n processingPayment?: boolean;\n\n /**\n * Whether to show the success page after a successful payment\n * @default true\n */\n successPage?: boolean;\n\n /**\n * Whether to show the error message when a payment fails\n * @default true\n */\n errorMessage?: boolean;\n}\n\n/**\n * Default display configuration with all sections enabled\n */\nexport const DEFAULT_DISPLAY_CONFIG: DisplayConfig = {\n checkoutSummary: true,\n submitButton: true,\n billingAddress: true,\n customerInformation: true,\n discountCode: true,\n logo: true,\n footer: true,\n sandboxMode: true,\n processingPayment: true,\n successPage: true,\n errorMessage: true,\n};\n","export enum PROVIDER_ENUM {\n BAMBOO = 'bamboo_payment',\n FISERV = 'fiserv',\n KUSHKI = 'kushki',\n PAYWAY = 'payway',\n DOCK = 'dock',\n KLAP = 'klap',\n MOVII = 'movii',\n STRIPE = 'stripe',\n DECIDIR = 'decidir',\n}\n","import { api } from '../../../api';\nimport { PAYMENT_METHOD_ENUM } from '../../../models/enums/payment-methods.enum';\nimport { sessionState } from '../../../store/session.store';\nimport { PaymentMethodMapper } from '../../../utils/payment-method-mapper';\nimport { mapRequiredFields, RequiredField } from '../../../utils/required-fields-mappers';\n\nexport interface RequiredFieldsResult {\n fields: string[];\n original: RequiredField[];\n}\n\nexport interface AllRequiredFieldsMap {\n [key: string]: RequiredFieldsResult;\n}\n\nconst getRequiredFields = async (\n currency: string,\n method: string,\n organizationId: string,\n): Promise<RequiredFieldsResult> => {\n const requiredFieldsResponse = await api.checkout.getRequiredFields(\n {\n currency,\n method,\n },\n organizationId,\n );\n\n return {\n fields: mapRequiredFields(requiredFieldsResponse.data),\n original: requiredFieldsResponse.data,\n };\n};\n\nexport const getAllRequiredFields = async (): Promise<AllRequiredFieldsMap> => {\n const paymentMethods = sessionState.data?.itemInformation?.paymentMethods;\n const promises = paymentMethods.map(async paymentMethod => {\n try {\n const apiPaymentMethod = PaymentMethodMapper.mapToAPMPaymentMethod(\n paymentMethod,\n sessionState.data?.pricing?.country,\n );\n\n const result = await getRequiredFields(\n sessionState.data.pricing.currency,\n apiPaymentMethod,\n sessionState.data.organization.id,\n );\n\n return {\n paymentMethod,\n ...result,\n };\n } catch (error) {\n console.error(`Error getting required fields for ${paymentMethod}:`, error);\n return {\n paymentMethod,\n fields: [],\n original: [],\n };\n }\n });\n\n const results = await Promise.all(promises);\n const fieldsMap: AllRequiredFieldsMap = {};\n\n results.forEach(result => {\n fieldsMap[result.paymentMethod] = {\n fields: result.fields,\n original: result.original,\n };\n });\n return fieldsMap;\n};\n\nexport const getRequiredFieldsForMethod = (\n paymentMethod: PAYMENT_METHOD_ENUM,\n allRequiredFields: AllRequiredFieldsMap,\n): RequiredFieldsResult => {\n const storedFields = allRequiredFields[paymentMethod];\n if (storedFields) {\n return storedFields;\n } else {\n return {\n fields: [],\n original: [],\n };\n }\n};\n","import { api } from 'api';\nimport { SESSION_TYPE_ENUM } from 'models/enums/session.enum';\nimport { generateIdempotencyKey } from 'utils/generate-idempotency-key';\n\nconst parseSession = (session: string) =>\n typeof session === 'string' ? JSON.parse(session) : session;\n\nconst getCheckoutLandingSession = (checkoutLandingSession: string) => {\n return parseSession(checkoutLandingSession);\n};\n\n// TODO: Remove this\nconst getCurerntIP = () => {\n return '190.188.127.250';\n};\n\nconst getSDKInstantItemSession = async ({\n publicKey,\n instantProduct,\n instantPlan,\n}: {\n publicKey: string;\n instantProduct?: string;\n instantPlan?: string;\n}) => {\n const session = parseSession(instantProduct ? instantProduct : instantPlan);\n const response = await api.sessions.createSDKInstantSessionRequest(\n session,\n generateIdempotencyKey(),\n getCurerntIP(),\n publicKey,\n );\n const dataWithDescription = {\n ...response.data,\n ...(response.data.plan && {\n plan: { ...response.data.plan, description: session.description || [] },\n }),\n ...(response.data.product && {\n product: { ...response.data.product, description: session.description || [] },\n }),\n };\n const instantSession = dataWithDescription;\n return instantSession;\n};\n\nconst getSDKItemSession = async ({\n publicKey,\n productId,\n planId,\n}: {\n publicKey: string;\n productId?: string;\n planId?: string;\n}) => {\n const response = await api.sessions.createSDKItemSessionRequest({\n ...(productId ? { productId } : {}),\n ...(planId ? { planId } : {}),\n idempotencyKey: generateIdempotencyKey(),\n deviceId: '123123123',\n clientIP: getCurerntIP(),\n publicKey,\n });\n\n const itemSession = response.data;\n return itemSession;\n};\n\nexport const getSessionToInitialize = async ({\n publicKey,\n checkoutLandingSession,\n instantProduct,\n instantPlan,\n productId,\n planId,\n}: {\n publicKey: string;\n checkoutLandingSession?: string;\n instantProduct?: string;\n instantPlan?: string;\n productId?: string;\n planId?: string;\n}) => {\n if (checkoutLandingSession) {\n const session = await getCheckoutLandingSession(checkoutLandingSession);\n return { session, type: SESSION_TYPE_ENUM.CHECKOUT_LANDING };\n }\n if (instantProduct || instantPlan) {\n const session = await getSDKInstantItemSession({ publicKey, instantProduct, instantPlan });\n return { session, type: SESSION_TYPE_ENUM.INSTANT };\n }\n if (productId || planId) {\n const session = await getSDKItemSession({ publicKey, productId, planId });\n return { session, type: SESSION_TYPE_ENUM.SDK_ITEM };\n }\n};\n","@media (max-width: 1024px) {\n .rebill-checkout {\n width: 100%;\n flex-direction: column;\n gap: 0;\n justify-content: flex-start;\n background: var(--rebill-color-background);\n padding: 20px;\n }\n .right-section-checkout .left-section {\n width: 100%;\n height: 100%;\n background: var(--rebill-color-background);\n }\n .checkout-form-section {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n gap: 24px;\n height: 100%;\n }\n .otp-container {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n gap: 24px;\n }\n\n /* Full width layout when summary is hidden - Mobile/Tablet */\n .rebill-checkout.full-width-layout .left-section {\n width: 100%;\n }\n\n .rebill-checkout.full-width-layout .left-section-container {\n max-width: none;\n width: 100%;\n }\n}\n\n@media (min-width: 1025px) {\n .rebill-checkout {\n width: 100%;\n min-height: 600px;\n display: flex;\n flex-direction: row;\n justify-content: center;\n overflow-y: auto;\n }\n\n .left-section {\n display: flex;\n width: 60%;\n background: var(--rebill-color-background-left);\n justify-content: space-around;\n }\n\n .right-section-checkout {\n display: flex;\n padding-top: 72px;\n width: 40%;\n background: var(--rebill-color-background-right);\n position: sticky;\n top: 0;\n\n justify-content: center;\n }\n\n .checkout-form-section {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n margin-bottom: 36px;\n gap: 32px;\n }\n .left-section-container {\n max-width: 450px;\n min-width: 450px;\n margin: 2.5rem 2rem 1.5rem 2rem;\n display: flex;\n flex-direction: column;\n }\n\n .checkout-summary-section {\n max-width: 450px;\n min-width: 350px;\n margin: 0rem 2rem;\n background: var(--rebill-color-background-right);\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n width: 100%;\n }\n\n .checkout-form-section user-information,\n .checkout-form-section payment-method-selector,\n .checkout-form-section rebill-address,\n .checkout-summary-section rebill-summary {\n width: 100%;\n }\n\n /* Full width layout when summary is hidden - Desktop */\n .rebill-checkout.full-width-layout .left-section {\n width: 100%;\n justify-content: stretch;\n }\n\n .rebill-checkout.full-width-layout .left-section-container {\n max-width: none;\n min-width: auto;\n width: 100%;\n margin: 2.5rem 2rem 1.5rem 2rem;\n }\n\n /* Google Maps Autocomplete Styles */\n .pac-container {\n border-radius: 4px;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n border: 1px solid #e0e0e0;\n margin-top: 4px;\n font-family: inherit;\n }\n\n .pac-item {\n padding: 10px 12px;\n cursor: pointer;\n border-top: none;\n }\n\n .pac-item:first-child {\n border-top: none;\n }\n\n .pac-item:hover {\n background-color: #f5f5f5;\n }\n\n .pac-item-query {\n font-weight: 500;\n }\n\n .pac-icon {\n display: none;\n }\n}\n\n.payment-button-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-bottom: 16px;\n}\n/* Animaciones para componentes condicionales */\n.animated-component {\n transition: all 0.3s ease-in-out;\n overflow: visible;\n}\n\n/* Keep overflow hidden only for sliding height animations */\n/* .animated-component.slide-in {\n overflow: hidden;\n} */\n\n.fade-in {\n animation: fadeIn 0.4s ease-in-out;\n}\n\n.slide-in {\n animation: slideIn 0.5s ease-out;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateX(-20px);\n max-height: 0;\n }\n to {\n opacity: 1;\n transform: translateX(0);\n max-height: 450px;\n }\n}\n\n/* Animación para cuando se ocultan los componentes */\n.animated-component.hide {\n animation: fadeOut 0.3s ease-in-out forwards;\n}\n\n@keyframes fadeOut {\n from {\n opacity: 1;\n transform: translateY(0);\n }\n to {\n opacity: 0;\n transform: translateY(20px);\n }\n}\n\n/* Test Mode Chip Positioning */\nrebill-mode-sandbox {\n position: fixed;\n bottom: 50px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n}\n\n/* Ensure the chip is visible on all screen sizes */\n@media (max-width: 1024px) {\n rebill-test-mode-chip {\n bottom: 46px;\n }\n}\n\n@media (min-width: 1025px) {\n rebill-test-mode-chip {\n bottom: 46px;\n }\n}\n.mode-sandbox-mobile-container {\n display: flex;\n align-items: center;\n width: 100%;\n\n padding: 0;\n margin: 0;\n box-sizing: border-box;\n}\n\n/* Desktop grande - mantener tamaños originales */\n@media (min-width: 1451px) {\n .left-section-container {\n min-width: 450px;\n margin: 2.5rem 5rem 1.5rem 5rem;\n }\n\n .checkout-summary-section {\n min-width: 450px;\n margin: 0rem 5rem;\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport * as yup from 'yup';\nimport { api, Country } from '../../api';\nimport {\n CheckoutStatusE,\n CreateAPMCheckoutRequest,\n CreateAPMCheckoutResponse,\n CreateCardCheckoutRequest,\n CreateCardCheckoutResponse,\n} from '../../api/entities/checkout/types';\nimport '../../components/checkout/apm/apm-checkout/apm-checkout';\nimport '../../components/checkout/payment-button/payment-button';\nimport '../../components/checkout/processing-payment/processing-payment';\nimport '../../components/checkout/summary/summary';\nimport '../../components/renewal/user-information-static/user-information-static';\nimport '../../components/shared/organization-logo/organization-logo';\nimport { initializeI18nWithSessionLanguage } from '../../i18n/i18n.config';\nimport { I18nService } from '../../i18n/i18n.service';\nimport {\n DEFAULT_DISPLAY_CONFIG,\n DisplayConfig,\n SESSION_ITEM_TYPE_ENUM,\n SESSION_TYPE_ENUM,\n} from '../../models';\nimport { ErrorCodeTypeE } from '../../models/enums/error-code-type.enum';\nimport { LOCALES_ENUM } from '../../models/enums/locales.enum';\nimport { PaymentMethodNameE } from '../../models/enums/payment-method-name.enum';\nimport { PAYMENT_METHOD_ENUM } from '../../models/enums/payment-methods.enum';\nimport { PaymentStatusE } from '../../models/enums/payment-status.enum';\nimport { PROVIDER_ENUM } from '../../models/enums/provider.enum';\nimport { STATUS_REQ_CHECKOUT_APM } from '../../models/enums/status-req-checkout-apm.enum';\nimport {\n onChange as sessionOnChange,\n sessionState,\n SessionStore,\n UserInformation,\n} from '../../store/session.store';\nimport { BREAKPOINT_ENUM, getBreakpoint, isBreakpointBelow } from '../../utils/breakpoint';\nimport { generateIdempotencyKey } from '../../utils/generate-idempotency-key';\nimport { GoogleMapsService } from '../../utils/google-maps.service';\nimport { PaymentErrorMapper, PaymentErrorResponse } from '../../utils/payment-error-mapper';\nimport { PaymentMethodMapper } from '../../utils/payment-method-mapper';\nimport { getFieldValues, isFieldRequired } from '../../utils/required-fields-mappers';\nimport '../shared/mode-sandbox/mode-sandbox';\nimport { CardError } from './payment-method-selector/payment-method-selector';\nimport {\n AllRequiredFieldsMap,\n getAllRequiredFields,\n getRequiredFieldsForMethod,\n} from './utils/getRequiredFields';\nimport { getSessionToInitialize } from './utils/getSessionToInitialize';\n\n@Component({\n tag: 'rebill-checkout',\n styleUrl: 'rebill-checkout.css',\n shadow: false,\n})\nexport class RebillCheckout {\n // Public properties\n /**\n * The ID of the item (product or plan) to be purchased\n */\n @Prop() productId?: string;\n @Prop() planId?: string;\n\n /**\n * The organization's public key\n */\n @Prop() publicKey!: string;\n\n /**\n * Instant product data for creating checkout on-the-fly (alternative to externalSession)\n */\n @Prop() instantProduct?: string;\n\n /**\n * Instant plan data for creating checkout on-the-fly (alternative to externalSession)\n */\n @Prop() instantPlan?: string;\n\n /**\n * Display object that determines the sections to be displayed in the checkout\n */\n @Prop() display?: DisplayConfig | string;\n\n /**\n * Customer information to override default user information when sections are hidden\n * This data will be used in the submit process when provided\n */\n @Prop() customerInformation?: UserInformation | string;\n\n /**\n * One click checkout feature availability\n * @default true\n */\n @Prop() oneClickCheckout: boolean = true;\n\n /**\n * Custom CSS to be injected into the component\n * Can be a string of CSS or a URL to a CSS file\n */\n @Prop() css?: string;\n\n /**\n * Language code for the application display\n * If not provided, the language will be determined by the current session logic\n * Supported languages: 'en', 'es', 'pt'\n */\n @Prop() language?: string;\n\n /**\n * Watch for language prop changes and update i18n accordingly\n */\n @Watch('language')\n async handleLanguageChange(newLanguage: string, oldLanguage: string) {\n // Only update if the language actually changed and is not empty\n if (newLanguage && newLanguage !== oldLanguage) {\n try {\n await I18nService.changeLanguage(newLanguage);\n SessionStore.changeLanguage(newLanguage as LOCALES_ENUM);\n console.log(`[RebillCheckout] Language changed from ${oldLanguage} to ${newLanguage}`);\n } catch (error) {\n console.error('[RebillCheckout] Failed to change language:', error);\n }\n }\n }\n\n /**\n * Event when there is an error in the payment process\n */\n @Event() error: EventEmitter<any>;\n\n /**\n * Event when the payment is successful\n */\n @Event() success: EventEmitter<any>;\n\n @Event() successRedirect: EventEmitter<any>;\n\n /**\n * Event when the form data changes\n */\n @Event() formChange: EventEmitter<{\n data: any;\n isValid: boolean;\n errors?: any;\n }>;\n\n // Internal\n @Prop() checkoutLandingSession?: string;\n @Prop() externalPayment?: string;\n @State() rejectedPaymentCard: boolean = false;\n @State() rejectedPaymentAPM: boolean = false;\n @State() countries: Country[] = [];\n @State() currentPaymentMethod: PAYMENT_METHOD_ENUM;\n @State() checkoutResponse: CreateAPMCheckoutResponse | null = null;\n @State() isSubmitting: boolean = false;\n @State() isCardSubmitting: boolean = false;\n @State() isCardSuccess: boolean = false;\n @State() isAPMSubmitting: boolean = false;\n @State() isAPMSuccess: boolean = false;\n @State() storedCheckoutResults: Map<PAYMENT_METHOD_ENUM, CreateAPMCheckoutResponse> = new Map();\n @State() errorMessage: PaymentErrorResponse | null = null;\n @State() currentApmPaymentMethod: PaymentMethodNameE | null = null;\n @State() breakpoint: BREAKPOINT_ENUM = BREAKPOINT_ENUM.DESKTOP;\n @State() showRefreshModal: boolean = false;\n @State() cardError: CardError = {\n showCardInvalid: false,\n type: null,\n };\n @State() initialData: any = {};\n @State() allRequiredFields: AllRequiredFieldsMap = {};\n @State() currentRequiredFields: string[] = [];\n @State() customerExists: boolean = false;\n @State() showOtp: boolean = false;\n @State() otpVerified: boolean = false;\n @State() responseCheckoutCard: CreateCardCheckoutResponse | null = null;\n @State() cardMode: 'input' | 'select' | null = null;\n private formElement: any;\n private emailDebounceTimeout: number | null = null;\n private injectedStyleElement: HTMLStyleElement | null = null;\n\n /**\n * Get the display configuration, merging user config with defaults\n */\n private get displayConfig(): DisplayConfig {\n if (!this.display) {\n return DEFAULT_DISPLAY_CONFIG;\n }\n\n // If display is a string, try to parse it as JSON\n if (typeof this.display === 'string') {\n try {\n const parsed = JSON.parse(this.display);\n return { ...DEFAULT_DISPLAY_CONFIG, ...parsed };\n } catch (error) {\n console.warn('Invalid display configuration string, using defaults:', error);\n return DEFAULT_DISPLAY_CONFIG;\n }\n }\n\n // If display is an object, merge with defaults\n return { ...DEFAULT_DISPLAY_CONFIG, ...this.display };\n }\n\n /**\n * Get the customer information configuration, parsing if needed\n */\n private get parsedCustomerInformation(): UserInformation | null {\n if (!this.customerInformation) {\n return null;\n }\n\n // If customerInformation is a string, try to parse it as JSON\n if (typeof this.customerInformation === 'string') {\n try {\n return JSON.parse(this.customerInformation);\n } catch (error) {\n console.warn('Invalid customerInformation configuration string, ignoring:', error);\n return null;\n }\n }\n\n // If customerInformation is an object, return as is\n return this.customerInformation;\n }\n\n /**\n * Get filtered payment methods based on excludePaymentMethods configuration\n */\n private get filteredPaymentMethods(): PAYMENT_METHOD_ENUM[] {\n const allPaymentMethods = sessionState.data?.itemInformation?.paymentMethods || [];\n const excludedMethods = this.displayConfig.excludePaymentMethods;\n\n // If no exclusion list, return all payment methods\n if (!excludedMethods || excludedMethods.length === 0) {\n return allPaymentMethods;\n }\n\n // Filter out excluded payment methods\n return allPaymentMethods.filter(method => !excludedMethods.includes(method));\n }\n\n /**\n * Get combined user data with priority: formData > customerInformation > sessionState.userInformation\n */\n private getCombinedUserData(formData: any = {}): any {\n const sessionUserInfo = sessionState.data.userInformation;\n const customerInformation = this.parsedCustomerInformation;\n\n return {\n // Email\n 'email': formData.email || customerInformation?.email || sessionUserInfo.email,\n\n // Full name\n 'fullName': formData.fullName || customerInformation?.fullName || sessionUserInfo.fullName,\n\n // Phone\n 'countryCodePhoneNumber':\n formData.countryCodePhoneNumber ||\n customerInformation?.phoneNumber?.countryCode ||\n customerInformation?.countryCode ||\n sessionUserInfo.countryCode,\n 'phoneNumber':\n formData.phoneNumber ||\n customerInformation?.phoneNumber?.number ||\n sessionUserInfo.phoneNumber,\n // Document\n 'documentType':\n formData.documentType || customerInformation?.documentType || sessionUserInfo.documentType,\n 'documentNumber':\n formData.documentNumber ||\n customerInformation?.documentNumber ||\n sessionUserInfo.documentNumber,\n\n // Billing address\n 'billing-country':\n formData['billing-country'] ||\n customerInformation?.address?.billingAddress?.country ||\n sessionUserInfo.address?.billingAddress?.country,\n 'billing-state':\n formData['billing-state'] ||\n customerInformation?.address?.billingAddress?.state ||\n sessionUserInfo.address?.billingAddress?.state,\n 'billing-address':\n formData['billing-address'] ||\n customerInformation?.address?.billingAddress?.address ||\n sessionUserInfo.address?.billingAddress?.address,\n 'billing-city':\n formData['billing-city'] ||\n customerInformation?.address?.billingAddress?.city ||\n sessionUserInfo.address?.billingAddress?.city,\n 'billing-zip':\n formData['billing-zip'] ||\n customerInformation?.address?.billingAddress?.zip ||\n sessionUserInfo.address?.billingAddress?.zip,\n };\n }\n\n /**\n * Inject custom CSS into the document\n */\n private injectCustomCSS() {\n if (!this.css) {\n return;\n }\n\n // Clean up any existing injected CSS\n this.cleanupInjectedCSS();\n\n // Create a unique ID for this component's CSS\n const cssId = `rebill-checkout-css-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n // Check if CSS is a URL or raw CSS\n if (\n this.css.startsWith('http://') ||\n this.css.startsWith('https://') ||\n this.css.startsWith('//')\n ) {\n // Load CSS from URL\n const linkElement = document.createElement('link');\n linkElement.rel = 'stylesheet';\n linkElement.href = this.css;\n linkElement.id = cssId;\n linkElement.setAttribute('data-rebill-injected', 'true');\n document.head.appendChild(linkElement);\n this.injectedStyleElement = linkElement as any; // Store reference for cleanup\n } else {\n // Inject raw CSS\n const styleElement = document.createElement('style');\n styleElement.id = cssId;\n styleElement.setAttribute('data-rebill-injected', 'true');\n styleElement.textContent = this.css;\n document.head.appendChild(styleElement);\n this.injectedStyleElement = styleElement;\n }\n }\n\n /**\n * Clean up injected CSS\n */\n private cleanupInjectedCSS() {\n if (this.injectedStyleElement) {\n try {\n this.injectedStyleElement.remove();\n } catch (error) {\n console.warn('Error removing injected CSS:', error);\n }\n this.injectedStyleElement = null;\n }\n }\n\n private timeToRedirectAPM: number = 5000;\n resizeHandler = () => {\n const newBreakpoint = getBreakpoint(window.innerWidth);\n if (newBreakpoint !== this.breakpoint) {\n this.breakpoint = newBreakpoint;\n }\n };\n\n disconnectedCallback() {\n window.removeEventListener('resize', this.resizeHandler);\n if (this.emailDebounceTimeout) {\n clearTimeout(this.emailDebounceTimeout);\n this.emailDebounceTimeout = null;\n }\n this.cleanupInjectedCSS();\n }\n\n async componentWillLoad() {\n try {\n this.resizeHandler();\n window.addEventListener('resize', this.resizeHandler);\n\n // Inject custom CSS if provided\n this.injectCustomCSS();\n\n // Initialize language - use prop if provided, otherwise use current session logic\n if (this.language) {\n await I18nService.changeLanguage(this.language);\n } else {\n initializeI18nWithSessionLanguage();\n }\n\n const { session: sessionToInitialize, type } = await getSessionToInitialize({\n publicKey: this.publicKey,\n checkoutLandingSession: this.checkoutLandingSession,\n instantProduct: this.instantProduct,\n instantPlan: this.instantPlan,\n productId: this.productId,\n planId: this.planId,\n });\n\n SessionStore.initializeSession({\n session: sessionToInitialize,\n type,\n payment:\n typeof this.externalPayment === 'string'\n ? JSON.parse(this.externalPayment)\n : this.externalPayment,\n });\n if (sessionState.sessionRefreshed) {\n this.showRefreshModal = true;\n }\n\n GoogleMapsService.loadGoogleMapsScript();\n\n const response = await api.data.getCountries();\n this.countries = response.data;\n\n this.initialData = this.getInitialData();\n\n this.allRequiredFields = await getAllRequiredFields();\n if (this.filteredPaymentMethods.length > 0) {\n if (\n sessionState.data.paymentStatus === PaymentStatusE.REJECTED ||\n (sessionState.data.paymentStatus === PaymentStatusE.APPROVED &&\n this.filteredPaymentMethods.includes(PAYMENT_METHOD_ENUM.BANK_TRANSFER))\n ) {\n //buscar el metodo de pago bank_transfer\n const bankTransferMethod = this.filteredPaymentMethods.find(\n method => method === PAYMENT_METHOD_ENUM.BANK_TRANSFER,\n );\n if (bankTransferMethod) {\n this.changePaymentMethod(bankTransferMethod);\n SessionStore.setPaymentMethodSelected(bankTransferMethod);\n }\n } else {\n // En caso contrario, usar el primer método disponible\n this.changePaymentMethod(this.filteredPaymentMethods[0]);\n }\n }\n if (this.oneClickCheckout) {\n api.customers\n .exists({ email: sessionState.data?.prefilledData?.email }, this.publicKey)\n .then(res => {\n this.customerExists = res.data.exists;\n });\n }\n\n this.cardMode = sessionState.cardMode;\n sessionOnChange('cardMode', () => {\n this.cardMode = sessionState.cardMode;\n });\n } catch (error) {\n console.error('Error initializing checkout:', error);\n }\n }\n\n componentWillUpdate() {\n // Re-inject CSS when css prop changes\n this.injectCustomCSS();\n }\n\n private async changePaymentMethod(paymentMethod: PAYMENT_METHOD_ENUM) {\n if (\n paymentMethod !== this.currentPaymentMethod &&\n this.filteredPaymentMethods.includes(paymentMethod)\n ) {\n // Store current checkout result if switching away from a fulfilled APM method\n // Clear any existing checkout response when changing payment methods\n if (this.checkoutResponse) {\n this.checkoutResponse = null;\n SessionStore.clearCheckoutResponse();\n }\n\n this.currentPaymentMethod = paymentMethod;\n SessionStore.setPaymentMethodSelected(paymentMethod);\n\n // Reset cardMode to 'input' when switching to non-card payment methods\n if (paymentMethod !== PAYMENT_METHOD_ENUM.CARD) {\n this.cardMode = 'input';\n SessionStore.setCardMode('input');\n }\n\n // Reset loading state when changing payment methods\n this.isSubmitting = false;\n // Map and store the APM payment method\n this.currentApmPaymentMethod = PaymentMethodMapper.mapToAPMPaymentMethod(\n paymentMethod,\n sessionState.data?.pricing?.country,\n );\n // // Restore stored result if switching back to a previously fulfilled APM method\n // Clear checkout response when switching to non-APM methods\n if (\n paymentMethod !== PAYMENT_METHOD_ENUM.CASH &&\n paymentMethod !== PAYMENT_METHOD_ENUM.BANK_TRANSFER\n ) {\n this.checkoutResponse = null;\n SessionStore.clearCheckoutResponse();\n } else {\n // For APM methods, always clear the checkout response to force new generation\n this.checkoutResponse = null;\n SessionStore.clearCheckoutResponse();\n }\n\n this.paymentMethodSelected.emit(paymentMethod);\n try {\n // Call required fields endpoint\n this.currentRequiredFields = getRequiredFieldsForMethod(\n paymentMethod,\n this.allRequiredFields,\n ).fields;\n\n const response = await api.sessions.updateCurrentSessionPaymentMethod(\n sessionState.data.sessionId,\n {\n paymentMethodName: PaymentMethodMapper.mapToAPMPaymentMethod(\n paymentMethod,\n sessionState.data.pricing.country,\n ),\n paymentMethodType: paymentMethod,\n currency: sessionState.data.pricing.currency,\n },\n );\n SessionStore.setProviderKey(response.providerKey);\n if (\n response.providerKey === PROVIDER_ENUM.DECIDIR ||\n sessionState.data.providerKey === PROVIDER_ENUM.DECIDIR\n ) {\n const uuid = crypto.randomUUID();\n const fingerprintResponse = await api.fingerPrint.getFingerPrint(uuid);\n sessionState.deviceId = uuid;\n const script = fingerprintResponse.result.script;\n const scriptElement = document.createElement('script');\n scriptElement.innerHTML = script;\n document.body.appendChild(scriptElement);\n }\n } catch (error) {\n console.error('Failed to update payment method or get required fields:', error);\n }\n }\n }\n\n private get currentPaymentError(): boolean {\n if (this.currentPaymentMethod === PAYMENT_METHOD_ENUM.CARD) {\n return this.rejectedPaymentCard;\n } else if (\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.CASH ||\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER\n ) {\n return this.rejectedPaymentAPM;\n }\n return false;\n }\n\n @Event() paymentMethodSelected: EventEmitter<PAYMENT_METHOD_ENUM>;\n\n @Listen('paymentMethodSelected')\n async handlePaymentMethodSelected(event: CustomEvent<PAYMENT_METHOD_ENUM>) {\n event.stopPropagation();\n const paymentMethod = event.detail;\n\n // Only make API call if payment method actually changed\n this.changePaymentMethod(paymentMethod);\n if (this.formElement) {\n this.formElement.resetValidation();\n }\n }\n\n private async handleSubmit(event: CustomEvent) {\n if (this.isSubmitting) {\n return;\n }\n this.rejectedPaymentCard = false;\n this.rejectedPaymentAPM = false;\n if (this.currentPaymentMethod === PAYMENT_METHOD_ENUM.CARD) {\n this.handleSubmitCard(event);\n } else if (\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.CASH ||\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER\n ) {\n this.handleSubmitAPM(event);\n }\n }\n\n private handleFormChange(event: CustomEvent) {\n const formData = event.detail;\n\n // Validate the form to check if it's valid\n let isValid = true;\n let errors = {};\n\n if (this.formElement?.errors) {\n errors = this.formElement.errors;\n isValid = Object.keys(errors).length === 0;\n }\n\n this.formChange.emit({\n data: formData,\n isValid,\n errors: Object.keys(errors).length > 0 ? errors : undefined,\n });\n }\n\n private async handleSubmitCard(event: CustomEvent) {\n const formData = event.detail;\n const combinedData = this.getCombinedUserData(formData);\n\n if (!sessionState.data.cardTokenId && !sessionState.data.cardId) {\n this.cardError = {\n showCardInvalid: true,\n type: 'card_error',\n };\n return;\n }\n\n if (!sessionState.data.cardInformation && !sessionState.data.cardId) {\n this.cardError = {\n showCardInvalid: true,\n type: 'tokenization_error',\n };\n return;\n }\n this.cardError = {\n showCardInvalid: false,\n type: null,\n };\n const checkoutRequest: CreateCardCheckoutRequest = {\n transaction: {\n quantity: 1,\n ...(sessionState.data.discount.couponCode && {\n couponCode: sessionState.data.discount.couponCode,\n }),\n },\n installments: Number(\n formData.installments ||\n sessionState.data.cardInformation?.installments?.selectedInstallment?.installment,\n ),\n ...(sessionState.data.cardTokenId && {\n cardTokenId: sessionState.data.cardTokenId,\n ...(sessionState.data?.itemInformation?.type !== SESSION_ITEM_TYPE_ENUM.PLAN && {\n saveCard: sessionState.saveCard,\n }),\n }),\n ...(sessionState.data.cardId && {\n cardId: sessionState.data.cardId,\n }),\n\n ...((!this.otpVerified || this.cardMode === 'input') && {\n customer: {\n firstName: combinedData.fullName?.split(' ')[0],\n lastName: combinedData.fullName?.split(' ').slice(1).join(' '),\n email: combinedData.email,\n phone: {\n countryCode: combinedData.countryCodePhoneNumber,\n number: combinedData.phoneNumber,\n },\n },\n }),\n billingDetails: {\n address: {\n lineOne: combinedData['billing-address'],\n city: combinedData['billing-city'],\n state: combinedData['billing-state'],\n country: combinedData['billing-country'],\n zipCode: combinedData['billing-zip'],\n },\n identification: {\n type: combinedData.documentType,\n value: combinedData.documentNumber,\n },\n },\n customAttributes: {\n ...(sessionState.deviceId && { deviceId: sessionState.deviceId }),\n },\n ...(sessionState.metadata && { paymentMetadata: sessionState.metadata }),\n };\n\n const idempotencyKey = generateIdempotencyKey();\n\n this.isSubmitting = true;\n this.isCardSubmitting = true;\n\n try {\n const response = await api.checkout.createCardCheckoutRequest(\n sessionState.data.sessionId,\n idempotencyKey,\n checkoutRequest,\n sessionState.data.accessToken || undefined,\n );\n\n SessionStore.setCheckoutResponse(response.data);\n this.responseCheckoutCard = response.data;\n\n if (response.data.result?.status.toUpperCase() === CheckoutStatusE.APPROVED) {\n this.isCardSuccess = true;\n SessionStore.setPaymentStatus(PaymentStatusE.APPROVED);\n this.success.emit({\n paymentMethod: this.currentPaymentMethod,\n data: response.data,\n });\n sessionState.data.cardInformation.lastFour = response.data.result?.cardLastFour;\n } else {\n this.error.emit({\n paymentMethod: this.currentPaymentMethod,\n data: response.data,\n });\n SessionStore.setCheckoutResponse(response.data);\n this.rejectedPaymentCard = true;\n\n this.errorMessage = {\n message: response.data.error?.error?.message as PaymentStatusE,\n type: response.data.error?.error?.type as ErrorCodeTypeE,\n };\n }\n } catch (error) {\n this.error.emit({\n paymentMethod: this.currentPaymentMethod,\n data: error.data,\n });\n SessionStore.setCheckoutResponse(error.data);\n this.responseCheckoutCard = error.data;\n this.rejectedPaymentCard = true;\n\n this.errorMessage = {\n message: error.data?.error?.message,\n type: error.data?.error?.type,\n };\n } finally {\n this.isSubmitting = false;\n this.isCardSubmitting = false;\n }\n }\n\n private async handleSubmitAPM(data: any) {\n // Only handle cash and transfer payments for now\n if (\n this.currentPaymentMethod !== PAYMENT_METHOD_ENUM.CASH &&\n this.currentPaymentMethod !== PAYMENT_METHOD_ENUM.BANK_TRANSFER\n ) {\n return;\n }\n this.isSubmitting = true;\n const formData = data.detail;\n const combinedData = this.getCombinedUserData(formData);\n\n try {\n // Transform form data to match CreateAPMCheckoutRequest structure\n const billingDetails = {\n address: {\n country: combinedData['billing-country'] || '',\n state: combinedData['billing-state'] || '',\n city: combinedData['billing-city'] || '',\n zipCode: combinedData['billing-zip'] || '',\n lineOne: combinedData['billing-address'] || '',\n },\n\n identification: {\n type: combinedData.documentType,\n value: combinedData.documentNumber,\n },\n };\n\n // Use stored APM payment method\n const apmPaymentMethod =\n this.currentApmPaymentMethod ||\n PaymentMethodMapper.mapToAPMPaymentMethod(\n this.currentPaymentMethod,\n sessionState.data?.pricing?.country,\n );\n\n const checkoutRequest: CreateAPMCheckoutRequest = {\n transaction: {\n quantity: 1,\n ...(sessionState.data.discount.couponCode && {\n couponCode: sessionState.data.discount.couponCode,\n }),\n },\n method: apmPaymentMethod,\n billingDetails,\n redirect: {\n approved: window.location.origin + '/payment/success',\n rejected: window.location.origin + '/payment/failure',\n },\n paymentMetadata: sessionState.metadata,\n customAttributes: {\n bank: formData.bankId || sessionState.data?.bankId?.code,\n },\n };\n\n // Add customer data only for unauthenticated users\n // For authenticated users, the customer data is retrieved from the session\n const isAuthenticated = false; // TODO: Check authentication status from session\n\n if (!isAuthenticated) {\n checkoutRequest.customer = {\n firstName: combinedData.fullName?.split(' ')[0] || '',\n lastName: combinedData.fullName?.split(' ').slice(1).join(' ') || '',\n email: combinedData.email,\n phone: {\n countryCode: combinedData.countryCodePhoneNumber || '',\n number: combinedData.phoneNumber || '',\n },\n };\n }\n\n const idempotencyKey = generateIdempotencyKey();\n // Call APM checkout endpoint\n const response = await api.checkout.createAPMCheckoutRequest(\n sessionState.data.sessionId,\n idempotencyKey,\n checkoutRequest,\n );\n this.isSubmitting = false;\n this.checkoutResponse = response.data;\n this.storedCheckoutResults.set(this.currentPaymentMethod, response.data);\n\n if (response.data?.date) {\n sessionState.data.paymentDate = response.data.date;\n sessionState.createdAt = response.data.date;\n }\n if (response.data?.traceId) {\n sessionState.data.paymentReference = response.data.traceId;\n }\n } catch (error) {\n this.isSubmitting = false;\n this.checkoutResponse = error.data;\n\n this.errorMessage = {\n alertTitle: 'paymentErrors.APMError',\n message: PaymentStatusE.APM_MENSAJE_ERROR,\n type: error.data?.error?.type,\n paymentMethod: this.currentPaymentMethod,\n };\n this.rejectedPaymentAPM = true;\n }\n }\n\n /**\n * Public method to submit the checkout form programmatically from external platforms\n * This method can be called when submitButton is set to false in display config\n */\n @Method()\n async submit(): Promise<void> {\n if (this.formElement && typeof this.formElement.submit === 'function') {\n this.formElement.submit();\n } else {\n // Fallback: trigger handleSubmit directly with empty event\n await this.handleSubmit({ detail: {} } as CustomEvent);\n }\n }\n\n /**\n * Listen for payment status changes from APM QR code\n */\n private handlePaymentStatusChange = (statusData: {\n status: STATUS_REQ_CHECKOUT_APM;\n isCompleted: boolean;\n data: any;\n }) => {\n if (statusData.isCompleted) {\n if (statusData.status === STATUS_REQ_CHECKOUT_APM.APPROVED) {\n SessionStore.setPaymentStatus(PaymentStatusE.APPROVED);\n this.success.emit({\n paymentMethod: this.currentPaymentMethod,\n data: this.checkoutResponse,\n });\n } else if (statusData.status === STATUS_REQ_CHECKOUT_APM.REJECTED) {\n SessionStore.setPaymentStatus(PaymentStatusE.REJECTED);\n\n this.errorMessage = {\n message: PaymentStatusE.REJECTED,\n type: this.checkoutResponse?.error?.type as ErrorCodeTypeE,\n };\n }\n }\n };\n\n @Listen('input')\n async handleInputChange(event: CustomEvent<{ id: string; value: string }>) {\n if (event?.detail?.id === 'email' && this.oneClickCheckout) {\n if (this.emailDebounceTimeout) {\n clearTimeout(this.emailDebounceTimeout);\n }\n\n if (!event.detail.value || event.detail.value.trim() === '') {\n this.customerExists = false;\n SessionStore.clearCustomerIdAndToken();\n return;\n }\n\n this.emailDebounceTimeout = setTimeout(async () => {\n try {\n const response = await api.customers.exists(\n { email: sessionState.data.userInformation.email },\n this.publicKey,\n );\n this.customerExists = response.data.exists;\n } catch (error) {\n this.customerExists = false;\n }\n }, 500) as unknown as number;\n }\n }\n\n private validationSchema = {\n 'email': yup.string().when([], {\n is: () => !this.otpVerified,\n then: schema =>\n schema\n .email('validation.emailInvalid')\n .matches(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/, 'validation.emailInvalid')\n .required('validation.emailRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'fullName': yup.string().when([], {\n is: () => !this.otpVerified,\n then: schema =>\n schema\n .required('validation.fullNameRequired')\n .matches(\n /^[a-zA-ZÀ-ÿ\\u00f1\\u00d1\\s]{2,}\\s+[a-zA-ZÀ-ÿ\\u00f1\\u00d1\\s]{2,}$/,\n 'validation.fullNameInvalid',\n ),\n otherwise: schema => schema.notRequired(),\n }),\n 'isValidPhoneNumber': yup.string().when([], {\n is: () =>\n (isFieldRequired('phoneNumber', this.currentRequiredFields) && !this.otpVerified) ||\n (this.otpVerified && this.cardMode === 'input'),\n then: schema => schema.equals(['true'], 'validation.phoneRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'billing-country': yup.string().when([], {\n is: () =>\n (isFieldRequired('billing-country', this.currentRequiredFields) && !this.otpVerified) ||\n (this.otpVerified && this.cardMode === 'input'),\n then: schema => schema.required('validation.countryRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'billing-state': yup.string().when([], {\n is: () =>\n (isFieldRequired('billing-state', this.currentRequiredFields) && !this.otpVerified) ||\n (this.otpVerified && this.cardMode === 'input'),\n then: schema => schema.required('validation.stateRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'billing-address': yup.string().when([], {\n is: () =>\n (isFieldRequired('billing-address', this.currentRequiredFields) && !this.otpVerified) ||\n (this.otpVerified && this.cardMode === 'input'),\n then: schema => schema.required('validation.addressRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'billing-city': yup.string().when([], {\n is: () =>\n (isFieldRequired('billing-city', this.currentRequiredFields) && !this.otpVerified) ||\n (this.otpVerified && this.cardMode === 'input'),\n then: schema => schema.required('validation.cityRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'billing-zip': yup.string().when([], {\n is: () =>\n (isFieldRequired('billing-zip', this.currentRequiredFields) && !this.otpVerified) ||\n (this.otpVerified && this.cardMode === 'input'),\n then: schema => schema.required('validation.zipRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'bankId': yup.string().when([], {\n is: () => isFieldRequired('bankId', this.currentRequiredFields),\n then: schema => schema.required('validation.bankRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'installments': yup.string().when([], {\n is: () =>\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.CARD &&\n sessionState.data.cardInformation.installments.isAvailableInstallments &&\n sessionState.data.cardInformation?.installments?.installments.length > 0 &&\n sessionState.data.itemInformation.type !== SESSION_ITEM_TYPE_ENUM.PLAN,\n then: schema => schema.required('validation.installmentsRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'documentType': yup.string().when([], {\n is: () =>\n (isFieldRequired('documentType', this.currentRequiredFields) && !this.otpVerified) ||\n (this.otpVerified && this.cardMode === 'input'),\n then: schema => schema.required('validation.documentTypeRequired'),\n otherwise: schema => schema.notRequired(),\n }),\n 'documentNumber': yup.string().when([], {\n is: () =>\n (isFieldRequired('documentNumber', this.currentRequiredFields) && !this.otpVerified) ||\n (this.otpVerified && this.cardMode === 'input'),\n then: schema =>\n schema.required('validation.documentNumberRequired').min(7, 'validation.documentInvalid'),\n otherwise: schema => schema.notRequired(),\n }),\n };\n\n private getInitialData = () => {\n return {\n 'email': sessionState.data.userInformation.email || '',\n 'fullName': sessionState.data.userInformation.fullName || '',\n 'phoneNumber': sessionState.data.userInformation.phoneNumber?.number || '',\n 'countryCodePhoneNumber': sessionState.data.userInformation.countryCode || '',\n 'documentType': '',\n 'documentNumber': '',\n 'billing-country': sessionState.data.userInformation.address?.billingAddress?.country || '',\n 'billing-state': sessionState.data.userInformation?.address?.billingAddress?.state || '',\n 'billing-address': sessionState.data.userInformation?.address?.billingAddress?.address || '',\n 'billing-city': sessionState.data.userInformation?.address?.billingAddress?.city || '',\n 'billing-zip': sessionState.data.userInformation?.address?.billingAddress?.zip || '',\n 'bankId': sessionState.data.bankId?.code || '',\n 'card': '',\n 'installments':\n sessionState.data.cardInformation?.installments?.selectedInstallment?.installment?.toString() ||\n '',\n };\n };\n\n private hasPrefilledAddress = () => {\n const billingFields = [\n 'billing-country',\n 'billing-state',\n 'billing-address',\n 'billing-city',\n 'billing-zip',\n ];\n return billingFields.some(key => {\n const value = this.initialData[key];\n return value && value.trim() !== '';\n });\n };\n private get isQrCodeVisible(): boolean {\n return !!this.checkoutResponse?.result?.data?.qrCode;\n }\n private isPaymentApproved = (): boolean => {\n if (sessionState.data.paymentStatus === PaymentStatusE.APPROVED) {\n return true;\n }\n\n return false;\n };\n\n @Listen('onRebillAccountClick')\n handleRebillAccountClick(event: CustomEvent<boolean>) {\n this.showOtp = event.detail;\n }\n\n @Listen('returnForm')\n handleReturnForm(event: CustomEvent<boolean>) {\n this.showOtp = event.detail;\n SessionStore.clearCustomerIdAndToken();\n }\n\n @Listen('signOut')\n handleSignOut() {\n this.showOtp = false;\n this.otpVerified = false;\n if (!sessionState?.data?.prefilledData?.email) {\n this.customerExists = false;\n }\n SessionStore.clearCustomerIdAndToken();\n SessionStore.clearUserInformation();\n this.cardError = {\n showCardInvalid: false,\n type: null,\n };\n this.errorMessage = null;\n this.rejectedPaymentCard = false;\n this.rejectedPaymentAPM = false;\n }\n\n @Listen('codeVerified')\n handleCodeVerified() {\n this.otpVerified = true;\n this.showOtp = false;\n\n this.rejectedPaymentCard = false;\n this.errorMessage = null;\n this.cardError = {\n showCardInvalid: false,\n type: null,\n };\n if (this.formElement) {\n this.formElement.resetValidation();\n }\n }\n private isPaymentRejected(): boolean {\n return (\n sessionState.data.paymentStatus === PaymentStatusE.REJECTED &&\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER\n );\n }\n\n render() {\n const countryOptions = this.countries.map(country => ({\n label: country.country,\n value: country.isoCountryCode,\n }));\n\n const renderRebillSummary = (props: any = {}) => (\n <rebill-summary\n totalAmount={sessionState.data.pricing.total}\n currency={sessionState.data.pricing.currency}\n itemTitle={sessionState._session?.getTitle()}\n itemDescription={sessionState._session?.getDescription()}\n itemAmount={sessionState.data.pricing.subtotal}\n subtotal={sessionState.data.pricing.subtotal}\n allowCoupon={sessionState._session?.getAllowCoupon(this.displayConfig)}\n currentBreakpoint={this.breakpoint}\n planFrequency={sessionState._session?.getPlanFrequency()}\n planFrequencyCount={sessionState._session?.getPlanFrequencyCount()}\n discountType={sessionState.data.discount.discountType}\n discountedPercentage={sessionState.data.discount.discountedPercentage}\n discountDuration={sessionState.data.discount.discountDuration}\n discountAmount={sessionState.data.discount.discountAmount}\n {...props}\n />\n );\n\n return (\n sessionState.isInitialized && (\n <>\n {this.showRefreshModal && <rebill-modal-overlay />}\n {this.displayConfig.processingPayment && (\n <rebill-processing-payment\n style={{ display: this.isCardSubmitting ? 'block' : 'none' }}\n />\n )}\n {this.displayConfig.successPage &&\n this.isPaymentApproved() &&\n sessionState.isInitialized ? (\n <success-page\n typePaymentMethod={sessionState.data.paymentMethodSelected}\n paymentMethodName={PaymentMethodMapper.mapToAPMPaymentMethod(\n sessionState.data.paymentMethodSelected ||\n (sessionState.data.payment as any)?.paymentMethodType,\n sessionState.data?.pricing?.country,\n )}\n country={sessionState.data?.pricing?.country}\n bank={\n (sessionState.data.payment as any)?.paymentMethodMetadata?.bank ||\n (sessionState.data.payment as any)?.paymentMethodMetadata?.bank\n }\n cardLastFour={\n this.responseCheckoutCard?.result?.cardLastFour ||\n sessionState.data.cardInformation?.lastFour\n }\n paymentDate={\n sessionState.data.paymentDate ||\n this.responseCheckoutCard?.date ||\n (sessionState.data.payment as any)?.createdAt ||\n this.checkoutResponse?.result?.data?.createdAt\n }\n referenceNumber={\n sessionState.data.paymentReference ||\n (sessionState.data.payment as any)?.traceId ||\n this.responseCheckoutCard?.traceId\n }\n onSuccessRedirect={payload => {\n this.successRedirect.emit(payload.detail);\n }}\n trialPeriodDays={sessionState.data?.itemInformation?.trial?.trialPeriodDays}\n debitDay={sessionState.data?.itemInformation?.debitDay}\n planAmount={sessionState.data?.pricing?.planAmount}\n />\n ) : (\n <>\n {/* Modo sandbox para mobile - posicionado arriba del logo */}\n {this.displayConfig.sandboxMode &&\n sessionState.isSandbox &&\n sessionState.data.sessionType === SESSION_TYPE_ENUM.CHECKOUT_LANDING &&\n isBreakpointBelow(this.breakpoint, BREAKPOINT_ENUM.DESKTOP) && (\n <div\n class=\"mode-sandbox-mobile-container\"\n style={{\n display: this.isCardSubmitting || this.isCardSuccess ? 'none' : 'block',\n }}\n >\n <rebill-mode-sandbox-mobile />\n </div>\n )}\n <rebill-checkout-form\n ref={el => (this.formElement = el)}\n style={{ display: this.isCardSubmitting || this.isCardSuccess ? 'none' : 'block' }}\n validationSchema={this.validationSchema}\n initialData={this.initialData}\n onSubmit={(args: any) => this.handleSubmit(args)}\n onChange={(args: any) => this.handleFormChange(args)}\n renderForm={({ submit, formData, errors }) => {\n const isAPMCheckoutVisible =\n !this.isCardSuccess &&\n this.checkoutResponse?.result &&\n (this.currentPaymentMethod === PAYMENT_METHOD_ENUM.CASH ||\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER);\n return (\n <div\n class={`rebill-checkout ${!this.displayConfig.checkoutSummary ? 'full-width-layout' : ''}`}\n >\n <div class=\"left-section\">\n <div class=\"left-section-container\">\n {this.displayConfig.logo && (\n <organization-logo organization={sessionState.data.organization} />\n )}\n <div\n class=\"otp-container\"\n style={{ display: this.showOtp ? 'block' : 'none' }}\n >\n <otp-component />\n </div>\n <div style={{ display: this.showOtp ? 'none' : 'block' }}>\n <div class=\"checkout-form-section\">\n {this.displayConfig.checkoutSummary && (\n <div\n class=\"summary-mobile-tablet\"\n style={{\n display: isBreakpointBelow(\n this.breakpoint,\n BREAKPOINT_ENUM.DESKTOP,\n )\n ? 'block'\n : 'none',\n }}\n >\n {renderRebillSummary({\n displayedComponents: [\n 'totalAmount',\n 'discount',\n 'timelineFreeTrial',\n 'timelineDebitDay',\n 'itemDetails',\n ],\n })}\n </div>\n )}\n {!this.otpVerified && this.displayConfig.customerInformation && (\n <user-information\n customerExists={this.customerExists}\n disabled={this.isSubmitting}\n errors={{\n email: errors.email,\n fullName: errors.fullName,\n }}\n />\n )}\n {this.otpVerified && this.displayConfig.customerInformation && (\n <user-information-static\n variant=\"otp\"\n userInfo={{\n customerName:\n sessionState.data.userInformation.fullName?.split(' ')[0],\n customerEmail: sessionState.data.userInformation.email,\n }}\n />\n )}\n <div\n style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}\n >\n <payment-method-selector\n enabledPaymentMethods={this.filteredPaymentMethods}\n defaultSelected={this.currentPaymentMethod}\n disabled={this.isSubmitting}\n errorComponent={{\n showErrorComponent:\n this.displayConfig.errorMessage &&\n (this.currentPaymentError || this.isPaymentRejected()),\n alertTitle: this.errorMessage?.alertTitle,\n message: PaymentErrorMapper.getErrorMessage(this.errorMessage),\n }}\n country={sessionState.data?.pricing?.country}\n installmentsError={errors.installments}\n showDocument={\n (!this.otpVerified ||\n (this.otpVerified && this.cardMode === 'input')) &&\n !isAPMCheckoutVisible &&\n !this.isQrCodeVisible &&\n (isFieldRequired(\n 'documentNumber',\n this.currentRequiredFields,\n ) ||\n isFieldRequired('documentType', this.currentRequiredFields))\n }\n documentTypeError={errors.documentType}\n documentNumberError={errors.documentNumber}\n cardError={this.cardError}\n customCSS={this.css}\n />\n {!isAPMCheckoutVisible &&\n (() => {\n const isBankRequired = isFieldRequired(\n 'bankId',\n this.currentRequiredFields,\n );\n\n return isBankRequired;\n })() && (\n <div class=\"animated-component fade-in\">\n <rebill-bank-selector\n banks={\n getFieldValues(\n 'bank',\n this.allRequiredFields[this.currentPaymentMethod]\n .original,\n ) || []\n }\n defaultSelectedBankId={formData.bankId || ''}\n error={errors?.bankId}\n />\n </div>\n )}\n </div>\n {!isAPMCheckoutVisible &&\n (!this.otpVerified || this.cardMode === 'input') && (\n <>\n {this.displayConfig.billingAddress &&\n (isFieldRequired(\n 'billing-country',\n this.currentRequiredFields,\n ) ||\n isFieldRequired(\n 'billing-state',\n this.currentRequiredFields,\n ) ||\n isFieldRequired(\n 'billing-address',\n this.currentRequiredFields,\n ) ||\n isFieldRequired(\n 'billing-city',\n this.currentRequiredFields,\n ) ||\n isFieldRequired(\n 'billing-zip',\n this.currentRequiredFields,\n )) && (\n <div class=\"animated-component slide-in\">\n <rebill-address\n disabled={this.isSubmitting}\n countryOptions={countryOptions}\n billingView={\n this.hasPrefilledAddress() ? 'form' : 'search'\n }\n errors={{\n 'billing-country': errors['billing-country'],\n 'billing-state': errors['billing-state'],\n 'billing-address': errors['billing-address'],\n 'billing-city': errors['billing-city'],\n 'billing-zip': errors['billing-zip'],\n }}\n />\n </div>\n )}\n {this.displayConfig.customerInformation &&\n isFieldRequired(\n 'phoneNumber',\n this.currentRequiredFields,\n ) && (\n <div class=\"animated-component fade-in\">\n <user-information-phone\n disabled={this.isSubmitting}\n error={errors?.phoneNumber}\n countryCode={\n sessionState.data.userInformation?.countryCode ||\n sessionState.data.country\n }\n />\n </div>\n )}\n </>\n )}\n {/* Show APM checkout response after successful payment submission */}\n {isAPMCheckoutVisible && (\n <apm-checkout\n paymentMethod={this.currentPaymentMethod}\n referenceId={\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.CASH\n ? this.checkoutResponse?.result?.data?.referenceId\n : undefined\n }\n qrCodeData={\n this.currentPaymentMethod === PAYMENT_METHOD_ENUM.BANK_TRANSFER\n ? this.checkoutResponse?.result?.data?.qrCode\n : undefined\n }\n checkoutRequestId={\n this.checkoutResponse?.result?.checkoutRequestId\n }\n providerName={sessionState.data.providerKey}\n expirationDate={(() => {\n const expirationDate = new Date();\n expirationDate.setDate(expirationDate.getDate() + 30);\n return expirationDate.toISOString();\n })()}\n onPaymentStatusChange={event =>\n this.handlePaymentStatusChange(event.detail)\n }\n country={sessionState.data?.pricing?.country}\n redirectUrl={this.checkoutResponse?.result?.data?.url}\n timeToRedirect={this.timeToRedirectAPM}\n bearerToken={this.checkoutResponse?.result?.data?.bearerToken}\n />\n )}\n {this.displayConfig.checkoutSummary && (\n <div\n class=\"summary-price-details\"\n style={{\n display: isBreakpointBelow(\n this.breakpoint,\n BREAKPOINT_ENUM.DESKTOP,\n )\n ? 'block'\n : 'none',\n }}\n >\n {renderRebillSummary({\n displayedComponents: ['priceDetails'],\n })}\n </div>\n )}\n {this.displayConfig.submitButton && !this.isQrCodeVisible && (\n <div class=\"payment-button-container\">\n <payment-button\n paymentMethod={this.currentPaymentMethod}\n isLoading={this.isSubmitting}\n trialPeriodDays={\n sessionState.data?.itemInformation?.trial?.trialPeriodDays\n }\n onSubmit={() => {\n submit();\n }}\n redirectUrl={!!this.checkoutResponse?.result?.data?.url}\n timeToRedirect={this.timeToRedirectAPM}\n isDisabled={sessionState.data.fetchingInstallments}\n country={sessionState.data?.pricing?.country}\n />\n <rebill-alert\n type=\"secure\"\n variant=\"variant-secure\"\n icon=\"lock-outline\"\n message={I18nService.translate('otp.secureMessage')}\n />\n </div>\n )}\n </div>\n {this.displayConfig.sandboxMode &&\n sessionState.isSandbox &&\n sessionState.data.sessionType ===\n SESSION_TYPE_ENUM.CHECKOUT_LANDING &&\n !isBreakpointBelow(this.breakpoint, BREAKPOINT_ENUM.DESKTOP) && (\n <rebill-mode-sandbox />\n )}\n </div>\n {this.displayConfig.footer && (\n <rebill-footer\n style={{\n marginTop: isBreakpointBelow(\n this.breakpoint,\n BREAKPOINT_ENUM.DESKTOP,\n )\n ? '16px'\n : 'auto',\n }}\n />\n )}\n </div>\n </div>\n\n {this.displayConfig.checkoutSummary && (\n <div class=\"right-section-checkout\">\n <div class=\"checkout-summary-section\">\n <div\n class=\"summary-desktop\"\n style={{\n display: !isBreakpointBelow(\n this.breakpoint,\n BREAKPOINT_ENUM.DESKTOP,\n )\n ? 'block'\n : 'none',\n }}\n >\n {renderRebillSummary()}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n }}\n />\n </>\n )}\n </>\n )\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|