@imtbl/auth 2.12.5-alpha.0 → 2.12.5-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +6 -6
- package/dist/node/index.cjs +9 -9
- package/dist/node/index.js +6 -6
- package/dist/types/index.d.ts +1 -1
- package/dist/types/types.d.ts +15 -1
- package/package.json +3 -3
- package/src/Auth.test.ts +85 -0
- package/src/Auth.ts +13 -0
- package/src/index.ts +1 -0
- package/src/types.ts +16 -0
package/dist/browser/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { UserManager, User, ErrorTimeout, ErrorResponse, InMemoryWebStorage, Web
|
|
|
2
2
|
import cn from 'localforage';
|
|
3
3
|
import { track, identify, getDetail, Detail, trackFlow, trackError } from '@imtbl/metrics';
|
|
4
4
|
|
|
5
|
-
function Ae(c){throw new Error("Node.js process "+c+" is not supported by JSPM core outside of Node.js")}var K=[],te=!1,j,he=-1;function Pt(){!te||!j||(te=!1,j.length?K=j.concat(K):he=-1,K.length&&Ke());}function Ke(){if(!te){var c=setTimeout(Pt,0);te=!0;for(var n=K.length;n;){for(j=K,K=[];++he<n;)j&&j[he].run();he=-1,n=K.length;}j=null,te=!1,clearTimeout(c);}}function Ut(c){var n=new Array(arguments.length-1);if(arguments.length>1)for(var a=1;a<arguments.length;a++)n[a-1]=arguments[a];K.push(new We(c,n)),K.length===1&&!te&&setTimeout(Ke,0);}function We(c,n){this.fun=c,this.array=n;}We.prototype.run=function(){this.fun.apply(null,this.array);};var Bt="browser",kt="x64",bt="browser",xt={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},St=["/usr/bin/node"],Mt=[],Nt="v16.8.0",Dt={},Ft=function(c,n){console.warn((n?n+": ":"")+c);},Ht=function(c){Ae("binding");},Vt=function(c){return 0},Gt=function(){return "/"},$t=function(c){},Kt={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};function b(){}var Wt=b,Zt=[];function Yt(c){Ae("_linkedBinding");}var zt={},Jt=!1,jt={};function qt(c){Ae("dlopen");}function Xt(){return []}function Qt(){return []}var er=b,tr=b,Oe=function(){return {}},rr=Oe,nr=Oe,ir=b,or=b,sr=b,ar={};function lr(c,n){if(!c)throw new Error(n||"assertion error")}var ur={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},cr=b,pr=b;function dr(){return !1}var hr=b,fr=b,mr=b,gr=b,Er=b,yr=void 0,wr=void 0,_r=void 0,Cr=b,Rr=2,Ir=1,Tr="/bin/usr/node",vr=9229,Ar="node",Or=[],Lr=b,Z={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};Z.now===void 0&&(Ie=Date.now(),Z.timing&&Z.timing.navigationStart&&(Ie=Z.timing.navigationStart),Z.now=()=>Date.now()-Ie);var Ie;function Pr(){return Z.now()/1e3}var Te=1e9;function ve(c){var n=Math.floor((Date.now()-Z.now())*.001),a=Z.now()*.001,u=Math.floor(a)+n,d=Math.floor(a%1*1e9);return c&&(u=u-c[0],d=d-c[1],d<0&&(u--,d+=Te)),[u,d]}ve.bigint=function(c){var n=ve(c);return typeof BigInt>"u"?n[0]*Te+n[1]:BigInt(n[0]*Te)+BigInt(n[1])};var Ur=10,Br={},kr=0;function Y(){return v}var br=Y,xr=Y,Sr=Y,Mr=Y,Nr=Y,Dr=b,Fr=Y,Hr=Y;function Vr(c){return []}var v={version:Nt,versions:Dt,arch:kt,platform:bt,release:Kt,_rawDebug:Wt,moduleLoadList:Zt,binding:Ht,_linkedBinding:Yt,_events:Br,_eventsCount:kr,_maxListeners:Ur,on:Y,addListener:br,once:xr,off:Sr,removeListener:Mr,removeAllListeners:Nr,emit:Dr,prependListener:Fr,prependOnceListener:Hr,listeners:Vr,domain:zt,_exiting:Jt,config:jt,dlopen:qt,uptime:Pr,_getActiveRequests:Xt,_getActiveHandles:Qt,reallyExit:er,_kill:tr,cpuUsage:Oe,resourceUsage:rr,memoryUsage:nr,kill:ir,exit:or,openStdin:sr,allowedNodeEnvironmentFlags:ar,assert:lr,features:ur,_fatalExceptions:cr,setUncaughtExceptionCaptureCallback:pr,hasUncaughtExceptionCaptureCallback:dr,emitWarning:Ft,nextTick:Ut,_tickCallback:hr,_debugProcess:fr,_debugEnd:mr,_startProfilerIdleNotifier:gr,_stopProfilerIdleNotifier:Er,stdout:yr,stdin:_r,stderr:wr,abort:Cr,umask:Vt,chdir:$t,cwd:Gt,env:xt,title:Bt,argv:St,execArgv:Mt,pid:Rr,ppid:Ir,execPath:Tr,debugPort:vr,hrtime:ve,argv0:Ar,_preload_modules:Or,setSourceMapsEnabled:Lr};var se={},Ze=!1;function Gr(){if(Ze)return se;Ze=!0,se.byteLength=y,se.toByteArray=k,se.fromByteArray=F;for(var c=[],n=[],a=typeof Uint8Array<"u"?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=0,h=u.length;d<h;++d)c[d]=u[d],n[u.charCodeAt(d)]=d;n[45]=62,n[95]=63;function s(f){var E=f.length;if(E%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var _=f.indexOf("=");_===-1&&(_=E);var U=_===E?0:4-_%4;return [_,U]}function y(f){var E=s(f),_=E[0],U=E[1];return (_+U)*3/4-U}function T(f,E,_){return (E+_)*3/4-_}function k(f){var E,_=s(f),U=_[0],S=_[1],P=new a(T(f,U,S)),M=0,D=S>0?U-4:U,x;for(x=0;x<D;x+=4)E=n[f.charCodeAt(x)]<<18|n[f.charCodeAt(x+1)]<<12|n[f.charCodeAt(x+2)]<<6|n[f.charCodeAt(x+3)],P[M++]=E>>16&255,P[M++]=E>>8&255,P[M++]=E&255;return S===2&&(E=n[f.charCodeAt(x)]<<2|n[f.charCodeAt(x+1)]>>4,P[M++]=E&255),S===1&&(E=n[f.charCodeAt(x)]<<10|n[f.charCodeAt(x+1)]<<4|n[f.charCodeAt(x+2)]>>2,P[M++]=E>>8&255,P[M++]=E&255),P}function m(f){return c[f>>18&63]+c[f>>12&63]+c[f>>6&63]+c[f&63]}function R(f,E,_){for(var U,S=[],P=E;P<_;P+=3)U=(f[P]<<16&16711680)+(f[P+1]<<8&65280)+(f[P+2]&255),S.push(m(U));return S.join("")}function F(f){for(var E,_=f.length,U=_%3,S=[],P=16383,M=0,D=_-U;M<D;M+=P)S.push(R(f,M,M+P>D?D:M+P));return U===1?(E=f[_-1],S.push(c[E>>2]+c[E<<4&63]+"==")):U===2&&(E=(f[_-2]<<8)+f[_-1],S.push(c[E>>10]+c[E>>4&63]+c[E<<2&63]+"=")),S.join("")}return se}var fe={},Ye=!1;function $r(){if(Ye)return fe;Ye=!0;return fe.read=function(c,n,a,u,d){var h,s,y=d*8-u-1,T=(1<<y)-1,k=T>>1,m=-7,R=a?d-1:0,F=a?-1:1,f=c[n+R];for(R+=F,h=f&(1<<-m)-1,f>>=-m,m+=y;m>0;h=h*256+c[n+R],R+=F,m-=8);for(s=h&(1<<-m)-1,h>>=-m,m+=u;m>0;s=s*256+c[n+R],R+=F,m-=8);if(h===0)h=1-k;else {if(h===T)return s?NaN:(f?-1:1)*(1/0);s=s+Math.pow(2,u),h=h-k;}return (f?-1:1)*s*Math.pow(2,h-u)},fe.write=function(c,n,a,u,d,h){var s,y,T,k=h*8-d-1,m=(1<<k)-1,R=m>>1,F=d===23?Math.pow(2,-24)-Math.pow(2,-77):0,f=u?0:h-1,E=u?1:-1,_=n<0||n===0&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(y=isNaN(n)?1:0,s=m):(s=Math.floor(Math.log(n)/Math.LN2),n*(T=Math.pow(2,-s))<1&&(s--,T*=2),s+R>=1?n+=F/T:n+=F*Math.pow(2,1-R),n*T>=2&&(s++,T/=2),s+R>=m?(y=0,s=m):s+R>=1?(y=(n*T-1)*Math.pow(2,d),s=s+R):(y=n*Math.pow(2,R-1)*Math.pow(2,d),s=0));d>=8;c[a+f]=y&255,f+=E,y/=256,d-=8);for(s=s<<d|y,k+=d;k>0;c[a+f]=s&255,f+=E,s/=256,k-=8);c[a+f-E]|=_*128;},fe}var q={},ze=!1;function Kr(){if(ze)return q;ze=!0;let c=Gr(),n=$r(),a=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;q.Buffer=s,q.SlowBuffer=S,q.INSPECT_MAX_BYTES=50;let u=2147483647;q.kMaxLength=u,s.TYPED_ARRAY_SUPPORT=d(),!s.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function d(){try{let r=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(r,e),r.foo()===42}catch{return !1}}Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function h(r){if(r>u)throw new RangeError('The value "'+r+'" is invalid for option "size"');let e=new Uint8Array(r);return Object.setPrototypeOf(e,s.prototype),e}function s(r,e,t){if(typeof r=="number"){if(typeof e=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return m(r)}return y(r,e,t)}s.poolSize=8192;function y(r,e,t){if(typeof r=="string")return R(r,e);if(ArrayBuffer.isView(r))return f(r);if(r==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);if(V(r,ArrayBuffer)||r&&V(r.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(V(r,SharedArrayBuffer)||r&&V(r.buffer,SharedArrayBuffer)))return E(r,e,t);if(typeof r=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let i=r.valueOf&&r.valueOf();if(i!=null&&i!==r)return s.from(i,e,t);let o=_(r);if(o)return o;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof r[Symbol.toPrimitive]=="function")return s.from(r[Symbol.toPrimitive]("string"),e,t);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r)}s.from=function(r,e,t){return y(r,e,t)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function T(r){if(typeof r!="number")throw new TypeError('"size" argument must be of type number');if(r<0)throw new RangeError('The value "'+r+'" is invalid for option "size"')}function k(r,e,t){return T(r),r<=0?h(r):e!==void 0?typeof t=="string"?h(r).fill(e,t):h(r).fill(e):h(r)}s.alloc=function(r,e,t){return k(r,e,t)};function m(r){return T(r),h(r<0?0:U(r)|0)}s.allocUnsafe=function(r){return m(r)},s.allocUnsafeSlow=function(r){return m(r)};function R(r,e){if((typeof e!="string"||e==="")&&(e="utf8"),!s.isEncoding(e))throw new TypeError("Unknown encoding: "+e);let t=P(r,e)|0,i=h(t),o=i.write(r,e);return o!==t&&(i=i.slice(0,o)),i}function F(r){let e=r.length<0?0:U(r.length)|0,t=h(e);for(let i=0;i<e;i+=1)t[i]=r[i]&255;return t}function f(r){if(V(r,Uint8Array)){let e=new Uint8Array(r);return E(e.buffer,e.byteOffset,e.byteLength)}return F(r)}function E(r,e,t){if(e<0||r.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(r.byteLength<e+(t||0))throw new RangeError('"length" is outside of buffer bounds');let i;return e===void 0&&t===void 0?i=new Uint8Array(r):t===void 0?i=new Uint8Array(r,e):i=new Uint8Array(r,e,t),Object.setPrototypeOf(i,s.prototype),i}function _(r){if(s.isBuffer(r)){let e=U(r.length)|0,t=h(e);return t.length===0||r.copy(t,0,0,e),t}if(r.length!==void 0)return typeof r.length!="number"||Re(r.length)?h(0):F(r);if(r.type==="Buffer"&&Array.isArray(r.data))return F(r.data)}function U(r){if(r>=u)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u.toString(16)+" bytes");return r|0}function S(r){return +r!=r&&(r=0),s.alloc(+r)}s.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==s.prototype},s.compare=function(e,t){if(V(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),V(t,Uint8Array)&&(t=s.from(t,t.offset,t.byteLength)),!s.isBuffer(e)||!s.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let i=e.length,o=t.length;for(let l=0,p=Math.min(i,o);l<p;++l)if(e[l]!==t[l]){i=e[l],o=t[l];break}return i<o?-1:o<i?1:0},s.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return !0;default:return !1}},s.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(e.length===0)return s.alloc(0);let i;if(t===void 0)for(t=0,i=0;i<e.length;++i)t+=e[i].length;let o=s.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){let p=e[i];if(V(p,Uint8Array))l+p.length>o.length?(s.isBuffer(p)||(p=s.from(p)),p.copy(o,l)):Uint8Array.prototype.set.call(o,p,l);else if(s.isBuffer(p))p.copy(o,l);else throw new TypeError('"list" argument must be an Array of Buffers');l+=p.length;}return o};function P(r,e){if(s.isBuffer(r))return r.length;if(ArrayBuffer.isView(r)||V(r,ArrayBuffer))return r.byteLength;if(typeof r!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof r);let t=r.length,i=arguments.length>2&&arguments[2]===!0;if(!i&&t===0)return 0;let o=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":return Ce(r).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return t*2;case"hex":return t>>>1;case"base64":return $e(r).length;default:if(o)return i?-1:Ce(r).length;e=(""+e).toLowerCase(),o=!0;}}s.byteLength=P;function M(r,e,t){let i=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((t===void 0||t>this.length)&&(t=this.length),t<=0)||(t>>>=0,e>>>=0,t<=e))return "";for(r||(r="utf8");;)switch(r){case"hex":return _t(this,e,t);case"utf8":case"utf-8":return xe(this,e,t);case"ascii":return yt(this,e,t);case"latin1":case"binary":return wt(this,e,t);case"base64":return gt(this,e,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ct(this,e,t);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(r+"").toLowerCase(),i=!0;}}s.prototype._isBuffer=!0;function D(r,e,t){let i=r[e];r[e]=r[t],r[t]=i;}s.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;t<e;t+=2)D(this,t,t+1);return this},s.prototype.swap32=function(){let e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let t=0;t<e;t+=4)D(this,t,t+3),D(this,t+1,t+2);return this},s.prototype.swap64=function(){let e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let t=0;t<e;t+=8)D(this,t,t+7),D(this,t+1,t+6),D(this,t+2,t+5),D(this,t+3,t+4);return this},s.prototype.toString=function(){let e=this.length;return e===0?"":arguments.length===0?xe(this,0,e):M.apply(this,arguments)},s.prototype.toLocaleString=s.prototype.toString,s.prototype.equals=function(e){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?!0:s.compare(this,e)===0},s.prototype.inspect=function(){let e="",t=q.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),"<Buffer "+e+">"},a&&(s.prototype[a]=s.prototype.inspect),s.prototype.compare=function(e,t,i,o,l){if(V(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),!s.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(t===void 0&&(t=0),i===void 0&&(i=e?e.length:0),o===void 0&&(o=0),l===void 0&&(l=this.length),t<0||i>e.length||o<0||l>this.length)throw new RangeError("out of range index");if(o>=l&&t>=i)return 0;if(o>=l)return -1;if(t>=i)return 1;if(t>>>=0,i>>>=0,o>>>=0,l>>>=0,this===e)return 0;let p=l-o,g=i-t,A=Math.min(p,g),I=this.slice(o,l),O=e.slice(t,i);for(let w=0;w<A;++w)if(I[w]!==O[w]){p=I[w],g=O[w];break}return p<g?-1:g<p?1:0};function x(r,e,t,i,o){if(r.length===0)return -1;if(typeof t=="string"?(i=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,Re(t)&&(t=o?0:r.length-1),t<0&&(t=r.length+t),t>=r.length){if(o)return -1;t=r.length-1;}else if(t<0)if(o)t=0;else return -1;if(typeof e=="string"&&(e=s.from(e,i)),s.isBuffer(e))return e.length===0?-1:C(r,e,t,i,o);if(typeof e=="number")return e=e&255,typeof Uint8Array.prototype.indexOf=="function"?o?Uint8Array.prototype.indexOf.call(r,e,t):Uint8Array.prototype.lastIndexOf.call(r,e,t):C(r,[e],t,i,o);throw new TypeError("val must be string, number or Buffer")}function C(r,e,t,i,o){let l=1,p=r.length,g=e.length;if(i!==void 0&&(i=String(i).toLowerCase(),i==="ucs2"||i==="ucs-2"||i==="utf16le"||i==="utf-16le")){if(r.length<2||e.length<2)return -1;l=2,p/=2,g/=2,t/=2;}function A(O,w){return l===1?O[w]:O.readUInt16BE(w*l)}let I;if(o){let O=-1;for(I=t;I<p;I++)if(A(r,I)===A(e,O===-1?0:I-O)){if(O===-1&&(O=I),I-O+1===g)return O*l}else O!==-1&&(I-=I-O),O=-1;}else for(t+g>p&&(t=p-g),I=t;I>=0;I--){let O=!0;for(let w=0;w<g;w++)if(A(r,I+w)!==A(e,w)){O=!1;break}if(O)return I}return -1}s.prototype.includes=function(e,t,i){return this.indexOf(e,t,i)!==-1},s.prototype.indexOf=function(e,t,i){return x(this,e,t,i,!0)},s.prototype.lastIndexOf=function(e,t,i){return x(this,e,t,i,!1)};function pt(r,e,t,i){t=Number(t)||0;let o=r.length-t;i?(i=Number(i),i>o&&(i=o)):i=o;let l=e.length;i>l/2&&(i=l/2);let p;for(p=0;p<i;++p){let g=parseInt(e.substr(p*2,2),16);if(Re(g))return p;r[t+p]=g;}return p}function dt(r,e,t,i){return de(Ce(e,r.length-t),r,t,i)}function ht(r,e,t,i){return de(vt(e),r,t,i)}function ft(r,e,t,i){return de($e(e),r,t,i)}function mt(r,e,t,i){return de(At(e,r.length-t),r,t,i)}s.prototype.write=function(e,t,i,o){if(t===void 0)o="utf8",i=this.length,t=0;else if(i===void 0&&typeof t=="string")o=t,i=this.length,t=0;else if(isFinite(t))t=t>>>0,isFinite(i)?(i=i>>>0,o===void 0&&(o="utf8")):(o=i,i=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let l=this.length-t;if((i===void 0||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");o||(o="utf8");let p=!1;for(;;)switch(o){case"hex":return pt(this,e,t,i);case"utf8":case"utf-8":return dt(this,e,t,i);case"ascii":case"latin1":case"binary":return ht(this,e,t,i);case"base64":return ft(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return mt(this,e,t,i);default:if(p)throw new TypeError("Unknown encoding: "+o);o=(""+o).toLowerCase(),p=!0;}},s.prototype.toJSON=function(){return {type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function gt(r,e,t){return e===0&&t===r.length?c.fromByteArray(r):c.fromByteArray(r.slice(e,t))}function xe(r,e,t){t=Math.min(r.length,t);let i=[],o=e;for(;o<t;){let l=r[o],p=null,g=l>239?4:l>223?3:l>191?2:1;if(o+g<=t){let A,I,O,w;switch(g){case 1:l<128&&(p=l);break;case 2:A=r[o+1],(A&192)===128&&(w=(l&31)<<6|A&63,w>127&&(p=w));break;case 3:A=r[o+1],I=r[o+2],(A&192)===128&&(I&192)===128&&(w=(l&15)<<12|(A&63)<<6|I&63,w>2047&&(w<55296||w>57343)&&(p=w));break;case 4:A=r[o+1],I=r[o+2],O=r[o+3],(A&192)===128&&(I&192)===128&&(O&192)===128&&(w=(l&15)<<18|(A&63)<<12|(I&63)<<6|O&63,w>65535&&w<1114112&&(p=w));}}p===null?(p=65533,g=1):p>65535&&(p-=65536,i.push(p>>>10&1023|55296),p=56320|p&1023),i.push(p),o+=g;}return Et(i)}let Se=4096;function Et(r){let e=r.length;if(e<=Se)return String.fromCharCode.apply(String,r);let t="",i=0;for(;i<e;)t+=String.fromCharCode.apply(String,r.slice(i,i+=Se));return t}function yt(r,e,t){let i="";t=Math.min(r.length,t);for(let o=e;o<t;++o)i+=String.fromCharCode(r[o]&127);return i}function wt(r,e,t){let i="";t=Math.min(r.length,t);for(let o=e;o<t;++o)i+=String.fromCharCode(r[o]);return i}function _t(r,e,t){let i=r.length;(!e||e<0)&&(e=0),(!t||t<0||t>i)&&(t=i);let o="";for(let l=e;l<t;++l)o+=Ot[r[l]];return o}function Ct(r,e,t){let i=r.slice(e,t),o="";for(let l=0;l<i.length-1;l+=2)o+=String.fromCharCode(i[l]+i[l+1]*256);return o}s.prototype.slice=function(e,t){let i=this.length;e=~~e,t=t===void 0?i:~~t,e<0?(e+=i,e<0&&(e=0)):e>i&&(e=i),t<0?(t+=i,t<0&&(t=0)):t>i&&(t=i),t<e&&(t=e);let o=this.subarray(e,t);return Object.setPrototypeOf(o,s.prototype),o};function B(r,e,t){if(r%1!==0||r<0)throw new RangeError("offset is not uint");if(r+e>t)throw new RangeError("Trying to access beyond buffer length")}s.prototype.readUintLE=s.prototype.readUIntLE=function(e,t,i){e=e>>>0,t=t>>>0,i||B(e,t,this.length);let o=this[e],l=1,p=0;for(;++p<t&&(l*=256);)o+=this[e+p]*l;return o},s.prototype.readUintBE=s.prototype.readUIntBE=function(e,t,i){e=e>>>0,t=t>>>0,i||B(e,t,this.length);let o=this[e+--t],l=1;for(;t>0&&(l*=256);)o+=this[e+--t]*l;return o},s.prototype.readUint8=s.prototype.readUInt8=function(e,t){return e=e>>>0,t||B(e,1,this.length),this[e]},s.prototype.readUint16LE=s.prototype.readUInt16LE=function(e,t){return e=e>>>0,t||B(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUint16BE=s.prototype.readUInt16BE=function(e,t){return e=e>>>0,t||B(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUint32LE=s.prototype.readUInt32LE=function(e,t){return e=e>>>0,t||B(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216},s.prototype.readUint32BE=s.prototype.readUInt32BE=function(e,t){return e=e>>>0,t||B(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readBigUInt64LE=W(function(e){e=e>>>0,ee(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&oe(e,this.length-8);let o=t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24,l=this[++e]+this[++e]*2**8+this[++e]*2**16+i*2**24;return BigInt(o)+(BigInt(l)<<BigInt(32))}),s.prototype.readBigUInt64BE=W(function(e){e=e>>>0,ee(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&oe(e,this.length-8);let o=t*2**24+this[++e]*2**16+this[++e]*2**8+this[++e],l=this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+i;return (BigInt(o)<<BigInt(32))+BigInt(l)}),s.prototype.readIntLE=function(e,t,i){e=e>>>0,t=t>>>0,i||B(e,t,this.length);let o=this[e],l=1,p=0;for(;++p<t&&(l*=256);)o+=this[e+p]*l;return l*=128,o>=l&&(o-=Math.pow(2,8*t)),o},s.prototype.readIntBE=function(e,t,i){e=e>>>0,t=t>>>0,i||B(e,t,this.length);let o=t,l=1,p=this[e+--o];for(;o>0&&(l*=256);)p+=this[e+--o]*l;return l*=128,p>=l&&(p-=Math.pow(2,8*t)),p},s.prototype.readInt8=function(e,t){return e=e>>>0,t||B(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]},s.prototype.readInt16LE=function(e,t){e=e>>>0,t||B(e,2,this.length);let i=this[e]|this[e+1]<<8;return i&32768?i|4294901760:i},s.prototype.readInt16BE=function(e,t){e=e>>>0,t||B(e,2,this.length);let i=this[e+1]|this[e]<<8;return i&32768?i|4294901760:i},s.prototype.readInt32LE=function(e,t){return e=e>>>0,t||B(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return e=e>>>0,t||B(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readBigInt64LE=W(function(e){e=e>>>0,ee(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&oe(e,this.length-8);let o=this[e+4]+this[e+5]*2**8+this[e+6]*2**16+(i<<24);return (BigInt(o)<<BigInt(32))+BigInt(t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24)}),s.prototype.readBigInt64BE=W(function(e){e=e>>>0,ee(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&oe(e,this.length-8);let o=(t<<24)+this[++e]*2**16+this[++e]*2**8+this[++e];return (BigInt(o)<<BigInt(32))+BigInt(this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+i)}),s.prototype.readFloatLE=function(e,t){return e=e>>>0,t||B(e,4,this.length),n.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return e=e>>>0,t||B(e,4,this.length),n.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return e=e>>>0,t||B(e,8,this.length),n.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return e=e>>>0,t||B(e,8,this.length),n.read(this,e,!1,52,8)};function N(r,e,t,i,o,l){if(!s.isBuffer(r))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||e<l)throw new RangeError('"value" argument is out of bounds');if(t+i>r.length)throw new RangeError("Index out of range")}s.prototype.writeUintLE=s.prototype.writeUIntLE=function(e,t,i,o){if(e=+e,t=t>>>0,i=i>>>0,!o){let g=Math.pow(2,8*i)-1;N(this,e,t,i,g,0);}let l=1,p=0;for(this[t]=e&255;++p<i&&(l*=256);)this[t+p]=e/l&255;return t+i},s.prototype.writeUintBE=s.prototype.writeUIntBE=function(e,t,i,o){if(e=+e,t=t>>>0,i=i>>>0,!o){let g=Math.pow(2,8*i)-1;N(this,e,t,i,g,0);}let l=i-1,p=1;for(this[t+l]=e&255;--l>=0&&(p*=256);)this[t+l]=e/p&255;return t+i},s.prototype.writeUint8=s.prototype.writeUInt8=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,1,255,0),this[t]=e&255,t+1},s.prototype.writeUint16LE=s.prototype.writeUInt16LE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,2,65535,0),this[t]=e&255,this[t+1]=e>>>8,t+2},s.prototype.writeUint16BE=s.prototype.writeUInt16BE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=e&255,t+2},s.prototype.writeUint32LE=s.prototype.writeUInt32LE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4},s.prototype.writeUint32BE=s.prototype.writeUInt32BE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function Me(r,e,t,i,o){Ge(e,i,o,r,t,7);let l=Number(e&BigInt(4294967295));r[t++]=l,l=l>>8,r[t++]=l,l=l>>8,r[t++]=l,l=l>>8,r[t++]=l;let p=Number(e>>BigInt(32)&BigInt(4294967295));return r[t++]=p,p=p>>8,r[t++]=p,p=p>>8,r[t++]=p,p=p>>8,r[t++]=p,t}function Ne(r,e,t,i,o){Ge(e,i,o,r,t,7);let l=Number(e&BigInt(4294967295));r[t+7]=l,l=l>>8,r[t+6]=l,l=l>>8,r[t+5]=l,l=l>>8,r[t+4]=l;let p=Number(e>>BigInt(32)&BigInt(4294967295));return r[t+3]=p,p=p>>8,r[t+2]=p,p=p>>8,r[t+1]=p,p=p>>8,r[t]=p,t+8}s.prototype.writeBigUInt64LE=W(function(e,t=0){return Me(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeBigUInt64BE=W(function(e,t=0){return Ne(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeIntLE=function(e,t,i,o){if(e=+e,t=t>>>0,!o){let A=Math.pow(2,8*i-1);N(this,e,t,i,A-1,-A);}let l=0,p=1,g=0;for(this[t]=e&255;++l<i&&(p*=256);)e<0&&g===0&&this[t+l-1]!==0&&(g=1),this[t+l]=(e/p>>0)-g&255;return t+i},s.prototype.writeIntBE=function(e,t,i,o){if(e=+e,t=t>>>0,!o){let A=Math.pow(2,8*i-1);N(this,e,t,i,A-1,-A);}let l=i-1,p=1,g=0;for(this[t+l]=e&255;--l>=0&&(p*=256);)e<0&&g===0&&this[t+l+1]!==0&&(g=1),this[t+l]=(e/p>>0)-g&255;return t+i},s.prototype.writeInt8=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=e&255,t+1},s.prototype.writeInt16LE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,2,32767,-32768),this[t]=e&255,this[t+1]=e>>>8,t+2},s.prototype.writeInt16BE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=e&255,t+2},s.prototype.writeInt32LE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,4,2147483647,-2147483648),this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},s.prototype.writeInt32BE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4},s.prototype.writeBigInt64LE=W(function(e,t=0){return Me(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),s.prototype.writeBigInt64BE=W(function(e,t=0){return Ne(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function De(r,e,t,i,o,l){if(t+i>r.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function Fe(r,e,t,i,o){return e=+e,t=t>>>0,o||De(r,e,t,4),n.write(r,e,t,i,23,4),t+4}s.prototype.writeFloatLE=function(e,t,i){return Fe(this,e,t,!0,i)},s.prototype.writeFloatBE=function(e,t,i){return Fe(this,e,t,!1,i)};function He(r,e,t,i,o){return e=+e,t=t>>>0,o||De(r,e,t,8),n.write(r,e,t,i,52,8),t+8}s.prototype.writeDoubleLE=function(e,t,i){return He(this,e,t,!0,i)},s.prototype.writeDoubleBE=function(e,t,i){return He(this,e,t,!1,i)},s.prototype.copy=function(e,t,i,o){if(!s.isBuffer(e))throw new TypeError("argument should be a Buffer");if(i||(i=0),!o&&o!==0&&(o=this.length),t>=e.length&&(t=e.length),t||(t=0),o>0&&o<i&&(o=i),o===i||e.length===0||this.length===0)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("Index out of range");if(o<0)throw new RangeError("sourceEnd out of bounds");o>this.length&&(o=this.length),e.length-t<o-i&&(o=e.length-t+i);let l=o-i;return this===e&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(t,i,o):Uint8Array.prototype.set.call(e,this.subarray(i,o),t),l},s.prototype.fill=function(e,t,i,o){if(typeof e=="string"){if(typeof t=="string"?(o=t,t=0,i=this.length):typeof i=="string"&&(o=i,i=this.length),o!==void 0&&typeof o!="string")throw new TypeError("encoding must be a string");if(typeof o=="string"&&!s.isEncoding(o))throw new TypeError("Unknown encoding: "+o);if(e.length===1){let p=e.charCodeAt(0);(o==="utf8"&&p<128||o==="latin1")&&(e=p);}}else typeof e=="number"?e=e&255:typeof e=="boolean"&&(e=Number(e));if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;t=t>>>0,i=i===void 0?this.length:i>>>0,e||(e=0);let l;if(typeof e=="number")for(l=t;l<i;++l)this[l]=e;else {let p=s.isBuffer(e)?e:s.from(e,o),g=p.length;if(g===0)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(l=0;l<i-t;++l)this[l+t]=p[l%g];}return this};let Q={};function _e(r,e,t){Q[r]=class extends t{constructor(){super(),Object.defineProperty(this,"message",{value:e.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${r}]`,this.stack,delete this.name;}get code(){return r}set code(o){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:o,writable:!0});}toString(){return `${this.name} [${r}]: ${this.message}`}};}_e("ERR_BUFFER_OUT_OF_BOUNDS",function(r){return r?`${r} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),_e("ERR_INVALID_ARG_TYPE",function(r,e){return `The "${r}" argument must be of type number. Received type ${typeof e}`},TypeError),_e("ERR_OUT_OF_RANGE",function(r,e,t){let i=`The value of "${r}" is out of range.`,o=t;return Number.isInteger(t)&&Math.abs(t)>2**32?o=Ve(String(t)):typeof t=="bigint"&&(o=String(t),(t>BigInt(2)**BigInt(32)||t<-(BigInt(2)**BigInt(32)))&&(o=Ve(o)),o+="n"),i+=` It must be ${e}. Received ${o}`,i},RangeError);function Ve(r){let e="",t=r.length,i=r[0]==="-"?1:0;for(;t>=i+4;t-=3)e=`_${r.slice(t-3,t)}${e}`;return `${r.slice(0,t)}${e}`}function Rt(r,e,t){ee(e,"offset"),(r[e]===void 0||r[e+t]===void 0)&&oe(e,r.length-(t+1));}function Ge(r,e,t,i,o,l){if(r>t||r<e){let p=typeof e=="bigint"?"n":"",g;throw e===0||e===BigInt(0)?g=`>= 0${p} and < 2${p} ** ${(l+1)*8}${p}`:g=`>= -(2${p} ** ${(l+1)*8-1}${p}) and < 2 ** ${(l+1)*8-1}${p}`,new Q.ERR_OUT_OF_RANGE("value",g,r)}Rt(i,o,l);}function ee(r,e){if(typeof r!="number")throw new Q.ERR_INVALID_ARG_TYPE(e,"number",r)}function oe(r,e,t){throw Math.floor(r)!==r?(ee(r,t),new Q.ERR_OUT_OF_RANGE("offset","an integer",r)):e<0?new Q.ERR_BUFFER_OUT_OF_BOUNDS:new Q.ERR_OUT_OF_RANGE("offset",`>= ${0} and <= ${e}`,r)}let It=/[^+/0-9A-Za-z-_]/g;function Tt(r){if(r=r.split("=")[0],r=r.trim().replace(It,""),r.length<2)return "";for(;r.length%4!==0;)r=r+"=";return r}function Ce(r,e){e=e||1/0;let t,i=r.length,o=null,l=[];for(let p=0;p<i;++p){if(t=r.charCodeAt(p),t>55295&&t<57344){if(!o){if(t>56319){(e-=3)>-1&&l.push(239,191,189);continue}else if(p+1===i){(e-=3)>-1&&l.push(239,191,189);continue}o=t;continue}if(t<56320){(e-=3)>-1&&l.push(239,191,189),o=t;continue}t=(o-55296<<10|t-56320)+65536;}else o&&(e-=3)>-1&&l.push(239,191,189);if(o=null,t<128){if((e-=1)<0)break;l.push(t);}else if(t<2048){if((e-=2)<0)break;l.push(t>>6|192,t&63|128);}else if(t<65536){if((e-=3)<0)break;l.push(t>>12|224,t>>6&63|128,t&63|128);}else if(t<1114112){if((e-=4)<0)break;l.push(t>>18|240,t>>12&63|128,t>>6&63|128,t&63|128);}else throw new Error("Invalid code point")}return l}function vt(r){let e=[];for(let t=0;t<r.length;++t)e.push(r.charCodeAt(t)&255);return e}function At(r,e){let t,i,o,l=[];for(let p=0;p<r.length&&!((e-=2)<0);++p)t=r.charCodeAt(p),i=t>>8,o=t%256,l.push(o),l.push(i);return l}function $e(r){return c.toByteArray(Tt(r))}function de(r,e,t,i){let o;for(o=0;o<i&&!(o+t>=e.length||o>=r.length);++o)e[o+t]=r[o];return o}function V(r,e){return r instanceof e||r!=null&&r.constructor!=null&&r.constructor.name!=null&&r.constructor.name===e.name}function Re(r){return r!==r}let Ot=function(){let r="0123456789abcdef",e=new Array(256);for(let t=0;t<16;++t){let i=t*16;for(let o=0;o<16;++o)e[i+o]=r[t]+r[o];}return e}();function W(r){return typeof BigInt>"u"?Lt:r}function Lt(){throw new Error("BigInt not supported")}return q}var X=Kr();X.Buffer;X.SlowBuffer;X.INSPECT_MAX_BYTES;X.kMaxLength;var L=X.Buffer;X.INSPECT_MAX_BYTES;X.kMaxLength;var me=(C=>(C.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",C.INVALID_CONFIGURATION="INVALID_CONFIGURATION",C.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",C.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",C.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",C.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",C.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",C.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",C.LOGOUT_ERROR="LOGOUT_ERROR",C.TRANSFER_ERROR="TRANSFER_ERROR",C.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",C.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",C.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",C.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",C.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR",C.LINK_WALLET_ALREADY_LINKED_ERROR="LINK_WALLET_ALREADY_LINKED_ERROR",C.LINK_WALLET_MAX_WALLETS_LINKED_ERROR="LINK_WALLET_MAX_WALLETS_LINKED_ERROR",C.LINK_WALLET_VALIDATION_ERROR="LINK_WALLET_VALIDATION_ERROR",C.LINK_WALLET_DUPLICATE_NONCE_ERROR="LINK_WALLET_DUPLICATE_NONCE_ERROR",C.LINK_WALLET_GENERIC_ERROR="LINK_WALLET_GENERIC_ERROR",C.SERVICE_UNAVAILABLE_ERROR="SERVICE_UNAVAILABLE_ERROR",C.TRANSACTION_REJECTED="TRANSACTION_REJECTED",C))(me||{});function Le(c){return typeof c=="object"&&c!==null&&"code"in c&&"message"in c}var Wr=c=>{if(Le(c))return c;if(typeof c=="object"&&c!==null&&"response"in c){let{response:n}=c;if(n?.data&&Le(n.data))return n.data}},G=class extends Error{type;constructor(n,a){super(n),this.type=a;}},z=async(c,n)=>{try{return await c()}catch(a){let u;if(a instanceof G&&a.type==="SERVICE_UNAVAILABLE_ERROR")throw new G(a.message,a.type);let d=Wr(a);throw d?u=d.message:u=a.message,new G(u,n)}};var Zr=(c,n,a)=>{let u=n.map(d=>!c[d]&&d).filter(d=>d).join(", ");if(u!==""){let d=`${u} cannot be null`;throw new G(d,"INVALID_CONFIGURATION")}},ae=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:n,passportDomain:a,crossSdkBridgeEnabled:u,popupOverlayOptions:d,...h}){Zr(h,["clientId","redirectUri"]),this.oidcConfiguration=h,this.crossSdkBridgeEnabled=u||!1,this.popupOverlayOptions=d,this.authenticationDomain=n||"https://auth.immutable.com",this.passportDomain=a||"https://passport.immutable.com";}};var Je=(n=>(n.ZKEVM="zkEvm",n))(Je||{}),Pe=c=>!!c.zkEvm,je=(u=>(u.OptedIn="opted_in",u.Unsubscribed="unsubscribed",u.Subscribed="subscribed",u))(je||{}),Ue=(u=>(u.LOGGED_OUT="loggedOut",u.LOGGED_IN="loggedIn",u.TOKEN_REFRESHED="tokenRefreshed",u))(Ue||{});var qe="im_passport_embedded_login_prompt";var re="passport-overlay",le="passport-overlay-contents",ge=`${re}-close`,Ee=`${re}-try-again`,Xe=`
|
|
5
|
+
function Ae(c){throw new Error("Node.js process "+c+" is not supported by JSPM core outside of Node.js")}var K=[],te=!1,j,he=-1;function Ut(){!te||!j||(te=!1,j.length?K=j.concat(K):he=-1,K.length&&Ke());}function Ke(){if(!te){var c=setTimeout(Ut,0);te=!0;for(var n=K.length;n;){for(j=K,K=[];++he<n;)j&&j[he].run();he=-1,n=K.length;}j=null,te=!1,clearTimeout(c);}}function Pt(c){var n=new Array(arguments.length-1);if(arguments.length>1)for(var a=1;a<arguments.length;a++)n[a-1]=arguments[a];K.push(new We(c,n)),K.length===1&&!te&&setTimeout(Ke,0);}function We(c,n){this.fun=c,this.array=n;}We.prototype.run=function(){this.fun.apply(null,this.array);};var kt="browser",Bt="x64",bt="browser",xt={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},St=["/usr/bin/node"],Mt=[],Nt="v16.8.0",Dt={},Ft=function(c,n){console.warn((n?n+": ":"")+c);},Ht=function(c){Ae("binding");},Vt=function(c){return 0},Gt=function(){return "/"},$t=function(c){},Kt={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};function b(){}var Wt=b,Zt=[];function Yt(c){Ae("_linkedBinding");}var zt={},Jt=!1,jt={};function qt(c){Ae("dlopen");}function Xt(){return []}function Qt(){return []}var er=b,tr=b,Oe=function(){return {}},rr=Oe,nr=Oe,ir=b,or=b,sr=b,ar={};function lr(c,n){if(!c)throw new Error(n||"assertion error")}var ur={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},cr=b,pr=b;function dr(){return !1}var hr=b,fr=b,mr=b,gr=b,Er=b,yr=void 0,wr=void 0,_r=void 0,Cr=b,Rr=2,Ir=1,Tr="/bin/usr/node",vr=9229,Ar="node",Or=[],Lr=b,Z={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};Z.now===void 0&&(Ie=Date.now(),Z.timing&&Z.timing.navigationStart&&(Ie=Z.timing.navigationStart),Z.now=()=>Date.now()-Ie);var Ie;function Ur(){return Z.now()/1e3}var Te=1e9;function ve(c){var n=Math.floor((Date.now()-Z.now())*.001),a=Z.now()*.001,u=Math.floor(a)+n,d=Math.floor(a%1*1e9);return c&&(u=u-c[0],d=d-c[1],d<0&&(u--,d+=Te)),[u,d]}ve.bigint=function(c){var n=ve(c);return typeof BigInt>"u"?n[0]*Te+n[1]:BigInt(n[0]*Te)+BigInt(n[1])};var Pr=10,kr={},Br=0;function Y(){return v}var br=Y,xr=Y,Sr=Y,Mr=Y,Nr=Y,Dr=b,Fr=Y,Hr=Y;function Vr(c){return []}var v={version:Nt,versions:Dt,arch:Bt,platform:bt,release:Kt,_rawDebug:Wt,moduleLoadList:Zt,binding:Ht,_linkedBinding:Yt,_events:kr,_eventsCount:Br,_maxListeners:Pr,on:Y,addListener:br,once:xr,off:Sr,removeListener:Mr,removeAllListeners:Nr,emit:Dr,prependListener:Fr,prependOnceListener:Hr,listeners:Vr,domain:zt,_exiting:Jt,config:jt,dlopen:qt,uptime:Ur,_getActiveRequests:Xt,_getActiveHandles:Qt,reallyExit:er,_kill:tr,cpuUsage:Oe,resourceUsage:rr,memoryUsage:nr,kill:ir,exit:or,openStdin:sr,allowedNodeEnvironmentFlags:ar,assert:lr,features:ur,_fatalExceptions:cr,setUncaughtExceptionCaptureCallback:pr,hasUncaughtExceptionCaptureCallback:dr,emitWarning:Ft,nextTick:Pt,_tickCallback:hr,_debugProcess:fr,_debugEnd:mr,_startProfilerIdleNotifier:gr,_stopProfilerIdleNotifier:Er,stdout:yr,stdin:_r,stderr:wr,abort:Cr,umask:Vt,chdir:$t,cwd:Gt,env:xt,title:kt,argv:St,execArgv:Mt,pid:Rr,ppid:Ir,execPath:Tr,debugPort:vr,hrtime:ve,argv0:Ar,_preload_modules:Or,setSourceMapsEnabled:Lr};var se={},Ze=!1;function Gr(){if(Ze)return se;Ze=!0,se.byteLength=y,se.toByteArray=B,se.fromByteArray=F;for(var c=[],n=[],a=typeof Uint8Array<"u"?Uint8Array:Array,u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=0,h=u.length;d<h;++d)c[d]=u[d],n[u.charCodeAt(d)]=d;n[45]=62,n[95]=63;function s(f){var E=f.length;if(E%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var C=f.indexOf("=");C===-1&&(C=E);var P=C===E?0:4-C%4;return [C,P]}function y(f){var E=s(f),C=E[0],P=E[1];return (C+P)*3/4-P}function _(f,E,C){return (E+C)*3/4-C}function B(f){var E,C=s(f),P=C[0],S=C[1],U=new a(_(f,P,S)),M=0,D=S>0?P-4:P,x;for(x=0;x<D;x+=4)E=n[f.charCodeAt(x)]<<18|n[f.charCodeAt(x+1)]<<12|n[f.charCodeAt(x+2)]<<6|n[f.charCodeAt(x+3)],U[M++]=E>>16&255,U[M++]=E>>8&255,U[M++]=E&255;return S===2&&(E=n[f.charCodeAt(x)]<<2|n[f.charCodeAt(x+1)]>>4,U[M++]=E&255),S===1&&(E=n[f.charCodeAt(x)]<<10|n[f.charCodeAt(x+1)]<<4|n[f.charCodeAt(x+2)]>>2,U[M++]=E>>8&255,U[M++]=E&255),U}function m(f){return c[f>>18&63]+c[f>>12&63]+c[f>>6&63]+c[f&63]}function I(f,E,C){for(var P,S=[],U=E;U<C;U+=3)P=(f[U]<<16&16711680)+(f[U+1]<<8&65280)+(f[U+2]&255),S.push(m(P));return S.join("")}function F(f){for(var E,C=f.length,P=C%3,S=[],U=16383,M=0,D=C-P;M<D;M+=U)S.push(I(f,M,M+U>D?D:M+U));return P===1?(E=f[C-1],S.push(c[E>>2]+c[E<<4&63]+"==")):P===2&&(E=(f[C-2]<<8)+f[C-1],S.push(c[E>>10]+c[E>>4&63]+c[E<<2&63]+"=")),S.join("")}return se}var fe={},Ye=!1;function $r(){if(Ye)return fe;Ye=!0;return fe.read=function(c,n,a,u,d){var h,s,y=d*8-u-1,_=(1<<y)-1,B=_>>1,m=-7,I=a?d-1:0,F=a?-1:1,f=c[n+I];for(I+=F,h=f&(1<<-m)-1,f>>=-m,m+=y;m>0;h=h*256+c[n+I],I+=F,m-=8);for(s=h&(1<<-m)-1,h>>=-m,m+=u;m>0;s=s*256+c[n+I],I+=F,m-=8);if(h===0)h=1-B;else {if(h===_)return s?NaN:(f?-1:1)*(1/0);s=s+Math.pow(2,u),h=h-B;}return (f?-1:1)*s*Math.pow(2,h-u)},fe.write=function(c,n,a,u,d,h){var s,y,_,B=h*8-d-1,m=(1<<B)-1,I=m>>1,F=d===23?Math.pow(2,-24)-Math.pow(2,-77):0,f=u?0:h-1,E=u?1:-1,C=n<0||n===0&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(y=isNaN(n)?1:0,s=m):(s=Math.floor(Math.log(n)/Math.LN2),n*(_=Math.pow(2,-s))<1&&(s--,_*=2),s+I>=1?n+=F/_:n+=F*Math.pow(2,1-I),n*_>=2&&(s++,_/=2),s+I>=m?(y=0,s=m):s+I>=1?(y=(n*_-1)*Math.pow(2,d),s=s+I):(y=n*Math.pow(2,I-1)*Math.pow(2,d),s=0));d>=8;c[a+f]=y&255,f+=E,y/=256,d-=8);for(s=s<<d|y,B+=d;B>0;c[a+f]=s&255,f+=E,s/=256,B-=8);c[a+f-E]|=C*128;},fe}var q={},ze=!1;function Kr(){if(ze)return q;ze=!0;let c=Gr(),n=$r(),a=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;q.Buffer=s,q.SlowBuffer=S,q.INSPECT_MAX_BYTES=50;let u=2147483647;q.kMaxLength=u,s.TYPED_ARRAY_SUPPORT=d(),!s.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function d(){try{let r=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(r,e),r.foo()===42}catch{return !1}}Object.defineProperty(s.prototype,"parent",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.buffer}}),Object.defineProperty(s.prototype,"offset",{enumerable:!0,get:function(){if(s.isBuffer(this))return this.byteOffset}});function h(r){if(r>u)throw new RangeError('The value "'+r+'" is invalid for option "size"');let e=new Uint8Array(r);return Object.setPrototypeOf(e,s.prototype),e}function s(r,e,t){if(typeof r=="number"){if(typeof e=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return m(r)}return y(r,e,t)}s.poolSize=8192;function y(r,e,t){if(typeof r=="string")return I(r,e);if(ArrayBuffer.isView(r))return f(r);if(r==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);if(V(r,ArrayBuffer)||r&&V(r.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(V(r,SharedArrayBuffer)||r&&V(r.buffer,SharedArrayBuffer)))return E(r,e,t);if(typeof r=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let i=r.valueOf&&r.valueOf();if(i!=null&&i!==r)return s.from(i,e,t);let o=C(r);if(o)return o;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof r[Symbol.toPrimitive]=="function")return s.from(r[Symbol.toPrimitive]("string"),e,t);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r)}s.from=function(r,e,t){return y(r,e,t)},Object.setPrototypeOf(s.prototype,Uint8Array.prototype),Object.setPrototypeOf(s,Uint8Array);function _(r){if(typeof r!="number")throw new TypeError('"size" argument must be of type number');if(r<0)throw new RangeError('The value "'+r+'" is invalid for option "size"')}function B(r,e,t){return _(r),r<=0?h(r):e!==void 0?typeof t=="string"?h(r).fill(e,t):h(r).fill(e):h(r)}s.alloc=function(r,e,t){return B(r,e,t)};function m(r){return _(r),h(r<0?0:P(r)|0)}s.allocUnsafe=function(r){return m(r)},s.allocUnsafeSlow=function(r){return m(r)};function I(r,e){if((typeof e!="string"||e==="")&&(e="utf8"),!s.isEncoding(e))throw new TypeError("Unknown encoding: "+e);let t=U(r,e)|0,i=h(t),o=i.write(r,e);return o!==t&&(i=i.slice(0,o)),i}function F(r){let e=r.length<0?0:P(r.length)|0,t=h(e);for(let i=0;i<e;i+=1)t[i]=r[i]&255;return t}function f(r){if(V(r,Uint8Array)){let e=new Uint8Array(r);return E(e.buffer,e.byteOffset,e.byteLength)}return F(r)}function E(r,e,t){if(e<0||r.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(r.byteLength<e+(t||0))throw new RangeError('"length" is outside of buffer bounds');let i;return e===void 0&&t===void 0?i=new Uint8Array(r):t===void 0?i=new Uint8Array(r,e):i=new Uint8Array(r,e,t),Object.setPrototypeOf(i,s.prototype),i}function C(r){if(s.isBuffer(r)){let e=P(r.length)|0,t=h(e);return t.length===0||r.copy(t,0,0,e),t}if(r.length!==void 0)return typeof r.length!="number"||Re(r.length)?h(0):F(r);if(r.type==="Buffer"&&Array.isArray(r.data))return F(r.data)}function P(r){if(r>=u)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u.toString(16)+" bytes");return r|0}function S(r){return +r!=r&&(r=0),s.alloc(+r)}s.isBuffer=function(e){return e!=null&&e._isBuffer===!0&&e!==s.prototype},s.compare=function(e,t){if(V(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),V(t,Uint8Array)&&(t=s.from(t,t.offset,t.byteLength)),!s.isBuffer(e)||!s.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let i=e.length,o=t.length;for(let l=0,p=Math.min(i,o);l<p;++l)if(e[l]!==t[l]){i=e[l],o=t[l];break}return i<o?-1:o<i?1:0},s.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return !0;default:return !1}},s.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(e.length===0)return s.alloc(0);let i;if(t===void 0)for(t=0,i=0;i<e.length;++i)t+=e[i].length;let o=s.allocUnsafe(t),l=0;for(i=0;i<e.length;++i){let p=e[i];if(V(p,Uint8Array))l+p.length>o.length?(s.isBuffer(p)||(p=s.from(p)),p.copy(o,l)):Uint8Array.prototype.set.call(o,p,l);else if(s.isBuffer(p))p.copy(o,l);else throw new TypeError('"list" argument must be an Array of Buffers');l+=p.length;}return o};function U(r,e){if(s.isBuffer(r))return r.length;if(ArrayBuffer.isView(r)||V(r,ArrayBuffer))return r.byteLength;if(typeof r!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof r);let t=r.length,i=arguments.length>2&&arguments[2]===!0;if(!i&&t===0)return 0;let o=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":return Ce(r).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return t*2;case"hex":return t>>>1;case"base64":return $e(r).length;default:if(o)return i?-1:Ce(r).length;e=(""+e).toLowerCase(),o=!0;}}s.byteLength=U;function M(r,e,t){let i=!1;if((e===void 0||e<0)&&(e=0),e>this.length||((t===void 0||t>this.length)&&(t=this.length),t<=0)||(t>>>=0,e>>>=0,t<=e))return "";for(r||(r="utf8");;)switch(r){case"hex":return _t(this,e,t);case"utf8":case"utf-8":return xe(this,e,t);case"ascii":return yt(this,e,t);case"latin1":case"binary":return wt(this,e,t);case"base64":return gt(this,e,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ct(this,e,t);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(r+"").toLowerCase(),i=!0;}}s.prototype._isBuffer=!0;function D(r,e,t){let i=r[e];r[e]=r[t],r[t]=i;}s.prototype.swap16=function(){let e=this.length;if(e%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;t<e;t+=2)D(this,t,t+1);return this},s.prototype.swap32=function(){let e=this.length;if(e%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let t=0;t<e;t+=4)D(this,t,t+3),D(this,t+1,t+2);return this},s.prototype.swap64=function(){let e=this.length;if(e%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let t=0;t<e;t+=8)D(this,t,t+7),D(this,t+1,t+6),D(this,t+2,t+5),D(this,t+3,t+4);return this},s.prototype.toString=function(){let e=this.length;return e===0?"":arguments.length===0?xe(this,0,e):M.apply(this,arguments)},s.prototype.toLocaleString=s.prototype.toString,s.prototype.equals=function(e){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?!0:s.compare(this,e)===0},s.prototype.inspect=function(){let e="",t=q.INSPECT_MAX_BYTES;return e=this.toString("hex",0,t).replace(/(.{2})/g,"$1 ").trim(),this.length>t&&(e+=" ... "),"<Buffer "+e+">"},a&&(s.prototype[a]=s.prototype.inspect),s.prototype.compare=function(e,t,i,o,l){if(V(e,Uint8Array)&&(e=s.from(e,e.offset,e.byteLength)),!s.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(t===void 0&&(t=0),i===void 0&&(i=e?e.length:0),o===void 0&&(o=0),l===void 0&&(l=this.length),t<0||i>e.length||o<0||l>this.length)throw new RangeError("out of range index");if(o>=l&&t>=i)return 0;if(o>=l)return -1;if(t>=i)return 1;if(t>>>=0,i>>>=0,o>>>=0,l>>>=0,this===e)return 0;let p=l-o,g=i-t,A=Math.min(p,g),T=this.slice(o,l),O=e.slice(t,i);for(let w=0;w<A;++w)if(T[w]!==O[w]){p=T[w],g=O[w];break}return p<g?-1:g<p?1:0};function x(r,e,t,i,o){if(r.length===0)return -1;if(typeof t=="string"?(i=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,Re(t)&&(t=o?0:r.length-1),t<0&&(t=r.length+t),t>=r.length){if(o)return -1;t=r.length-1;}else if(t<0)if(o)t=0;else return -1;if(typeof e=="string"&&(e=s.from(e,i)),s.isBuffer(e))return e.length===0?-1:R(r,e,t,i,o);if(typeof e=="number")return e=e&255,typeof Uint8Array.prototype.indexOf=="function"?o?Uint8Array.prototype.indexOf.call(r,e,t):Uint8Array.prototype.lastIndexOf.call(r,e,t):R(r,[e],t,i,o);throw new TypeError("val must be string, number or Buffer")}function R(r,e,t,i,o){let l=1,p=r.length,g=e.length;if(i!==void 0&&(i=String(i).toLowerCase(),i==="ucs2"||i==="ucs-2"||i==="utf16le"||i==="utf-16le")){if(r.length<2||e.length<2)return -1;l=2,p/=2,g/=2,t/=2;}function A(O,w){return l===1?O[w]:O.readUInt16BE(w*l)}let T;if(o){let O=-1;for(T=t;T<p;T++)if(A(r,T)===A(e,O===-1?0:T-O)){if(O===-1&&(O=T),T-O+1===g)return O*l}else O!==-1&&(T-=T-O),O=-1;}else for(t+g>p&&(t=p-g),T=t;T>=0;T--){let O=!0;for(let w=0;w<g;w++)if(A(r,T+w)!==A(e,w)){O=!1;break}if(O)return T}return -1}s.prototype.includes=function(e,t,i){return this.indexOf(e,t,i)!==-1},s.prototype.indexOf=function(e,t,i){return x(this,e,t,i,!0)},s.prototype.lastIndexOf=function(e,t,i){return x(this,e,t,i,!1)};function pt(r,e,t,i){t=Number(t)||0;let o=r.length-t;i?(i=Number(i),i>o&&(i=o)):i=o;let l=e.length;i>l/2&&(i=l/2);let p;for(p=0;p<i;++p){let g=parseInt(e.substr(p*2,2),16);if(Re(g))return p;r[t+p]=g;}return p}function dt(r,e,t,i){return de(Ce(e,r.length-t),r,t,i)}function ht(r,e,t,i){return de(vt(e),r,t,i)}function ft(r,e,t,i){return de($e(e),r,t,i)}function mt(r,e,t,i){return de(At(e,r.length-t),r,t,i)}s.prototype.write=function(e,t,i,o){if(t===void 0)o="utf8",i=this.length,t=0;else if(i===void 0&&typeof t=="string")o=t,i=this.length,t=0;else if(isFinite(t))t=t>>>0,isFinite(i)?(i=i>>>0,o===void 0&&(o="utf8")):(o=i,i=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let l=this.length-t;if((i===void 0||i>l)&&(i=l),e.length>0&&(i<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");o||(o="utf8");let p=!1;for(;;)switch(o){case"hex":return pt(this,e,t,i);case"utf8":case"utf-8":return dt(this,e,t,i);case"ascii":case"latin1":case"binary":return ht(this,e,t,i);case"base64":return ft(this,e,t,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return mt(this,e,t,i);default:if(p)throw new TypeError("Unknown encoding: "+o);o=(""+o).toLowerCase(),p=!0;}},s.prototype.toJSON=function(){return {type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function gt(r,e,t){return e===0&&t===r.length?c.fromByteArray(r):c.fromByteArray(r.slice(e,t))}function xe(r,e,t){t=Math.min(r.length,t);let i=[],o=e;for(;o<t;){let l=r[o],p=null,g=l>239?4:l>223?3:l>191?2:1;if(o+g<=t){let A,T,O,w;switch(g){case 1:l<128&&(p=l);break;case 2:A=r[o+1],(A&192)===128&&(w=(l&31)<<6|A&63,w>127&&(p=w));break;case 3:A=r[o+1],T=r[o+2],(A&192)===128&&(T&192)===128&&(w=(l&15)<<12|(A&63)<<6|T&63,w>2047&&(w<55296||w>57343)&&(p=w));break;case 4:A=r[o+1],T=r[o+2],O=r[o+3],(A&192)===128&&(T&192)===128&&(O&192)===128&&(w=(l&15)<<18|(A&63)<<12|(T&63)<<6|O&63,w>65535&&w<1114112&&(p=w));}}p===null?(p=65533,g=1):p>65535&&(p-=65536,i.push(p>>>10&1023|55296),p=56320|p&1023),i.push(p),o+=g;}return Et(i)}let Se=4096;function Et(r){let e=r.length;if(e<=Se)return String.fromCharCode.apply(String,r);let t="",i=0;for(;i<e;)t+=String.fromCharCode.apply(String,r.slice(i,i+=Se));return t}function yt(r,e,t){let i="";t=Math.min(r.length,t);for(let o=e;o<t;++o)i+=String.fromCharCode(r[o]&127);return i}function wt(r,e,t){let i="";t=Math.min(r.length,t);for(let o=e;o<t;++o)i+=String.fromCharCode(r[o]);return i}function _t(r,e,t){let i=r.length;(!e||e<0)&&(e=0),(!t||t<0||t>i)&&(t=i);let o="";for(let l=e;l<t;++l)o+=Ot[r[l]];return o}function Ct(r,e,t){let i=r.slice(e,t),o="";for(let l=0;l<i.length-1;l+=2)o+=String.fromCharCode(i[l]+i[l+1]*256);return o}s.prototype.slice=function(e,t){let i=this.length;e=~~e,t=t===void 0?i:~~t,e<0?(e+=i,e<0&&(e=0)):e>i&&(e=i),t<0?(t+=i,t<0&&(t=0)):t>i&&(t=i),t<e&&(t=e);let o=this.subarray(e,t);return Object.setPrototypeOf(o,s.prototype),o};function k(r,e,t){if(r%1!==0||r<0)throw new RangeError("offset is not uint");if(r+e>t)throw new RangeError("Trying to access beyond buffer length")}s.prototype.readUintLE=s.prototype.readUIntLE=function(e,t,i){e=e>>>0,t=t>>>0,i||k(e,t,this.length);let o=this[e],l=1,p=0;for(;++p<t&&(l*=256);)o+=this[e+p]*l;return o},s.prototype.readUintBE=s.prototype.readUIntBE=function(e,t,i){e=e>>>0,t=t>>>0,i||k(e,t,this.length);let o=this[e+--t],l=1;for(;t>0&&(l*=256);)o+=this[e+--t]*l;return o},s.prototype.readUint8=s.prototype.readUInt8=function(e,t){return e=e>>>0,t||k(e,1,this.length),this[e]},s.prototype.readUint16LE=s.prototype.readUInt16LE=function(e,t){return e=e>>>0,t||k(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUint16BE=s.prototype.readUInt16BE=function(e,t){return e=e>>>0,t||k(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUint32LE=s.prototype.readUInt32LE=function(e,t){return e=e>>>0,t||k(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216},s.prototype.readUint32BE=s.prototype.readUInt32BE=function(e,t){return e=e>>>0,t||k(e,4,this.length),this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readBigUInt64LE=W(function(e){e=e>>>0,ee(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&oe(e,this.length-8);let o=t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24,l=this[++e]+this[++e]*2**8+this[++e]*2**16+i*2**24;return BigInt(o)+(BigInt(l)<<BigInt(32))}),s.prototype.readBigUInt64BE=W(function(e){e=e>>>0,ee(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&oe(e,this.length-8);let o=t*2**24+this[++e]*2**16+this[++e]*2**8+this[++e],l=this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+i;return (BigInt(o)<<BigInt(32))+BigInt(l)}),s.prototype.readIntLE=function(e,t,i){e=e>>>0,t=t>>>0,i||k(e,t,this.length);let o=this[e],l=1,p=0;for(;++p<t&&(l*=256);)o+=this[e+p]*l;return l*=128,o>=l&&(o-=Math.pow(2,8*t)),o},s.prototype.readIntBE=function(e,t,i){e=e>>>0,t=t>>>0,i||k(e,t,this.length);let o=t,l=1,p=this[e+--o];for(;o>0&&(l*=256);)p+=this[e+--o]*l;return l*=128,p>=l&&(p-=Math.pow(2,8*t)),p},s.prototype.readInt8=function(e,t){return e=e>>>0,t||k(e,1,this.length),this[e]&128?(255-this[e]+1)*-1:this[e]},s.prototype.readInt16LE=function(e,t){e=e>>>0,t||k(e,2,this.length);let i=this[e]|this[e+1]<<8;return i&32768?i|4294901760:i},s.prototype.readInt16BE=function(e,t){e=e>>>0,t||k(e,2,this.length);let i=this[e+1]|this[e]<<8;return i&32768?i|4294901760:i},s.prototype.readInt32LE=function(e,t){return e=e>>>0,t||k(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return e=e>>>0,t||k(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readBigInt64LE=W(function(e){e=e>>>0,ee(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&oe(e,this.length-8);let o=this[e+4]+this[e+5]*2**8+this[e+6]*2**16+(i<<24);return (BigInt(o)<<BigInt(32))+BigInt(t+this[++e]*2**8+this[++e]*2**16+this[++e]*2**24)}),s.prototype.readBigInt64BE=W(function(e){e=e>>>0,ee(e,"offset");let t=this[e],i=this[e+7];(t===void 0||i===void 0)&&oe(e,this.length-8);let o=(t<<24)+this[++e]*2**16+this[++e]*2**8+this[++e];return (BigInt(o)<<BigInt(32))+BigInt(this[++e]*2**24+this[++e]*2**16+this[++e]*2**8+i)}),s.prototype.readFloatLE=function(e,t){return e=e>>>0,t||k(e,4,this.length),n.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return e=e>>>0,t||k(e,4,this.length),n.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return e=e>>>0,t||k(e,8,this.length),n.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return e=e>>>0,t||k(e,8,this.length),n.read(this,e,!1,52,8)};function N(r,e,t,i,o,l){if(!s.isBuffer(r))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||e<l)throw new RangeError('"value" argument is out of bounds');if(t+i>r.length)throw new RangeError("Index out of range")}s.prototype.writeUintLE=s.prototype.writeUIntLE=function(e,t,i,o){if(e=+e,t=t>>>0,i=i>>>0,!o){let g=Math.pow(2,8*i)-1;N(this,e,t,i,g,0);}let l=1,p=0;for(this[t]=e&255;++p<i&&(l*=256);)this[t+p]=e/l&255;return t+i},s.prototype.writeUintBE=s.prototype.writeUIntBE=function(e,t,i,o){if(e=+e,t=t>>>0,i=i>>>0,!o){let g=Math.pow(2,8*i)-1;N(this,e,t,i,g,0);}let l=i-1,p=1;for(this[t+l]=e&255;--l>=0&&(p*=256);)this[t+l]=e/p&255;return t+i},s.prototype.writeUint8=s.prototype.writeUInt8=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,1,255,0),this[t]=e&255,t+1},s.prototype.writeUint16LE=s.prototype.writeUInt16LE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,2,65535,0),this[t]=e&255,this[t+1]=e>>>8,t+2},s.prototype.writeUint16BE=s.prototype.writeUInt16BE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=e&255,t+2},s.prototype.writeUint32LE=s.prototype.writeUInt32LE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=e&255,t+4},s.prototype.writeUint32BE=s.prototype.writeUInt32BE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4};function Me(r,e,t,i,o){Ge(e,i,o,r,t,7);let l=Number(e&BigInt(4294967295));r[t++]=l,l=l>>8,r[t++]=l,l=l>>8,r[t++]=l,l=l>>8,r[t++]=l;let p=Number(e>>BigInt(32)&BigInt(4294967295));return r[t++]=p,p=p>>8,r[t++]=p,p=p>>8,r[t++]=p,p=p>>8,r[t++]=p,t}function Ne(r,e,t,i,o){Ge(e,i,o,r,t,7);let l=Number(e&BigInt(4294967295));r[t+7]=l,l=l>>8,r[t+6]=l,l=l>>8,r[t+5]=l,l=l>>8,r[t+4]=l;let p=Number(e>>BigInt(32)&BigInt(4294967295));return r[t+3]=p,p=p>>8,r[t+2]=p,p=p>>8,r[t+1]=p,p=p>>8,r[t]=p,t+8}s.prototype.writeBigUInt64LE=W(function(e,t=0){return Me(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeBigUInt64BE=W(function(e,t=0){return Ne(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))}),s.prototype.writeIntLE=function(e,t,i,o){if(e=+e,t=t>>>0,!o){let A=Math.pow(2,8*i-1);N(this,e,t,i,A-1,-A);}let l=0,p=1,g=0;for(this[t]=e&255;++l<i&&(p*=256);)e<0&&g===0&&this[t+l-1]!==0&&(g=1),this[t+l]=(e/p>>0)-g&255;return t+i},s.prototype.writeIntBE=function(e,t,i,o){if(e=+e,t=t>>>0,!o){let A=Math.pow(2,8*i-1);N(this,e,t,i,A-1,-A);}let l=i-1,p=1,g=0;for(this[t+l]=e&255;--l>=0&&(p*=256);)e<0&&g===0&&this[t+l+1]!==0&&(g=1),this[t+l]=(e/p>>0)-g&255;return t+i},s.prototype.writeInt8=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=e&255,t+1},s.prototype.writeInt16LE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,2,32767,-32768),this[t]=e&255,this[t+1]=e>>>8,t+2},s.prototype.writeInt16BE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=e&255,t+2},s.prototype.writeInt32LE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,4,2147483647,-2147483648),this[t]=e&255,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},s.prototype.writeInt32BE=function(e,t,i){return e=+e,t=t>>>0,i||N(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=e&255,t+4},s.prototype.writeBigInt64LE=W(function(e,t=0){return Me(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),s.prototype.writeBigInt64BE=W(function(e,t=0){return Ne(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function De(r,e,t,i,o,l){if(t+i>r.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function Fe(r,e,t,i,o){return e=+e,t=t>>>0,o||De(r,e,t,4),n.write(r,e,t,i,23,4),t+4}s.prototype.writeFloatLE=function(e,t,i){return Fe(this,e,t,!0,i)},s.prototype.writeFloatBE=function(e,t,i){return Fe(this,e,t,!1,i)};function He(r,e,t,i,o){return e=+e,t=t>>>0,o||De(r,e,t,8),n.write(r,e,t,i,52,8),t+8}s.prototype.writeDoubleLE=function(e,t,i){return He(this,e,t,!0,i)},s.prototype.writeDoubleBE=function(e,t,i){return He(this,e,t,!1,i)},s.prototype.copy=function(e,t,i,o){if(!s.isBuffer(e))throw new TypeError("argument should be a Buffer");if(i||(i=0),!o&&o!==0&&(o=this.length),t>=e.length&&(t=e.length),t||(t=0),o>0&&o<i&&(o=i),o===i||e.length===0||this.length===0)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(i<0||i>=this.length)throw new RangeError("Index out of range");if(o<0)throw new RangeError("sourceEnd out of bounds");o>this.length&&(o=this.length),e.length-t<o-i&&(o=e.length-t+i);let l=o-i;return this===e&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(t,i,o):Uint8Array.prototype.set.call(e,this.subarray(i,o),t),l},s.prototype.fill=function(e,t,i,o){if(typeof e=="string"){if(typeof t=="string"?(o=t,t=0,i=this.length):typeof i=="string"&&(o=i,i=this.length),o!==void 0&&typeof o!="string")throw new TypeError("encoding must be a string");if(typeof o=="string"&&!s.isEncoding(o))throw new TypeError("Unknown encoding: "+o);if(e.length===1){let p=e.charCodeAt(0);(o==="utf8"&&p<128||o==="latin1")&&(e=p);}}else typeof e=="number"?e=e&255:typeof e=="boolean"&&(e=Number(e));if(t<0||this.length<t||this.length<i)throw new RangeError("Out of range index");if(i<=t)return this;t=t>>>0,i=i===void 0?this.length:i>>>0,e||(e=0);let l;if(typeof e=="number")for(l=t;l<i;++l)this[l]=e;else {let p=s.isBuffer(e)?e:s.from(e,o),g=p.length;if(g===0)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(l=0;l<i-t;++l)this[l+t]=p[l%g];}return this};let Q={};function _e(r,e,t){Q[r]=class extends t{constructor(){super(),Object.defineProperty(this,"message",{value:e.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${r}]`,this.stack,delete this.name;}get code(){return r}set code(o){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:o,writable:!0});}toString(){return `${this.name} [${r}]: ${this.message}`}};}_e("ERR_BUFFER_OUT_OF_BOUNDS",function(r){return r?`${r} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),_e("ERR_INVALID_ARG_TYPE",function(r,e){return `The "${r}" argument must be of type number. Received type ${typeof e}`},TypeError),_e("ERR_OUT_OF_RANGE",function(r,e,t){let i=`The value of "${r}" is out of range.`,o=t;return Number.isInteger(t)&&Math.abs(t)>2**32?o=Ve(String(t)):typeof t=="bigint"&&(o=String(t),(t>BigInt(2)**BigInt(32)||t<-(BigInt(2)**BigInt(32)))&&(o=Ve(o)),o+="n"),i+=` It must be ${e}. Received ${o}`,i},RangeError);function Ve(r){let e="",t=r.length,i=r[0]==="-"?1:0;for(;t>=i+4;t-=3)e=`_${r.slice(t-3,t)}${e}`;return `${r.slice(0,t)}${e}`}function Rt(r,e,t){ee(e,"offset"),(r[e]===void 0||r[e+t]===void 0)&&oe(e,r.length-(t+1));}function Ge(r,e,t,i,o,l){if(r>t||r<e){let p=typeof e=="bigint"?"n":"",g;throw e===0||e===BigInt(0)?g=`>= 0${p} and < 2${p} ** ${(l+1)*8}${p}`:g=`>= -(2${p} ** ${(l+1)*8-1}${p}) and < 2 ** ${(l+1)*8-1}${p}`,new Q.ERR_OUT_OF_RANGE("value",g,r)}Rt(i,o,l);}function ee(r,e){if(typeof r!="number")throw new Q.ERR_INVALID_ARG_TYPE(e,"number",r)}function oe(r,e,t){throw Math.floor(r)!==r?(ee(r,t),new Q.ERR_OUT_OF_RANGE("offset","an integer",r)):e<0?new Q.ERR_BUFFER_OUT_OF_BOUNDS:new Q.ERR_OUT_OF_RANGE("offset",`>= ${0} and <= ${e}`,r)}let It=/[^+/0-9A-Za-z-_]/g;function Tt(r){if(r=r.split("=")[0],r=r.trim().replace(It,""),r.length<2)return "";for(;r.length%4!==0;)r=r+"=";return r}function Ce(r,e){e=e||1/0;let t,i=r.length,o=null,l=[];for(let p=0;p<i;++p){if(t=r.charCodeAt(p),t>55295&&t<57344){if(!o){if(t>56319){(e-=3)>-1&&l.push(239,191,189);continue}else if(p+1===i){(e-=3)>-1&&l.push(239,191,189);continue}o=t;continue}if(t<56320){(e-=3)>-1&&l.push(239,191,189),o=t;continue}t=(o-55296<<10|t-56320)+65536;}else o&&(e-=3)>-1&&l.push(239,191,189);if(o=null,t<128){if((e-=1)<0)break;l.push(t);}else if(t<2048){if((e-=2)<0)break;l.push(t>>6|192,t&63|128);}else if(t<65536){if((e-=3)<0)break;l.push(t>>12|224,t>>6&63|128,t&63|128);}else if(t<1114112){if((e-=4)<0)break;l.push(t>>18|240,t>>12&63|128,t>>6&63|128,t&63|128);}else throw new Error("Invalid code point")}return l}function vt(r){let e=[];for(let t=0;t<r.length;++t)e.push(r.charCodeAt(t)&255);return e}function At(r,e){let t,i,o,l=[];for(let p=0;p<r.length&&!((e-=2)<0);++p)t=r.charCodeAt(p),i=t>>8,o=t%256,l.push(o),l.push(i);return l}function $e(r){return c.toByteArray(Tt(r))}function de(r,e,t,i){let o;for(o=0;o<i&&!(o+t>=e.length||o>=r.length);++o)e[o+t]=r[o];return o}function V(r,e){return r instanceof e||r!=null&&r.constructor!=null&&r.constructor.name!=null&&r.constructor.name===e.name}function Re(r){return r!==r}let Ot=function(){let r="0123456789abcdef",e=new Array(256);for(let t=0;t<16;++t){let i=t*16;for(let o=0;o<16;++o)e[i+o]=r[t]+r[o];}return e}();function W(r){return typeof BigInt>"u"?Lt:r}function Lt(){throw new Error("BigInt not supported")}return q}var X=Kr();X.Buffer;X.SlowBuffer;X.INSPECT_MAX_BYTES;X.kMaxLength;var L=X.Buffer;X.INSPECT_MAX_BYTES;X.kMaxLength;var me=(R=>(R.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",R.INVALID_CONFIGURATION="INVALID_CONFIGURATION",R.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",R.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",R.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",R.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",R.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",R.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",R.LOGOUT_ERROR="LOGOUT_ERROR",R.TRANSFER_ERROR="TRANSFER_ERROR",R.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",R.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",R.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",R.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",R.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR",R.LINK_WALLET_ALREADY_LINKED_ERROR="LINK_WALLET_ALREADY_LINKED_ERROR",R.LINK_WALLET_MAX_WALLETS_LINKED_ERROR="LINK_WALLET_MAX_WALLETS_LINKED_ERROR",R.LINK_WALLET_VALIDATION_ERROR="LINK_WALLET_VALIDATION_ERROR",R.LINK_WALLET_DUPLICATE_NONCE_ERROR="LINK_WALLET_DUPLICATE_NONCE_ERROR",R.LINK_WALLET_GENERIC_ERROR="LINK_WALLET_GENERIC_ERROR",R.SERVICE_UNAVAILABLE_ERROR="SERVICE_UNAVAILABLE_ERROR",R.TRANSACTION_REJECTED="TRANSACTION_REJECTED",R))(me||{});function Le(c){return typeof c=="object"&&c!==null&&"code"in c&&"message"in c}var Wr=c=>{if(Le(c))return c;if(typeof c=="object"&&c!==null&&"response"in c){let{response:n}=c;if(n?.data&&Le(n.data))return n.data}},G=class extends Error{type;constructor(n,a){super(n),this.type=a;}},z=async(c,n)=>{try{return await c()}catch(a){let u;if(a instanceof G&&a.type==="SERVICE_UNAVAILABLE_ERROR")throw new G(a.message,a.type);let d=Wr(a);throw d?u=d.message:u=a.message,new G(u,n)}};var Zr=(c,n,a)=>{let u=n.map(d=>!c[d]&&d).filter(d=>d).join(", ");if(u!==""){let d=`${u} cannot be null`;throw new G(d,"INVALID_CONFIGURATION")}},ae=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:n,passportDomain:a,crossSdkBridgeEnabled:u,popupOverlayOptions:d,...h}){Zr(h,["clientId","redirectUri"]),this.oidcConfiguration=h,this.crossSdkBridgeEnabled=u||!1,this.popupOverlayOptions=d,this.authenticationDomain=n||"https://auth.immutable.com",this.passportDomain=a||"https://passport.immutable.com";}};var Je=(n=>(n.ZKEVM="zkEvm",n))(Je||{}),Ue=c=>!!c.zkEvm,je=(u=>(u.OptedIn="opted_in",u.Unsubscribed="unsubscribed",u.Subscribed="subscribed",u))(je||{}),Pe=(d=>(d.LOGGED_OUT="loggedOut",d.LOGGED_IN="loggedIn",d.TOKEN_REFRESHED="tokenRefreshed",d.USER_REMOVED="userRemoved",d))(Pe||{});var qe="im_passport_embedded_login_prompt";var re="passport-overlay",le="passport-overlay-contents",ge=`${re}-close`,Ee=`${re}-try-again`,Xe=`
|
|
6
6
|
<svg
|
|
7
7
|
viewBox="0 0 20 20"
|
|
8
8
|
fill="none"
|
|
@@ -28,7 +28,7 @@ function Ae(c){throw new Error("Node.js process "+c+" is not supported by JSPM c
|
|
|
28
28
|
fill="#E01A3D"
|
|
29
29
|
/>
|
|
30
30
|
</svg>
|
|
31
|
-
`,
|
|
31
|
+
`,ke=`
|
|
32
32
|
<svg
|
|
33
33
|
style="
|
|
34
34
|
max-width: 123px !important;
|
|
@@ -249,7 +249,7 @@ function Ae(c){throw new Error("Node.js process "+c+" is not supported by JSPM c
|
|
|
249
249
|
Try again
|
|
250
250
|
</button>
|
|
251
251
|
`,zr=()=>`
|
|
252
|
-
${
|
|
252
|
+
${ke}
|
|
253
253
|
<div
|
|
254
254
|
style="
|
|
255
255
|
color: #e01a3d !important;
|
|
@@ -274,7 +274,7 @@ function Ae(c){throw new Error("Node.js process "+c+" is not supported by JSPM c
|
|
|
274
274
|
</p>
|
|
275
275
|
${et()}
|
|
276
276
|
`,Jr=()=>`
|
|
277
|
-
${
|
|
277
|
+
${ke}
|
|
278
278
|
<p style="
|
|
279
279
|
color: #b6b6b6 !important;
|
|
280
280
|
text-align: center !important;
|
|
@@ -384,6 +384,6 @@ function Ae(c){throw new Error("Node.js process "+c+" is not supported by JSPM c
|
|
|
384
384
|
opacity: 1;
|
|
385
385
|
}
|
|
386
386
|
}
|
|
387
|
-
`,document.head.appendChild(n);};getEmbeddedLoginIFrame=()=>{let n=document.createElement("iframe");return n.id=st,n.src=this.getHref(),n.style.height="100vh",n.style.width="100vw",n.style.maxHeight=`${Xr}px`,n.style.maxWidth=`${Qr}px`,n.style.borderRadius=en,n.style.opacity="0",n.style.transform="scale(0.6)",n.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",c.appendIFrameStylesIfNeeded(),n};displayEmbeddedLoginPrompt(){return new Promise((n,a)=>{let u=this.getEmbeddedLoginIFrame(),d=({data:h,origin:s})=>{if(!(s!==this.config.authenticationDomain||h.eventType!==qe))switch(h.messageType){case"login_method_selected":{let y=h.payload;window.removeEventListener("message",d),$.remove(),n(y);break}case"login_prompt_error":{window.removeEventListener("message",d),$.remove(),a(new Error("Error during embedded login prompt",{cause:h.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",d),$.remove(),a(new Error("Popup closed by user"));break}default:window.removeEventListener("message",d),$.remove(),a(new Error(`Unsupported message type: ${h.messageType}`));break}};window.addEventListener("message",d),$.appendOverlay(u,()=>{window.removeEventListener("message",d),$.remove(),a(new Error("Popup closed by user"));});})}};var ne=class{listeners=new Map;emit(n,...a){let u=this.listeners.get(n);!u||u.size===0||[...u].forEach(d=>{d(...a);});}on(n,a){let u=this.listeners.get(n)??new Set;u.add(a),this.listeners.set(n,u);}removeListener(n,a){let u=this.listeners.get(n);u&&(u.delete(a),u.size===0&&this.listeners.delete(n));}};var H=async(c,n,a=!0,u=!0)=>{let d=trackFlow("passport",n,a);try{return await c(d)}catch(h){throw h instanceof Error?trackError("passport",n,h,{flowId:d.details.flowId}):d.addEvent("errored"),h}finally{u&&d.addEvent("End");}};var nn=()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof globalThis<"u"?globalThis:{},on=c=>{let n=c.replace(/-/g,"+").replace(/_/g,"/"),a=n.length%4===0?"":"=".repeat(4-n.length%4);return n+a},sn=c=>{let n=nn();if(typeof n.atob!="function")return null;let a=n.atob(c),u=new Uint8Array(a.length);for(let h=0;h<a.length;h+=1)u[h]=a.charCodeAt(h);if(typeof n.TextDecoder=="function")return new n.TextDecoder("utf-8").decode(u);let d="";for(let h=0;h<u.length;h+=1)d+=String.fromCharCode(u[h]);return d},an=c=>{if(typeof L<"u")return L.from(c,"base64").toString("utf-8");let n=sn(c);if(n===null)throw new Error("Base64 decoding is not supported in this environment");return n},J=c=>{if(typeof c!="string")throw new Error("JWT must be a string");let n=c.split(".");if(n.length<2)throw new Error("Invalid JWT: payload segment is missing");let a=n[1],u=an(on(a));try{return JSON.parse(u)}catch{throw new Error("Invalid JWT payload: unable to parse JSON")}};var at="pkce_state",lt="pkce_verifier",ln=3600,ce=class{isTokenValid(n){try{let u=J(n).exp??0,d=Date.now()/1e3+ln;return u>d}catch{return !1}}savePKCEData(n){localStorage.setItem(at,n.state),localStorage.setItem(lt,n.verifier);}getPKCEData(){let n=localStorage.getItem(at),a=localStorage.getItem(lt);return n&&a?{state:n,verifier:a}:null}};var un=(...c)=>{if(typeof v>"u")return;v?.env?.JEST_WORKER_ID===void 0&&console.warn(...c);},ie={warn:un};function ut(c){try{let n=J(c),a=Math.floor(Date.now()/1e3);return n.exp?n.exp<=a+30:!0}catch{return !0}}function ct(c){let{id_token:n,access_token:a}=c;return !a||!n?!0:ut(a)||ut(n)}var pe=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(n,a=!1){this.disableBlockedPopupOverlay=n.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=n.disableGenericPopupOverlay||!1,this.isBlockedOverlay=a;}append(n,a){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(n),this.updateCloseButton(a));}update(n){this.updateTryAgainButton(n);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){ye({id:"link-googleapis",href:"https://fonts.googleapis.com"}),ye({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),ye({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 a=document.createElement("div");a.innerHTML=this.isBlockedOverlay?nt():it(),document.body.insertAdjacentElement("beforeend",a),this.overlay=a;}}updateTryAgainButton(n){let a=document.getElementById(Ee);a&&(this.tryAgainListener&&a.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=n,a.addEventListener("click",n));}updateCloseButton(n){let a=document.getElementById(ge);a&&(this.onCloseListener&&a.removeEventListener("click",this.onCloseListener),this.onCloseListener=n,a.addEventListener("click",n));}};var we=class{storage;constructor(n,a){this.storage=cn.createInstance({name:n,driver:a});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(n){return this.storage.getItem(n)}key(n){return this.storage.key(n)}async removeItem(n){await this.storage.removeItem(n);}async setItem(n,a){await this.storage.setItem(n,a);}};var In={"Content-Type":"application/x-www-form-urlencoded"},Tn=c=>{if(c)try{return JSON.parse(c)}catch{return}},vn=(c,n,a)=>{if(c&&typeof c=="object"){let u=c,d=u.error_description??u.message??u.error;if(typeof d=="string"&&d.trim().length>0)return d}return n.trim().length>0?n:`Token request failed with status ${a}`},An="/v2/logout",On="/im-logged-out",Ln="/authorize",Pn=c=>c?On:An,Un=c=>{let{authenticationDomain:n,oidcConfiguration:a}=c,u;c.crossSdkBridgeEnabled?u=new we("ImmutableSDKPassport",cn.INDEXEDDB):typeof window<"u"?u=window.localStorage:u=new InMemoryWebStorage;let d=new WebStorageStateStore({store:u}),h=new URL(Pn(c.crossSdkBridgeEnabled),n.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return h.searchParams.set("client_id",a.clientId),a.logoutRedirectUri&&h.searchParams.set("returnTo",a.logoutRedirectUri),{authority:n,redirect_uri:a.redirectUri,popup_redirect_uri:a.popupRedirectUri||a.redirectUri,client_id:a.clientId,metadata:{authorization_endpoint:`${n}/authorize`,token_endpoint:`${n}/oauth/token`,userinfo_endpoint:`${n}/userinfo`,end_session_endpoint:h.toString(),revocation_endpoint:`${n}/oauth/revoke`},automaticSilentRenew:!1,scope:a.scope,userStore:d,revokeTokenTypes:["refresh_token"],extraQueryParams:{...a.audience?{audience:a.audience}:{}}}};function ke(c){return btoa(String.fromCharCode(...new Uint8Array(c))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Bn(c){let a=new TextEncoder().encode(c);return window.crypto.subtle.digest("SHA-256",a)}var be=class c{config;userManager;deviceCredentialsManager;embeddedLoginPrompt;logoutMode;refreshingPromise=null;eventEmitter;constructor(n){this.config=new ae(n),this.embeddedLoginPrompt=new ue(this.config),this.userManager=new UserManager(Un(this.config)),this.deviceCredentialsManager=new ce,this.logoutMode=this.config.oidcConfiguration.logoutMode||"redirect",this.eventEmitter=new ne,track("passport","initialise");}async login(n){return H(async()=>{let{useCachedSession:a=!1,useSilentLogin:u}=n||{},d=null;try{d=await this.getUserInternal();}catch(h){if(h instanceof Error&&!h.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",h),a)throw h;ie.warn("Failed to retrieve a cached user session",h);}if(!d&&u)d=await this.forceUserRefreshInternal();else if(!d&&!a){if(n?.useRedirectFlow)return await this.loginWithRedirectInternal(n?.directLoginOptions),null;d=await this.loginWithPopup(n?.directLoginOptions);}return d&&this.handleSuccessfulLogin(d),d},"login")}async loginWithRedirect(n){await this.loginWithRedirectInternal(n);}async loginCallback(){return H(async()=>{let n=await this.loginCallbackInternal();return n&&this.handleSuccessfulLogin(n),n},"loginCallback")}async logout(){await H(async()=>{await this.logoutInternal(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return this.getUserInternal()}async getUserOrLogin(){let n=null;try{n=await this.getUserInternal();}catch(u){ie.warn("Failed to retrieve a cached user session",u);}if(n)return n;let a=await this.loginWithPopup();return this.handleSuccessfulLogin(a),a}async getUserZkEvm(){return this.getUserZkEvmInternal()}async getIdToken(){return H(async()=>(await this.getUserInternal())?.idToken,"getIdToken",!1)}async getAccessToken(){return H(async()=>(await this.getUserInternal())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.forceUserRefreshInternal()}forceUserRefreshInBackground(){this.forceUserRefreshInBackgroundInternal();}async loginWithPKCEFlow(n,a){return H(async()=>this.getPKCEAuthorizationUrl(n,a),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(n,a){return H(async()=>{let u=await this.loginWithPKCEFlowCallbackInternal(n,a);return this.handleSuccessfulLogin(u),u},"loginWithPKCEFlowCallback")}async storeTokens(n){return H(async()=>{let a=await this.storeTokensInternal(n);return this.handleSuccessfulLogin(a),a},"storeTokens")}async getLogoutUrl(){return H(async()=>(await this.userManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.getLogoutUrlInternal()||void 0),"getLogoutUrl")}async logoutSilentCallback(n){return H(()=>this.userManager.signoutSilentCallback(n),"logoutSilentCallback")}getConfig(){return this.config}async getClientId(){return this.config.oidcConfiguration.clientId}handleSuccessfulLogin(n){this.eventEmitter.emit("loggedIn",n),identify({passportId:n.profile.sub});}buildExtraQueryParams(n,a){let u={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||""};if(n){if(n.directLoginMethod==="email"){let d=n.email;d&&(u.direct=n.directLoginMethod,u.email=d);}else u.direct=n.directLoginMethod;n.marketingConsentStatus&&(u.marketingConsent=n.marketingConsentStatus);}return a&&(u.im_passport_trace_id=a),u}async loginWithRedirectInternal(n){await this.userManager.clearStaleState(),await z(async()=>{let a=this.buildExtraQueryParams(n);await this.userManager.signinRedirect({extraQueryParams:a});},"AUTHENTICATION_ERROR");}async loginWithPopup(n){return z(async()=>{let a,u;if(n)a=n;else if(!this.config.popupOverlayOptions?.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:s,...y}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt();a=y,u=s;}let d=window.crypto.randomUUID(),h=async()=>{let s=this.buildExtraQueryParams(a,u);return this.userManager.signinPopup({extraQueryParams:s,popupWindowFeatures:{width:410,height:450},popupWindowTarget:d,popupAbortOnClose:!0})};return new Promise((s,y)=>{h().then(T=>s(c.mapOidcUserToDomainModel(T))).catch(T=>{if(!(T instanceof Error)||T.message!=="Attempted to navigate on a disposed window"){y(T);return}let k=!1,m=new pe(this.config.popupOverlayOptions||{},!0);m.append(async()=>{try{if(k)window.open("",d);else {k=!0;let R=await h();m.remove(),s(c.mapOidcUserToDomainModel(R));}}catch(R){m.remove(),y(R);}},()=>{m.remove(),y(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}static mapOidcUserToDomainModel=n=>{let a,u;if(n.id_token){let h=J(n.id_token);a=h?.passport,h?.username&&(u=h?.username);}let d={expired:n.expired,idToken:n.id_token,accessToken:n.access_token,refreshToken:n.refresh_token,profile:{sub:n.profile.sub,email:n.profile.email,nickname:n.profile.nickname,username:u}};return a?.zkevm_eth_address&&a?.zkevm_user_admin_address&&(d.zkEvm={ethAddress:a.zkevm_eth_address,userAdminAddress:a.zkevm_user_admin_address}),d};static mapDeviceTokenResponseToOidcUser=n=>{let a=J(n.id_token);return new User({id_token:n.id_token,access_token:n.access_token,refresh_token:n.refresh_token,token_type:n.token_type,profile:{sub:a.sub,iss:a.iss,aud:a.aud,exp:a.exp,iat:a.iat,email:a.email,nickname:a.nickname,passport:a.passport,...a.username?{username:a.username}:{}}})};async loginCallbackInternal(){return z(async()=>{let n=await this.userManager.signinCallback();if(n)return c.mapOidcUserToDomainModel(n)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(n,a){let u=ke(window.crypto.getRandomValues(new Uint8Array(32))),d=ke(await Bn(u)),h=ke(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:y,audience:T,clientId:k}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:h,verifier:u});let m=new URL(Ln,this.config.authenticationDomain);if(m.searchParams.set("response_type","code"),m.searchParams.set("code_challenge",d),m.searchParams.set("code_challenge_method","S256"),m.searchParams.set("client_id",k),m.searchParams.set("redirect_uri",s),m.searchParams.set("state",h),y&&m.searchParams.set("scope",y),T&&m.searchParams.set("audience",T),n){if(n.directLoginMethod==="email"){let R=n.email;R&&(m.searchParams.set("direct",n.directLoginMethod),m.searchParams.set("email",R));}else m.searchParams.set("direct",n.directLoginMethod);n.marketingConsentStatus&&m.searchParams.set("marketingConsent",n.marketingConsentStatus);}return a&&m.searchParams.set("im_passport_trace_id",a),m.toString()}async loginWithPKCEFlowCallbackInternal(n,a){return z(async()=>{let u=this.deviceCredentialsManager.getPKCEData();if(!u)throw new Error("No code verifier or state for PKCE");if(a!==u.state)throw new Error("Provided state does not match stored state");let d=await this.getPKCEToken(n,u.verifier),h=c.mapDeviceTokenResponseToOidcUser(d),s=c.mapOidcUserToDomainModel(h);return await this.userManager.storeUser(h),s},"AUTHENTICATION_ERROR")}async getPKCEToken(n,a){let u=await fetch(`${this.config.authenticationDomain}/oauth/token`,{method:"POST",headers:In,body:new URLSearchParams({client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:a,code:n,redirect_uri:this.config.oidcConfiguration.redirectUri})}),d=await u.text(),h=Tn(d);if(!u.ok)throw new Error(vn(h,d,u.status));if(!h||typeof h!="object")throw new Error("Token endpoint returned an invalid response");return h}async storeTokensInternal(n){return z(async()=>{let a=c.mapDeviceTokenResponseToOidcUser(n),u=c.mapOidcUserToDomainModel(a);return await this.userManager.storeUser(a),u},"AUTHENTICATION_ERROR")}async logoutInternal(){await z(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR");}async getLogoutUrlInternal(){let n=this.userManager.settings?.metadata?.end_session_endpoint;return n||(ie.warn("Failed to get logout URL"),null)}forceUserRefreshInBackgroundInternal(){this.refreshTokenAndUpdatePromise().catch(n=>{ie.warn("Failed to refresh user token",n);});}async forceUserRefreshInternal(){return this.refreshTokenAndUpdatePromise().catch(n=>(ie.warn("Failed to refresh user token",n),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise((n,a)=>{(async()=>{try{let u=await this.userManager.signinSilent();if(u){let d=c.mapOidcUserToDomainModel(u);this.eventEmitter.emit("tokenRefreshed",d),n(d);return}n(null);}catch(u){let d="AUTHENTICATION_ERROR",h="Failed to refresh token",s=!0;if(u instanceof ErrorTimeout?(d="SILENT_LOGIN_ERROR",h=`${h}: ${u.message}`,s=!1):u instanceof ErrorResponse?(d="NOT_LOGGED_IN_ERROR",h=`${h}: ${u.message||u.error_description}`):u instanceof Error?h=`${h}: ${u.message}`:typeof u=="string"&&(h=`${h}: ${u}`),s)try{await this.userManager.removeUser();}catch(y){y instanceof Error&&(h=`${h}: Failed to remove user: ${y.message}`);}a(new G(h,d));}finally{this.refreshingPromise=null;}})();}),this.refreshingPromise)}async getUserInternal(n=a=>!0){if(this.refreshingPromise){let u=await this.refreshingPromise;return u&&n(u)?u:null}let a=await this.userManager.getUser();if(!a)return null;if(!ct(a)){let u=c.mapOidcUserToDomainModel(a);if(u&&n(u))return u}if(a.refresh_token){let u=await this.refreshTokenAndUpdatePromise();if(u&&n(u))return u}return null}async getUserZkEvmInternal(){let n=await this.getUserInternal(Pe);if(!n)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return n}};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
387
|
+
`,document.head.appendChild(n);};getEmbeddedLoginIFrame=()=>{let n=document.createElement("iframe");return n.id=st,n.src=this.getHref(),n.style.height="100vh",n.style.width="100vw",n.style.maxHeight=`${Xr}px`,n.style.maxWidth=`${Qr}px`,n.style.borderRadius=en,n.style.opacity="0",n.style.transform="scale(0.6)",n.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",c.appendIFrameStylesIfNeeded(),n};displayEmbeddedLoginPrompt(){return new Promise((n,a)=>{let u=this.getEmbeddedLoginIFrame(),d=({data:h,origin:s})=>{if(!(s!==this.config.authenticationDomain||h.eventType!==qe))switch(h.messageType){case"login_method_selected":{let y=h.payload;window.removeEventListener("message",d),$.remove(),n(y);break}case"login_prompt_error":{window.removeEventListener("message",d),$.remove(),a(new Error("Error during embedded login prompt",{cause:h.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",d),$.remove(),a(new Error("Popup closed by user"));break}default:window.removeEventListener("message",d),$.remove(),a(new Error(`Unsupported message type: ${h.messageType}`));break}};window.addEventListener("message",d),$.appendOverlay(u,()=>{window.removeEventListener("message",d),$.remove(),a(new Error("Popup closed by user"));});})}};var ne=class{listeners=new Map;emit(n,...a){let u=this.listeners.get(n);!u||u.size===0||[...u].forEach(d=>{d(...a);});}on(n,a){let u=this.listeners.get(n)??new Set;u.add(a),this.listeners.set(n,u);}removeListener(n,a){let u=this.listeners.get(n);u&&(u.delete(a),u.size===0&&this.listeners.delete(n));}};var H=async(c,n,a=!0,u=!0)=>{let d=trackFlow("passport",n,a);try{return await c(d)}catch(h){throw h instanceof Error?trackError("passport",n,h,{flowId:d.details.flowId}):d.addEvent("errored"),h}finally{u&&d.addEvent("End");}};var nn=()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof globalThis<"u"?globalThis:{},on=c=>{let n=c.replace(/-/g,"+").replace(/_/g,"/"),a=n.length%4===0?"":"=".repeat(4-n.length%4);return n+a},sn=c=>{let n=nn();if(typeof n.atob!="function")return null;let a=n.atob(c),u=new Uint8Array(a.length);for(let h=0;h<a.length;h+=1)u[h]=a.charCodeAt(h);if(typeof n.TextDecoder=="function")return new n.TextDecoder("utf-8").decode(u);let d="";for(let h=0;h<u.length;h+=1)d+=String.fromCharCode(u[h]);return d},an=c=>{if(typeof L<"u")return L.from(c,"base64").toString("utf-8");let n=sn(c);if(n===null)throw new Error("Base64 decoding is not supported in this environment");return n},J=c=>{if(typeof c!="string")throw new Error("JWT must be a string");let n=c.split(".");if(n.length<2)throw new Error("Invalid JWT: payload segment is missing");let a=n[1],u=an(on(a));try{return JSON.parse(u)}catch{throw new Error("Invalid JWT payload: unable to parse JSON")}};var at="pkce_state",lt="pkce_verifier",ln=3600,ce=class{isTokenValid(n){try{let u=J(n).exp??0,d=Date.now()/1e3+ln;return u>d}catch{return !1}}savePKCEData(n){localStorage.setItem(at,n.state),localStorage.setItem(lt,n.verifier);}getPKCEData(){let n=localStorage.getItem(at),a=localStorage.getItem(lt);return n&&a?{state:n,verifier:a}:null}};var un=(...c)=>{if(typeof v>"u")return;v?.env?.JEST_WORKER_ID===void 0&&console.warn(...c);},ie={warn:un};function ut(c){try{let n=J(c),a=Math.floor(Date.now()/1e3);return n.exp?n.exp<=a+30:!0}catch{return !0}}function ct(c){let{id_token:n,access_token:a}=c;return !a||!n?!0:ut(a)||ut(n)}var pe=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(n,a=!1){this.disableBlockedPopupOverlay=n.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=n.disableGenericPopupOverlay||!1,this.isBlockedOverlay=a;}append(n,a){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(n),this.updateCloseButton(a));}update(n){this.updateTryAgainButton(n);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){ye({id:"link-googleapis",href:"https://fonts.googleapis.com"}),ye({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),ye({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 a=document.createElement("div");a.innerHTML=this.isBlockedOverlay?nt():it(),document.body.insertAdjacentElement("beforeend",a),this.overlay=a;}}updateTryAgainButton(n){let a=document.getElementById(Ee);a&&(this.tryAgainListener&&a.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=n,a.addEventListener("click",n));}updateCloseButton(n){let a=document.getElementById(ge);a&&(this.onCloseListener&&a.removeEventListener("click",this.onCloseListener),this.onCloseListener=n,a.addEventListener("click",n));}};var we=class{storage;constructor(n,a){this.storage=cn.createInstance({name:n,driver:a});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(n){return this.storage.getItem(n)}key(n){return this.storage.key(n)}async removeItem(n){await this.storage.removeItem(n);}async setItem(n,a){await this.storage.setItem(n,a);}};var In={"Content-Type":"application/x-www-form-urlencoded"},Tn=c=>{if(c)try{return JSON.parse(c)}catch{return}},vn=(c,n,a)=>{if(c&&typeof c=="object"){let u=c,d=u.error_description??u.message??u.error;if(typeof d=="string"&&d.trim().length>0)return d}return n.trim().length>0?n:`Token request failed with status ${a}`},An="/v2/logout",On="/im-logged-out",Ln="/authorize",Un=c=>c?On:An,Pn=c=>{let{authenticationDomain:n,oidcConfiguration:a}=c,u;c.crossSdkBridgeEnabled?u=new we("ImmutableSDKPassport",cn.INDEXEDDB):typeof window<"u"?u=window.localStorage:u=new InMemoryWebStorage;let d=new WebStorageStateStore({store:u}),h=new URL(Un(c.crossSdkBridgeEnabled),n.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return h.searchParams.set("client_id",a.clientId),a.logoutRedirectUri&&h.searchParams.set("returnTo",a.logoutRedirectUri),{authority:n,redirect_uri:a.redirectUri,popup_redirect_uri:a.popupRedirectUri||a.redirectUri,client_id:a.clientId,metadata:{authorization_endpoint:`${n}/authorize`,token_endpoint:`${n}/oauth/token`,userinfo_endpoint:`${n}/userinfo`,end_session_endpoint:h.toString(),revocation_endpoint:`${n}/oauth/revoke`},automaticSilentRenew:!1,scope:a.scope,userStore:d,revokeTokenTypes:["refresh_token"],extraQueryParams:{...a.audience?{audience:a.audience}:{}}}};function Be(c){return btoa(String.fromCharCode(...new Uint8Array(c))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function kn(c){let a=new TextEncoder().encode(c);return window.crypto.subtle.digest("SHA-256",a)}var be=class c{config;userManager;deviceCredentialsManager;embeddedLoginPrompt;logoutMode;refreshingPromise=null;eventEmitter;constructor(n){this.config=new ae(n),this.embeddedLoginPrompt=new ue(this.config),this.userManager=new UserManager(Pn(this.config)),this.deviceCredentialsManager=new ce,this.logoutMode=this.config.oidcConfiguration.logoutMode||"redirect",this.eventEmitter=new ne,track("passport","initialise");}async login(n){return H(async()=>{let{useCachedSession:a=!1,useSilentLogin:u}=n||{},d=null;try{d=await this.getUserInternal();}catch(h){if(h instanceof Error&&!h.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",h),a)throw h;ie.warn("Failed to retrieve a cached user session",h);}if(!d&&u)d=await this.forceUserRefreshInternal();else if(!d&&!a){if(n?.useRedirectFlow)return await this.loginWithRedirectInternal(n?.directLoginOptions),null;d=await this.loginWithPopup(n?.directLoginOptions);}return d&&this.handleSuccessfulLogin(d),d},"login")}async loginWithRedirect(n){await this.loginWithRedirectInternal(n);}async loginCallback(){return H(async()=>{let n=await this.loginCallbackInternal();return n&&this.handleSuccessfulLogin(n),n},"loginCallback")}async logout(){await H(async()=>{await this.logoutInternal(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return this.getUserInternal()}async getUserOrLogin(){let n=null;try{n=await this.getUserInternal();}catch(u){ie.warn("Failed to retrieve a cached user session",u);}if(n)return n;let a=await this.loginWithPopup();return this.handleSuccessfulLogin(a),a}async getUserZkEvm(){return this.getUserZkEvmInternal()}async getIdToken(){return H(async()=>(await this.getUserInternal())?.idToken,"getIdToken",!1)}async getAccessToken(){return H(async()=>(await this.getUserInternal())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.forceUserRefreshInternal()}forceUserRefreshInBackground(){this.forceUserRefreshInBackgroundInternal();}async loginWithPKCEFlow(n,a){return H(async()=>this.getPKCEAuthorizationUrl(n,a),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(n,a){return H(async()=>{let u=await this.loginWithPKCEFlowCallbackInternal(n,a);return this.handleSuccessfulLogin(u),u},"loginWithPKCEFlowCallback")}async storeTokens(n){return H(async()=>{let a=await this.storeTokensInternal(n);return this.handleSuccessfulLogin(a),a},"storeTokens")}async getLogoutUrl(){return H(async()=>(await this.userManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.getLogoutUrlInternal()||void 0),"getLogoutUrl")}async logoutSilentCallback(n){return H(()=>this.userManager.signoutSilentCallback(n),"logoutSilentCallback")}getConfig(){return this.config}async getClientId(){return this.config.oidcConfiguration.clientId}handleSuccessfulLogin(n){this.eventEmitter.emit("loggedIn",n),identify({passportId:n.profile.sub});}buildExtraQueryParams(n,a){let u={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||""};if(n){if(n.directLoginMethod==="email"){let d=n.email;d&&(u.direct=n.directLoginMethod,u.email=d);}else u.direct=n.directLoginMethod;n.marketingConsentStatus&&(u.marketingConsent=n.marketingConsentStatus);}return a&&(u.im_passport_trace_id=a),u}async loginWithRedirectInternal(n){await this.userManager.clearStaleState(),await z(async()=>{let a=this.buildExtraQueryParams(n);await this.userManager.signinRedirect({extraQueryParams:a});},"AUTHENTICATION_ERROR");}async loginWithPopup(n){return z(async()=>{let a,u;if(n)a=n;else if(!this.config.popupOverlayOptions?.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:s,...y}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt();a=y,u=s;}let d=window.crypto.randomUUID(),h=async()=>{let s=this.buildExtraQueryParams(a,u);return this.userManager.signinPopup({extraQueryParams:s,popupWindowFeatures:{width:410,height:450},popupWindowTarget:d,popupAbortOnClose:!0})};return new Promise((s,y)=>{h().then(_=>s(c.mapOidcUserToDomainModel(_))).catch(_=>{if(!(_ instanceof Error)||_.message!=="Attempted to navigate on a disposed window"){y(_);return}let B=!1,m=new pe(this.config.popupOverlayOptions||{},!0);m.append(async()=>{try{if(B)window.open("",d);else {B=!0;let I=await h();m.remove(),s(c.mapOidcUserToDomainModel(I));}}catch(I){m.remove(),y(I);}},()=>{m.remove(),y(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}static mapOidcUserToDomainModel=n=>{let a,u;if(n.id_token){let h=J(n.id_token);a=h?.passport,h?.username&&(u=h?.username);}let d={expired:n.expired,idToken:n.id_token,accessToken:n.access_token,refreshToken:n.refresh_token,profile:{sub:n.profile.sub,email:n.profile.email,nickname:n.profile.nickname,username:u}};return a?.zkevm_eth_address&&a?.zkevm_user_admin_address&&(d.zkEvm={ethAddress:a.zkevm_eth_address,userAdminAddress:a.zkevm_user_admin_address}),d};static mapDeviceTokenResponseToOidcUser=n=>{let a=J(n.id_token);return new User({id_token:n.id_token,access_token:n.access_token,refresh_token:n.refresh_token,token_type:n.token_type,profile:{sub:a.sub,iss:a.iss,aud:a.aud,exp:a.exp,iat:a.iat,email:a.email,nickname:a.nickname,passport:a.passport,...a.username?{username:a.username}:{}}})};async loginCallbackInternal(){return z(async()=>{let n=await this.userManager.signinCallback();if(n)return c.mapOidcUserToDomainModel(n)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(n,a){let u=Be(window.crypto.getRandomValues(new Uint8Array(32))),d=Be(await kn(u)),h=Be(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:y,audience:_,clientId:B}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:h,verifier:u});let m=new URL(Ln,this.config.authenticationDomain);if(m.searchParams.set("response_type","code"),m.searchParams.set("code_challenge",d),m.searchParams.set("code_challenge_method","S256"),m.searchParams.set("client_id",B),m.searchParams.set("redirect_uri",s),m.searchParams.set("state",h),y&&m.searchParams.set("scope",y),_&&m.searchParams.set("audience",_),n){if(n.directLoginMethod==="email"){let I=n.email;I&&(m.searchParams.set("direct",n.directLoginMethod),m.searchParams.set("email",I));}else m.searchParams.set("direct",n.directLoginMethod);n.marketingConsentStatus&&m.searchParams.set("marketingConsent",n.marketingConsentStatus);}return a&&m.searchParams.set("im_passport_trace_id",a),m.toString()}async loginWithPKCEFlowCallbackInternal(n,a){return z(async()=>{let u=this.deviceCredentialsManager.getPKCEData();if(!u)throw new Error("No code verifier or state for PKCE");if(a!==u.state)throw new Error("Provided state does not match stored state");let d=await this.getPKCEToken(n,u.verifier),h=c.mapDeviceTokenResponseToOidcUser(d),s=c.mapOidcUserToDomainModel(h);return await this.userManager.storeUser(h),s},"AUTHENTICATION_ERROR")}async getPKCEToken(n,a){let u=await fetch(`${this.config.authenticationDomain}/oauth/token`,{method:"POST",headers:In,body:new URLSearchParams({client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:a,code:n,redirect_uri:this.config.oidcConfiguration.redirectUri})}),d=await u.text(),h=Tn(d);if(!u.ok)throw new Error(vn(h,d,u.status));if(!h||typeof h!="object")throw new Error("Token endpoint returned an invalid response");return h}async storeTokensInternal(n){return z(async()=>{let a=c.mapDeviceTokenResponseToOidcUser(n),u=c.mapOidcUserToDomainModel(a);return await this.userManager.storeUser(a),u},"AUTHENTICATION_ERROR")}async logoutInternal(){await z(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR");}async getLogoutUrlInternal(){let n=this.userManager.settings?.metadata?.end_session_endpoint;return n||(ie.warn("Failed to get logout URL"),null)}forceUserRefreshInBackgroundInternal(){this.refreshTokenAndUpdatePromise().catch(n=>{ie.warn("Failed to refresh user token",n);});}async forceUserRefreshInternal(){return this.refreshTokenAndUpdatePromise().catch(n=>(ie.warn("Failed to refresh user token",n),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise((n,a)=>{(async()=>{try{let u=await this.userManager.signinSilent();if(u){let d=c.mapOidcUserToDomainModel(u);this.eventEmitter.emit("tokenRefreshed",d),n(d);return}n(null);}catch(u){let d="AUTHENTICATION_ERROR",h="Failed to refresh token",s=!0,y="unknown";if(u instanceof ErrorTimeout?(d="SILENT_LOGIN_ERROR",h=`${h}: ${u.message}`,s=!1):u instanceof ErrorResponse?(d="NOT_LOGGED_IN_ERROR",h=`${h}: ${u.message||u.error_description}`,y=u.error==="invalid_grant"?"refresh_token_invalid":"refresh_failed"):u instanceof Error?(h=`${h}: ${u.message}`,y=u.message.toLowerCase().includes("network")?"network_error":"refresh_failed"):typeof u=="string"&&(h=`${h}: ${u}`,y="refresh_failed"),s){this.eventEmitter.emit("userRemoved",{reason:y,error:h});try{await this.userManager.removeUser();}catch(_){_ instanceof Error&&(h=`${h}: Failed to remove user: ${_.message}`);}}a(new G(h,d));}finally{this.refreshingPromise=null;}})();}),this.refreshingPromise)}async getUserInternal(n=a=>!0){if(this.refreshingPromise){let u=await this.refreshingPromise;return u&&n(u)?u:null}let a=await this.userManager.getUser();if(!a)return null;if(!ct(a)){let u=c.mapOidcUserToDomainModel(a);if(u&&n(u))return u}if(a.refresh_token){let u=await this.refreshTokenAndUpdatePromise();if(u&&n(u))return u}return null}async getUserZkEvmInternal(){let n=await this.getUserInternal(Ue);if(!n)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return n}};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
388
388
|
|
|
389
|
-
export { be as Auth, ae as AuthConfiguration,
|
|
389
|
+
export { be as Auth, ae as AuthConfiguration, Pe as AuthEvents, je as MarketingConsentStatus, G as PassportError, me as PassportErrorType, Je as RollupType, ne as TypedEventEmitter, J as decodeJwtPayload, Le as isAPIError, Ue as isUserZkEvm, z as withPassportError };
|
package/dist/node/index.cjs
CHANGED
|
@@ -8,7 +8,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
8
8
|
|
|
9
9
|
var he__default = /*#__PURE__*/_interopDefault(he);
|
|
10
10
|
|
|
11
|
-
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.TRANSACTION_REJECTED="TRANSACTION_REJECTED",s))(P||{});function b(
|
|
11
|
+
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.TRANSACTION_REJECTED="TRANSACTION_REJECTED",s))(P||{});function b(i){return typeof i=="object"&&i!==null&&"code"in i&&"message"in i}var X=i=>{if(b(i))return i;if(typeof i=="object"&&i!==null&&"response"in i){let{response:e}=i;if(e?.data&&b(e.data))return e.data}},u=class extends Error{type;constructor(e,t){super(e),this.type=t;}},g=async(i,e)=>{try{return await i()}catch(t){let r;if(t instanceof u&&t.type==="SERVICE_UNAVAILABLE_ERROR")throw new u(t.message,t.type);let n=X(t);throw n?r=n.message:r=t.message,new u(r,e)}};var ee=(i,e,t)=>{let r=e.map(n=>!i[n]&&n).filter(n=>n).join(", ");if(r!==""){let n=`${r} cannot be null`;throw new u(n,"INVALID_CONFIGURATION")}},y=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:e,passportDomain:t,crossSdkBridgeEnabled:r,popupOverlayOptions:n,...o}){ee(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.crossSdkBridgeEnabled=r||!1,this.popupOverlayOptions=n,this.authenticationDomain=e||"https://auth.immutable.com",this.passportDomain=t||"https://passport.immutable.com";}};var N=(e=>(e.ZKEVM="zkEvm",e))(N||{}),U=i=>!!i.zkEvm,F=(r=>(r.OptedIn="opted_in",r.Unsubscribed="unsubscribed",r.Subscribed="subscribed",r))(F||{}),x=(n=>(n.LOGGED_OUT="loggedOut",n.LOGGED_IN="loggedIn",n.TOKEN_REFRESHED="tokenRefreshed",n.USER_REMOVED="userRemoved",n))(x||{});var H="im_passport_embedded_login_prompt";var h="passport-overlay",R="passport-overlay-contents",I=`${h}-close`,w=`${h}-try-again`,V=`
|
|
12
12
|
<svg
|
|
13
13
|
viewBox="0 0 20 20"
|
|
14
14
|
fill="none"
|
|
@@ -290,7 +290,7 @@ var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION
|
|
|
290
290
|
Secure pop-up not showing?<br />We'll help you re-launch
|
|
291
291
|
</p>
|
|
292
292
|
${B()}
|
|
293
|
-
`,K=
|
|
293
|
+
`,K=i=>`
|
|
294
294
|
<div
|
|
295
295
|
id="${h}"
|
|
296
296
|
style="
|
|
@@ -325,7 +325,7 @@ var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION
|
|
|
325
325
|
max-width: 400px !important;
|
|
326
326
|
"
|
|
327
327
|
>
|
|
328
|
-
${
|
|
328
|
+
${i??""}
|
|
329
329
|
</div>
|
|
330
330
|
</div>
|
|
331
331
|
`,Z=()=>`
|
|
@@ -357,7 +357,7 @@ var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION
|
|
|
357
357
|
"
|
|
358
358
|
/>
|
|
359
359
|
</div>
|
|
360
|
-
`;function A({id:
|
|
360
|
+
`;function A({id:i,href:e,rel:t,crossOrigin:r}){let n=`${h}-${i}`;if(!document.getElementById(n)){let o=document.createElement("link");o.id=n,o.href=e,t&&(o.rel=t),r&&(o.crossOrigin=r),document.head.appendChild(o);}}var W=()=>K(re()),$=()=>K(ne());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 n=document.querySelector(`#${R}`);n&&n.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var se=660,ae=440,le="16px",Y="passport-embedded-login-keyframes",z="passport-embedded-login-iframe",v=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(Y))return;let e=document.createElement("style");e.id=Y,e.textContent=`
|
|
361
361
|
@keyframes passportEmbeddedLoginPromptPopBounceIn {
|
|
362
362
|
0% {
|
|
363
363
|
opacity: 0.5;
|
|
@@ -390,16 +390,16 @@ var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION
|
|
|
390
390
|
opacity: 1;
|
|
391
391
|
}
|
|
392
392
|
}
|
|
393
|
-
`,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=z,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${se}px`,e.style.maxWidth=`${ae}px`,e.style.borderRadius=le,e.style.opacity="0",e.style.transform="scale(0.6)",e.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",n.appendIFrameStylesIfNeeded(),e};displayEmbeddedLoginPrompt(){return new Promise((e,t)=>{let r=this.getEmbeddedLoginIFrame(),i=({data:o,origin:l})=>{if(!(l!==this.config.authenticationDomain||o.eventType!==H))switch(o.messageType){case"login_method_selected":{let d=o.payload;window.removeEventListener("message",i),u.remove(),e(d);break}case"login_prompt_error":{window.removeEventListener("message",i),u.remove(),t(new Error("Error during embedded login prompt",{cause:o.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",i),u.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",i),u.remove(),t(new Error(`Unsupported message type: ${o.messageType}`));break}};window.addEventListener("message",i),u.appendOverlay(r,()=>{window.removeEventListener("message",i),u.remove(),t(new Error("Popup closed by user"));});})}};var C=class{listeners=new Map;emit(e,...t){let r=this.listeners.get(e);!r||r.size===0||[...r].forEach(i=>{i(...t);});}on(e,t){let r=this.listeners.get(e)??new Set;r.add(t),this.listeners.set(e,r);}removeListener(e,t){let r=this.listeners.get(e);r&&(r.delete(t),r.size===0&&this.listeners.delete(e));}};var c=async(n,e,t=!0,r=!0)=>{let i=metrics.trackFlow("passport",e,t);try{return await n(i)}catch(o){throw o instanceof Error?metrics.trackError("passport",e,o,{flowId:i.details.flowId}):i.addEvent("errored"),o}finally{r&&i.addEvent("End");}};var pe=()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{},ue=n=>{let e=n.replace(/-/g,"+").replace(/_/g,"/"),t=e.length%4===0?"":"=".repeat(4-e.length%4);return e+t},me=n=>{let e=pe();if(typeof e.atob!="function")return null;let t=e.atob(n),r=new Uint8Array(t.length);for(let o=0;o<t.length;o+=1)r[o]=t.charCodeAt(o);if(typeof e.TextDecoder=="function")return new e.TextDecoder("utf-8").decode(r);let i="";for(let o=0;o<r.length;o+=1)i+=String.fromCharCode(r[o]);return i},ge=n=>{if(typeof Buffer<"u")return Buffer.from(n,"base64").toString("utf-8");let e=me(n);if(e===null)throw new Error("Base64 decoding is not supported in this environment");return e},f=n=>{if(typeof n!="string")throw new Error("JWT must be a string");let e=n.split(".");if(e.length<2)throw new Error("Invalid JWT: payload segment is missing");let t=e[1],r=ge(ue(t));try{return JSON.parse(r)}catch{throw new Error("Invalid JWT payload: unable to parse JSON")}};var J="pkce_state",j="pkce_verifier",fe=3600,v=class{isTokenValid(e){try{let r=f(e).exp??0,i=Date.now()/1e3+fe;return r>i}catch{return !1}}savePKCEData(e){localStorage.setItem(J,e.state),localStorage.setItem(j,e.verifier);}getPKCEData(){let e=localStorage.getItem(J),t=localStorage.getItem(j);return e&&t?{state:e,verifier:t}:null}};var Ee=(...n)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...n);},_={warn:Ee};function Q(n){try{let e=f(n),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function q(n){let{id_token:e,access_token:t}=n;return !t||!e?!0:Q(t)||Q(e)}var T=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?W():$(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(w);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=he__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 ke={"Content-Type":"application/x-www-form-urlencoded"},be=n=>{if(n)try{return JSON.parse(n)}catch{return}},Ue=(n,e,t)=>{if(n&&typeof n=="object"){let r=n,i=r.error_description??r.message??r.error;if(typeof i=="string"&&i.trim().length>0)return i}return e.trim().length>0?e:`Token request failed with status ${t}`},xe="/v2/logout",Se="/im-logged-out",Ne="/authorize",De=n=>n?Se:xe,Me=n=>{let{authenticationDomain:e,oidcConfiguration:t}=n,r;n.crossSdkBridgeEnabled?r=new k("ImmutableSDKPassport",he__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let i=new oidcClientTs.WebStorageStateStore({store:r}),o=new URL(De(n.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 N(n){return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Fe(n){let t=new TextEncoder().encode(n);return window.crypto.subtle.digest("SHA-256",t)}var D=class n{config;userManager;deviceCredentialsManager;embeddedLoginPrompt;logoutMode;refreshingPromise=null;eventEmitter;constructor(e){this.config=new y(e),this.embeddedLoginPrompt=new O(this.config),this.userManager=new oidcClientTs.UserManager(Me(this.config)),this.deviceCredentialsManager=new v,this.logoutMode=this.config.oidcConfiguration.logoutMode||"redirect",this.eventEmitter=new C,metrics.track("passport","initialise");}async login(e){return c(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},i=null;try{i=await this.getUserInternal();}catch(o){if(o instanceof Error&&!o.message.includes("Unknown or invalid refresh token")&&metrics.trackError("passport","login",o),t)throw o;_.warn("Failed to retrieve a cached user session",o);}if(!i&&r)i=await this.forceUserRefreshInternal();else if(!i&&!t){if(e?.useRedirectFlow)return await this.loginWithRedirectInternal(e?.directLoginOptions),null;i=await this.loginWithPopup(e?.directLoginOptions);}return i&&this.handleSuccessfulLogin(i),i},"login")}async loginWithRedirect(e){await this.loginWithRedirectInternal(e);}async loginCallback(){return c(async()=>{let e=await this.loginCallbackInternal();return e&&this.handleSuccessfulLogin(e),e},"loginCallback")}async logout(){await c(async()=>{await this.logoutInternal(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return this.getUserInternal()}async getUserOrLogin(){let e=null;try{e=await this.getUserInternal();}catch(r){_.warn("Failed to retrieve a cached user session",r);}if(e)return e;let t=await this.loginWithPopup();return this.handleSuccessfulLogin(t),t}async getUserZkEvm(){return this.getUserZkEvmInternal()}async getIdToken(){return c(async()=>(await this.getUserInternal())?.idToken,"getIdToken",!1)}async getAccessToken(){return c(async()=>(await this.getUserInternal())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.forceUserRefreshInternal()}forceUserRefreshInBackground(){this.forceUserRefreshInBackgroundInternal();}async loginWithPKCEFlow(e,t){return c(async()=>this.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return c(async()=>{let r=await this.loginWithPKCEFlowCallbackInternal(e,t);return this.handleSuccessfulLogin(r),r},"loginWithPKCEFlowCallback")}async storeTokens(e){return c(async()=>{let t=await this.storeTokensInternal(e);return this.handleSuccessfulLogin(t),t},"storeTokens")}async getLogoutUrl(){return c(async()=>(await this.userManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.getLogoutUrlInternal()||void 0),"getLogoutUrl")}async logoutSilentCallback(e){return c(()=>this.userManager.signoutSilentCallback(e),"logoutSilentCallback")}getConfig(){return this.config}async getClientId(){return this.config.oidcConfiguration.clientId}handleSuccessfulLogin(e){this.eventEmitter.emit("loggedIn",e),metrics.identify({passportId:e.profile.sub});}buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:metrics.getDetail(metrics.Detail.RUNTIME_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 loginWithRedirectInternal(e){await this.userManager.clearStaleState(),await g(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR");}async loginWithPopup(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(),o=async()=>{let l=this.buildExtraQueryParams(t,r);return this.userManager.signinPopup({extraQueryParams:l,popupWindowFeatures:{width:410,height:450},popupWindowTarget:i,popupAbortOnClose:!0})};return new Promise((l,d)=>{o().then(m=>l(n.mapOidcUserToDomainModel(m))).catch(m=>{if(!(m instanceof Error)||m.message!=="Attempted to navigate on a disposed window"){d(m);return}let L=!1,a=new T(this.config.popupOverlayOptions||{},!0);a.append(async()=>{try{if(L)window.open("",i);else {L=!0;let E=await o();a.remove(),l(n.mapOidcUserToDomainModel(E));}}catch(E){a.remove(),d(E);}},()=>{a.remove(),d(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}static mapOidcUserToDomainModel=e=>{let t,r;if(e.id_token){let o=f(e.id_token);t=o?.passport,o?.username&&(r=o?.username);}let i={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,username:r}};return t?.zkevm_eth_address&&t?.zkevm_user_admin_address&&(i.zkEvm={ethAddress:t.zkevm_eth_address,userAdminAddress:t.zkevm_user_admin_address}),i};static mapDeviceTokenResponseToOidcUser=e=>{let t=f(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,...t.username?{username:t.username}:{}}})};async loginCallbackInternal(){return g(async()=>{let e=await this.userManager.signinCallback();if(e)return n.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=N(window.crypto.getRandomValues(new Uint8Array(32))),i=N(await Fe(r)),o=N(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:l,scope:d,audience:m,clientId:L}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:o,verifier:r});let a=new URL(Ne,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",L),a.searchParams.set("redirect_uri",l),a.searchParams.set("state",o),d&&a.searchParams.set("scope",d),m&&a.searchParams.set("audience",m),e){if(e.directLoginMethod==="email"){let E=e.email;E&&(a.searchParams.set("direct",e.directLoginMethod),a.searchParams.set("email",E));}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 loginWithPKCEFlowCallbackInternal(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),o=n.mapDeviceTokenResponseToOidcUser(i),l=n.mapOidcUserToDomainModel(o);return await this.userManager.storeUser(o),l},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){let r=await fetch(`${this.config.authenticationDomain}/oauth/token`,{method:"POST",headers:ke,body:new URLSearchParams({client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri})}),i=await r.text(),o=be(i);if(!r.ok)throw new Error(Ue(o,i,r.status));if(!o||typeof o!="object")throw new Error("Token endpoint returned an invalid response");return o}async storeTokensInternal(e){return g(async()=>{let t=n.mapDeviceTokenResponseToOidcUser(e),r=n.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logoutInternal(){await g(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR");}async getLogoutUrlInternal(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(_.warn("Failed to get logout URL"),null)}forceUserRefreshInBackgroundInternal(){this.refreshTokenAndUpdatePromise().catch(e=>{_.warn("Failed to refresh user token",e);});}async forceUserRefreshInternal(){return this.refreshTokenAndUpdatePromise().catch(e=>(_.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise((e,t)=>{(async()=>{try{let r=await this.userManager.signinSilent();if(r){let i=n.mapOidcUserToDomainModel(r);this.eventEmitter.emit("tokenRefreshed",i),e(i);return}e(null);}catch(r){let i="AUTHENTICATION_ERROR",o="Failed to refresh token",l=!0;if(r instanceof oidcClientTs.ErrorTimeout?(i="SILENT_LOGIN_ERROR",o=`${o}: ${r.message}`,l=!1):r instanceof oidcClientTs.ErrorResponse?(i="NOT_LOGGED_IN_ERROR",o=`${o}: ${r.message||r.error_description}`):r instanceof Error?o=`${o}: ${r.message}`:typeof r=="string"&&(o=`${o}: ${r}`),l)try{await this.userManager.removeUser();}catch(d){d instanceof Error&&(o=`${o}: Failed to remove user: ${d.message}`);}t(new p(o,i));}finally{this.refreshingPromise=null;}})();}),this.refreshingPromise)}async getUserInternal(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(!q(t)){let r=n.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 getUserZkEvmInternal(){let e=await this.getUserInternal(U);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}};
|
|
393
|
+
`,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=z,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${se}px`,e.style.maxWidth=`${ae}px`,e.style.borderRadius=le,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(),n=({data:o,origin:l})=>{if(!(l!==this.config.authenticationDomain||o.eventType!==H))switch(o.messageType){case"login_method_selected":{let d=o.payload;window.removeEventListener("message",n),m.remove(),e(d);break}case"login_prompt_error":{window.removeEventListener("message",n),m.remove(),t(new Error("Error during embedded login prompt",{cause:o.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",n),m.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",n),m.remove(),t(new Error(`Unsupported message type: ${o.messageType}`));break}};window.addEventListener("message",n),m.appendOverlay(r,()=>{window.removeEventListener("message",n),m.remove(),t(new Error("Popup closed by user"));});})}};var _=class{listeners=new Map;emit(e,...t){let r=this.listeners.get(e);!r||r.size===0||[...r].forEach(n=>{n(...t);});}on(e,t){let r=this.listeners.get(e)??new Set;r.add(t),this.listeners.set(e,r);}removeListener(e,t){let r=this.listeners.get(e);r&&(r.delete(t),r.size===0&&this.listeners.delete(e));}};var p=async(i,e,t=!0,r=!0)=>{let n=metrics.trackFlow("passport",e,t);try{return await i(n)}catch(o){throw o instanceof Error?metrics.trackError("passport",e,o,{flowId:n.details.flowId}):n.addEvent("errored"),o}finally{r&&n.addEvent("End");}};var pe=()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{},ue=i=>{let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=e.length%4===0?"":"=".repeat(4-e.length%4);return e+t},me=i=>{let e=pe();if(typeof e.atob!="function")return null;let t=e.atob(i),r=new Uint8Array(t.length);for(let o=0;o<t.length;o+=1)r[o]=t.charCodeAt(o);if(typeof e.TextDecoder=="function")return new e.TextDecoder("utf-8").decode(r);let n="";for(let o=0;o<r.length;o+=1)n+=String.fromCharCode(r[o]);return n},ge=i=>{if(typeof Buffer<"u")return Buffer.from(i,"base64").toString("utf-8");let e=me(i);if(e===null)throw new Error("Base64 decoding is not supported in this environment");return e},f=i=>{if(typeof i!="string")throw new Error("JWT must be a string");let e=i.split(".");if(e.length<2)throw new Error("Invalid JWT: payload segment is missing");let t=e[1],r=ge(ue(t));try{return JSON.parse(r)}catch{throw new Error("Invalid JWT payload: unable to parse JSON")}};var J="pkce_state",j="pkce_verifier",fe=3600,O=class{isTokenValid(e){try{let r=f(e).exp??0,n=Date.now()/1e3+fe;return r>n}catch{return !1}}savePKCEData(e){localStorage.setItem(J,e.state),localStorage.setItem(j,e.verifier);}getPKCEData(){let e=localStorage.getItem(J),t=localStorage.getItem(j);return e&&t?{state:e,verifier:t}:null}};var Ee=(...i)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...i);},C={warn:Ee};function Q(i){try{let e=f(i),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function q(i){let{id_token:e,access_token:t}=i;return !t||!e?!0:Q(t)||Q(e)}var T=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?W():$(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(w);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=he__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 ke={"Content-Type":"application/x-www-form-urlencoded"},be=i=>{if(i)try{return JSON.parse(i)}catch{return}},Ue=(i,e,t)=>{if(i&&typeof i=="object"){let r=i,n=r.error_description??r.message??r.error;if(typeof n=="string"&&n.trim().length>0)return n}return e.trim().length>0?e:`Token request failed with status ${t}`},xe="/v2/logout",Se="/im-logged-out",De="/authorize",Me=i=>i?Se:xe,Ne=i=>{let{authenticationDomain:e,oidcConfiguration:t}=i,r;i.crossSdkBridgeEnabled?r=new k("ImmutableSDKPassport",he__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let n=new oidcClientTs.WebStorageStateStore({store:r}),o=new URL(Me(i.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:n,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 Fe(i){let t=new TextEncoder().encode(i);return window.crypto.subtle.digest("SHA-256",t)}var M=class i{config;userManager;deviceCredentialsManager;embeddedLoginPrompt;logoutMode;refreshingPromise=null;eventEmitter;constructor(e){this.config=new y(e),this.embeddedLoginPrompt=new v(this.config),this.userManager=new oidcClientTs.UserManager(Ne(this.config)),this.deviceCredentialsManager=new O,this.logoutMode=this.config.oidcConfiguration.logoutMode||"redirect",this.eventEmitter=new _,metrics.track("passport","initialise");}async login(e){return p(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},n=null;try{n=await this.getUserInternal();}catch(o){if(o instanceof Error&&!o.message.includes("Unknown or invalid refresh token")&&metrics.trackError("passport","login",o),t)throw o;C.warn("Failed to retrieve a cached user session",o);}if(!n&&r)n=await this.forceUserRefreshInternal();else if(!n&&!t){if(e?.useRedirectFlow)return await this.loginWithRedirectInternal(e?.directLoginOptions),null;n=await this.loginWithPopup(e?.directLoginOptions);}return n&&this.handleSuccessfulLogin(n),n},"login")}async loginWithRedirect(e){await this.loginWithRedirectInternal(e);}async loginCallback(){return p(async()=>{let e=await this.loginCallbackInternal();return e&&this.handleSuccessfulLogin(e),e},"loginCallback")}async logout(){await p(async()=>{await this.logoutInternal(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return this.getUserInternal()}async getUserOrLogin(){let e=null;try{e=await this.getUserInternal();}catch(r){C.warn("Failed to retrieve a cached user session",r);}if(e)return e;let t=await this.loginWithPopup();return this.handleSuccessfulLogin(t),t}async getUserZkEvm(){return this.getUserZkEvmInternal()}async getIdToken(){return p(async()=>(await this.getUserInternal())?.idToken,"getIdToken",!1)}async getAccessToken(){return p(async()=>(await this.getUserInternal())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.forceUserRefreshInternal()}forceUserRefreshInBackground(){this.forceUserRefreshInBackgroundInternal();}async loginWithPKCEFlow(e,t){return p(async()=>this.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return p(async()=>{let r=await this.loginWithPKCEFlowCallbackInternal(e,t);return this.handleSuccessfulLogin(r),r},"loginWithPKCEFlowCallback")}async storeTokens(e){return p(async()=>{let t=await this.storeTokensInternal(e);return this.handleSuccessfulLogin(t),t},"storeTokens")}async getLogoutUrl(){return p(async()=>(await this.userManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.getLogoutUrlInternal()||void 0),"getLogoutUrl")}async logoutSilentCallback(e){return p(()=>this.userManager.signoutSilentCallback(e),"logoutSilentCallback")}getConfig(){return this.config}async getClientId(){return this.config.oidcConfiguration.clientId}handleSuccessfulLogin(e){this.eventEmitter.emit("loggedIn",e),metrics.identify({passportId:e.profile.sub});}buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:metrics.getDetail(metrics.Detail.RUNTIME_ID)||""};if(e){if(e.directLoginMethod==="email"){let n=e.email;n&&(r.direct=e.directLoginMethod,r.email=n);}else r.direct=e.directLoginMethod;e.marketingConsentStatus&&(r.marketingConsent=e.marketingConsentStatus);}return t&&(r.im_passport_trace_id=t),r}async loginWithRedirectInternal(e){await this.userManager.clearStaleState(),await g(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR");}async loginWithPopup(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 n=window.crypto.randomUUID(),o=async()=>{let l=this.buildExtraQueryParams(t,r);return this.userManager.signinPopup({extraQueryParams:l,popupWindowFeatures:{width:410,height:450},popupWindowTarget:n,popupAbortOnClose:!0})};return new Promise((l,d)=>{o().then(c=>l(i.mapOidcUserToDomainModel(c))).catch(c=>{if(!(c instanceof Error)||c.message!=="Attempted to navigate on a disposed window"){d(c);return}let L=!1,a=new T(this.config.popupOverlayOptions||{},!0);a.append(async()=>{try{if(L)window.open("",n);else {L=!0;let E=await o();a.remove(),l(i.mapOidcUserToDomainModel(E));}}catch(E){a.remove(),d(E);}},()=>{a.remove(),d(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}static mapOidcUserToDomainModel=e=>{let t,r;if(e.id_token){let o=f(e.id_token);t=o?.passport,o?.username&&(r=o?.username);}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,username:r}};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=f(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,...t.username?{username:t.username}:{}}})};async loginCallbackInternal(){return g(async()=>{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))),n=D(await Fe(r)),o=D(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:l,scope:d,audience:c,clientId:L}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:o,verifier:r});let a=new URL(De,this.config.authenticationDomain);if(a.searchParams.set("response_type","code"),a.searchParams.set("code_challenge",n),a.searchParams.set("code_challenge_method","S256"),a.searchParams.set("client_id",L),a.searchParams.set("redirect_uri",l),a.searchParams.set("state",o),d&&a.searchParams.set("scope",d),c&&a.searchParams.set("audience",c),e){if(e.directLoginMethod==="email"){let E=e.email;E&&(a.searchParams.set("direct",e.directLoginMethod),a.searchParams.set("email",E));}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 loginWithPKCEFlowCallbackInternal(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 n=await this.getPKCEToken(e,r.verifier),o=i.mapDeviceTokenResponseToOidcUser(n),l=i.mapOidcUserToDomainModel(o);return await this.userManager.storeUser(o),l},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){let r=await fetch(`${this.config.authenticationDomain}/oauth/token`,{method:"POST",headers:ke,body:new URLSearchParams({client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri})}),n=await r.text(),o=be(n);if(!r.ok)throw new Error(Ue(o,n,r.status));if(!o||typeof o!="object")throw new Error("Token endpoint returned an invalid response");return o}async storeTokensInternal(e){return g(async()=>{let t=i.mapDeviceTokenResponseToOidcUser(e),r=i.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logoutInternal(){await g(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR");}async getLogoutUrlInternal(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(C.warn("Failed to get logout URL"),null)}forceUserRefreshInBackgroundInternal(){this.refreshTokenAndUpdatePromise().catch(e=>{C.warn("Failed to refresh user token",e);});}async forceUserRefreshInternal(){return this.refreshTokenAndUpdatePromise().catch(e=>(C.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise((e,t)=>{(async()=>{try{let r=await this.userManager.signinSilent();if(r){let n=i.mapOidcUserToDomainModel(r);this.eventEmitter.emit("tokenRefreshed",n),e(n);return}e(null);}catch(r){let n="AUTHENTICATION_ERROR",o="Failed to refresh token",l=!0,d="unknown";if(r instanceof oidcClientTs.ErrorTimeout?(n="SILENT_LOGIN_ERROR",o=`${o}: ${r.message}`,l=!1):r instanceof oidcClientTs.ErrorResponse?(n="NOT_LOGGED_IN_ERROR",o=`${o}: ${r.message||r.error_description}`,d=r.error==="invalid_grant"?"refresh_token_invalid":"refresh_failed"):r instanceof Error?(o=`${o}: ${r.message}`,d=r.message.toLowerCase().includes("network")?"network_error":"refresh_failed"):typeof r=="string"&&(o=`${o}: ${r}`,d="refresh_failed"),l){this.eventEmitter.emit("userRemoved",{reason:d,error:o});try{await this.userManager.removeUser();}catch(c){c instanceof Error&&(o=`${o}: Failed to remove user: ${c.message}`);}}t(new u(o,n));}finally{this.refreshingPromise=null;}})();}),this.refreshingPromise)}async getUserInternal(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(!q(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 getUserZkEvmInternal(){let e=await this.getUserInternal(U);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}};
|
|
394
394
|
|
|
395
|
-
exports.Auth =
|
|
395
|
+
exports.Auth = M;
|
|
396
396
|
exports.AuthConfiguration = y;
|
|
397
397
|
exports.AuthEvents = x;
|
|
398
398
|
exports.MarketingConsentStatus = F;
|
|
399
|
-
exports.PassportError =
|
|
399
|
+
exports.PassportError = u;
|
|
400
400
|
exports.PassportErrorType = P;
|
|
401
|
-
exports.RollupType =
|
|
402
|
-
exports.TypedEventEmitter =
|
|
401
|
+
exports.RollupType = N;
|
|
402
|
+
exports.TypedEventEmitter = _;
|
|
403
403
|
exports.decodeJwtPayload = f;
|
|
404
404
|
exports.isAPIError = b;
|
|
405
405
|
exports.isUserZkEvm = U;
|
package/dist/node/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { UserManager, User, ErrorTimeout, ErrorResponse, InMemoryWebStorage, Web
|
|
|
2
2
|
import he from 'localforage';
|
|
3
3
|
import { track, identify, getDetail, Detail, trackFlow, trackError } from '@imtbl/metrics';
|
|
4
4
|
|
|
5
|
-
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.TRANSACTION_REJECTED="TRANSACTION_REJECTED",s))(P||{});function b(
|
|
5
|
+
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.TRANSACTION_REJECTED="TRANSACTION_REJECTED",s))(P||{});function b(i){return typeof i=="object"&&i!==null&&"code"in i&&"message"in i}var X=i=>{if(b(i))return i;if(typeof i=="object"&&i!==null&&"response"in i){let{response:e}=i;if(e?.data&&b(e.data))return e.data}},u=class extends Error{type;constructor(e,t){super(e),this.type=t;}},g=async(i,e)=>{try{return await i()}catch(t){let r;if(t instanceof u&&t.type==="SERVICE_UNAVAILABLE_ERROR")throw new u(t.message,t.type);let n=X(t);throw n?r=n.message:r=t.message,new u(r,e)}};var ee=(i,e,t)=>{let r=e.map(n=>!i[n]&&n).filter(n=>n).join(", ");if(r!==""){let n=`${r} cannot be null`;throw new u(n,"INVALID_CONFIGURATION")}},y=class{authenticationDomain;passportDomain;oidcConfiguration;crossSdkBridgeEnabled;popupOverlayOptions;constructor({authenticationDomain:e,passportDomain:t,crossSdkBridgeEnabled:r,popupOverlayOptions:n,...o}){ee(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.crossSdkBridgeEnabled=r||!1,this.popupOverlayOptions=n,this.authenticationDomain=e||"https://auth.immutable.com",this.passportDomain=t||"https://passport.immutable.com";}};var N=(e=>(e.ZKEVM="zkEvm",e))(N||{}),U=i=>!!i.zkEvm,F=(r=>(r.OptedIn="opted_in",r.Unsubscribed="unsubscribed",r.Subscribed="subscribed",r))(F||{}),x=(n=>(n.LOGGED_OUT="loggedOut",n.LOGGED_IN="loggedIn",n.TOKEN_REFRESHED="tokenRefreshed",n.USER_REMOVED="userRemoved",n))(x||{});var H="im_passport_embedded_login_prompt";var h="passport-overlay",R="passport-overlay-contents",I=`${h}-close`,w=`${h}-try-again`,V=`
|
|
6
6
|
<svg
|
|
7
7
|
viewBox="0 0 20 20"
|
|
8
8
|
fill="none"
|
|
@@ -284,7 +284,7 @@ var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION
|
|
|
284
284
|
Secure pop-up not showing?<br />We'll help you re-launch
|
|
285
285
|
</p>
|
|
286
286
|
${B()}
|
|
287
|
-
`,K=
|
|
287
|
+
`,K=i=>`
|
|
288
288
|
<div
|
|
289
289
|
id="${h}"
|
|
290
290
|
style="
|
|
@@ -319,7 +319,7 @@ var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION
|
|
|
319
319
|
max-width: 400px !important;
|
|
320
320
|
"
|
|
321
321
|
>
|
|
322
|
-
${
|
|
322
|
+
${i??""}
|
|
323
323
|
</div>
|
|
324
324
|
</div>
|
|
325
325
|
`,Z=()=>`
|
|
@@ -351,7 +351,7 @@ var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION
|
|
|
351
351
|
"
|
|
352
352
|
/>
|
|
353
353
|
</div>
|
|
354
|
-
`;function A({id:
|
|
354
|
+
`;function A({id:i,href:e,rel:t,crossOrigin:r}){let n=`${h}-${i}`;if(!document.getElementById(n)){let o=document.createElement("link");o.id=n,o.href=e,t&&(o.rel=t),r&&(o.crossOrigin=r),document.head.appendChild(o);}}var W=()=>K(re()),$=()=>K(ne());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 n=document.querySelector(`#${R}`);n&&n.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var se=660,ae=440,le="16px",Y="passport-embedded-login-keyframes",z="passport-embedded-login-iframe",v=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(Y))return;let e=document.createElement("style");e.id=Y,e.textContent=`
|
|
355
355
|
@keyframes passportEmbeddedLoginPromptPopBounceIn {
|
|
356
356
|
0% {
|
|
357
357
|
opacity: 0.5;
|
|
@@ -384,6 +384,6 @@ var P=(s=>(s.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",s.INVALID_CONFIGURATION
|
|
|
384
384
|
opacity: 1;
|
|
385
385
|
}
|
|
386
386
|
}
|
|
387
|
-
`,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=z,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${se}px`,e.style.maxWidth=`${ae}px`,e.style.borderRadius=le,e.style.opacity="0",e.style.transform="scale(0.6)",e.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",n.appendIFrameStylesIfNeeded(),e};displayEmbeddedLoginPrompt(){return new Promise((e,t)=>{let r=this.getEmbeddedLoginIFrame(),i=({data:o,origin:l})=>{if(!(l!==this.config.authenticationDomain||o.eventType!==H))switch(o.messageType){case"login_method_selected":{let d=o.payload;window.removeEventListener("message",i),u.remove(),e(d);break}case"login_prompt_error":{window.removeEventListener("message",i),u.remove(),t(new Error("Error during embedded login prompt",{cause:o.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",i),u.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",i),u.remove(),t(new Error(`Unsupported message type: ${o.messageType}`));break}};window.addEventListener("message",i),u.appendOverlay(r,()=>{window.removeEventListener("message",i),u.remove(),t(new Error("Popup closed by user"));});})}};var C=class{listeners=new Map;emit(e,...t){let r=this.listeners.get(e);!r||r.size===0||[...r].forEach(i=>{i(...t);});}on(e,t){let r=this.listeners.get(e)??new Set;r.add(t),this.listeners.set(e,r);}removeListener(e,t){let r=this.listeners.get(e);r&&(r.delete(t),r.size===0&&this.listeners.delete(e));}};var c=async(n,e,t=!0,r=!0)=>{let i=trackFlow("passport",e,t);try{return await n(i)}catch(o){throw o instanceof Error?trackError("passport",e,o,{flowId:i.details.flowId}):i.addEvent("errored"),o}finally{r&&i.addEvent("End");}};var pe=()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{},ue=n=>{let e=n.replace(/-/g,"+").replace(/_/g,"/"),t=e.length%4===0?"":"=".repeat(4-e.length%4);return e+t},me=n=>{let e=pe();if(typeof e.atob!="function")return null;let t=e.atob(n),r=new Uint8Array(t.length);for(let o=0;o<t.length;o+=1)r[o]=t.charCodeAt(o);if(typeof e.TextDecoder=="function")return new e.TextDecoder("utf-8").decode(r);let i="";for(let o=0;o<r.length;o+=1)i+=String.fromCharCode(r[o]);return i},ge=n=>{if(typeof Buffer<"u")return Buffer.from(n,"base64").toString("utf-8");let e=me(n);if(e===null)throw new Error("Base64 decoding is not supported in this environment");return e},f=n=>{if(typeof n!="string")throw new Error("JWT must be a string");let e=n.split(".");if(e.length<2)throw new Error("Invalid JWT: payload segment is missing");let t=e[1],r=ge(ue(t));try{return JSON.parse(r)}catch{throw new Error("Invalid JWT payload: unable to parse JSON")}};var J="pkce_state",j="pkce_verifier",fe=3600,v=class{isTokenValid(e){try{let r=f(e).exp??0,i=Date.now()/1e3+fe;return r>i}catch{return !1}}savePKCEData(e){localStorage.setItem(J,e.state),localStorage.setItem(j,e.verifier);}getPKCEData(){let e=localStorage.getItem(J),t=localStorage.getItem(j);return e&&t?{state:e,verifier:t}:null}};var Ee=(...n)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...n);},_={warn:Ee};function Q(n){try{let e=f(n),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function q(n){let{id_token:e,access_token:t}=n;return !t||!e?!0:Q(t)||Q(e)}var T=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?W():$(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(w);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=he.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 ke={"Content-Type":"application/x-www-form-urlencoded"},be=n=>{if(n)try{return JSON.parse(n)}catch{return}},Ue=(n,e,t)=>{if(n&&typeof n=="object"){let r=n,i=r.error_description??r.message??r.error;if(typeof i=="string"&&i.trim().length>0)return i}return e.trim().length>0?e:`Token request failed with status ${t}`},xe="/v2/logout",Se="/im-logged-out",Ne="/authorize",De=n=>n?Se:xe,Me=n=>{let{authenticationDomain:e,oidcConfiguration:t}=n,r;n.crossSdkBridgeEnabled?r=new k("ImmutableSDKPassport",he.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let i=new WebStorageStateStore({store:r}),o=new URL(De(n.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 N(n){return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Fe(n){let t=new TextEncoder().encode(n);return window.crypto.subtle.digest("SHA-256",t)}var D=class n{config;userManager;deviceCredentialsManager;embeddedLoginPrompt;logoutMode;refreshingPromise=null;eventEmitter;constructor(e){this.config=new y(e),this.embeddedLoginPrompt=new O(this.config),this.userManager=new UserManager(Me(this.config)),this.deviceCredentialsManager=new v,this.logoutMode=this.config.oidcConfiguration.logoutMode||"redirect",this.eventEmitter=new C,track("passport","initialise");}async login(e){return c(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},i=null;try{i=await this.getUserInternal();}catch(o){if(o instanceof Error&&!o.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",o),t)throw o;_.warn("Failed to retrieve a cached user session",o);}if(!i&&r)i=await this.forceUserRefreshInternal();else if(!i&&!t){if(e?.useRedirectFlow)return await this.loginWithRedirectInternal(e?.directLoginOptions),null;i=await this.loginWithPopup(e?.directLoginOptions);}return i&&this.handleSuccessfulLogin(i),i},"login")}async loginWithRedirect(e){await this.loginWithRedirectInternal(e);}async loginCallback(){return c(async()=>{let e=await this.loginCallbackInternal();return e&&this.handleSuccessfulLogin(e),e},"loginCallback")}async logout(){await c(async()=>{await this.logoutInternal(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return this.getUserInternal()}async getUserOrLogin(){let e=null;try{e=await this.getUserInternal();}catch(r){_.warn("Failed to retrieve a cached user session",r);}if(e)return e;let t=await this.loginWithPopup();return this.handleSuccessfulLogin(t),t}async getUserZkEvm(){return this.getUserZkEvmInternal()}async getIdToken(){return c(async()=>(await this.getUserInternal())?.idToken,"getIdToken",!1)}async getAccessToken(){return c(async()=>(await this.getUserInternal())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.forceUserRefreshInternal()}forceUserRefreshInBackground(){this.forceUserRefreshInBackgroundInternal();}async loginWithPKCEFlow(e,t){return c(async()=>this.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return c(async()=>{let r=await this.loginWithPKCEFlowCallbackInternal(e,t);return this.handleSuccessfulLogin(r),r},"loginWithPKCEFlowCallback")}async storeTokens(e){return c(async()=>{let t=await this.storeTokensInternal(e);return this.handleSuccessfulLogin(t),t},"storeTokens")}async getLogoutUrl(){return c(async()=>(await this.userManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.getLogoutUrlInternal()||void 0),"getLogoutUrl")}async logoutSilentCallback(e){return c(()=>this.userManager.signoutSilentCallback(e),"logoutSilentCallback")}getConfig(){return this.config}async getClientId(){return this.config.oidcConfiguration.clientId}handleSuccessfulLogin(e){this.eventEmitter.emit("loggedIn",e),identify({passportId:e.profile.sub});}buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_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 loginWithRedirectInternal(e){await this.userManager.clearStaleState(),await g(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR");}async loginWithPopup(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(),o=async()=>{let l=this.buildExtraQueryParams(t,r);return this.userManager.signinPopup({extraQueryParams:l,popupWindowFeatures:{width:410,height:450},popupWindowTarget:i,popupAbortOnClose:!0})};return new Promise((l,d)=>{o().then(m=>l(n.mapOidcUserToDomainModel(m))).catch(m=>{if(!(m instanceof Error)||m.message!=="Attempted to navigate on a disposed window"){d(m);return}let L=!1,a=new T(this.config.popupOverlayOptions||{},!0);a.append(async()=>{try{if(L)window.open("",i);else {L=!0;let E=await o();a.remove(),l(n.mapOidcUserToDomainModel(E));}}catch(E){a.remove(),d(E);}},()=>{a.remove(),d(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}static mapOidcUserToDomainModel=e=>{let t,r;if(e.id_token){let o=f(e.id_token);t=o?.passport,o?.username&&(r=o?.username);}let i={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,username:r}};return t?.zkevm_eth_address&&t?.zkevm_user_admin_address&&(i.zkEvm={ethAddress:t.zkevm_eth_address,userAdminAddress:t.zkevm_user_admin_address}),i};static mapDeviceTokenResponseToOidcUser=e=>{let t=f(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,...t.username?{username:t.username}:{}}})};async loginCallbackInternal(){return g(async()=>{let e=await this.userManager.signinCallback();if(e)return n.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=N(window.crypto.getRandomValues(new Uint8Array(32))),i=N(await Fe(r)),o=N(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:l,scope:d,audience:m,clientId:L}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:o,verifier:r});let a=new URL(Ne,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",L),a.searchParams.set("redirect_uri",l),a.searchParams.set("state",o),d&&a.searchParams.set("scope",d),m&&a.searchParams.set("audience",m),e){if(e.directLoginMethod==="email"){let E=e.email;E&&(a.searchParams.set("direct",e.directLoginMethod),a.searchParams.set("email",E));}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 loginWithPKCEFlowCallbackInternal(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),o=n.mapDeviceTokenResponseToOidcUser(i),l=n.mapOidcUserToDomainModel(o);return await this.userManager.storeUser(o),l},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){let r=await fetch(`${this.config.authenticationDomain}/oauth/token`,{method:"POST",headers:ke,body:new URLSearchParams({client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri})}),i=await r.text(),o=be(i);if(!r.ok)throw new Error(Ue(o,i,r.status));if(!o||typeof o!="object")throw new Error("Token endpoint returned an invalid response");return o}async storeTokensInternal(e){return g(async()=>{let t=n.mapDeviceTokenResponseToOidcUser(e),r=n.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logoutInternal(){await g(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR");}async getLogoutUrlInternal(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(_.warn("Failed to get logout URL"),null)}forceUserRefreshInBackgroundInternal(){this.refreshTokenAndUpdatePromise().catch(e=>{_.warn("Failed to refresh user token",e);});}async forceUserRefreshInternal(){return this.refreshTokenAndUpdatePromise().catch(e=>(_.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise((e,t)=>{(async()=>{try{let r=await this.userManager.signinSilent();if(r){let i=n.mapOidcUserToDomainModel(r);this.eventEmitter.emit("tokenRefreshed",i),e(i);return}e(null);}catch(r){let i="AUTHENTICATION_ERROR",o="Failed to refresh token",l=!0;if(r instanceof ErrorTimeout?(i="SILENT_LOGIN_ERROR",o=`${o}: ${r.message}`,l=!1):r instanceof ErrorResponse?(i="NOT_LOGGED_IN_ERROR",o=`${o}: ${r.message||r.error_description}`):r instanceof Error?o=`${o}: ${r.message}`:typeof r=="string"&&(o=`${o}: ${r}`),l)try{await this.userManager.removeUser();}catch(d){d instanceof Error&&(o=`${o}: Failed to remove user: ${d.message}`);}t(new p(o,i));}finally{this.refreshingPromise=null;}})();}),this.refreshingPromise)}async getUserInternal(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(!q(t)){let r=n.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 getUserZkEvmInternal(){let e=await this.getUserInternal(U);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}};
|
|
387
|
+
`,document.head.appendChild(e);};getEmbeddedLoginIFrame=()=>{let e=document.createElement("iframe");return e.id=z,e.src=this.getHref(),e.style.height="100vh",e.style.width="100vw",e.style.maxHeight=`${se}px`,e.style.maxWidth=`${ae}px`,e.style.borderRadius=le,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(),n=({data:o,origin:l})=>{if(!(l!==this.config.authenticationDomain||o.eventType!==H))switch(o.messageType){case"login_method_selected":{let d=o.payload;window.removeEventListener("message",n),m.remove(),e(d);break}case"login_prompt_error":{window.removeEventListener("message",n),m.remove(),t(new Error("Error during embedded login prompt",{cause:o.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",n),m.remove(),t(new Error("Popup closed by user"));break}default:window.removeEventListener("message",n),m.remove(),t(new Error(`Unsupported message type: ${o.messageType}`));break}};window.addEventListener("message",n),m.appendOverlay(r,()=>{window.removeEventListener("message",n),m.remove(),t(new Error("Popup closed by user"));});})}};var _=class{listeners=new Map;emit(e,...t){let r=this.listeners.get(e);!r||r.size===0||[...r].forEach(n=>{n(...t);});}on(e,t){let r=this.listeners.get(e)??new Set;r.add(t),this.listeners.set(e,r);}removeListener(e,t){let r=this.listeners.get(e);r&&(r.delete(t),r.size===0&&this.listeners.delete(e));}};var p=async(i,e,t=!0,r=!0)=>{let n=trackFlow("passport",e,t);try{return await i(n)}catch(o){throw o instanceof Error?trackError("passport",e,o,{flowId:n.details.flowId}):n.addEvent("errored"),o}finally{r&&n.addEvent("End");}};var pe=()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{},ue=i=>{let e=i.replace(/-/g,"+").replace(/_/g,"/"),t=e.length%4===0?"":"=".repeat(4-e.length%4);return e+t},me=i=>{let e=pe();if(typeof e.atob!="function")return null;let t=e.atob(i),r=new Uint8Array(t.length);for(let o=0;o<t.length;o+=1)r[o]=t.charCodeAt(o);if(typeof e.TextDecoder=="function")return new e.TextDecoder("utf-8").decode(r);let n="";for(let o=0;o<r.length;o+=1)n+=String.fromCharCode(r[o]);return n},ge=i=>{if(typeof Buffer<"u")return Buffer.from(i,"base64").toString("utf-8");let e=me(i);if(e===null)throw new Error("Base64 decoding is not supported in this environment");return e},f=i=>{if(typeof i!="string")throw new Error("JWT must be a string");let e=i.split(".");if(e.length<2)throw new Error("Invalid JWT: payload segment is missing");let t=e[1],r=ge(ue(t));try{return JSON.parse(r)}catch{throw new Error("Invalid JWT payload: unable to parse JSON")}};var J="pkce_state",j="pkce_verifier",fe=3600,O=class{isTokenValid(e){try{let r=f(e).exp??0,n=Date.now()/1e3+fe;return r>n}catch{return !1}}savePKCEData(e){localStorage.setItem(J,e.state),localStorage.setItem(j,e.verifier);}getPKCEData(){let e=localStorage.getItem(J),t=localStorage.getItem(j);return e&&t?{state:e,verifier:t}:null}};var Ee=(...i)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...i);},C={warn:Ee};function Q(i){try{let e=f(i),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function q(i){let{id_token:e,access_token:t}=i;return !t||!e?!0:Q(t)||Q(e)}var T=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?W():$(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(e){let t=document.getElementById(w);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=he.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 ke={"Content-Type":"application/x-www-form-urlencoded"},be=i=>{if(i)try{return JSON.parse(i)}catch{return}},Ue=(i,e,t)=>{if(i&&typeof i=="object"){let r=i,n=r.error_description??r.message??r.error;if(typeof n=="string"&&n.trim().length>0)return n}return e.trim().length>0?e:`Token request failed with status ${t}`},xe="/v2/logout",Se="/im-logged-out",De="/authorize",Me=i=>i?Se:xe,Ne=i=>{let{authenticationDomain:e,oidcConfiguration:t}=i,r;i.crossSdkBridgeEnabled?r=new k("ImmutableSDKPassport",he.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let n=new WebStorageStateStore({store:r}),o=new URL(Me(i.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:n,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 Fe(i){let t=new TextEncoder().encode(i);return window.crypto.subtle.digest("SHA-256",t)}var M=class i{config;userManager;deviceCredentialsManager;embeddedLoginPrompt;logoutMode;refreshingPromise=null;eventEmitter;constructor(e){this.config=new y(e),this.embeddedLoginPrompt=new v(this.config),this.userManager=new UserManager(Ne(this.config)),this.deviceCredentialsManager=new O,this.logoutMode=this.config.oidcConfiguration.logoutMode||"redirect",this.eventEmitter=new _,track("passport","initialise");}async login(e){return p(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},n=null;try{n=await this.getUserInternal();}catch(o){if(o instanceof Error&&!o.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",o),t)throw o;C.warn("Failed to retrieve a cached user session",o);}if(!n&&r)n=await this.forceUserRefreshInternal();else if(!n&&!t){if(e?.useRedirectFlow)return await this.loginWithRedirectInternal(e?.directLoginOptions),null;n=await this.loginWithPopup(e?.directLoginOptions);}return n&&this.handleSuccessfulLogin(n),n},"login")}async loginWithRedirect(e){await this.loginWithRedirectInternal(e);}async loginCallback(){return p(async()=>{let e=await this.loginCallbackInternal();return e&&this.handleSuccessfulLogin(e),e},"loginCallback")}async logout(){await p(async()=>{await this.logoutInternal(),this.eventEmitter.emit("loggedOut");},"logout");}async getUser(){return this.getUserInternal()}async getUserOrLogin(){let e=null;try{e=await this.getUserInternal();}catch(r){C.warn("Failed to retrieve a cached user session",r);}if(e)return e;let t=await this.loginWithPopup();return this.handleSuccessfulLogin(t),t}async getUserZkEvm(){return this.getUserZkEvmInternal()}async getIdToken(){return p(async()=>(await this.getUserInternal())?.idToken,"getIdToken",!1)}async getAccessToken(){return p(async()=>(await this.getUserInternal())?.accessToken,"getAccessToken",!1,!1)}async isLoggedIn(){return await this.getUser()!==null}async forceUserRefresh(){return this.forceUserRefreshInternal()}forceUserRefreshInBackground(){this.forceUserRefreshInBackgroundInternal();}async loginWithPKCEFlow(e,t){return p(async()=>this.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return p(async()=>{let r=await this.loginWithPKCEFlowCallbackInternal(e,t);return this.handleSuccessfulLogin(r),r},"loginWithPKCEFlowCallback")}async storeTokens(e){return p(async()=>{let t=await this.storeTokensInternal(e);return this.handleSuccessfulLogin(t),t},"storeTokens")}async getLogoutUrl(){return p(async()=>(await this.userManager.removeUser(),this.eventEmitter.emit("loggedOut"),await this.getLogoutUrlInternal()||void 0),"getLogoutUrl")}async logoutSilentCallback(e){return p(()=>this.userManager.signoutSilentCallback(e),"logoutSilentCallback")}getConfig(){return this.config}async getClientId(){return this.config.oidcConfiguration.clientId}handleSuccessfulLogin(e){this.eventEmitter.emit("loggedIn",e),identify({passportId:e.profile.sub});}buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||""};if(e){if(e.directLoginMethod==="email"){let n=e.email;n&&(r.direct=e.directLoginMethod,r.email=n);}else r.direct=e.directLoginMethod;e.marketingConsentStatus&&(r.marketingConsent=e.marketingConsentStatus);}return t&&(r.im_passport_trace_id=t),r}async loginWithRedirectInternal(e){await this.userManager.clearStaleState(),await g(async()=>{let t=this.buildExtraQueryParams(e);await this.userManager.signinRedirect({extraQueryParams:t});},"AUTHENTICATION_ERROR");}async loginWithPopup(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 n=window.crypto.randomUUID(),o=async()=>{let l=this.buildExtraQueryParams(t,r);return this.userManager.signinPopup({extraQueryParams:l,popupWindowFeatures:{width:410,height:450},popupWindowTarget:n,popupAbortOnClose:!0})};return new Promise((l,d)=>{o().then(c=>l(i.mapOidcUserToDomainModel(c))).catch(c=>{if(!(c instanceof Error)||c.message!=="Attempted to navigate on a disposed window"){d(c);return}let L=!1,a=new T(this.config.popupOverlayOptions||{},!0);a.append(async()=>{try{if(L)window.open("",n);else {L=!0;let E=await o();a.remove(),l(i.mapOidcUserToDomainModel(E));}}catch(E){a.remove(),d(E);}},()=>{a.remove(),d(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}static mapOidcUserToDomainModel=e=>{let t,r;if(e.id_token){let o=f(e.id_token);t=o?.passport,o?.username&&(r=o?.username);}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,username:r}};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=f(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,...t.username?{username:t.username}:{}}})};async loginCallbackInternal(){return g(async()=>{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))),n=D(await Fe(r)),o=D(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:l,scope:d,audience:c,clientId:L}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:o,verifier:r});let a=new URL(De,this.config.authenticationDomain);if(a.searchParams.set("response_type","code"),a.searchParams.set("code_challenge",n),a.searchParams.set("code_challenge_method","S256"),a.searchParams.set("client_id",L),a.searchParams.set("redirect_uri",l),a.searchParams.set("state",o),d&&a.searchParams.set("scope",d),c&&a.searchParams.set("audience",c),e){if(e.directLoginMethod==="email"){let E=e.email;E&&(a.searchParams.set("direct",e.directLoginMethod),a.searchParams.set("email",E));}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 loginWithPKCEFlowCallbackInternal(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 n=await this.getPKCEToken(e,r.verifier),o=i.mapDeviceTokenResponseToOidcUser(n),l=i.mapOidcUserToDomainModel(o);return await this.userManager.storeUser(o),l},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){let r=await fetch(`${this.config.authenticationDomain}/oauth/token`,{method:"POST",headers:ke,body:new URLSearchParams({client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri})}),n=await r.text(),o=be(n);if(!r.ok)throw new Error(Ue(o,n,r.status));if(!o||typeof o!="object")throw new Error("Token endpoint returned an invalid response");return o}async storeTokensInternal(e){return g(async()=>{let t=i.mapDeviceTokenResponseToOidcUser(e),r=i.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logoutInternal(){await g(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR");}async getLogoutUrlInternal(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(C.warn("Failed to get logout URL"),null)}forceUserRefreshInBackgroundInternal(){this.refreshTokenAndUpdatePromise().catch(e=>{C.warn("Failed to refresh user token",e);});}async forceUserRefreshInternal(){return this.refreshTokenAndUpdatePromise().catch(e=>(C.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise((e,t)=>{(async()=>{try{let r=await this.userManager.signinSilent();if(r){let n=i.mapOidcUserToDomainModel(r);this.eventEmitter.emit("tokenRefreshed",n),e(n);return}e(null);}catch(r){let n="AUTHENTICATION_ERROR",o="Failed to refresh token",l=!0,d="unknown";if(r instanceof ErrorTimeout?(n="SILENT_LOGIN_ERROR",o=`${o}: ${r.message}`,l=!1):r instanceof ErrorResponse?(n="NOT_LOGGED_IN_ERROR",o=`${o}: ${r.message||r.error_description}`,d=r.error==="invalid_grant"?"refresh_token_invalid":"refresh_failed"):r instanceof Error?(o=`${o}: ${r.message}`,d=r.message.toLowerCase().includes("network")?"network_error":"refresh_failed"):typeof r=="string"&&(o=`${o}: ${r}`,d="refresh_failed"),l){this.eventEmitter.emit("userRemoved",{reason:d,error:o});try{await this.userManager.removeUser();}catch(c){c instanceof Error&&(o=`${o}: Failed to remove user: ${c.message}`);}}t(new u(o,n));}finally{this.refreshingPromise=null;}})();}),this.refreshingPromise)}async getUserInternal(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(!q(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 getUserZkEvmInternal(){let e=await this.getUserInternal(U);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}};
|
|
388
388
|
|
|
389
|
-
export {
|
|
389
|
+
export { M as Auth, y as AuthConfiguration, x as AuthEvents, F as MarketingConsentStatus, u as PassportError, P as PassportErrorType, N as RollupType, _ as TypedEventEmitter, f as decodeJwtPayload, b as isAPIError, U as isUserZkEvm, g as withPassportError };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Auth } from './Auth';
|
|
2
2
|
export { AuthConfiguration, type IAuthConfiguration } from './config';
|
|
3
|
-
export type { User, UserProfile, UserZkEvm, DirectLoginMethod, DirectLoginOptions, LoginOptions, DeviceTokenResponse, OidcConfiguration, AuthModuleConfiguration, PopupOverlayOptions, PassportMetadata, IdTokenPayload, PKCEData, AuthEventMap, } from './types';
|
|
3
|
+
export type { User, UserProfile, UserZkEvm, DirectLoginMethod, DirectLoginOptions, LoginOptions, DeviceTokenResponse, OidcConfiguration, AuthModuleConfiguration, PopupOverlayOptions, PassportMetadata, IdTokenPayload, PKCEData, AuthEventMap, UserRemovedReason, } from './types';
|
|
4
4
|
export { isUserZkEvm, RollupType, MarketingConsentStatus, AuthEvents, } from './types';
|
|
5
5
|
export { default as TypedEventEmitter } from './utils/typedEventEmitter';
|
|
6
6
|
export { PassportError, PassportErrorType, withPassportError, isAPIError, } from './errors';
|
package/dist/types/types.d.ts
CHANGED
|
@@ -129,8 +129,18 @@ export declare enum AuthEvents {
|
|
|
129
129
|
* This is critical for refresh token rotation - when client-side refresh happens,
|
|
130
130
|
* the new tokens must be synced to server-side session to prevent race conditions.
|
|
131
131
|
*/
|
|
132
|
-
TOKEN_REFRESHED = "tokenRefreshed"
|
|
132
|
+
TOKEN_REFRESHED = "tokenRefreshed",
|
|
133
|
+
/**
|
|
134
|
+
* Emitted when the user is removed from local storage due to an unrecoverable error
|
|
135
|
+
* (e.g., network error during token refresh, invalid refresh token).
|
|
136
|
+
* Consumers should sync this state by clearing their session (e.g., NextAuth signOut).
|
|
137
|
+
*/
|
|
138
|
+
USER_REMOVED = "userRemoved"
|
|
133
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Error reason for USER_REMOVED event
|
|
142
|
+
*/
|
|
143
|
+
export type UserRemovedReason = 'refresh_token_invalid' | 'refresh_failed' | 'network_error' | 'unknown';
|
|
134
144
|
/**
|
|
135
145
|
* Event map for typed event emitter
|
|
136
146
|
*/
|
|
@@ -138,5 +148,9 @@ export interface AuthEventMap extends Record<string, any> {
|
|
|
138
148
|
[AuthEvents.LOGGED_OUT]: [];
|
|
139
149
|
[AuthEvents.LOGGED_IN]: [User];
|
|
140
150
|
[AuthEvents.TOKEN_REFRESHED]: [User];
|
|
151
|
+
[AuthEvents.USER_REMOVED]: [{
|
|
152
|
+
reason: UserRemovedReason;
|
|
153
|
+
error?: string;
|
|
154
|
+
}];
|
|
141
155
|
}
|
|
142
156
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@imtbl/auth",
|
|
3
|
-
"version": "2.12.5-alpha.
|
|
3
|
+
"version": "2.12.5-alpha.1",
|
|
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/generated-clients": "2.12.5-alpha.
|
|
29
|
-
"@imtbl/metrics": "2.12.5-alpha.
|
|
28
|
+
"@imtbl/generated-clients": "2.12.5-alpha.1",
|
|
29
|
+
"@imtbl/metrics": "2.12.5-alpha.1",
|
|
30
30
|
"localforage": "^1.10.0",
|
|
31
31
|
"oidc-client-ts": "3.4.1"
|
|
32
32
|
},
|
package/src/Auth.test.ts
CHANGED
|
@@ -240,6 +240,91 @@ describe('Auth', () => {
|
|
|
240
240
|
expect(user).toBeNull();
|
|
241
241
|
expect(mockEventEmitter.emit).not.toHaveBeenCalled();
|
|
242
242
|
});
|
|
243
|
+
|
|
244
|
+
it('emits USER_REMOVED event when signinSilent fails with ErrorResponse', async () => {
|
|
245
|
+
const auth = Object.create(Auth.prototype) as Auth;
|
|
246
|
+
const mockEventEmitter = { emit: jest.fn() };
|
|
247
|
+
const mockUserManager = {
|
|
248
|
+
signinSilent: jest.fn().mockRejectedValue(
|
|
249
|
+
Object.assign(new Error('invalid_grant'), {
|
|
250
|
+
error: 'invalid_grant',
|
|
251
|
+
error_description: 'Unknown or invalid refresh token',
|
|
252
|
+
}),
|
|
253
|
+
),
|
|
254
|
+
removeUser: jest.fn().mockResolvedValue(undefined),
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
// Make the error an instance of ErrorResponse
|
|
258
|
+
const { ErrorResponse } = jest.requireActual('oidc-client-ts');
|
|
259
|
+
const errorResponse = new ErrorResponse({
|
|
260
|
+
error: 'invalid_grant',
|
|
261
|
+
error_description: 'Unknown or invalid refresh token',
|
|
262
|
+
});
|
|
263
|
+
mockUserManager.signinSilent.mockRejectedValue(errorResponse);
|
|
264
|
+
|
|
265
|
+
(auth as any).eventEmitter = mockEventEmitter;
|
|
266
|
+
(auth as any).userManager = mockUserManager;
|
|
267
|
+
(auth as any).refreshingPromise = null;
|
|
268
|
+
|
|
269
|
+
await expect((auth as any).refreshTokenAndUpdatePromise()).rejects.toThrow();
|
|
270
|
+
|
|
271
|
+
expect(mockEventEmitter.emit).toHaveBeenCalledWith(
|
|
272
|
+
AuthEvents.USER_REMOVED,
|
|
273
|
+
expect.objectContaining({
|
|
274
|
+
reason: 'refresh_token_invalid',
|
|
275
|
+
}),
|
|
276
|
+
);
|
|
277
|
+
expect(mockUserManager.removeUser).toHaveBeenCalled();
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
it('emits USER_REMOVED event with network_error reason for network failures', async () => {
|
|
281
|
+
const auth = Object.create(Auth.prototype) as Auth;
|
|
282
|
+
const mockEventEmitter = { emit: jest.fn() };
|
|
283
|
+
const mockUserManager = {
|
|
284
|
+
signinSilent: jest.fn().mockRejectedValue(new Error('Network error: Failed to fetch')),
|
|
285
|
+
removeUser: jest.fn().mockResolvedValue(undefined),
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
(auth as any).eventEmitter = mockEventEmitter;
|
|
289
|
+
(auth as any).userManager = mockUserManager;
|
|
290
|
+
(auth as any).refreshingPromise = null;
|
|
291
|
+
|
|
292
|
+
await expect((auth as any).refreshTokenAndUpdatePromise()).rejects.toThrow();
|
|
293
|
+
|
|
294
|
+
expect(mockEventEmitter.emit).toHaveBeenCalledWith(
|
|
295
|
+
AuthEvents.USER_REMOVED,
|
|
296
|
+
expect.objectContaining({
|
|
297
|
+
reason: 'network_error',
|
|
298
|
+
}),
|
|
299
|
+
);
|
|
300
|
+
expect(mockUserManager.removeUser).toHaveBeenCalled();
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
it('does not emit USER_REMOVED event for ErrorTimeout', async () => {
|
|
304
|
+
const auth = Object.create(Auth.prototype) as Auth;
|
|
305
|
+
const mockEventEmitter = { emit: jest.fn() };
|
|
306
|
+
const mockUserManager = {
|
|
307
|
+
signinSilent: jest.fn(),
|
|
308
|
+
removeUser: jest.fn().mockResolvedValue(undefined),
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
// Mock ErrorTimeout
|
|
312
|
+
const { ErrorTimeout } = jest.requireActual('oidc-client-ts');
|
|
313
|
+
const timeoutError = new ErrorTimeout('Silent sign-in timed out');
|
|
314
|
+
mockUserManager.signinSilent.mockRejectedValue(timeoutError);
|
|
315
|
+
|
|
316
|
+
(auth as any).eventEmitter = mockEventEmitter;
|
|
317
|
+
(auth as any).userManager = mockUserManager;
|
|
318
|
+
(auth as any).refreshingPromise = null;
|
|
319
|
+
|
|
320
|
+
await expect((auth as any).refreshTokenAndUpdatePromise()).rejects.toThrow();
|
|
321
|
+
|
|
322
|
+
expect(mockEventEmitter.emit).not.toHaveBeenCalledWith(
|
|
323
|
+
AuthEvents.USER_REMOVED,
|
|
324
|
+
expect.anything(),
|
|
325
|
+
);
|
|
326
|
+
expect(mockUserManager.removeUser).not.toHaveBeenCalled();
|
|
327
|
+
});
|
|
243
328
|
});
|
|
244
329
|
|
|
245
330
|
describe('loginWithPopup', () => {
|
package/src/Auth.ts
CHANGED
|
@@ -778,6 +778,7 @@ export class Auth {
|
|
|
778
778
|
let passportErrorType = PassportErrorType.AUTHENTICATION_ERROR;
|
|
779
779
|
let errorMessage = 'Failed to refresh token';
|
|
780
780
|
let removeUser = true;
|
|
781
|
+
let removeReason: 'refresh_token_invalid' | 'refresh_failed' | 'network_error' | 'unknown' = 'unknown';
|
|
781
782
|
|
|
782
783
|
if (err instanceof ErrorTimeout) {
|
|
783
784
|
passportErrorType = PassportErrorType.SILENT_LOGIN_ERROR;
|
|
@@ -786,13 +787,25 @@ export class Auth {
|
|
|
786
787
|
} else if (err instanceof ErrorResponse) {
|
|
787
788
|
passportErrorType = PassportErrorType.NOT_LOGGED_IN_ERROR;
|
|
788
789
|
errorMessage = `${errorMessage}: ${err.message || err.error_description}`;
|
|
790
|
+
// Check for invalid_grant which indicates refresh token is invalid/expired
|
|
791
|
+
removeReason = err.error === 'invalid_grant' ? 'refresh_token_invalid' : 'refresh_failed';
|
|
789
792
|
} else if (err instanceof Error) {
|
|
790
793
|
errorMessage = `${errorMessage}: ${err.message}`;
|
|
794
|
+
// Network errors typically have specific messages
|
|
795
|
+
removeReason = err.message.toLowerCase().includes('network') ? 'network_error' : 'refresh_failed';
|
|
791
796
|
} else if (typeof err === 'string') {
|
|
792
797
|
errorMessage = `${errorMessage}: ${err}`;
|
|
798
|
+
removeReason = 'refresh_failed';
|
|
793
799
|
}
|
|
794
800
|
|
|
795
801
|
if (removeUser) {
|
|
802
|
+
// Emit USER_REMOVED event BEFORE removing user so consumers can react
|
|
803
|
+
// (e.g., auth-nextjs can clear the NextAuth session)
|
|
804
|
+
this.eventEmitter.emit(AuthEvents.USER_REMOVED, {
|
|
805
|
+
reason: removeReason,
|
|
806
|
+
error: errorMessage,
|
|
807
|
+
});
|
|
808
|
+
|
|
796
809
|
try {
|
|
797
810
|
await this.userManager.removeUser();
|
|
798
811
|
} catch (removeUserError) {
|
package/src/index.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -146,8 +146,23 @@ export enum AuthEvents {
|
|
|
146
146
|
* the new tokens must be synced to server-side session to prevent race conditions.
|
|
147
147
|
*/
|
|
148
148
|
TOKEN_REFRESHED = 'tokenRefreshed',
|
|
149
|
+
/**
|
|
150
|
+
* Emitted when the user is removed from local storage due to an unrecoverable error
|
|
151
|
+
* (e.g., network error during token refresh, invalid refresh token).
|
|
152
|
+
* Consumers should sync this state by clearing their session (e.g., NextAuth signOut).
|
|
153
|
+
*/
|
|
154
|
+
USER_REMOVED = 'userRemoved',
|
|
149
155
|
}
|
|
150
156
|
|
|
157
|
+
/**
|
|
158
|
+
* Error reason for USER_REMOVED event
|
|
159
|
+
*/
|
|
160
|
+
export type UserRemovedReason =
|
|
161
|
+
| 'refresh_token_invalid'
|
|
162
|
+
| 'refresh_failed'
|
|
163
|
+
| 'network_error'
|
|
164
|
+
| 'unknown';
|
|
165
|
+
|
|
151
166
|
/**
|
|
152
167
|
* Event map for typed event emitter
|
|
153
168
|
*/
|
|
@@ -155,4 +170,5 @@ export interface AuthEventMap extends Record<string, any> {
|
|
|
155
170
|
[AuthEvents.LOGGED_OUT]: [];
|
|
156
171
|
[AuthEvents.LOGGED_IN]: [User];
|
|
157
172
|
[AuthEvents.TOKEN_REFRESHED]: [User];
|
|
173
|
+
[AuthEvents.USER_REMOVED]: [{ reason: UserRemovedReason; error?: string }];
|
|
158
174
|
}
|