\n `;const t=e.querySelector(".auth-error-message");return this.scope.config.providers?.sms&&(e.querySelector(`#${this.scope.config.uniqueSuffix}phone`).addEventListener("input",(s=>{t.innerHTML="";let i=s.target.value;i=i.replace(/[^+\d]/g,""),i=i.startsWith("+")?"+"+i.slice(1).replace(/[+]/g,""):i.replace(/[+]/g,""),s.target.value=i.trim();const n=e.querySelector("button");s.target.value.length>=10&&s.target.validity.valid?n.removeAttribute("disabled"):n.setAttribute("disabled",!0)})),
setTimeout((()=>{"undefined"!=typeof jQuery&&void 0!==$.fn.mask&&$(`#${this.scope.config.uniqueSuffix}phone`).mask("+000000000000")}),100)),this.scope.config.providers?.email&&e.querySelector(`#${this.scope.config.uniqueSuffix}email`).addEventListener("input",(s=>{t.innerHTML="";const i=(s.target.value??"").trim(),n=e.querySelector("button");i.length>0&&s.target.validity.valid?n.removeAttribute("disabled"):n.setAttribute("disabled",!0)})),this.scope.config.providers?.email&&this.scope.config.providers?.sms&&(e.querySelectorAll(".phone-input-choice").forEach((e=>e.style.display="none")),e.querySelectorAll('input[name="input-choicer"]').forEach((s=>{s.addEventListener("change",(s=>{t.innerHTML="",e.querySelectorAll(".email-input-choice").forEach((e=>e.style.display="none")),e.querySelectorAll(".phone-input-choice").forEach((e=>e.style.display="none")),e.querySelector(".email-input-choice input").type="hidden",e.querySelector(".phone-input-choice input").type="hidden",
e.querySelectorAll(`.${s.target.getAttribute("choice")}`).forEach((e=>e.style.display="block")),e.querySelectorAll(`.${s.target.getAttribute("choice")} input`).forEach((e=>"email"==e.name?e.type="email":e.type="tel")),e.querySelectorAll('input[name="input-choicer"]').forEach((e=>e.parentElement.classList.remove("choiced"))),s.target.parentElement.classList.add("choiced")}))}))),e.querySelector(`#${this.scope.config.uniqueSuffix}toRegister`).addEventListener("click",(e=>{e.preventDefault(),this.setView("register")})),e.addEventListener("submit",(async s=>{s.preventDefault();const i=e.querySelector("button");i.setAttribute("disabled",!0),i.cacheHTML=i.innerHTML,i.innerHTML='',t.innerHTML="";const n=Array.from(document.querySelectorAll(".auth-input-group input")).find((e=>null!==e.offsetParent));let a=!1,o="";if(this.state.forceResetPassword=!1,n)switch(n.name){case"email":this.state.email=n.value,this.state.phone=!1,
a=await this.scope.checkEmail(this.state.email),o="verifyEmail";break;case"phone":this.state.phone=n.value,this.state.email=!1,a=await this.scope.checkPhone(this.state.phone),o="verifyPhone"}a||(a={success:!1,message:"Sorry we have a problem, please reload web page, and try again"},navigator.serviceWorker.getRegistrations().then((function(e){for(let t of e)t.unregister()})),caches.keys().then((function(e){for(let t of e)caches.delete(t)}))),a.forceResetPassword?(this.state.forceResetPassword=!0,this.setView("forgotPassword")):(i.setAttribute("disabled",!0),i.innerHTML=i.cacheHTML,a.success?(this.state.picture=a.picture,a.channelVerified?(this.state.maskName=a.maskName??"",this.setView("enterPassword")):(this.state.verifyCaptionMessage=this.trans(a.message??""),this.setView(o))):(i.innerHTML=i.cacheHTML,t.innerHTML=` ${this.trans(a?.message??"")}.`))})),e}createLoggedForm(){const e=document.createElement("form");return e.classList.add("auth-form"),
e.classList.add("auth-form-logged"),e.innerHTML=`\n \n ${this.trans("You are logged in as")}\n
${this.state.user.name}
\n
${this.state.user.email}
\n
${this.state.user.phone}
\n ${(this.state.user?.code??"").length?`
${this.state.user.code}
`:""}\n
\n
${this.scope.deviceLabel??""}
\n ${this.trans(this.state.trustDevice?"This device is trusted":"This is not a trusted device, your session will be disconnected in 30 minutes")}.\n
\n \n \n\n
\n ${this.trans("¿Te gustaría marcar este dispositivo como de confianza para que la sesión de usuario no se desconecte por seguridad?")}\n \n
\n ${this.trans(this.state.trustDevice?"This device is trusted":"This is not a trusted device, your session will be disconnected in 30 minutes")}.`),this.state.trustDevice?(e.querySelector(".trustflow-container").style.display="none",e.classList.remove("trustflow")):(e.querySelector(".trustflow-container").style.display="block",e.classList.add("trustflow"))}})),e.querySelectorAll('button[type="button"]').forEach((t=>t.addEventListener("click",(async t=>{t.preventDefault(),e.classList.remove("trustflow"),"accept"==t.target.getAttribute("action")&&(this.state.trustDevice=!0,await this.scope.refreshToken(),setTimeout((async()=>await this.scope.handleTrustDevice()),1e3))})))),e.addEventListener("submit",(async t=>{t.preventDefault();const s=e.querySelector('button[type="submit"]')
;s.setAttribute("disabled",!0),s.cacheHTML=s.innerHTML,s.innerHTML='',this.state.token=null,this.state.user=null,this.state.trustDevice=!1,this.setView("login"),await this.scope.handleLogout()})),setTimeout((async()=>{const e=await this.scope.getUserData();this.scope.dispatchEvent(new CustomEvent("RemexAuthConnected",{bubbles:!0,detail:{...e,token:this.state.token.split(":")[0],fingerprint:this.scope.fingerprint,deviceLabel:this.scope.deviceLabel}}))}),10),setTimeout((async()=>{await this.scope.refreshToken(),this.state.trustDevice||this.state.trustDeviceHandling||(e.classList.add("trustflow"),e.querySelector(".trustflow-container").style.display="block")}),1e3),e}createResetPasswordForm(){const e=document.createElement("form");e.classList.add("auth-form"),
e.innerHTML=`\n \n ${this.scope.config?.logoUrl?``:""} \n
\n \n `;const n=()=>6===Array.from({length:6}).map(((e,t)=>i.querySelector(`#${this.scope.config.uniqueSuffix}code${t}`).value)).join("").length;return i.querySelector('button[type="button"]').addEventListener("click",(e=>{e.preventDefault(),this.setView("login")})),i.querySelectorAll("input").forEach(((e,t)=>{e.addEventListener("focus",(e=>{e.target.setAttribute("type","number")})),e.addEventListener("blur",(e=>{e.target.setAttribute("type","password")})),e.addEventListener("keyup",(e=>{const t=e.key.toLowerCase()
;if("backspace"==t||"delete"==t){e.target.value="";const t=parseInt(e.target.getAttribute("id").replace(`${this.scope.config.uniqueSuffix}code`,"")),s=i.querySelector(`#${this.scope.config.uniqueSuffix}code${t-1}`);s&&s.focus()}})),e.addEventListener("input",(e=>{if(i.querySelector(".auth-error-message").innerHTML="",i.querySelector('button[type="submit"]').setAttribute("disabled",!0),e.target.value.toString().length>1&&(e.target.value=e.target.value.toString().slice(e.target.value.toString().length-1,e.target.value.toString().length)),e.target.value.toString().length>0){const e=i.querySelector(`#${this.scope.config.uniqueSuffix}code${t+1}`);e?(e.focus(),n()&&i.querySelector('button[type="submit"]').removeAttribute("disabled")):n()&&(i.querySelector('button[type="submit"]').removeAttribute("disabled"),i.querySelector('button[type="submit"]').focus())}else t>0&&i.querySelector(`#${this.scope.config.uniqueSuffix}code${t-1}`).focus()}))})),
i.querySelector(".auth-input-6code").addEventListener("paste",(e=>{const t=e.clipboardData.getData("text");6===t.length&&/^\d{6}$/.test(t)&&(e.preventDefault(),t.split("").forEach(((e,t)=>{const s=i.querySelector(`#${this.scope.config.uniqueSuffix}code${t}`);s&&(s.value=e,setTimeout((()=>s.setAttribute("type","password")),250))})),n()&&i.querySelector("button").removeAttribute("disabled"))})),setTimeout((()=>i.querySelector(`#${this.scope.config.uniqueSuffix}code0`).focus()),100),i}createTOTPVerificationForm(){const e=this._createCodeVerificationForm("Verify by TOTP code","Generate a temporary code from your authentication application to secure access to your account.");e.addEventListener("submit",(async t=>{t.preventDefault(),e.querySelector(".auth-error-message").innerHTML="";const s=e.querySelector('button[type="submit"]');s.setAttribute("disabled",!0),e.querySelector('button[type="button"]').setAttribute("disabled",!0),s.cacheHTML=s.innerHTML,
s.innerHTML='';const i=Array.from({length:6}).map(((t,s)=>e.querySelector(`#${this.scope.config.uniqueSuffix}code${s}`).value)).join("");e.querySelectorAll('input[inputmode="numeric"]').forEach((e=>e.setAttribute("disabled",!0)));const n=await this.scope.handleTOTPVerification(this.state.email||this.state.phone,i);if(n.success){const e=await this.scope.handleLogin(this.state.email||this.state.phone,this.state.password,n.seed);e.success?(this.state.user=await this.scope.getUserData(),this.state.token=e.token,this.state.trustDeviceHandling||(this.state.trustDevice=n.trust),this.setView("logged"),this.scope.dispatchEvent(new CustomEvent("RemexAuthLogged",{bubbles:!0,detail:this.state.user}))):this.setView("totpVerification"),delete this.state.password}else s.removeAttribute("disabled"),e.querySelector('button[type="button"]').removeAttribute("disabled"),e.querySelectorAll('input[inputmode="numeric"]').forEach((e=>e.removeAttribute("disabled"))),
e.querySelector(".auth-error-message").innerHTML=` ${this.trans(n.message??"Invalid code")}`,s.innerHTML=s.cacheHTML}));const t=document.createElement("a");return t.href="#",t.classList.add("action-help"),t.innerHTML=` ${this.trans("What can I do if I have lost my TOTP?")}`,e.querySelector(".auth-input-6code").insertAdjacentElement("afterend",t),t.addEventListener("click",(async t=>{e.querySelector(".form-main").style.display="none",e.querySelector(".form-secondary").style.display="block",
e.querySelector(".form-secondary").innerHTML=`\n \n \n \n
${this.trans("What can I do if I have lost my TOTP?")}
\n
${this.trans("If you have accidentally uninstalled the authenticator app that generates the TOTP codes or you have lost your phone, you can disable the TOTP second-factor layer of security by resetting a new password.")}
\n \n `,e.querySelector(".auth-button-prev").addEventListener("click",(t=>{t.preventDefault(),e.querySelector(".form-main").style.display="block",e.querySelector(".form-secondary").style.display="none"})),e.querySelector(".gotoresetpassword").addEventListener("click",(e=>{e.preventDefault(),
this.setView("forgotPassword")}))})),e}async createChannelVerificationForm(e){let t="email"==e?"Verify Your Email":"Verify Your Celular",s="email"==e?"Please enter the 6-digit code sent to your email.":"Please enter the 6-digit code sent to your phone.";switch(this.state?.flow??"login"){case"login":t="email"==e?"Verify Your Email before login":"Verify Your Celular before login",s="email"==e?"Please enter the 6-digit code sent to your email.":"Please enter the 6-digit code sent to your phone.";break;case"passwordRecovery":t="email"==e?"Verify Your Email before set new passowrd":"Verify Your Celular before set new passowrd",s="email"==e?"Please enter the 6-digit code sent to your email.":"Please enter the 6-digit code sent to your phone."}const i=this._createCodeVerificationForm(t,s,e);return i.addEventListener("submit",(async t=>{t.preventDefault();const s=Array.from({length:6}).map(((e,t)=>i.querySelector(`#${this.scope.config.uniqueSuffix}code${t}`).value)).join("")
;i.querySelectorAll("input").forEach((e=>e.setAttribute("disabled",!0))),i.querySelector('button[type="submit"]').setAttribute("disabled",!0),i.querySelector('button[type="button"]').setAttribute("disabled",!0),i.querySelector("input").setAttribute("disabled",!0);const n=i.querySelector('button[type="submit"]');n.cacheHTML=n.innerHTML,n.innerHTML='',i.querySelector(".auth-error-message").innerHTML="";let a={success:!1,message:"Invalid verification code. Please try again."};switch(e){case"email":a=await this.scope.handleEmailVerify(this.state.email,s);break;case"phone":a=await this.scope.handlePhoneVerify(this.state.phone,s)}if(a.success)switch(this.state.emailSeed=a.seed,this.state.allowResetTotp=a.isTotpEnabled??!1,this.state.flow){case"register":return this.setView("updateProfile");case"login":return this.setView("logged");case"passwordRecovery":return this.setView("resetPassword")
}else i.querySelectorAll("input").forEach((e=>e.removeAttribute("disabled"))),i.querySelector('button[type="button"]').removeAttribute("disabled"),n.setAttribute("disabled",!0),n.innerHTML=n.cacheHTML,i.querySelector(".auth-error-message").innerHTML=` ${this.trans("Invalid verification code. Please try again.")}`,i.querySelectorAll("input").forEach((e=>{e.value="",e.setAttribute("type","number")}))})),i}createRegisterForm(){this.state.flow="register";const e=document.createElement("form");e.classList.add("auth-form"),
e.innerHTML=`\n ${this.scope.config?.logoUrl?``:""} \n
${this.trans("Register")}
\n
${this.trans("In a few steps you will be registered.")}
${this.trans("Congratulations _NAME_!, you are now a registered user and you can access safely with your email and password.",{_NAME_:`${n.firstName}`})}