@trymellon/js 2.0.0 → 2.2.0
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/angular.cjs +1 -1
- package/dist/angular.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.global.js +1 -1
- package/dist/index.js +1 -1
- package/dist/ui/index.d.ts +6 -0
- package/dist/ui/index.js +11 -8
- package/dist/ui/index.js.map +1 -1
- package/package.json +1 -1
package/dist/ui/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function wn(e){if(e.recommendedFlow==="fallback")return e.fallbackType==="email"?"FALLBACK_EMAIL":e.fallbackType==="qr"?"FALLBACK_QR":"FALLBACK";switch(e.mode){case"login":return"READY_LOGIN";case"register":return"READY_REGISTER";default:return"READY"}}function Pn(e){return e==="register"?"READY_REGISTER":"READY_LOGIN"}function te(e,t){if(e==null||t==null||t.type==="RESET")return"IDLE";if(t.type==="TAB_CHANGE"){let r=t.payload?.tab;if(r!=="register"&&r!=="login")return e;let n=Pn(r);switch(e){case"READY":case"READY_REGISTER":case"READY_LOGIN":case"FALLBACK":case"FALLBACK_EMAIL":case"FALLBACK_QR":case"AUTHENTICATING":case"ERROR":return n;default:return e}}switch(e){case"IDLE":if(t.type==="ENV_EVAL_START")return"EVALUATING_ENV";break;case"EVALUATING_ENV":if(t.type==="ENV_RESOLVED")return wn(t.payload);if(t.type==="ENV_DETACH")return"IDLE";if(t.type==="ENV_ERROR")return"ERROR";break;case"READY":case"READY_REGISTER":case"READY_LOGIN":if(t.type==="START_AUTH")return"AUTHENTICATING";break;case"AUTHENTICATING":if(t.type==="AUTH_SUCCESS")return"SUCCESS";if(t.type==="AUTH_ERROR")return"ERROR";if(t.type==="AUTH_FALLBACK")return"FALLBACK";if(t.type==="AUTH_FALLBACK_EMAIL")return"FALLBACK_EMAIL";if(t.type==="AUTH_FALLBACK_QR")return"FALLBACK_QR";break;default:break}return e}var T="IDLE";var lr=["IDLE","EVALUATING_ENV","READY","READY_REGISTER","READY_LOGIN","AUTHENTICATING","SUCCESS","ERROR","FALLBACK","FALLBACK_EMAIL","FALLBACK_QR"],re=["login","register","auto"],B=["light","dark"],ne=["register","login"],oe=["modal","inline"],ie=["email","qr"],se=["direct-auth","open-modal"],ae=["default","pill"],le=["default","minimal"],ur=["passkey","fallback"];function ct(e){if(e==null||typeof e!="object")return!1;let t=e;return!(typeof t.isPasskeySupported!="boolean"||typeof t.platformAuthenticatorAvailable!="boolean"||t.recommendedFlow!=="passkey"&&t.recommendedFlow!=="fallback")}function S(e,t){return typeof e=="string"&&t.includes(e)}function pt(e){return S(e,lr)}function k(e){return pt(e)?e:T}function F(e){return S(e,re)}function ue(e){return S(e,B)}function de(e){return S(e,ne)}function ve(e){return S(e,oe)}function mt(e){return S(e,se)}function ft(e){return S(e,ae)}function ht(e){return S(e,le)}function gt(e){if(e==null||typeof e!="object")return!1;let t=e;return S(t.recommendedFlow,ur)&&F(t.mode)&&(t.fallbackType===void 0||S(t.fallbackType,ie))}function Te(e){if(e==null||typeof e!="object")return!1;let t=e,r=t.type;if(typeof r!="string")return!1;switch(r){case"ENV_EVAL_START":case"ENV_DETACH":case"ENV_ERROR":case"RESET":case"START_AUTH":case"AUTH_SUCCESS":case"AUTH_ERROR":case"AUTH_FALLBACK":case"AUTH_FALLBACK_EMAIL":case"AUTH_FALLBACK_QR":return!0;case"ENV_RESOLVED":return gt(t.payload);case"TAB_CHANGE":return t.payload!=null&&typeof t.payload=="object"&&de(t.payload.tab);default:return!1}}var Se="login",K="light",Ce="modal",Ie="register",z={register:"Register",login:"Sign in"},Me="open-modal",Le="default",xe="default",ce={appId:"",publishableKey:"",mode:Se,externalUserId:null,theme:K,action:Me,triggerOnly:!1,buttonVariant:Le},bt={open:!1,mode:Ce,tab:Ie,tabLabels:z,theme:K,sessionId:null,onboardingUrl:null,isMobileOverride:null,appId:"",publishableKey:"",appName:null,dialogTitle:null,dialogDescription:null,externalUserId:null,modalVariant:xe};function dr(e){if(e==null||typeof e!="object")return!1;let t=e;return typeof t.appId=="string"&&typeof t.publishableKey=="string"&&F(t.mode)&&(t.externalUserId===null||typeof t.externalUserId=="string")&&ue(t.theme)&&mt(t.action)&&typeof t.triggerOnly=="boolean"&&ft(t.buttonVariant)}function cr(e){if(e==null||typeof e!="object")return!1;let t=e;return typeof t.register=="string"&&typeof t.login=="string"}function pr(e){if(e==null||typeof e!="object")return!1;let t=e;return typeof t.open=="boolean"&&ve(t.mode)&&de(t.tab)&&cr(t.tabLabels)&&ue(t.theme)&&(t.sessionId===null||typeof t.sessionId=="string")&&(t.onboardingUrl===null||typeof t.onboardingUrl=="string")&&(t.isMobileOverride===null||typeof t.isMobileOverride=="boolean")&&(t.fallbackType===void 0||t.fallbackType==="email"||t.fallbackType==="qr")&&typeof t.appId=="string"&&typeof t.publishableKey=="string"&&(t.appName==null||typeof t.appName=="string")&&(t.dialogTitle==null||typeof t.dialogTitle=="string")&&(t.dialogDescription==null||typeof t.dialogDescription=="string")&&(t.externalUserId==null||typeof t.externalUserId=="string")&&ht(t.modalVariant)}function mr(){return ce}function fr(){return bt}function Et(e){return dr(e)?e:mr()}function yt(e){return pr(e)?e:fr()}function R(e,t){let r=k(e);return Te(t)?te(r,t):r}function At(e,t,r){return{state:e,theme:t.theme,mode:t.mode,buttonVariant:t.buttonVariant,...t.mode==="register"&&r?.registerSessionReady!==void 0&&{registerSessionReady:r.registerSessionReady},...r?.primaryButtonLabel!==void 0&&{primaryButtonLabel:r.primaryButtonLabel},...r?.primaryButtonAriaLabel!==void 0&&{primaryButtonAriaLabel:r.primaryButtonAriaLabel}}}function _t(e,t,r){return{state:e,theme:t.theme,tab:t.tab,tabLabels:t.tabLabels,...t.tab==="register"&&r?.registerSessionReady!==void 0&&{registerSessionReady:r.registerSessionReady},primaryButtonLabel:r?.primaryButtonLabel??"Try Passkey",primaryButtonAriaLabel:r?.primaryButtonAriaLabel??"Try Passkey, use this device"}}function Nn(e){return typeof e?.getClientStatus=="function"}async function hr(e){if(!Nn(e.envStatusPort))return T;let t=e.envStatusPort,r=k(e.currentState),n=F(e.mode)?e.mode:"login",o=e.isMobileOverride===!0,i=e.fallbackType==="email"||e.fallbackType==="qr"?e.fallbackType:void 0,a=R(r,{type:"ENV_EVAL_START"}),l;try{let h=await t.getClientStatus();if(!ct(h))return R(a,{type:"ENV_ERROR"});l=h}catch{return R(a,{type:"ENV_ERROR"})}let d=o===!0?"fallback":l.recommendedFlow,p={recommendedFlow:d,mode:n,...d==="fallback"&&i!=null&&{fallbackType:i}};return R(a,{type:"ENV_RESOLVED",payload:p})}function gr(e){return R(e,{type:"START_AUTH"})!==e}function Bn(e,t,r,n){let o=R(e,{type:"START_AUTH"});return t==="register"?r.register(n):r.authenticate(n),o}var Fn={email:{type:"AUTH_FALLBACK_EMAIL"},qr:{type:"AUTH_FALLBACK_QR"},generic:{type:"AUTH_FALLBACK"}};function Kn(e,t){return R(e,Fn[t==="email"?"email":t==="qr"?"qr":"generic"])}var v={envEvalStart(e){return R(e,{type:"ENV_EVAL_START"})},evaluateEnv(e){return hr(e)},startAuth(e,t,r,n){return Bn(e,t,r,n)},handleAuthSuccess(e){return R(e,{type:"AUTH_SUCCESS"})},handleAuthError(e){return R(e,{type:"AUTH_ERROR"})},tryHandleAuthSuccess(e){return e!=="AUTHENTICATING"?null:R(e,{type:"AUTH_SUCCESS"})},tryHandleAuthError(e){return e!=="AUTHENTICATING"?null:R(e,{type:"AUTH_ERROR"})},handleFallback(e,t){return Kn(e,t)},tabChange(e,t){return R(e,{type:"TAB_CHANGE",payload:{tab:t}})},reset(e){return R(e,{type:"RESET"})}};function V(e){return e==null||e.trim()===""?"":e.trim()}function M(e){let t=V(e);return t===""?null:t}function Oe(e){if(e==null)return!1;let t=e.trim().toLowerCase();return t==="true"||t==="1"||t===""}function br(e){if(e==null||e.trim()==="")return null;let t=e.trim().toLowerCase();return t==="true"||t==="1"?!0:t==="false"||t==="0"?!1:null}function C(e,t,r){if(e==null||e.trim()==="")return r;let n=e.trim().toLowerCase();return t.includes(n)?n:r}function Er(e,t){if(e==null||e.trim()==="")return;let r=e.trim().toLowerCase();if(t.includes(r))return r}function Rt(e){let t={appId:V(e.getAttribute("app-id")),publishableKey:V(e.getAttribute("publishable-key")),mode:C(e.getAttribute("mode"),re,Se),externalUserId:M(e.getAttribute("external-user-id")),theme:C(e.getAttribute("theme"),B,K),action:C(e.getAttribute("action"),se,Me),triggerOnly:Oe(e.getAttribute("trigger-only")),buttonVariant:C(e.getAttribute("button-variant"),ae,Le)};return Et(t)}var H="mellon-root",De=".mellon-btn",ke='[data-mellon-action^="fallback"]',we="fallback-email",Q="fallback-qr",pe="TryMellon",vt="Try Passkey",me="TryMellon, open authentication",Tt="Try Passkey, use this device",w="http://www.w3.org/2000/svg",St="mellon-modal-wrapper",fe="mellon-modal-overlay",Ct="mellon-modal-panel",he="mellon-modal-tabs",It="mellon-modal-content",q="cross-device",Mt="fallback-cta",Pe="mellon-dialog-title",ge="mellon-dialog-desc",yr="TryMellon \u2014 Sign in or register",Ar=e=>`${e} \u2014 Sign in or register`,_r="Pick Register or Sign in to continue.",Rr="Or sign in with",L="mellon-cross-device-wrap",Lt="mellon-modal-separator",xt="mellon-modal-close-btn",vr="Close dialog",Tr="Try from another device",Sr="mellon-cross-device-cta",Cr="Try with QR",Ir="mellon-cross-device-skeleton",Mr="mellon-cross-device-error",Lr="mellon-cross-device-slot-wrap",xr="Loading QRs",Or="QR could not be loaded. Try again.";function Dr(){let e=document.createElementNS(w,"svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("aria-hidden","true"),e.setAttribute("class","mellon-btn-icon"),e.setAttribute("fill","none"),e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","2"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round");let t=document.createElementNS(w,"path");t.setAttribute("d","M12 22a10 10 0 0 0 10-10 10 10 0 0 0-20 0 10 10 0 0 0 10 10Z");let r=document.createElementNS(w,"path");r.setAttribute("d","M12 14a2 2 0 0 0 2-2 2 2 0 0 0-2-2 2 2 0 0 0-2 2 2 2 0 0 0 2 2Z");let n=document.createElementNS(w,"path");return n.setAttribute("d","M5 19.05A9 9 0 0 1 3 12a9 9 0 0 1 2-5.05"),e.appendChild(t),e.appendChild(r),e.appendChild(n),e}function Vn(e,t=pe,r=me){let n=document.createElement("button");return n.type="button",n.className="mellon-btn",n.setAttribute("aria-label",r),n.disabled=e,n.appendChild(Dr()),n.appendChild(document.createTextNode(t)),n}function Hn(e,t=pe,r=me){let n=document.createElement("button");n.type="button",n.className="mellon-btn mellon-btn-pill",n.setAttribute("aria-label",r),n.disabled=e;let o=document.createElement("span");return o.className="mellon-btn-pill-icon-circle",o.setAttribute("aria-hidden","true"),o.appendChild(Dr()),n.appendChild(o),n.appendChild(document.createTextNode(t)),n}function qn(e,t=pe,r=me){return n=>e==="pill"?Hn(n,t,r):Vn(n,t,r)}function jn(e){return{variant:e.buttonVariant??"default",label:e.primaryButtonLabel??pe,ariaLabel:e.primaryButtonAriaLabel??me}}function Ot(e){let{variant:t,label:r,ariaLabel:n}=jn(e);return qn(t,r,n)(!1)}function Gn(e){let{shadowRoot:t}=e,r=t.getElementById(H);return r||(r=document.createElement("div"),r.id=H,r.className="mellon-root",t.appendChild(r)),r}function $(e,t){let r=document.createElement("p");return r.className=e,r.textContent=t,r}function Wn(e,t){let r=document.createElement("button");return r.type="button",r.className="mellon-btn mellon-btn-fallback",r.setAttribute("data-mellon-action",e),r.textContent=t,r}var Yn={FALLBACK:{action:"fallback",label:"Continuar"},FALLBACK_EMAIL:{action:we,label:"Continuar con email"},FALLBACK_QR:{action:Q,label:"Continuar con QR"}};function zn(e){let t=document.createElement("div");t.className="mellon-fallback";let r=document.createElement("p");r.className="mellon-message",r.textContent="Fallback disponible.",t.appendChild(r);let{action:n,label:o}=Yn[e];return t.appendChild(Wn(n,o)),t}function Qn(e,t){let r=document.createDocumentFragment();switch(e){case"IDLE":case"EVALUATING_ENV":r.appendChild($("mellon-loading","Loading\u2026"));break;case"READY_LOGIN":r.appendChild(Ot(t));break;case"READY_REGISTER":t.registerSessionReady===!1?r.appendChild($("mellon-loading","Preparando registro\u2026")):r.appendChild(Ot(t));break;case"READY":r.appendChild(Ot(t));break;case"AUTHENTICATING":r.appendChild($("mellon-loading","Authenticating\u2026"));break;case"SUCCESS":r.appendChild($("mellon-message","Success."));break;case"ERROR":r.appendChild($("mellon-message","Something went wrong."));break;case"FALLBACK":case"FALLBACK_EMAIL":case"FALLBACK_QR":r.appendChild(zn(e));break;default:r.appendChild($("mellon-loading","Loading\u2026"))}return r}function Dt(e,t,r={}){let n=k(t),o=Gn(e),i=Qn(n,r);o.replaceChildren(...Array.from(i.childNodes))}function $n(e){return{theme:e.theme,mode:e.mode,buttonVariant:e.buttonVariant,registerSessionReady:e.registerSessionReady,primaryButtonLabel:e.primaryButtonLabel,primaryButtonAriaLabel:e.primaryButtonAriaLabel}}function Xn(e){return{theme:e.theme,mode:e.tab,buttonVariant:"pill",registerSessionReady:e.registerSessionReady,primaryButtonLabel:e.primaryButtonLabel,primaryButtonAriaLabel:e.primaryButtonAriaLabel}}function kr(e,t){Dt(e,t.state,$n(t))}function wr(e,t){Dt(e,t.state,Xn(t))}var Pr=".mellon-modal-tabs",kt="data-tab",Ur='a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',Nr='[data-mellon-modal-close="true"]';function Br(e){if(e===we)return"email";if(e===Q)return"qr"}function Fr(e,t){let r=n=>{let o=n.target instanceof Element?n.target:null;if(!o)return;let i=o.closest(ke);if(i instanceof HTMLButtonElement){t.onFallbackClick(Br(i.getAttribute("data-mellon-action")));return}o.closest(De)&&t.onPrimaryClick()};return e.addEventListener("click",r),()=>e.removeEventListener("click",r)}function Kr(e,t){let r=n=>{let o=n.target instanceof Element?n.target:null;if(!o)return;if(t.onCloseClick&&o.closest(Nr)instanceof HTMLElement){t.onCloseClick();return}let i=o.closest(ke);if(i instanceof HTMLButtonElement){t.onFallbackClick(Br(i.getAttribute("data-mellon-action")));return}if(e.querySelector(Pr)?.contains(o)){let d=o.closest(`[${kt}]`)?.getAttribute(kt);if(d==="register"||d==="login"){t.onTabChange(d);return}}if(o.closest(De)){t.onPrimaryClick();return}if(t.onOverlayClick){let l=e.querySelector(`.${fe}`);l&&o===l&&t.onOverlayClick()}};return e.addEventListener("click",r),()=>e.removeEventListener("click",r)}var be=`
|
|
1
|
+
function wn(e){if(e.recommendedFlow==="fallback")return e.fallbackType==="email"?"FALLBACK_EMAIL":e.fallbackType==="qr"?"FALLBACK_QR":"FALLBACK";switch(e.mode){case"login":return"READY_LOGIN";case"register":return"READY_REGISTER";default:return"READY"}}function Pn(e){return e==="register"?"READY_REGISTER":"READY_LOGIN"}function re(e,t){if(e==null||t==null||t.type==="RESET")return"IDLE";if(t.type==="TAB_CHANGE"){let r=t.payload?.tab;if(r!=="register"&&r!=="login")return e;let n=Pn(r);switch(e){case"READY":case"READY_REGISTER":case"READY_LOGIN":case"FALLBACK":case"FALLBACK_EMAIL":case"FALLBACK_QR":case"AUTHENTICATING":case"ERROR":return n;default:return e}}switch(e){case"IDLE":if(t.type==="ENV_EVAL_START")return"EVALUATING_ENV";break;case"EVALUATING_ENV":if(t.type==="ENV_RESOLVED")return wn(t.payload);if(t.type==="ENV_DETACH")return"IDLE";if(t.type==="ENV_ERROR")return"ERROR";break;case"READY":case"READY_REGISTER":case"READY_LOGIN":if(t.type==="START_AUTH")return"AUTHENTICATING";break;case"AUTHENTICATING":if(t.type==="AUTH_SUCCESS")return"SUCCESS";if(t.type==="AUTH_ERROR")return"ERROR";if(t.type==="AUTH_FALLBACK")return"FALLBACK";if(t.type==="AUTH_FALLBACK_EMAIL")return"FALLBACK_EMAIL";if(t.type==="AUTH_FALLBACK_QR")return"FALLBACK_QR";break;default:break}return e}var S="IDLE";var lr=["IDLE","EVALUATING_ENV","READY","READY_REGISTER","READY_LOGIN","AUTHENTICATING","SUCCESS","ERROR","FALLBACK","FALLBACK_EMAIL","FALLBACK_QR"],ne=["login","register","auto"],F=["light","dark"],oe=["register","login"],ie=["modal","inline"],se=["email","qr"],ae=["direct-auth","open-modal"],le=["default","pill"],ue=["default","minimal"],ur=["passkey","fallback"];function ct(e){if(e==null||typeof e!="object")return!1;let t=e;return!(typeof t.isPasskeySupported!="boolean"||typeof t.platformAuthenticatorAvailable!="boolean"||t.recommendedFlow!=="passkey"&&t.recommendedFlow!=="fallback")}function C(e,t){return typeof e=="string"&&t.includes(e)}function pt(e){return C(e,lr)}function D(e){return pt(e)?e:S}function K(e){return C(e,ne)}function de(e){return C(e,F)}function ce(e){return C(e,oe)}function Te(e){return C(e,ie)}function mt(e){return C(e,ae)}function ft(e){return C(e,le)}function ht(e){return C(e,ue)}function gt(e){if(e==null||typeof e!="object")return!1;let t=e;return C(t.recommendedFlow,ur)&&K(t.mode)&&(t.fallbackType===void 0||C(t.fallbackType,se))}function Se(e){if(e==null||typeof e!="object")return!1;let t=e,r=t.type;if(typeof r!="string")return!1;switch(r){case"ENV_EVAL_START":case"ENV_DETACH":case"ENV_ERROR":case"RESET":case"START_AUTH":case"AUTH_SUCCESS":case"AUTH_ERROR":case"AUTH_FALLBACK":case"AUTH_FALLBACK_EMAIL":case"AUTH_FALLBACK_QR":return!0;case"ENV_RESOLVED":return gt(t.payload);case"TAB_CHANGE":return t.payload!=null&&typeof t.payload=="object"&&ce(t.payload.tab);default:return!1}}var Ce="login",V="light",Ie="modal",Le="register",Q={register:"Register",login:"Sign in"},Me="open-modal",Oe="default",xe="default",pe={appId:"",publishableKey:"",mode:Ce,externalUserId:null,theme:V,action:Me,triggerOnly:!1,buttonVariant:Oe,buttonLabel:null,buttonAriaLabel:null},bt={open:!1,mode:Ie,tab:Le,tabLabels:Q,theme:V,sessionId:null,onboardingUrl:null,isMobileOverride:null,appId:"",publishableKey:"",appName:null,dialogTitle:null,dialogDescription:null,externalUserId:null,modalVariant:xe};function dr(e){if(e==null||typeof e!="object")return!1;let t=e;return typeof t.appId=="string"&&typeof t.publishableKey=="string"&&K(t.mode)&&(t.externalUserId===null||typeof t.externalUserId=="string")&&de(t.theme)&&mt(t.action)&&typeof t.triggerOnly=="boolean"&&ft(t.buttonVariant)}function cr(e){if(e==null||typeof e!="object")return!1;let t=e;return typeof t.register=="string"&&typeof t.login=="string"}function pr(e){if(e==null||typeof e!="object")return!1;let t=e;return typeof t.open=="boolean"&&Te(t.mode)&&ce(t.tab)&&cr(t.tabLabels)&&de(t.theme)&&(t.sessionId===null||typeof t.sessionId=="string")&&(t.onboardingUrl===null||typeof t.onboardingUrl=="string")&&(t.isMobileOverride===null||typeof t.isMobileOverride=="boolean")&&(t.fallbackType===void 0||t.fallbackType==="email"||t.fallbackType==="qr")&&typeof t.appId=="string"&&typeof t.publishableKey=="string"&&(t.appName==null||typeof t.appName=="string")&&(t.dialogTitle==null||typeof t.dialogTitle=="string")&&(t.dialogDescription==null||typeof t.dialogDescription=="string")&&(t.externalUserId==null||typeof t.externalUserId=="string")&&ht(t.modalVariant)}function mr(){return pe}function fr(){return bt}function Et(e){return dr(e)?e:mr()}function yt(e){return pr(e)?e:fr()}function v(e,t){let r=D(e);return Se(t)?re(r,t):r}function At(e,t,r){return{state:e,theme:t.theme,mode:t.mode,buttonVariant:t.buttonVariant,...t.mode==="register"&&r?.registerSessionReady!==void 0&&{registerSessionReady:r.registerSessionReady},...r?.primaryButtonLabel!==void 0&&{primaryButtonLabel:r.primaryButtonLabel},...r?.primaryButtonAriaLabel!==void 0&&{primaryButtonAriaLabel:r.primaryButtonAriaLabel}}}function _t(e,t,r){return{state:e,theme:t.theme,tab:t.tab,tabLabels:t.tabLabels,...t.tab==="register"&&r?.registerSessionReady!==void 0&&{registerSessionReady:r.registerSessionReady},primaryButtonLabel:r?.primaryButtonLabel??"Try Passkey",primaryButtonAriaLabel:r?.primaryButtonAriaLabel??"Try Passkey, use this device"}}function Nn(e){return typeof e?.getClientStatus=="function"}async function hr(e){if(!Nn(e.envStatusPort))return S;let t=e.envStatusPort,r=D(e.currentState),n=K(e.mode)?e.mode:"login",o=e.isMobileOverride===!0,i=e.fallbackType==="email"||e.fallbackType==="qr"?e.fallbackType:void 0,a=v(r,{type:"ENV_EVAL_START"}),l;try{let h=await t.getClientStatus();if(!ct(h))return v(a,{type:"ENV_ERROR"});l=h}catch{return v(a,{type:"ENV_ERROR"})}let d=o===!0?"fallback":l.recommendedFlow,p={recommendedFlow:d,mode:n,...d==="fallback"&&i!=null&&{fallbackType:i}};return v(a,{type:"ENV_RESOLVED",payload:p})}function gr(e){return v(e,{type:"START_AUTH"})!==e}function Bn(e,t,r,n){let o=v(e,{type:"START_AUTH"});return t==="register"?r.register(n):r.authenticate(n),o}var Fn={email:{type:"AUTH_FALLBACK_EMAIL"},qr:{type:"AUTH_FALLBACK_QR"},generic:{type:"AUTH_FALLBACK"}};function Kn(e,t){return v(e,Fn[t==="email"?"email":t==="qr"?"qr":"generic"])}var R={envEvalStart(e){return v(e,{type:"ENV_EVAL_START"})},evaluateEnv(e){return hr(e)},startAuth(e,t,r,n){return Bn(e,t,r,n)},handleAuthSuccess(e){return v(e,{type:"AUTH_SUCCESS"})},handleAuthError(e){return v(e,{type:"AUTH_ERROR"})},tryHandleAuthSuccess(e){return e!=="AUTHENTICATING"?null:v(e,{type:"AUTH_SUCCESS"})},tryHandleAuthError(e){return e!=="AUTHENTICATING"?null:v(e,{type:"AUTH_ERROR"})},handleFallback(e,t){return Kn(e,t)},tabChange(e,t){return v(e,{type:"TAB_CHANGE",payload:{tab:t}})},reset(e){return v(e,{type:"RESET"})}};function H(e){return e==null||e.trim()===""?"":e.trim()}function T(e){let t=H(e);return t===""?null:t}function ke(e){if(e==null)return!1;let t=e.trim().toLowerCase();return t==="true"||t==="1"||t===""}function br(e){if(e==null||e.trim()==="")return null;let t=e.trim().toLowerCase();return t==="true"||t==="1"?!0:t==="false"||t==="0"?!1:null}function I(e,t,r){if(e==null||e.trim()==="")return r;let n=e.trim().toLowerCase();return t.includes(n)?n:r}function Er(e,t){if(e==null||e.trim()==="")return;let r=e.trim().toLowerCase();if(t.includes(r))return r}function vt(e){let t={appId:H(e.getAttribute("app-id")),publishableKey:H(e.getAttribute("publishable-key")),mode:I(e.getAttribute("mode"),ne,Ce),externalUserId:T(e.getAttribute("external-user-id")),theme:I(e.getAttribute("theme"),F,V),action:I(e.getAttribute("action"),ae,Me),triggerOnly:ke(e.getAttribute("trigger-only")),buttonVariant:I(e.getAttribute("button-variant"),le,Oe),buttonLabel:T(e.getAttribute("button-label")),buttonAriaLabel:T(e.getAttribute("button-aria-label"))};return Et(t)}var q="mellon-root",De=".mellon-btn",we='[data-mellon-action^="fallback"]',Pe="fallback-email",$="fallback-qr",me="TryMellon",Rt="Try Passkey",fe="TryMellon, open authentication",Tt="Try Passkey, use this device",w="http://www.w3.org/2000/svg",St="mellon-modal-wrapper",he="mellon-modal-overlay",Ct="mellon-modal-panel",ge="mellon-modal-tabs",It="mellon-modal-content",j="cross-device",Lt="fallback-cta",Ue="mellon-dialog-title",be="mellon-dialog-desc",yr="TryMellon \u2014 Sign in or register",Ar=e=>`${e} \u2014 Sign in or register`,_r="Pick Register or Sign in to continue.",vr="Or sign in with",M="mellon-cross-device-wrap",Mt="mellon-modal-separator",Ot="mellon-modal-close-btn",Rr="Close dialog",Tr="Try from another device",Sr="mellon-cross-device-cta",Cr="Try with QR",Ir="mellon-cross-device-skeleton",Lr="mellon-cross-device-error",Mr="mellon-cross-device-slot-wrap",Or="Loading QRs",xr="QR could not be loaded. Try again.";function kr(){let e=document.createElementNS(w,"svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("aria-hidden","true"),e.setAttribute("class","mellon-btn-icon"),e.setAttribute("fill","none"),e.setAttribute("stroke","currentColor"),e.setAttribute("stroke-width","2"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round");let t=document.createElementNS(w,"path");t.setAttribute("d","M12 22a10 10 0 0 0 10-10 10 10 0 0 0-20 0 10 10 0 0 0 10 10Z");let r=document.createElementNS(w,"path");r.setAttribute("d","M12 14a2 2 0 0 0 2-2 2 2 0 0 0-2-2 2 2 0 0 0-2 2 2 2 0 0 0 2 2Z");let n=document.createElementNS(w,"path");return n.setAttribute("d","M5 19.05A9 9 0 0 1 3 12a9 9 0 0 1 2-5.05"),e.appendChild(t),e.appendChild(r),e.appendChild(n),e}function Vn(e,t=me,r=fe){let n=document.createElement("button");return n.type="button",n.className="mellon-btn",n.setAttribute("aria-label",r),n.disabled=e,n.appendChild(kr()),n.appendChild(document.createTextNode(t)),n}function Hn(e,t=me,r=fe){let n=document.createElement("button");n.type="button",n.className="mellon-btn mellon-btn-pill",n.setAttribute("aria-label",r),n.disabled=e;let o=document.createElement("span");return o.className="mellon-btn-pill-icon-circle",o.setAttribute("aria-hidden","true"),o.appendChild(kr()),n.appendChild(o),n.appendChild(document.createTextNode(t)),n}function qn(e,t=me,r=fe){return n=>e==="pill"?Hn(n,t,r):Vn(n,t,r)}function jn(e){return{variant:e.buttonVariant??"default",label:e.primaryButtonLabel??me,ariaLabel:e.primaryButtonAriaLabel??fe}}function xt(e){let{variant:t,label:r,ariaLabel:n}=jn(e);return qn(t,r,n)(!1)}function Gn(e){let{shadowRoot:t}=e,r=t.getElementById(q);return r||(r=document.createElement("div"),r.id=q,r.className="mellon-root",t.appendChild(r)),r}function X(e,t){let r=document.createElement("p");return r.className=e,r.textContent=t,r}function Wn(e,t){let r=document.createElement("button");return r.type="button",r.className="mellon-btn mellon-btn-fallback",r.setAttribute("data-mellon-action",e),r.textContent=t,r}var Yn={FALLBACK:{action:"fallback",label:"Continuar"},FALLBACK_EMAIL:{action:Pe,label:"Continuar con email"},FALLBACK_QR:{action:$,label:"Continuar con QR"}};function zn(e){let t=document.createElement("div");t.className="mellon-fallback";let r=document.createElement("p");r.className="mellon-message",r.textContent="Fallback disponible.",t.appendChild(r);let{action:n,label:o}=Yn[e];return t.appendChild(Wn(n,o)),t}function Qn(e,t){let r=document.createDocumentFragment();switch(e){case"IDLE":case"EVALUATING_ENV":r.appendChild(X("mellon-loading","Loading\u2026"));break;case"READY_LOGIN":r.appendChild(xt(t));break;case"READY_REGISTER":t.registerSessionReady===!1?r.appendChild(X("mellon-loading","Preparando registro\u2026")):r.appendChild(xt(t));break;case"READY":r.appendChild(xt(t));break;case"AUTHENTICATING":r.appendChild(X("mellon-loading","Authenticating\u2026"));break;case"SUCCESS":r.appendChild(X("mellon-message","Success."));break;case"ERROR":r.appendChild(X("mellon-message","Something went wrong."));break;case"FALLBACK":case"FALLBACK_EMAIL":case"FALLBACK_QR":r.appendChild(zn(e));break;default:r.appendChild(X("mellon-loading","Loading\u2026"))}return r}function kt(e,t,r={}){let n=D(t),o=Gn(e),i=Qn(n,r);o.replaceChildren(...Array.from(i.childNodes))}function $n(e){return{theme:e.theme,mode:e.mode,buttonVariant:e.buttonVariant,registerSessionReady:e.registerSessionReady,primaryButtonLabel:e.primaryButtonLabel,primaryButtonAriaLabel:e.primaryButtonAriaLabel}}function Xn(e){return{theme:e.theme,mode:e.tab,buttonVariant:"pill",registerSessionReady:e.registerSessionReady,primaryButtonLabel:e.primaryButtonLabel,primaryButtonAriaLabel:e.primaryButtonAriaLabel}}function Dr(e,t){kt(e,t.state,$n(t))}function wr(e,t){kt(e,t.state,Xn(t))}var Pr=".mellon-modal-tabs",Dt="data-tab",Ur='a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',Nr='[data-mellon-modal-close="true"]';function Br(e){if(e===Pe)return"email";if(e===$)return"qr"}function Fr(e,t){let r=n=>{let o=n.target instanceof Element?n.target:null;if(!o)return;let i=o.closest(we);if(i instanceof HTMLButtonElement){t.onFallbackClick(Br(i.getAttribute("data-mellon-action")));return}o.closest(De)&&t.onPrimaryClick()};return e.addEventListener("click",r),()=>e.removeEventListener("click",r)}function Kr(e,t){let r=n=>{let o=n.target instanceof Element?n.target:null;if(!o)return;if(t.onCloseClick&&o.closest(Nr)instanceof HTMLElement){t.onCloseClick();return}let i=o.closest(we);if(i instanceof HTMLButtonElement){t.onFallbackClick(Br(i.getAttribute("data-mellon-action")));return}if(e.querySelector(Pr)?.contains(o)){let d=o.closest(`[${Dt}]`)?.getAttribute(Dt);if(d==="register"||d==="login"){t.onTabChange(d);return}}if(o.closest(De)){t.onPrimaryClick();return}if(t.onOverlayClick){let l=e.querySelector(`.${he}`);l&&o===l&&t.onOverlayClick()}};return e.addEventListener("click",r),()=>e.removeEventListener("click",r)}var Ee=`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
max-width: 100%;
|
|
@@ -113,7 +113,7 @@ function wn(e){if(e.recommendedFlow==="fallback")return e.fallbackType==="email"
|
|
|
113
113
|
@media (prefers-reduced-motion: reduce) {
|
|
114
114
|
.mellon-btn, .mellon-modal-wrapper { transition: none; }
|
|
115
115
|
}
|
|
116
|
-
`.trim(),Vr=typeof ShadowRoot<"u"&&"adoptedStyleSheets"in ShadowRoot.prototype&&typeof CSSStyleSheet<"u"&&"replaceSync"in CSSStyleSheet.prototype;function wt(){if(!Vr)return null;try{let e=new CSSStyleSheet;return e.replaceSync(
|
|
116
|
+
`.trim(),Vr=typeof ShadowRoot<"u"&&"adoptedStyleSheets"in ShadowRoot.prototype&&typeof CSSStyleSheet<"u"&&"replaceSync"in CSSStyleSheet.prototype;function wt(){if(!Vr)return null;try{let e=new CSSStyleSheet;return e.replaceSync(Ee),e}catch{return null}}function Pt(){return Ee}var Hr=`
|
|
117
117
|
/* Host: full viewport when open, no border (only the inner panel has border). */
|
|
118
118
|
:host {
|
|
119
119
|
border: none;
|
|
@@ -436,7 +436,10 @@ function wn(e){if(e.recommendedFlow==="fallback")return e.fallbackType==="email"
|
|
|
436
436
|
animation: none;
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
|
-
/* Minimal variant:
|
|
439
|
+
/* Minimal variant: opaque backdrop + panel (no reliance on host CSS vars when modal is in body). */
|
|
440
|
+
[data-mellon-modal-variant="minimal"] .mellon-modal-overlay {
|
|
441
|
+
background: rgba(0, 0, 0, 0.65);
|
|
442
|
+
}
|
|
440
443
|
[data-mellon-modal-variant="minimal"] .mellon-modal-panel {
|
|
441
444
|
border-radius: 1rem;
|
|
442
445
|
border-width: 2px;
|
|
@@ -449,10 +452,10 @@ function wn(e){if(e.recommendedFlow==="fallback")return e.fallbackType==="email"
|
|
|
449
452
|
--mellon-border: rgba(0, 0, 0, 0.15);
|
|
450
453
|
}
|
|
451
454
|
:host([theme="dark"]) [data-mellon-modal-variant="minimal"] .mellon-modal-panel {
|
|
452
|
-
background:
|
|
455
|
+
background: #0f0f0f;
|
|
453
456
|
}
|
|
454
457
|
:host([theme="light"]) [data-mellon-modal-variant="minimal"] .mellon-modal-panel {
|
|
455
|
-
background:
|
|
458
|
+
background: #ffffff;
|
|
456
459
|
}
|
|
457
460
|
[data-mellon-modal-variant="minimal"] .mellon-modal-tabs {
|
|
458
461
|
padding: 0.5rem 1rem 0;
|
|
@@ -483,7 +486,7 @@ function wn(e){if(e.recommendedFlow==="fallback")return e.fallbackType==="email"
|
|
|
483
486
|
max-height: calc(100dvh - 4rem);
|
|
484
487
|
}
|
|
485
488
|
}
|
|
486
|
-
`.trim();function qr(){return
|
|
487
|
-
`+Hr}function jr(){if(!Vr)return null;try{let e=new CSSStyleSheet;return e.replaceSync(
|
|
488
|
-
`+Hr),e}catch{return null}}var f=e=>({ok:!0,value:e}),c=e=>({ok:!1,error:e});var Ue=class e extends Error{code;details;isTryMellonError=!0;constructor(t,r,n){super(r),this.name="TryMellonError",this.code=t,this.details=n,Error.captureStackTrace&&Error.captureStackTrace(this,e)}},Jn={NOT_SUPPORTED:"WebAuthn is not supported in this environment",USER_CANCELLED:"User cancelled the operation",PASSKEY_NOT_FOUND:"Passkey not found",SESSION_EXPIRED:"Session has expired",NETWORK_FAILURE:"Network request failed",INVALID_ARGUMENT:"Invalid argument provided",TIMEOUT:"Operation timed out",ABORTED:"Operation was aborted",ABORT_ERROR:"Operation aborted by user or timeout",CHALLENGE_MISMATCH:"This link was already used or expired. Please try again from your computer.",UNKNOWN_ERROR:"An unknown error occurred"};function b(e,t,r){return new Ue(e,t??Jn[e],r)}function Ut(e){return e instanceof Ue||typeof e=="object"&&e!==null&&"isTryMellonError"in e&&e.isTryMellonError===!0}function Gr(){return b("NOT_SUPPORTED")}function A(e,t){return b("INVALID_ARGUMENT",`Invalid argument: ${e} - ${t}`,{field:e,reason:t})}function Wr(e){return b("UNKNOWN_ERROR",`Failed to ${e} credential`,{operation:e})}function Nt(e){return b("NOT_SUPPORTED",`No base64 ${e==="encode"?"encoding":"decoding"} available`,{type:e})}function Bt(e,t){try{let r=new URL(e);if(r.protocol!=="https:"&&r.protocol!=="http:")throw A(t,"must use http or https protocol")}catch(r){throw Ut(r)?r:A(t,"must be a valid URL")}}function j(e,t,r,n){if(!Number.isFinite(e))throw A(t,"must be a finite number");if(e<r||e>n)throw A(t,`must be between ${r} and ${n}`)}function Ne(e,t){if(typeof e!="string"||e.length===0)throw A(t,"must be a non-empty string");if(!/^[A-Za-z0-9_-]+$/.test(e))throw A(t,"must be a valid base64url string")}var Zn={NotAllowedError:"USER_CANCELLED",AbortError:"ABORTED",NotSupportedError:"NOT_SUPPORTED",SecurityError:"NOT_SUPPORTED",InvalidStateError:"UNKNOWN_ERROR",UnknownError:"UNKNOWN_ERROR"};function Ee(e){if(typeof e!="string")return"UNKNOWN_ERROR";let t=e.toLowerCase().trim();return{challenge_mismatch:"CHALLENGE_MISMATCH",session_expired:"SESSION_EXPIRED",unauthorized:"SESSION_EXPIRED",validation_error:"INVALID_ARGUMENT",invalid_argument:"INVALID_ARGUMENT",user_not_found:"SESSION_EXPIRED",passkey_not_found:"PASSKEY_NOT_FOUND"}[t]??"UNKNOWN_ERROR"}function _(e){if(e instanceof DOMException){let t=e.name,r=e.message||"WebAuthn operation failed",n=Zn[t]??"UNKNOWN_ERROR";return b(n,r,{originalError:e})}return e instanceof Error?b("UNKNOWN_ERROR",e.message,{originalError:e}):b("UNKNOWN_ERROR","An unknown error occurred",{originalError:e})}function g(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function u(e){return typeof e=="string"}function P(e){return typeof e=="number"&&Number.isFinite(e)}function Be(e){return typeof e=="boolean"}function X(e){return Array.isArray(e)}function s(e,t){return c(b("UNKNOWN_ERROR",e,{...t,originalData:t?.originalData}))}function m(e,t){return e[t]}function Yr(e,t){return!g(e)||!u(e.name)||!u(e.id)?s("Invalid API response: challenge.rp must have name and id strings",{originalData:t}):f(!0)}function zr(e,t){return!g(e)||!u(e.id)||!u(e.name)||!u(e.displayName)?s("Invalid API response: challenge.user must have id, name, displayName strings",{originalData:t}):f(!0)}function Qr(e,t){if(!X(e))return s("Invalid API response: challenge.pubKeyCredParams must be array",{originalData:t});for(let r of e)if(!g(r)||r.type!=="public-key"||!P(r.alg))return s("Invalid API response: pubKeyCredParams items must have type and alg",{originalData:t});return f(!0)}function Ft(e,t){if(!g(e))return s("Invalid API response: user must be object",{field:"user",originalData:t});let r=m(e,"user_id"),n=m(e,"external_user_id");if(!u(r)||!u(n))return s("Invalid API response: user must have user_id and external_user_id strings",{originalData:t});let o=e.email,i=e.metadata;return o!==void 0&&!u(o)?s("Invalid API response: user.email must be string",{originalData:t}):i!==void 0&&(typeof i!="object"||i===null)?s("Invalid API response: user.metadata must be object",{originalData:t}):f({user_id:r,external_user_id:n,...o!==void 0&&{email:o},...i!==void 0&&{metadata:i}})}function Kt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id");if(!u(t))return s("Invalid API response: session_id must be string",{field:"session_id",originalData:e});let r=m(e,"challenge");if(!g(r))return s("Invalid API response: challenge must be object",{field:"challenge",originalData:e});let n=Yr(m(r,"rp"),e);if(!n.ok)return n;let o=zr(m(r,"user"),e);if(!o.ok)return o;let i=m(r,"challenge");if(!u(i))return s("Invalid API response: challenge.challenge must be string",{originalData:e});let a=Qr(m(r,"pubKeyCredParams"),e);if(!a.ok)return a;let l=r.timeout;if(l!==void 0&&!P(l))return s("Invalid API response: challenge.timeout must be number",{originalData:e});let d=r.excludeCredentials;if(d!==void 0){if(!X(d))return s("Invalid API response: excludeCredentials must be array",{originalData:e});for(let h of d)if(!g(h)||h.type!=="public-key"||!u(h.id))return s("Invalid API response: excludeCredentials items must have id and type",{originalData:e})}let p=r.authenticatorSelection;return p!==void 0&&!g(p)?s("Invalid API response: authenticatorSelection must be object",{originalData:e}):f({session_id:t,challenge:{rp:r.rp,user:r.user,challenge:i,pubKeyCredParams:r.pubKeyCredParams,...l!==void 0&&{timeout:l},...d!==void 0&&{excludeCredentials:d},...p!==void 0&&{authenticatorSelection:p}}})}function Vt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id");if(!u(t))return s("Invalid API response: session_id must be string",{field:"session_id",originalData:e});let r=m(e,"challenge");if(!g(r))return s("Invalid API response: challenge must be object",{field:"challenge",originalData:e});let n=m(r,"challenge"),o=m(r,"rpId"),i=r.allowCredentials;if(!u(n))return s("Invalid API response: challenge.challenge must be string",{originalData:e});if(!u(o))return s("Invalid API response: challenge.rpId must be string",{originalData:e});if(i!==void 0&&!X(i))return s("Invalid API response: allowCredentials must be array",{originalData:e});if(i){for(let d of i)if(!g(d)||d.type!=="public-key"||!u(d.id))return s("Invalid API response: allowCredentials items must have id and type",{originalData:e})}let a=r.timeout;if(a!==void 0&&!P(a))return s("Invalid API response: challenge.timeout must be number",{originalData:e});let l=r.userVerification;return l!==void 0&&!["required","preferred","discouraged"].includes(String(l))?s("Invalid API response: userVerification must be required|preferred|discouraged",{originalData:e}):f({session_id:t,challenge:{challenge:n,rpId:o,allowCredentials:i??[],...a!==void 0&&{timeout:a},...l!==void 0&&{userVerification:l}}})}function Ht(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"credential_id"),r=m(e,"status"),n=m(e,"session_token"),o=m(e,"user");if(!u(t))return s("Invalid API response: credential_id must be string",{field:"credential_id",originalData:e});if(!u(r))return s("Invalid API response: status must be string",{field:"status",originalData:e});if(!u(n))return s("Invalid API response: session_token must be string",{field:"session_token",originalData:e});let i=Ft(o,e);if(!i.ok)return s(i.error.message,{originalData:e});let a=e.redirect_url;return a!==void 0&&!u(a)?s("Invalid API response: redirect_url must be string",{originalData:e}):f({credential_id:t,status:r,session_token:n,user:i.value,...a!==void 0&&{redirect_url:a}})}function qt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"authenticated"),r=m(e,"session_token"),n=m(e,"user"),o=m(e,"signals");if(!Be(t))return s("Invalid API response: authenticated must be boolean",{field:"authenticated",originalData:e});if(!u(r))return s("Invalid API response: session_token must be string",{field:"session_token",originalData:e});let i=Ft(n,e);if(!i.ok)return s(i.error.message,{originalData:e});if(o!==void 0&&!g(o))return s("Invalid API response: signals must be object",{originalData:e});let a=e.redirect_url;return a!==void 0&&!u(a)?s("Invalid API response: redirect_url must be string",{originalData:e}):f({authenticated:t,session_token:r,user:i.value,signals:o,...a!==void 0&&{redirect_url:a}})}function jt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"valid"),r=m(e,"user_id"),n=m(e,"external_user_id"),o=m(e,"tenant_id"),i=m(e,"app_id");return Be(t)?u(r)?u(n)?u(o)?u(i)?f({valid:t,user_id:r,external_user_id:n,tenant_id:o,app_id:i}):s("Invalid API response: app_id must be string",{field:"app_id",originalData:e}):s("Invalid API response: tenant_id must be string",{field:"tenant_id",originalData:e}):s("Invalid API response: external_user_id must be string",{field:"external_user_id",originalData:e}):s("Invalid API response: user_id must be string",{field:"user_id",originalData:e}):s("Invalid API response: valid must be boolean",{field:"valid",originalData:e})}function Gt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=e.session_token??e.sessionToken;if(!u(t))return s("Invalid API response: session_token/sessionToken must be string",{field:"session_token",originalData:e});let r=e.redirect_url;return r!==void 0&&!u(r)?s("Invalid API response: redirect_url must be string",{originalData:e}):f({sessionToken:t,...r!==void 0&&{redirectUrl:r}})}var eo=["pending_passkey","pending_data","completed"],to=["pending_data","completed"];function Wt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id"),r=m(e,"onboarding_url"),n=m(e,"expires_in");return u(t)?u(r)?P(n)?f({session_id:t,onboarding_url:r,expires_in:n}):s("Invalid API response: expires_in must be number",{field:"expires_in",originalData:e}):s("Invalid API response: onboarding_url must be string",{field:"onboarding_url",originalData:e}):s("Invalid API response: session_id must be string",{field:"session_id",originalData:e})}function Yt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"status"),r=m(e,"onboarding_url"),n=m(e,"expires_in");return!u(t)||!eo.includes(t)?s("Invalid API response: status must be pending_passkey|pending_data|completed",{field:"status",originalData:e}):u(r)?P(n)?f({status:t,onboarding_url:r,expires_in:n}):s("Invalid API response: expires_in must be number",{originalData:e}):s("Invalid API response: onboarding_url must be string",{originalData:e})}function zt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id"),r=m(e,"status"),n=m(e,"onboarding_url");if(!u(t))return s("Invalid API response: session_id must be string",{field:"session_id",originalData:e});if(r!=="pending_passkey")return s("Invalid API response: status must be pending_passkey",{field:"status",originalData:e});if(!u(n))return s("Invalid API response: onboarding_url must be string",{originalData:e});let o=e.challenge,i;if(o!==void 0){let a=ro(o);if(!a.ok)return a;i=a.value}return f({session_id:t,status:"pending_passkey",onboarding_url:n,...i!==void 0&&{challenge:i}})}function ro(e){if(!g(e))return s("Invalid API response: challenge must be object",{originalData:e});let t=m(e,"rp"),r=m(e,"user"),n=m(e,"challenge"),o=m(e,"pubKeyCredParams");if(!g(t)||!u(t.name)||!u(t.id))return s("Invalid API response: challenge.rp must have name and id",{originalData:e});if(!g(r)||!u(r.id)||!u(r.name)||!u(r.displayName))return s("Invalid API response: challenge.user must have id, name, displayName",{originalData:e});if(!u(n))return s("Invalid API response: challenge.challenge must be string",{originalData:e});if(!X(o))return s("Invalid API response: challenge.pubKeyCredParams must be array",{originalData:e});for(let i of o)if(!g(i)||i.type!=="public-key"||!P(i.alg))return s("Invalid API response: pubKeyCredParams items must have type and alg",{originalData:e});return f({rp:t,user:r,challenge:n,pubKeyCredParams:o})}function Qt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id"),r=m(e,"status"),n=m(e,"user_id"),o=m(e,"tenant_id");return u(t)?!u(r)||!to.includes(r)?s("Invalid API response: status must be pending_data|completed",{originalData:e}):u(n)?u(o)?f({session_id:t,status:r,user_id:n,tenant_id:o}):s("Invalid API response: tenant_id must be string",{originalData:e}):s("Invalid API response: user_id must be string",{originalData:e}):s("Invalid API response: session_id must be string",{originalData:e})}function $t(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id"),r=m(e,"status"),n=m(e,"user_id"),o=m(e,"tenant_id"),i=m(e,"session_token");return u(t)?r!=="completed"?s("Invalid API response: status must be completed",{originalData:e}):!u(n)||!u(o)||!u(i)?s("Invalid API response: user_id, tenant_id, session_token must be strings",{originalData:e}):f({session_id:t,status:"completed",user_id:n,tenant_id:o,session_token:i}):s("Invalid API response: session_id must be string",{originalData:e})}function Fe(e){return e==null?f(void 0):g(e)&&Object.keys(e).length===0?f(void 0):s("Invalid API response: expected empty body (204)",{originalData:e})}function no(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.challenge=="string"&&t.rp!=null&&typeof t.rp=="object"&&t.user!=null&&typeof t.user=="object"&&Array.isArray(t.pubKeyCredParams)}function oo(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.challenge=="string"&&typeof t.rpId=="string"}function Ke(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t="resultado"in e&&g(e.resultado)?e.resultado:e,r=t.session_id,n=t.qr_url,o=t.expires_at,i=t.polling_token;if(!u(r)||!u(n)||!u(o)||!u(i))return s("Invalid API response: missing required fields",{originalData:e});let a={session_id:r,qr_url:n,expires_at:o,polling_token:i};return t.external_user_id!==void 0&&u(t.external_user_id)&&(a.external_user_id=t.external_user_id),f(a)}function Xt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t="resultado"in e&&g(e.resultado)?e.resultado:e,r=t.status;if(!u(r)||!["pending","authenticated","completed"].includes(r))return s("Invalid API response: invalid status",{originalData:e});let n=t.user_id,o=t.session_token,i=t.redirect_url;return n!==void 0&&!u(n)?s("Invalid API response: user_id must be a string when present",{originalData:e}):o!==void 0&&!u(o)?s("Invalid API response: session_token must be a string when present",{originalData:e}):i!==void 0&&!u(i)?s("Invalid API response: redirect_url must be a string when present",{originalData:e}):f({status:r,user_id:n,session_token:o,redirect_url:i})}function Jt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=e.type,r=t==="registration"?"registration":"auth",n=e.options;if(!g(n))return s("Invalid API response: options are required",{originalData:e});let o=200,i=$r(e.approval_context,o),a=$r(e.application_name,o);if(i===!1||a===!1)return s("Invalid API response: approval_context/application_name must be string max 200 chars",{originalData:e});let l={};return typeof i=="string"&&(l.approval_context=i),typeof a=="string"&&(l.application_name=a),r==="registration"?no(n)?f({type:"registration",options:n,...l}):s("Invalid API response: registration options must have challenge, rp, user, pubKeyCredParams",{originalData:e}):oo(n)?f({type:"auth",options:n,...l}):s("Invalid API response: auth options must have challenge and rpId",{originalData:e})}function $r(e,t){if(e!=null)return typeof e!="string"||e.length>t?!1:e}function Zt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"challenge"),r=m(e,"recovery_session_id");return g(t)?u(r)?f({challenge:t,recovery_session_id:r}):s("Invalid API response: recovery_session_id must be string",{field:"recovery_session_id",originalData:e}):s("Invalid API response: challenge must be object",{field:"challenge",originalData:e})}function er(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"status"),r=m(e,"session_token"),n=m(e,"user"),o=m(e,"credential_id");if(!u(t))return s("Invalid API response: status must be string",{field:"status",originalData:e});if(!u(r))return s("Invalid API response: session_token must be string",{field:"session_token",originalData:e});if(!u(o))return s("Invalid API response: credential_id must be string",{field:"credential_id",originalData:e});if(!g(n))return s("Invalid API response: user must be object",{field:"user",originalData:e});let i=m(n,"user_id");if(!u(i))return s("Invalid API response: user.user_id must be string",{field:"user.user_id",originalData:e});let l=e.redirect_url;if(l!==void 0&&!u(l))return s("Invalid API response: redirect_url must be string",{field:"redirect_url",originalData:e});let d=n;return f({status:t,session_token:r,credential_id:o,user:{user_id:i,external_user_id:u(d.external_user_id)?d.external_user_id:void 0,email:u(d.email)?d.email:void 0,metadata:g(d.metadata)?d.metadata:void 0},...l!==void 0&&{redirect_url:l}})}var Ve=class{constructor(t,r,n={}){this.httpClient=t;this.baseUrl=r;this.defaultHeaders=n}mergeHeaders(t){return{...this.defaultHeaders,...t}}async post(t,r,n){let o=`${this.baseUrl}${t}`,i=await this.httpClient.post(o,r,this.mergeHeaders());return i.ok?n(i.value):c(i.error)}async get(t,r,n){let o=`${this.baseUrl}${t}`,i=await this.httpClient.get(o,this.mergeHeaders(n));return i.ok?r(i.value):c(i.error)}async startRegister(t){return this.post("/v1/passkeys/register/start",t,Kt)}async startAuth(t){return this.post("/v1/passkeys/auth/start",t,Vt)}async finishRegister(t){return this.post("/v1/passkeys/register/finish",t,Ht)}async finishAuthentication(t){return this.post("/v1/passkeys/auth/finish",t,qt)}async validateSession(t){return this.get("/v1/sessions/validate",jt,{Authorization:`Bearer ${t}`})}async startEmailFallback(t){let r=`${this.baseUrl}/v1/fallback/email/start`,n=await this.httpClient.post(r,{userId:t.userId,email:t.email},this.mergeHeaders());return n.ok?f(void 0):c(n.error)}async verifyEmailCode(t){let r={userId:t.userId,code:t.code};return t.successUrl&&(r.success_url=t.successUrl),this.post("/v1/fallback/email/verify",r,Gt)}async startOnboarding(t){return this.post("/v1/onboarding/start",t,Wt)}async getOnboardingStatus(t){return this.get(`/v1/onboarding/${t}/status`,Yt)}async getOnboardingRegister(t){return this.get(`/v1/onboarding/${t}/register`,zt)}async registerOnboardingPasskey(t,r){return this.post(`/v1/onboarding/${t}/register-passkey`,r,Qt)}async completeOnboarding(t,r){return this.post(`/v1/onboarding/${t}/complete`,r,$t)}async initCrossDeviceAuth(){return this.post("/v1/auth/cross-device/init",{},Ke)}async initCrossDeviceRegistration(t){let r=typeof t?.externalUserId=="string"?t.externalUserId.trim():"",n=r.length>0?{external_user_id:r}:{};return this.post("/v1/auth/cross-device/init-registration",n,Ke)}async getCrossDeviceStatus(t,r){let n={};return typeof r=="string"&&r.length>0&&(n["X-Polling-Token"]=r),this.get(`/v1/auth/cross-device/status/${t}`,Xt,Object.keys(n).length>0?n:void 0)}async getCrossDeviceContext(t){return this.get(`/v1/auth/cross-device/context/${t}`,Jt)}async verifyCrossDeviceAuth(t){return this.post("/v1/auth/cross-device/verify",t,Fe)}async verifyCrossDeviceRegistration(t){return this.post("/v1/auth/cross-device/verify-registration",t,Fe)}async verifyAccountRecoveryOtp(t,r){return this.post("/v1/users/recovery/verify",{external_id:t,otp:r},Zt)}async completeAccountRecovery(t,r){return this.post("/v1/users/recovery/complete",{recovery_session_id:t,credential:r},er)}};function io(e){return typeof e=="object"&&e!==null&&e.ok===!0&&"resultado"in e}function Zr(e){if(typeof e!="object"||e===null)return!1;let t=e;if(t.ok!==!1||!t.error||typeof t.error!="object")return!1;let r=t.error;return typeof r.code=="string"&&typeof r.message=="string"}function Xr(e,t){if(Zr(e))return{message:e.error.message,code:Ee(e.error.code)};let r=e,n=r?.error;if(typeof n=="object"&&n!==null&&"code"in n&&typeof n.code=="string")return{message:n.message??r?.message??t,code:Ee(n.code)};let o=r?.message??t,i=r?.error,a=typeof i=="string"?Ee(i):i===void 0?"NETWORK_FAILURE":Ee(String(i));return{message:o,code:a}}var so=3e4;function ao(){if(typeof globalThis.crypto<"u"&&typeof globalThis.crypto.randomUUID=="function")return globalThis.crypto.randomUUID();throw new Error("Web Crypto API is required but not available.")}function Jr(e,t){let r=t*Math.pow(2,e);return Math.min(r,so)}function lo(e,t){return e!=="GET"?!1:t>=500||t===429}var He=class{constructor(t,r=0,n=1e3,o){this.timeoutMs=t;this.maxRetries=r;this.retryDelayMs=n;this.logger=o}async get(t,r){return this.request(t,{method:"GET",headers:r})}async post(t,r,n){return this.request(t,{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json",...n}})}async request(t,r){let n=(r.method??"GET").toUpperCase(),o=ao(),i=new Headers(r.headers);i.set("X-Request-Id",o),this.logger&&this.logger.debug("request",{requestId:o,url:t,method:n});let a;for(let l=0;l<=this.maxRetries;l++)try{let d=new AbortController,p=setTimeout(()=>d.abort(),this.timeoutMs);try{let h=await fetch(t,{...r,headers:i,signal:d.signal});if(!h.ok){let O;try{O=await h.json()}catch{}let{message:Y,code:ar}=Xr(O,h.statusText),D=b(ar,Y,{requestId:o,status:h.status,statusText:h.statusText,data:O});if(lo(n,h.status)&&l<this.maxRetries){a=D,clearTimeout(p),await new Promise(kn=>setTimeout(kn,Jr(l,this.retryDelayMs)));continue}return c(D)}if(h.status===204)return f(void 0);if(h.headers.get("content-length")==="0")return f(void 0);let y=await h.json();if(io(y))return f(y.resultado);let I=y;if(typeof y=="object"&&y!==null&&I.ok===!0&&!("resultado"in I))return f(void 0);if(Zr(y)){let{message:O,code:Y}=Xr(y,h.statusText);return c(b(Y,O,{requestId:o,status:h.status,statusText:h.statusText,data:y}))}return f(y)}finally{clearTimeout(p)}}catch(d){if(a=d,n==="GET"&&l<this.maxRetries)await new Promise(h=>setTimeout(h,Jr(l,this.retryDelayMs)));else break}return a instanceof Error&&a.name==="AbortError"?c(b("TIMEOUT","Request timed out",{requestId:o})):c(b("NETWORK_FAILURE",a instanceof Error?a.message:"Request failed",{requestId:o,cause:a}))}};function x(e){let t=new Uint8Array(e),r=Array.from(t,o=>String.fromCharCode(o)).join("");if(typeof globalThis.btoa>"u")throw Nt("encode");return globalThis.btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function uo(e){if(typeof globalThis.atob>"u")throw Nt("decode");let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.length%4,n=r===0?t:t+"=".repeat(4-r),o=globalThis.atob(n);return Uint8Array.from(o,i=>i.charCodeAt(0))}function J(e){let t=uo(e),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}function en(e){return e!==null&&typeof e=="object"&&"clientDataJSON"in e&&e.clientDataJSON instanceof ArrayBuffer}function U(e){if(!e.response)throw b("UNKNOWN_ERROR","Credential response is missing",{credential:e});let t=e.response;if(!en(t))throw b("UNKNOWN_ERROR","Invalid credential response structure",{response:t});if(!("attestationObject"in t))throw b("UNKNOWN_ERROR","Invalid credential response structure for register: attestationObject is missing",{response:t});let r=t.clientDataJSON,n=t.attestationObject;return{id:e.id,rawId:x(e.rawId),response:{clientDataJSON:x(r),attestationObject:x(n)},type:"public-key"}}function qe(e){if(!e.response)throw b("UNKNOWN_ERROR","Credential response is missing",{credential:e});let t=e.response;if(!en(t))throw b("UNKNOWN_ERROR","Invalid credential response structure",{response:t});if(!("authenticatorData"in t)||!("signature"in t))throw b("UNKNOWN_ERROR","Invalid credential response structure for auth: authenticatorData or signature is missing",{response:t});let r=t.clientDataJSON,n=t.authenticatorData,o=t.signature,i=t.userHandle;return{id:e.id,rawId:x(e.rawId),response:{authenticatorData:x(n),clientDataJSON:x(r),signature:x(o),...i&&{userHandle:x(i)}},type:"public-key"}}function Z(){try{return!(typeof navigator>"u"||!navigator.credentials||typeof PublicKeyCredential>"u")}catch{return!1}}async function co(){try{return!Z()||typeof PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable!="function"?!1:await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()}catch{return!1}}async function je(){let e=Z(),t=await co();return{isPasskeySupported:e,platformAuthenticatorAvailable:t,recommendedFlow:e?"passkey":"fallback"}}function G(e,t="create"){if(!e||typeof e!="object"||!("id"in e)||!("rawId"in e)||!("response"in e))throw Wr(t)}async function ye(e){let{operation:t,eventEmitter:r,start:n,createOptions:o,invoke:i,finish:a}=e;try{if(r.emit("start",{type:"start",operation:t}),!Z()){let E=Gr();return r.emit("error",{type:"error",error:E}),c(E)}let l=await n();if(!l.ok)return r.emit("error",{type:"error",error:l.error}),c(l.error);let d=o(l.value);if(!d.ok)return r.emit("error",{type:"error",error:d.error}),c(d.error);let p=await i(d.value);if(!p){let E=A("credential",`${t==="register"?"creation":"retrieval"} failed`);return r.emit("error",{type:"error",error:E}),c(E)}try{G(p)}catch(E){let y=_(E);return r.emit("error",{type:"error",error:y}),c(y)}let h=await a(l.value,p);return h.ok?f(h.value):(r.emit("error",{type:"error",error:h.error}),c(h.error))}catch(l){let d=_(l);return r.emit("error",{type:"error",error:d}),c(d)}}function W(e,t){try{Ne(e.challenge,"challenge"),Ne(e.user.id,"user.id");let r=J(e.challenge),n=J(e.user.id),o={userVerification:"preferred"};e.authenticatorSelection&&(o={...e.authenticatorSelection}),t&&(o={...o,authenticatorAttachment:t});let i={rp:{id:e.rp.id,name:e.rp.name},user:{id:n,name:e.user.name,displayName:e.user.displayName},challenge:r,pubKeyCredParams:e.pubKeyCredParams,...e.timeout!==void 0&&{timeout:e.timeout},attestation:"none",authenticatorSelection:o,...e.excludeCredentials&&{excludeCredentials:e.excludeCredentials.map(a=>({id:J(a.id),type:a.type,...a.transports&&{transports:a.transports}}))}};return f({publicKey:i})}catch(r){return c(_(r))}}function tr(e,t){try{Ne(e.challenge,"challenge");let r=J(e.challenge);return f({publicKey:{challenge:r,rpId:e.rpId,...e.timeout!==void 0&&{timeout:e.timeout},userVerification:e.userVerification??"preferred",...e.allowCredentials&&{allowCredentials:e.allowCredentials.map(n=>({id:J(n.id),type:n.type,...n.transports&&{transports:n.transports}}))}},...t!==void 0&&{mediation:t}})}catch(r){return c(_(r))}}async function tn(e,t,r){let n=e.externalUserId??e.external_user_id;if(!n||typeof n!="string"||n.trim()===""){let i=A("externalUserId","must be a non-empty string");return r.emit("error",{type:"error",error:i}),c(i)}let o=await ye({operation:"register",eventEmitter:r,start:()=>t.startRegister({external_user_id:n}),createOptions:i=>W(i.challenge,e.authenticatorType),invoke:async i=>{let a={...i,...e.signal&&{signal:e.signal}};return navigator.credentials.create(a)},finish:async(i,a)=>{let l=await t.finishRegister({session_id:i.session_id,credential:U(a),...e.successUrl&&{success_url:e.successUrl}});return l.ok?f({success:!0,credentialId:l.value.credential_id,credential_id:l.value.credential_id,status:l.value.status,sessionToken:l.value.session_token,user:{userId:l.value.user.user_id,externalUserId:l.value.user.external_user_id,email:l.value.user.email,metadata:l.value.user.metadata},...l.value.redirect_url&&{redirectUrl:l.value.redirect_url}}):c(l.error)}});return o.ok&&r.emit("success",{type:"success",operation:"register",token:o.value.sessionToken,user:o.value.user}),o}async function rn(e,t,r){let n=e.externalUserId??e.external_user_id,o=n!==void 0&&typeof n=="string"&&n.trim()!=="",i=await ye({operation:"authenticate",eventEmitter:r,start:()=>t.startAuth(o?{external_user_id:n.trim()}:{}),createOptions:a=>tr(a.challenge,e.mediation),invoke:async a=>{let l={...a,...e.signal&&{signal:e.signal}};return navigator.credentials.get(l)},finish:async(a,l)=>{let d=await t.finishAuthentication({session_id:a.session_id,credential:qe(l),...e.successUrl&&{success_url:e.successUrl}});return d.ok?f({authenticated:d.value.authenticated,sessionToken:d.value.session_token,user:{userId:d.value.user.user_id,externalUserId:d.value.user.external_user_id,email:d.value.user.email,metadata:d.value.user.metadata},signals:d.value.signals,...d.value.redirect_url&&{redirectUrl:d.value.redirect_url}}):c(d.error)}});return i.ok&&r.emit("success",{type:"success",operation:"authenticate",token:i.value.sessionToken,user:i.value.user}),i}async function Ge(e,t){return t?t.aborted?"aborted":new Promise(r=>{let n=()=>{o(),r("aborted")},o=()=>{clearTimeout(i),t.removeEventListener("abort",n)},i=setTimeout(()=>{o(),r("completed")},e);t.addEventListener("abort",n)}):(await new Promise(r=>setTimeout(r,e)),"completed")}var po=2e3,mo=60,We=class{constructor(t){this.apiClient=t}async startFlow(t,r){let n=await this.apiClient.startOnboarding({user_role:t.user_role});if(!n.ok)return c(n.error);let{session_id:o}=n.value;for(let i=0;i<mo;i++){if(r?.aborted)return c(b("ABORT_ERROR","Operation aborted by user or timeout"));if(await Ge(po,r)==="aborted")return c(b("ABORT_ERROR","Operation aborted by user or timeout"));let l=await this.apiClient.getOnboardingStatus(o);if(!l.ok)return c(l.error);let d=l.value.status,p=l.value.onboarding_url;if(d==="pending_passkey"){let h=await this.apiClient.getOnboardingRegister(o);if(!h.ok)return c(h.error);let E=h.value;if(!E.challenge)return c(b("NOT_SUPPORTED","Onboarding requires user action - complete passkey registration at the provided onboarding_url",{onboarding_url:p}));let y=W(E.challenge);if(!y.ok)return c(y.error);let I;try{I=await navigator.credentials.create(y.value)}catch(D){return c(_(D))}try{G(I,"create")}catch(D){return c(_(D))}let O;try{O=U(I)}catch(D){return c(_(D))}let Y=await this.apiClient.registerOnboardingPasskey(o,{credential:O,challenge:E.challenge.challenge});return Y.ok?await this.apiClient.completeOnboarding(o,{company_name:t.company_name}):c(Y.error)}if(d==="completed")return await this.apiClient.completeOnboarding(o,{company_name:t.company_name})}return c(b("TIMEOUT","Onboarding timed out"))}};var fo=2e3,ho=60,Ye=class{constructor(t){this.apiClient=t}async init(){return this.apiClient.initCrossDeviceAuth()}async initRegistration(t){return this.apiClient.initCrossDeviceRegistration(t)}async waitForSession(t,r,n){if(r?.aborted)return c(b("ABORT_ERROR","Operation aborted by user or timeout"));for(let o=0;o<ho;o++){let i=await this.apiClient.getCrossDeviceStatus(t,n);if(!i.ok)return c(i.error);if(i.value.status==="completed"){if(!i.value.session_token||!i.value.user_id)return c(b("UNKNOWN_ERROR","Missing data in completed session"));let l=i.value.redirect_url!=null&&i.value.redirect_url!==""?i.value.redirect_url:void 0;return f({session_token:i.value.session_token,user_id:i.value.user_id,...l!==void 0&&{redirectUrl:l}})}if(await Ge(fo,r)==="aborted")return c(b("ABORT_ERROR","Operation aborted by user or timeout"))}return c(b("TIMEOUT","Cross-device authentication timed out"))}async approve(t){let r=await this.apiClient.getCrossDeviceContext(t);if(!r.ok)return c(r.error);let n=r.value;return n.type==="registration"?this.executeRegistrationApproval(t,n):this.executeAuthApproval(t,n)}async executeRegistrationApproval(t,r){let n=W(r.options);if(!n.ok)return c(n.error);let o;try{o=await navigator.credentials.create(n.value)}catch(a){return c(_(a))}try{G(o,"create")}catch(a){return c(_(a))}let i;try{i=U(o)}catch(a){return c(_(a))}return this.apiClient.verifyCrossDeviceRegistration({session_id:t,credential:i})}async executeAuthApproval(t,r){let n=tr(r.options);if(!n.ok)return c(n.error);let o;try{o=await navigator.credentials.get(n.value)}catch(a){return c(_(a))}try{G(o,"get")}catch(a){return c(_(a))}let i;try{i=qe(o)}catch(a){return c(_(a))}return this.apiClient.verifyCrossDeviceAuth({session_id:t,credential:i})}};var ze=class{handlers;constructor(){this.handlers=new Map}on(t,r){let n=this.handlers.get(t);return n||(n=new Set,this.handlers.set(t,n)),n.add(r),()=>{this.off(t,r)}}off(t,r){let n=this.handlers.get(t);n&&(n.delete(r),n.size===0&&this.handlers.delete(t))}emit(t,r){let n=this.handlers.get(t);if(n)for(let o of n)try{o(r)}catch{}}removeAllListeners(){this.handlers.clear()}};var rr="https://api.trymellonauth.com",nn="https://api.trymellonauth.com/v1/telemetry";var on="trymellon_sandbox_session_token_v1";function sn(e){return{async send(t){let r=JSON.stringify(t);if(typeof navigator<"u"&&typeof navigator.sendBeacon=="function"){navigator.sendBeacon(e,r);return}typeof fetch<"u"&&await fetch(e,{method:"POST",body:r,headers:{"Content-Type":"application/json"},keepalive:!0})}}}function nr(e,t){return{event:e,latencyMs:t,ok:!0}}var Qe=class{constructor(t,r,n,o,i){this.apiClient=t;this.eventEmitter=r;this.sandbox=n;this.sandboxToken=o;this.telemetrySender=i}async sandboxAuthResult(t,r){let n="externalUserId"in r?r.externalUserId??r.external_user_id??"sandbox":r.external_user_id??r.externalUserId??"sandbox",o=typeof n=="string"?n:"sandbox";return t==="register"?Promise.resolve(f({success:!0,credentialId:"",status:"sandbox",sessionToken:this.sandboxToken,user:{userId:"sandbox-user",externalUserId:o}})):Promise.resolve(f({authenticated:!0,sessionToken:this.sandboxToken,user:{userId:"sandbox-user",externalUserId:o}}))}async register(t){if(this.sandbox){let o=await this.sandboxAuthResult("register",t);return o.ok&&this.eventEmitter.emit("success",{type:"success",operation:"register",token:o.value.sessionToken,user:o.value.user}),o}let r=Date.now(),n=await tn(t,this.apiClient,this.eventEmitter);return n.ok&&this.telemetrySender&&this.telemetrySender.send(nr("register",Date.now()-r)).catch(()=>{}),n}async authenticate(t){if(this.sandbox){let o=await this.sandboxAuthResult("authenticate",t);return o.ok&&this.eventEmitter.emit("success",{type:"success",operation:"authenticate",token:o.value.sessionToken,user:o.value.user}),o}let r=Date.now(),n=await rn(t,this.apiClient,this.eventEmitter);return n.ok&&this.telemetrySender&&this.telemetrySender.send(nr("authenticate",Date.now()-r)).catch(()=>{}),n}};async function an(e,t,r){let n=e.externalUserId??e.external_user_id;if(!n||typeof n!="string"||n.trim()===""){let i=A("externalUserId","must be a non-empty string");return r.emit("error",{type:"error",error:i}),c(i)}if(!e.otp||typeof e.otp!="string"||e.otp.trim().length!==6){let i=A("otp","must be a 6-digit string");return r.emit("error",{type:"error",error:i}),c(i)}let o=await ye({operation:"register",eventEmitter:r,start:()=>t.verifyAccountRecoveryOtp(n,e.otp),createOptions:i=>W(i.challenge),invoke:async i=>navigator.credentials.create(i),finish:async(i,a)=>{let l=await t.completeAccountRecovery(i.recovery_session_id,U(a));if(!l.ok)return c(l.error);let{credential_id:d,status:p,session_token:h,user:E,redirect_url:y}=l.value;return f({success:!0,credentialId:d,status:p,sessionToken:h,user:{userId:E.user_id,externalUserId:E.external_user_id,email:E.email,metadata:E.metadata},...y!==void 0&&{redirectUrl:y}})}});return o.ok&&r.emit("success",{type:"success",operation:"register",token:o.value.sessionToken,user:o.value.user}),o}var $e=class{constructor(t,r){this.apiClient=t;this.eventEmitter=r}recover(t){return an(t,this.apiClient,this.eventEmitter)}};var Xe=class e{sandbox;sandboxToken;apiClient;eventEmitter;telemetrySender;crossDeviceManager;authService;recoveryService;onboarding;static create(t){try{let r=t.appId,n=t.publishableKey;if(!r||typeof r!="string"||r.trim()==="")return c(A("appId","must be a non-empty string"));if(!n||typeof n!="string"||n.trim()==="")return c(A("publishableKey","must be a non-empty string"));let o=t.apiBaseUrl??rr;Bt(o,"apiBaseUrl");let i=t.timeoutMs??3e4;return j(i,"timeoutMs",1e3,3e5),t.maxRetries!==void 0&&j(t.maxRetries,"maxRetries",0,10),t.retryDelayMs!==void 0&&j(t.retryDelayMs,"retryDelayMs",100,1e4),f(new e(t))}catch(r){return Ut(r)?c(r):c(A("config",r.message))}}constructor(t){this.sandbox=t.sandbox===!0,this.sandboxToken=this.sandbox&&t.sandboxToken!=null&&t.sandboxToken!==""?t.sandboxToken:on;let r=t.appId,n=t.publishableKey;if(!r||typeof r!="string"||r.trim()==="")throw A("appId","must be a non-empty string");if(!n||typeof n!="string"||n.trim()==="")throw A("publishableKey","must be a non-empty string");let o=t.apiBaseUrl??rr;Bt(o,"apiBaseUrl");let i=t.timeoutMs??3e4;j(i,"timeoutMs",1e3,3e5),t.maxRetries!==void 0&&j(t.maxRetries,"maxRetries",0,10),t.retryDelayMs!==void 0&&j(t.retryDelayMs,"retryDelayMs",100,1e4);let a=t.maxRetries??3,l=t.retryDelayMs??1e3,d=new He(i,a,l,t.logger),p=t.origin??(typeof window<"u"&&window?.location?.origin?window.location.origin:void 0),h={"X-App-Id":r.trim(),Authorization:`Bearer ${n.trim()}`,...p&&{Origin:p}};this.apiClient=new Ve(d,o,h),this.eventEmitter=new ze,t.enableTelemetry&&(this.telemetrySender=t.telemetrySender??sn(t.telemetryEndpoint??nn)),this.authService=new Qe(this.apiClient,this.eventEmitter,this.sandbox,this.sandboxToken,this.telemetrySender),this.recoveryService=new $e(this.apiClient,this.eventEmitter),this.onboarding=new We(this.apiClient),this.crossDeviceManager=new Ye(this.apiClient)}static isSupported(){return Z()}async register(t){return this.authService.register(t)}async authenticate(t){return this.authService.authenticate(t)}async validateSession(t){return this.sandbox&&t===this.sandboxToken?Promise.resolve(f({valid:!0,user_id:"sandbox-user",external_user_id:"sandbox",tenant_id:"sandbox-tenant",app_id:"sandbox-app"})):this.apiClient.validateSession(t)}async getStatus(){return je()}on(t,r){return this.eventEmitter.on(t,r)}version(){return"2.0.0"}fallback={email:{start:async t=>this.apiClient.startEmailFallback(t),verify:async t=>{let r=await this.apiClient.verifyEmailCode({userId:t.userId,code:t.code,...t.successUrl&&{successUrl:t.successUrl}});return r.ok?f({sessionToken:r.value.sessionToken,...r.value.redirectUrl&&{redirectUrl:r.value.redirectUrl}}):r}}};auth={crossDevice:{init:()=>this.crossDeviceManager.init(),initRegistration:t=>this.crossDeviceManager.initRegistration(t??{}),waitForSession:(t,r,n)=>this.crossDeviceManager.waitForSession(t,r,n),getContext:t=>this.apiClient.getCrossDeviceContext(t),approve:t=>this.crossDeviceManager.approve(t)},recoverAccount:t=>this.recoveryService.recover(t)}};function or(e){let t=Xe.create({appId:e.appId,publishableKey:e.publishableKey});return!t.ok||t.value==null?null:t.value}function hn(e){if(e==null||typeof e!="object")return!1;let t=e,r=typeof t.authenticate=="function",n=typeof t.register=="function",o=typeof t.on=="function";return r&&n&&o}function gn(e){return e?{externalUserId:e}:{}}var Je="mellon:open",Ae="mellon:open-request",N="mellon:close",Ze="mellon:success",et="mellon:error",tt="mellon:start",_e="mellon:cancelled",rt="mellon:fallback",nt="mellon:tab-change";function ot(e,t,r,n){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:n.bubbles,composed:n.composed}))}function it(e){return e==="authenticate"?"login":"register"}function Eo(e){if(e==null||typeof e!="object")return;let t=e,r=t.userId;if(typeof r!="string"||r.length===0)return;let n={userId:r};return typeof t.externalUserId=="string"&&(n.externalUserId=t.externalUserId),typeof t.email=="string"&&(n.email=t.email),t.metadata!=null&&typeof t.metadata=="object"&&!Array.isArray(t.metadata)&&(n.metadata=t.metadata),n}function yo(e){return e!=null&&typeof e=="object"&&e.type==="start"&&(e.operation==="register"||e.operation==="authenticate")}function Ao(e){let t=e;return e!=null&&typeof e=="object"&&t.type==="success"&&typeof t.token=="string"&&(t.operation==="register"||t.operation==="authenticate")}function _o(e){return e!=null&&typeof e=="object"&&e.type==="error"}function Ro(e){return e!=null&&typeof e=="object"&&e.type==="cancelled"&&(e.operation==="register"||e.operation==="authenticate")}var ir={subscribe(e,t){if(e==null||t==null)throw new TypeError("eventBridgeAdapter.subscribe: core and host are required");let r=[],n="authenticate",o=!1,i=e.on("start",p=>{if(!yo(p))return;n=p.operation,o=!1;let h={operation:it(p.operation),...typeof p.nonce=="string"&&{nonce:p.nonce}};ot(t,tt,h,{bubbles:!0,composed:!0})});r.push(i);let a=e.on("success",p=>{if(!Ao(p)||o||p.token.length===0)return;o=!0;let h=Eo(p.user),E={operation:it(p.operation),token:p.token,...typeof p.nonce=="string"&&{nonce:p.nonce},...h!==void 0&&{user:h},...typeof p.redirectUrl=="string"&&{redirectUrl:p.redirectUrl}};ot(t,Ze,E,{bubbles:!1,composed:!0})});r.push(a);let l=e.on("error",p=>{if(!_o(p)||o)return;let h=p.error?.code??"UNKNOWN_ERROR",E={operation:it(p.operation??n),code:h,message:typeof p.error?.message=="string"?p.error.message:"Unknown error",...typeof p.nonce=="string"&&{nonce:p.nonce}};ot(t,et,E,{bubbles:!0,composed:!0})});r.push(l);let d=e.on("cancelled",p=>{if(!Ro(p))return;let h={operation:it(p.operation),...typeof p.nonce=="string"&&{nonce:p.nonce}};ot(t,_e,h,{bubbles:!0,composed:!0})});return r.push(d),function(){for(let h of r)h()}}};function bn(e){return{isPasskeySupported:e.isPasskeySupported,platformAuthenticatorAvailable:e.platformAuthenticatorAvailable,recommendedFlow:e.recommendedFlow}}function vo(){return{getClientStatus:async()=>{let e=await je();return bn(e)}}}function En(e){let t=e;if(typeof t.getStatus!="function")return vo();let r=t.getStatus;return{getClientStatus:async()=>{let n=await r();return bn(n)}}}function yn(e){return new CustomEvent(Je,{detail:e,bubbles:!0,composed:!0})}function An(e){return new CustomEvent(N,{detail:e,bubbles:!0,composed:!0})}function _n(e){return new CustomEvent(_e,{detail:e,bubbles:!0,composed:!0})}function Rn(e){return new CustomEvent(rt,{detail:e,bubbles:!0,composed:!0})}function vn(e){return new CustomEvent(nt,{detail:e,bubbles:!0,composed:!0})}var st=class{_currentState=T;_lastRenderedState=null;_renderDirty=!0;_pendingOperation="authenticate";_currentNonce=void 0;_envEvalRequestId=0;get currentState(){return this._currentState}setState(t){this._currentState=t,this._renderDirty=!0}invalidateRender(){this._renderDirty=!0}consumeRenderDecision(){return!this._renderDirty&&this._currentState===this._lastRenderedState?!1:(this._lastRenderedState=this._currentState,this._renderDirty=!1,!0)}setPendingOperationFromTab(t){this._pendingOperation=t==="login"?"authenticate":"register"}get pendingOperation(){return this._pendingOperation}setNonce(t){this._currentNonce=t}consumeCancelledDetailIfAuthenticating(){if(this._currentState!=="AUTHENTICATING")return null;let t={operation:this._pendingOperation==="authenticate"?"login":this._pendingOperation,...this._currentNonce!==void 0&&{nonce:this._currentNonce}};return this._currentNonce=void 0,t}handleAuthSuccess(){let t=v.tryHandleAuthSuccess(this._currentState);t!==null&&this.setState(t)}handleAuthError(){let t=v.tryHandleAuthError(this._currentState);t!==null&&this.setState(t)}onStartEvent(t){t?.nonce!==void 0&&(this._currentNonce=t.nonce)}startAuthFromClick(t,r,n){if(!t||!gr(this._currentState))return;this.setPendingOperationFromTab(r);let o=v.startAuth(this._currentState,r,t,n);this.setState(o)}async runEnvEval(t){let r=++this._envEvalRequestId;this.setState(v.envEvalStart(this._currentState));let n=await v.evaluateEnv({...t,currentState:this._currentState});return r!==this._envEvalRequestId?null:n}reset(){this._currentState=v.reset(this._currentState),this._lastRenderedState=null,this._renderDirty=!0,this._currentNonce=void 0}setStateForRender(t){this._currentState=t,this._renderDirty=!0}};var ee=class extends HTMLElement{_controller=new st;_unsubscribeBridge=null;_core=null;_lastCoreConfig=null;setState(t){this._controller.setState(t),this.scheduleRenderIfNeeded()}invalidateRender(){this._controller.invalidateRender(),this.scheduleRenderIfNeeded()}scheduleRenderIfNeeded(){this.shadowRoot&&this._controller.consumeRenderDecision()&&this._render()}_emitCancelledIfAuthenticating(){let t=this._controller.consumeCancelledDetailIfAuthenticating();return t?(this.dispatchEvent(_n(t)),!0):!1}attachCore(t){if(this._core!==null&&this._teardownCore(),t==null){this._core=null,this._controller.reset(),this.scheduleRenderIfNeeded();return}if(!hn(t))throw new Error("[trymellon-auth] attachCore requires a CoreAuthPort-compatible instance.");this._core=t,this._unsubscribeBridge=ir.subscribe(this._core,this),this._attachHostListeners(),this._runEnvEval()}_teardownCore(){this._unsubscribeBridge?.(),this._unsubscribeBridge=null,this.removeEventListener("mellon:start",this._onMellonStart),this.removeEventListener("mellon:success",this._onMellonSuccess),this.removeEventListener("mellon:error",this._onMellonError),this._core=null}_attachHostListeners(){this.removeEventListener("mellon:start",this._onMellonStart),this.removeEventListener("mellon:success",this._onMellonSuccess),this.removeEventListener("mellon:error",this._onMellonError),this.addEventListener("mellon:start",this._onMellonStart),this.addEventListener("mellon:success",this._onMellonSuccess),this.addEventListener("mellon:error",this._onMellonError)}_onMellonSuccess=()=>{this._controller.handleAuthSuccess(),this.scheduleRenderIfNeeded()};_onMellonError=()=>{this._controller.handleAuthError(),this.scheduleRenderIfNeeded()};_onMellonStart=t=>{let r=t.detail;this._controller.onStartEvent(r)};startAuthFromClick(){this._core&&this.canStartAuth()&&(this._controller.startAuthFromClick(this._core,this.getTabKind(),this.getCoreAuthOptions()),this.scheduleRenderIfNeeded())}dispatchFallback(t){let r=t!==void 0?{...this.getFallbackDetail(),fallbackType:t}:this.getFallbackDetail();this.dispatchEvent(Rn(r))}async _runEnvEval(){if(!this._core)return;let t={...this.getEnvEvalParams(),envStatusPort:En(this._core)},r=await this._controller.runEnvEval(t);r!==null&&(!this._core||!this.isConnected||this.setState(r))}_maybeAutoCreateCoreAndRunEnvEval(){if(this._core!==null)return;let t=this.getCoreConfig();if(!t)return;let r=or(t);if(!r){this.attachCore(null);return}this.attachCore(r)}_reconcileCoreFromConfig(){let t=this.getCoreConfig();if(this._lastCoreConfig===null&&t===null||this._lastCoreConfig!==null&&t!==null&&this._lastCoreConfig.appId===t.appId&&this._lastCoreConfig.publishableKey===t.publishableKey)return;if(this._lastCoreConfig=t,t===null){this.attachCore(null);return}let n=or(t);this.attachCore(n??null)}disconnectedCallback(){this._teardownCore()}get currentState(){return this._controller.currentState}reset(){this._emitCancelledIfAuthenticating(),this._controller.reset(),this.scheduleRenderIfNeeded()}setStateForRender(t){this._controller.setStateForRender(t),this.scheduleRenderIfNeeded()}};function To(e){if(e==null||e.trim()==="")return z;let t=e.split(",").map(o=>o.trim()),r=t[0]??z.register,n=t[1]??z.login;return{register:r,login:n}}function at(e){let t={open:Oe(e.getAttribute("open")),mode:C(e.getAttribute("mode"),oe,Ce),tab:C(e.getAttribute("tab"),ne,Ie),tabLabels:To(e.getAttribute("tab-labels")),theme:C(e.getAttribute("theme"),B,K),sessionId:M(e.getAttribute("session-id")),onboardingUrl:M(e.getAttribute("onboarding-url")),isMobileOverride:br(e.getAttribute("is-mobile-override")),fallbackType:Er(e.getAttribute("fallback-type"),ie),appId:V(e.getAttribute("app-id")),publishableKey:V(e.getAttribute("publishable-key")),appName:M(e.getAttribute("app-name")),dialogTitle:M(e.getAttribute("dialog-title")),dialogDescription:M(e.getAttribute("dialog-description")),externalUserId:M(e.getAttribute("external-user-id")),modalVariant:C(e.getAttribute("modal-variant"),le,xe)};return yt(t)}function So(e){let t=e.querySelector(`.${St}`);return t||(t=document.createElement("div"),t.className=St,e.appendChild(t)),t}function Co(e){let t=e.querySelector(`.${fe}`);return t||(t=document.createElement("div"),t.className=fe,t.setAttribute("aria-hidden","true"),e.appendChild(t)),t}function Io(e){let t=e.querySelector(`.${Ct}`);return t||(t=document.createElement("div"),t.className=Ct,e.appendChild(t)),t}function Mo(e,t){e.setAttribute("role","dialog"),e.setAttribute("aria-modal",t==="modal"?"true":"false"),e.setAttribute("aria-labelledby",Pe),e.setAttribute("aria-describedby",ge)}function Lo(e,t){let r=e.querySelector(`#${Pe}`);r||(r=document.createElement("h2"),r.id=Pe,r.className="mellon-dialog-title",e.insertBefore(r,e.firstChild));let n=t.dialogTitle?.trim()??(t.appName?.trim()?Ar(t.appName.trim()):yr);r.textContent=n;let o=e.querySelector(`#${ge}`);o||(o=document.createElement("p"),o.id=ge,o.className="mellon-dialog-desc",e.insertBefore(o,r.nextSibling)),o.textContent=t.dialogDescription?.trim()??_r}function xo(e){let t=e.querySelector(`.${xt}`);t||(t=document.createElement("button"),t.type="button",t.className=xt,t.setAttribute("aria-label",vr),t.setAttribute("data-mellon-modal-close","true"),t.textContent="\xD7",e.appendChild(t))}function Oo(e,t){let r=e.querySelector(`.${he}`);if(!r){r=document.createElement("div"),r.className=he,r.setAttribute("role","tablist");let i=document.createElement("button");i.type="button",i.setAttribute("data-tab","register"),i.setAttribute("role","tab");let a=document.createElement("button");a.type="button",a.setAttribute("data-tab","login"),a.setAttribute("role","tab"),r.appendChild(i),r.appendChild(a);let l=e.querySelector(`#${ge}`);e.insertBefore(r,l?l.nextSibling:e.firstChild)}let[n,o]=r.querySelectorAll("button");return n&&(n.textContent=t.register),o&&(o.textContent=t.login),r}function sr(e){let t=e.querySelector(`.${It}`);if(!t){t=document.createElement("div"),t.className=It;let r=e.querySelector(`.${he}`);e.insertBefore(t,r?r.nextSibling:e.firstChild)}return t}function Do(){let e=document.createElementNS(w,"svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("aria-hidden","true"),e.setAttribute("class","mellon-qr-icon"),e.setAttribute("fill","currentColor");let t=document.createElementNS(w,"path");return t.setAttribute("d","M3 3h6v6H3V3zm2 2v2h2V5H5zm8-2h6v6h-6V3zm2 2v2h2V5h-2zM3 15h6v6H3v-6zm2 2v2h2v-2H5zm8-2h6v6h-6v-6zm2 2v2h2v-2h-2zm4-12h2v2h-2V5zm0 8h2v2h-2v-2zm-4 4h2v2h-2v-2zm0-8h2v2h-2V9zm0 4h2v2h-2v-2z"),e.appendChild(t),e}function Tn(){let e=document.createDocumentFragment(),t=document.createElement("div");t.className=Sr;let r=document.createElement("p");r.className="mellon-cross-device-cta-text",r.textContent=Tr,t.appendChild(r);let n=document.createElement("button");return n.type="button",n.className="mellon-btn mellon-btn-qr-icon",n.setAttribute("data-mellon-action",Q),n.setAttribute("aria-label",Cr),n.appendChild(Do()),t.appendChild(n),e.appendChild(t),e}function ko(){let e=document.createElement("div");e.className=Ir,e.setAttribute("aria-live","polite");let t=document.createElement("span");t.textContent=xr;let r=document.createElement("span");return r.className="mellon-qr-dots",r.setAttribute("aria-hidden","true"),e.appendChild(t),e.appendChild(r),e}function wo(){let e=document.createElement("div");return e.className=Mr,e.setAttribute("aria-live","polite"),e.textContent=Or,e}function Po(e){let t=sr(e),r=t.querySelector(`.${L}`);if(!r){r=document.createElement("div"),r.className=L,r.setAttribute("data-qr-area-state","default"),r.appendChild(ko()),r.appendChild(wo());let o=document.createElement("div");o.className=Lr;let i=document.createElement("slot");i.name=q,i.appendChild(Tn()),o.appendChild(i),r.appendChild(o),t.appendChild(r)}let n=r.querySelector(`slot[name="${q}"]`);if(!n){let o=document.createElement("slot");return o.name=q,o.appendChild(Tn()),r.appendChild(o),o}return n}function Uo(e){let t=sr(e);if(t.querySelector(`.${Lt}`))return;let r=document.createElement("div");r.className=Lt,r.setAttribute("aria-hidden","true");let n=document.createElement("span");n.className="mellon-separator-text",n.textContent=Rr,r.appendChild(n);let o=t.querySelector(`.${L}`);t.insertBefore(r,o?o.nextSibling:t.firstChild)}function No(e){let t=sr(e),r=t.querySelector("slot:not([name])");if(!r){r=document.createElement("slot");let o=document.createElement("div");o.id=H,o.className="mellon-root",r.appendChild(o),t.appendChild(r)}let n=e.querySelector(`#${H}`);return n||(n=document.createElement("div"),n.id=H,n.className="mellon-root",r.appendChild(n)),n}function Bo(e){let t=e.querySelector(`slot[name="${Mt}"]`);return t||(t=document.createElement("slot"),t.name=Mt,e.appendChild(t)),t}function Fo(e,t){let r=e.querySelector(`.${he}`);if(!r)return;let n=r.querySelector('[data-tab="register"]'),o=r.querySelector('[data-tab="login"]');n&&n.setAttribute("aria-selected",String(t==="register")),o&&o.setAttribute("aria-selected",String(t==="login"))}function Re(e,t){if(e==null||t==null)return;let r=So(e);r.setAttribute("data-mellon-modal-variant",t.modalVariant),t.mode==="modal"&&Co(r);let n=Io(r);Mo(n,t.mode),Lo(n,t),xo(n),Oo(n,t.tabLabels),Po(n),Uo(n),No(n),Bo(n),Fo(n,t.tab)}function Ko(e){return!(e.hidden===!0||e.getAttribute("aria-hidden")==="true")}function Sn(e){return Array.from(e.querySelectorAll(Ur)).filter(r=>Ko(r))}function Cn(e){let t=null,r=null,n=!1;function o(l){if(l.key!=="Tab")return;let d=Sn(e);if(d.length===0)return;let p=l.target instanceof Node?l.target:null,h=p?d.indexOf(p):-1,E=d.length-1,y;l.shiftKey?y=h<=0?E:h-1:y=h>=E?0:h+1;let I=d[y];I&&(l.preventDefault(),I.focus())}function i(){if(n)return;t=document.activeElement;let d=Sn(e)[0];d&&d.focus(),r=o,e.addEventListener("keydown",r,!0),n=!0}function a(){if(!n)return;r&&(e.removeEventListener("keydown",r,!0),r=null),n=!1;let l=e.getRootNode()?.ownerDocument??document,d=t instanceof HTMLElement&&l.body.contains(t)?t:null;if(d)d.focus();else{let p=l.body,h=p.getAttribute("tabindex");p.setAttribute("tabindex","-1"),p.focus(),h===null?p.removeAttribute("tabindex"):p.setAttribute("tabindex",h)}t=null}return{activate:i,deactivate:a}}var Vo="mellon-modal-wrapper",Ho="mellon-modal-overlay",qo="mellon-modal-panel",In=["app-id","publishable-key","mode","external-user-id","theme","action","trigger-only","button-variant"],Mn=["open","mode","tab","tab-labels","theme","session-id","onboarding-url","is-mobile-override","fallback-type","app-id","publishable-key","app-name","dialog-title","dialog-description","external-user-id","modal-variant","qr-load-timeout-ms"],lt={wrapper:`.${Vo}`,overlay:`.${Ho}`,panel:`.${qo}`},Ln="user";var jo={SUCCESS:{reason:"success"},AUTHENTICATING:{reason:"cancel"},ERROR:{reason:"error"}};function Go(e){return jo[e]??{reason:Ln}}var ut=class extends ee{static get observedAttributes(){return[...Mn]}_parsed=at(this);_focusTrap=null;_unregisterInteractions=null;_generatedExternalUserId=null;_qrLoadTimeoutId=null;_qrSlotChangeBound=null;_boundEscapeKeydown=t=>{t.key==="Escape"&&this._parsed.open&&(t.preventDefault(),this.open=!1)};connectedCallback(){if(this.addEventListener("keydown",this._boundEscapeKeydown,!0),this.shadowRoot){this._registerInteractions(),this._core!==null&&this._unsubscribeBridge===null&&this.attachCore(this._core);return}let t=this.attachShadow({mode:"open"}),r=jr();if(r)t.adoptedStyleSheets=[r];else{let n=document.createElement("style");n.textContent=qr(),t.appendChild(n)}this._parsed=at(this),Re(t,this._parsed),this._registerInteractions(),this._render(),this._applyModalVisibility(),this._maybeAutoCreateCoreAndRunEnvEval()}_registerInteractions(){this.shadowRoot&&(this._unregisterInteractions?.(),this._unregisterInteractions=Kr(this.shadowRoot,{onTabChange:t=>{this.dispatchEvent(vn({tab:t})),this.setAttribute("tab",t)},onPrimaryClick:()=>this.startAuthFromClick(),onFallbackClick:t=>this.dispatchFallback(t),onOverlayClick:()=>{this.open=!1},onCloseClick:()=>{this.open=!1}}))}attributeChangedCallback(t,r,n){if(this.shadowRoot){if(this._parsed=at(this),t==="open"){if(this._parsed.open&&r!=="true"){let o={timestamp:Date.now()};this.dispatchEvent(yn(o)),this._startQrLoadWait()}if(!this._parsed.open){this._clearQrLoadWait(),this._transitionToIdle();return}}t==="tab"&&(this._emitCancelledIfAuthenticating(),this.setState(v.tabChange(this.currentState,this._parsed.tab))),(t==="app-id"||t==="publishable-key")&&this._reconcileCoreFromConfig(),Re(this.shadowRoot,this._parsed),this._render(),this._applyModalVisibility()}}_startQrLoadWait(){let t=this.shadowRoot;if(!t)return;let r=t.querySelector(`.${L}`),n=t.querySelector(`slot[name="${q}"]`);if(!r||!n)return;r.setAttribute("data-qr-area-state","waiting");let o=Math.max(1e3,parseInt(this.getAttribute("qr-load-timeout-ms")??String(12e3),10)||12e3);this._qrLoadTimeoutId=window.setTimeout(()=>{if(this._qrLoadTimeoutId=null,!this.shadowRoot)return;let a=this.shadowRoot.querySelector(`.${L}`);a?.getAttribute("data-qr-area-state")==="waiting"&&a.setAttribute("data-qr-area-state","timeout")},o);let i=()=>{if(n.assignedNodes().length>0){this._clearQrLoadWait();let a=this.shadowRoot?.querySelector(`.${L}`);a&&a.setAttribute("data-qr-area-state","loaded")}};this._qrSlotChangeBound=i,n.addEventListener("slotchange",i),n.assignedNodes().length>0&&i()}_clearQrLoadWait(){this._qrLoadTimeoutId!=null&&(clearTimeout(this._qrLoadTimeoutId),this._qrLoadTimeoutId=null);let t=this.shadowRoot;if(!t)return;let r=t.querySelector(`slot[name="${q}"]`);r&&this._qrSlotChangeBound&&(r.removeEventListener("slotchange",this._qrSlotChangeBound),this._qrSlotChangeBound=null);let n=t.querySelector(`.${L}`);n&&n.setAttribute("data-qr-area-state","default")}_transitionToIdle(){this._generatedExternalUserId=null;let r={reason:Go(this.currentState).reason,timestamp:Date.now()};this.dispatchEvent(An(r)),this._emitCancelledIfAuthenticating(),this.setState(v.reset(this.currentState)),this.shadowRoot&&(Re(this.shadowRoot,this._parsed),this.scheduleRenderIfNeeded(),this._applyModalVisibility())}get open(){return this._parsed.open}set open(t){this.setAttribute("open",t?"true":"false")}get mode(){return this._parsed.mode}set mode(t){this.setAttribute("mode",t)}get tab(){return this._parsed.tab}set tab(t){this.setAttribute("tab",t)}get tabLabels(){return`${this._parsed.tabLabels.register},${this._parsed.tabLabels.login}`}set tabLabels(t){t==null||t===""?this.removeAttribute("tab-labels"):this.setAttribute("tab-labels",t)}get theme(){return this._parsed.theme}set theme(t){this.setAttribute("theme",t)}get sessionId(){return this._parsed.sessionId}set sessionId(t){t==null?this.removeAttribute("session-id"):this.setAttribute("session-id",t)}get onboardingUrl(){return this._parsed.onboardingUrl}set onboardingUrl(t){t==null?this.removeAttribute("onboarding-url"):this.setAttribute("onboarding-url",t)}get isMobileOverride(){return this._parsed.isMobileOverride}set isMobileOverride(t){t==null?this.removeAttribute("is-mobile-override"):this.setAttribute("is-mobile-override",t?"true":"false")}get fallbackType(){return this._parsed.fallbackType}set fallbackType(t){t==null?this.removeAttribute("fallback-type"):this.setAttribute("fallback-type",t)}get appId(){return this._parsed.appId}set appId(t){this.setAttribute("app-id",t??"")}get publishableKey(){return this._parsed.publishableKey}set publishableKey(t){this.setAttribute("publishable-key",t??"")}get appName(){return this._parsed.appName}set appName(t){t==null?this.removeAttribute("app-name"):this.setAttribute("app-name",t)}get dialogTitle(){return this._parsed.dialogTitle}set dialogTitle(t){t==null?this.removeAttribute("dialog-title"):this.setAttribute("dialog-title",t)}get dialogDescription(){return this._parsed.dialogDescription}set dialogDescription(t){t==null?this.removeAttribute("dialog-description"):this.setAttribute("dialog-description",t)}get externalUserId(){return this._parsed.externalUserId}set externalUserId(t){t==null?this.removeAttribute("external-user-id"):this.setAttribute("external-user-id",t)}disconnectedCallback(){this._unregisterInteractions?.(),this._unregisterInteractions=null,this.removeEventListener("keydown",this._boundEscapeKeydown,!0),super.disconnectedCallback()}reset(){this._transitionToIdle()}getTabKind(){return this._parsed.tab}getCoreAuthOptions(){let t=this._resolveExternalUserId();return t?{externalUserId:t}:{}}_resolveExternalUserId(){let t=this._parsed.externalUserId?.trim();return t||(this.getTabKind()!=="register"?null:(this._generatedExternalUserId??=typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():null,this._generatedExternalUserId))}canStartAuth(){return!0}getEnvEvalParams(){return{mode:this._parsed.tab,isMobileOverride:this._parsed.isMobileOverride??void 0,fallbackType:this._parsed.fallbackType}}getCoreConfig(){return!this._parsed.appId||!this._parsed.publishableKey?null:{appId:this._parsed.appId,publishableKey:this._parsed.publishableKey}}getFallbackDetail(){return{operation:this._parsed.tab}}_applyModalVisibility(){if(!this.shadowRoot)return;let t=this.shadowRoot.querySelector(lt.wrapper);t&&(t.hidden=!this._parsed.open);let r=this.shadowRoot.querySelector(lt.overlay);r&&(r.hidden=this._parsed.mode!=="modal");let n=this.shadowRoot.querySelector(lt.panel);n&&n.setAttribute("aria-hidden",String(!this._parsed.open)),this._parsed.open&&t?(this._focusTrap||(this._focusTrap=Cn(t)),this._focusTrap.activate()):this._focusTrap?.deactivate()}_render(){if(!this.shadowRoot)return;Re(this.shadowRoot,this._parsed),this._applyModalVisibility();let t=_t(this.currentState,this._parsed,{registerSessionReady:this._parsed.tab==="register"?this.canStartAuth():void 0,primaryButtonLabel:vt,primaryButtonAriaLabel:Tt}),r={shadowRoot:this.shadowRoot};wr(r,t)}};var dt=class extends ee{static get observedAttributes(){return[...In]}_parsed={...ce};_internalModal=null;_focusRestoreTarget=null;_unregisterInteractions=null;_onInternalModalClose=()=>{this._internalModal&&(this._internalModal.open=!1),this._restoreFocusToTrigger()};_restoreFocusToTrigger(){let t=this._focusRestoreTarget;this._focusRestoreTarget=null,!(!t?.isConnected||typeof t.focus!="function")&&t.focus()}connectedCallback(){if(this.shadowRoot){this._registerInteractions(),this._core!==null&&this._unsubscribeBridge===null&&this.attachCore(this._core),this._syncInternalModalAttributes(),this._ensureInternalModal();return}let t=this.attachShadow({mode:"open"}),r=wt();if(r)t.adoptedStyleSheets=[r];else{let n=document.createElement("style");n.textContent=Pt(),t.appendChild(n)}this._parsed=Rt(this),this._syncThemeAttribute(),this._registerInteractions(),this._render(),this._reconcileCoreFromConfig(),this._ensureInternalModal()}_registerInteractions(){this.shadowRoot&&(this._unregisterInteractions?.(),this._unregisterInteractions=Fr(this.shadowRoot,{onPrimaryClick:()=>this._onPrimaryClick(),onFallbackClick:t=>this.dispatchFallback(t)}))}attributeChangedCallback(t,r,n){if(!this.shadowRoot)return;let o=this._parsed.mode;if(this._parsed=Rt(this),(t==="button-variant"||t==="theme")&&this.invalidateRender(),(t==="app-id"||t==="publishable-key")&&this._reconcileCoreFromConfig(),t==="mode"&&(this._parsed.mode==="register"||this._parsed.mode==="login")){let i=this._parsed.mode;o!==i&&(this._emitCancelledIfAuthenticating(),this.setState(v.tabChange(this.currentState,i)))}this._syncThemeAttribute(),this.scheduleRenderIfNeeded(),this._syncInternalModalAttributes(),this._ensureInternalModal()}_onPrimaryClick(){if(this._parsed.action==="open-modal"){this._focusRestoreTarget=document.activeElement instanceof Element?document.activeElement:null,this.dispatchEvent(new CustomEvent(Ae,{detail:{},bubbles:!0,composed:!0})),!this._parsed.triggerOnly&&this._internalModal&&(this._internalModal.open=!0);return}this.startAuthFromClick()}getTabKind(){return this._parsed.mode==="auto"?"login":this._parsed.mode}getCoreAuthOptions(){return gn(this._parsed.externalUserId)}canStartAuth(){return!0}getEnvEvalParams(){return{mode:this._parsed.mode}}getCoreConfig(){return!this._parsed.appId||!this._parsed.publishableKey?null:{appId:this._parsed.appId,publishableKey:this._parsed.publishableKey}}getFallbackDetail(){let t=this._parsed.mode==="login"||this._parsed.mode==="register"?this._parsed.mode:void 0;return t!==void 0?{operation:t}:{}}_render(){if(!this.shadowRoot)return;let t=At(this.currentState,this._parsed,{registerSessionReady:this._parsed.mode==="register"?this.canStartAuth():void 0}),r={shadowRoot:this.shadowRoot};kr(r,t)}_syncThemeAttribute(){this.getAttribute("theme")!==this._parsed.theme&&this.setAttribute("theme",this._parsed.theme)}_syncInternalModalAttributes(){if(!this._internalModal)return;this._internalModal.setAttribute("app-id",this._parsed.appId??""),this._internalModal.setAttribute("publishable-key",this._parsed.publishableKey??""),this._internalModal.setAttribute("theme",this._parsed.theme);let t=this._parsed.mode==="auto"?"login":this._parsed.mode;this._internalModal.setAttribute("tab",t)}_ensureInternalModal(){if(this._parsed.action!=="open-modal"||!this.shadowRoot)return;if(this._parsed.triggerOnly){this._internalModal?.isConnected&&(this._internalModal.removeEventListener(N,this._onInternalModalClose),this._internalModal.remove(),this._internalModal=null);return}if(this._internalModal?.isConnected){this._syncInternalModalAttributes();return}let t=document.createElement("trymellon-auth-modal");this._internalModal=t,this._syncInternalModalAttributes(),t.addEventListener(N,this._onInternalModalClose),typeof document<"u"&&document.body?document.body.appendChild(t):this.shadowRoot.appendChild(t)}disconnectedCallback(){this._unregisterInteractions?.(),this._unregisterInteractions=null,this._internalModal?.isConnected&&(this._internalModal.removeEventListener(N,this._onInternalModalClose),this._internalModal.remove(),this._internalModal=null),super.disconnectedCallback()}};var Kl="0.1.0",On="trymellon-auth",Dn="trymellon-auth-modal";typeof customElements<"u"&&!customElements.get(On)&&customElements.define(On,dt);typeof customElements<"u"&&!customElements.get(Dn)&&customElements.define(Dn,ut);export{be as BASE_STYLES,T as INITIAL_UI_STATE,_e as MELLON_CANCELLED,N as MELLON_CLOSE,et as MELLON_ERROR,rt as MELLON_FALLBACK,Je as MELLON_OPEN,Ae as MELLON_OPEN_REQUEST,tt as MELLON_START,Ze as MELLON_SUCCESS,nt as MELLON_TAB_CHANGE,Dn as TRYMELLON_AUTH_MODAL_TAG,On as TRYMELLON_AUTH_TAG,dt as TryMellonAuthElement,ut as TryMellonAuthModalElement,Kl as UI_VERSION,wt as createConstructableStylesheet,ir as eventBridgeAdapter,te as getNextState,Pt as getStylesFallback};
|
|
489
|
+
`.trim();function qr(){return Ee+`
|
|
490
|
+
`+Hr}function jr(){if(!Vr)return null;try{let e=new CSSStyleSheet;return e.replaceSync(Ee+`
|
|
491
|
+
`+Hr),e}catch{return null}}var f=e=>({ok:!0,value:e}),c=e=>({ok:!1,error:e});var Ne=class e extends Error{code;details;isTryMellonError=!0;constructor(t,r,n){super(r),this.name="TryMellonError",this.code=t,this.details=n,Error.captureStackTrace&&Error.captureStackTrace(this,e)}},Jn={NOT_SUPPORTED:"WebAuthn is not supported in this environment",USER_CANCELLED:"User cancelled the operation",PASSKEY_NOT_FOUND:"Passkey not found",SESSION_EXPIRED:"Session has expired",NETWORK_FAILURE:"Network request failed",INVALID_ARGUMENT:"Invalid argument provided",TIMEOUT:"Operation timed out",ABORTED:"Operation was aborted",ABORT_ERROR:"Operation aborted by user or timeout",CHALLENGE_MISMATCH:"This link was already used or expired. Please try again from your computer.",UNKNOWN_ERROR:"An unknown error occurred"};function b(e,t,r){return new Ne(e,t??Jn[e],r)}function Ut(e){return e instanceof Ne||typeof e=="object"&&e!==null&&"isTryMellonError"in e&&e.isTryMellonError===!0}function Gr(){return b("NOT_SUPPORTED")}function A(e,t){return b("INVALID_ARGUMENT",`Invalid argument: ${e} - ${t}`,{field:e,reason:t})}function Wr(e){return b("UNKNOWN_ERROR",`Failed to ${e} credential`,{operation:e})}function Nt(e){return b("NOT_SUPPORTED",`No base64 ${e==="encode"?"encoding":"decoding"} available`,{type:e})}function Bt(e,t){try{let r=new URL(e);if(r.protocol!=="https:"&&r.protocol!=="http:")throw A(t,"must use http or https protocol")}catch(r){throw Ut(r)?r:A(t,"must be a valid URL")}}function G(e,t,r,n){if(!Number.isFinite(e))throw A(t,"must be a finite number");if(e<r||e>n)throw A(t,`must be between ${r} and ${n}`)}function Be(e,t){if(typeof e!="string"||e.length===0)throw A(t,"must be a non-empty string");if(!/^[A-Za-z0-9_-]+$/.test(e))throw A(t,"must be a valid base64url string")}var Zn={NotAllowedError:"USER_CANCELLED",AbortError:"ABORTED",NotSupportedError:"NOT_SUPPORTED",SecurityError:"NOT_SUPPORTED",InvalidStateError:"UNKNOWN_ERROR",UnknownError:"UNKNOWN_ERROR"};function ye(e){if(typeof e!="string")return"UNKNOWN_ERROR";let t=e.toLowerCase().trim();return{challenge_mismatch:"CHALLENGE_MISMATCH",session_expired:"SESSION_EXPIRED",unauthorized:"SESSION_EXPIRED",validation_error:"INVALID_ARGUMENT",invalid_argument:"INVALID_ARGUMENT",user_not_found:"SESSION_EXPIRED",passkey_not_found:"PASSKEY_NOT_FOUND"}[t]??"UNKNOWN_ERROR"}function _(e){if(e instanceof DOMException){let t=e.name,r=e.message||"WebAuthn operation failed",n=Zn[t]??"UNKNOWN_ERROR";return b(n,r,{originalError:e})}return e instanceof Error?b("UNKNOWN_ERROR",e.message,{originalError:e}):b("UNKNOWN_ERROR","An unknown error occurred",{originalError:e})}function g(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function u(e){return typeof e=="string"}function P(e){return typeof e=="number"&&Number.isFinite(e)}function Fe(e){return typeof e=="boolean"}function J(e){return Array.isArray(e)}function s(e,t){return c(b("UNKNOWN_ERROR",e,{...t,originalData:t?.originalData}))}function m(e,t){return e[t]}function Yr(e,t){return!g(e)||!u(e.name)||!u(e.id)?s("Invalid API response: challenge.rp must have name and id strings",{originalData:t}):f(!0)}function zr(e,t){return!g(e)||!u(e.id)||!u(e.name)||!u(e.displayName)?s("Invalid API response: challenge.user must have id, name, displayName strings",{originalData:t}):f(!0)}function Qr(e,t){if(!J(e))return s("Invalid API response: challenge.pubKeyCredParams must be array",{originalData:t});for(let r of e)if(!g(r)||r.type!=="public-key"||!P(r.alg))return s("Invalid API response: pubKeyCredParams items must have type and alg",{originalData:t});return f(!0)}function Ft(e,t){if(!g(e))return s("Invalid API response: user must be object",{field:"user",originalData:t});let r=m(e,"user_id"),n=m(e,"external_user_id");if(!u(r)||!u(n))return s("Invalid API response: user must have user_id and external_user_id strings",{originalData:t});let o=e.email,i=e.metadata;return o!==void 0&&!u(o)?s("Invalid API response: user.email must be string",{originalData:t}):i!==void 0&&(typeof i!="object"||i===null)?s("Invalid API response: user.metadata must be object",{originalData:t}):f({user_id:r,external_user_id:n,...o!==void 0&&{email:o},...i!==void 0&&{metadata:i}})}function Kt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id");if(!u(t))return s("Invalid API response: session_id must be string",{field:"session_id",originalData:e});let r=m(e,"challenge");if(!g(r))return s("Invalid API response: challenge must be object",{field:"challenge",originalData:e});let n=Yr(m(r,"rp"),e);if(!n.ok)return n;let o=zr(m(r,"user"),e);if(!o.ok)return o;let i=m(r,"challenge");if(!u(i))return s("Invalid API response: challenge.challenge must be string",{originalData:e});let a=Qr(m(r,"pubKeyCredParams"),e);if(!a.ok)return a;let l=r.timeout;if(l!==void 0&&!P(l))return s("Invalid API response: challenge.timeout must be number",{originalData:e});let d=r.excludeCredentials;if(d!==void 0){if(!J(d))return s("Invalid API response: excludeCredentials must be array",{originalData:e});for(let h of d)if(!g(h)||h.type!=="public-key"||!u(h.id))return s("Invalid API response: excludeCredentials items must have id and type",{originalData:e})}let p=r.authenticatorSelection;return p!==void 0&&!g(p)?s("Invalid API response: authenticatorSelection must be object",{originalData:e}):f({session_id:t,challenge:{rp:r.rp,user:r.user,challenge:i,pubKeyCredParams:r.pubKeyCredParams,...l!==void 0&&{timeout:l},...d!==void 0&&{excludeCredentials:d},...p!==void 0&&{authenticatorSelection:p}}})}function Vt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id");if(!u(t))return s("Invalid API response: session_id must be string",{field:"session_id",originalData:e});let r=m(e,"challenge");if(!g(r))return s("Invalid API response: challenge must be object",{field:"challenge",originalData:e});let n=m(r,"challenge"),o=m(r,"rpId"),i=r.allowCredentials;if(!u(n))return s("Invalid API response: challenge.challenge must be string",{originalData:e});if(!u(o))return s("Invalid API response: challenge.rpId must be string",{originalData:e});if(i!==void 0&&!J(i))return s("Invalid API response: allowCredentials must be array",{originalData:e});if(i){for(let d of i)if(!g(d)||d.type!=="public-key"||!u(d.id))return s("Invalid API response: allowCredentials items must have id and type",{originalData:e})}let a=r.timeout;if(a!==void 0&&!P(a))return s("Invalid API response: challenge.timeout must be number",{originalData:e});let l=r.userVerification;return l!==void 0&&!["required","preferred","discouraged"].includes(String(l))?s("Invalid API response: userVerification must be required|preferred|discouraged",{originalData:e}):f({session_id:t,challenge:{challenge:n,rpId:o,allowCredentials:i??[],...a!==void 0&&{timeout:a},...l!==void 0&&{userVerification:l}}})}function Ht(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"credential_id"),r=m(e,"status"),n=m(e,"session_token"),o=m(e,"user");if(!u(t))return s("Invalid API response: credential_id must be string",{field:"credential_id",originalData:e});if(!u(r))return s("Invalid API response: status must be string",{field:"status",originalData:e});if(!u(n))return s("Invalid API response: session_token must be string",{field:"session_token",originalData:e});let i=Ft(o,e);if(!i.ok)return s(i.error.message,{originalData:e});let a=e.redirect_url;return a!==void 0&&!u(a)?s("Invalid API response: redirect_url must be string",{originalData:e}):f({credential_id:t,status:r,session_token:n,user:i.value,...a!==void 0&&{redirect_url:a}})}function qt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"authenticated"),r=m(e,"session_token"),n=m(e,"user"),o=m(e,"signals");if(!Fe(t))return s("Invalid API response: authenticated must be boolean",{field:"authenticated",originalData:e});if(!u(r))return s("Invalid API response: session_token must be string",{field:"session_token",originalData:e});let i=Ft(n,e);if(!i.ok)return s(i.error.message,{originalData:e});if(o!==void 0&&!g(o))return s("Invalid API response: signals must be object",{originalData:e});let a=e.redirect_url;return a!==void 0&&!u(a)?s("Invalid API response: redirect_url must be string",{originalData:e}):f({authenticated:t,session_token:r,user:i.value,signals:o,...a!==void 0&&{redirect_url:a}})}function jt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"valid"),r=m(e,"user_id"),n=m(e,"external_user_id"),o=m(e,"tenant_id"),i=m(e,"app_id");return Fe(t)?u(r)?u(n)?u(o)?u(i)?f({valid:t,user_id:r,external_user_id:n,tenant_id:o,app_id:i}):s("Invalid API response: app_id must be string",{field:"app_id",originalData:e}):s("Invalid API response: tenant_id must be string",{field:"tenant_id",originalData:e}):s("Invalid API response: external_user_id must be string",{field:"external_user_id",originalData:e}):s("Invalid API response: user_id must be string",{field:"user_id",originalData:e}):s("Invalid API response: valid must be boolean",{field:"valid",originalData:e})}function Gt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=e.session_token??e.sessionToken;if(!u(t))return s("Invalid API response: session_token/sessionToken must be string",{field:"session_token",originalData:e});let r=e.redirect_url;return r!==void 0&&!u(r)?s("Invalid API response: redirect_url must be string",{originalData:e}):f({sessionToken:t,...r!==void 0&&{redirectUrl:r}})}var eo=["pending_passkey","pending_data","completed"],to=["pending_data","completed"];function Wt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id"),r=m(e,"onboarding_url"),n=m(e,"expires_in");return u(t)?u(r)?P(n)?f({session_id:t,onboarding_url:r,expires_in:n}):s("Invalid API response: expires_in must be number",{field:"expires_in",originalData:e}):s("Invalid API response: onboarding_url must be string",{field:"onboarding_url",originalData:e}):s("Invalid API response: session_id must be string",{field:"session_id",originalData:e})}function Yt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"status"),r=m(e,"onboarding_url"),n=m(e,"expires_in");return!u(t)||!eo.includes(t)?s("Invalid API response: status must be pending_passkey|pending_data|completed",{field:"status",originalData:e}):u(r)?P(n)?f({status:t,onboarding_url:r,expires_in:n}):s("Invalid API response: expires_in must be number",{originalData:e}):s("Invalid API response: onboarding_url must be string",{originalData:e})}function zt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id"),r=m(e,"status"),n=m(e,"onboarding_url");if(!u(t))return s("Invalid API response: session_id must be string",{field:"session_id",originalData:e});if(r!=="pending_passkey")return s("Invalid API response: status must be pending_passkey",{field:"status",originalData:e});if(!u(n))return s("Invalid API response: onboarding_url must be string",{originalData:e});let o=e.challenge,i;if(o!==void 0){let a=ro(o);if(!a.ok)return a;i=a.value}return f({session_id:t,status:"pending_passkey",onboarding_url:n,...i!==void 0&&{challenge:i}})}function ro(e){if(!g(e))return s("Invalid API response: challenge must be object",{originalData:e});let t=m(e,"rp"),r=m(e,"user"),n=m(e,"challenge"),o=m(e,"pubKeyCredParams");if(!g(t)||!u(t.name)||!u(t.id))return s("Invalid API response: challenge.rp must have name and id",{originalData:e});if(!g(r)||!u(r.id)||!u(r.name)||!u(r.displayName))return s("Invalid API response: challenge.user must have id, name, displayName",{originalData:e});if(!u(n))return s("Invalid API response: challenge.challenge must be string",{originalData:e});if(!J(o))return s("Invalid API response: challenge.pubKeyCredParams must be array",{originalData:e});for(let i of o)if(!g(i)||i.type!=="public-key"||!P(i.alg))return s("Invalid API response: pubKeyCredParams items must have type and alg",{originalData:e});return f({rp:t,user:r,challenge:n,pubKeyCredParams:o})}function Qt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id"),r=m(e,"status"),n=m(e,"user_id"),o=m(e,"tenant_id");return u(t)?!u(r)||!to.includes(r)?s("Invalid API response: status must be pending_data|completed",{originalData:e}):u(n)?u(o)?f({session_id:t,status:r,user_id:n,tenant_id:o}):s("Invalid API response: tenant_id must be string",{originalData:e}):s("Invalid API response: user_id must be string",{originalData:e}):s("Invalid API response: session_id must be string",{originalData:e})}function $t(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"session_id"),r=m(e,"status"),n=m(e,"user_id"),o=m(e,"tenant_id"),i=m(e,"session_token");return u(t)?r!=="completed"?s("Invalid API response: status must be completed",{originalData:e}):!u(n)||!u(o)||!u(i)?s("Invalid API response: user_id, tenant_id, session_token must be strings",{originalData:e}):f({session_id:t,status:"completed",user_id:n,tenant_id:o,session_token:i}):s("Invalid API response: session_id must be string",{originalData:e})}function Ke(e){return e==null?f(void 0):g(e)&&Object.keys(e).length===0?f(void 0):s("Invalid API response: expected empty body (204)",{originalData:e})}function no(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.challenge=="string"&&t.rp!=null&&typeof t.rp=="object"&&t.user!=null&&typeof t.user=="object"&&Array.isArray(t.pubKeyCredParams)}function oo(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.challenge=="string"&&typeof t.rpId=="string"}function Ve(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t="resultado"in e&&g(e.resultado)?e.resultado:e,r=t.session_id,n=t.qr_url,o=t.expires_at,i=t.polling_token;if(!u(r)||!u(n)||!u(o)||!u(i))return s("Invalid API response: missing required fields",{originalData:e});let a={session_id:r,qr_url:n,expires_at:o,polling_token:i};return t.external_user_id!==void 0&&u(t.external_user_id)&&(a.external_user_id=t.external_user_id),f(a)}function Xt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t="resultado"in e&&g(e.resultado)?e.resultado:e,r=t.status;if(!u(r)||!["pending","authenticated","completed"].includes(r))return s("Invalid API response: invalid status",{originalData:e});let n=t.user_id,o=t.session_token,i=t.redirect_url;return n!==void 0&&!u(n)?s("Invalid API response: user_id must be a string when present",{originalData:e}):o!==void 0&&!u(o)?s("Invalid API response: session_token must be a string when present",{originalData:e}):i!==void 0&&!u(i)?s("Invalid API response: redirect_url must be a string when present",{originalData:e}):f({status:r,user_id:n,session_token:o,redirect_url:i})}function Jt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=e.type,r=t==="registration"?"registration":"auth",n=e.options;if(!g(n))return s("Invalid API response: options are required",{originalData:e});let o=200,i=$r(e.approval_context,o),a=$r(e.application_name,o);if(i===!1||a===!1)return s("Invalid API response: approval_context/application_name must be string max 200 chars",{originalData:e});let l={};return typeof i=="string"&&(l.approval_context=i),typeof a=="string"&&(l.application_name=a),r==="registration"?no(n)?f({type:"registration",options:n,...l}):s("Invalid API response: registration options must have challenge, rp, user, pubKeyCredParams",{originalData:e}):oo(n)?f({type:"auth",options:n,...l}):s("Invalid API response: auth options must have challenge and rpId",{originalData:e})}function $r(e,t){if(e!=null)return typeof e!="string"||e.length>t?!1:e}function Zt(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"challenge"),r=m(e,"recovery_session_id");return g(t)?u(r)?f({challenge:t,recovery_session_id:r}):s("Invalid API response: recovery_session_id must be string",{field:"recovery_session_id",originalData:e}):s("Invalid API response: challenge must be object",{field:"challenge",originalData:e})}function er(e){if(!g(e))return s("Invalid API response: expected object",{originalData:e});let t=m(e,"status"),r=m(e,"session_token"),n=m(e,"user"),o=m(e,"credential_id");if(!u(t))return s("Invalid API response: status must be string",{field:"status",originalData:e});if(!u(r))return s("Invalid API response: session_token must be string",{field:"session_token",originalData:e});if(!u(o))return s("Invalid API response: credential_id must be string",{field:"credential_id",originalData:e});if(!g(n))return s("Invalid API response: user must be object",{field:"user",originalData:e});let i=m(n,"user_id");if(!u(i))return s("Invalid API response: user.user_id must be string",{field:"user.user_id",originalData:e});let l=e.redirect_url;if(l!==void 0&&!u(l))return s("Invalid API response: redirect_url must be string",{field:"redirect_url",originalData:e});let d=n;return f({status:t,session_token:r,credential_id:o,user:{user_id:i,external_user_id:u(d.external_user_id)?d.external_user_id:void 0,email:u(d.email)?d.email:void 0,metadata:g(d.metadata)?d.metadata:void 0},...l!==void 0&&{redirect_url:l}})}var He=class{constructor(t,r,n={}){this.httpClient=t;this.baseUrl=r;this.defaultHeaders=n}mergeHeaders(t){return{...this.defaultHeaders,...t}}async post(t,r,n){let o=`${this.baseUrl}${t}`,i=await this.httpClient.post(o,r,this.mergeHeaders());return i.ok?n(i.value):c(i.error)}async get(t,r,n){let o=`${this.baseUrl}${t}`,i=await this.httpClient.get(o,this.mergeHeaders(n));return i.ok?r(i.value):c(i.error)}async startRegister(t){return this.post("/v1/passkeys/register/start",t,Kt)}async startAuth(t){return this.post("/v1/passkeys/auth/start",t,Vt)}async finishRegister(t){return this.post("/v1/passkeys/register/finish",t,Ht)}async finishAuthentication(t){return this.post("/v1/passkeys/auth/finish",t,qt)}async validateSession(t){return this.get("/v1/sessions/validate",jt,{Authorization:`Bearer ${t}`})}async startEmailFallback(t){let r=`${this.baseUrl}/v1/fallback/email/start`,n=await this.httpClient.post(r,{userId:t.userId,email:t.email},this.mergeHeaders());return n.ok?f(void 0):c(n.error)}async verifyEmailCode(t){let r={userId:t.userId,code:t.code};return t.successUrl&&(r.success_url=t.successUrl),this.post("/v1/fallback/email/verify",r,Gt)}async startOnboarding(t){return this.post("/v1/onboarding/start",t,Wt)}async getOnboardingStatus(t){return this.get(`/v1/onboarding/${t}/status`,Yt)}async getOnboardingRegister(t){return this.get(`/v1/onboarding/${t}/register`,zt)}async registerOnboardingPasskey(t,r){return this.post(`/v1/onboarding/${t}/register-passkey`,r,Qt)}async completeOnboarding(t,r){return this.post(`/v1/onboarding/${t}/complete`,r,$t)}async initCrossDeviceAuth(){return this.post("/v1/auth/cross-device/init",{},Ve)}async initCrossDeviceRegistration(t){let r=typeof t?.externalUserId=="string"?t.externalUserId.trim():"",n=r.length>0?{external_user_id:r}:{};return this.post("/v1/auth/cross-device/init-registration",n,Ve)}async getCrossDeviceStatus(t,r){let n={};return typeof r=="string"&&r.length>0&&(n["X-Polling-Token"]=r),this.get(`/v1/auth/cross-device/status/${t}`,Xt,Object.keys(n).length>0?n:void 0)}async getCrossDeviceContext(t){return this.get(`/v1/auth/cross-device/context/${t}`,Jt)}async verifyCrossDeviceAuth(t){return this.post("/v1/auth/cross-device/verify",t,Ke)}async verifyCrossDeviceRegistration(t){return this.post("/v1/auth/cross-device/verify-registration",t,Ke)}async verifyAccountRecoveryOtp(t,r){return this.post("/v1/users/recovery/verify",{external_id:t,otp:r},Zt)}async completeAccountRecovery(t,r){return this.post("/v1/users/recovery/complete",{recovery_session_id:t,credential:r},er)}};function io(e){return typeof e=="object"&&e!==null&&e.ok===!0&&"resultado"in e}function Zr(e){if(typeof e!="object"||e===null)return!1;let t=e;if(t.ok!==!1||!t.error||typeof t.error!="object")return!1;let r=t.error;return typeof r.code=="string"&&typeof r.message=="string"}function Xr(e,t){if(Zr(e))return{message:e.error.message,code:ye(e.error.code)};let r=e,n=r?.error;if(typeof n=="object"&&n!==null&&"code"in n&&typeof n.code=="string")return{message:n.message??r?.message??t,code:ye(n.code)};let o=r?.message??t,i=r?.error,a=typeof i=="string"?ye(i):i===void 0?"NETWORK_FAILURE":ye(String(i));return{message:o,code:a}}var so=3e4;function ao(){if(typeof globalThis.crypto<"u"&&typeof globalThis.crypto.randomUUID=="function")return globalThis.crypto.randomUUID();throw new Error("Web Crypto API is required but not available.")}function Jr(e,t){let r=t*Math.pow(2,e);return Math.min(r,so)}function lo(e,t){return e!=="GET"?!1:t>=500||t===429}var qe=class{constructor(t,r=0,n=1e3,o){this.timeoutMs=t;this.maxRetries=r;this.retryDelayMs=n;this.logger=o}async get(t,r){return this.request(t,{method:"GET",headers:r})}async post(t,r,n){return this.request(t,{method:"POST",body:JSON.stringify(r),headers:{"Content-Type":"application/json",...n}})}async request(t,r){let n=(r.method??"GET").toUpperCase(),o=ao(),i=new Headers(r.headers);i.set("X-Request-Id",o),this.logger&&this.logger.debug("request",{requestId:o,url:t,method:n});let a;for(let l=0;l<=this.maxRetries;l++)try{let d=new AbortController,p=setTimeout(()=>d.abort(),this.timeoutMs);try{let h=await fetch(t,{...r,headers:i,signal:d.signal});if(!h.ok){let x;try{x=await h.json()}catch{}let{message:z,code:ar}=Xr(x,h.statusText),k=b(ar,z,{requestId:o,status:h.status,statusText:h.statusText,data:x});if(lo(n,h.status)&&l<this.maxRetries){a=k,clearTimeout(p),await new Promise(Dn=>setTimeout(Dn,Jr(l,this.retryDelayMs)));continue}return c(k)}if(h.status===204)return f(void 0);if(h.headers.get("content-length")==="0")return f(void 0);let y=await h.json();if(io(y))return f(y.resultado);let L=y;if(typeof y=="object"&&y!==null&&L.ok===!0&&!("resultado"in L))return f(void 0);if(Zr(y)){let{message:x,code:z}=Xr(y,h.statusText);return c(b(z,x,{requestId:o,status:h.status,statusText:h.statusText,data:y}))}return f(y)}finally{clearTimeout(p)}}catch(d){if(a=d,n==="GET"&&l<this.maxRetries)await new Promise(h=>setTimeout(h,Jr(l,this.retryDelayMs)));else break}return a instanceof Error&&a.name==="AbortError"?c(b("TIMEOUT","Request timed out",{requestId:o})):c(b("NETWORK_FAILURE",a instanceof Error?a.message:"Request failed",{requestId:o,cause:a}))}};function O(e){let t=new Uint8Array(e),r=Array.from(t,o=>String.fromCharCode(o)).join("");if(typeof globalThis.btoa>"u")throw Nt("encode");return globalThis.btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function uo(e){if(typeof globalThis.atob>"u")throw Nt("decode");let t=e.replace(/-/g,"+").replace(/_/g,"/"),r=t.length%4,n=r===0?t:t+"=".repeat(4-r),o=globalThis.atob(n);return Uint8Array.from(o,i=>i.charCodeAt(0))}function Z(e){let t=uo(e),r=new ArrayBuffer(t.length);return new Uint8Array(r).set(t),r}function en(e){return e!==null&&typeof e=="object"&&"clientDataJSON"in e&&e.clientDataJSON instanceof ArrayBuffer}function U(e){if(!e.response)throw b("UNKNOWN_ERROR","Credential response is missing",{credential:e});let t=e.response;if(!en(t))throw b("UNKNOWN_ERROR","Invalid credential response structure",{response:t});if(!("attestationObject"in t))throw b("UNKNOWN_ERROR","Invalid credential response structure for register: attestationObject is missing",{response:t});let r=t.clientDataJSON,n=t.attestationObject;return{id:e.id,rawId:O(e.rawId),response:{clientDataJSON:O(r),attestationObject:O(n)},type:"public-key"}}function je(e){if(!e.response)throw b("UNKNOWN_ERROR","Credential response is missing",{credential:e});let t=e.response;if(!en(t))throw b("UNKNOWN_ERROR","Invalid credential response structure",{response:t});if(!("authenticatorData"in t)||!("signature"in t))throw b("UNKNOWN_ERROR","Invalid credential response structure for auth: authenticatorData or signature is missing",{response:t});let r=t.clientDataJSON,n=t.authenticatorData,o=t.signature,i=t.userHandle;return{id:e.id,rawId:O(e.rawId),response:{authenticatorData:O(n),clientDataJSON:O(r),signature:O(o),...i&&{userHandle:O(i)}},type:"public-key"}}function ee(){try{return!(typeof navigator>"u"||!navigator.credentials||typeof PublicKeyCredential>"u")}catch{return!1}}async function co(){try{return!ee()||typeof PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable!="function"?!1:await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()}catch{return!1}}async function Ge(){let e=ee(),t=await co();return{isPasskeySupported:e,platformAuthenticatorAvailable:t,recommendedFlow:e?"passkey":"fallback"}}function W(e,t="create"){if(!e||typeof e!="object"||!("id"in e)||!("rawId"in e)||!("response"in e))throw Wr(t)}async function Ae(e){let{operation:t,eventEmitter:r,start:n,createOptions:o,invoke:i,finish:a}=e;try{if(r.emit("start",{type:"start",operation:t}),!ee()){let E=Gr();return r.emit("error",{type:"error",error:E}),c(E)}let l=await n();if(!l.ok)return r.emit("error",{type:"error",error:l.error}),c(l.error);let d=o(l.value);if(!d.ok)return r.emit("error",{type:"error",error:d.error}),c(d.error);let p=await i(d.value);if(!p){let E=A("credential",`${t==="register"?"creation":"retrieval"} failed`);return r.emit("error",{type:"error",error:E}),c(E)}try{W(p)}catch(E){let y=_(E);return r.emit("error",{type:"error",error:y}),c(y)}let h=await a(l.value,p);return h.ok?f(h.value):(r.emit("error",{type:"error",error:h.error}),c(h.error))}catch(l){let d=_(l);return r.emit("error",{type:"error",error:d}),c(d)}}function Y(e,t){try{Be(e.challenge,"challenge"),Be(e.user.id,"user.id");let r=Z(e.challenge),n=Z(e.user.id),o={userVerification:"preferred"};e.authenticatorSelection&&(o={...e.authenticatorSelection}),t&&(o={...o,authenticatorAttachment:t});let i={rp:{id:e.rp.id,name:e.rp.name},user:{id:n,name:e.user.name,displayName:e.user.displayName},challenge:r,pubKeyCredParams:e.pubKeyCredParams,...e.timeout!==void 0&&{timeout:e.timeout},attestation:"none",authenticatorSelection:o,...e.excludeCredentials&&{excludeCredentials:e.excludeCredentials.map(a=>({id:Z(a.id),type:a.type,...a.transports&&{transports:a.transports}}))}};return f({publicKey:i})}catch(r){return c(_(r))}}function tr(e,t){try{Be(e.challenge,"challenge");let r=Z(e.challenge);return f({publicKey:{challenge:r,rpId:e.rpId,...e.timeout!==void 0&&{timeout:e.timeout},userVerification:e.userVerification??"preferred",...e.allowCredentials&&{allowCredentials:e.allowCredentials.map(n=>({id:Z(n.id),type:n.type,...n.transports&&{transports:n.transports}}))}},...t!==void 0&&{mediation:t}})}catch(r){return c(_(r))}}async function tn(e,t,r){let n=e.externalUserId??e.external_user_id;if(!n||typeof n!="string"||n.trim()===""){let i=A("externalUserId","must be a non-empty string");return r.emit("error",{type:"error",error:i}),c(i)}let o=await Ae({operation:"register",eventEmitter:r,start:()=>t.startRegister({external_user_id:n}),createOptions:i=>Y(i.challenge,e.authenticatorType),invoke:async i=>{let a={...i,...e.signal&&{signal:e.signal}};return navigator.credentials.create(a)},finish:async(i,a)=>{let l=await t.finishRegister({session_id:i.session_id,credential:U(a),...e.successUrl&&{success_url:e.successUrl}});return l.ok?f({success:!0,credentialId:l.value.credential_id,credential_id:l.value.credential_id,status:l.value.status,sessionToken:l.value.session_token,user:{userId:l.value.user.user_id,externalUserId:l.value.user.external_user_id,email:l.value.user.email,metadata:l.value.user.metadata},...l.value.redirect_url&&{redirectUrl:l.value.redirect_url}}):c(l.error)}});return o.ok&&r.emit("success",{type:"success",operation:"register",token:o.value.sessionToken,user:o.value.user}),o}async function rn(e,t,r){let n=e.externalUserId??e.external_user_id,o=n!==void 0&&typeof n=="string"&&n.trim()!=="",i=await Ae({operation:"authenticate",eventEmitter:r,start:()=>t.startAuth(o?{external_user_id:n.trim()}:{}),createOptions:a=>tr(a.challenge,e.mediation),invoke:async a=>{let l={...a,...e.signal&&{signal:e.signal}};return navigator.credentials.get(l)},finish:async(a,l)=>{let d=await t.finishAuthentication({session_id:a.session_id,credential:je(l),...e.successUrl&&{success_url:e.successUrl}});return d.ok?f({authenticated:d.value.authenticated,sessionToken:d.value.session_token,user:{userId:d.value.user.user_id,externalUserId:d.value.user.external_user_id,email:d.value.user.email,metadata:d.value.user.metadata},signals:d.value.signals,...d.value.redirect_url&&{redirectUrl:d.value.redirect_url}}):c(d.error)}});return i.ok&&r.emit("success",{type:"success",operation:"authenticate",token:i.value.sessionToken,user:i.value.user}),i}async function We(e,t){return t?t.aborted?"aborted":new Promise(r=>{let n=()=>{o(),r("aborted")},o=()=>{clearTimeout(i),t.removeEventListener("abort",n)},i=setTimeout(()=>{o(),r("completed")},e);t.addEventListener("abort",n)}):(await new Promise(r=>setTimeout(r,e)),"completed")}var po=2e3,mo=60,Ye=class{constructor(t){this.apiClient=t}async startFlow(t,r){let n=await this.apiClient.startOnboarding({user_role:t.user_role});if(!n.ok)return c(n.error);let{session_id:o}=n.value;for(let i=0;i<mo;i++){if(r?.aborted)return c(b("ABORT_ERROR","Operation aborted by user or timeout"));if(await We(po,r)==="aborted")return c(b("ABORT_ERROR","Operation aborted by user or timeout"));let l=await this.apiClient.getOnboardingStatus(o);if(!l.ok)return c(l.error);let d=l.value.status,p=l.value.onboarding_url;if(d==="pending_passkey"){let h=await this.apiClient.getOnboardingRegister(o);if(!h.ok)return c(h.error);let E=h.value;if(!E.challenge)return c(b("NOT_SUPPORTED","Onboarding requires user action - complete passkey registration at the provided onboarding_url",{onboarding_url:p}));let y=Y(E.challenge);if(!y.ok)return c(y.error);let L;try{L=await navigator.credentials.create(y.value)}catch(k){return c(_(k))}try{W(L,"create")}catch(k){return c(_(k))}let x;try{x=U(L)}catch(k){return c(_(k))}let z=await this.apiClient.registerOnboardingPasskey(o,{credential:x,challenge:E.challenge.challenge});return z.ok?await this.apiClient.completeOnboarding(o,{company_name:t.company_name}):c(z.error)}if(d==="completed")return await this.apiClient.completeOnboarding(o,{company_name:t.company_name})}return c(b("TIMEOUT","Onboarding timed out"))}};var fo=2e3,ho=60,ze=class{constructor(t){this.apiClient=t}async init(){return this.apiClient.initCrossDeviceAuth()}async initRegistration(t){return this.apiClient.initCrossDeviceRegistration(t)}async waitForSession(t,r,n){if(r?.aborted)return c(b("ABORT_ERROR","Operation aborted by user or timeout"));for(let o=0;o<ho;o++){let i=await this.apiClient.getCrossDeviceStatus(t,n);if(!i.ok)return c(i.error);if(i.value.status==="completed"){if(!i.value.session_token||!i.value.user_id)return c(b("UNKNOWN_ERROR","Missing data in completed session"));let l=i.value.redirect_url!=null&&i.value.redirect_url!==""?i.value.redirect_url:void 0;return f({session_token:i.value.session_token,user_id:i.value.user_id,...l!==void 0&&{redirectUrl:l}})}if(await We(fo,r)==="aborted")return c(b("ABORT_ERROR","Operation aborted by user or timeout"))}return c(b("TIMEOUT","Cross-device authentication timed out"))}async approve(t){let r=await this.apiClient.getCrossDeviceContext(t);if(!r.ok)return c(r.error);let n=r.value;return n.type==="registration"?this.executeRegistrationApproval(t,n):this.executeAuthApproval(t,n)}async executeRegistrationApproval(t,r){let n=Y(r.options);if(!n.ok)return c(n.error);let o;try{o=await navigator.credentials.create(n.value)}catch(a){return c(_(a))}try{W(o,"create")}catch(a){return c(_(a))}let i;try{i=U(o)}catch(a){return c(_(a))}return this.apiClient.verifyCrossDeviceRegistration({session_id:t,credential:i})}async executeAuthApproval(t,r){let n=tr(r.options);if(!n.ok)return c(n.error);let o;try{o=await navigator.credentials.get(n.value)}catch(a){return c(_(a))}try{W(o,"get")}catch(a){return c(_(a))}let i;try{i=je(o)}catch(a){return c(_(a))}return this.apiClient.verifyCrossDeviceAuth({session_id:t,credential:i})}};var Qe=class{handlers;constructor(){this.handlers=new Map}on(t,r){let n=this.handlers.get(t);return n||(n=new Set,this.handlers.set(t,n)),n.add(r),()=>{this.off(t,r)}}off(t,r){let n=this.handlers.get(t);n&&(n.delete(r),n.size===0&&this.handlers.delete(t))}emit(t,r){let n=this.handlers.get(t);if(n)for(let o of n)try{o(r)}catch{}}removeAllListeners(){this.handlers.clear()}};var rr="https://api.trymellonauth.com",nn="https://api.trymellonauth.com/v1/telemetry";var on="trymellon_sandbox_session_token_v1";function sn(e){return{async send(t){let r=JSON.stringify(t);if(typeof navigator<"u"&&typeof navigator.sendBeacon=="function"){navigator.sendBeacon(e,r);return}typeof fetch<"u"&&await fetch(e,{method:"POST",body:r,headers:{"Content-Type":"application/json"},keepalive:!0})}}}function nr(e,t){return{event:e,latencyMs:t,ok:!0}}var $e=class{constructor(t,r,n,o,i){this.apiClient=t;this.eventEmitter=r;this.sandbox=n;this.sandboxToken=o;this.telemetrySender=i}async sandboxAuthResult(t,r){let n="externalUserId"in r?r.externalUserId??r.external_user_id??"sandbox":r.external_user_id??r.externalUserId??"sandbox",o=typeof n=="string"?n:"sandbox";return t==="register"?Promise.resolve(f({success:!0,credentialId:"",status:"sandbox",sessionToken:this.sandboxToken,user:{userId:"sandbox-user",externalUserId:o}})):Promise.resolve(f({authenticated:!0,sessionToken:this.sandboxToken,user:{userId:"sandbox-user",externalUserId:o}}))}async register(t){if(this.sandbox){let o=await this.sandboxAuthResult("register",t);return o.ok&&this.eventEmitter.emit("success",{type:"success",operation:"register",token:o.value.sessionToken,user:o.value.user}),o}let r=Date.now(),n=await tn(t,this.apiClient,this.eventEmitter);return n.ok&&this.telemetrySender&&this.telemetrySender.send(nr("register",Date.now()-r)).catch(()=>{}),n}async authenticate(t){if(this.sandbox){let o=await this.sandboxAuthResult("authenticate",t);return o.ok&&this.eventEmitter.emit("success",{type:"success",operation:"authenticate",token:o.value.sessionToken,user:o.value.user}),o}let r=Date.now(),n=await rn(t,this.apiClient,this.eventEmitter);return n.ok&&this.telemetrySender&&this.telemetrySender.send(nr("authenticate",Date.now()-r)).catch(()=>{}),n}};async function an(e,t,r){let n=e.externalUserId??e.external_user_id;if(!n||typeof n!="string"||n.trim()===""){let i=A("externalUserId","must be a non-empty string");return r.emit("error",{type:"error",error:i}),c(i)}if(!e.otp||typeof e.otp!="string"||e.otp.trim().length!==6){let i=A("otp","must be a 6-digit string");return r.emit("error",{type:"error",error:i}),c(i)}let o=await Ae({operation:"register",eventEmitter:r,start:()=>t.verifyAccountRecoveryOtp(n,e.otp),createOptions:i=>Y(i.challenge),invoke:async i=>navigator.credentials.create(i),finish:async(i,a)=>{let l=await t.completeAccountRecovery(i.recovery_session_id,U(a));if(!l.ok)return c(l.error);let{credential_id:d,status:p,session_token:h,user:E,redirect_url:y}=l.value;return f({success:!0,credentialId:d,status:p,sessionToken:h,user:{userId:E.user_id,externalUserId:E.external_user_id,email:E.email,metadata:E.metadata},...y!==void 0&&{redirectUrl:y}})}});return o.ok&&r.emit("success",{type:"success",operation:"register",token:o.value.sessionToken,user:o.value.user}),o}var Xe=class{constructor(t,r){this.apiClient=t;this.eventEmitter=r}recover(t){return an(t,this.apiClient,this.eventEmitter)}};var Je=class e{sandbox;sandboxToken;apiClient;eventEmitter;telemetrySender;crossDeviceManager;authService;recoveryService;onboarding;static create(t){try{let r=t.appId,n=t.publishableKey;if(!r||typeof r!="string"||r.trim()==="")return c(A("appId","must be a non-empty string"));if(!n||typeof n!="string"||n.trim()==="")return c(A("publishableKey","must be a non-empty string"));let o=t.apiBaseUrl??rr;Bt(o,"apiBaseUrl");let i=t.timeoutMs??3e4;return G(i,"timeoutMs",1e3,3e5),t.maxRetries!==void 0&&G(t.maxRetries,"maxRetries",0,10),t.retryDelayMs!==void 0&&G(t.retryDelayMs,"retryDelayMs",100,1e4),f(new e(t))}catch(r){return Ut(r)?c(r):c(A("config",r.message))}}constructor(t){this.sandbox=t.sandbox===!0,this.sandboxToken=this.sandbox&&t.sandboxToken!=null&&t.sandboxToken!==""?t.sandboxToken:on;let r=t.appId,n=t.publishableKey;if(!r||typeof r!="string"||r.trim()==="")throw A("appId","must be a non-empty string");if(!n||typeof n!="string"||n.trim()==="")throw A("publishableKey","must be a non-empty string");let o=t.apiBaseUrl??rr;Bt(o,"apiBaseUrl");let i=t.timeoutMs??3e4;G(i,"timeoutMs",1e3,3e5),t.maxRetries!==void 0&&G(t.maxRetries,"maxRetries",0,10),t.retryDelayMs!==void 0&&G(t.retryDelayMs,"retryDelayMs",100,1e4);let a=t.maxRetries??3,l=t.retryDelayMs??1e3,d=new qe(i,a,l,t.logger),p=t.origin??(typeof window<"u"&&window?.location?.origin?window.location.origin:void 0),h={"X-App-Id":r.trim(),Authorization:`Bearer ${n.trim()}`,...p&&{Origin:p}};this.apiClient=new He(d,o,h),this.eventEmitter=new Qe,t.enableTelemetry&&(this.telemetrySender=t.telemetrySender??sn(t.telemetryEndpoint??nn)),this.authService=new $e(this.apiClient,this.eventEmitter,this.sandbox,this.sandboxToken,this.telemetrySender),this.recoveryService=new Xe(this.apiClient,this.eventEmitter),this.onboarding=new Ye(this.apiClient),this.crossDeviceManager=new ze(this.apiClient)}static isSupported(){return ee()}async register(t){return this.authService.register(t)}async authenticate(t){return this.authService.authenticate(t)}async validateSession(t){return this.sandbox&&t===this.sandboxToken?Promise.resolve(f({valid:!0,user_id:"sandbox-user",external_user_id:"sandbox",tenant_id:"sandbox-tenant",app_id:"sandbox-app"})):this.apiClient.validateSession(t)}async getStatus(){return Ge()}on(t,r){return this.eventEmitter.on(t,r)}version(){return"2.2.0"}fallback={email:{start:async t=>this.apiClient.startEmailFallback(t),verify:async t=>{let r=await this.apiClient.verifyEmailCode({userId:t.userId,code:t.code,...t.successUrl&&{successUrl:t.successUrl}});return r.ok?f({sessionToken:r.value.sessionToken,...r.value.redirectUrl&&{redirectUrl:r.value.redirectUrl}}):r}}};auth={crossDevice:{init:()=>this.crossDeviceManager.init(),initRegistration:t=>this.crossDeviceManager.initRegistration(t??{}),waitForSession:(t,r,n)=>this.crossDeviceManager.waitForSession(t,r,n),getContext:t=>this.apiClient.getCrossDeviceContext(t),approve:t=>this.crossDeviceManager.approve(t)},recoverAccount:t=>this.recoveryService.recover(t)}};function or(e){let t=Je.create({appId:e.appId,publishableKey:e.publishableKey});return!t.ok||t.value==null?null:t.value}function hn(e){if(e==null||typeof e!="object")return!1;let t=e,r=typeof t.authenticate=="function",n=typeof t.register=="function",o=typeof t.on=="function";return r&&n&&o}function gn(e){return e?{externalUserId:e}:{}}var Ze="mellon:open",_e="mellon:open-request",N="mellon:close",B="mellon:success",et="mellon:error",tt="mellon:start",ve="mellon:cancelled",rt="mellon:fallback",nt="mellon:tab-change";function ot(e,t,r,n){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:n.bubbles,composed:n.composed}))}function it(e){return e==="authenticate"?"login":"register"}function Eo(e){if(e==null||typeof e!="object")return;let t=e,r=t.userId;if(typeof r!="string"||r.length===0)return;let n={userId:r};return typeof t.externalUserId=="string"&&(n.externalUserId=t.externalUserId),typeof t.email=="string"&&(n.email=t.email),t.metadata!=null&&typeof t.metadata=="object"&&!Array.isArray(t.metadata)&&(n.metadata=t.metadata),n}function yo(e){return e!=null&&typeof e=="object"&&e.type==="start"&&(e.operation==="register"||e.operation==="authenticate")}function Ao(e){let t=e;return e!=null&&typeof e=="object"&&t.type==="success"&&typeof t.token=="string"&&(t.operation==="register"||t.operation==="authenticate")}function _o(e){return e!=null&&typeof e=="object"&&e.type==="error"}function vo(e){return e!=null&&typeof e=="object"&&e.type==="cancelled"&&(e.operation==="register"||e.operation==="authenticate")}var ir={subscribe(e,t){if(e==null||t==null)throw new TypeError("eventBridgeAdapter.subscribe: core and host are required");let r=[],n="authenticate",o=!1,i=e.on("start",p=>{if(!yo(p))return;n=p.operation,o=!1;let h={operation:it(p.operation),...typeof p.nonce=="string"&&{nonce:p.nonce}};ot(t,tt,h,{bubbles:!0,composed:!0})});r.push(i);let a=e.on("success",p=>{if(!Ao(p)||o||p.token.length===0)return;o=!0;let h=Eo(p.user),E={operation:it(p.operation),token:p.token,...typeof p.nonce=="string"&&{nonce:p.nonce},...h!==void 0&&{user:h},...typeof p.redirectUrl=="string"&&{redirectUrl:p.redirectUrl}};ot(t,B,E,{bubbles:!1,composed:!0})});r.push(a);let l=e.on("error",p=>{if(!_o(p)||o)return;let h=p.error?.code??"UNKNOWN_ERROR",E={operation:it(p.operation??n),code:h,message:typeof p.error?.message=="string"?p.error.message:"Unknown error",...typeof p.nonce=="string"&&{nonce:p.nonce}};ot(t,et,E,{bubbles:!0,composed:!0})});r.push(l);let d=e.on("cancelled",p=>{if(!vo(p))return;let h={operation:it(p.operation),...typeof p.nonce=="string"&&{nonce:p.nonce}};ot(t,ve,h,{bubbles:!0,composed:!0})});return r.push(d),function(){for(let h of r)h()}}};function bn(e){return{isPasskeySupported:e.isPasskeySupported,platformAuthenticatorAvailable:e.platformAuthenticatorAvailable,recommendedFlow:e.recommendedFlow}}function Ro(){return{getClientStatus:async()=>{let e=await Ge();return bn(e)}}}function En(e){let t=e;if(typeof t.getStatus!="function")return Ro();let r=t.getStatus;return{getClientStatus:async()=>{let n=await r();return bn(n)}}}function yn(e){return new CustomEvent(Ze,{detail:e,bubbles:!0,composed:!0})}function An(e){return new CustomEvent(N,{detail:e,bubbles:!0,composed:!0})}function _n(e){return new CustomEvent(ve,{detail:e,bubbles:!0,composed:!0})}function vn(e){return new CustomEvent(rt,{detail:e,bubbles:!0,composed:!0})}function Rn(e){return new CustomEvent(nt,{detail:e,bubbles:!0,composed:!0})}var st=class{_currentState=S;_lastRenderedState=null;_renderDirty=!0;_pendingOperation="authenticate";_currentNonce=void 0;_envEvalRequestId=0;get currentState(){return this._currentState}setState(t){this._currentState=t,this._renderDirty=!0}invalidateRender(){this._renderDirty=!0}consumeRenderDecision(){return!this._renderDirty&&this._currentState===this._lastRenderedState?!1:(this._lastRenderedState=this._currentState,this._renderDirty=!1,!0)}setPendingOperationFromTab(t){this._pendingOperation=t==="login"?"authenticate":"register"}get pendingOperation(){return this._pendingOperation}setNonce(t){this._currentNonce=t}consumeCancelledDetailIfAuthenticating(){if(this._currentState!=="AUTHENTICATING")return null;let t={operation:this._pendingOperation==="authenticate"?"login":this._pendingOperation,...this._currentNonce!==void 0&&{nonce:this._currentNonce}};return this._currentNonce=void 0,t}handleAuthSuccess(){let t=R.tryHandleAuthSuccess(this._currentState);t!==null&&this.setState(t)}handleAuthError(){let t=R.tryHandleAuthError(this._currentState);t!==null&&this.setState(t)}onStartEvent(t){t?.nonce!==void 0&&(this._currentNonce=t.nonce)}startAuthFromClick(t,r,n){if(!t||!gr(this._currentState))return;this.setPendingOperationFromTab(r);let o=R.startAuth(this._currentState,r,t,n);this.setState(o)}async runEnvEval(t){let r=++this._envEvalRequestId;this.setState(R.envEvalStart(this._currentState));let n=await R.evaluateEnv({...t,currentState:this._currentState});return r!==this._envEvalRequestId?null:n}reset(){this._currentState=R.reset(this._currentState),this._lastRenderedState=null,this._renderDirty=!0,this._currentNonce=void 0}setStateForRender(t){this._currentState=t,this._renderDirty=!0}};var te=class extends HTMLElement{_controller=new st;_unsubscribeBridge=null;_core=null;_lastCoreConfig=null;setState(t){this._controller.setState(t),this.scheduleRenderIfNeeded()}invalidateRender(){this._controller.invalidateRender(),this.scheduleRenderIfNeeded()}scheduleRenderIfNeeded(){this.shadowRoot&&this._controller.consumeRenderDecision()&&this._render()}_emitCancelledIfAuthenticating(){let t=this._controller.consumeCancelledDetailIfAuthenticating();return t?(this.dispatchEvent(_n(t)),!0):!1}attachCore(t){if(this._core!==null&&this._teardownCore(),t==null){this._core=null,this._controller.reset(),this.scheduleRenderIfNeeded();return}if(!hn(t))throw new Error("[trymellon-auth] attachCore requires a CoreAuthPort-compatible instance.");this._core=t,this._unsubscribeBridge=ir.subscribe(this._core,this),this._attachHostListeners(),this._runEnvEval()}_teardownCore(){this._unsubscribeBridge?.(),this._unsubscribeBridge=null,this.removeEventListener("mellon:start",this._onMellonStart),this.removeEventListener("mellon:success",this._onMellonSuccess),this.removeEventListener("mellon:error",this._onMellonError),this._core=null}_attachHostListeners(){this.removeEventListener("mellon:start",this._onMellonStart),this.removeEventListener("mellon:success",this._onMellonSuccess),this.removeEventListener("mellon:error",this._onMellonError),this.addEventListener("mellon:start",this._onMellonStart),this.addEventListener("mellon:success",this._onMellonSuccess),this.addEventListener("mellon:error",this._onMellonError)}_onMellonSuccess=()=>{this._controller.handleAuthSuccess(),this.scheduleRenderIfNeeded()};_onMellonError=()=>{this._controller.handleAuthError(),this.scheduleRenderIfNeeded()};_onMellonStart=t=>{let r=t.detail;this._controller.onStartEvent(r)};startAuthFromClick(){this._core&&this.canStartAuth()&&(this._controller.startAuthFromClick(this._core,this.getTabKind(),this.getCoreAuthOptions()),this.scheduleRenderIfNeeded())}dispatchFallback(t){let r=t!==void 0?{...this.getFallbackDetail(),fallbackType:t}:this.getFallbackDetail();this.dispatchEvent(vn(r))}async _runEnvEval(){if(!this._core)return;let t={...this.getEnvEvalParams(),envStatusPort:En(this._core)},r=await this._controller.runEnvEval(t);r!==null&&(!this._core||!this.isConnected||this.setState(r))}_maybeAutoCreateCoreAndRunEnvEval(){if(this._core!==null)return;let t=this.getCoreConfig();if(!t)return;let r=or(t);if(!r){this.attachCore(null);return}this.attachCore(r)}_reconcileCoreFromConfig(){let t=this.getCoreConfig();if(this._lastCoreConfig===null&&t===null||this._lastCoreConfig!==null&&t!==null&&this._lastCoreConfig.appId===t.appId&&this._lastCoreConfig.publishableKey===t.publishableKey)return;if(this._lastCoreConfig=t,t===null){this.attachCore(null);return}let n=or(t);this.attachCore(n??null)}disconnectedCallback(){this._teardownCore()}get currentState(){return this._controller.currentState}reset(){this._emitCancelledIfAuthenticating(),this._controller.reset(),this.scheduleRenderIfNeeded()}setStateForRender(t){this._controller.setStateForRender(t),this.scheduleRenderIfNeeded()}};function To(e){if(e==null||e.trim()==="")return Q;let t=e.split(",").map(o=>o.trim()),r=t[0]??Q.register,n=t[1]??Q.login;return{register:r,login:n}}function at(e){let t={open:ke(e.getAttribute("open")),mode:I(e.getAttribute("mode"),ie,Ie),tab:I(e.getAttribute("tab"),oe,Le),tabLabels:To(e.getAttribute("tab-labels")),theme:I(e.getAttribute("theme"),F,V),sessionId:T(e.getAttribute("session-id")),onboardingUrl:T(e.getAttribute("onboarding-url")),isMobileOverride:br(e.getAttribute("is-mobile-override")),fallbackType:Er(e.getAttribute("fallback-type"),se),appId:H(e.getAttribute("app-id")),publishableKey:H(e.getAttribute("publishable-key")),appName:T(e.getAttribute("app-name")),dialogTitle:T(e.getAttribute("dialog-title")),dialogDescription:T(e.getAttribute("dialog-description")),externalUserId:T(e.getAttribute("external-user-id")),modalVariant:I(e.getAttribute("modal-variant"),ue,xe)};return yt(t)}function So(e){let t=e.querySelector(`.${St}`);return t||(t=document.createElement("div"),t.className=St,e.appendChild(t)),t}function Co(e){let t=e.querySelector(`.${he}`);return t||(t=document.createElement("div"),t.className=he,t.setAttribute("aria-hidden","true"),e.appendChild(t)),t}function Io(e){let t=e.querySelector(`.${Ct}`);return t||(t=document.createElement("div"),t.className=Ct,e.appendChild(t)),t}function Lo(e,t){e.setAttribute("role","dialog"),e.setAttribute("aria-modal",t==="modal"?"true":"false"),e.setAttribute("aria-labelledby",Ue),e.setAttribute("aria-describedby",be)}function Mo(e,t){let r=e.querySelector(`#${Ue}`);r||(r=document.createElement("h2"),r.id=Ue,r.className="mellon-dialog-title",e.insertBefore(r,e.firstChild));let n=t.dialogTitle?.trim()??(t.appName?.trim()?Ar(t.appName.trim()):yr);r.textContent=n;let o=e.querySelector(`#${be}`);o||(o=document.createElement("p"),o.id=be,o.className="mellon-dialog-desc",e.insertBefore(o,r.nextSibling)),o.textContent=t.dialogDescription?.trim()??_r}function Oo(e){let t=e.querySelector(`.${Ot}`);t||(t=document.createElement("button"),t.type="button",t.className=Ot,t.setAttribute("aria-label",Rr),t.setAttribute("data-mellon-modal-close","true"),t.textContent="\xD7",e.appendChild(t))}function xo(e,t){let r=e.querySelector(`.${ge}`);if(!r){r=document.createElement("div"),r.className=ge,r.setAttribute("role","tablist");let i=document.createElement("button");i.type="button",i.setAttribute("data-tab","register"),i.setAttribute("role","tab");let a=document.createElement("button");a.type="button",a.setAttribute("data-tab","login"),a.setAttribute("role","tab"),r.appendChild(i),r.appendChild(a);let l=e.querySelector(`#${be}`);e.insertBefore(r,l?l.nextSibling:e.firstChild)}let[n,o]=r.querySelectorAll("button");return n&&(n.textContent=t.register),o&&(o.textContent=t.login),r}function sr(e){let t=e.querySelector(`.${It}`);if(!t){t=document.createElement("div"),t.className=It;let r=e.querySelector(`.${ge}`);e.insertBefore(t,r?r.nextSibling:e.firstChild)}return t}function ko(){let e=document.createElementNS(w,"svg");e.setAttribute("viewBox","0 0 24 24"),e.setAttribute("aria-hidden","true"),e.setAttribute("class","mellon-qr-icon"),e.setAttribute("fill","currentColor");let t=document.createElementNS(w,"path");return t.setAttribute("d","M3 3h6v6H3V3zm2 2v2h2V5H5zm8-2h6v6h-6V3zm2 2v2h2V5h-2zM3 15h6v6H3v-6zm2 2v2h2v-2H5zm8-2h6v6h-6v-6zm2 2v2h2v-2h-2zm4-12h2v2h-2V5zm0 8h2v2h-2v-2zm-4 4h2v2h-2v-2zm0-8h2v2h-2V9zm0 4h2v2h-2v-2z"),e.appendChild(t),e}function Tn(){let e=document.createDocumentFragment(),t=document.createElement("div");t.className=Sr;let r=document.createElement("p");r.className="mellon-cross-device-cta-text",r.textContent=Tr,t.appendChild(r);let n=document.createElement("button");return n.type="button",n.className="mellon-btn mellon-btn-qr-icon",n.setAttribute("data-mellon-action",$),n.setAttribute("aria-label",Cr),n.appendChild(ko()),t.appendChild(n),e.appendChild(t),e}function Do(){let e=document.createElement("div");e.className=Ir,e.setAttribute("aria-live","polite");let t=document.createElement("span");t.textContent=Or;let r=document.createElement("span");return r.className="mellon-qr-dots",r.setAttribute("aria-hidden","true"),e.appendChild(t),e.appendChild(r),e}function wo(){let e=document.createElement("div");return e.className=Lr,e.setAttribute("aria-live","polite"),e.textContent=xr,e}function Po(e){let t=sr(e),r=t.querySelector(`.${M}`);if(!r){r=document.createElement("div"),r.className=M,r.setAttribute("data-qr-area-state","default"),r.appendChild(Do()),r.appendChild(wo());let o=document.createElement("div");o.className=Mr;let i=document.createElement("slot");i.name=j,i.appendChild(Tn()),o.appendChild(i),r.appendChild(o),t.appendChild(r)}let n=r.querySelector(`slot[name="${j}"]`);if(!n){let o=document.createElement("slot");return o.name=j,o.appendChild(Tn()),r.appendChild(o),o}return n}function Uo(e){let t=sr(e);if(t.querySelector(`.${Mt}`))return;let r=document.createElement("div");r.className=Mt,r.setAttribute("aria-hidden","true");let n=document.createElement("span");n.className="mellon-separator-text",n.textContent=vr,r.appendChild(n);let o=t.querySelector(`.${M}`);t.insertBefore(r,o?o.nextSibling:t.firstChild)}function No(e){let t=sr(e),r=t.querySelector("slot:not([name])");if(!r){r=document.createElement("slot");let o=document.createElement("div");o.id=q,o.className="mellon-root",r.appendChild(o),t.appendChild(r)}let n=e.querySelector(`#${q}`);return n||(n=document.createElement("div"),n.id=q,n.className="mellon-root",r.appendChild(n)),n}function Bo(e){let t=e.querySelector(`slot[name="${Lt}"]`);return t||(t=document.createElement("slot"),t.name=Lt,e.appendChild(t)),t}function Fo(e,t){let r=e.querySelector(`.${ge}`);if(!r)return;let n=r.querySelector('[data-tab="register"]'),o=r.querySelector('[data-tab="login"]');n&&n.setAttribute("aria-selected",String(t==="register")),o&&o.setAttribute("aria-selected",String(t==="login"))}function Re(e,t){if(e==null||t==null)return;let r=So(e);r.setAttribute("data-mellon-modal-variant",t.modalVariant),t.mode==="modal"&&Co(r);let n=Io(r);Lo(n,t.mode),Mo(n,t),Oo(n),xo(n,t.tabLabels),Po(n),Uo(n),No(n),Bo(n),Fo(n,t.tab)}function Ko(e){return!(e.hidden===!0||e.getAttribute("aria-hidden")==="true")}function Sn(e){return Array.from(e.querySelectorAll(Ur)).filter(r=>Ko(r))}function Cn(e){let t=null,r=null,n=!1;function o(l){if(l.key!=="Tab")return;let d=Sn(e);if(d.length===0)return;let p=l.target instanceof Node?l.target:null,h=p?d.indexOf(p):-1,E=d.length-1,y;l.shiftKey?y=h<=0?E:h-1:y=h>=E?0:h+1;let L=d[y];L&&(l.preventDefault(),L.focus())}function i(){if(n)return;t=document.activeElement;let d=Sn(e)[0];d&&d.focus(),r=o,e.addEventListener("keydown",r,!0),n=!0}function a(){if(!n)return;r&&(e.removeEventListener("keydown",r,!0),r=null),n=!1;let l=e.getRootNode()?.ownerDocument??document,d=t instanceof HTMLElement&&l.body.contains(t)?t:null;if(d)d.focus();else{let p=l.body,h=p.getAttribute("tabindex");p.setAttribute("tabindex","-1"),p.focus(),h===null?p.removeAttribute("tabindex"):p.setAttribute("tabindex",h)}t=null}return{activate:i,deactivate:a}}var Vo="mellon-modal-wrapper",Ho="mellon-modal-overlay",qo="mellon-modal-panel",In=["app-id","publishable-key","mode","external-user-id","theme","action","trigger-only","button-variant","button-label","button-aria-label"],Ln=["open","mode","tab","tab-labels","theme","session-id","onboarding-url","is-mobile-override","fallback-type","app-id","publishable-key","app-name","dialog-title","dialog-description","external-user-id","modal-variant","qr-load-timeout-ms"],lt={wrapper:`.${Vo}`,overlay:`.${Ho}`,panel:`.${qo}`},Mn="user";var jo={SUCCESS:{reason:"success"},AUTHENTICATING:{reason:"cancel"},ERROR:{reason:"error"}};function Go(e){return jo[e]??{reason:Mn}}var ut=class extends te{static get observedAttributes(){return[...Ln]}_parsed=at(this);_focusTrap=null;_unregisterInteractions=null;_generatedExternalUserId=null;_qrLoadTimeoutId=null;_qrSlotChangeBound=null;_boundEscapeKeydown=t=>{t.key==="Escape"&&this._parsed.open&&(t.preventDefault(),this.open=!1)};connectedCallback(){if(this.addEventListener("keydown",this._boundEscapeKeydown,!0),this.shadowRoot){this._registerInteractions(),this._core!==null&&this._unsubscribeBridge===null&&this.attachCore(this._core);return}let t=this.attachShadow({mode:"open"}),r=jr();if(r)t.adoptedStyleSheets=[r];else{let n=document.createElement("style");n.textContent=qr(),t.appendChild(n)}this._parsed=at(this),Re(t,this._parsed),this._registerInteractions(),this._render(),this._applyModalVisibility(),this._maybeAutoCreateCoreAndRunEnvEval()}_registerInteractions(){this.shadowRoot&&(this._unregisterInteractions?.(),this._unregisterInteractions=Kr(this.shadowRoot,{onTabChange:t=>{this.dispatchEvent(Rn({tab:t})),this.setAttribute("tab",t)},onPrimaryClick:()=>this.startAuthFromClick(),onFallbackClick:t=>this.dispatchFallback(t),onOverlayClick:()=>{this.open=!1},onCloseClick:()=>{this.open=!1}}))}attributeChangedCallback(t,r,n){if(this.shadowRoot){if(this._parsed=at(this),t==="open"){if(this._parsed.open&&r!=="true"){let o={timestamp:Date.now()};this.dispatchEvent(yn(o)),this._startQrLoadWait()}if(!this._parsed.open){this._clearQrLoadWait(),this._transitionToIdle();return}}t==="tab"&&(this._emitCancelledIfAuthenticating(),this.setState(R.tabChange(this.currentState,this._parsed.tab))),(t==="app-id"||t==="publishable-key")&&this._reconcileCoreFromConfig(),Re(this.shadowRoot,this._parsed),this._render(),this._applyModalVisibility()}}_startQrLoadWait(){let t=this.shadowRoot;if(!t)return;let r=t.querySelector(`.${M}`),n=t.querySelector(`slot[name="${j}"]`);if(!r||!n)return;r.setAttribute("data-qr-area-state","waiting");let o=Math.max(1e3,parseInt(this.getAttribute("qr-load-timeout-ms")??String(12e3),10)||12e3);this._qrLoadTimeoutId=window.setTimeout(()=>{if(this._qrLoadTimeoutId=null,!this.shadowRoot)return;let a=this.shadowRoot.querySelector(`.${M}`);a?.getAttribute("data-qr-area-state")==="waiting"&&a.setAttribute("data-qr-area-state","timeout")},o);let i=()=>{if(n.assignedNodes().length>0){this._clearQrLoadWait();let a=this.shadowRoot?.querySelector(`.${M}`);a&&a.setAttribute("data-qr-area-state","loaded")}};this._qrSlotChangeBound=i,n.addEventListener("slotchange",i),n.assignedNodes().length>0&&i()}_clearQrLoadWait(){this._qrLoadTimeoutId!=null&&(clearTimeout(this._qrLoadTimeoutId),this._qrLoadTimeoutId=null);let t=this.shadowRoot;if(!t)return;let r=t.querySelector(`slot[name="${j}"]`);r&&this._qrSlotChangeBound&&(r.removeEventListener("slotchange",this._qrSlotChangeBound),this._qrSlotChangeBound=null);let n=t.querySelector(`.${M}`);n&&n.setAttribute("data-qr-area-state","default")}_transitionToIdle(){this._generatedExternalUserId=null;let r={reason:Go(this.currentState).reason,timestamp:Date.now()};this.dispatchEvent(An(r)),this._emitCancelledIfAuthenticating(),this.setState(R.reset(this.currentState)),this.shadowRoot&&(Re(this.shadowRoot,this._parsed),this.scheduleRenderIfNeeded(),this._applyModalVisibility())}get open(){return this._parsed.open}set open(t){this.setAttribute("open",t?"true":"false")}get mode(){return this._parsed.mode}set mode(t){this.setAttribute("mode",t)}get tab(){return this._parsed.tab}set tab(t){this.setAttribute("tab",t)}get tabLabels(){return`${this._parsed.tabLabels.register},${this._parsed.tabLabels.login}`}set tabLabels(t){t==null||t===""?this.removeAttribute("tab-labels"):this.setAttribute("tab-labels",t)}get theme(){return this._parsed.theme}set theme(t){this.setAttribute("theme",t)}get sessionId(){return this._parsed.sessionId}set sessionId(t){t==null?this.removeAttribute("session-id"):this.setAttribute("session-id",t)}get onboardingUrl(){return this._parsed.onboardingUrl}set onboardingUrl(t){t==null?this.removeAttribute("onboarding-url"):this.setAttribute("onboarding-url",t)}get isMobileOverride(){return this._parsed.isMobileOverride}set isMobileOverride(t){t==null?this.removeAttribute("is-mobile-override"):this.setAttribute("is-mobile-override",t?"true":"false")}get fallbackType(){return this._parsed.fallbackType}set fallbackType(t){t==null?this.removeAttribute("fallback-type"):this.setAttribute("fallback-type",t)}get appId(){return this._parsed.appId}set appId(t){this.setAttribute("app-id",t??"")}get publishableKey(){return this._parsed.publishableKey}set publishableKey(t){this.setAttribute("publishable-key",t??"")}get appName(){return this._parsed.appName}set appName(t){t==null?this.removeAttribute("app-name"):this.setAttribute("app-name",t)}get dialogTitle(){return this._parsed.dialogTitle}set dialogTitle(t){t==null?this.removeAttribute("dialog-title"):this.setAttribute("dialog-title",t)}get dialogDescription(){return this._parsed.dialogDescription}set dialogDescription(t){t==null?this.removeAttribute("dialog-description"):this.setAttribute("dialog-description",t)}get externalUserId(){return this._parsed.externalUserId}set externalUserId(t){t==null?this.removeAttribute("external-user-id"):this.setAttribute("external-user-id",t)}disconnectedCallback(){this._unregisterInteractions?.(),this._unregisterInteractions=null,this.removeEventListener("keydown",this._boundEscapeKeydown,!0),super.disconnectedCallback()}reset(){this._transitionToIdle()}getTabKind(){return this._parsed.tab}getCoreAuthOptions(){let t=this._resolveExternalUserId();return t?{externalUserId:t}:{}}_resolveExternalUserId(){let t=this._parsed.externalUserId?.trim();return t||(this.getTabKind()!=="register"?null:(this._generatedExternalUserId??=typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():null,this._generatedExternalUserId))}canStartAuth(){return!0}getEnvEvalParams(){return{mode:this._parsed.tab,isMobileOverride:this._parsed.isMobileOverride??void 0,fallbackType:this._parsed.fallbackType}}getCoreConfig(){return!this._parsed.appId||!this._parsed.publishableKey?null:{appId:this._parsed.appId,publishableKey:this._parsed.publishableKey}}getFallbackDetail(){return{operation:this._parsed.tab}}_applyModalVisibility(){if(!this.shadowRoot)return;let t=this.shadowRoot.querySelector(lt.wrapper);t&&(t.hidden=!this._parsed.open);let r=this.shadowRoot.querySelector(lt.overlay);r&&(r.hidden=this._parsed.mode!=="modal");let n=this.shadowRoot.querySelector(lt.panel);n&&n.setAttribute("aria-hidden",String(!this._parsed.open)),this._parsed.open&&t?(this._focusTrap||(this._focusTrap=Cn(t)),this._focusTrap.activate()):this._focusTrap?.deactivate()}_render(){if(!this.shadowRoot)return;Re(this.shadowRoot,this._parsed),this._applyModalVisibility();let t=_t(this.currentState,this._parsed,{registerSessionReady:this._parsed.tab==="register"?this.canStartAuth():void 0,primaryButtonLabel:Rt,primaryButtonAriaLabel:Tt}),r={shadowRoot:this.shadowRoot};wr(r,t)}};var dt=class extends te{static get observedAttributes(){return[...In]}_parsed={...pe};_internalModal=null;_focusRestoreTarget=null;_unregisterInteractions=null;_onInternalModalClose=()=>{this._internalModal&&(this._internalModal.open=!1),this._restoreFocusToTrigger()};_onInternalModalSuccess=t=>{let r=t;this.dispatchEvent(new CustomEvent(B,{detail:r.detail,bubbles:!1,composed:!0}))};_restoreFocusToTrigger(){let t=this._focusRestoreTarget;this._focusRestoreTarget=null,!(!t?.isConnected||typeof t.focus!="function")&&t.focus()}connectedCallback(){if(this.shadowRoot){this._registerInteractions(),this._core!==null&&this._unsubscribeBridge===null&&this.attachCore(this._core),this._syncInternalModalAttributes(),this._ensureInternalModal();return}let t=this.attachShadow({mode:"open"}),r=wt();if(r)t.adoptedStyleSheets=[r];else{let n=document.createElement("style");n.textContent=Pt(),t.appendChild(n)}this._parsed=vt(this),this._syncThemeAttribute(),this._registerInteractions(),this._render(),this._reconcileCoreFromConfig(),this._ensureInternalModal()}_registerInteractions(){this.shadowRoot&&(this._unregisterInteractions?.(),this._unregisterInteractions=Fr(this.shadowRoot,{onPrimaryClick:()=>this._onPrimaryClick(),onFallbackClick:t=>this.dispatchFallback(t)}))}attributeChangedCallback(t,r,n){if(!this.shadowRoot)return;let o=this._parsed.mode;if(this._parsed=vt(this),(t==="button-variant"||t==="theme")&&this.invalidateRender(),(t==="app-id"||t==="publishable-key")&&this._reconcileCoreFromConfig(),t==="mode"&&(this._parsed.mode==="register"||this._parsed.mode==="login")){let i=this._parsed.mode;o!==i&&(this._emitCancelledIfAuthenticating(),this.setState(R.tabChange(this.currentState,i)))}this._syncThemeAttribute(),this.scheduleRenderIfNeeded(),this._syncInternalModalAttributes(),this._ensureInternalModal()}_onPrimaryClick(){if(this._parsed.action==="open-modal"){this._focusRestoreTarget=document.activeElement instanceof Element?document.activeElement:null,this.dispatchEvent(new CustomEvent(_e,{detail:{},bubbles:!0,composed:!0})),!this._parsed.triggerOnly&&this._internalModal&&(this._internalModal.open=!0);return}this.startAuthFromClick()}getTabKind(){return this._parsed.mode==="auto"?"login":this._parsed.mode}getCoreAuthOptions(){return gn(this._parsed.externalUserId)}canStartAuth(){return!0}getEnvEvalParams(){return{mode:this._parsed.mode}}getCoreConfig(){return!this._parsed.appId||!this._parsed.publishableKey?null:{appId:this._parsed.appId,publishableKey:this._parsed.publishableKey}}getFallbackDetail(){let t=this._parsed.mode==="login"||this._parsed.mode==="register"?this._parsed.mode:void 0;return t!==void 0?{operation:t}:{}}_render(){if(!this.shadowRoot)return;let t=At(this.currentState,this._parsed,{registerSessionReady:this._parsed.mode==="register"?this.canStartAuth():void 0,primaryButtonLabel:this._parsed.buttonLabel??void 0,primaryButtonAriaLabel:this._parsed.buttonAriaLabel??void 0}),r={shadowRoot:this.shadowRoot};Dr(r,t)}_syncThemeAttribute(){this.getAttribute("theme")!==this._parsed.theme&&this.setAttribute("theme",this._parsed.theme)}_syncInternalModalAttributes(){if(!this._internalModal)return;this._internalModal.setAttribute("app-id",this._parsed.appId??""),this._internalModal.setAttribute("publishable-key",this._parsed.publishableKey??""),this._internalModal.setAttribute("theme",this._parsed.theme);let t=this._parsed.mode==="auto"?"login":this._parsed.mode;this._internalModal.setAttribute("tab",t),this._internalModal.setAttribute("modal-variant","minimal")}_ensureInternalModal(){if(this._parsed.action!=="open-modal"||!this.shadowRoot)return;if(this._parsed.triggerOnly){this._internalModal?.isConnected&&(this._internalModal.removeEventListener(N,this._onInternalModalClose),this._internalModal.remove(),this._internalModal=null);return}if(this._internalModal?.isConnected){this._syncInternalModalAttributes();return}let t=document.createElement("trymellon-auth-modal");this._internalModal=t,this._syncInternalModalAttributes(),t.addEventListener(N,this._onInternalModalClose),t.addEventListener(B,this._onInternalModalSuccess),typeof document<"u"&&document.body?document.body.appendChild(t):this.shadowRoot.appendChild(t)}disconnectedCallback(){this._unregisterInteractions?.(),this._unregisterInteractions=null,this._internalModal?.isConnected&&(this._internalModal.removeEventListener(N,this._onInternalModalClose),this._internalModal.removeEventListener(B,this._onInternalModalSuccess),this._internalModal.remove(),this._internalModal=null),super.disconnectedCallback()}};var Kl="0.1.0",xn="trymellon-auth",kn="trymellon-auth-modal";typeof customElements<"u"&&!customElements.get(xn)&&customElements.define(xn,dt);typeof customElements<"u"&&!customElements.get(kn)&&customElements.define(kn,ut);export{Ee as BASE_STYLES,S as INITIAL_UI_STATE,ve as MELLON_CANCELLED,N as MELLON_CLOSE,et as MELLON_ERROR,rt as MELLON_FALLBACK,Ze as MELLON_OPEN,_e as MELLON_OPEN_REQUEST,tt as MELLON_START,B as MELLON_SUCCESS,nt as MELLON_TAB_CHANGE,kn as TRYMELLON_AUTH_MODAL_TAG,xn as TRYMELLON_AUTH_TAG,dt as TryMellonAuthElement,ut as TryMellonAuthModalElement,Kl as UI_VERSION,wt as createConstructableStylesheet,ir as eventBridgeAdapter,re as getNextState,Pt as getStylesFallback};
|
|
489
492
|
//# sourceMappingURL=index.js.map
|