@imtbl/auth 2.10.7-alpha.4 → 2.10.7-alpha.5

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.
@@ -1,10 +1,10 @@
1
1
  import { UserManager, User, ErrorTimeout, ErrorResponse, InMemoryWebStorage, WebStorageStateStore } from 'oidc-client-ts';
2
2
  import Or, { isAxiosError } from 'axios';
3
3
  import Re from 'jwt-decode';
4
- import { getDetail, Detail, track, identify } from '@imtbl/metrics';
4
+ import { getDetail, Detail, track, trackFlow, trackError, identify } from '@imtbl/metrics';
5
5
  import gr from 'localforage';
6
6
 
7
- var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var Ge=Object.getOwnPropertyNames;var Be=Object.getPrototypeOf,Ke=Object.prototype.hasOwnProperty;var $=(r,e)=>()=>(r&&(e=r(r=0)),e);var Ze=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var We=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ge(e))!Ke.call(r,i)&&i!==t&&se(r,i,{get:()=>e[i],enumerable:!(n=Ve(e,i))||n.enumerable});return r};var $e=(r,e,t)=>(t=r!=null?Fe(Be(r)):{},We(se(t,"default",{value:r,enumerable:!0}),r));function q(r){throw new Error("Node.js process "+r+" is not supported by JSPM core outside of Node.js")}function Ye(){!P||!T||(P=!1,T.length?C=T.concat(C):S=-1,C.length&&ae());}function ae(){if(!P){var r=setTimeout(Ye,0);P=!0;for(var e=C.length;e;){for(T=C,C=[];++S<e;)T&&T[S].run();S=-1,e=C.length;}T=null,P=!1,clearTimeout(r);}}function je(r){var e=new Array(arguments.length-1);if(arguments.length>1)for(var t=1;t<arguments.length;t++)e[t-1]=arguments[t];C.push(new le(r,e)),C.length===1&&!P&&setTimeout(ae,0);}function le(r,e){this.fun=r,this.array=e;}function h(){}function ut(r){q("_linkedBinding");}function gt(r){q("dlopen");}function ht(){return []}function vt(){return []}function Pt(r,e){if(!r)throw new Error(e||"assertion error")}function At(){return !1}function Yt(){return O.now()/1e3}function z(r){var e=Math.floor((Date.now()-O.now())*.001),t=O.now()*.001,n=Math.floor(t)+e,i=Math.floor(t%1*1e9);return r&&(n=n-r[0],i=i-r[1],i<0&&(n--,i+=j)),[n,i]}function R(){return p}function or(r){return []}var C,P,T,S,ze,qe,Xe,Qe,Je,et,tt,rt,nt,it,ot,st,at,lt,dt,ct,pt,mt,ft,Et,_t,X,Ct,yt,Ot,Rt,Lt,Tt,bt,wt,It,xt,kt,Mt,Ut,Nt,Dt,St,Ht,Ft,Vt,Gt,Bt,Kt,Zt,Wt,$t,O,Y,j,jt,zt,qt,Xt,Qt,Jt,er,tr,rr,nr,ir,p,de=$(()=>{l();a();C=[],P=!1,S=-1;le.prototype.run=function(){this.fun.apply(null,this.array);};ze="browser",qe="x64",Xe="browser",Qe={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},Je=["/usr/bin/node"],et=[],tt="v16.8.0",rt={},nt=function(r,e){console.warn((e?e+": ":"")+r);},it=function(r){q("binding");},ot=function(r){return 0},st=function(){return "/"},at=function(r){},lt={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};dt=h,ct=[];pt={},mt=!1,ft={};Et=h,_t=h,X=function(){return {}},Ct=X,yt=X,Ot=h,Rt=h,Lt=h,Tt={};bt={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},wt=h,It=h;xt=h,kt=h,Mt=h,Ut=h,Nt=h,Dt=void 0,St=void 0,Ht=void 0,Ft=h,Vt=2,Gt=1,Bt="/bin/usr/node",Kt=9229,Zt="node",Wt=[],$t=h,O={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};O.now===void 0&&(Y=Date.now(),O.timing&&O.timing.navigationStart&&(Y=O.timing.navigationStart),O.now=()=>Date.now()-Y);j=1e9;z.bigint=function(r){var e=z(r);return typeof BigInt>"u"?e[0]*j+e[1]:BigInt(e[0]*j)+BigInt(e[1])};jt=10,zt={},qt=0;Xt=R,Qt=R,Jt=R,er=R,tr=R,rr=h,nr=R,ir=R;p={version:tt,versions:rt,arch:qe,platform:Xe,release:lt,_rawDebug:dt,moduleLoadList:ct,binding:it,_linkedBinding:ut,_events:zt,_eventsCount:qt,_maxListeners:jt,on:R,addListener:Xt,once:Qt,off:Jt,removeListener:er,removeAllListeners:tr,emit:rr,prependListener:nr,prependOnceListener:ir,listeners:or,domain:pt,_exiting:mt,config:ft,dlopen:gt,uptime:Yt,_getActiveRequests:ht,_getActiveHandles:vt,reallyExit:Et,_kill:_t,cpuUsage:X,resourceUsage:Ct,memoryUsage:yt,kill:Ot,exit:Rt,openStdin:Lt,allowedNodeEnvironmentFlags:Tt,assert:Pt,features:bt,_fatalExceptions:wt,setUncaughtExceptionCaptureCallback:It,hasUncaughtExceptionCaptureCallback:At,emitWarning:nt,nextTick:je,_tickCallback:xt,_debugProcess:kt,_debugEnd:Mt,_startProfilerIdleNotifier:Ut,_stopProfilerIdleNotifier:Nt,stdout:Dt,stdin:Ht,stderr:St,abort:Ft,umask:ot,chdir:at,cwd:st,env:Qe,title:ze,argv:Je,execArgv:et,pid:Vt,ppid:Gt,execPath:Bt,debugPort:Kt,hrtime:z,argv0:Zt,_preload_modules:Wt,setSourceMapsEnabled:$t};});var a=$(()=>{de();});var l=$(()=>{});var Se=Ze((Ti,ne)=>{l();a();var I=typeof Reflect=="object"?Reflect:null,be=I&&typeof I.apply=="function"?I.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},K;I&&typeof I.ownKeys=="function"?K=I.ownKeys:Object.getOwnPropertySymbols?K=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:K=function(e){return Object.getOwnPropertyNames(e)};function Vr(r){console&&console.warn&&console.warn(r);}var Ie=Number.isNaN||function(e){return e!==e};function c(){c.init.call(this);}ne.exports=c;ne.exports.once=Zr;c.EventEmitter=c;c.prototype._events=void 0;c.prototype._eventsCount=0;c.prototype._maxListeners=void 0;var we=10;function Z(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(c,"defaultMaxListeners",{enumerable:!0,get:function(){return we},set:function(r){if(typeof r!="number"||r<0||Ie(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");we=r;}});c.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0;};c.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ie(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function Ae(r){return r._maxListeners===void 0?c.defaultMaxListeners:r._maxListeners}c.prototype.getMaxListeners=function(){return Ae(this)};c.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var i=e==="error",o=this._events;if(o!==void 0)i=i&&o.error===void 0;else if(!i)return !1;if(i){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var d=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw d.context=s,d}var f=o[e];if(f===void 0)return !1;if(typeof f=="function")be(f,this,t);else for(var _=f.length,u=Ne(f,_),n=0;n<_;++n)be(u[n],this,t);return !0};function xe(r,e,t,n){var i,o,s;if(Z(t),o=r._events,o===void 0?(o=r._events=Object.create(null),r._eventsCount=0):(o.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),o=r._events),s=o[e]),s===void 0)s=o[e]=t,++r._eventsCount;else if(typeof s=="function"?s=o[e]=n?[t,s]:[s,t]:n?s.unshift(t):s.push(t),i=Ae(r),i>0&&s.length>i&&!s.warned){s.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=r,d.type=e,d.count=s.length,Vr(d);}return r}c.prototype.addListener=function(e,t){return xe(this,e,t,!1)};c.prototype.on=c.prototype.addListener;c.prototype.prependListener=function(e,t){return xe(this,e,t,!0)};function Gr(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function ke(r,e,t){var n={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},i=Gr.bind(n);return i.listener=t,n.wrapFn=i,i}c.prototype.once=function(e,t){return Z(t),this.on(e,ke(this,e,t)),this};c.prototype.prependOnceListener=function(e,t){return Z(t),this.prependListener(e,ke(this,e,t)),this};c.prototype.removeListener=function(e,t){var n,i,o,s,d;if(Z(t),i=this._events,i===void 0)return this;if(n=i[e],n===void 0)return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,n.listener||t));else if(typeof n!="function"){for(o=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){d=n[s].listener,o=s;break}if(o<0)return this;o===0?n.shift():Br(n,o),n.length===1&&(i[e]=n[0]),i.removeListener!==void 0&&this.emit("removeListener",e,d||t);}return this};c.prototype.off=c.prototype.removeListener;c.prototype.removeAllListeners=function(e){var t,n,i;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var o=Object.keys(n),s;for(i=0;i<o.length;++i)s=o[i],s!=="removeListener"&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=n[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function Me(r,e,t){var n=r._events;if(n===void 0)return [];var i=n[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Kr(i):Ne(i,i.length)}c.prototype.listeners=function(e){return Me(this,e,!0)};c.prototype.rawListeners=function(e){return Me(this,e,!1)};c.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):Ue.call(r,e)};c.prototype.listenerCount=Ue;function Ue(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}c.prototype.eventNames=function(){return this._eventsCount>0?K(this._events):[]};function Ne(r,e){for(var t=new Array(e),n=0;n<e;++n)t[n]=r[n];return t}function Br(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop();}function Kr(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function Zr(r,e){return new Promise(function(t,n){function i(s){r.removeListener(e,o),n(s);}function o(){typeof r.removeListener=="function"&&r.removeListener("error",i),t([].slice.call(arguments));}De(r,e,o,{once:!0}),e!=="error"&&Wr(r,i,{once:!0});})}function Wr(r,e,t){typeof r.on=="function"&&De(r,"error",e,t);}function De(r,e,t,n){if(typeof r.on=="function")n.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function i(o){n.once&&r.removeEventListener(e,i),t(o);});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});l();a();l();a();l();a();l();a();var ce="pkce_state",ue="pkce_verifier",ar=3600,x=class{isTokenValid(e){try{let n=Re(e).exp??0,i=Date.now()/1e3+ar;return n>i}catch{return !1}}savePKCEData(e){localStorage.setItem(ce,e.state),localStorage.setItem(ue,e.verifier);}getPKCEData(){let e=localStorage.getItem(ce),t=localStorage.getItem(ue);return e&&t?{state:e,verifier:t}:null}};l();a();var lr=(...r)=>{if(typeof p>"u")return;p?.env?.JEST_WORKER_ID===void 0&&console.warn(...r);},k={warn:lr};l();a();function pe(r){try{let e=Re(r),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function me(r){let{id_token:e,access_token:t}=r;return !t||!e?!0:pe(t)||pe(e)}l();a();var H=(m=>(m.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",m.INVALID_CONFIGURATION="INVALID_CONFIGURATION",m.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",m.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",m.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",m.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",m.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",m.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",m.LOGOUT_ERROR="LOGOUT_ERROR",m.TRANSFER_ERROR="TRANSFER_ERROR",m.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",m.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",m.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",m.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",m.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR",m.LINK_WALLET_ALREADY_LINKED_ERROR="LINK_WALLET_ALREADY_LINKED_ERROR",m.LINK_WALLET_MAX_WALLETS_LINKED_ERROR="LINK_WALLET_MAX_WALLETS_LINKED_ERROR",m.LINK_WALLET_VALIDATION_ERROR="LINK_WALLET_VALIDATION_ERROR",m.LINK_WALLET_DUPLICATE_NONCE_ERROR="LINK_WALLET_DUPLICATE_NONCE_ERROR",m.LINK_WALLET_GENERIC_ERROR="LINK_WALLET_GENERIC_ERROR",m.SERVICE_UNAVAILABLE_ERROR="SERVICE_UNAVAILABLE_ERROR",m))(H||{});function ur(r){return "code"in r&&"message"in r}var v=class extends Error{type;constructor(e,t){super(e),this.type=t;}},L=async(r,e)=>{try{return await r()}catch(t){let n;throw t instanceof v&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new v(t.message,t.type):(isAxiosError(t)&&t.response?.data&&ur(t.response.data)?n=t.response.data.message:n=t.message,new v(n,e))}};l();a();var fe=(t=>(t.IMX="imx",t.ZKEVM="zkEvm",t))(fe||{}),Q=r=>!!r.zkEvm,J=r=>!!r.imx,ge=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(ge||{}),ee=(t=>(t.LOGGED_OUT="loggedOut",t.LOGGED_IN="loggedIn",t))(ee||{});l();a();l();a();var b="passport-overlay",M="passport-overlay-contents",F=`${b}-close`,V=`${b}-try-again`,he=`
7
+ var He=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var Ge=Object.getOwnPropertyNames;var Be=Object.getPrototypeOf,Ke=Object.prototype.hasOwnProperty;var Y=(r,e)=>()=>(r&&(e=r(r=0)),e);var Ze=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var We=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ge(e))!Ke.call(r,i)&&i!==t&&se(r,i,{get:()=>e[i],enumerable:!(n=Ve(e,i))||n.enumerable});return r};var $e=(r,e,t)=>(t=r!=null?He(Be(r)):{},We(se(t,"default",{value:r,enumerable:!0}),r));function q(r){throw new Error("Node.js process "+r+" is not supported by JSPM core outside of Node.js")}function Ye(){!b||!P||(b=!1,P.length?y=P.concat(y):F=-1,y.length&&ae());}function ae(){if(!b){var r=setTimeout(Ye,0);b=!0;for(var e=y.length;e;){for(P=y,y=[];++F<e;)P&&P[F].run();F=-1,e=y.length;}P=null,b=!1,clearTimeout(r);}}function je(r){var e=new Array(arguments.length-1);if(arguments.length>1)for(var t=1;t<arguments.length;t++)e[t-1]=arguments[t];y.push(new le(r,e)),y.length===1&&!b&&setTimeout(ae,0);}function le(r,e){this.fun=r,this.array=e;}function h(){}function ut(r){q("_linkedBinding");}function gt(r){q("dlopen");}function ht(){return []}function vt(){return []}function Pt(r,e){if(!r)throw new Error(e||"assertion error")}function At(){return !1}function Yt(){return R.now()/1e3}function Q(r){var e=Math.floor((Date.now()-R.now())*.001),t=R.now()*.001,n=Math.floor(t)+e,i=Math.floor(t%1*1e9);return r&&(n=n-r[0],i=i-r[1],i<0&&(n--,i+=z)),[n,i]}function L(){return u}function or(r){return []}var y,b,P,F,ze,Qe,qe,Je,Xe,et,tt,rt,nt,it,ot,st,at,lt,dt,ct,pt,ft,mt,Et,_t,J,Ct,yt,Ot,Rt,Lt,Tt,wt,bt,It,kt,Mt,xt,Ut,Nt,Dt,St,Ft,Ht,Vt,Gt,Bt,Kt,Zt,Wt,$t,R,j,z,jt,zt,Qt,qt,Jt,Xt,er,tr,rr,nr,ir,u,de=Y(()=>{l();a();y=[],b=!1,F=-1;le.prototype.run=function(){this.fun.apply(null,this.array);};ze="browser",Qe="x64",qe="browser",Je={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},Xe=["/usr/bin/node"],et=[],tt="v16.8.0",rt={},nt=function(r,e){console.warn((e?e+": ":"")+r);},it=function(r){q("binding");},ot=function(r){return 0},st=function(){return "/"},at=function(r){},lt={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};dt=h,ct=[];pt={},ft=!1,mt={};Et=h,_t=h,J=function(){return {}},Ct=J,yt=J,Ot=h,Rt=h,Lt=h,Tt={};wt={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},bt=h,It=h;kt=h,Mt=h,xt=h,Ut=h,Nt=h,Dt=void 0,St=void 0,Ft=void 0,Ht=h,Vt=2,Gt=1,Bt="/bin/usr/node",Kt=9229,Zt="node",Wt=[],$t=h,R={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};R.now===void 0&&(j=Date.now(),R.timing&&R.timing.navigationStart&&(j=R.timing.navigationStart),R.now=()=>Date.now()-j);z=1e9;Q.bigint=function(r){var e=Q(r);return typeof BigInt>"u"?e[0]*z+e[1]:BigInt(e[0]*z)+BigInt(e[1])};jt=10,zt={},Qt=0;qt=L,Jt=L,Xt=L,er=L,tr=L,rr=h,nr=L,ir=L;u={version:tt,versions:rt,arch:Qe,platform:qe,release:lt,_rawDebug:dt,moduleLoadList:ct,binding:it,_linkedBinding:ut,_events:zt,_eventsCount:Qt,_maxListeners:jt,on:L,addListener:qt,once:Jt,off:Xt,removeListener:er,removeAllListeners:tr,emit:rr,prependListener:nr,prependOnceListener:ir,listeners:or,domain:pt,_exiting:ft,config:mt,dlopen:gt,uptime:Yt,_getActiveRequests:ht,_getActiveHandles:vt,reallyExit:Et,_kill:_t,cpuUsage:J,resourceUsage:Ct,memoryUsage:yt,kill:Ot,exit:Rt,openStdin:Lt,allowedNodeEnvironmentFlags:Tt,assert:Pt,features:wt,_fatalExceptions:bt,setUncaughtExceptionCaptureCallback:It,hasUncaughtExceptionCaptureCallback:At,emitWarning:nt,nextTick:je,_tickCallback:kt,_debugProcess:Mt,_debugEnd:xt,_startProfilerIdleNotifier:Ut,_stopProfilerIdleNotifier:Nt,stdout:Dt,stdin:Ft,stderr:St,abort:Ht,umask:ot,chdir:at,cwd:st,env:Je,title:ze,argv:Xe,execArgv:et,pid:Vt,ppid:Gt,execPath:Bt,debugPort:Kt,hrtime:Q,argv0:Zt,_preload_modules:Wt,setSourceMapsEnabled:$t};});var a=Y(()=>{de();});var l=Y(()=>{});var Se=Ze((wi,ne)=>{l();a();var k=typeof Reflect=="object"?Reflect:null,we=k&&typeof k.apply=="function"?k.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)},Z;k&&typeof k.ownKeys=="function"?Z=k.ownKeys:Object.getOwnPropertySymbols?Z=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Z=function(e){return Object.getOwnPropertyNames(e)};function Vr(r){console&&console.warn&&console.warn(r);}var Ie=Number.isNaN||function(e){return e!==e};function c(){c.init.call(this);}ne.exports=c;ne.exports.once=Zr;c.EventEmitter=c;c.prototype._events=void 0;c.prototype._eventsCount=0;c.prototype._maxListeners=void 0;var be=10;function W(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(c,"defaultMaxListeners",{enumerable:!0,get:function(){return be},set:function(r){if(typeof r!="number"||r<0||Ie(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");be=r;}});c.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0;};c.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ie(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function Ae(r){return r._maxListeners===void 0?c.defaultMaxListeners:r._maxListeners}c.prototype.getMaxListeners=function(){return Ae(this)};c.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var i=e==="error",o=this._events;if(o!==void 0)i=i&&o.error===void 0;else if(!i)return !1;if(i){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var d=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw d.context=s,d}var g=o[e];if(g===void 0)return !1;if(typeof g=="function")we(g,this,t);else for(var C=g.length,p=Ne(g,C),n=0;n<C;++n)we(p[n],this,t);return !0};function ke(r,e,t,n){var i,o,s;if(W(t),o=r._events,o===void 0?(o=r._events=Object.create(null),r._eventsCount=0):(o.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),o=r._events),s=o[e]),s===void 0)s=o[e]=t,++r._eventsCount;else if(typeof s=="function"?s=o[e]=n?[t,s]:[s,t]:n?s.unshift(t):s.push(t),i=Ae(r),i>0&&s.length>i&&!s.warned){s.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=r,d.type=e,d.count=s.length,Vr(d);}return r}c.prototype.addListener=function(e,t){return ke(this,e,t,!1)};c.prototype.on=c.prototype.addListener;c.prototype.prependListener=function(e,t){return ke(this,e,t,!0)};function Gr(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Me(r,e,t){var n={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},i=Gr.bind(n);return i.listener=t,n.wrapFn=i,i}c.prototype.once=function(e,t){return W(t),this.on(e,Me(this,e,t)),this};c.prototype.prependOnceListener=function(e,t){return W(t),this.prependListener(e,Me(this,e,t)),this};c.prototype.removeListener=function(e,t){var n,i,o,s,d;if(W(t),i=this._events,i===void 0)return this;if(n=i[e],n===void 0)return this;if(n===t||n.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,n.listener||t));else if(typeof n!="function"){for(o=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){d=n[s].listener,o=s;break}if(o<0)return this;o===0?n.shift():Br(n,o),n.length===1&&(i[e]=n[0]),i.removeListener!==void 0&&this.emit("removeListener",e,d||t);}return this};c.prototype.off=c.prototype.removeListener;c.prototype.removeAllListeners=function(e){var t,n,i;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var o=Object.keys(n),s;for(i=0;i<o.length;++i)s=o[i],s!=="removeListener"&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=n[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function xe(r,e,t){var n=r._events;if(n===void 0)return [];var i=n[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Kr(i):Ne(i,i.length)}c.prototype.listeners=function(e){return xe(this,e,!0)};c.prototype.rawListeners=function(e){return xe(this,e,!1)};c.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):Ue.call(r,e)};c.prototype.listenerCount=Ue;function Ue(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}c.prototype.eventNames=function(){return this._eventsCount>0?Z(this._events):[]};function Ne(r,e){for(var t=new Array(e),n=0;n<e;++n)t[n]=r[n];return t}function Br(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop();}function Kr(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function Zr(r,e){return new Promise(function(t,n){function i(s){r.removeListener(e,o),n(s);}function o(){typeof r.removeListener=="function"&&r.removeListener("error",i),t([].slice.call(arguments));}De(r,e,o,{once:!0}),e!=="error"&&Wr(r,i,{once:!0});})}function Wr(r,e,t){typeof r.on=="function"&&De(r,"error",e,t);}function De(r,e,t,n){if(typeof r.on=="function")n.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function i(o){n.once&&r.removeEventListener(e,i),t(o);});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});l();a();l();a();l();a();l();a();var ce="pkce_state",ue="pkce_verifier",ar=3600,x=class{isTokenValid(e){try{let n=Re(e).exp??0,i=Date.now()/1e3+ar;return n>i}catch{return !1}}savePKCEData(e){localStorage.setItem(ce,e.state),localStorage.setItem(ue,e.verifier);}getPKCEData(){let e=localStorage.getItem(ce),t=localStorage.getItem(ue);return e&&t?{state:e,verifier:t}:null}};l();a();var lr=(...r)=>{if(typeof u>"u")return;u?.env?.JEST_WORKER_ID===void 0&&console.warn(...r);},w={warn:lr};l();a();function pe(r){try{let e=Re(r),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function fe(r){let{id_token:e,access_token:t}=r;return !t||!e?!0:pe(t)||pe(e)}l();a();var H=(f=>(f.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",f.INVALID_CONFIGURATION="INVALID_CONFIGURATION",f.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",f.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",f.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",f.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",f.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",f.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",f.LOGOUT_ERROR="LOGOUT_ERROR",f.TRANSFER_ERROR="TRANSFER_ERROR",f.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",f.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",f.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",f.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",f.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR",f.LINK_WALLET_ALREADY_LINKED_ERROR="LINK_WALLET_ALREADY_LINKED_ERROR",f.LINK_WALLET_MAX_WALLETS_LINKED_ERROR="LINK_WALLET_MAX_WALLETS_LINKED_ERROR",f.LINK_WALLET_VALIDATION_ERROR="LINK_WALLET_VALIDATION_ERROR",f.LINK_WALLET_DUPLICATE_NONCE_ERROR="LINK_WALLET_DUPLICATE_NONCE_ERROR",f.LINK_WALLET_GENERIC_ERROR="LINK_WALLET_GENERIC_ERROR",f.SERVICE_UNAVAILABLE_ERROR="SERVICE_UNAVAILABLE_ERROR",f))(H||{});function ur(r){return "code"in r&&"message"in r}var E=class extends Error{type;constructor(e,t){super(e),this.type=t;}},T=async(r,e)=>{try{return await r()}catch(t){let n;throw t instanceof E&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new E(t.message,t.type):(isAxiosError(t)&&t.response?.data&&ur(t.response.data)?n=t.response.data.message:n=t.message,new E(n,e))}};l();a();var me=(e=>(e.ZKEVM="zkEvm",e))(me||{}),X=r=>!!r.zkEvm,ge=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(ge||{}),ee=(t=>(t.LOGGED_OUT="loggedOut",t.LOGGED_IN="loggedIn",t))(ee||{});l();a();l();a();var I="passport-overlay",U="passport-overlay-contents",V=`${I}-close`,G=`${I}-try-again`,he=`
8
8
  <svg
9
9
  viewBox="0 0 20 20"
10
10
  fill="none"
@@ -215,7 +215,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
215
215
  </svg>
216
216
  `;l();a();var pr=()=>`
217
217
  <button
218
- id="${F}"
218
+ id="${V}"
219
219
  style="
220
220
  background: #f3f3f326 !important;
221
221
  border: none !important;
@@ -235,7 +235,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
235
235
  </button>
236
236
  `,Ee=()=>`
237
237
  <button
238
- id="${V}"
238
+ id="${G}"
239
239
  style="
240
240
  margin-top: 27px !important;
241
241
  color: #f3f3f3 !important;
@@ -250,7 +250,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
250
250
  >
251
251
  Try again
252
252
  </button>
253
- `,mr=()=>`
253
+ `,fr=()=>`
254
254
  ${te}
255
255
  <div
256
256
  style="
@@ -275,7 +275,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
275
275
  browser settings.
276
276
  </p>
277
277
  ${Ee()}
278
- `,fr=()=>`
278
+ `,mr=()=>`
279
279
  ${te}
280
280
  <p style="
281
281
  color: #b6b6b6 !important;
@@ -288,7 +288,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
288
288
  ${Ee()}
289
289
  `,_e=r=>`
290
290
  <div
291
- id="${b}"
291
+ id="${I}"
292
292
  style="
293
293
  position: fixed !important;
294
294
  top: 0 !important;
@@ -313,7 +313,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
313
313
  >
314
314
  ${pr()}
315
315
  <div
316
- id="${M}"
316
+ id="${U}"
317
317
  style="
318
318
  display: flex !important;
319
319
  flex-direction: column !important;
@@ -326,7 +326,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
326
326
  </div>
327
327
  `,Ce=()=>`
328
328
  <div
329
- id="${b}"
329
+ id="${I}"
330
330
  style="
331
331
  position: fixed;
332
332
  top: 0;
@@ -344,7 +344,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
344
344
  "
345
345
  >
346
346
  <div
347
- id="${M}"
347
+ id="${U}"
348
348
  style="
349
349
  display: flex;
350
350
  flex-direction: column;
@@ -353,7 +353,7 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
353
353
  "
354
354
  />
355
355
  </div>
356
- `;function G({id:r,href:e,rel:t,crossOrigin:n}){let i=`${b}-${r}`;if(!document.getElementById(i)){let o=document.createElement("link");o.id=i,o.href=e,t&&(o.rel=t),n&&(o.crossOrigin=n),document.head.appendChild(o);}}var ye=()=>_e(mr()),Oe=()=>_e(fr());var U=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(e,t=!1){this.disableBlockedPopupOverlay=e.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=e.disableGenericPopupOverlay||!1,this.isBlockedOverlay=t;}append(e,t){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(e),this.updateCloseButton(t));}update(e){this.updateTryAgainButton(e);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){G({id:"link-googleapis",href:"https://fonts.googleapis.com"}),G({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),G({id:"link-roboto",href:"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap",rel:"stylesheet"});let t=document.createElement("div");t.innerHTML=this.isBlockedOverlay?ye():Oe(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(V);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(F);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};l();a();var B=class{storage;constructor(e,t){this.storage=gr.createInstance({name:e,driver:t});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(e){return this.storage.getItem(e)}key(e){return this.storage.key(e)}async removeItem(e){await this.storage.removeItem(e);}async setItem(e,t){await this.storage.setItem(e,t);}};var Pr=500,br={headers:{"Content-Type":"application/x-www-form-urlencoded"}},wr="/v2/logout",Ir="/im-logged-out",Ar="/authorize",xr=r=>r?Ir:wr,kr=r=>{let{authenticationDomain:e,oidcConfiguration:t}=r,n;r.crossSdkBridgeEnabled?n=new B("ImmutableSDKPassport",gr.INDEXEDDB):typeof window<"u"?n=window.localStorage:n=new InMemoryWebStorage;let i=new WebStorageStateStore({store:n}),o=new URL(xr(r.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return o.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&o.searchParams.set("returnTo",t.logoutRedirectUri),{authority:e,redirect_uri:t.redirectUri,popup_redirect_uri:t.popupRedirectUri||t.redirectUri,client_id:t.clientId,metadata:{authorization_endpoint:`${e}/authorize`,token_endpoint:`${e}/oauth/token`,userinfo_endpoint:`${e}/userinfo`,end_session_endpoint:o.toString(),revocation_endpoint:`${e}/oauth/revoke`},automaticSilentRenew:!1,scope:t.scope,userStore:i,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function re(r){return btoa(String.fromCharCode(...new Uint8Array(r))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Mr(r){let t=new TextEncoder().encode(r);return await window.crypto.subtle.digest("SHA-256",t)}var w=class r{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new UserManager(kr(e)),this.deviceCredentialsManager=new x,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=Re(e.id_token)?.passport);let n={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.imx_eth_address&&(n.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(n.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),n};static mapDeviceTokenResponseToOidcUser=e=>{let t=Re(e.id_token);return new User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let n={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:""};if(e){if(e.directLoginMethod==="email"){let i=e.email;i&&(n.direct=e.directLoginMethod,n.email=i);}else n.direct=e.directLoginMethod;e.marketingConsentStatus&&(n.marketingConsent=e.marketingConsentStatus);}return t&&(n.im_passport_trace_id=t),n}async loginWithRedirect(e){return await this.userManager.clearStaleState(),L(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR")}async login(e){return L(async()=>{let t,n;if(e)t=e;else if(!this.config.popupOverlayOptions?.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:s,...d}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt();t=d,n=s;}let i=window.crypto.randomUUID(),o=async()=>{let s=this.buildExtraQueryParams(t,n),d=this.userManager.signinPopup({extraQueryParams:s,popupWindowFeatures:{width:410,height:450},popupWindowTarget:i}),f=window.open("",i);if(f){let _=new Promise((u,y)=>{let oe=setInterval(()=>{f.closed&&(clearInterval(oe),y(new Error("Popup closed by user")));},Pr);d.finally(()=>{clearInterval(oe),f.close();});});return Promise.race([d,_])}return d};return new Promise((s,d)=>{o().then(f=>{s(r.mapOidcUserToDomainModel(f));}).catch(f=>{if(!(f instanceof Error)||f.message!=="Attempted to navigate on a disposed window"){d(f);return}let _=!1,u=new U(this.config.popupOverlayOptions||{},!0);u.append(async()=>{try{if(_)window.open("",i);else {_=!0;let y=await o();u.remove(),s(r.mapOidcUserToDomainModel(y));}}catch(y){u.remove(),d(y);}},()=>{u.remove(),d(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){k.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let n=`oidc.${new URLSearchParams(window.location.search).get("state")}`,i=localStorage.getItem(n);return JSON.parse(i||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return L(async()=>{if(r.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return r.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let n=re(window.crypto.getRandomValues(new Uint8Array(32))),i=re(await Mr(n)),o=re(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:d,audience:f,clientId:_}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:o,verifier:n});let u=new URL(Ar,this.config.authenticationDomain);if(u.searchParams.set("response_type","code"),u.searchParams.set("code_challenge",i),u.searchParams.set("code_challenge_method","S256"),u.searchParams.set("client_id",_),u.searchParams.set("redirect_uri",s),u.searchParams.set("state",o),d&&u.searchParams.set("scope",d),f&&u.searchParams.set("audience",f),e){if(e.directLoginMethod==="email"){let y=e.email;y&&(u.searchParams.set("direct",e.directLoginMethod),u.searchParams.set("email",y));}else u.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&u.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&u.searchParams.set("im_passport_trace_id",t),u.toString()}async loginWithPKCEFlowCallback(e,t){return L(async()=>{let n=this.deviceCredentialsManager.getPKCEData();if(!n)throw new Error("No code verifier or state for PKCE");if(t!==n.state)throw new Error("Provided state does not match stored state");let i=await this.getPKCEToken(e,n.verifier),o=r.mapDeviceTokenResponseToOidcUser(i),s=r.mapOidcUserToDomainModel(o);return await this.userManager.storeUser(o),s},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await Or.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},br)).data}async storeTokens(e){return L(async()=>{let t=r.mapDeviceTokenResponseToOidcUser(e),n=r.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),n},"AUTHENTICATION_ERROR")}async logout(){return L(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(k.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{k.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(k.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let n=await this.userManager.signinSilent();if(n){e(r.mapOidcUserToDomainModel(n));return}e(null);}catch(n){let i="AUTHENTICATION_ERROR",o="Failed to refresh token",s=!0;if(n instanceof ErrorTimeout?(i="SILENT_LOGIN_ERROR",o=`${o}: ${n.message}`,s=!1):n instanceof ErrorResponse?(i="NOT_LOGGED_IN_ERROR",o=`${o}: ${n.message||n.error_description}`):n instanceof Error?o=`${o}: ${n.message}`:typeof n=="string"&&(o=`${o}: ${n}`),s)try{await this.userManager.removeUser();}catch(d){d instanceof Error&&(o=`${o}: Failed to remove user: ${d.message}`);}t(new v(o,i));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let n=await this.refreshingPromise;return n&&e(n)?n:null}let t=await this.userManager.getUser();if(!t)return null;if(!me(t)){let n=r.mapOidcUserToDomainModel(t);if(n&&e(n))return n}if(t.refresh_token){let n=await this.refreshTokenAndUpdatePromise();if(n&&e(n))return n}return null}async getUserZkEvm(){let e=await this.getUser(Q);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}async getUserImx(){let e=await this.getUser(J);if(!e)throw new Error("Failed to obtain a User with the required IMX attributes");return e}};l();a();var Ur=(r,e,t)=>{let n=e.map(i=>!r[i]&&i).filter(i=>i).join(", ");if(n!==""){let i=`${n} cannot be null`;throw new v(i,"INVALID_CONFIGURATION")}},N=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:e,passportDomain:t,crossSdkBridgeEnabled:n,popupOverlayOptions:i,...o}){Ur(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.crossSdkBridgeEnabled=n||!1,this.popupOverlayOptions=i,this.authenticationDomain=e||"https://auth.immutable.com",this.passportDomain=t||"https://passport.immutable.com";}};l();a();l();a();var Le="im_passport_embedded_login_prompt";l();a();var E=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let n=document.createElement("div");n.innerHTML=Ce(),document.body.insertAdjacentElement("beforeend",n);let i=document.querySelector(`#${M}`);i&&i.appendChild(e),n.addEventListener("click",t),this.overlay=n;}}};var Sr=660,Hr=440,Fr="16px",Te="passport-embedded-login-keyframes",Pe="passport-embedded-login-iframe",D=class r{config;constructor(e){this.config=e;}getHref=()=>`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${getDetail(Detail.RUNTIME_ID)}`;static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(Te))return;let e=document.createElement("style");e.id=Te,e.textContent=`
356
+ `;function B({id:r,href:e,rel:t,crossOrigin:n}){let i=`${I}-${r}`;if(!document.getElementById(i)){let o=document.createElement("link");o.id=i,o.href=e,t&&(o.rel=t),n&&(o.crossOrigin=n),document.head.appendChild(o);}}var ye=()=>_e(fr()),Oe=()=>_e(mr());var N=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(e,t=!1){this.disableBlockedPopupOverlay=e.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=e.disableGenericPopupOverlay||!1,this.isBlockedOverlay=t;}append(e,t){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(e),this.updateCloseButton(t));}update(e){this.updateTryAgainButton(e);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){B({id:"link-googleapis",href:"https://fonts.googleapis.com"}),B({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),B({id:"link-roboto",href:"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap",rel:"stylesheet"});let t=document.createElement("div");t.innerHTML=this.isBlockedOverlay?ye():Oe(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(G);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(V);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};l();a();var K=class{storage;constructor(e,t){this.storage=gr.createInstance({name:e,driver:t});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(e){return this.storage.getItem(e)}key(e){return this.storage.key(e)}async removeItem(e){await this.storage.removeItem(e);}async setItem(e,t){await this.storage.setItem(e,t);}};var Pr=500,wr={headers:{"Content-Type":"application/x-www-form-urlencoded"}},br="/v2/logout",Ir="/im-logged-out",Ar="/authorize",kr=r=>r?Ir:br,Mr=r=>{let{authenticationDomain:e,oidcConfiguration:t}=r,n;r.crossSdkBridgeEnabled?n=new K("ImmutableSDKPassport",gr.INDEXEDDB):typeof window<"u"?n=window.localStorage:n=new InMemoryWebStorage;let i=new WebStorageStateStore({store:n}),o=new URL(kr(r.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return o.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&o.searchParams.set("returnTo",t.logoutRedirectUri),{authority:e,redirect_uri:t.redirectUri,popup_redirect_uri:t.popupRedirectUri||t.redirectUri,client_id:t.clientId,metadata:{authorization_endpoint:`${e}/authorize`,token_endpoint:`${e}/oauth/token`,userinfo_endpoint:`${e}/userinfo`,end_session_endpoint:o.toString(),revocation_endpoint:`${e}/oauth/revoke`},automaticSilentRenew:!1,scope:t.scope,userStore:i,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function re(r){return btoa(String.fromCharCode(...new Uint8Array(r))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function xr(r){let t=new TextEncoder().encode(r);return await window.crypto.subtle.digest("SHA-256",t)}var A=class r{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new UserManager(Mr(e)),this.deviceCredentialsManager=new x,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=Re(e.id_token)?.passport);let n={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.zkevm_eth_address&&t?.zkevm_user_admin_address&&(n.zkEvm={ethAddress:t.zkevm_eth_address,userAdminAddress:t.zkevm_user_admin_address}),n};static mapDeviceTokenResponseToOidcUser=e=>{let t=Re(e.id_token);return new User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let n={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:""};if(e){if(e.directLoginMethod==="email"){let i=e.email;i&&(n.direct=e.directLoginMethod,n.email=i);}else n.direct=e.directLoginMethod;e.marketingConsentStatus&&(n.marketingConsent=e.marketingConsentStatus);}return t&&(n.im_passport_trace_id=t),n}async getClientId(){return this.config.oidcConfiguration.clientId}async loginWithRedirect(e){return await this.userManager.clearStaleState(),T(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR")}async login(e){return T(async()=>{let t,n;if(e)t=e;else if(!this.config.popupOverlayOptions?.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:s,...d}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt();t=d,n=s;}let i=window.crypto.randomUUID(),o=async()=>{let s=this.buildExtraQueryParams(t,n),d=this.userManager.signinPopup({extraQueryParams:s,popupWindowFeatures:{width:410,height:450},popupWindowTarget:i}),g=window.open("",i);if(g){let C=new Promise((p,O)=>{let oe=setInterval(()=>{g.closed&&(clearInterval(oe),O(new Error("Popup closed by user")));},Pr);d.finally(()=>{clearInterval(oe),g.close();});});return Promise.race([d,C])}return d};return new Promise((s,d)=>{o().then(g=>{s(r.mapOidcUserToDomainModel(g));}).catch(g=>{if(!(g instanceof Error)||g.message!=="Attempted to navigate on a disposed window"){d(g);return}let C=!1,p=new N(this.config.popupOverlayOptions||{},!0);p.append(async()=>{try{if(C)window.open("",i);else {C=!0;let O=await o();p.remove(),s(r.mapOidcUserToDomainModel(O));}}catch(O){p.remove(),d(O);}},()=>{p.remove(),d(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){w.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let n=`oidc.${new URLSearchParams(window.location.search).get("state")}`,i=localStorage.getItem(n);return JSON.parse(i||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return T(async()=>{if(r.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return r.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let n=re(window.crypto.getRandomValues(new Uint8Array(32))),i=re(await xr(n)),o=re(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:d,audience:g,clientId:C}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:o,verifier:n});let p=new URL(Ar,this.config.authenticationDomain);if(p.searchParams.set("response_type","code"),p.searchParams.set("code_challenge",i),p.searchParams.set("code_challenge_method","S256"),p.searchParams.set("client_id",C),p.searchParams.set("redirect_uri",s),p.searchParams.set("state",o),d&&p.searchParams.set("scope",d),g&&p.searchParams.set("audience",g),e){if(e.directLoginMethod==="email"){let O=e.email;O&&(p.searchParams.set("direct",e.directLoginMethod),p.searchParams.set("email",O));}else p.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&p.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&p.searchParams.set("im_passport_trace_id",t),p.toString()}async loginWithPKCEFlowCallback(e,t){return T(async()=>{let n=this.deviceCredentialsManager.getPKCEData();if(!n)throw new Error("No code verifier or state for PKCE");if(t!==n.state)throw new Error("Provided state does not match stored state");let i=await this.getPKCEToken(e,n.verifier),o=r.mapDeviceTokenResponseToOidcUser(i),s=r.mapOidcUserToDomainModel(o);return await this.userManager.storeUser(o),s},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await Or.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},wr)).data}async storeTokens(e){return T(async()=>{let t=r.mapDeviceTokenResponseToOidcUser(e),n=r.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),n},"AUTHENTICATION_ERROR")}async logout(){return T(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(w.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{w.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(w.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let n=await this.userManager.signinSilent();if(n){e(r.mapOidcUserToDomainModel(n));return}e(null);}catch(n){let i="AUTHENTICATION_ERROR",o="Failed to refresh token",s=!0;if(n instanceof ErrorTimeout?(i="SILENT_LOGIN_ERROR",o=`${o}: ${n.message}`,s=!1):n instanceof ErrorResponse?(i="NOT_LOGGED_IN_ERROR",o=`${o}: ${n.message||n.error_description}`):n instanceof Error?o=`${o}: ${n.message}`:typeof n=="string"&&(o=`${o}: ${n}`),s)try{await this.userManager.removeUser();}catch(d){d instanceof Error&&(o=`${o}: Failed to remove user: ${d.message}`);}t(new E(o,i));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let n=await this.refreshingPromise;return n&&e(n)?n:null}let t=await this.userManager.getUser();if(!t)return null;if(!fe(t)){let n=r.mapOidcUserToDomainModel(t);if(n&&e(n))return n}if(t.refresh_token){let n=await this.refreshTokenAndUpdatePromise();if(n&&e(n))return n}return null}async getUserZkEvm(){let e=await this.getUser(X);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}};l();a();var Ur=(r,e,t)=>{let n=e.map(i=>!r[i]&&i).filter(i=>i).join(", ");if(n!==""){let i=`${n} cannot be null`;throw new E(i,"INVALID_CONFIGURATION")}},D=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:e,passportDomain:t,crossSdkBridgeEnabled:n,popupOverlayOptions:i,...o}){Ur(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.crossSdkBridgeEnabled=n||!1,this.popupOverlayOptions=i,this.authenticationDomain=e||"https://auth.immutable.com",this.passportDomain=t||"https://passport.immutable.com";}};l();a();l();a();var Le="im_passport_embedded_login_prompt";l();a();var _=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let n=document.createElement("div");n.innerHTML=Ce(),document.body.insertAdjacentElement("beforeend",n);let i=document.querySelector(`#${U}`);i&&i.appendChild(e),n.addEventListener("click",t),this.overlay=n;}}};var Sr=660,Fr=440,Hr="16px",Te="passport-embedded-login-keyframes",Pe="passport-embedded-login-iframe",S=class r{config;constructor(e){this.config=e;}getHref=()=>`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${getDetail(Detail.RUNTIME_ID)}`;static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(Te))return;let e=document.createElement("style");e.id=Te,e.textContent=`
357
357
  @keyframes passportEmbeddedLoginPromptPopBounceIn {
358
358
  0% {
359
359
  opacity: 0.5;
@@ -386,6 +386,6 @@ var Fe=Object.create;var se=Object.defineProperty;var Ve=Object.getOwnPropertyDe
386
386
  opacity: 1;
387
387
  }
388
388
  }
389
- `,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=Pe,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${Sr}px`,e.style.maxWidth=`${Hr}px`,e.style.borderRadius=Fr,e.style.opacity="0",e.style.transform="scale(0.6)",e.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",r.appendIFrameStylesIfNeeded(),e};displayEmbeddedLoginPrompt(){return new Promise((e,t)=>{let n=this.getEmbeddedLoginIFrame(),i=({data:o,origin:s})=>{if(!(s!==this.config.authenticationDomain||o.eventType!==Le))switch(o.messageType){case"login_method_selected":{let d=o.payload;window.removeEventListener("message",i),E.remove(),e(d);break}case"login_prompt_error":{window.removeEventListener("message",i),E.remove(),t(new Error("Error during embedded login prompt",{cause:o.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",i),E.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",i),E.remove(),t(new Error(`Unsupported message type: ${o.messageType}`));break}};window.addEventListener("message",i),E.appendOverlay(n,()=>{window.removeEventListener("message",i),E.remove(),t(new Error("Popup closed by user"));});})}};l();a();var He=$e(Se()),A=class{emitter=new He.EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var ie=class{authManager;config;eventEmitter;constructor(e){this.config=new N(e);let t=new D(this.config);this.authManager=new w(this.config,t),this.eventEmitter=new A,track("passport","initialise");}async login(e){return this.authManager.login(e)}async loginWithRedirect(e){await this.authManager.loginWithRedirect(e);}async loginWithOptions(e){let{useCachedSession:t=!1,useSilentLogin:n}=e||{},i=null;try{i=await this.authManager.getUser();}catch(o){if(t)throw o}if(!i&&n&&(i=await this.authManager.forceUserRefresh()),!i&&!t){if(e?.useRedirectFlow)return await this.authManager.loginWithRedirect(e?.directLoginOptions),null;i=await this.authManager.login(e?.directLoginOptions);}return i&&(this.eventEmitter.emit("loggedIn",i),identify({passportId:i.profile.sub})),i}async loginCallback(){let e=await this.authManager.loginCallback();if(!e)throw new Error("Login callback failed - no user returned");return this.eventEmitter.emit("loggedIn",e),identify({passportId:e.profile.sub}),e}async logout(){await this.authManager.logout(),this.eventEmitter.emit("loggedOut");}async getUser(){return this.authManager.getUser()}async getIdToken(){return (await this.authManager.getUser())?.idToken}async getAccessToken(){return (await this.authManager.getUser())?.accessToken}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.authManager.forceUserRefresh()}async loginWithPKCEFlow(e,t){return this.authManager.getPKCEAuthorizationUrl(e,t)}async loginWithPKCEFlowCallback(e,t){let n=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.eventEmitter.emit("loggedIn",n),identify({passportId:n.profile.sub}),n}async storeTokens(e){let t=await this.authManager.storeTokens(e);return this.eventEmitter.emit("loggedIn",t),identify({passportId:t.profile.sub}),t}async getLogoutUrl(){return await this.authManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0}async logoutSilentCallback(e){return this.authManager.logoutSilentCallback(e)}getAuthManager(){return this.authManager}getConfig(){return this.config}};
389
+ `,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=Pe,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${Sr}px`,e.style.maxWidth=`${Fr}px`,e.style.borderRadius=Hr,e.style.opacity="0",e.style.transform="scale(0.6)",e.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",r.appendIFrameStylesIfNeeded(),e};displayEmbeddedLoginPrompt(){return new Promise((e,t)=>{let n=this.getEmbeddedLoginIFrame(),i=({data:o,origin:s})=>{if(!(s!==this.config.authenticationDomain||o.eventType!==Le))switch(o.messageType){case"login_method_selected":{let d=o.payload;window.removeEventListener("message",i),_.remove(),e(d);break}case"login_prompt_error":{window.removeEventListener("message",i),_.remove(),t(new Error("Error during embedded login prompt",{cause:o.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",i),_.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",i),_.remove(),t(new Error(`Unsupported message type: ${o.messageType}`));break}};window.addEventListener("message",i),_.appendOverlay(n,()=>{window.removeEventListener("message",i),_.remove(),t(new Error("Popup closed by user"));});})}};l();a();var Fe=$e(Se()),M=class{emitter=new Fe.EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};l();a();var v=async(r,e,t=!0,n=!0)=>{let i=trackFlow("passport",e,t);try{return await r(i)}catch(o){throw o instanceof Error?trackError("passport",e,o,{flowId:i.details.flowId}):i.addEvent("errored"),o}finally{n&&i.addEvent("End");}};var ie=class{authManager;config;eventEmitter;constructor(e){this.config=new D(e);let t=new S(this.config);this.authManager=new A(this.config,t),this.eventEmitter=new M,track("passport","initialise");}async login(e){return v(async()=>{let{useCachedSession:t=!1,useSilentLogin:n}=e||{},i=null;try{i=await this.authManager.getUser();}catch(o){if(o instanceof Error&&!o.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",o),t)throw o;w.warn("Failed to retrieve a cached user session",o);}if(!i&&n)i=await this.authManager.forceUserRefresh();else if(!i&&!t){if(e?.useRedirectFlow)return await this.authManager.loginWithRedirect(e?.directLoginOptions),null;i=await this.authManager.login(e?.directLoginOptions);}return i&&(this.eventEmitter.emit("loggedIn",i),identify({passportId:i.profile.sub})),i},"login")}async loginWithRedirect(e){await this.authManager.loginWithRedirect(e);}async loginCallback(){return v(async()=>{let e=await this.authManager.loginCallback();if(!e)throw new Error("Login callback failed - no user returned");return this.eventEmitter.emit("loggedIn",e),identify({passportId:e.profile.sub}),e},"loginCallback")}async logout(){await v(async()=>{await this.authManager.logout(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return v(async()=>this.authManager.getUser(),"getUserInfo",!1)}async getIdToken(){return v(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return v(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.authManager.forceUserRefresh()}async loginWithPKCEFlow(e,t){return v(async()=>this.authManager.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return v(async()=>{let n=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.eventEmitter.emit("loggedIn",n),identify({passportId:n.profile.sub}),n},"loginWithPKCEFlowCallback")}async storeTokens(e){return v(async()=>{let t=await this.authManager.storeTokens(e);return this.eventEmitter.emit("loggedIn",t),identify({passportId:t.profile.sub}),t},"storeTokens")}async getLogoutUrl(){return v(async()=>(await this.authManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0),"getLogoutUrl")}async logoutSilentCallback(e){return v(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback")}getAuthManager(){return this.authManager}getConfig(){return this.config}};
390
390
 
391
- export { ie as Auth, N as AuthConfiguration, ee as AuthEvents, w as AuthManager, ge as MarketingConsentStatus, v as PassportError, H as PassportErrorType, fe as RollupType, A as TypedEventEmitter, J as isUserImx, Q as isUserZkEvm, L as withPassportError };
391
+ export { ie as Auth, D as AuthConfiguration, ee as AuthEvents, A as AuthManager, ge as MarketingConsentStatus, E as PassportError, H as PassportErrorType, me as RollupType, M as TypedEventEmitter, X as isUserZkEvm, T as withPassportError };
@@ -4,16 +4,16 @@ var oidcClientTs = require('oidc-client-ts');
4
4
  var Ee = require('axios');
5
5
  var q = require('jwt-decode');
6
6
  var metrics = require('@imtbl/metrics');
7
- var pe = require('localforage');
7
+ var ce = require('localforage');
8
8
  var events = require('events');
9
9
 
10
10
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
11
 
12
12
  var Ee__default = /*#__PURE__*/_interopDefault(Ee);
13
13
  var q__default = /*#__PURE__*/_interopDefault(q);
14
- var pe__default = /*#__PURE__*/_interopDefault(pe);
14
+ var ce__default = /*#__PURE__*/_interopDefault(ce);
15
15
 
16
- var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q__default.default(e).exp??0,i=Date.now()/1e3+re;return r>i}catch{return !1}}savePKCEData(e){localStorage.setItem(H,e.state),localStorage.setItem(F,e.verifier);}getPKCEData(){let e=localStorage.getItem(H),t=localStorage.getItem(F);return e&&t?{state:e,verifier:t}:null}};var ie=(...o)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...o);},R={warn:ie};function V(o){try{let e=q__default.default(o),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function G(o){let{id_token:e,access_token:t}=o;return !t||!e?!0:V(t)||V(e)}var L=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION="INVALID_CONFIGURATION",s.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",s.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",s.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",s.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",s.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",s.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",s.LOGOUT_ERROR="LOGOUT_ERROR",s.TRANSFER_ERROR="TRANSFER_ERROR",s.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",s.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",s.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",s.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",s.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR",s.LINK_WALLET_ALREADY_LINKED_ERROR="LINK_WALLET_ALREADY_LINKED_ERROR",s.LINK_WALLET_MAX_WALLETS_LINKED_ERROR="LINK_WALLET_MAX_WALLETS_LINKED_ERROR",s.LINK_WALLET_VALIDATION_ERROR="LINK_WALLET_VALIDATION_ERROR",s.LINK_WALLET_DUPLICATE_NONCE_ERROR="LINK_WALLET_DUPLICATE_NONCE_ERROR",s.LINK_WALLET_GENERIC_ERROR="LINK_WALLET_GENERIC_ERROR",s.SERVICE_UNAVAILABLE_ERROR="SERVICE_UNAVAILABLE_ERROR",s))(L||{});function se(o){return "code"in o&&"message"in o}var c=class extends Error{type;constructor(e,t){super(e),this.type=t;}},g=async(o,e)=>{try{return await o()}catch(t){let r;throw t instanceof c&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new c(t.message,t.type):(Ee.isAxiosError(t)&&t.response?.data&&se(t.response.data)?r=t.response.data.message:r=t.message,new c(r,e))}};var B=(t=>(t.IMX="imx",t.ZKEVM="zkEvm",t))(B||{}),w=o=>!!o.zkEvm,U=o=>!!o.imx,Z=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(Z||{}),M=(t=>(t.LOGGED_OUT="loggedOut",t.LOGGED_IN="loggedIn",t))(M||{});var h="passport-overlay",O="passport-overlay-contents",P=`${h}-close`,I=`${h}-try-again`,K=`
16
+ var F="pkce_state",H="pkce_verifier",re=3600,O=class{isTokenValid(e){try{let r=q__default.default(e).exp??0,o=Date.now()/1e3+re;return r>o}catch{return !1}}savePKCEData(e){localStorage.setItem(F,e.state),localStorage.setItem(H,e.verifier);}getPKCEData(){let e=localStorage.getItem(F),t=localStorage.getItem(H);return e&&t?{state:e,verifier:t}:null}};var oe=(...i)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...i);},h={warn:oe};function V(i){try{let e=q__default.default(i),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function G(i){let{id_token:e,access_token:t}=i;return !t||!e?!0:V(t)||V(e)}var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION="INVALID_CONFIGURATION",s.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",s.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",s.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",s.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",s.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",s.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",s.LOGOUT_ERROR="LOGOUT_ERROR",s.TRANSFER_ERROR="TRANSFER_ERROR",s.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",s.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",s.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",s.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",s.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR",s.LINK_WALLET_ALREADY_LINKED_ERROR="LINK_WALLET_ALREADY_LINKED_ERROR",s.LINK_WALLET_MAX_WALLETS_LINKED_ERROR="LINK_WALLET_MAX_WALLETS_LINKED_ERROR",s.LINK_WALLET_VALIDATION_ERROR="LINK_WALLET_VALIDATION_ERROR",s.LINK_WALLET_DUPLICATE_NONCE_ERROR="LINK_WALLET_DUPLICATE_NONCE_ERROR",s.LINK_WALLET_GENERIC_ERROR="LINK_WALLET_GENERIC_ERROR",s.SERVICE_UNAVAILABLE_ERROR="SERVICE_UNAVAILABLE_ERROR",s))(P||{});function se(i){return "code"in i&&"message"in i}var u=class extends Error{type;constructor(e,t){super(e),this.type=t;}},f=async(i,e)=>{try{return await i()}catch(t){let r;throw t instanceof u&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new u(t.message,t.type):(Ee.isAxiosError(t)&&t.response?.data&&se(t.response.data)?r=t.response.data.message:r=t.message,new u(r,e))}};var B=(e=>(e.ZKEVM="zkEvm",e))(B||{}),M=i=>!!i.zkEvm,K=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(K||{}),U=(t=>(t.LOGGED_OUT="loggedOut",t.LOGGED_IN="loggedIn",t))(U||{});var C="passport-overlay",y="passport-overlay-contents",I=`${C}-close`,A=`${C}-try-again`,Z=`
17
17
  <svg
18
18
  viewBox="0 0 20 20"
19
19
  fill="none"
@@ -224,7 +224,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
224
224
  </svg>
225
225
  `;var ae=()=>`
226
226
  <button
227
- id="${P}"
227
+ id="${I}"
228
228
  style="
229
229
  background: #f3f3f326 !important;
230
230
  border: none !important;
@@ -240,11 +240,11 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
240
240
  justify-content: center !important;
241
241
  "
242
242
  >
243
- ${K}
243
+ ${Z}
244
244
  </button>
245
245
  `,W=()=>`
246
246
  <button
247
- id="${I}"
247
+ id="${A}"
248
248
  style="
249
249
  margin-top: 27px !important;
250
250
  color: #f3f3f3 !important;
@@ -259,7 +259,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
259
259
  >
260
260
  Try again
261
261
  </button>
262
- `,de=()=>`
262
+ `,le=()=>`
263
263
  ${x}
264
264
  <div
265
265
  style="
@@ -284,7 +284,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
284
284
  browser settings.
285
285
  </p>
286
286
  ${W()}
287
- `,le=()=>`
287
+ `,de=()=>`
288
288
  ${x}
289
289
  <p style="
290
290
  color: #b6b6b6 !important;
@@ -295,9 +295,9 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
295
295
  Secure pop-up not showing?<br />We'll help you re-launch
296
296
  </p>
297
297
  ${W()}
298
- `,Y=o=>`
298
+ `,Y=i=>`
299
299
  <div
300
- id="${h}"
300
+ id="${C}"
301
301
  style="
302
302
  position: fixed !important;
303
303
  top: 0 !important;
@@ -322,7 +322,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
322
322
  >
323
323
  ${ae()}
324
324
  <div
325
- id="${O}"
325
+ id="${y}"
326
326
  style="
327
327
  display: flex !important;
328
328
  flex-direction: column !important;
@@ -330,12 +330,12 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
330
330
  max-width: 400px !important;
331
331
  "
332
332
  >
333
- ${o??""}
333
+ ${i??""}
334
334
  </div>
335
335
  </div>
336
336
  `,z=()=>`
337
337
  <div
338
- id="${h}"
338
+ id="${C}"
339
339
  style="
340
340
  position: fixed;
341
341
  top: 0;
@@ -353,7 +353,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
353
353
  "
354
354
  >
355
355
  <div
356
- id="${O}"
356
+ id="${y}"
357
357
  style="
358
358
  display: flex;
359
359
  flex-direction: column;
@@ -362,7 +362,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
362
362
  "
363
363
  />
364
364
  </div>
365
- `;function A({id:o,href:e,rel:t,crossOrigin:r}){let i=`${h}-${o}`;if(!document.getElementById(i)){let n=document.createElement("link");n.id=i,n.href=e,t&&(n.rel=t),r&&(n.crossOrigin=r),document.head.appendChild(n);}}var X=()=>Y(de()),j=()=>Y(le());var y=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(e,t=!1){this.disableBlockedPopupOverlay=e.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=e.disableGenericPopupOverlay||!1,this.isBlockedOverlay=t;}append(e,t){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(e),this.updateCloseButton(t));}update(e){this.updateTryAgainButton(e);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){A({id:"link-googleapis",href:"https://fonts.googleapis.com"}),A({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),A({id:"link-roboto",href:"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap",rel:"stylesheet"});let t=document.createElement("div");t.innerHTML=this.isBlockedOverlay?X():j(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(I);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(P);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var b=class{storage;constructor(e,t){this.storage=pe__default.default.createInstance({name:e,driver:t});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(e){return this.storage.getItem(e)}key(e){return this.storage.key(e)}async removeItem(e){await this.storage.removeItem(e);}async setItem(e,t){await this.storage.setItem(e,t);}};var Oe=500,ye={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ve="/v2/logout",Te="/im-logged-out",Le="/authorize",Pe=o=>o?Te:ve,Ie=o=>{let{authenticationDomain:e,oidcConfiguration:t}=o,r;o.crossSdkBridgeEnabled?r=new b("ImmutableSDKPassport",pe__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let i=new oidcClientTs.WebStorageStateStore({store:r}),n=new URL(Pe(o.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return n.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&n.searchParams.set("returnTo",t.logoutRedirectUri),{authority:e,redirect_uri:t.redirectUri,popup_redirect_uri:t.popupRedirectUri||t.redirectUri,client_id:t.clientId,metadata:{authorization_endpoint:`${e}/authorize`,token_endpoint:`${e}/oauth/token`,userinfo_endpoint:`${e}/userinfo`,end_session_endpoint:n.toString(),revocation_endpoint:`${e}/oauth/revoke`},automaticSilentRenew:!1,scope:t.scope,userStore:i,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function D(o){return btoa(String.fromCharCode(...new Uint8Array(o))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Ae(o){let t=new TextEncoder().encode(o);return await window.crypto.subtle.digest("SHA-256",t)}var E=class o{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new oidcClientTs.UserManager(Ie(e)),this.deviceCredentialsManager=new C,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=q__default.default(e.id_token)?.passport);let r={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.imx_eth_address&&(r.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(r.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),r};static mapDeviceTokenResponseToOidcUser=e=>{let t=q__default.default(e.id_token);return new oidcClientTs.User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:metrics.getDetail(metrics.Detail.RUNTIME_ID)||"",third_party_a_id:""};if(e){if(e.directLoginMethod==="email"){let i=e.email;i&&(r.direct=e.directLoginMethod,r.email=i);}else r.direct=e.directLoginMethod;e.marketingConsentStatus&&(r.marketingConsent=e.marketingConsentStatus);}return t&&(r.im_passport_trace_id=t),r}async loginWithRedirect(e){return await this.userManager.clearStaleState(),g(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR")}async login(e){return g(async()=>{let t,r;if(e)t=e;else if(!this.config.popupOverlayOptions?.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:l,...d}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt();t=d,r=l;}let i=window.crypto.randomUUID(),n=async()=>{let l=this.buildExtraQueryParams(t,r),d=this.userManager.signinPopup({extraQueryParams:l,popupWindowFeatures:{width:410,height:450},popupWindowTarget:i}),p=window.open("",i);if(p){let f=new Promise((a,u)=>{let S=setInterval(()=>{p.closed&&(clearInterval(S),u(new Error("Popup closed by user")));},Oe);d.finally(()=>{clearInterval(S),p.close();});});return Promise.race([d,f])}return d};return new Promise((l,d)=>{n().then(p=>{l(o.mapOidcUserToDomainModel(p));}).catch(p=>{if(!(p instanceof Error)||p.message!=="Attempted to navigate on a disposed window"){d(p);return}let f=!1,a=new y(this.config.popupOverlayOptions||{},!0);a.append(async()=>{try{if(f)window.open("",i);else {f=!0;let u=await n();a.remove(),l(o.mapOidcUserToDomainModel(u));}}catch(u){a.remove(),d(u);}},()=>{a.remove(),d(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){R.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let r=`oidc.${new URLSearchParams(window.location.search).get("state")}`,i=localStorage.getItem(r);return JSON.parse(i||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return g(async()=>{if(o.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return o.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=D(window.crypto.getRandomValues(new Uint8Array(32))),i=D(await Ae(r)),n=D(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:l,scope:d,audience:p,clientId:f}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:n,verifier:r});let a=new URL(Le,this.config.authenticationDomain);if(a.searchParams.set("response_type","code"),a.searchParams.set("code_challenge",i),a.searchParams.set("code_challenge_method","S256"),a.searchParams.set("client_id",f),a.searchParams.set("redirect_uri",l),a.searchParams.set("state",n),d&&a.searchParams.set("scope",d),p&&a.searchParams.set("audience",p),e){if(e.directLoginMethod==="email"){let u=e.email;u&&(a.searchParams.set("direct",e.directLoginMethod),a.searchParams.set("email",u));}else a.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&a.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&a.searchParams.set("im_passport_trace_id",t),a.toString()}async loginWithPKCEFlowCallback(e,t){return g(async()=>{let r=this.deviceCredentialsManager.getPKCEData();if(!r)throw new Error("No code verifier or state for PKCE");if(t!==r.state)throw new Error("Provided state does not match stored state");let i=await this.getPKCEToken(e,r.verifier),n=o.mapDeviceTokenResponseToOidcUser(i),l=o.mapOidcUserToDomainModel(n);return await this.userManager.storeUser(n),l},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await Ee__default.default.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},ye)).data}async storeTokens(e){return g(async()=>{let t=o.mapDeviceTokenResponseToOidcUser(e),r=o.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return g(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(R.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{R.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(R.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let r=await this.userManager.signinSilent();if(r){e(o.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let i="AUTHENTICATION_ERROR",n="Failed to refresh token",l=!0;if(r instanceof oidcClientTs.ErrorTimeout?(i="SILENT_LOGIN_ERROR",n=`${n}: ${r.message}`,l=!1):r instanceof oidcClientTs.ErrorResponse?(i="NOT_LOGGED_IN_ERROR",n=`${n}: ${r.message||r.error_description}`):r instanceof Error?n=`${n}: ${r.message}`:typeof r=="string"&&(n=`${n}: ${r}`),l)try{await this.userManager.removeUser();}catch(d){d instanceof Error&&(n=`${n}: Failed to remove user: ${d.message}`);}t(new c(n,i));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!G(t)){let r=o.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async getUserZkEvm(){let e=await this.getUser(w);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}async getUserImx(){let e=await this.getUser(U);if(!e)throw new Error("Failed to obtain a User with the required IMX attributes");return e}};var be=(o,e,t)=>{let r=e.map(i=>!o[i]&&i).filter(i=>i).join(", ");if(r!==""){let i=`${r} cannot be null`;throw new c(i,"INVALID_CONFIGURATION")}},v=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:e,passportDomain:t,crossSdkBridgeEnabled:r,popupOverlayOptions:i,...n}){be(n,["clientId","redirectUri"]),this.oidcConfiguration=n,this.crossSdkBridgeEnabled=r||!1,this.popupOverlayOptions=i,this.authenticationDomain=e||"https://auth.immutable.com",this.passportDomain=t||"https://passport.immutable.com";}};var Q="im_passport_embedded_login_prompt";var m=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let r=document.createElement("div");r.innerHTML=z(),document.body.insertAdjacentElement("beforeend",r);let i=document.querySelector(`#${O}`);i&&i.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var Ue=660,Me=440,xe="16px",J="passport-embedded-login-keyframes",ee="passport-embedded-login-iframe",T=class o{config;constructor(e){this.config=e;}getHref=()=>`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${metrics.getDetail(metrics.Detail.RUNTIME_ID)}`;static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(J))return;let e=document.createElement("style");e.id=J,e.textContent=`
365
+ `;function w({id:i,href:e,rel:t,crossOrigin:r}){let o=`${C}-${i}`;if(!document.getElementById(o)){let n=document.createElement("link");n.id=o,n.href=e,t&&(n.rel=t),r&&(n.crossOrigin=r),document.head.appendChild(n);}}var j=()=>Y(le()),Q=()=>Y(de());var v=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(e,t=!1){this.disableBlockedPopupOverlay=e.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=e.disableGenericPopupOverlay||!1,this.isBlockedOverlay=t;}append(e,t){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(e),this.updateCloseButton(t));}update(e){this.updateTryAgainButton(e);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){w({id:"link-googleapis",href:"https://fonts.googleapis.com"}),w({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),w({id:"link-roboto",href:"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap",rel:"stylesheet"});let t=document.createElement("div");t.innerHTML=this.isBlockedOverlay?j():Q(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(A);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(I);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var k=class{storage;constructor(e,t){this.storage=ce__default.default.createInstance({name:e,driver:t});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(e){return this.storage.getItem(e)}key(e){return this.storage.key(e)}async removeItem(e){await this.storage.removeItem(e);}async setItem(e,t){await this.storage.setItem(e,t);}};var Oe=500,ye={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ve="/v2/logout",Te="/im-logged-out",Le="/authorize",Pe=i=>i?Te:ve,Ie=i=>{let{authenticationDomain:e,oidcConfiguration:t}=i,r;i.crossSdkBridgeEnabled?r=new k("ImmutableSDKPassport",ce__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let o=new oidcClientTs.WebStorageStateStore({store:r}),n=new URL(Pe(i.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return n.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&n.searchParams.set("returnTo",t.logoutRedirectUri),{authority:e,redirect_uri:t.redirectUri,popup_redirect_uri:t.popupRedirectUri||t.redirectUri,client_id:t.clientId,metadata:{authorization_endpoint:`${e}/authorize`,token_endpoint:`${e}/oauth/token`,userinfo_endpoint:`${e}/userinfo`,end_session_endpoint:n.toString(),revocation_endpoint:`${e}/oauth/revoke`},automaticSilentRenew:!1,scope:t.scope,userStore:o,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function D(i){return btoa(String.fromCharCode(...new Uint8Array(i))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Ae(i){let t=new TextEncoder().encode(i);return await window.crypto.subtle.digest("SHA-256",t)}var _=class i{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new oidcClientTs.UserManager(Ie(e)),this.deviceCredentialsManager=new O,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=q__default.default(e.id_token)?.passport);let r={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.zkevm_eth_address&&t?.zkevm_user_admin_address&&(r.zkEvm={ethAddress:t.zkevm_eth_address,userAdminAddress:t.zkevm_user_admin_address}),r};static mapDeviceTokenResponseToOidcUser=e=>{let t=q__default.default(e.id_token);return new oidcClientTs.User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:metrics.getDetail(metrics.Detail.RUNTIME_ID)||"",third_party_a_id:""};if(e){if(e.directLoginMethod==="email"){let o=e.email;o&&(r.direct=e.directLoginMethod,r.email=o);}else r.direct=e.directLoginMethod;e.marketingConsentStatus&&(r.marketingConsent=e.marketingConsentStatus);}return t&&(r.im_passport_trace_id=t),r}async getClientId(){return this.config.oidcConfiguration.clientId}async loginWithRedirect(e){return await this.userManager.clearStaleState(),f(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR")}async login(e){return f(async()=>{let t,r;if(e)t=e;else if(!this.config.popupOverlayOptions?.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:d,...l}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt();t=l,r=d;}let o=window.crypto.randomUUID(),n=async()=>{let d=this.buildExtraQueryParams(t,r),l=this.userManager.signinPopup({extraQueryParams:d,popupWindowFeatures:{width:410,height:450},popupWindowTarget:o}),c=window.open("",o);if(c){let E=new Promise((a,g)=>{let S=setInterval(()=>{c.closed&&(clearInterval(S),g(new Error("Popup closed by user")));},Oe);l.finally(()=>{clearInterval(S),c.close();});});return Promise.race([l,E])}return l};return new Promise((d,l)=>{n().then(c=>{d(i.mapOidcUserToDomainModel(c));}).catch(c=>{if(!(c instanceof Error)||c.message!=="Attempted to navigate on a disposed window"){l(c);return}let E=!1,a=new v(this.config.popupOverlayOptions||{},!0);a.append(async()=>{try{if(E)window.open("",o);else {E=!0;let g=await n();a.remove(),d(i.mapOidcUserToDomainModel(g));}}catch(g){a.remove(),l(g);}},()=>{a.remove(),l(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){h.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let r=`oidc.${new URLSearchParams(window.location.search).get("state")}`,o=localStorage.getItem(r);return JSON.parse(o||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return f(async()=>{if(i.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return i.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=D(window.crypto.getRandomValues(new Uint8Array(32))),o=D(await Ae(r)),n=D(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:d,scope:l,audience:c,clientId:E}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:n,verifier:r});let a=new URL(Le,this.config.authenticationDomain);if(a.searchParams.set("response_type","code"),a.searchParams.set("code_challenge",o),a.searchParams.set("code_challenge_method","S256"),a.searchParams.set("client_id",E),a.searchParams.set("redirect_uri",d),a.searchParams.set("state",n),l&&a.searchParams.set("scope",l),c&&a.searchParams.set("audience",c),e){if(e.directLoginMethod==="email"){let g=e.email;g&&(a.searchParams.set("direct",e.directLoginMethod),a.searchParams.set("email",g));}else a.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&a.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&a.searchParams.set("im_passport_trace_id",t),a.toString()}async loginWithPKCEFlowCallback(e,t){return f(async()=>{let r=this.deviceCredentialsManager.getPKCEData();if(!r)throw new Error("No code verifier or state for PKCE");if(t!==r.state)throw new Error("Provided state does not match stored state");let o=await this.getPKCEToken(e,r.verifier),n=i.mapDeviceTokenResponseToOidcUser(o),d=i.mapOidcUserToDomainModel(n);return await this.userManager.storeUser(n),d},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await Ee__default.default.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},ye)).data}async storeTokens(e){return f(async()=>{let t=i.mapDeviceTokenResponseToOidcUser(e),r=i.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return f(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(h.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{h.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(h.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let r=await this.userManager.signinSilent();if(r){e(i.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let o="AUTHENTICATION_ERROR",n="Failed to refresh token",d=!0;if(r instanceof oidcClientTs.ErrorTimeout?(o="SILENT_LOGIN_ERROR",n=`${n}: ${r.message}`,d=!1):r instanceof oidcClientTs.ErrorResponse?(o="NOT_LOGGED_IN_ERROR",n=`${n}: ${r.message||r.error_description}`):r instanceof Error?n=`${n}: ${r.message}`:typeof r=="string"&&(n=`${n}: ${r}`),d)try{await this.userManager.removeUser();}catch(l){l instanceof Error&&(n=`${n}: Failed to remove user: ${l.message}`);}t(new u(n,o));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!G(t)){let r=i.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async getUserZkEvm(){let e=await this.getUser(M);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}};var we=(i,e,t)=>{let r=e.map(o=>!i[o]&&o).filter(o=>o).join(", ");if(r!==""){let o=`${r} cannot be null`;throw new u(o,"INVALID_CONFIGURATION")}},T=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:e,passportDomain:t,crossSdkBridgeEnabled:r,popupOverlayOptions:o,...n}){we(n,["clientId","redirectUri"]),this.oidcConfiguration=n,this.crossSdkBridgeEnabled=r||!1,this.popupOverlayOptions=o,this.authenticationDomain=e||"https://auth.immutable.com",this.passportDomain=t||"https://passport.immutable.com";}};var X="im_passport_embedded_login_prompt";var m=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let r=document.createElement("div");r.innerHTML=z(),document.body.insertAdjacentElement("beforeend",r);let o=document.querySelector(`#${y}`);o&&o.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var Me=660,Ue=440,xe="16px",J="passport-embedded-login-keyframes",ee="passport-embedded-login-iframe",L=class i{config;constructor(e){this.config=e;}getHref=()=>`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${metrics.getDetail(metrics.Detail.RUNTIME_ID)}`;static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(J))return;let e=document.createElement("style");e.id=J,e.textContent=`
366
366
  @keyframes passportEmbeddedLoginPromptPopBounceIn {
367
367
  0% {
368
368
  opacity: 0.5;
@@ -395,17 +395,16 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
395
395
  opacity: 1;
396
396
  }
397
397
  }
398
- `,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=ee,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${Ue}px`,e.style.maxWidth=`${Me}px`,e.style.borderRadius=xe,e.style.opacity="0",e.style.transform="scale(0.6)",e.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",o.appendIFrameStylesIfNeeded(),e};displayEmbeddedLoginPrompt(){return new Promise((e,t)=>{let r=this.getEmbeddedLoginIFrame(),i=({data:n,origin:l})=>{if(!(l!==this.config.authenticationDomain||n.eventType!==Q))switch(n.messageType){case"login_method_selected":{let d=n.payload;window.removeEventListener("message",i),m.remove(),e(d);break}case"login_prompt_error":{window.removeEventListener("message",i),m.remove(),t(new Error("Error during embedded login prompt",{cause:n.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",i),m.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",i),m.remove(),t(new Error(`Unsupported message type: ${n.messageType}`));break}};window.addEventListener("message",i),m.appendOverlay(r,()=>{window.removeEventListener("message",i),m.remove(),t(new Error("Popup closed by user"));});})}};var _=class{emitter=new events.EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var N=class{authManager;config;eventEmitter;constructor(e){this.config=new v(e);let t=new T(this.config);this.authManager=new E(this.config,t),this.eventEmitter=new _,metrics.track("passport","initialise");}async login(e){return this.authManager.login(e)}async loginWithRedirect(e){await this.authManager.loginWithRedirect(e);}async loginWithOptions(e){let{useCachedSession:t=!1,useSilentLogin:r}=e||{},i=null;try{i=await this.authManager.getUser();}catch(n){if(t)throw n}if(!i&&r&&(i=await this.authManager.forceUserRefresh()),!i&&!t){if(e?.useRedirectFlow)return await this.authManager.loginWithRedirect(e?.directLoginOptions),null;i=await this.authManager.login(e?.directLoginOptions);}return i&&(this.eventEmitter.emit("loggedIn",i),metrics.identify({passportId:i.profile.sub})),i}async loginCallback(){let e=await this.authManager.loginCallback();if(!e)throw new Error("Login callback failed - no user returned");return this.eventEmitter.emit("loggedIn",e),metrics.identify({passportId:e.profile.sub}),e}async logout(){await this.authManager.logout(),this.eventEmitter.emit("loggedOut");}async getUser(){return this.authManager.getUser()}async getIdToken(){return (await this.authManager.getUser())?.idToken}async getAccessToken(){return (await this.authManager.getUser())?.accessToken}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.authManager.forceUserRefresh()}async loginWithPKCEFlow(e,t){return this.authManager.getPKCEAuthorizationUrl(e,t)}async loginWithPKCEFlowCallback(e,t){let r=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.eventEmitter.emit("loggedIn",r),metrics.identify({passportId:r.profile.sub}),r}async storeTokens(e){let t=await this.authManager.storeTokens(e);return this.eventEmitter.emit("loggedIn",t),metrics.identify({passportId:t.profile.sub}),t}async getLogoutUrl(){return await this.authManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0}async logoutSilentCallback(e){return this.authManager.logoutSilentCallback(e)}getAuthManager(){return this.authManager}getConfig(){return this.config}};
398
+ `,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=ee,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${Me}px`,e.style.maxWidth=`${Ue}px`,e.style.borderRadius=xe,e.style.opacity="0",e.style.transform="scale(0.6)",e.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",i.appendIFrameStylesIfNeeded(),e};displayEmbeddedLoginPrompt(){return new Promise((e,t)=>{let r=this.getEmbeddedLoginIFrame(),o=({data:n,origin:d})=>{if(!(d!==this.config.authenticationDomain||n.eventType!==X))switch(n.messageType){case"login_method_selected":{let l=n.payload;window.removeEventListener("message",o),m.remove(),e(l);break}case"login_prompt_error":{window.removeEventListener("message",o),m.remove(),t(new Error("Error during embedded login prompt",{cause:n.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",o),m.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",o),m.remove(),t(new Error(`Unsupported message type: ${n.messageType}`));break}};window.addEventListener("message",o),m.appendOverlay(r,()=>{window.removeEventListener("message",o),m.remove(),t(new Error("Popup closed by user"));});})}};var R=class{emitter=new events.EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var p=async(i,e,t=!0,r=!0)=>{let o=metrics.trackFlow("passport",e,t);try{return await i(o)}catch(n){throw n instanceof Error?metrics.trackError("passport",e,n,{flowId:o.details.flowId}):o.addEvent("errored"),n}finally{r&&o.addEvent("End");}};var N=class{authManager;config;eventEmitter;constructor(e){this.config=new T(e);let t=new L(this.config);this.authManager=new _(this.config,t),this.eventEmitter=new R,metrics.track("passport","initialise");}async login(e){return p(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},o=null;try{o=await this.authManager.getUser();}catch(n){if(n instanceof Error&&!n.message.includes("Unknown or invalid refresh token")&&metrics.trackError("passport","login",n),t)throw n;h.warn("Failed to retrieve a cached user session",n);}if(!o&&r)o=await this.authManager.forceUserRefresh();else if(!o&&!t){if(e?.useRedirectFlow)return await this.authManager.loginWithRedirect(e?.directLoginOptions),null;o=await this.authManager.login(e?.directLoginOptions);}return o&&(this.eventEmitter.emit("loggedIn",o),metrics.identify({passportId:o.profile.sub})),o},"login")}async loginWithRedirect(e){await this.authManager.loginWithRedirect(e);}async loginCallback(){return p(async()=>{let e=await this.authManager.loginCallback();if(!e)throw new Error("Login callback failed - no user returned");return this.eventEmitter.emit("loggedIn",e),metrics.identify({passportId:e.profile.sub}),e},"loginCallback")}async logout(){await p(async()=>{await this.authManager.logout(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return p(async()=>this.authManager.getUser(),"getUserInfo",!1)}async getIdToken(){return p(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return p(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.authManager.forceUserRefresh()}async loginWithPKCEFlow(e,t){return p(async()=>this.authManager.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return p(async()=>{let r=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.eventEmitter.emit("loggedIn",r),metrics.identify({passportId:r.profile.sub}),r},"loginWithPKCEFlowCallback")}async storeTokens(e){return p(async()=>{let t=await this.authManager.storeTokens(e);return this.eventEmitter.emit("loggedIn",t),metrics.identify({passportId:t.profile.sub}),t},"storeTokens")}async getLogoutUrl(){return p(async()=>(await this.authManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0),"getLogoutUrl")}async logoutSilentCallback(e){return p(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback")}getAuthManager(){return this.authManager}getConfig(){return this.config}};
399
399
 
400
400
  exports.Auth = N;
401
- exports.AuthConfiguration = v;
402
- exports.AuthEvents = M;
403
- exports.AuthManager = E;
404
- exports.MarketingConsentStatus = Z;
405
- exports.PassportError = c;
406
- exports.PassportErrorType = L;
401
+ exports.AuthConfiguration = T;
402
+ exports.AuthEvents = U;
403
+ exports.AuthManager = _;
404
+ exports.MarketingConsentStatus = K;
405
+ exports.PassportError = u;
406
+ exports.PassportErrorType = P;
407
407
  exports.RollupType = B;
408
- exports.TypedEventEmitter = _;
409
- exports.isUserImx = U;
410
- exports.isUserZkEvm = w;
411
- exports.withPassportError = g;
408
+ exports.TypedEventEmitter = R;
409
+ exports.isUserZkEvm = M;
410
+ exports.withPassportError = f;
@@ -1,11 +1,11 @@
1
1
  import { UserManager, User, ErrorTimeout, ErrorResponse, InMemoryWebStorage, WebStorageStateStore } from 'oidc-client-ts';
2
2
  import Ee, { isAxiosError } from 'axios';
3
3
  import q from 'jwt-decode';
4
- import { getDetail, Detail, track, identify } from '@imtbl/metrics';
5
- import pe from 'localforage';
4
+ import { getDetail, Detail, track, trackFlow, trackError, identify } from '@imtbl/metrics';
5
+ import ce from 'localforage';
6
6
  import { EventEmitter } from 'events';
7
7
 
8
- var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q(e).exp??0,i=Date.now()/1e3+re;return r>i}catch{return !1}}savePKCEData(e){localStorage.setItem(H,e.state),localStorage.setItem(F,e.verifier);}getPKCEData(){let e=localStorage.getItem(H),t=localStorage.getItem(F);return e&&t?{state:e,verifier:t}:null}};var ie=(...o)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...o);},R={warn:ie};function V(o){try{let e=q(o),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function G(o){let{id_token:e,access_token:t}=o;return !t||!e?!0:V(t)||V(e)}var L=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION="INVALID_CONFIGURATION",s.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",s.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",s.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",s.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",s.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",s.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",s.LOGOUT_ERROR="LOGOUT_ERROR",s.TRANSFER_ERROR="TRANSFER_ERROR",s.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",s.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",s.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",s.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",s.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR",s.LINK_WALLET_ALREADY_LINKED_ERROR="LINK_WALLET_ALREADY_LINKED_ERROR",s.LINK_WALLET_MAX_WALLETS_LINKED_ERROR="LINK_WALLET_MAX_WALLETS_LINKED_ERROR",s.LINK_WALLET_VALIDATION_ERROR="LINK_WALLET_VALIDATION_ERROR",s.LINK_WALLET_DUPLICATE_NONCE_ERROR="LINK_WALLET_DUPLICATE_NONCE_ERROR",s.LINK_WALLET_GENERIC_ERROR="LINK_WALLET_GENERIC_ERROR",s.SERVICE_UNAVAILABLE_ERROR="SERVICE_UNAVAILABLE_ERROR",s))(L||{});function se(o){return "code"in o&&"message"in o}var c=class extends Error{type;constructor(e,t){super(e),this.type=t;}},g=async(o,e)=>{try{return await o()}catch(t){let r;throw t instanceof c&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new c(t.message,t.type):(isAxiosError(t)&&t.response?.data&&se(t.response.data)?r=t.response.data.message:r=t.message,new c(r,e))}};var B=(t=>(t.IMX="imx",t.ZKEVM="zkEvm",t))(B||{}),w=o=>!!o.zkEvm,U=o=>!!o.imx,Z=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(Z||{}),M=(t=>(t.LOGGED_OUT="loggedOut",t.LOGGED_IN="loggedIn",t))(M||{});var h="passport-overlay",O="passport-overlay-contents",P=`${h}-close`,I=`${h}-try-again`,K=`
8
+ var F="pkce_state",H="pkce_verifier",re=3600,O=class{isTokenValid(e){try{let r=q(e).exp??0,o=Date.now()/1e3+re;return r>o}catch{return !1}}savePKCEData(e){localStorage.setItem(F,e.state),localStorage.setItem(H,e.verifier);}getPKCEData(){let e=localStorage.getItem(F),t=localStorage.getItem(H);return e&&t?{state:e,verifier:t}:null}};var oe=(...i)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...i);},h={warn:oe};function V(i){try{let e=q(i),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function G(i){let{id_token:e,access_token:t}=i;return !t||!e?!0:V(t)||V(e)}var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION="INVALID_CONFIGURATION",s.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",s.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",s.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",s.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",s.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",s.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",s.LOGOUT_ERROR="LOGOUT_ERROR",s.TRANSFER_ERROR="TRANSFER_ERROR",s.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",s.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",s.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",s.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",s.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR",s.LINK_WALLET_ALREADY_LINKED_ERROR="LINK_WALLET_ALREADY_LINKED_ERROR",s.LINK_WALLET_MAX_WALLETS_LINKED_ERROR="LINK_WALLET_MAX_WALLETS_LINKED_ERROR",s.LINK_WALLET_VALIDATION_ERROR="LINK_WALLET_VALIDATION_ERROR",s.LINK_WALLET_DUPLICATE_NONCE_ERROR="LINK_WALLET_DUPLICATE_NONCE_ERROR",s.LINK_WALLET_GENERIC_ERROR="LINK_WALLET_GENERIC_ERROR",s.SERVICE_UNAVAILABLE_ERROR="SERVICE_UNAVAILABLE_ERROR",s))(P||{});function se(i){return "code"in i&&"message"in i}var u=class extends Error{type;constructor(e,t){super(e),this.type=t;}},f=async(i,e)=>{try{return await i()}catch(t){let r;throw t instanceof u&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new u(t.message,t.type):(isAxiosError(t)&&t.response?.data&&se(t.response.data)?r=t.response.data.message:r=t.message,new u(r,e))}};var B=(e=>(e.ZKEVM="zkEvm",e))(B||{}),M=i=>!!i.zkEvm,K=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(K||{}),U=(t=>(t.LOGGED_OUT="loggedOut",t.LOGGED_IN="loggedIn",t))(U||{});var C="passport-overlay",y="passport-overlay-contents",I=`${C}-close`,A=`${C}-try-again`,Z=`
9
9
  <svg
10
10
  viewBox="0 0 20 20"
11
11
  fill="none"
@@ -216,7 +216,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
216
216
  </svg>
217
217
  `;var ae=()=>`
218
218
  <button
219
- id="${P}"
219
+ id="${I}"
220
220
  style="
221
221
  background: #f3f3f326 !important;
222
222
  border: none !important;
@@ -232,11 +232,11 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
232
232
  justify-content: center !important;
233
233
  "
234
234
  >
235
- ${K}
235
+ ${Z}
236
236
  </button>
237
237
  `,W=()=>`
238
238
  <button
239
- id="${I}"
239
+ id="${A}"
240
240
  style="
241
241
  margin-top: 27px !important;
242
242
  color: #f3f3f3 !important;
@@ -251,7 +251,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
251
251
  >
252
252
  Try again
253
253
  </button>
254
- `,de=()=>`
254
+ `,le=()=>`
255
255
  ${x}
256
256
  <div
257
257
  style="
@@ -276,7 +276,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
276
276
  browser settings.
277
277
  </p>
278
278
  ${W()}
279
- `,le=()=>`
279
+ `,de=()=>`
280
280
  ${x}
281
281
  <p style="
282
282
  color: #b6b6b6 !important;
@@ -287,9 +287,9 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
287
287
  Secure pop-up not showing?<br />We'll help you re-launch
288
288
  </p>
289
289
  ${W()}
290
- `,Y=o=>`
290
+ `,Y=i=>`
291
291
  <div
292
- id="${h}"
292
+ id="${C}"
293
293
  style="
294
294
  position: fixed !important;
295
295
  top: 0 !important;
@@ -314,7 +314,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
314
314
  >
315
315
  ${ae()}
316
316
  <div
317
- id="${O}"
317
+ id="${y}"
318
318
  style="
319
319
  display: flex !important;
320
320
  flex-direction: column !important;
@@ -322,12 +322,12 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
322
322
  max-width: 400px !important;
323
323
  "
324
324
  >
325
- ${o??""}
325
+ ${i??""}
326
326
  </div>
327
327
  </div>
328
328
  `,z=()=>`
329
329
  <div
330
- id="${h}"
330
+ id="${C}"
331
331
  style="
332
332
  position: fixed;
333
333
  top: 0;
@@ -345,7 +345,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
345
345
  "
346
346
  >
347
347
  <div
348
- id="${O}"
348
+ id="${y}"
349
349
  style="
350
350
  display: flex;
351
351
  flex-direction: column;
@@ -354,7 +354,7 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
354
354
  "
355
355
  />
356
356
  </div>
357
- `;function A({id:o,href:e,rel:t,crossOrigin:r}){let i=`${h}-${o}`;if(!document.getElementById(i)){let n=document.createElement("link");n.id=i,n.href=e,t&&(n.rel=t),r&&(n.crossOrigin=r),document.head.appendChild(n);}}var X=()=>Y(de()),j=()=>Y(le());var y=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(e,t=!1){this.disableBlockedPopupOverlay=e.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=e.disableGenericPopupOverlay||!1,this.isBlockedOverlay=t;}append(e,t){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(e),this.updateCloseButton(t));}update(e){this.updateTryAgainButton(e);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){A({id:"link-googleapis",href:"https://fonts.googleapis.com"}),A({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),A({id:"link-roboto",href:"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap",rel:"stylesheet"});let t=document.createElement("div");t.innerHTML=this.isBlockedOverlay?X():j(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(I);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(P);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var b=class{storage;constructor(e,t){this.storage=pe.createInstance({name:e,driver:t});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(e){return this.storage.getItem(e)}key(e){return this.storage.key(e)}async removeItem(e){await this.storage.removeItem(e);}async setItem(e,t){await this.storage.setItem(e,t);}};var Oe=500,ye={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ve="/v2/logout",Te="/im-logged-out",Le="/authorize",Pe=o=>o?Te:ve,Ie=o=>{let{authenticationDomain:e,oidcConfiguration:t}=o,r;o.crossSdkBridgeEnabled?r=new b("ImmutableSDKPassport",pe.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let i=new WebStorageStateStore({store:r}),n=new URL(Pe(o.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return n.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&n.searchParams.set("returnTo",t.logoutRedirectUri),{authority:e,redirect_uri:t.redirectUri,popup_redirect_uri:t.popupRedirectUri||t.redirectUri,client_id:t.clientId,metadata:{authorization_endpoint:`${e}/authorize`,token_endpoint:`${e}/oauth/token`,userinfo_endpoint:`${e}/userinfo`,end_session_endpoint:n.toString(),revocation_endpoint:`${e}/oauth/revoke`},automaticSilentRenew:!1,scope:t.scope,userStore:i,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function D(o){return btoa(String.fromCharCode(...new Uint8Array(o))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Ae(o){let t=new TextEncoder().encode(o);return await window.crypto.subtle.digest("SHA-256",t)}var E=class o{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new UserManager(Ie(e)),this.deviceCredentialsManager=new C,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=q(e.id_token)?.passport);let r={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.imx_eth_address&&(r.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(r.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),r};static mapDeviceTokenResponseToOidcUser=e=>{let t=q(e.id_token);return new User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:""};if(e){if(e.directLoginMethod==="email"){let i=e.email;i&&(r.direct=e.directLoginMethod,r.email=i);}else r.direct=e.directLoginMethod;e.marketingConsentStatus&&(r.marketingConsent=e.marketingConsentStatus);}return t&&(r.im_passport_trace_id=t),r}async loginWithRedirect(e){return await this.userManager.clearStaleState(),g(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR")}async login(e){return g(async()=>{let t,r;if(e)t=e;else if(!this.config.popupOverlayOptions?.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:l,...d}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt();t=d,r=l;}let i=window.crypto.randomUUID(),n=async()=>{let l=this.buildExtraQueryParams(t,r),d=this.userManager.signinPopup({extraQueryParams:l,popupWindowFeatures:{width:410,height:450},popupWindowTarget:i}),p=window.open("",i);if(p){let f=new Promise((a,u)=>{let S=setInterval(()=>{p.closed&&(clearInterval(S),u(new Error("Popup closed by user")));},Oe);d.finally(()=>{clearInterval(S),p.close();});});return Promise.race([d,f])}return d};return new Promise((l,d)=>{n().then(p=>{l(o.mapOidcUserToDomainModel(p));}).catch(p=>{if(!(p instanceof Error)||p.message!=="Attempted to navigate on a disposed window"){d(p);return}let f=!1,a=new y(this.config.popupOverlayOptions||{},!0);a.append(async()=>{try{if(f)window.open("",i);else {f=!0;let u=await n();a.remove(),l(o.mapOidcUserToDomainModel(u));}}catch(u){a.remove(),d(u);}},()=>{a.remove(),d(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){R.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let r=`oidc.${new URLSearchParams(window.location.search).get("state")}`,i=localStorage.getItem(r);return JSON.parse(i||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return g(async()=>{if(o.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return o.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=D(window.crypto.getRandomValues(new Uint8Array(32))),i=D(await Ae(r)),n=D(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:l,scope:d,audience:p,clientId:f}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:n,verifier:r});let a=new URL(Le,this.config.authenticationDomain);if(a.searchParams.set("response_type","code"),a.searchParams.set("code_challenge",i),a.searchParams.set("code_challenge_method","S256"),a.searchParams.set("client_id",f),a.searchParams.set("redirect_uri",l),a.searchParams.set("state",n),d&&a.searchParams.set("scope",d),p&&a.searchParams.set("audience",p),e){if(e.directLoginMethod==="email"){let u=e.email;u&&(a.searchParams.set("direct",e.directLoginMethod),a.searchParams.set("email",u));}else a.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&a.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&a.searchParams.set("im_passport_trace_id",t),a.toString()}async loginWithPKCEFlowCallback(e,t){return g(async()=>{let r=this.deviceCredentialsManager.getPKCEData();if(!r)throw new Error("No code verifier or state for PKCE");if(t!==r.state)throw new Error("Provided state does not match stored state");let i=await this.getPKCEToken(e,r.verifier),n=o.mapDeviceTokenResponseToOidcUser(i),l=o.mapOidcUserToDomainModel(n);return await this.userManager.storeUser(n),l},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await Ee.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},ye)).data}async storeTokens(e){return g(async()=>{let t=o.mapDeviceTokenResponseToOidcUser(e),r=o.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return g(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(R.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{R.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(R.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let r=await this.userManager.signinSilent();if(r){e(o.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let i="AUTHENTICATION_ERROR",n="Failed to refresh token",l=!0;if(r instanceof ErrorTimeout?(i="SILENT_LOGIN_ERROR",n=`${n}: ${r.message}`,l=!1):r instanceof ErrorResponse?(i="NOT_LOGGED_IN_ERROR",n=`${n}: ${r.message||r.error_description}`):r instanceof Error?n=`${n}: ${r.message}`:typeof r=="string"&&(n=`${n}: ${r}`),l)try{await this.userManager.removeUser();}catch(d){d instanceof Error&&(n=`${n}: Failed to remove user: ${d.message}`);}t(new c(n,i));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!G(t)){let r=o.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async getUserZkEvm(){let e=await this.getUser(w);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}async getUserImx(){let e=await this.getUser(U);if(!e)throw new Error("Failed to obtain a User with the required IMX attributes");return e}};var be=(o,e,t)=>{let r=e.map(i=>!o[i]&&i).filter(i=>i).join(", ");if(r!==""){let i=`${r} cannot be null`;throw new c(i,"INVALID_CONFIGURATION")}},v=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:e,passportDomain:t,crossSdkBridgeEnabled:r,popupOverlayOptions:i,...n}){be(n,["clientId","redirectUri"]),this.oidcConfiguration=n,this.crossSdkBridgeEnabled=r||!1,this.popupOverlayOptions=i,this.authenticationDomain=e||"https://auth.immutable.com",this.passportDomain=t||"https://passport.immutable.com";}};var Q="im_passport_embedded_login_prompt";var m=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let r=document.createElement("div");r.innerHTML=z(),document.body.insertAdjacentElement("beforeend",r);let i=document.querySelector(`#${O}`);i&&i.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var Ue=660,Me=440,xe="16px",J="passport-embedded-login-keyframes",ee="passport-embedded-login-iframe",T=class o{config;constructor(e){this.config=e;}getHref=()=>`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${getDetail(Detail.RUNTIME_ID)}`;static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(J))return;let e=document.createElement("style");e.id=J,e.textContent=`
357
+ `;function w({id:i,href:e,rel:t,crossOrigin:r}){let o=`${C}-${i}`;if(!document.getElementById(o)){let n=document.createElement("link");n.id=o,n.href=e,t&&(n.rel=t),r&&(n.crossOrigin=r),document.head.appendChild(n);}}var j=()=>Y(le()),Q=()=>Y(de());var v=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(e,t=!1){this.disableBlockedPopupOverlay=e.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=e.disableGenericPopupOverlay||!1,this.isBlockedOverlay=t;}append(e,t){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(e),this.updateCloseButton(t));}update(e){this.updateTryAgainButton(e);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){w({id:"link-googleapis",href:"https://fonts.googleapis.com"}),w({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),w({id:"link-roboto",href:"https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap",rel:"stylesheet"});let t=document.createElement("div");t.innerHTML=this.isBlockedOverlay?j():Q(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(A);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(I);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var k=class{storage;constructor(e,t){this.storage=ce.createInstance({name:e,driver:t});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(e){return this.storage.getItem(e)}key(e){return this.storage.key(e)}async removeItem(e){await this.storage.removeItem(e);}async setItem(e,t){await this.storage.setItem(e,t);}};var Oe=500,ye={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ve="/v2/logout",Te="/im-logged-out",Le="/authorize",Pe=i=>i?Te:ve,Ie=i=>{let{authenticationDomain:e,oidcConfiguration:t}=i,r;i.crossSdkBridgeEnabled?r=new k("ImmutableSDKPassport",ce.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let o=new WebStorageStateStore({store:r}),n=new URL(Pe(i.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return n.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&n.searchParams.set("returnTo",t.logoutRedirectUri),{authority:e,redirect_uri:t.redirectUri,popup_redirect_uri:t.popupRedirectUri||t.redirectUri,client_id:t.clientId,metadata:{authorization_endpoint:`${e}/authorize`,token_endpoint:`${e}/oauth/token`,userinfo_endpoint:`${e}/userinfo`,end_session_endpoint:n.toString(),revocation_endpoint:`${e}/oauth/revoke`},automaticSilentRenew:!1,scope:t.scope,userStore:o,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function D(i){return btoa(String.fromCharCode(...new Uint8Array(i))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Ae(i){let t=new TextEncoder().encode(i);return await window.crypto.subtle.digest("SHA-256",t)}var _=class i{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new UserManager(Ie(e)),this.deviceCredentialsManager=new O,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=q(e.id_token)?.passport);let r={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.zkevm_eth_address&&t?.zkevm_user_admin_address&&(r.zkEvm={ethAddress:t.zkevm_eth_address,userAdminAddress:t.zkevm_user_admin_address}),r};static mapDeviceTokenResponseToOidcUser=e=>{let t=q(e.id_token);return new User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:""};if(e){if(e.directLoginMethod==="email"){let o=e.email;o&&(r.direct=e.directLoginMethod,r.email=o);}else r.direct=e.directLoginMethod;e.marketingConsentStatus&&(r.marketingConsent=e.marketingConsentStatus);}return t&&(r.im_passport_trace_id=t),r}async getClientId(){return this.config.oidcConfiguration.clientId}async loginWithRedirect(e){return await this.userManager.clearStaleState(),f(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR")}async login(e){return f(async()=>{let t,r;if(e)t=e;else if(!this.config.popupOverlayOptions?.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:d,...l}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt();t=l,r=d;}let o=window.crypto.randomUUID(),n=async()=>{let d=this.buildExtraQueryParams(t,r),l=this.userManager.signinPopup({extraQueryParams:d,popupWindowFeatures:{width:410,height:450},popupWindowTarget:o}),c=window.open("",o);if(c){let E=new Promise((a,g)=>{let S=setInterval(()=>{c.closed&&(clearInterval(S),g(new Error("Popup closed by user")));},Oe);l.finally(()=>{clearInterval(S),c.close();});});return Promise.race([l,E])}return l};return new Promise((d,l)=>{n().then(c=>{d(i.mapOidcUserToDomainModel(c));}).catch(c=>{if(!(c instanceof Error)||c.message!=="Attempted to navigate on a disposed window"){l(c);return}let E=!1,a=new v(this.config.popupOverlayOptions||{},!0);a.append(async()=>{try{if(E)window.open("",o);else {E=!0;let g=await n();a.remove(),d(i.mapOidcUserToDomainModel(g));}}catch(g){a.remove(),l(g);}},()=>{a.remove(),l(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){h.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let r=`oidc.${new URLSearchParams(window.location.search).get("state")}`,o=localStorage.getItem(r);return JSON.parse(o||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return f(async()=>{if(i.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return i.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=D(window.crypto.getRandomValues(new Uint8Array(32))),o=D(await Ae(r)),n=D(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:d,scope:l,audience:c,clientId:E}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:n,verifier:r});let a=new URL(Le,this.config.authenticationDomain);if(a.searchParams.set("response_type","code"),a.searchParams.set("code_challenge",o),a.searchParams.set("code_challenge_method","S256"),a.searchParams.set("client_id",E),a.searchParams.set("redirect_uri",d),a.searchParams.set("state",n),l&&a.searchParams.set("scope",l),c&&a.searchParams.set("audience",c),e){if(e.directLoginMethod==="email"){let g=e.email;g&&(a.searchParams.set("direct",e.directLoginMethod),a.searchParams.set("email",g));}else a.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&a.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&a.searchParams.set("im_passport_trace_id",t),a.toString()}async loginWithPKCEFlowCallback(e,t){return f(async()=>{let r=this.deviceCredentialsManager.getPKCEData();if(!r)throw new Error("No code verifier or state for PKCE");if(t!==r.state)throw new Error("Provided state does not match stored state");let o=await this.getPKCEToken(e,r.verifier),n=i.mapDeviceTokenResponseToOidcUser(o),d=i.mapOidcUserToDomainModel(n);return await this.userManager.storeUser(n),d},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await Ee.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},ye)).data}async storeTokens(e){return f(async()=>{let t=i.mapDeviceTokenResponseToOidcUser(e),r=i.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return f(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(h.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{h.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(h.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let r=await this.userManager.signinSilent();if(r){e(i.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let o="AUTHENTICATION_ERROR",n="Failed to refresh token",d=!0;if(r instanceof ErrorTimeout?(o="SILENT_LOGIN_ERROR",n=`${n}: ${r.message}`,d=!1):r instanceof ErrorResponse?(o="NOT_LOGGED_IN_ERROR",n=`${n}: ${r.message||r.error_description}`):r instanceof Error?n=`${n}: ${r.message}`:typeof r=="string"&&(n=`${n}: ${r}`),d)try{await this.userManager.removeUser();}catch(l){l instanceof Error&&(n=`${n}: Failed to remove user: ${l.message}`);}t(new u(n,o));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!G(t)){let r=i.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async getUserZkEvm(){let e=await this.getUser(M);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}};var we=(i,e,t)=>{let r=e.map(o=>!i[o]&&o).filter(o=>o).join(", ");if(r!==""){let o=`${r} cannot be null`;throw new u(o,"INVALID_CONFIGURATION")}},T=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:e,passportDomain:t,crossSdkBridgeEnabled:r,popupOverlayOptions:o,...n}){we(n,["clientId","redirectUri"]),this.oidcConfiguration=n,this.crossSdkBridgeEnabled=r||!1,this.popupOverlayOptions=o,this.authenticationDomain=e||"https://auth.immutable.com",this.passportDomain=t||"https://passport.immutable.com";}};var X="im_passport_embedded_login_prompt";var m=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let r=document.createElement("div");r.innerHTML=z(),document.body.insertAdjacentElement("beforeend",r);let o=document.querySelector(`#${y}`);o&&o.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var Me=660,Ue=440,xe="16px",J="passport-embedded-login-keyframes",ee="passport-embedded-login-iframe",L=class i{config;constructor(e){this.config=e;}getHref=()=>`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${getDetail(Detail.RUNTIME_ID)}`;static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(J))return;let e=document.createElement("style");e.id=J,e.textContent=`
358
358
  @keyframes passportEmbeddedLoginPromptPopBounceIn {
359
359
  0% {
360
360
  opacity: 0.5;
@@ -387,6 +387,6 @@ var H="pkce_state",F="pkce_verifier",re=3600,C=class{isTokenValid(e){try{let r=q
387
387
  opacity: 1;
388
388
  }
389
389
  }
390
- `,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=ee,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${Ue}px`,e.style.maxWidth=`${Me}px`,e.style.borderRadius=xe,e.style.opacity="0",e.style.transform="scale(0.6)",e.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",o.appendIFrameStylesIfNeeded(),e};displayEmbeddedLoginPrompt(){return new Promise((e,t)=>{let r=this.getEmbeddedLoginIFrame(),i=({data:n,origin:l})=>{if(!(l!==this.config.authenticationDomain||n.eventType!==Q))switch(n.messageType){case"login_method_selected":{let d=n.payload;window.removeEventListener("message",i),m.remove(),e(d);break}case"login_prompt_error":{window.removeEventListener("message",i),m.remove(),t(new Error("Error during embedded login prompt",{cause:n.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",i),m.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",i),m.remove(),t(new Error(`Unsupported message type: ${n.messageType}`));break}};window.addEventListener("message",i),m.appendOverlay(r,()=>{window.removeEventListener("message",i),m.remove(),t(new Error("Popup closed by user"));});})}};var _=class{emitter=new EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var N=class{authManager;config;eventEmitter;constructor(e){this.config=new v(e);let t=new T(this.config);this.authManager=new E(this.config,t),this.eventEmitter=new _,track("passport","initialise");}async login(e){return this.authManager.login(e)}async loginWithRedirect(e){await this.authManager.loginWithRedirect(e);}async loginWithOptions(e){let{useCachedSession:t=!1,useSilentLogin:r}=e||{},i=null;try{i=await this.authManager.getUser();}catch(n){if(t)throw n}if(!i&&r&&(i=await this.authManager.forceUserRefresh()),!i&&!t){if(e?.useRedirectFlow)return await this.authManager.loginWithRedirect(e?.directLoginOptions),null;i=await this.authManager.login(e?.directLoginOptions);}return i&&(this.eventEmitter.emit("loggedIn",i),identify({passportId:i.profile.sub})),i}async loginCallback(){let e=await this.authManager.loginCallback();if(!e)throw new Error("Login callback failed - no user returned");return this.eventEmitter.emit("loggedIn",e),identify({passportId:e.profile.sub}),e}async logout(){await this.authManager.logout(),this.eventEmitter.emit("loggedOut");}async getUser(){return this.authManager.getUser()}async getIdToken(){return (await this.authManager.getUser())?.idToken}async getAccessToken(){return (await this.authManager.getUser())?.accessToken}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.authManager.forceUserRefresh()}async loginWithPKCEFlow(e,t){return this.authManager.getPKCEAuthorizationUrl(e,t)}async loginWithPKCEFlowCallback(e,t){let r=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.eventEmitter.emit("loggedIn",r),identify({passportId:r.profile.sub}),r}async storeTokens(e){let t=await this.authManager.storeTokens(e);return this.eventEmitter.emit("loggedIn",t),identify({passportId:t.profile.sub}),t}async getLogoutUrl(){return await this.authManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0}async logoutSilentCallback(e){return this.authManager.logoutSilentCallback(e)}getAuthManager(){return this.authManager}getConfig(){return this.config}};
390
+ `,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=ee,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${Me}px`,e.style.maxWidth=`${Ue}px`,e.style.borderRadius=xe,e.style.opacity="0",e.style.transform="scale(0.6)",e.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",i.appendIFrameStylesIfNeeded(),e};displayEmbeddedLoginPrompt(){return new Promise((e,t)=>{let r=this.getEmbeddedLoginIFrame(),o=({data:n,origin:d})=>{if(!(d!==this.config.authenticationDomain||n.eventType!==X))switch(n.messageType){case"login_method_selected":{let l=n.payload;window.removeEventListener("message",o),m.remove(),e(l);break}case"login_prompt_error":{window.removeEventListener("message",o),m.remove(),t(new Error("Error during embedded login prompt",{cause:n.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",o),m.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",o),m.remove(),t(new Error(`Unsupported message type: ${n.messageType}`));break}};window.addEventListener("message",o),m.appendOverlay(r,()=>{window.removeEventListener("message",o),m.remove(),t(new Error("Popup closed by user"));});})}};var R=class{emitter=new EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var p=async(i,e,t=!0,r=!0)=>{let o=trackFlow("passport",e,t);try{return await i(o)}catch(n){throw n instanceof Error?trackError("passport",e,n,{flowId:o.details.flowId}):o.addEvent("errored"),n}finally{r&&o.addEvent("End");}};var N=class{authManager;config;eventEmitter;constructor(e){this.config=new T(e);let t=new L(this.config);this.authManager=new _(this.config,t),this.eventEmitter=new R,track("passport","initialise");}async login(e){return p(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},o=null;try{o=await this.authManager.getUser();}catch(n){if(n instanceof Error&&!n.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",n),t)throw n;h.warn("Failed to retrieve a cached user session",n);}if(!o&&r)o=await this.authManager.forceUserRefresh();else if(!o&&!t){if(e?.useRedirectFlow)return await this.authManager.loginWithRedirect(e?.directLoginOptions),null;o=await this.authManager.login(e?.directLoginOptions);}return o&&(this.eventEmitter.emit("loggedIn",o),identify({passportId:o.profile.sub})),o},"login")}async loginWithRedirect(e){await this.authManager.loginWithRedirect(e);}async loginCallback(){return p(async()=>{let e=await this.authManager.loginCallback();if(!e)throw new Error("Login callback failed - no user returned");return this.eventEmitter.emit("loggedIn",e),identify({passportId:e.profile.sub}),e},"loginCallback")}async logout(){await p(async()=>{await this.authManager.logout(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return p(async()=>this.authManager.getUser(),"getUserInfo",!1)}async getIdToken(){return p(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return p(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.authManager.forceUserRefresh()}async loginWithPKCEFlow(e,t){return p(async()=>this.authManager.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return p(async()=>{let r=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.eventEmitter.emit("loggedIn",r),identify({passportId:r.profile.sub}),r},"loginWithPKCEFlowCallback")}async storeTokens(e){return p(async()=>{let t=await this.authManager.storeTokens(e);return this.eventEmitter.emit("loggedIn",t),identify({passportId:t.profile.sub}),t},"storeTokens")}async getLogoutUrl(){return p(async()=>(await this.authManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0),"getLogoutUrl")}async logoutSilentCallback(e){return p(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback")}getAuthManager(){return this.authManager}getConfig(){return this.config}};
391
391
 
392
- export { N as Auth, v as AuthConfiguration, M as AuthEvents, E as AuthManager, Z as MarketingConsentStatus, c as PassportError, L as PassportErrorType, B as RollupType, _ as TypedEventEmitter, U as isUserImx, w as isUserZkEvm, g as withPassportError };
392
+ export { N as Auth, T as AuthConfiguration, U as AuthEvents, _ as AuthManager, K as MarketingConsentStatus, u as PassportError, P as PassportErrorType, B as RollupType, R as TypedEventEmitter, M as isUserZkEvm, f as withPassportError };
@@ -34,12 +34,12 @@ export declare class Auth {
34
34
  */
35
35
  constructor(config: AuthModuleConfiguration);
36
36
  /**
37
- * Login with popup
38
- * Opens a popup window for authentication
39
- * @param directLoginOptions - Optional direct login options
40
- * @returns Promise that resolves with the authenticated user
37
+ * Login the user with extended options
38
+ * Supports cached sessions, silent login, redirect flow, and direct login
39
+ * @param options - Extended login options
40
+ * @returns Promise that resolves with the user or null
41
41
  */
42
- login(directLoginOptions?: DirectLoginOptions): Promise<User>;
42
+ login(options?: LoginOptions): Promise<User | null>;
43
43
  /**
44
44
  * Login with redirect
45
45
  * Redirects the page for authentication
@@ -47,13 +47,6 @@ export declare class Auth {
47
47
  * @returns Promise that resolves when redirect is initiated
48
48
  */
49
49
  loginWithRedirect(directLoginOptions?: DirectLoginOptions): Promise<void>;
50
- /**
51
- * Enhanced login method with extended options
52
- * Supports cached sessions, silent login, and redirect flow
53
- * @param options - Extended login options
54
- * @returns Promise that resolves with the user or null
55
- */
56
- loginWithOptions(options?: LoginOptions): Promise<User | null>;
57
50
  /**
58
51
  * Login callback handler
59
52
  * Call this in your redirect URI page
@@ -1,4 +1,4 @@
1
- import { DirectLoginOptions, User, DeviceTokenResponse, UserZkEvm, UserImx } from './types';
1
+ import { DirectLoginOptions, User, DeviceTokenResponse, UserZkEvm } from './types';
2
2
  import { IAuthConfiguration } from './config';
3
3
  import EmbeddedLoginPrompt from './login/embeddedLoginPrompt';
4
4
  export default class AuthManager {
@@ -15,6 +15,7 @@ export default class AuthManager {
15
15
  private static mapOidcUserToDomainModel;
16
16
  private static mapDeviceTokenResponseToOidcUser;
17
17
  private buildExtraQueryParams;
18
+ getClientId(): Promise<string>;
18
19
  loginWithRedirect(directLoginOptions?: DirectLoginOptions): Promise<void>;
19
20
  /**
20
21
  * login
@@ -57,5 +58,4 @@ export default class AuthManager {
57
58
  */
58
59
  getUser<T extends User>(typeAssertion?: (user: User) => user is T): Promise<T | null>;
59
60
  getUserZkEvm(): Promise<UserZkEvm>;
60
- getUserImx(): Promise<UserImx>;
61
61
  }
@@ -1,7 +1,7 @@
1
1
  export { Auth } from './Auth';
2
2
  export { default as AuthManager } from './authManager';
3
3
  export { AuthConfiguration, type IAuthConfiguration } from './config';
4
- export type { User, UserProfile, UserImx, UserZkEvm, DirectLoginMethod, DirectLoginOptions, LoginOptions, DeviceTokenResponse, OidcConfiguration, AuthModuleConfiguration, PopupOverlayOptions, PassportMetadata, IdTokenPayload, PKCEData, AuthEventMap, } from './types';
5
- export { isUserZkEvm, isUserImx, RollupType, MarketingConsentStatus, AuthEvents, } from './types';
4
+ export type { User, UserProfile, UserZkEvm, DirectLoginMethod, DirectLoginOptions, LoginOptions, DeviceTokenResponse, OidcConfiguration, AuthModuleConfiguration, PopupOverlayOptions, PassportMetadata, IdTokenPayload, PKCEData, AuthEventMap, } from './types';
5
+ export { isUserZkEvm, RollupType, MarketingConsentStatus, AuthEvents, } from './types';
6
6
  export { default as TypedEventEmitter } from './utils/typedEventEmitter';
7
7
  export { PassportError, PassportErrorType, withPassportError } from './errors';
@@ -10,7 +10,6 @@ export type UserProfile = {
10
10
  sub: string;
11
11
  };
12
12
  export declare enum RollupType {
13
- IMX = "imx",
14
13
  ZKEVM = "zkEvm"
15
14
  }
16
15
  export type User = {
@@ -19,22 +18,14 @@ export type User = {
19
18
  refreshToken?: string;
20
19
  profile: UserProfile;
21
20
  expired?: boolean;
22
- [RollupType.IMX]?: {
23
- ethAddress: string;
24
- starkAddress: string;
25
- userAdminAddress: string;
26
- };
27
21
  [RollupType.ZKEVM]?: {
28
22
  ethAddress: string;
29
23
  userAdminAddress: string;
30
24
  };
31
25
  };
32
26
  export type PassportMetadata = {
33
- imx_eth_address: string;
34
- imx_stark_address: string;
35
- imx_user_admin_address: string;
36
- zkevm_eth_address: string;
37
- zkevm_user_admin_address: string;
27
+ zkevm_eth_address?: string;
28
+ zkevm_user_admin_address?: string;
38
29
  };
39
30
  export interface OidcConfiguration {
40
31
  clientId: string;
@@ -72,10 +63,8 @@ export interface AuthModuleConfiguration extends OidcConfiguration {
72
63
  type WithRequired<T, K extends keyof T> = T & {
73
64
  [P in K]-?: T[P];
74
65
  };
75
- export type UserImx = WithRequired<User, RollupType.IMX>;
76
66
  export type UserZkEvm = WithRequired<User, RollupType.ZKEVM>;
77
67
  export declare const isUserZkEvm: (user: User) => user is UserZkEvm;
78
- export declare const isUserImx: (user: User) => user is UserImx;
79
68
  export type DeviceTokenResponse = {
80
69
  access_token: string;
81
70
  refresh_token?: string;
@@ -105,10 +94,14 @@ export declare enum MarketingConsentStatus {
105
94
  Unsubscribed = "unsubscribed"
106
95
  }
107
96
  export type DirectLoginOptions = {
108
- directLoginMethod: DirectLoginMethod;
109
- marketingConsentStatus?: MarketingConsentStatus;
110
- email?: string;
111
- };
97
+ marketingConsentStatus: MarketingConsentStatus;
98
+ } & ({
99
+ directLoginMethod: 'email';
100
+ email: string;
101
+ } | {
102
+ directLoginMethod: Exclude<DirectLoginMethod, 'email'>;
103
+ email?: never;
104
+ });
112
105
  /**
113
106
  * Extended login options with caching and silent login support
114
107
  */
@@ -0,0 +1,2 @@
1
+ import { Flow } from '@imtbl/metrics';
2
+ export declare const withMetricsAsync: <T>(fn: (flow: Flow) => Promise<T>, flowName: string, trackStartEvent?: boolean, trackEndEvent?: boolean) => Promise<T>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imtbl/auth",
3
- "version": "2.10.7-alpha.4",
3
+ "version": "2.10.7-alpha.5",
4
4
  "description": "Authentication SDK for Immutable",
5
5
  "author": "Immutable",
6
6
  "bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
@@ -25,8 +25,8 @@
25
25
  }
26
26
  },
27
27
  "dependencies": {
28
- "@imtbl/config": "2.10.7-alpha.4",
29
- "@imtbl/metrics": "2.10.7-alpha.4",
28
+ "@imtbl/config": "2.10.7-alpha.5",
29
+ "@imtbl/metrics": "2.10.7-alpha.5",
30
30
  "axios": "^1.6.5",
31
31
  "jwt-decode": "^3.1.2",
32
32
  "localforage": "^1.10.0",
@@ -34,7 +34,7 @@
34
34
  "uuid": "^9.0.1"
35
35
  },
36
36
  "devDependencies": {
37
- "@imtbl/toolkit": "2.10.7-alpha.4",
37
+ "@imtbl/toolkit": "2.10.7-alpha.5",
38
38
  "@types/node": "^18.14.2",
39
39
  "tsup": "^8.3.0",
40
40
  "typescript": "^5.6.2"
package/src/Auth.ts CHANGED
@@ -5,7 +5,9 @@ import {
5
5
  } from './types';
6
6
  import EmbeddedLoginPrompt from './login/embeddedLoginPrompt';
7
7
  import TypedEventEmitter from './utils/typedEventEmitter';
8
- import { identify, track } from '@imtbl/metrics';
8
+ import { withMetricsAsync } from './utils/metrics';
9
+ import { identify, track, trackError } from '@imtbl/metrics';
10
+ import logger from './utils/logger';
9
11
 
10
12
  /**
11
13
  * Public-facing Auth class for authentication
@@ -49,13 +51,48 @@ export class Auth {
49
51
  }
50
52
 
51
53
  /**
52
- * Login with popup
53
- * Opens a popup window for authentication
54
- * @param directLoginOptions - Optional direct login options
55
- * @returns Promise that resolves with the authenticated user
54
+ * Login the user with extended options
55
+ * Supports cached sessions, silent login, redirect flow, and direct login
56
+ * @param options - Extended login options
57
+ * @returns Promise that resolves with the user or null
56
58
  */
57
- async login(directLoginOptions?: DirectLoginOptions): Promise<User> {
58
- return this.authManager.login(directLoginOptions);
59
+ async login(options?: LoginOptions): Promise<User | null> {
60
+ return withMetricsAsync(async () => {
61
+ const { useCachedSession = false, useSilentLogin } = options || {};
62
+ let user: User | null = null;
63
+
64
+ // Try to get cached user
65
+ try {
66
+ user = await this.authManager.getUser();
67
+ } catch (error: any) {
68
+ if (error instanceof Error && !error.message.includes('Unknown or invalid refresh token')) {
69
+ trackError('passport', 'login', error);
70
+ }
71
+ if (useCachedSession) {
72
+ throw error;
73
+ }
74
+ logger.warn('Failed to retrieve a cached user session', error);
75
+ }
76
+
77
+ // If no cached user, try silent login or regular login
78
+ if (!user && useSilentLogin) {
79
+ user = await this.authManager.forceUserRefresh();
80
+ } else if (!user && !useCachedSession) {
81
+ if (options?.useRedirectFlow) {
82
+ await this.authManager.loginWithRedirect(options?.directLoginOptions);
83
+ return null; // Redirect doesn't return user immediately
84
+ }
85
+ user = await this.authManager.login(options?.directLoginOptions);
86
+ }
87
+
88
+ // Emit LOGGED_IN event and identify user if logged in
89
+ if (user) {
90
+ this.eventEmitter.emit(AuthEvents.LOGGED_IN, user);
91
+ identify({ passportId: user.profile.sub });
92
+ }
93
+
94
+ return user;
95
+ }, 'login');
59
96
  }
60
97
 
61
98
  /**
@@ -68,61 +105,21 @@ export class Auth {
68
105
  await this.authManager.loginWithRedirect(directLoginOptions);
69
106
  }
70
107
 
71
- /**
72
- * Enhanced login method with extended options
73
- * Supports cached sessions, silent login, and redirect flow
74
- * @param options - Extended login options
75
- * @returns Promise that resolves with the user or null
76
- */
77
- async loginWithOptions(options?: LoginOptions): Promise<User | null> {
78
- const { useCachedSession = false, useSilentLogin } = options || {};
79
- let user: User | null = null;
80
-
81
- // Try to get cached user
82
- try {
83
- user = await this.authManager.getUser();
84
- } catch (error: any) {
85
- if (useCachedSession) {
86
- throw error;
87
- }
88
- // Silently ignore errors if not requiring cached session
89
- }
90
-
91
- // If no cached user, try silent login or regular login
92
- if (!user && useSilentLogin) {
93
- user = await this.authManager.forceUserRefresh();
94
- }
95
-
96
- if (!user && !useCachedSession) {
97
- if (options?.useRedirectFlow) {
98
- await this.authManager.loginWithRedirect(options?.directLoginOptions);
99
- return null; // Redirect doesn't return user immediately
100
- }
101
- user = await this.authManager.login(options?.directLoginOptions);
102
- }
103
-
104
- // Emit LOGGED_IN event and identify user if logged in
105
- if (user) {
106
- this.eventEmitter.emit(AuthEvents.LOGGED_IN, user);
107
- identify({ passportId: user.profile.sub });
108
- }
109
-
110
- return user;
111
- }
112
-
113
108
  /**
114
109
  * Login callback handler
115
110
  * Call this in your redirect URI page
116
111
  * @returns Promise that resolves with the authenticated user
117
112
  */
118
113
  async loginCallback(): Promise<User> {
119
- const user = await this.authManager.loginCallback();
120
- if (!user) {
121
- throw new Error('Login callback failed - no user returned');
122
- }
123
- this.eventEmitter.emit(AuthEvents.LOGGED_IN, user);
124
- identify({ passportId: user.profile.sub });
125
- return user;
114
+ return withMetricsAsync(async () => {
115
+ const user = await this.authManager.loginCallback();
116
+ if (!user) {
117
+ throw new Error('Login callback failed - no user returned');
118
+ }
119
+ this.eventEmitter.emit(AuthEvents.LOGGED_IN, user);
120
+ identify({ passportId: user.profile.sub });
121
+ return user;
122
+ }, 'loginCallback');
126
123
  }
127
124
 
128
125
  /**
@@ -130,8 +127,10 @@ export class Auth {
130
127
  * @returns Promise that resolves when logout is complete
131
128
  */
132
129
  async logout(): Promise<void> {
133
- await this.authManager.logout();
134
- this.eventEmitter.emit(AuthEvents.LOGGED_OUT);
130
+ await withMetricsAsync(async () => {
131
+ await this.authManager.logout();
132
+ this.eventEmitter.emit(AuthEvents.LOGGED_OUT);
133
+ }, 'logout');
135
134
  }
136
135
 
137
136
  /**
@@ -139,7 +138,7 @@ export class Auth {
139
138
  * @returns Promise that resolves with the user or null if not authenticated
140
139
  */
141
140
  async getUser(): Promise<User | null> {
142
- return this.authManager.getUser();
141
+ return withMetricsAsync(async () => this.authManager.getUser(), 'getUserInfo', false);
143
142
  }
144
143
 
145
144
  /**
@@ -147,8 +146,10 @@ export class Auth {
147
146
  * @returns Promise that resolves with the ID token or undefined
148
147
  */
149
148
  async getIdToken(): Promise<string | undefined> {
150
- const user = await this.authManager.getUser();
151
- return user?.idToken;
149
+ return withMetricsAsync(async () => {
150
+ const user = await this.authManager.getUser();
151
+ return user?.idToken;
152
+ }, 'getIdToken', false);
152
153
  }
153
154
 
154
155
  /**
@@ -156,8 +157,10 @@ export class Auth {
156
157
  * @returns Promise that resolves with the access token or undefined
157
158
  */
158
159
  async getAccessToken(): Promise<string | undefined> {
159
- const user = await this.authManager.getUser();
160
- return user?.accessToken;
160
+ return withMetricsAsync(async () => {
161
+ const user = await this.authManager.getUser();
162
+ return user?.accessToken;
163
+ }, 'getAccessToken', false, false);
161
164
  }
162
165
 
163
166
  /**
@@ -184,7 +187,10 @@ export class Auth {
184
187
  * @returns Promise that resolves with the authorization URL
185
188
  */
186
189
  async loginWithPKCEFlow(directLoginOptions?: DirectLoginOptions, imPassportTraceId?: string): Promise<string> {
187
- return this.authManager.getPKCEAuthorizationUrl(directLoginOptions, imPassportTraceId);
190
+ return withMetricsAsync(
191
+ async () => this.authManager.getPKCEAuthorizationUrl(directLoginOptions, imPassportTraceId),
192
+ 'loginWithPKCEFlow',
193
+ );
188
194
  }
189
195
 
190
196
  /**
@@ -194,10 +200,12 @@ export class Auth {
194
200
  * @returns Promise that resolves with the authenticated user
195
201
  */
196
202
  async loginWithPKCEFlowCallback(authorizationCode: string, state: string): Promise<User> {
197
- const user = await this.authManager.loginWithPKCEFlowCallback(authorizationCode, state);
198
- this.eventEmitter.emit(AuthEvents.LOGGED_IN, user);
199
- identify({ passportId: user.profile.sub });
200
- return user;
203
+ return withMetricsAsync(async () => {
204
+ const user = await this.authManager.loginWithPKCEFlowCallback(authorizationCode, state);
205
+ this.eventEmitter.emit(AuthEvents.LOGGED_IN, user);
206
+ identify({ passportId: user.profile.sub });
207
+ return user;
208
+ }, 'loginWithPKCEFlowCallback');
201
209
  }
202
210
 
203
211
  /**
@@ -206,10 +214,12 @@ export class Auth {
206
214
  * @returns Promise that resolves with the authenticated user
207
215
  */
208
216
  async storeTokens(tokenResponse: DeviceTokenResponse): Promise<User> {
209
- const user = await this.authManager.storeTokens(tokenResponse);
210
- this.eventEmitter.emit(AuthEvents.LOGGED_IN, user);
211
- identify({ passportId: user.profile.sub });
212
- return user;
217
+ return withMetricsAsync(async () => {
218
+ const user = await this.authManager.storeTokens(tokenResponse);
219
+ this.eventEmitter.emit(AuthEvents.LOGGED_IN, user);
220
+ identify({ passportId: user.profile.sub });
221
+ return user;
222
+ }, 'storeTokens');
213
223
  }
214
224
 
215
225
  /**
@@ -217,10 +227,12 @@ export class Auth {
217
227
  * @returns Promise that resolves with the logout URL or undefined if not available
218
228
  */
219
229
  async getLogoutUrl(): Promise<string | undefined> {
220
- await this.authManager.removeUser();
221
- this.eventEmitter.emit(AuthEvents.LOGGED_OUT);
222
- const url = await this.authManager.getLogoutUrl();
223
- return url || undefined;
230
+ return withMetricsAsync(async () => {
231
+ await this.authManager.removeUser();
232
+ this.eventEmitter.emit(AuthEvents.LOGGED_OUT);
233
+ const url = await this.authManager.getLogoutUrl();
234
+ return url || undefined;
235
+ }, 'getLogoutUrl');
224
236
  }
225
237
 
226
238
  /**
@@ -229,7 +241,7 @@ export class Auth {
229
241
  * @returns Promise that resolves when callback is handled
230
242
  */
231
243
  async logoutSilentCallback(url: string): Promise<void> {
232
- return this.authManager.logoutSilentCallback(url);
244
+ return withMetricsAsync(() => this.authManager.logoutSilentCallback(url), 'logoutSilentCallback');
233
245
  }
234
246
 
235
247
  /**
@@ -24,8 +24,6 @@ import {
24
24
  OidcConfiguration,
25
25
  UserZkEvm,
26
26
  isUserZkEvm,
27
- UserImx,
28
- isUserImx,
29
27
  } from './types';
30
28
  import { IAuthConfiguration } from './config';
31
29
  import LoginPopupOverlay from './overlay/loginPopupOverlay';
@@ -148,17 +146,10 @@ export default class AuthManager {
148
146
  nickname: oidcUser.profile.nickname,
149
147
  },
150
148
  };
151
- if (passport?.imx_eth_address) {
152
- user.imx = {
153
- ethAddress: passport.imx_eth_address,
154
- starkAddress: passport.imx_stark_address,
155
- userAdminAddress: passport.imx_user_admin_address,
156
- };
157
- }
158
- if (passport?.zkevm_eth_address) {
149
+ if (passport?.zkevm_eth_address && passport?.zkevm_user_admin_address) {
159
150
  user.zkEvm = {
160
- ethAddress: passport?.zkevm_eth_address,
161
- userAdminAddress: passport?.zkevm_user_admin_address,
151
+ ethAddress: passport.zkevm_eth_address,
152
+ userAdminAddress: passport.zkevm_user_admin_address,
162
153
  };
163
154
  }
164
155
  return user;
@@ -220,6 +211,10 @@ export default class AuthManager {
220
211
  return params;
221
212
  }
222
213
 
214
+ public async getClientId(): Promise<string> {
215
+ return this.config.oidcConfiguration.clientId;
216
+ }
217
+
223
218
  public async loginWithRedirect(directLoginOptions?: DirectLoginOptions): Promise<void> {
224
219
  await this.userManager.clearStaleState();
225
220
  return withPassportError<void>(async () => {
@@ -645,13 +640,4 @@ export default class AuthManager {
645
640
 
646
641
  return user;
647
642
  }
648
-
649
- public async getUserImx(): Promise<UserImx> {
650
- const user = await this.getUser(isUserImx);
651
- if (!user) {
652
- throw new Error('Failed to obtain a User with the required IMX attributes');
653
- }
654
-
655
- return user;
656
- }
657
643
  }
package/src/index.ts CHANGED
@@ -11,7 +11,6 @@ export { AuthConfiguration, type IAuthConfiguration } from './config';
11
11
  export type {
12
12
  User,
13
13
  UserProfile,
14
- UserImx,
15
14
  UserZkEvm,
16
15
  DirectLoginMethod,
17
16
  DirectLoginOptions,
@@ -26,7 +25,7 @@ export type {
26
25
  AuthEventMap,
27
26
  } from './types';
28
27
  export {
29
- isUserZkEvm, isUserImx, RollupType, MarketingConsentStatus, AuthEvents,
28
+ isUserZkEvm, RollupType, MarketingConsentStatus, AuthEvents,
30
29
  } from './types';
31
30
 
32
31
  // Export TypedEventEmitter
package/src/types.ts CHANGED
@@ -12,7 +12,6 @@ export type UserProfile = {
12
12
  };
13
13
 
14
14
  export enum RollupType {
15
- IMX = 'imx',
16
15
  ZKEVM = 'zkEvm',
17
16
  }
18
17
 
@@ -22,11 +21,6 @@ export type User = {
22
21
  refreshToken?: string;
23
22
  profile: UserProfile;
24
23
  expired?: boolean;
25
- [RollupType.IMX]?: {
26
- ethAddress: string;
27
- starkAddress: string;
28
- userAdminAddress: string;
29
- };
30
24
  [RollupType.ZKEVM]?: {
31
25
  ethAddress: string;
32
26
  userAdminAddress: string;
@@ -34,11 +28,8 @@ export type User = {
34
28
  };
35
29
 
36
30
  export type PassportMetadata = {
37
- imx_eth_address: string;
38
- imx_stark_address: string;
39
- imx_user_admin_address: string;
40
- zkevm_eth_address: string;
41
- zkevm_user_admin_address: string;
31
+ zkevm_eth_address?: string;
32
+ zkevm_user_admin_address?: string;
42
33
  };
43
34
 
44
35
  export interface OidcConfiguration {
@@ -82,11 +73,9 @@ export interface AuthModuleConfiguration extends OidcConfiguration {
82
73
 
83
74
  type WithRequired<T, K extends keyof T> = T & { [P in K]-?: T[P] };
84
75
 
85
- export type UserImx = WithRequired<User, RollupType.IMX>;
86
76
  export type UserZkEvm = WithRequired<User, RollupType.ZKEVM>;
87
77
 
88
78
  export const isUserZkEvm = (user: User): user is UserZkEvm => !!user[RollupType.ZKEVM];
89
- export const isUserImx = (user: User): user is UserImx => !!user[RollupType.IMX];
90
79
 
91
80
  export type DeviceTokenResponse = {
92
81
  access_token: string;
@@ -122,10 +111,11 @@ export enum MarketingConsentStatus {
122
111
  }
123
112
 
124
113
  export type DirectLoginOptions = {
125
- directLoginMethod: DirectLoginMethod;
126
- marketingConsentStatus?: MarketingConsentStatus;
127
- email?: string;
128
- };
114
+ marketingConsentStatus: MarketingConsentStatus;
115
+ } & (
116
+ | { directLoginMethod: 'email'; email: string }
117
+ | { directLoginMethod: Exclude<DirectLoginMethod, 'email'>; email?: never }
118
+ );
129
119
 
130
120
  /**
131
121
  * Extended login options with caching and silent login support
@@ -0,0 +1,29 @@
1
+ import { Flow, trackError, trackFlow } from '@imtbl/metrics';
2
+
3
+ export const withMetricsAsync = async <T>(
4
+ fn: (flow: Flow) => Promise<T>,
5
+ flowName: string,
6
+ trackStartEvent: boolean = true,
7
+ trackEndEvent: boolean = true,
8
+ ): Promise<T> => {
9
+ const flow: Flow = trackFlow(
10
+ 'passport',
11
+ flowName,
12
+ trackStartEvent,
13
+ );
14
+
15
+ try {
16
+ return await fn(flow);
17
+ } catch (error) {
18
+ if (error instanceof Error) {
19
+ trackError('passport', flowName, error, { flowId: flow.details.flowId });
20
+ } else {
21
+ flow.addEvent('errored');
22
+ }
23
+ throw error;
24
+ } finally {
25
+ if (trackEndEvent) {
26
+ flow.addEvent('End');
27
+ }
28
+ }
29
+ };