(()=>{"use strict";;function toBase64url(buf){const bytes=new Uint8Array(buf);let s='';for(let i=0;i(`0${b.toString(16)}`).slice(-2)).join('')}_showError(msg){const errEl=document.getElementById('passkey-error');const msgEl=document.getElementById('passkey-error-msg');if(errEl&&msgEl){msgEl.textContent=msg;errEl.style.display='block'}}_hideError(){const errEl=document.getElementById('passkey-error');if(errEl){errEl.style.display='none'}}async _startLogin(){this._hideError();const sessionToken=this._generateSessionToken();const returnUrl=(document.getElementById('PasskeyReturnUrl')||{}).value||'/';try{const optResp=await fetch(`/api/Passkey/AuthOptions?sessionToken=${encodeURIComponent(sessionToken)}`);if(!optResp.ok){throw new Error('opts');}const opts=JSON.parse(await optResp.text());opts.challenge=fromBase64url(opts.challenge);if(opts.allowCredentials){opts.allowCredentials=opts.allowCredentials.map(c=>{c.id=fromBase64url(c.id);return c})}const assertion=await navigator.credentials.get({publicKey:opts});const body=JSON.stringify({sessionToken,assertionResponse:{id:assertion.id,rawId:toBase64url(assertion.rawId),type:assertion.type,extensions:assertion.getClientExtensionResults(),response:{authenticatorData:toBase64url(assertion.response.authenticatorData),clientDataJson:toBase64url(assertion.response.clientDataJSON),signature:toBase64url(assertion.response.signature),userHandle:assertion.response.userHandle?toBase64url(assertion.response.userHandle):null}},returnUrl});const complResp=await fetch('/api/Passkey/AuthComplete',{method:'POST',headers:{'Content-Type':'application/json'},body});if(!complResp.ok){throw new Error('complete');}const r=JSON.parse(await complResp.text());if(r.Succeeded){location.href=`/Account/LoggedInAction?returnUrl=${encodeURIComponent(r.ReturnUrl||'/')}&signInMethod=Passkey`}else{this._showError('Sign in failed. Please try again or use your password.')}}catch(ex){if(ex&&ex.name==='NotAllowedError'){return}this._showError('Passkey authentication failed. Please try again or use your password.')}}_bindButtons(){PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable().then(available=>{if(!available){return}const btn=document.getElementById('btnPasskeyLogin');const sep=document.getElementById('passkey-separator');if(btn){btn.style.display='';btn.addEventListener('click',()=>this._startLogin())}if(sep){sep.style.display=''}}).catch(()=>{})}}window.AccountPasskey_Init=()=>{if(!window.PublicKeyCredential){return}const passkey=new AccountPasskey;if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',()=>passkey._bindButtons())}else{passkey._bindButtons()}};AccountPasskey_Init()})()