@imtbl/passport 2.9.0-alpha.6 → 2.10.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -363,7 +363,7 @@ function et(o){throw new Error("Node.js process "+o+" is not supported by JSPM c
363
363
  "
364
364
  />
365
365
  </div>
366
- `;function Oe({id:o,href:t,rel:n,crossOrigin:a}){let l=`${pe}-${o}`;if(!document.getElementById(l)){let d=document.createElement("link");d.id=l,d.href=t,n&&(d.rel=n),a&&(d.crossOrigin=a),document.head.appendChild(d);}}var zt=()=>Xt(Hi()),jt=()=>Xt(Vi());var Q=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(t,n=!1){this.disableBlockedPopupOverlay=t.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=t.disableGenericPopupOverlay||!1,this.isBlockedOverlay=n;}append(t,n){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(t),this.updateCloseButton(n));}update(t){this.updateTryAgainButton(t);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){Oe({id:"link-googleapis",href:"https://fonts.googleapis.com"}),Oe({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),Oe({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?zt():jt(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(t){let n=document.getElementById(Se);n&&(this.tryAgainListener&&n.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=t,n.addEventListener("click",t));}updateCloseButton(t){let n=document.getElementById(Ie);n&&(this.onCloseListener&&n.removeEventListener("click",this.onCloseListener),this.onCloseListener=t,n.addEventListener("click",t));}};var be=class{storage;constructor(t,n){this.storage=Wi.createInstance({name:t,driver:n});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(t){return this.storage.getItem(t)}key(t){return this.storage.key(t)}async removeItem(t){await this.storage.removeItem(t);}async setItem(t,n){await this.storage.setItem(t,n);}};var ea=500,ta={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ra="/v2/logout",na="/im-logged-out",ia="/authorize",aa=o=>o?na:ra,sa=o=>{let{authenticationDomain:t,oidcConfiguration:n}=o,a;o.crossSdkBridgeEnabled?a=new be("ImmutableSDKPassport",Wi.INDEXEDDB):typeof window<"u"?a=window.localStorage:a=new InMemoryWebStorage;let l=new WebStorageStateStore({store:a}),d=new URL(aa(o.crossSdkBridgeEnabled),t.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return d.searchParams.set("client_id",n.clientId),n.logoutRedirectUri&&d.searchParams.set("returnTo",n.logoutRedirectUri),{authority:t,redirect_uri:n.redirectUri,popup_redirect_uri:n.popupRedirectUri||n.redirectUri,client_id:n.clientId,metadata:{authorization_endpoint:`${t}/authorize`,token_endpoint:`${t}/oauth/token`,userinfo_endpoint:`${t}/userinfo`,end_session_endpoint:d.toString(),revocation_endpoint:`${t}/oauth/revoke`},mergeClaimsStrategy:{array:"merge"},automaticSilentRenew:!1,scope:n.scope,userStore:l,revokeTokenTypes:["refresh_token"],extraQueryParams:{...n.audience?{audience:n.audience}:{}}}};function it(o){return btoa(String.fromCharCode(...new Uint8Array(o))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function oa(o){let n=new TextEncoder().encode(o);return await window.crypto.subtle.digest("SHA-256",n)}var ye=class o{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(t,n){this.config=t,this.userManager=new UserManager(sa(t)),this.deviceCredentialsManager=new fe,this.embeddedLoginPrompt=n,this.logoutMode=t.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=t=>{let n;t.id_token&&(n=Yt(t.id_token)?.passport);let a={expired:t.expired,idToken:t.id_token,accessToken:t.access_token,refreshToken:t.refresh_token,profile:{sub:t.profile.sub,email:t.profile.email,nickname:t.profile.nickname}};return n?.imx_eth_address&&(a.imx={ethAddress:n.imx_eth_address,starkAddress:n.imx_stark_address,userAdminAddress:n.imx_user_admin_address}),n?.zkevm_eth_address&&(a.zkEvm={ethAddress:n?.zkevm_eth_address,userAdminAddress:n?.zkevm_user_admin_address}),a};static mapDeviceTokenResponseToOidcUser=t=>{let n=Yt(t.id_token);return new User({id_token:t.id_token,access_token:t.access_token,refresh_token:t.refresh_token,token_type:t.token_type,profile:{sub:n.sub,iss:n.iss,aud:n.aud,exp:n.exp,iat:n.iat,email:n.email,nickname:n.nickname,passport:n.passport}})};buildExtraQueryParams(t,n,a){let l={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:t||""};if(n){if(n.directLoginMethod==="email"){let d=n.email;d&&(l.direct=n.directLoginMethod,l.email=d);}else l.direct=n.directLoginMethod;n.marketingConsentStatus&&(l.marketingConsent=n.marketingConsentStatus);}return a&&(l.im_passport_trace_id=a),l}async loginWithRedirect(t,n){return await this.userManager.clearStaleState(),k(async()=>{let a=this.buildExtraQueryParams(t,n);await this.userManager.signinRedirect({extraQueryParams:a});},"AUTHENTICATION_ERROR")}async login(t,n){return k(async()=>{let a,l;if(n)a=n;else if(!this.config.popupOverlayOptions.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:u,...g}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(t);a=g,l=u;}let d=window.crypto.randomUUID(),s=async()=>{let u=this.buildExtraQueryParams(t,a,l),g=this.userManager.signinPopup({extraQueryParams:u,popupWindowFeatures:{width:410,height:450},popupWindowTarget:d}),E=window.open("",d);if(E){let f=new Promise((w,C)=>{let y=setInterval(()=>{E.closed&&(clearInterval(y),C(new Error("Popup closed by user")));},ea);g.finally(()=>{clearInterval(y),E.close();});});return Promise.race([g,f])}return g};return new Promise((u,g)=>{s().then(E=>{u(o.mapOidcUserToDomainModel(E));}).catch(E=>{if(!(E instanceof Error)||E.message!=="Attempted to navigate on a disposed window"){g(E);return}let f=!1,w=new Q(this.config.popupOverlayOptions,!0);w.append(async()=>{try{if(f)window.open("",d);else {f=!0;let C=await s();w.remove(),u(o.mapOidcUserToDomainModel(C));}}catch(C){w.remove(),g(C);}},()=>{w.remove(),g(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let t=null;try{t=await this.getUser();}catch(n){ie.warn("Failed to retrieve a cached user session",n);}return t||this.login()}static shouldUseSigninPopupCallback(){try{let a=`oidc.${new URLSearchParams(window.location.search).get("state")}`,l=localStorage.getItem(a);return JSON.parse(l||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return k(async()=>{if(o.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let t=await this.userManager.signinCallback();if(t)return o.mapOidcUserToDomainModel(t)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(t,n){let a=it(window.crypto.getRandomValues(new Uint8Array(32))),l=it(await oa(a)),d=it(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:u,audience:g,clientId:E}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:d,verifier:a});let f=new URL(ia,this.config.authenticationDomain);if(f.searchParams.set("response_type","code"),f.searchParams.set("code_challenge",l),f.searchParams.set("code_challenge_method","S256"),f.searchParams.set("client_id",E),f.searchParams.set("redirect_uri",s),f.searchParams.set("state",d),u&&f.searchParams.set("scope",u),g&&f.searchParams.set("audience",g),t){if(t.directLoginMethod==="email"){let w=t.email;w&&(f.searchParams.set("direct",t.directLoginMethod),f.searchParams.set("email",w));}else f.searchParams.set("direct",t.directLoginMethod);t.marketingConsentStatus&&f.searchParams.set("marketingConsent",t.marketingConsentStatus);}return n&&f.searchParams.set("im_passport_trace_id",n),f.toString()}async loginWithPKCEFlowCallback(t,n){return k(async()=>{let a=this.deviceCredentialsManager.getPKCEData();if(!a)throw new Error("No code verifier or state for PKCE");if(n!==a.state)throw new Error("Provided state does not match stored state");let l=await this.getPKCEToken(t,a.verifier),d=o.mapDeviceTokenResponseToOidcUser(l),s=o.mapOidcUserToDomainModel(d);return await this.userManager.storeUser(d),s},"AUTHENTICATION_ERROR")}async getPKCEToken(t,n){return (await kr.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:n,code:t,redirect_uri:this.config.oidcConfiguration.redirectUri},ta)).data}async storeTokens(t){return k(async()=>{let n=o.mapDeviceTokenResponseToOidcUser(t),a=o.mapOidcUserToDomainModel(n);return await this.userManager.storeUser(n),a},"AUTHENTICATION_ERROR")}async logout(){return k(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(t){return this.userManager.signoutSilentCallback(t)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let t=this.userManager.settings?.metadata?.end_session_endpoint;return t||(ie.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(t=>{ie.warn("Failed to refresh user token",t);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(t=>(ie.warn("Failed to refresh user token",t),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(t,n)=>{try{let a=await this.userManager.signinSilent();if(a){t(o.mapOidcUserToDomainModel(a));return}t(null);}catch(a){let l="AUTHENTICATION_ERROR",d="Failed to refresh token",s=!0;if(a instanceof ErrorTimeout?(l="SILENT_LOGIN_ERROR",d=`${d}: ${a.message}`,s=!1):a instanceof ErrorResponse?(l="NOT_LOGGED_IN_ERROR",d=`${d}: ${a.message||a.error_description}`):a instanceof Error?d=`${d}: ${a.message}`:typeof a=="string"&&(d=`${d}: ${a}`),s)try{await this.userManager.removeUser();}catch(u){u instanceof Error&&(d=`${d}: Failed to remove user: ${u.message}`);}n(new P(d,l));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(t=n=>!0){if(this.refreshingPromise){let a=await this.refreshingPromise;return a&&t(a)?a:null}let n=await this.userManager.getUser();if(!n)return null;if(!Wt(n)){let a=o.mapOidcUserToDomainModel(n);if(a&&t(a))return a}if(n.refresh_token){let a=await this.refreshTokenAndUpdatePromise();if(a&&t(a))return a}return null}async getUserZkEvm(){let t=await this.getUser(de);if(!t)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return t}async getUserImx(){let t=await this.getUser(X);if(!t)throw new Error("Failed to obtain a User with the required IMX attributes");return t}};var S=async(o,t,n=!0,a=!0)=>{let l=trackFlow("passport",t,n);try{return await o(l)}catch(d){throw d instanceof Error?trackError("passport",t,d,{flowId:l.details.flowId}):l.addEvent("errored"),d}finally{a&&l.addEvent("End");}};var tr="ETH",we=class o extends AbstractSigner{authManager;magicTeeApiClient;userWallet=null;createWalletPromise=null;constructor(t,n){super(),this.authManager=t,this.magicTeeApiClient=n;}async getUserWallet(){let{userWallet:t}=this;t||(t=await this.createWallet());let n=await this.getUserOrThrow();if(n.profile.sub!==t.userIdentifier&&(t=await this.createWallet(n)),X(n)&&n.imx.userAdminAddress.toLowerCase()!==t.walletAddress.toLowerCase())throw new P(`Wallet address mismatch.Rollup: IMX, TEE address: ${t.walletAddress}, profile address: ${n.imx.userAdminAddress}`,"WALLET_CONNECTION_ERROR");if(de(n)&&n.zkEvm.userAdminAddress.toLowerCase()!==t.walletAddress.toLowerCase())throw new P(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${t.walletAddress}, profile address: ${n.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return t}async createWallet(t){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(n,a)=>{try{this.userWallet=null;let l=t||await this.getUserOrThrow(),d=o.getHeaders(l);await S(async s=>{try{let u=performance.now(),g=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({xMagicChain:tr},{headers:d});return trackDuration("passport",s.details.flowName,Math.round(performance.now()-u)),this.userWallet={userIdentifier:l.profile.sub,walletAddress:g.data.public_address},n(this.userWallet)}catch(u){let g="MagicTEE: Failed to initialise EOA";return isAxiosError(u)?u.response?g+=` with status ${u.response.status}: ${JSON.stringify(u.response.data)}`:g+=`: ${u.message}`:g+=`: ${u.message}`,a(new Error(g))}},"magicCreateWallet");}catch(l){a(l);}finally{this.createWalletPromise=null;}}),this.createWalletPromise)}async getUserOrThrow(){let t=await this.authManager.getUser();if(!t)throw new P("User has been logged out","NOT_LOGGED_IN_ERROR");return t}static getHeaders(t){if(!t)throw new P("User has been logged out","NOT_LOGGED_IN_ERROR");return {Authorization:`Bearer ${t.idToken}`}}async getAddress(){return (await this.getUserWallet()).walletAddress}async signMessage(t){await this.getUserWallet();let n=t instanceof Uint8Array?`0x${T.from(t).toString("hex")}`:t,a=await this.getUserOrThrow(),l=await o.getHeaders(a);return S(async d=>{try{let s=performance.now(),u=await this.magicTeeApiClient.signOperationsApi.signMessageV1WalletSignMessagePost({signMessageRequest:{message_base64:T.from(n,"utf-8").toString("base64")},xMagicChain:tr},{headers:l});return trackDuration("passport",d.details.flowName,Math.round(performance.now()-s)),u.data.signature}catch(s){let u="MagicTEE: Failed to sign message using EOA";throw isAxiosError(s)?s.response?u+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:u+=`: ${s.message}`:u+=`: ${s.message}`,new Error(u)}},"magicSignMessage")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var rr=async o=>k(async()=>{let t=await generateLegacyStarkPrivateKey(o);return createStarkSigner(t)},"WALLET_CONNECTION_ERROR");async function nr({user:o,starkSigner:t,request:n,exchangesApi:a}){return k(async()=>{let{ethAddress:l}=o.imx,d=n.amount,s=await a.getExchangeSignableTransfer({id:n.transactionID,getSignableTransferRequest:{sender:l,token:convertToSignableToken(n),amount:d,receiver:n.receiver}}),u=await t.getAddress(),{payload_hash:g}=s.data,E=await t.signMessage(g),f={sender_stark_key:s.data.sender_stark_key||u,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:E},w={Authorization:`Bearer ${o.accessToken}`},C=await a.createExchangeTransfer({id:n.transactionID,createTransferRequest:f},{headers:w});return {sent_signature:C?.data.sent_signature,status:C?.data.status?.toString(),time:C?.data.time,transfer_id:C?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var ar="ERC721";async function sr({starkSigner:o,user:t,request:n,ordersApi:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=t.imx,s=n.sell.type===ar?"1":n.sell.amount,u=n.buy.type===ar?"1":n.buy.amount,g={Authorization:`Bearer ${t.accessToken}`},E={user:d,amount_buy:u,token_buy:convertToSignableToken(n.buy),amount_sell:s,token_sell:convertToSignableToken(n.sell),fees:n.fees,split_fees:!0,expiration_timestamp:n.expiration_timestamp},f=await a.getSignableOrder({getSignableOrderRequestV3:E},{headers:g});await l.evaluateImxTransaction({payloadHash:f.data.payload_hash});let{payload_hash:w}=f.data,C=await o.signMessage(w),y=f.data,_={createOrderRequest:{include_fees:!0,fees:n.fees,stark_signature:C,amount_buy:y.amount_buy,amount_sell:y.amount_sell,asset_id_buy:y.asset_id_buy,asset_id_sell:y.asset_id_sell,expiration_timestamp:y.expiration_timestamp,nonce:y.nonce,stark_key:y.stark_key,vault_id_buy:y.vault_id_buy,vault_id_sell:y.vault_id_sell}};return {...(await a.createOrderV3(_,{headers:g})).data}},"CREATE_ORDER_ERROR")}async function or({user:o,starkSigner:t,request:n,ordersApi:a,guardianClient:l}){return k(async()=>{let d={order_id:n.order_id},s={Authorization:`Bearer ${o.accessToken}`},u=await a.getSignableCancelOrderV3({getSignableCancelOrderRequest:d},{headers:s});await l.evaluateImxTransaction({payloadHash:u.data.payload_hash});let{payload_hash:g}=u.data,E=await t.signMessage(g),f=await a.cancelOrderV3({id:n.order_id.toString(),cancelOrderRequest:{order_id:n.order_id,stark_signature:E}},{headers:s});return {order_id:f.data.order_id,status:f.data.status}},"CANCEL_ORDER_ERROR")}async function at({ethSigner:o,starkSigner:t,imxApiClients:n},a){return k(async()=>{let[l,d]=await Promise.all([o.getAddress(),t.getAddress()]),s=await n.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:l,stark_key:d}}),{signable_message:u,payload_hash:g}=s.data,[E,f]=await Promise.all([signRaw(u,o),t.signMessage(g)]);return (await n.usersApi.registerPassportUserV2({authorization:`Bearer ${a}`,registerPassportUserRequest:{eth_signature:E,ether_key:l,stark_signature:f,stark_key:d}})).data},"USER_REGISTRATION_ERROR")}async function cr({request:o,tradesApi:t,user:n,starkSigner:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=n.imx,s={expiration_timestamp:o.expiration_timestamp,fees:o.fees,order_id:o.order_id,user:d},u={Authorization:`Bearer ${n.accessToken}`},g=await t.getSignableTrade({getSignableTradeRequest:s},{headers:u});await l.evaluateImxTransaction({payloadHash:g.data.payload_hash});let{payload_hash:E}=g.data,f=await a.signMessage(E),{data:w}=g,C={createTradeRequest:{include_fees:!0,fees:o?.fees,stark_signature:f,order_id:o?.order_id,fee_info:w.fee_info,amount_buy:w.amount_buy,amount_sell:w.amount_sell,asset_id_buy:w.asset_id_buy,asset_id_sell:w.asset_id_sell,expiration_timestamp:w.expiration_timestamp,nonce:w.nonce,stark_key:w.stark_key,vault_id_buy:w.vault_id_buy,vault_id_sell:w.vault_id_sell}},{data:y}=await t.createTradeV3(C,{headers:u});return y},"CREATE_TRADE_ERROR")}var dr="ERC721";async function pr({request:o,transfersApi:t,starkSigner:n,user:a,guardianClient:l}){return k(async()=>{let d=o.type===dr?"1":o.amount,s={sender:a.imx.ethAddress,token:convertToSignableToken(o),amount:d,receiver:o.receiver},u={Authorization:`Bearer ${a.accessToken}`},g=await t.getSignableTransferV1({getSignableTransferRequest:s},{headers:u});await l.evaluateImxTransaction({payloadHash:g.data.payload_hash});let E=g.data,{payload_hash:f}=E,w=await n.signMessage(f),C=await n.getAddress(),_={createTransferRequest:{sender_stark_key:E.sender_stark_key||C,sender_vault_id:E.sender_vault_id,receiver_stark_key:E.receiver_stark_key,receiver_vault_id:E.receiver_vault_id,asset_id:E.asset_id,amount:E.amount,nonce:E.nonce,expiration_timestamp:E.expiration_timestamp,stark_signature:w}},{data:A}=await t.createTransferV1(_,{headers:u});return {sent_signature:A.sent_signature,status:A.status?.toString(),time:A.time,transfer_id:A.transfer_id}},"TRANSFER_ERROR")}async function ur({user:o,starkSigner:t,request:n,transfersApi:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=o.imx,s=n.map(C=>({amount:"1",token:convertToSignableToken({type:dr,tokenId:C.tokenId,tokenAddress:C.tokenAddress}),receiver:C.receiver})),u={Authorization:`Bearer ${o.accessToken}`},g=await a.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:d,signable_requests:s}},{headers:u});await l.evaluateImxTransaction({payloadHash:g.data.signable_responses[0]?.payload_hash});let E=await Promise.all(g.data.signable_responses.map(async C=>{let y=await t.signMessage(C.payload_hash);return {sender_vault_id:C.sender_vault_id,receiver_stark_key:C.receiver_stark_key,receiver_vault_id:C.receiver_vault_id,asset_id:C.asset_id,amount:C.amount,nonce:C.nonce,expiration_timestamp:C.expiration_timestamp,stark_signature:y}})),f={sender_stark_key:g.data.sender_stark_key,requests:E};return {transfer_ids:(await a.createTransfer({createTransferRequestV2:f},{headers:u}))?.data.transfer_ids}},"TRANSFER_ERROR")}var fa=o=>new Promise(t=>{setTimeout(()=>t(),o);}),ae=async(o,t)=>{let{retries:n=3,interval:a=1e3,finalErr:l=Error("Retry failed"),finallyFn:d=()=>{}}=t||{};try{return await o()}catch{return n<=0?Promise.reject(l):(await fa(a),ae(o,{retries:n-1,finalErr:l,finallyFn:d}))}finally{n<=0&&d();}};async function mr(o){await ae(async()=>{let t=await o.forceUserRefresh();return t?.imx?t:Promise.reject(new Error("user wallet addresses not exist"))});}async function st(o,t,n,a,l){return k(async()=>{try{let d=await at({ethSigner:o,starkSigner:t,imxApiClients:l},n.accessToken);return await mr(a),d}catch(d){if(kr.isAxiosError(d)&&d.response?.status===409)return await mr(a),{tx_hash:""};throw d}},"USER_REGISTRATION_ERROR")}var xe=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:t,immutableXClient:n,passportEventEmitter:a,magicTEESigner:l,imxApiClients:d,guardianClient:s}){this.authManager=t,this.immutableXClient=n,this.magicTEESigner=l,this.imxApiClients=d,this.guardianClient=s,this.#s(),a.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#s(){this.starkSigner=new Promise(async t=>{try{t(await rr(this.magicTEESigner));}catch(n){this.signerInitialisationError=n,t(void 0);}});}async#t(){let t=await this.authManager.getUser();if(!t||!this.starkSigner)throw new P("User has been logged out","NOT_LOGGED_IN_ERROR");return t}async#i(){let t=await this.starkSigner;if(typeof t>"u")throw typeof this.signerInitialisationError<"u"?this.signerInitialisationError:new Error("Signers failed to initialise");return t}async#r(){let[t,n]=await Promise.all([this.#t(),this.#i()]);if(!X(t))throw new P("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:t,starkSigner:n}}async transfer(t){return S(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:n,starkSigner:a}=await this.#r();return pr({request:t,user:n,starkSigner:a,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxTransfer")}async registerOffchain(){return S(async()=>{let[t,n]=await Promise.all([this.#t(),this.#i()]);return await st(this.magicTEESigner,n,t,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return S(async()=>!!(await this.#t()).imx,"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new P("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(t){return S(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:n,starkSigner:a}=await this.#r();return sr({request:t,user:n,starkSigner:a,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCreateOrder")}async cancelOrder(t){return S(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:n,starkSigner:a}=await this.#r();return or({request:t,user:n,starkSigner:a,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCancelOrder")}async createTrade(t){return S(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:n,starkSigner:a}=await this.#r();return cr({request:t,user:n,starkSigner:a,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})(),"imxCreateTrade")}async batchNftTransfer(t){return S(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:n,starkSigner:a}=await this.#r();return ur({request:t,user:n,starkSigner:a,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(t){return S(async()=>{let{user:n,starkSigner:a}=await this.#r();return nr({request:t,user:n,starkSigner:a,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(t){throw new P("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(t){throw new P("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(t,n){throw new P("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return S(async()=>{let t=await this.#t();if(!X(t))throw new P("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(t.imx.ethAddress)},"imxGetAddress")}};var ke=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:t,immutableXClient:n,magicTEESigner:a,passportEventEmitter:l,imxApiClients:d,guardianClient:s}){this.authManager=t,this.immutableXClient=n,this.magicTEESigner=a,this.passportEventEmitter=l,this.imxApiClients=d,this.guardianClient=s;}async getProvider(){let t=await this.authManager.getUserOrLogin();return this.createProviderInstance(t)}async getProviderSilent(){let t=await this.authManager.getUser();return t?this.createProviderInstance(t):null}async createProviderInstance(t){if(!t.idToken)throw new P("Failed to initialise","WALLET_CONNECTION_ERROR");return new xe({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var Er=(o,t,n)=>{let a=t.map(l=>!o[l]&&l).filter(l=>l).join(", ");if(a!==""){let l=n?`${n} - ${a} cannot be null`:`${a} cannot be null`;throw new P(l,"INVALID_CONFIGURATION")}},Me=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:t,overrides:n,crossSdkBridgeEnabled:a,jsonRpcReferrer:l,forceScwDeployBeforeMessageSignature:d,popupOverlayOptions:s,...u}){if(Er(u,["clientId","redirectUri"]),this.oidcConfiguration=u,this.baseConfig=t,this.crossSdkBridgeEnabled=a||!1,this.forceScwDeployBeforeMessageSignature=d||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},n)Er(n,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=n.authenticationDomain,this.passportDomain=n.passportDomain,this.imxPublicApiDomain=n.imxPublicApiDomain,this.magicPublishableApiKey=n.magicPublishableApiKey,this.magicProviderId=n.magicProviderId,this.zkEvmRpcUrl=n.zkEvmRpcUrl,this.relayerUrl=n.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:n.indexerMrBasePath}),orderBook:createConfig({basePath:n.orderBookMrBasePath}),passport:createConfig({basePath:n.passportMrBasePath})};else switch(t.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getProduction();break}case Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var Re="imx_passport_confirmation",yr="im_passport_embedded_login_prompt";var Ue=({url:o,title:t,width:n,height:a})=>{let l=Math.max(0,Math.round(window.screenX+(window.outerWidth-n)/2)),d=Math.max(0,Math.round(window.screenY+(window.outerHeight-a)/2)),s=window.open(o,t,`
366
+ `;function Oe({id:o,href:t,rel:n,crossOrigin:a}){let l=`${pe}-${o}`;if(!document.getElementById(l)){let d=document.createElement("link");d.id=l,d.href=t,n&&(d.rel=n),a&&(d.crossOrigin=a),document.head.appendChild(d);}}var zt=()=>Xt(Hi()),jt=()=>Xt(Vi());var Q=class{disableGenericPopupOverlay;disableBlockedPopupOverlay;overlay;isBlockedOverlay;tryAgainListener;onCloseListener;constructor(t,n=!1){this.disableBlockedPopupOverlay=t.disableBlockedPopupOverlay||!1,this.disableGenericPopupOverlay=t.disableGenericPopupOverlay||!1,this.isBlockedOverlay=n;}append(t,n){this.shouldAppendOverlay()&&(this.appendOverlay(),this.updateTryAgainButton(t),this.updateCloseButton(n));}update(t){this.updateTryAgainButton(t);}remove(){this.overlay&&this.overlay.remove();}shouldAppendOverlay(){return !(this.disableGenericPopupOverlay&&this.disableBlockedPopupOverlay||this.disableGenericPopupOverlay&&!this.isBlockedOverlay||this.disableBlockedPopupOverlay&&this.isBlockedOverlay)}appendOverlay(){if(!this.overlay){Oe({id:"link-googleapis",href:"https://fonts.googleapis.com"}),Oe({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),Oe({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?zt():jt(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(t){let n=document.getElementById(Se);n&&(this.tryAgainListener&&n.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=t,n.addEventListener("click",t));}updateCloseButton(t){let n=document.getElementById(Ie);n&&(this.onCloseListener&&n.removeEventListener("click",this.onCloseListener),this.onCloseListener=t,n.addEventListener("click",t));}};var be=class{storage;constructor(t,n){this.storage=Wi.createInstance({name:t,driver:n});}get length(){return this.storage.length()}clear(){return this.storage.clear()}getItem(t){return this.storage.getItem(t)}key(t){return this.storage.key(t)}async removeItem(t){await this.storage.removeItem(t);}async setItem(t,n){await this.storage.setItem(t,n);}};var ea=500,ta={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ra="/v2/logout",na="/im-logged-out",ia="/authorize",aa=o=>o?na:ra,sa=o=>{let{authenticationDomain:t,oidcConfiguration:n}=o,a;o.crossSdkBridgeEnabled?a=new be("ImmutableSDKPassport",Wi.INDEXEDDB):typeof window<"u"?a=window.localStorage:a=new InMemoryWebStorage;let l=new WebStorageStateStore({store:a}),d=new URL(aa(o.crossSdkBridgeEnabled),t.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return d.searchParams.set("client_id",n.clientId),n.logoutRedirectUri&&d.searchParams.set("returnTo",n.logoutRedirectUri),{authority:t,redirect_uri:n.redirectUri,popup_redirect_uri:n.popupRedirectUri||n.redirectUri,client_id:n.clientId,metadata:{authorization_endpoint:`${t}/authorize`,token_endpoint:`${t}/oauth/token`,userinfo_endpoint:`${t}/userinfo`,end_session_endpoint:d.toString(),revocation_endpoint:`${t}/oauth/revoke`},mergeClaimsStrategy:{array:"merge"},automaticSilentRenew:!1,scope:n.scope,userStore:l,revokeTokenTypes:["refresh_token"],extraQueryParams:{...n.audience?{audience:n.audience}:{}}}};function it(o){return btoa(String.fromCharCode(...new Uint8Array(o))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function oa(o){let n=new TextEncoder().encode(o);return await window.crypto.subtle.digest("SHA-256",n)}var ye=class o{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(t,n){this.config=t,this.userManager=new UserManager(sa(t)),this.deviceCredentialsManager=new fe,this.embeddedLoginPrompt=n,this.logoutMode=t.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=t=>{let n;t.id_token&&(n=Yt(t.id_token)?.passport);let a={expired:t.expired,idToken:t.id_token,accessToken:t.access_token,refreshToken:t.refresh_token,profile:{sub:t.profile.sub,email:t.profile.email,nickname:t.profile.nickname}};return n?.imx_eth_address&&(a.imx={ethAddress:n.imx_eth_address,starkAddress:n.imx_stark_address,userAdminAddress:n.imx_user_admin_address}),n?.zkevm_eth_address&&(a.zkEvm={ethAddress:n?.zkevm_eth_address,userAdminAddress:n?.zkevm_user_admin_address}),a};static mapDeviceTokenResponseToOidcUser=t=>{let n=Yt(t.id_token);return new User({id_token:t.id_token,access_token:t.access_token,refresh_token:t.refresh_token,token_type:t.token_type,profile:{sub:n.sub,iss:n.iss,aud:n.aud,exp:n.exp,iat:n.iat,email:n.email,nickname:n.nickname,passport:n.passport}})};buildExtraQueryParams(t,n,a){let l={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:t||""};if(n){if(n.directLoginMethod==="email"){let d=n.email;d&&(l.direct=n.directLoginMethod,l.email=d);}else l.direct=n.directLoginMethod;n.marketingConsentStatus&&(l.marketingConsent=n.marketingConsentStatus);}return a&&(l.im_passport_trace_id=a),l}async loginWithRedirect(t,n){return await this.userManager.clearStaleState(),k(async()=>{let a=this.buildExtraQueryParams(t,n);await this.userManager.signinRedirect({extraQueryParams:a});},"AUTHENTICATION_ERROR")}async login(t,n){return k(async()=>{let a,l;if(n)a=n;else if(!this.config.popupOverlayOptions.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:u,...g}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(t);a=g,l=u;}let d=window.crypto.randomUUID(),s=async()=>{let u=this.buildExtraQueryParams(t,a,l),g=this.userManager.signinPopup({extraQueryParams:u,popupWindowFeatures:{width:410,height:450},popupWindowTarget:d}),E=window.open("",d);if(E){let f=new Promise((w,C)=>{let y=setInterval(()=>{E.closed&&(clearInterval(y),C(new Error("Popup closed by user")));},ea);g.finally(()=>{clearInterval(y),E.close();});});return Promise.race([g,f])}return g};return new Promise((u,g)=>{s().then(E=>{u(o.mapOidcUserToDomainModel(E));}).catch(E=>{if(!(E instanceof Error)||E.message!=="Attempted to navigate on a disposed window"){g(E);return}let f=!1,w=new Q(this.config.popupOverlayOptions,!0);w.append(async()=>{try{if(f)window.open("",d);else {f=!0;let C=await s();w.remove(),u(o.mapOidcUserToDomainModel(C));}}catch(C){w.remove(),g(C);}},()=>{w.remove(),g(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let t=null;try{t=await this.getUser();}catch(n){ie.warn("Failed to retrieve a cached user session",n);}return t||this.login()}static shouldUseSigninPopupCallback(){try{let a=`oidc.${new URLSearchParams(window.location.search).get("state")}`,l=localStorage.getItem(a);return JSON.parse(l||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return k(async()=>{if(o.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let t=await this.userManager.signinCallback();if(t)return o.mapOidcUserToDomainModel(t)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(t,n){let a=it(window.crypto.getRandomValues(new Uint8Array(32))),l=it(await oa(a)),d=it(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:u,audience:g,clientId:E}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:d,verifier:a});let f=new URL(ia,this.config.authenticationDomain);if(f.searchParams.set("response_type","code"),f.searchParams.set("code_challenge",l),f.searchParams.set("code_challenge_method","S256"),f.searchParams.set("client_id",E),f.searchParams.set("redirect_uri",s),f.searchParams.set("state",d),u&&f.searchParams.set("scope",u),g&&f.searchParams.set("audience",g),t){if(t.directLoginMethod==="email"){let w=t.email;w&&(f.searchParams.set("direct",t.directLoginMethod),f.searchParams.set("email",w));}else f.searchParams.set("direct",t.directLoginMethod);t.marketingConsentStatus&&f.searchParams.set("marketingConsent",t.marketingConsentStatus);}return n&&f.searchParams.set("im_passport_trace_id",n),f.toString()}async loginWithPKCEFlowCallback(t,n){return k(async()=>{let a=this.deviceCredentialsManager.getPKCEData();if(!a)throw new Error("No code verifier or state for PKCE");if(n!==a.state)throw new Error("Provided state does not match stored state");let l=await this.getPKCEToken(t,a.verifier),d=o.mapDeviceTokenResponseToOidcUser(l),s=o.mapOidcUserToDomainModel(d);return await this.userManager.storeUser(d),s},"AUTHENTICATION_ERROR")}async getPKCEToken(t,n){return (await kr.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:n,code:t,redirect_uri:this.config.oidcConfiguration.redirectUri},ta)).data}async storeTokens(t){return k(async()=>{let n=o.mapDeviceTokenResponseToOidcUser(t),a=o.mapOidcUserToDomainModel(n);return await this.userManager.storeUser(n),a},"AUTHENTICATION_ERROR")}async logout(){return k(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(t){return this.userManager.signoutSilentCallback(t)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let t=this.userManager.settings?.metadata?.end_session_endpoint;return t||(ie.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(t=>{ie.warn("Failed to refresh user token",t);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(t=>(ie.warn("Failed to refresh user token",t),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(t,n)=>{try{let a=await this.userManager.signinSilent();if(a){t(o.mapOidcUserToDomainModel(a));return}t(null);}catch(a){let l="AUTHENTICATION_ERROR",d="Failed to refresh token",s=!0;if(a instanceof ErrorTimeout?(l="SILENT_LOGIN_ERROR",d=`${d}: ${a.message}`,s=!1):a instanceof ErrorResponse?(l="NOT_LOGGED_IN_ERROR",d=`${d}: ${a.message||a.error_description}`):a instanceof Error?d=`${d}: ${a.message}`:typeof a=="string"&&(d=`${d}: ${a}`),s)try{await this.userManager.removeUser();}catch(u){u instanceof Error&&(d=`${d}: Failed to remove user: ${u.message}`);}n(new P(d,l));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(t=n=>!0){if(this.refreshingPromise){let a=await this.refreshingPromise;return a&&t(a)?a:null}let n=await this.userManager.getUser();if(!n)return null;if(!Wt(n)){let a=o.mapOidcUserToDomainModel(n);if(a&&t(a))return a}if(n.refresh_token){let a=await this.refreshTokenAndUpdatePromise();if(a&&t(a))return a}return null}async getUserZkEvm(){let t=await this.getUser(de);if(!t)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return t}async getUserImx(){let t=await this.getUser(X);if(!t)throw new Error("Failed to obtain a User with the required IMX attributes");return t}};var S=async(o,t,n=!0,a=!0)=>{let l=trackFlow("passport",t,n);try{return await o(l)}catch(d){throw d instanceof Error?trackError("passport",t,d,{flowId:l.details.flowId}):l.addEvent("errored"),d}finally{a&&l.addEvent("End");}};var tr="ETH",we=class o extends AbstractSigner{authManager;magicTeeApiClient;userWallet=null;createWalletPromise=null;constructor(t,n){super(),this.authManager=t,this.magicTeeApiClient=n;}async getUserWallet(){let{userWallet:t}=this;t||(t=await this.createWallet());let n=await this.getUserOrThrow();if(n.profile.sub!==t.userIdentifier&&(t=await this.createWallet(n)),X(n)&&n.imx.userAdminAddress.toLowerCase()!==t.walletAddress.toLowerCase())throw new P(`Wallet address mismatch.Rollup: IMX, TEE address: ${t.walletAddress}, profile address: ${n.imx.userAdminAddress}`,"WALLET_CONNECTION_ERROR");if(de(n)&&n.zkEvm.userAdminAddress.toLowerCase()!==t.walletAddress.toLowerCase())throw new P(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${t.walletAddress}, profile address: ${n.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return t}async createWallet(t){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(n,a)=>{try{this.userWallet=null;let l=t||await this.getUserOrThrow(),d=o.getHeaders(l);await S(async s=>{try{let u=performance.now(),g=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({xMagicChain:tr},{headers:d});return trackDuration("passport",s.details.flowName,Math.round(performance.now()-u)),this.userWallet={userIdentifier:l.profile.sub,walletAddress:g.data.public_address},n(this.userWallet)}catch(u){let g="MagicTEE: Failed to initialise EOA";return isAxiosError(u)?u.response?g+=` with status ${u.response.status}: ${JSON.stringify(u.response.data)}`:g+=`: ${u.message}`:g+=`: ${u.message}`,a(new Error(g))}},"magicCreateWallet");}catch(l){a(l);}finally{this.createWalletPromise=null;}}),this.createWalletPromise)}async getUserOrThrow(){let t=await this.authManager.getUser();if(!t)throw new P("User has been logged out","NOT_LOGGED_IN_ERROR");return t}static getHeaders(t){if(!t)throw new P("User has been logged out","NOT_LOGGED_IN_ERROR");return {Authorization:`Bearer ${t.idToken}`}}async getAddress(){return (await this.getUserWallet()).walletAddress}async signMessage(t){await this.getUserWallet();let n=t instanceof Uint8Array?`0x${T.from(t).toString("hex")}`:t,a=await this.getUserOrThrow(),l=await o.getHeaders(a);return S(async d=>{try{let s=performance.now(),u=await this.magicTeeApiClient.signOperationsApi.signMessageV1WalletSignMessagePost({signMessageRequest:{message_base64:T.from(n,"utf-8").toString("base64")},xMagicChain:tr},{headers:l});return trackDuration("passport",d.details.flowName,Math.round(performance.now()-s)),u.data.signature}catch(s){let u="MagicTEE: Failed to sign message using EOA";throw isAxiosError(s)?s.response?u+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:u+=`: ${s.message}`:u+=`: ${s.message}`,new Error(u)}},"magicSignMessage")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var rr=async o=>k(async()=>{let t=await generateLegacyStarkPrivateKey(o);return createStarkSigner(t)},"WALLET_CONNECTION_ERROR");async function nr({user:o,starkSigner:t,request:n,exchangesApi:a}){return k(async()=>{let{ethAddress:l}=o.imx,d=n.amount,s=await a.getExchangeSignableTransfer({id:n.transactionID,getSignableTransferRequest:{sender:l,token:convertToSignableToken(n),amount:d,receiver:n.receiver}}),u=await t.getAddress(),{payload_hash:g}=s.data,E=await t.signMessage(g),f={sender_stark_key:s.data.sender_stark_key||u,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:E},w={Authorization:`Bearer ${o.accessToken}`},C=await a.createExchangeTransfer({id:n.transactionID,createTransferRequest:f},{headers:w});return {sent_signature:C?.data.sent_signature,status:C?.data.status?.toString(),time:C?.data.time,transfer_id:C?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var ar="ERC721";async function sr({starkSigner:o,user:t,request:n,ordersApi:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=t.imx,s=n.sell.type===ar?"1":n.sell.amount,u=n.buy.type===ar?"1":n.buy.amount,g={Authorization:`Bearer ${t.accessToken}`},E={user:d,amount_buy:u,token_buy:convertToSignableToken(n.buy),amount_sell:s,token_sell:convertToSignableToken(n.sell),fees:n.fees,split_fees:!0,expiration_timestamp:n.expiration_timestamp},f=await a.getSignableOrder({getSignableOrderRequestV3:E},{headers:g});await l.evaluateImxTransaction({payloadHash:f.data.payload_hash});let{payload_hash:w}=f.data,C=await o.signMessage(w),y=f.data,_={createOrderRequest:{include_fees:!0,fees:n.fees,stark_signature:C,amount_buy:y.amount_buy,amount_sell:y.amount_sell,asset_id_buy:y.asset_id_buy,asset_id_sell:y.asset_id_sell,expiration_timestamp:y.expiration_timestamp,nonce:y.nonce,stark_key:y.stark_key,vault_id_buy:y.vault_id_buy,vault_id_sell:y.vault_id_sell}};return {...(await a.createOrderV3(_,{headers:g})).data}},"CREATE_ORDER_ERROR")}async function or({user:o,starkSigner:t,request:n,ordersApi:a,guardianClient:l}){return k(async()=>{let d={order_id:n.order_id},s={Authorization:`Bearer ${o.accessToken}`},u=await a.getSignableCancelOrderV3({getSignableCancelOrderRequest:d},{headers:s});await l.evaluateImxTransaction({payloadHash:u.data.payload_hash});let{payload_hash:g}=u.data,E=await t.signMessage(g),f=await a.cancelOrderV3({id:n.order_id.toString(),cancelOrderRequest:{order_id:n.order_id,stark_signature:E}},{headers:s});return {order_id:f.data.order_id,status:f.data.status}},"CANCEL_ORDER_ERROR")}async function at({ethSigner:o,starkSigner:t,imxApiClients:n},a){return k(async()=>{let[l,d]=await Promise.all([o.getAddress(),t.getAddress()]),s=await n.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:l,stark_key:d}}),{signable_message:u,payload_hash:g}=s.data,[E,f]=await Promise.all([signRaw(u,o),t.signMessage(g)]);return (await n.usersApi.registerPassportUserV2({authorization:`Bearer ${a}`,registerPassportUserRequest:{eth_signature:E,ether_key:l,stark_signature:f,stark_key:d}})).data},"USER_REGISTRATION_ERROR")}async function cr({request:o,tradesApi:t,user:n,starkSigner:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=n.imx,s={expiration_timestamp:o.expiration_timestamp,fees:o.fees,order_id:o.order_id,user:d},u={Authorization:`Bearer ${n.accessToken}`},g=await t.getSignableTrade({getSignableTradeRequest:s},{headers:u});await l.evaluateImxTransaction({payloadHash:g.data.payload_hash});let{payload_hash:E}=g.data,f=await a.signMessage(E),{data:w}=g,C={createTradeRequest:{include_fees:!0,fees:o?.fees,stark_signature:f,order_id:o?.order_id,fee_info:w.fee_info,amount_buy:w.amount_buy,amount_sell:w.amount_sell,asset_id_buy:w.asset_id_buy,asset_id_sell:w.asset_id_sell,expiration_timestamp:w.expiration_timestamp,nonce:w.nonce,stark_key:w.stark_key,vault_id_buy:w.vault_id_buy,vault_id_sell:w.vault_id_sell}},{data:y}=await t.createTradeV3(C,{headers:u});return y},"CREATE_TRADE_ERROR")}var dr="ERC721";async function pr({request:o,transfersApi:t,starkSigner:n,user:a,guardianClient:l}){return k(async()=>{let d=o.type===dr?"1":o.amount,s={sender:a.imx.ethAddress,token:convertToSignableToken(o),amount:d,receiver:o.receiver},u={Authorization:`Bearer ${a.accessToken}`},g=await t.getSignableTransferV1({getSignableTransferRequest:s},{headers:u});await l.evaluateImxTransaction({payloadHash:g.data.payload_hash});let E=g.data,{payload_hash:f}=E,w=await n.signMessage(f),C=await n.getAddress(),_={createTransferRequest:{sender_stark_key:E.sender_stark_key||C,sender_vault_id:E.sender_vault_id,receiver_stark_key:E.receiver_stark_key,receiver_vault_id:E.receiver_vault_id,asset_id:E.asset_id,amount:E.amount,nonce:E.nonce,expiration_timestamp:E.expiration_timestamp,stark_signature:w}},{data:A}=await t.createTransferV1(_,{headers:u});return {sent_signature:A.sent_signature,status:A.status?.toString(),time:A.time,transfer_id:A.transfer_id}},"TRANSFER_ERROR")}async function ur({user:o,starkSigner:t,request:n,transfersApi:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=o.imx,s=n.map(C=>({amount:"1",token:convertToSignableToken({type:dr,tokenId:C.tokenId,tokenAddress:C.tokenAddress}),receiver:C.receiver})),u={Authorization:`Bearer ${o.accessToken}`},g=await a.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:d,signable_requests:s}},{headers:u});await l.evaluateImxTransaction({payloadHash:g.data.signable_responses[0]?.payload_hash});let E=await Promise.all(g.data.signable_responses.map(async C=>{let y=await t.signMessage(C.payload_hash);return {sender_vault_id:C.sender_vault_id,receiver_stark_key:C.receiver_stark_key,receiver_vault_id:C.receiver_vault_id,asset_id:C.asset_id,amount:C.amount,nonce:C.nonce,expiration_timestamp:C.expiration_timestamp,stark_signature:y}})),f={sender_stark_key:g.data.sender_stark_key,requests:E};return {transfer_ids:(await a.createTransfer({createTransferRequestV2:f},{headers:u}))?.data.transfer_ids}},"TRANSFER_ERROR")}var fa=o=>new Promise(t=>{setTimeout(()=>t(),o);}),ae=async(o,t)=>{let{retries:n=3,interval:a=1e3,finalErr:l=Error("Retry failed"),finallyFn:d=()=>{}}=t||{};try{return await o()}catch{return n<=0?Promise.reject(l):(await fa(a),ae(o,{retries:n-1,finalErr:l,finallyFn:d}))}finally{n<=0&&d();}};async function mr(o){await ae(async()=>{let t=await o.forceUserRefresh();return t?.imx?t:Promise.reject(new Error("user wallet addresses not exist"))});}async function st(o,t,n,a,l){return k(async()=>{try{let d=await at({ethSigner:o,starkSigner:t,imxApiClients:l},n.accessToken);return await mr(a),d}catch(d){if(kr.isAxiosError(d)&&d.response?.status===409)return await mr(a),{tx_hash:""};throw d}},"USER_REGISTRATION_ERROR")}var xe=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:t,immutableXClient:n,passportEventEmitter:a,magicTEESigner:l,imxApiClients:d,guardianClient:s}){this.authManager=t,this.immutableXClient=n,this.magicTEESigner=l,this.imxApiClients=d,this.guardianClient=s,this.#s(),a.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#s(){this.starkSigner=new Promise(async t=>{try{t(await rr(this.magicTEESigner));}catch(n){this.signerInitialisationError=n,t(void 0);}});}async#t(){let t=await this.authManager.getUser();if(!t||!this.starkSigner)throw new P("User has been logged out","NOT_LOGGED_IN_ERROR");return t}async#i(){let t=await this.starkSigner;if(typeof t>"u")throw typeof this.signerInitialisationError<"u"?this.signerInitialisationError:new Error("Signers failed to initialise");return t}async#r(){let[t,n]=await Promise.all([this.#t(),this.#i()]);if(!X(t))throw new P("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:t,starkSigner:n}}async transfer(t){return S(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:n,starkSigner:a}=await this.#r();return pr({request:t,user:n,starkSigner:a,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxTransfer")}async registerOffchain(){return S(async()=>{let[t,n]=await Promise.all([this.#t(),this.#i()]);return await st(this.magicTEESigner,n,t,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return S(async()=>!!(await this.#t()).imx,"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new P("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(t){return S(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:n,starkSigner:a}=await this.#r();return sr({request:t,user:n,starkSigner:a,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCreateOrder")}async cancelOrder(t){return S(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:n,starkSigner:a}=await this.#r();return or({request:t,user:n,starkSigner:a,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCancelOrder")}async createTrade(t){return S(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:n,starkSigner:a}=await this.#r();return cr({request:t,user:n,starkSigner:a,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})(),"imxCreateTrade")}async batchNftTransfer(t){return S(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:n,starkSigner:a}=await this.#r();return ur({request:t,user:n,starkSigner:a,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(t){return S(async()=>{let{user:n,starkSigner:a}=await this.#r();return nr({request:t,user:n,starkSigner:a,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(t){throw new P("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(t){throw new P("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(t,n){throw new P("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return S(async()=>{let t=await this.#t();if(!X(t))throw new P("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(t.imx.ethAddress)},"imxGetAddress")}};var ke=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:t,immutableXClient:n,magicTEESigner:a,passportEventEmitter:l,imxApiClients:d,guardianClient:s}){this.authManager=t,this.immutableXClient=n,this.magicTEESigner=a,this.passportEventEmitter=l,this.imxApiClients=d,this.guardianClient=s;}async getProvider(){let t=await this.authManager.getUserOrLogin();return this.createProviderInstance(t)}async getProviderSilent(){let t=await this.authManager.getUser();return t?this.createProviderInstance(t):null}async createProviderInstance(t){if(!t.idToken)throw new P("Failed to initialise","WALLET_CONNECTION_ERROR");return new xe({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var Er=(o,t,n)=>{let a=t.map(l=>!o[l]&&l).filter(l=>l).join(", ");if(a!==""){let l=n?`${n} - ${a} cannot be null`:`${a} cannot be null`;throw new P(l,"INVALID_CONFIGURATION")}},Me=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:t,overrides:n,crossSdkBridgeEnabled:a,jsonRpcReferrer:l,forceScwDeployBeforeMessageSignature:d,popupOverlayOptions:s,...u}){if(Er(u,["clientId","redirectUri"]),this.oidcConfiguration=u,this.baseConfig=t,this.crossSdkBridgeEnabled=a||!1,this.forceScwDeployBeforeMessageSignature=d||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},n)Er(n,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=n.authenticationDomain,this.passportDomain=n.passportDomain,this.imxPublicApiDomain=n.imxPublicApiDomain,this.magicPublishableApiKey=n.magicPublishableApiKey,this.magicProviderId=n.magicProviderId,this.zkEvmRpcUrl=n.zkEvmRpcUrl,this.relayerUrl=n.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:n.indexerMrBasePath}),orderBook:createConfig({basePath:n.orderBookMrBasePath}),passport:createConfig({basePath:n.passportMrBasePath})};else switch(t.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getProduction();break}case Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var Re="imx_passport_confirmation",yr="im_passport_embedded_login_prompt";var Ue=({url:o,title:t,width:n,height:a})=>{let l=Math.max(0,Math.round(window.screenX+(window.outerWidth-n)/2)),d=Math.max(0,Math.round(window.screenY+(window.outerHeight-a)/2)),s=window.open(o,t,`
367
367
  scrollbars=yes,
368
368
  width=${n},
369
369
  height=${a},
@@ -389,7 +389,7 @@ function le(i){return "code"in i&&"message"in i}var g=class extends Error{type;c
389
389
  "
390
390
  />
391
391
  </div>
392
- `;function q({id:i,href:e,rel:t,crossOrigin:r}){let n=`${x}-${i}`;if(!document.getElementById(n)){let a=document.createElement("link");a.id=n,a.href=e,t&&(a.rel=t),r&&(a.crossOrigin=r),document.head.appendChild(a);}}var Ve=()=>Be(Qt()),We=()=>Be(er());var P=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){q({id:"link-googleapis",href:"https://fonts.googleapis.com"}),q({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),q({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 e=document.createElement("div");e.innerHTML=this.isBlockedOverlay?Ve():We(),document.body.insertAdjacentElement("beforeend",e),this.overlay=e;}}updateTryAgainButton(e){let t=document.getElementById($);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(W);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var Z=class{storage;constructor(e,t){this.storage=tr__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 mr=500,ur={headers:{"Content-Type":"application/x-www-form-urlencoded"}},gr="/v2/logout",hr="/im-logged-out",fr="/authorize",Er=i=>i?hr:gr,yr=i=>{let{authenticationDomain:e,oidcConfiguration:t}=i,r;i.crossSdkBridgeEnabled?r=new Z("ImmutableSDKPassport",tr__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let n=new oidcClientTs.WebStorageStateStore({store:r}),a=new URL(Er(i.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return a.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&a.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:a.toString(),revocation_endpoint:`${e}/oauth/revoke`},mergeClaimsStrategy:{array:"merge"},automaticSilentRenew:!1,scope:t.scope,userStore:n,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function me(i){return btoa(String.fromCharCode(...new Uint8Array(i))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Rr(i){let t=new TextEncoder().encode(i);return await window.crypto.subtle.digest("SHA-256",t)}var U=class i{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new oidcClientTs.UserManager(yr(e)),this.deviceCredentialsManager=new L,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=$e__default.default(e.id_token)?.passport);let r={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.imx_eth_address&&(r.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(r.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),r};static mapDeviceTokenResponseToOidcUser=e=>{let t=$e__default.default(e.id_token);return new oidcClientTs.User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t,r){let n={...this.userManager.settings?.extraQueryParams??{},rid:metrics.getDetail(metrics.Detail.RUNTIME_ID)||"",third_party_a_id:e||""};if(t){if(t.directLoginMethod==="email"){let a=t.email;a&&(n.direct=t.directLoginMethod,n.email=a);}else n.direct=t.directLoginMethod;t.marketingConsentStatus&&(n.marketingConsent=t.marketingConsentStatus);}return r&&(n.im_passport_trace_id=r),n}async loginWithRedirect(e,t){return await this.userManager.clearStaleState(),E(async()=>{let r=this.buildExtraQueryParams(e,t);await this.userManager.signinRedirect({extraQueryParams:r});},"AUTHENTICATION_ERROR")}async login(e,t){return E(async()=>{let r,n;if(t)r=t;else if(!this.config.popupOverlayOptions.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:o,...c}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(e);r=c,n=o;}let a=window.crypto.randomUUID(),s=async()=>{let o=this.buildExtraQueryParams(e,r,n),c=this.userManager.signinPopup({extraQueryParams:o,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a}),d=window.open("",a);if(d){let l=new Promise((p,m)=>{let f=setInterval(()=>{d.closed&&(clearInterval(f),m(new Error("Popup closed by user")));},mr);c.finally(()=>{clearInterval(f),d.close();});});return Promise.race([c,l])}return c};return new Promise((o,c)=>{s().then(d=>{o(i.mapOidcUserToDomainModel(d));}).catch(d=>{if(!(d instanceof Error)||d.message!=="Attempted to navigate on a disposed window"){c(d);return}let l=!1,p=new P(this.config.popupOverlayOptions,!0);p.append(async()=>{try{if(l)window.open("",a);else {l=!0;let m=await s();p.remove(),o(i.mapOidcUserToDomainModel(m));}}catch(m){p.remove(),c(m);}},()=>{p.remove(),c(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){S.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let r=`oidc.${new URLSearchParams(window.location.search).get("state")}`,n=localStorage.getItem(r);return JSON.parse(n||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return E(async()=>{if(i.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return i.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=me(window.crypto.getRandomValues(new Uint8Array(32))),n=me(await Rr(r)),a=me(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:o,audience:c,clientId:d}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:a,verifier:r});let l=new URL(fr,this.config.authenticationDomain);if(l.searchParams.set("response_type","code"),l.searchParams.set("code_challenge",n),l.searchParams.set("code_challenge_method","S256"),l.searchParams.set("client_id",d),l.searchParams.set("redirect_uri",s),l.searchParams.set("state",a),o&&l.searchParams.set("scope",o),c&&l.searchParams.set("audience",c),e){if(e.directLoginMethod==="email"){let p=e.email;p&&(l.searchParams.set("direct",e.directLoginMethod),l.searchParams.set("email",p));}else l.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&l.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&l.searchParams.set("im_passport_trace_id",t),l.toString()}async loginWithPKCEFlowCallback(e,t){return E(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),a=i.mapDeviceTokenResponseToOidcUser(n),s=i.mapOidcUserToDomainModel(a);return await this.userManager.storeUser(a),s},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await wt__default.default.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},ur)).data}async storeTokens(e){return E(async()=>{let t=i.mapDeviceTokenResponseToOidcUser(e),r=i.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return E(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(S.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{S.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(S.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let r=await this.userManager.signinSilent();if(r){e(i.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let n="AUTHENTICATION_ERROR",a="Failed to refresh token",s=!0;if(r instanceof oidcClientTs.ErrorTimeout?(n="SILENT_LOGIN_ERROR",a=`${a}: ${r.message}`,s=!1):r instanceof oidcClientTs.ErrorResponse?(n="NOT_LOGGED_IN_ERROR",a=`${a}: ${r.message||r.error_description}`):r instanceof Error?a=`${a}: ${r.message}`:typeof r=="string"&&(a=`${a}: ${r}`),s)try{await this.userManager.removeUser();}catch(o){o instanceof Error&&(a=`${a}: Failed to remove user: ${o.message}`);}t(new g(a,n));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!Le(t)){let r=i.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async getUserZkEvm(){let e=await this.getUser(k);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}async getUserImx(){let e=await this.getUser(_);if(!e)throw new Error("Failed to obtain a User with the required IMX attributes");return e}};var h=async(i,e,t=!0,r=!0)=>{let n=metrics.trackFlow("passport",e,t);try{return await i(n)}catch(a){throw a instanceof Error?metrics.trackError("passport",e,a,{flowId:n.details.flowId}):n.addEvent("errored"),a}finally{r&&n.addEvent("End");}};var Ke="ETH",G=class i extends ethers.AbstractSigner{authManager;magicTeeApiClient;userWallet=null;createWalletPromise=null;constructor(e,t){super(),this.authManager=e,this.magicTeeApiClient=t;}async getUserWallet(){let{userWallet:e}=this;e||(e=await this.createWallet());let t=await this.getUserOrThrow();if(t.profile.sub!==e.userIdentifier&&(e=await this.createWallet(t)),_(t)&&t.imx.userAdminAddress.toLowerCase()!==e.walletAddress.toLowerCase())throw new g(`Wallet address mismatch.Rollup: IMX, TEE address: ${e.walletAddress}, profile address: ${t.imx.userAdminAddress}`,"WALLET_CONNECTION_ERROR");if(k(t)&&t.zkEvm.userAdminAddress.toLowerCase()!==e.walletAddress.toLowerCase())throw new g(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${e.walletAddress}, profile address: ${t.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return e}async createWallet(e){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(t,r)=>{try{this.userWallet=null;let n=e||await this.getUserOrThrow(),a=i.getHeaders(n);await h(async s=>{try{let o=performance.now(),c=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({xMagicChain:Ke},{headers:a});return metrics.trackDuration("passport",s.details.flowName,Math.round(performance.now()-o)),this.userWallet={userIdentifier:n.profile.sub,walletAddress:c.data.public_address},t(this.userWallet)}catch(o){let c="MagicTEE: Failed to initialise EOA";return wt.isAxiosError(o)?o.response?c+=` with status ${o.response.status}: ${JSON.stringify(o.response.data)}`:c+=`: ${o.message}`:c+=`: ${o.message}`,r(new Error(c))}},"magicCreateWallet");}catch(n){r(n);}finally{this.createWalletPromise=null;}}),this.createWalletPromise)}async getUserOrThrow(){let e=await this.authManager.getUser();if(!e)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return e}static getHeaders(e){if(!e)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return {Authorization:`Bearer ${e.idToken}`}}async getAddress(){return (await this.getUserWallet()).walletAddress}async signMessage(e){await this.getUserWallet();let t=e instanceof Uint8Array?`0x${Buffer.from(e).toString("hex")}`:e,r=await this.getUserOrThrow(),n=await i.getHeaders(r);return h(async a=>{try{let s=performance.now(),o=await this.magicTeeApiClient.signOperationsApi.signMessageV1WalletSignMessagePost({signMessageRequest:{message_base64:Buffer.from(t,"utf-8").toString("base64")},xMagicChain:Ke},{headers:n});return metrics.trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),o.data.signature}catch(s){let o="MagicTEE: Failed to sign message using EOA";throw wt.isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,new Error(o)}},"magicSignMessage")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var Xe=async i=>E(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(i);return xClient.createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function Je({user:i,starkSigner:e,request:t,exchangesApi:r}){return E(async()=>{let{ethAddress:n}=i.imx,a=t.amount,s=await r.getExchangeSignableTransfer({id:t.transactionID,getSignableTransferRequest:{sender:n,token:toolkit.convertToSignableToken(t),amount:a,receiver:t.receiver}}),o=await e.getAddress(),{payload_hash:c}=s.data,d=await e.signMessage(c),l={sender_stark_key:s.data.sender_stark_key||o,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:d},p={Authorization:`Bearer ${i.accessToken}`},m=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:p});return {sent_signature:m?.data.sent_signature,status:m?.data.status?.toString(),time:m?.data.time,transfer_id:m?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var je="ERC721";async function Ye({starkSigner:i,user:e,request:t,ordersApi:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=e.imx,s=t.sell.type===je?"1":t.sell.amount,o=t.buy.type===je?"1":t.buy.amount,c={Authorization:`Bearer ${e.accessToken}`},d={user:a,amount_buy:o,token_buy:toolkit.convertToSignableToken(t.buy),amount_sell:s,token_sell:toolkit.convertToSignableToken(t.sell),fees:t.fees,split_fees:!0,expiration_timestamp:t.expiration_timestamp},l=await r.getSignableOrder({getSignableOrderRequestV3:d},{headers:c});await n.evaluateImxTransaction({payloadHash:l.data.payload_hash});let{payload_hash:p}=l.data,m=await i.signMessage(p),f=l.data,v={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:m,amount_buy:f.amount_buy,amount_sell:f.amount_sell,asset_id_buy:f.asset_id_buy,asset_id_sell:f.asset_id_sell,expiration_timestamp:f.expiration_timestamp,nonce:f.nonce,stark_key:f.stark_key,vault_id_buy:f.vault_id_buy,vault_id_sell:f.vault_id_sell}};return {...(await r.createOrderV3(v,{headers:c})).data}},"CREATE_ORDER_ERROR")}async function Qe({user:i,starkSigner:e,request:t,ordersApi:r,guardianClient:n}){return E(async()=>{let a={order_id:t.order_id},s={Authorization:`Bearer ${i.accessToken}`},o=await r.getSignableCancelOrderV3({getSignableCancelOrderRequest:a},{headers:s});await n.evaluateImxTransaction({payloadHash:o.data.payload_hash});let{payload_hash:c}=o.data,d=await e.signMessage(c),l=await r.cancelOrderV3({id:t.order_id.toString(),cancelOrderRequest:{order_id:t.order_id,stark_signature:d}},{headers:s});return {order_id:l.data.order_id,status:l.data.status}},"CANCEL_ORDER_ERROR")}async function ue({ethSigner:i,starkSigner:e,imxApiClients:t},r){return E(async()=>{let[n,a]=await Promise.all([i.getAddress(),e.getAddress()]),s=await t.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:o,payload_hash:c}=s.data,[d,l]=await Promise.all([toolkit.signRaw(o,i),e.signMessage(c)]);return (await t.usersApi.registerPassportUserV2({authorization:`Bearer ${r}`,registerPassportUserRequest:{eth_signature:d,ether_key:n,stark_signature:l,stark_key:a}})).data},"USER_REGISTRATION_ERROR")}async function et({request:i,tradesApi:e,user:t,starkSigner:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=t.imx,s={expiration_timestamp:i.expiration_timestamp,fees:i.fees,order_id:i.order_id,user:a},o={Authorization:`Bearer ${t.accessToken}`},c=await e.getSignableTrade({getSignableTradeRequest:s},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,l=await r.signMessage(d),{data:p}=c,m={createTradeRequest:{include_fees:!0,fees:i?.fees,stark_signature:l,order_id:i?.order_id,fee_info:p.fee_info,amount_buy:p.amount_buy,amount_sell:p.amount_sell,asset_id_buy:p.asset_id_buy,asset_id_sell:p.asset_id_sell,expiration_timestamp:p.expiration_timestamp,nonce:p.nonce,stark_key:p.stark_key,vault_id_buy:p.vault_id_buy,vault_id_sell:p.vault_id_sell}},{data:f}=await e.createTradeV3(m,{headers:o});return f},"CREATE_TRADE_ERROR")}var rt="ERC721";async function nt({request:i,transfersApi:e,starkSigner:t,user:r,guardianClient:n}){return E(async()=>{let a=i.type===rt?"1":i.amount,s={sender:r.imx.ethAddress,token:toolkit.convertToSignableToken(i),amount:a,receiver:i.receiver},o={Authorization:`Bearer ${r.accessToken}`},c=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.payload_hash});let d=c.data,{payload_hash:l}=d,p=await t.signMessage(l),m=await t.getAddress(),v={createTransferRequest:{sender_stark_key:d.sender_stark_key||m,sender_vault_id:d.sender_vault_id,receiver_stark_key:d.receiver_stark_key,receiver_vault_id:d.receiver_vault_id,asset_id:d.asset_id,amount:d.amount,nonce:d.nonce,expiration_timestamp:d.expiration_timestamp,stark_signature:p}},{data:y}=await e.createTransferV1(v,{headers:o});return {sent_signature:y.sent_signature,status:y.status?.toString(),time:y.time,transfer_id:y.transfer_id}},"TRANSFER_ERROR")}async function it({user:i,starkSigner:e,request:t,transfersApi:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=i.imx,s=t.map(m=>({amount:"1",token:toolkit.convertToSignableToken({type:rt,tokenId:m.tokenId,tokenAddress:m.tokenAddress}),receiver:m.receiver})),o={Authorization:`Bearer ${i.accessToken}`},c=await r.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.signable_responses[0]?.payload_hash});let d=await Promise.all(c.data.signable_responses.map(async m=>{let f=await e.signMessage(m.payload_hash);return {sender_vault_id:m.sender_vault_id,receiver_stark_key:m.receiver_stark_key,receiver_vault_id:m.receiver_vault_id,asset_id:m.asset_id,amount:m.amount,nonce:m.nonce,expiration_timestamp:m.expiration_timestamp,stark_signature:f}})),l={sender_stark_key:c.data.sender_stark_key,requests:d};return {transfer_ids:(await r.createTransfer({createTransferRequestV2:l},{headers:o}))?.data.transfer_ids}},"TRANSFER_ERROR")}var Sr=i=>new Promise(e=>{setTimeout(()=>e(),i);}),O=async(i,e)=>{let{retries:t=3,interval:r=1e3,finalErr:n=Error("Retry failed"),finallyFn:a=()=>{}}=e||{};try{return await i()}catch{return t<=0?Promise.reject(n):(await Sr(r),O(i,{retries:t-1,finalErr:n,finallyFn:a}))}finally{t<=0&&a();}};async function at(i){await O(async()=>{let e=await i.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function ge(i,e,t,r,n){return E(async()=>{try{let a=await ue({ethSigner:i,starkSigner:e,imxApiClients:n},t.accessToken);return await at(r),a}catch(a){if(wt__default.default.isAxiosError(a)&&a.response?.status===409)return await at(r),{tx_hash:""};throw a}},"USER_REGISTRATION_ERROR")}var K=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:t,passportEventEmitter:r,magicTEESigner:n,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=n,this.imxApiClients=a,this.guardianClient=s,this.#s(),r.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#s(){this.starkSigner=new Promise(async e=>{try{e(await Xe(this.magicTEESigner));}catch(t){this.signerInitialisationError=t,e(void 0);}});}async#t(){let e=await this.authManager.getUser();if(!e||!this.starkSigner)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return e}async#i(){let e=await this.starkSigner;if(typeof e>"u")throw typeof this.signerInitialisationError<"u"?this.signerInitialisationError:new Error("Signers failed to initialise");return e}async#r(){let[e,t]=await Promise.all([this.#t(),this.#i()]);if(!_(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:t}}async transfer(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return nt({request:e,user:t,starkSigner:r,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxTransfer")}async registerOffchain(){return h(async()=>{let[e,t]=await Promise.all([this.#t(),this.#i()]);return await ge(this.magicTEESigner,t,e,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return h(async()=>!!(await this.#t()).imx,"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return Ye({request:e,user:t,starkSigner:r,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return Qe({request:e,user:t,starkSigner:r,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCancelOrder")}async createTrade(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return et({request:e,user:t,starkSigner:r,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return h(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:t,starkSigner:r}=await this.#r();return it({request:e,user:t,starkSigner:r,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return h(async()=>{let{user:t,starkSigner:r}=await this.#r();return Je({request:e,user:t,starkSigner:r,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,t){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return h(async()=>{let e=await this.#t();if(!_(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)},"imxGetAddress")}};var X=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:t,magicTEESigner:r,passportEventEmitter:n,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=r,this.passportEventEmitter=n,this.imxApiClients=a,this.guardianClient=s;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new g("Failed to initialise","WALLET_CONNECTION_ERROR");return new K({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var dt=(i,e,t)=>{let r=e.map(n=>!i[n]&&n).filter(n=>n).join(", ");if(r!==""){let n=t?`${t} - ${r} cannot be null`:`${r} cannot be null`;throw new g(n,"INVALID_CONFIGURATION")}},J=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:r,jsonRpcReferrer:n,forceScwDeployBeforeMessageSignature:a,popupOverlayOptions:s,...o}){if(dt(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.baseConfig=e,this.crossSdkBridgeEnabled=r||!1,this.forceScwDeployBeforeMessageSignature=a||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},t)dt(t,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=t.authenticationDomain,this.passportDomain=t.passportDomain,this.imxPublicApiDomain=t.imxPublicApiDomain,this.magicPublishableApiKey=t.magicPublishableApiKey,this.magicProviderId=t.magicProviderId,this.zkEvmRpcUrl=t.zkEvmRpcUrl,this.relayerUrl=t.relayerUrl,this.multiRollupConfig={indexer:Ae.createConfig({basePath:t.indexerMrBasePath}),orderBook:Ae.createConfig({basePath:t.orderBookMrBasePath}),passport:Ae.createConfig({basePath:t.passportMrBasePath})};else switch(e.environment){case config.Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=Ae.multiRollupConfig.getProduction();break}case config.Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=Ae.multiRollupConfig.getSandbox();break}}}};var F="imx_passport_confirmation",lt="im_passport_embedded_login_prompt";var z=({url:i,title:e,width:t,height:r})=>{let n=Math.max(0,Math.round(window.screenX+(window.outerWidth-t)/2)),a=Math.max(0,Math.round(window.screenY+(window.outerHeight-r)/2)),s=window.open(i,e,`
392
+ `;function q({id:i,href:e,rel:t,crossOrigin:r}){let n=`${x}-${i}`;if(!document.getElementById(n)){let a=document.createElement("link");a.id=n,a.href=e,t&&(a.rel=t),r&&(a.crossOrigin=r),document.head.appendChild(a);}}var Ve=()=>Be(Qt()),We=()=>Be(er());var P=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){q({id:"link-googleapis",href:"https://fonts.googleapis.com"}),q({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),q({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 e=document.createElement("div");e.innerHTML=this.isBlockedOverlay?Ve():We(),document.body.insertAdjacentElement("beforeend",e),this.overlay=e;}}updateTryAgainButton(e){let t=document.getElementById($);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(W);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var Z=class{storage;constructor(e,t){this.storage=tr__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 mr=500,ur={headers:{"Content-Type":"application/x-www-form-urlencoded"}},gr="/v2/logout",hr="/im-logged-out",fr="/authorize",Er=i=>i?hr:gr,yr=i=>{let{authenticationDomain:e,oidcConfiguration:t}=i,r;i.crossSdkBridgeEnabled?r=new Z("ImmutableSDKPassport",tr__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let n=new oidcClientTs.WebStorageStateStore({store:r}),a=new URL(Er(i.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return a.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&a.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:a.toString(),revocation_endpoint:`${e}/oauth/revoke`},mergeClaimsStrategy:{array:"merge"},automaticSilentRenew:!1,scope:t.scope,userStore:n,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function me(i){return btoa(String.fromCharCode(...new Uint8Array(i))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Rr(i){let t=new TextEncoder().encode(i);return await window.crypto.subtle.digest("SHA-256",t)}var U=class i{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new oidcClientTs.UserManager(yr(e)),this.deviceCredentialsManager=new L,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=$e__default.default(e.id_token)?.passport);let r={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.imx_eth_address&&(r.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(r.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),r};static mapDeviceTokenResponseToOidcUser=e=>{let t=$e__default.default(e.id_token);return new oidcClientTs.User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t,r){let n={...this.userManager.settings?.extraQueryParams??{},rid:metrics.getDetail(metrics.Detail.RUNTIME_ID)||"",third_party_a_id:e||""};if(t){if(t.directLoginMethod==="email"){let a=t.email;a&&(n.direct=t.directLoginMethod,n.email=a);}else n.direct=t.directLoginMethod;t.marketingConsentStatus&&(n.marketingConsent=t.marketingConsentStatus);}return r&&(n.im_passport_trace_id=r),n}async loginWithRedirect(e,t){return await this.userManager.clearStaleState(),E(async()=>{let r=this.buildExtraQueryParams(e,t);await this.userManager.signinRedirect({extraQueryParams:r});},"AUTHENTICATION_ERROR")}async login(e,t){return E(async()=>{let r,n;if(t)r=t;else if(!this.config.popupOverlayOptions.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:o,...c}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(e);r=c,n=o;}let a=window.crypto.randomUUID(),s=async()=>{let o=this.buildExtraQueryParams(e,r,n),c=this.userManager.signinPopup({extraQueryParams:o,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a}),d=window.open("",a);if(d){let l=new Promise((p,m)=>{let f=setInterval(()=>{d.closed&&(clearInterval(f),m(new Error("Popup closed by user")));},mr);c.finally(()=>{clearInterval(f),d.close();});});return Promise.race([c,l])}return c};return new Promise((o,c)=>{s().then(d=>{o(i.mapOidcUserToDomainModel(d));}).catch(d=>{if(!(d instanceof Error)||d.message!=="Attempted to navigate on a disposed window"){c(d);return}let l=!1,p=new P(this.config.popupOverlayOptions,!0);p.append(async()=>{try{if(l)window.open("",a);else {l=!0;let m=await s();p.remove(),o(i.mapOidcUserToDomainModel(m));}}catch(m){p.remove(),c(m);}},()=>{p.remove(),c(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){S.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let r=`oidc.${new URLSearchParams(window.location.search).get("state")}`,n=localStorage.getItem(r);return JSON.parse(n||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return E(async()=>{if(i.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return i.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=me(window.crypto.getRandomValues(new Uint8Array(32))),n=me(await Rr(r)),a=me(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:o,audience:c,clientId:d}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:a,verifier:r});let l=new URL(fr,this.config.authenticationDomain);if(l.searchParams.set("response_type","code"),l.searchParams.set("code_challenge",n),l.searchParams.set("code_challenge_method","S256"),l.searchParams.set("client_id",d),l.searchParams.set("redirect_uri",s),l.searchParams.set("state",a),o&&l.searchParams.set("scope",o),c&&l.searchParams.set("audience",c),e){if(e.directLoginMethod==="email"){let p=e.email;p&&(l.searchParams.set("direct",e.directLoginMethod),l.searchParams.set("email",p));}else l.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&l.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&l.searchParams.set("im_passport_trace_id",t),l.toString()}async loginWithPKCEFlowCallback(e,t){return E(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),a=i.mapDeviceTokenResponseToOidcUser(n),s=i.mapOidcUserToDomainModel(a);return await this.userManager.storeUser(a),s},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await wt__default.default.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},ur)).data}async storeTokens(e){return E(async()=>{let t=i.mapDeviceTokenResponseToOidcUser(e),r=i.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return E(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(S.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{S.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(S.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let r=await this.userManager.signinSilent();if(r){e(i.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let n="AUTHENTICATION_ERROR",a="Failed to refresh token",s=!0;if(r instanceof oidcClientTs.ErrorTimeout?(n="SILENT_LOGIN_ERROR",a=`${a}: ${r.message}`,s=!1):r instanceof oidcClientTs.ErrorResponse?(n="NOT_LOGGED_IN_ERROR",a=`${a}: ${r.message||r.error_description}`):r instanceof Error?a=`${a}: ${r.message}`:typeof r=="string"&&(a=`${a}: ${r}`),s)try{await this.userManager.removeUser();}catch(o){o instanceof Error&&(a=`${a}: Failed to remove user: ${o.message}`);}t(new g(a,n));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!Le(t)){let r=i.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async getUserZkEvm(){let e=await this.getUser(k);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}async getUserImx(){let e=await this.getUser(_);if(!e)throw new Error("Failed to obtain a User with the required IMX attributes");return e}};var h=async(i,e,t=!0,r=!0)=>{let n=metrics.trackFlow("passport",e,t);try{return await i(n)}catch(a){throw a instanceof Error?metrics.trackError("passport",e,a,{flowId:n.details.flowId}):n.addEvent("errored"),a}finally{r&&n.addEvent("End");}};var Ke="ETH",G=class i extends ethers.AbstractSigner{authManager;magicTeeApiClient;userWallet=null;createWalletPromise=null;constructor(e,t){super(),this.authManager=e,this.magicTeeApiClient=t;}async getUserWallet(){let{userWallet:e}=this;e||(e=await this.createWallet());let t=await this.getUserOrThrow();if(t.profile.sub!==e.userIdentifier&&(e=await this.createWallet(t)),_(t)&&t.imx.userAdminAddress.toLowerCase()!==e.walletAddress.toLowerCase())throw new g(`Wallet address mismatch.Rollup: IMX, TEE address: ${e.walletAddress}, profile address: ${t.imx.userAdminAddress}`,"WALLET_CONNECTION_ERROR");if(k(t)&&t.zkEvm.userAdminAddress.toLowerCase()!==e.walletAddress.toLowerCase())throw new g(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${e.walletAddress}, profile address: ${t.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return e}async createWallet(e){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(t,r)=>{try{this.userWallet=null;let n=e||await this.getUserOrThrow(),a=i.getHeaders(n);await h(async s=>{try{let o=performance.now(),c=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({xMagicChain:Ke},{headers:a});return metrics.trackDuration("passport",s.details.flowName,Math.round(performance.now()-o)),this.userWallet={userIdentifier:n.profile.sub,walletAddress:c.data.public_address},t(this.userWallet)}catch(o){let c="MagicTEE: Failed to initialise EOA";return wt.isAxiosError(o)?o.response?c+=` with status ${o.response.status}: ${JSON.stringify(o.response.data)}`:c+=`: ${o.message}`:c+=`: ${o.message}`,r(new Error(c))}},"magicCreateWallet");}catch(n){r(n);}finally{this.createWalletPromise=null;}}),this.createWalletPromise)}async getUserOrThrow(){let e=await this.authManager.getUser();if(!e)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return e}static getHeaders(e){if(!e)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return {Authorization:`Bearer ${e.idToken}`}}async getAddress(){return (await this.getUserWallet()).walletAddress}async signMessage(e){await this.getUserWallet();let t=e instanceof Uint8Array?`0x${Buffer.from(e).toString("hex")}`:e,r=await this.getUserOrThrow(),n=await i.getHeaders(r);return h(async a=>{try{let s=performance.now(),o=await this.magicTeeApiClient.signOperationsApi.signMessageV1WalletSignMessagePost({signMessageRequest:{message_base64:Buffer.from(t,"utf-8").toString("base64")},xMagicChain:Ke},{headers:n});return metrics.trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),o.data.signature}catch(s){let o="MagicTEE: Failed to sign message using EOA";throw wt.isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,new Error(o)}},"magicSignMessage")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var Xe=async i=>E(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(i);return xClient.createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function Je({user:i,starkSigner:e,request:t,exchangesApi:r}){return E(async()=>{let{ethAddress:n}=i.imx,a=t.amount,s=await r.getExchangeSignableTransfer({id:t.transactionID,getSignableTransferRequest:{sender:n,token:toolkit.convertToSignableToken(t),amount:a,receiver:t.receiver}}),o=await e.getAddress(),{payload_hash:c}=s.data,d=await e.signMessage(c),l={sender_stark_key:s.data.sender_stark_key||o,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:d},p={Authorization:`Bearer ${i.accessToken}`},m=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:p});return {sent_signature:m?.data.sent_signature,status:m?.data.status?.toString(),time:m?.data.time,transfer_id:m?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var je="ERC721";async function Ye({starkSigner:i,user:e,request:t,ordersApi:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=e.imx,s=t.sell.type===je?"1":t.sell.amount,o=t.buy.type===je?"1":t.buy.amount,c={Authorization:`Bearer ${e.accessToken}`},d={user:a,amount_buy:o,token_buy:toolkit.convertToSignableToken(t.buy),amount_sell:s,token_sell:toolkit.convertToSignableToken(t.sell),fees:t.fees,split_fees:!0,expiration_timestamp:t.expiration_timestamp},l=await r.getSignableOrder({getSignableOrderRequestV3:d},{headers:c});await n.evaluateImxTransaction({payloadHash:l.data.payload_hash});let{payload_hash:p}=l.data,m=await i.signMessage(p),f=l.data,v={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:m,amount_buy:f.amount_buy,amount_sell:f.amount_sell,asset_id_buy:f.asset_id_buy,asset_id_sell:f.asset_id_sell,expiration_timestamp:f.expiration_timestamp,nonce:f.nonce,stark_key:f.stark_key,vault_id_buy:f.vault_id_buy,vault_id_sell:f.vault_id_sell}};return {...(await r.createOrderV3(v,{headers:c})).data}},"CREATE_ORDER_ERROR")}async function Qe({user:i,starkSigner:e,request:t,ordersApi:r,guardianClient:n}){return E(async()=>{let a={order_id:t.order_id},s={Authorization:`Bearer ${i.accessToken}`},o=await r.getSignableCancelOrderV3({getSignableCancelOrderRequest:a},{headers:s});await n.evaluateImxTransaction({payloadHash:o.data.payload_hash});let{payload_hash:c}=o.data,d=await e.signMessage(c),l=await r.cancelOrderV3({id:t.order_id.toString(),cancelOrderRequest:{order_id:t.order_id,stark_signature:d}},{headers:s});return {order_id:l.data.order_id,status:l.data.status}},"CANCEL_ORDER_ERROR")}async function ue({ethSigner:i,starkSigner:e,imxApiClients:t},r){return E(async()=>{let[n,a]=await Promise.all([i.getAddress(),e.getAddress()]),s=await t.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:o,payload_hash:c}=s.data,[d,l]=await Promise.all([toolkit.signRaw(o,i),e.signMessage(c)]);return (await t.usersApi.registerPassportUserV2({authorization:`Bearer ${r}`,registerPassportUserRequest:{eth_signature:d,ether_key:n,stark_signature:l,stark_key:a}})).data},"USER_REGISTRATION_ERROR")}async function et({request:i,tradesApi:e,user:t,starkSigner:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=t.imx,s={expiration_timestamp:i.expiration_timestamp,fees:i.fees,order_id:i.order_id,user:a},o={Authorization:`Bearer ${t.accessToken}`},c=await e.getSignableTrade({getSignableTradeRequest:s},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,l=await r.signMessage(d),{data:p}=c,m={createTradeRequest:{include_fees:!0,fees:i?.fees,stark_signature:l,order_id:i?.order_id,fee_info:p.fee_info,amount_buy:p.amount_buy,amount_sell:p.amount_sell,asset_id_buy:p.asset_id_buy,asset_id_sell:p.asset_id_sell,expiration_timestamp:p.expiration_timestamp,nonce:p.nonce,stark_key:p.stark_key,vault_id_buy:p.vault_id_buy,vault_id_sell:p.vault_id_sell}},{data:f}=await e.createTradeV3(m,{headers:o});return f},"CREATE_TRADE_ERROR")}var rt="ERC721";async function nt({request:i,transfersApi:e,starkSigner:t,user:r,guardianClient:n}){return E(async()=>{let a=i.type===rt?"1":i.amount,s={sender:r.imx.ethAddress,token:toolkit.convertToSignableToken(i),amount:a,receiver:i.receiver},o={Authorization:`Bearer ${r.accessToken}`},c=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.payload_hash});let d=c.data,{payload_hash:l}=d,p=await t.signMessage(l),m=await t.getAddress(),v={createTransferRequest:{sender_stark_key:d.sender_stark_key||m,sender_vault_id:d.sender_vault_id,receiver_stark_key:d.receiver_stark_key,receiver_vault_id:d.receiver_vault_id,asset_id:d.asset_id,amount:d.amount,nonce:d.nonce,expiration_timestamp:d.expiration_timestamp,stark_signature:p}},{data:y}=await e.createTransferV1(v,{headers:o});return {sent_signature:y.sent_signature,status:y.status?.toString(),time:y.time,transfer_id:y.transfer_id}},"TRANSFER_ERROR")}async function it({user:i,starkSigner:e,request:t,transfersApi:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=i.imx,s=t.map(m=>({amount:"1",token:toolkit.convertToSignableToken({type:rt,tokenId:m.tokenId,tokenAddress:m.tokenAddress}),receiver:m.receiver})),o={Authorization:`Bearer ${i.accessToken}`},c=await r.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.signable_responses[0]?.payload_hash});let d=await Promise.all(c.data.signable_responses.map(async m=>{let f=await e.signMessage(m.payload_hash);return {sender_vault_id:m.sender_vault_id,receiver_stark_key:m.receiver_stark_key,receiver_vault_id:m.receiver_vault_id,asset_id:m.asset_id,amount:m.amount,nonce:m.nonce,expiration_timestamp:m.expiration_timestamp,stark_signature:f}})),l={sender_stark_key:c.data.sender_stark_key,requests:d};return {transfer_ids:(await r.createTransfer({createTransferRequestV2:l},{headers:o}))?.data.transfer_ids}},"TRANSFER_ERROR")}var Sr=i=>new Promise(e=>{setTimeout(()=>e(),i);}),O=async(i,e)=>{let{retries:t=3,interval:r=1e3,finalErr:n=Error("Retry failed"),finallyFn:a=()=>{}}=e||{};try{return await i()}catch{return t<=0?Promise.reject(n):(await Sr(r),O(i,{retries:t-1,finalErr:n,finallyFn:a}))}finally{t<=0&&a();}};async function at(i){await O(async()=>{let e=await i.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function ge(i,e,t,r,n){return E(async()=>{try{let a=await ue({ethSigner:i,starkSigner:e,imxApiClients:n},t.accessToken);return await at(r),a}catch(a){if(wt__default.default.isAxiosError(a)&&a.response?.status===409)return await at(r),{tx_hash:""};throw a}},"USER_REGISTRATION_ERROR")}var K=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:t,passportEventEmitter:r,magicTEESigner:n,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=n,this.imxApiClients=a,this.guardianClient=s,this.#s(),r.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#s(){this.starkSigner=new Promise(async e=>{try{e(await Xe(this.magicTEESigner));}catch(t){this.signerInitialisationError=t,e(void 0);}});}async#t(){let e=await this.authManager.getUser();if(!e||!this.starkSigner)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return e}async#i(){let e=await this.starkSigner;if(typeof e>"u")throw typeof this.signerInitialisationError<"u"?this.signerInitialisationError:new Error("Signers failed to initialise");return e}async#r(){let[e,t]=await Promise.all([this.#t(),this.#i()]);if(!_(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:t}}async transfer(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return nt({request:e,user:t,starkSigner:r,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxTransfer")}async registerOffchain(){return h(async()=>{let[e,t]=await Promise.all([this.#t(),this.#i()]);return await ge(this.magicTEESigner,t,e,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return h(async()=>!!(await this.#t()).imx,"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return Ye({request:e,user:t,starkSigner:r,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return Qe({request:e,user:t,starkSigner:r,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCancelOrder")}async createTrade(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return et({request:e,user:t,starkSigner:r,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return h(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:t,starkSigner:r}=await this.#r();return it({request:e,user:t,starkSigner:r,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return h(async()=>{let{user:t,starkSigner:r}=await this.#r();return Je({request:e,user:t,starkSigner:r,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,t){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return h(async()=>{let e=await this.#t();if(!_(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)},"imxGetAddress")}};var X=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:t,magicTEESigner:r,passportEventEmitter:n,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=r,this.passportEventEmitter=n,this.imxApiClients=a,this.guardianClient=s;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new g("Failed to initialise","WALLET_CONNECTION_ERROR");return new K({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var dt=(i,e,t)=>{let r=e.map(n=>!i[n]&&n).filter(n=>n).join(", ");if(r!==""){let n=t?`${t} - ${r} cannot be null`:`${r} cannot be null`;throw new g(n,"INVALID_CONFIGURATION")}},J=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:r,jsonRpcReferrer:n,forceScwDeployBeforeMessageSignature:a,popupOverlayOptions:s,...o}){if(dt(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.baseConfig=e,this.crossSdkBridgeEnabled=r||!1,this.forceScwDeployBeforeMessageSignature=a||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},t)dt(t,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=t.authenticationDomain,this.passportDomain=t.passportDomain,this.imxPublicApiDomain=t.imxPublicApiDomain,this.magicPublishableApiKey=t.magicPublishableApiKey,this.magicProviderId=t.magicProviderId,this.zkEvmRpcUrl=t.zkEvmRpcUrl,this.relayerUrl=t.relayerUrl,this.multiRollupConfig={indexer:Ae.createConfig({basePath:t.indexerMrBasePath}),orderBook:Ae.createConfig({basePath:t.orderBookMrBasePath}),passport:Ae.createConfig({basePath:t.passportMrBasePath})};else switch(e.environment){case config.Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=Ae.multiRollupConfig.getProduction();break}case config.Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=Ae.multiRollupConfig.getSandbox();break}}}};var F="imx_passport_confirmation",lt="im_passport_embedded_login_prompt";var z=({url:i,title:e,width:t,height:r})=>{let n=Math.max(0,Math.round(window.screenX+(window.outerWidth-t)/2)),a=Math.max(0,Math.round(window.screenY+(window.outerHeight-r)/2)),s=window.open(i,e,`
393
393
  scrollbars=yes,
394
394
  width=${t},
395
395
  height=${r},
@@ -363,7 +363,7 @@ function le(i){return "code"in i&&"message"in i}var g=class extends Error{type;c
363
363
  "
364
364
  />
365
365
  </div>
366
- `;function q({id:i,href:e,rel:t,crossOrigin:r}){let n=`${x}-${i}`;if(!document.getElementById(n)){let a=document.createElement("link");a.id=n,a.href=e,t&&(a.rel=t),r&&(a.crossOrigin=r),document.head.appendChild(a);}}var Ve=()=>Be(Qt()),We=()=>Be(er());var P=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){q({id:"link-googleapis",href:"https://fonts.googleapis.com"}),q({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),q({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 e=document.createElement("div");e.innerHTML=this.isBlockedOverlay?Ve():We(),document.body.insertAdjacentElement("beforeend",e),this.overlay=e;}}updateTryAgainButton(e){let t=document.getElementById($);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(W);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var Z=class{storage;constructor(e,t){this.storage=tr.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 mr=500,ur={headers:{"Content-Type":"application/x-www-form-urlencoded"}},gr="/v2/logout",hr="/im-logged-out",fr="/authorize",Er=i=>i?hr:gr,yr=i=>{let{authenticationDomain:e,oidcConfiguration:t}=i,r;i.crossSdkBridgeEnabled?r=new Z("ImmutableSDKPassport",tr.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let n=new WebStorageStateStore({store:r}),a=new URL(Er(i.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return a.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&a.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:a.toString(),revocation_endpoint:`${e}/oauth/revoke`},mergeClaimsStrategy:{array:"merge"},automaticSilentRenew:!1,scope:t.scope,userStore:n,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function me(i){return btoa(String.fromCharCode(...new Uint8Array(i))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Rr(i){let t=new TextEncoder().encode(i);return await window.crypto.subtle.digest("SHA-256",t)}var U=class i{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new UserManager(yr(e)),this.deviceCredentialsManager=new L,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=$e(e.id_token)?.passport);let r={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.imx_eth_address&&(r.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(r.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),r};static mapDeviceTokenResponseToOidcUser=e=>{let t=$e(e.id_token);return new User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t,r){let n={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:e||""};if(t){if(t.directLoginMethod==="email"){let a=t.email;a&&(n.direct=t.directLoginMethod,n.email=a);}else n.direct=t.directLoginMethod;t.marketingConsentStatus&&(n.marketingConsent=t.marketingConsentStatus);}return r&&(n.im_passport_trace_id=r),n}async loginWithRedirect(e,t){return await this.userManager.clearStaleState(),E(async()=>{let r=this.buildExtraQueryParams(e,t);await this.userManager.signinRedirect({extraQueryParams:r});},"AUTHENTICATION_ERROR")}async login(e,t){return E(async()=>{let r,n;if(t)r=t;else if(!this.config.popupOverlayOptions.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:o,...c}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(e);r=c,n=o;}let a=window.crypto.randomUUID(),s=async()=>{let o=this.buildExtraQueryParams(e,r,n),c=this.userManager.signinPopup({extraQueryParams:o,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a}),d=window.open("",a);if(d){let l=new Promise((p,m)=>{let f=setInterval(()=>{d.closed&&(clearInterval(f),m(new Error("Popup closed by user")));},mr);c.finally(()=>{clearInterval(f),d.close();});});return Promise.race([c,l])}return c};return new Promise((o,c)=>{s().then(d=>{o(i.mapOidcUserToDomainModel(d));}).catch(d=>{if(!(d instanceof Error)||d.message!=="Attempted to navigate on a disposed window"){c(d);return}let l=!1,p=new P(this.config.popupOverlayOptions,!0);p.append(async()=>{try{if(l)window.open("",a);else {l=!0;let m=await s();p.remove(),o(i.mapOidcUserToDomainModel(m));}}catch(m){p.remove(),c(m);}},()=>{p.remove(),c(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){S.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let r=`oidc.${new URLSearchParams(window.location.search).get("state")}`,n=localStorage.getItem(r);return JSON.parse(n||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return E(async()=>{if(i.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return i.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=me(window.crypto.getRandomValues(new Uint8Array(32))),n=me(await Rr(r)),a=me(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:o,audience:c,clientId:d}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:a,verifier:r});let l=new URL(fr,this.config.authenticationDomain);if(l.searchParams.set("response_type","code"),l.searchParams.set("code_challenge",n),l.searchParams.set("code_challenge_method","S256"),l.searchParams.set("client_id",d),l.searchParams.set("redirect_uri",s),l.searchParams.set("state",a),o&&l.searchParams.set("scope",o),c&&l.searchParams.set("audience",c),e){if(e.directLoginMethod==="email"){let p=e.email;p&&(l.searchParams.set("direct",e.directLoginMethod),l.searchParams.set("email",p));}else l.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&l.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&l.searchParams.set("im_passport_trace_id",t),l.toString()}async loginWithPKCEFlowCallback(e,t){return E(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),a=i.mapDeviceTokenResponseToOidcUser(n),s=i.mapOidcUserToDomainModel(a);return await this.userManager.storeUser(a),s},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await wt.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},ur)).data}async storeTokens(e){return E(async()=>{let t=i.mapDeviceTokenResponseToOidcUser(e),r=i.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return E(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(S.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{S.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(S.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let r=await this.userManager.signinSilent();if(r){e(i.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let n="AUTHENTICATION_ERROR",a="Failed to refresh token",s=!0;if(r instanceof ErrorTimeout?(n="SILENT_LOGIN_ERROR",a=`${a}: ${r.message}`,s=!1):r instanceof ErrorResponse?(n="NOT_LOGGED_IN_ERROR",a=`${a}: ${r.message||r.error_description}`):r instanceof Error?a=`${a}: ${r.message}`:typeof r=="string"&&(a=`${a}: ${r}`),s)try{await this.userManager.removeUser();}catch(o){o instanceof Error&&(a=`${a}: Failed to remove user: ${o.message}`);}t(new g(a,n));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!Le(t)){let r=i.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async getUserZkEvm(){let e=await this.getUser(k);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}async getUserImx(){let e=await this.getUser(_);if(!e)throw new Error("Failed to obtain a User with the required IMX attributes");return e}};var h=async(i,e,t=!0,r=!0)=>{let n=trackFlow("passport",e,t);try{return await i(n)}catch(a){throw a instanceof Error?trackError("passport",e,a,{flowId:n.details.flowId}):n.addEvent("errored"),a}finally{r&&n.addEvent("End");}};var Ke="ETH",G=class i extends AbstractSigner{authManager;magicTeeApiClient;userWallet=null;createWalletPromise=null;constructor(e,t){super(),this.authManager=e,this.magicTeeApiClient=t;}async getUserWallet(){let{userWallet:e}=this;e||(e=await this.createWallet());let t=await this.getUserOrThrow();if(t.profile.sub!==e.userIdentifier&&(e=await this.createWallet(t)),_(t)&&t.imx.userAdminAddress.toLowerCase()!==e.walletAddress.toLowerCase())throw new g(`Wallet address mismatch.Rollup: IMX, TEE address: ${e.walletAddress}, profile address: ${t.imx.userAdminAddress}`,"WALLET_CONNECTION_ERROR");if(k(t)&&t.zkEvm.userAdminAddress.toLowerCase()!==e.walletAddress.toLowerCase())throw new g(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${e.walletAddress}, profile address: ${t.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return e}async createWallet(e){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(t,r)=>{try{this.userWallet=null;let n=e||await this.getUserOrThrow(),a=i.getHeaders(n);await h(async s=>{try{let o=performance.now(),c=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({xMagicChain:Ke},{headers:a});return trackDuration("passport",s.details.flowName,Math.round(performance.now()-o)),this.userWallet={userIdentifier:n.profile.sub,walletAddress:c.data.public_address},t(this.userWallet)}catch(o){let c="MagicTEE: Failed to initialise EOA";return isAxiosError(o)?o.response?c+=` with status ${o.response.status}: ${JSON.stringify(o.response.data)}`:c+=`: ${o.message}`:c+=`: ${o.message}`,r(new Error(c))}},"magicCreateWallet");}catch(n){r(n);}finally{this.createWalletPromise=null;}}),this.createWalletPromise)}async getUserOrThrow(){let e=await this.authManager.getUser();if(!e)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return e}static getHeaders(e){if(!e)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return {Authorization:`Bearer ${e.idToken}`}}async getAddress(){return (await this.getUserWallet()).walletAddress}async signMessage(e){await this.getUserWallet();let t=e instanceof Uint8Array?`0x${Buffer.from(e).toString("hex")}`:e,r=await this.getUserOrThrow(),n=await i.getHeaders(r);return h(async a=>{try{let s=performance.now(),o=await this.magicTeeApiClient.signOperationsApi.signMessageV1WalletSignMessagePost({signMessageRequest:{message_base64:Buffer.from(t,"utf-8").toString("base64")},xMagicChain:Ke},{headers:n});return trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),o.data.signature}catch(s){let o="MagicTEE: Failed to sign message using EOA";throw isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,new Error(o)}},"magicSignMessage")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var Xe=async i=>E(async()=>{let e=await generateLegacyStarkPrivateKey(i);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function Je({user:i,starkSigner:e,request:t,exchangesApi:r}){return E(async()=>{let{ethAddress:n}=i.imx,a=t.amount,s=await r.getExchangeSignableTransfer({id:t.transactionID,getSignableTransferRequest:{sender:n,token:convertToSignableToken(t),amount:a,receiver:t.receiver}}),o=await e.getAddress(),{payload_hash:c}=s.data,d=await e.signMessage(c),l={sender_stark_key:s.data.sender_stark_key||o,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:d},p={Authorization:`Bearer ${i.accessToken}`},m=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:p});return {sent_signature:m?.data.sent_signature,status:m?.data.status?.toString(),time:m?.data.time,transfer_id:m?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var je="ERC721";async function Ye({starkSigner:i,user:e,request:t,ordersApi:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=e.imx,s=t.sell.type===je?"1":t.sell.amount,o=t.buy.type===je?"1":t.buy.amount,c={Authorization:`Bearer ${e.accessToken}`},d={user:a,amount_buy:o,token_buy:convertToSignableToken(t.buy),amount_sell:s,token_sell:convertToSignableToken(t.sell),fees:t.fees,split_fees:!0,expiration_timestamp:t.expiration_timestamp},l=await r.getSignableOrder({getSignableOrderRequestV3:d},{headers:c});await n.evaluateImxTransaction({payloadHash:l.data.payload_hash});let{payload_hash:p}=l.data,m=await i.signMessage(p),f=l.data,v={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:m,amount_buy:f.amount_buy,amount_sell:f.amount_sell,asset_id_buy:f.asset_id_buy,asset_id_sell:f.asset_id_sell,expiration_timestamp:f.expiration_timestamp,nonce:f.nonce,stark_key:f.stark_key,vault_id_buy:f.vault_id_buy,vault_id_sell:f.vault_id_sell}};return {...(await r.createOrderV3(v,{headers:c})).data}},"CREATE_ORDER_ERROR")}async function Qe({user:i,starkSigner:e,request:t,ordersApi:r,guardianClient:n}){return E(async()=>{let a={order_id:t.order_id},s={Authorization:`Bearer ${i.accessToken}`},o=await r.getSignableCancelOrderV3({getSignableCancelOrderRequest:a},{headers:s});await n.evaluateImxTransaction({payloadHash:o.data.payload_hash});let{payload_hash:c}=o.data,d=await e.signMessage(c),l=await r.cancelOrderV3({id:t.order_id.toString(),cancelOrderRequest:{order_id:t.order_id,stark_signature:d}},{headers:s});return {order_id:l.data.order_id,status:l.data.status}},"CANCEL_ORDER_ERROR")}async function ue({ethSigner:i,starkSigner:e,imxApiClients:t},r){return E(async()=>{let[n,a]=await Promise.all([i.getAddress(),e.getAddress()]),s=await t.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:o,payload_hash:c}=s.data,[d,l]=await Promise.all([signRaw(o,i),e.signMessage(c)]);return (await t.usersApi.registerPassportUserV2({authorization:`Bearer ${r}`,registerPassportUserRequest:{eth_signature:d,ether_key:n,stark_signature:l,stark_key:a}})).data},"USER_REGISTRATION_ERROR")}async function et({request:i,tradesApi:e,user:t,starkSigner:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=t.imx,s={expiration_timestamp:i.expiration_timestamp,fees:i.fees,order_id:i.order_id,user:a},o={Authorization:`Bearer ${t.accessToken}`},c=await e.getSignableTrade({getSignableTradeRequest:s},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,l=await r.signMessage(d),{data:p}=c,m={createTradeRequest:{include_fees:!0,fees:i?.fees,stark_signature:l,order_id:i?.order_id,fee_info:p.fee_info,amount_buy:p.amount_buy,amount_sell:p.amount_sell,asset_id_buy:p.asset_id_buy,asset_id_sell:p.asset_id_sell,expiration_timestamp:p.expiration_timestamp,nonce:p.nonce,stark_key:p.stark_key,vault_id_buy:p.vault_id_buy,vault_id_sell:p.vault_id_sell}},{data:f}=await e.createTradeV3(m,{headers:o});return f},"CREATE_TRADE_ERROR")}var rt="ERC721";async function nt({request:i,transfersApi:e,starkSigner:t,user:r,guardianClient:n}){return E(async()=>{let a=i.type===rt?"1":i.amount,s={sender:r.imx.ethAddress,token:convertToSignableToken(i),amount:a,receiver:i.receiver},o={Authorization:`Bearer ${r.accessToken}`},c=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.payload_hash});let d=c.data,{payload_hash:l}=d,p=await t.signMessage(l),m=await t.getAddress(),v={createTransferRequest:{sender_stark_key:d.sender_stark_key||m,sender_vault_id:d.sender_vault_id,receiver_stark_key:d.receiver_stark_key,receiver_vault_id:d.receiver_vault_id,asset_id:d.asset_id,amount:d.amount,nonce:d.nonce,expiration_timestamp:d.expiration_timestamp,stark_signature:p}},{data:y}=await e.createTransferV1(v,{headers:o});return {sent_signature:y.sent_signature,status:y.status?.toString(),time:y.time,transfer_id:y.transfer_id}},"TRANSFER_ERROR")}async function it({user:i,starkSigner:e,request:t,transfersApi:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=i.imx,s=t.map(m=>({amount:"1",token:convertToSignableToken({type:rt,tokenId:m.tokenId,tokenAddress:m.tokenAddress}),receiver:m.receiver})),o={Authorization:`Bearer ${i.accessToken}`},c=await r.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.signable_responses[0]?.payload_hash});let d=await Promise.all(c.data.signable_responses.map(async m=>{let f=await e.signMessage(m.payload_hash);return {sender_vault_id:m.sender_vault_id,receiver_stark_key:m.receiver_stark_key,receiver_vault_id:m.receiver_vault_id,asset_id:m.asset_id,amount:m.amount,nonce:m.nonce,expiration_timestamp:m.expiration_timestamp,stark_signature:f}})),l={sender_stark_key:c.data.sender_stark_key,requests:d};return {transfer_ids:(await r.createTransfer({createTransferRequestV2:l},{headers:o}))?.data.transfer_ids}},"TRANSFER_ERROR")}var Sr=i=>new Promise(e=>{setTimeout(()=>e(),i);}),O=async(i,e)=>{let{retries:t=3,interval:r=1e3,finalErr:n=Error("Retry failed"),finallyFn:a=()=>{}}=e||{};try{return await i()}catch{return t<=0?Promise.reject(n):(await Sr(r),O(i,{retries:t-1,finalErr:n,finallyFn:a}))}finally{t<=0&&a();}};async function at(i){await O(async()=>{let e=await i.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function ge(i,e,t,r,n){return E(async()=>{try{let a=await ue({ethSigner:i,starkSigner:e,imxApiClients:n},t.accessToken);return await at(r),a}catch(a){if(wt.isAxiosError(a)&&a.response?.status===409)return await at(r),{tx_hash:""};throw a}},"USER_REGISTRATION_ERROR")}var K=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:t,passportEventEmitter:r,magicTEESigner:n,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=n,this.imxApiClients=a,this.guardianClient=s,this.#s(),r.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#s(){this.starkSigner=new Promise(async e=>{try{e(await Xe(this.magicTEESigner));}catch(t){this.signerInitialisationError=t,e(void 0);}});}async#t(){let e=await this.authManager.getUser();if(!e||!this.starkSigner)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return e}async#i(){let e=await this.starkSigner;if(typeof e>"u")throw typeof this.signerInitialisationError<"u"?this.signerInitialisationError:new Error("Signers failed to initialise");return e}async#r(){let[e,t]=await Promise.all([this.#t(),this.#i()]);if(!_(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:t}}async transfer(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return nt({request:e,user:t,starkSigner:r,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxTransfer")}async registerOffchain(){return h(async()=>{let[e,t]=await Promise.all([this.#t(),this.#i()]);return await ge(this.magicTEESigner,t,e,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return h(async()=>!!(await this.#t()).imx,"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return Ye({request:e,user:t,starkSigner:r,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return Qe({request:e,user:t,starkSigner:r,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCancelOrder")}async createTrade(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return et({request:e,user:t,starkSigner:r,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return h(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:t,starkSigner:r}=await this.#r();return it({request:e,user:t,starkSigner:r,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return h(async()=>{let{user:t,starkSigner:r}=await this.#r();return Je({request:e,user:t,starkSigner:r,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,t){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return h(async()=>{let e=await this.#t();if(!_(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)},"imxGetAddress")}};var X=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:t,magicTEESigner:r,passportEventEmitter:n,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=r,this.passportEventEmitter=n,this.imxApiClients=a,this.guardianClient=s;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new g("Failed to initialise","WALLET_CONNECTION_ERROR");return new K({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var dt=(i,e,t)=>{let r=e.map(n=>!i[n]&&n).filter(n=>n).join(", ");if(r!==""){let n=t?`${t} - ${r} cannot be null`:`${r} cannot be null`;throw new g(n,"INVALID_CONFIGURATION")}},J=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:r,jsonRpcReferrer:n,forceScwDeployBeforeMessageSignature:a,popupOverlayOptions:s,...o}){if(dt(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.baseConfig=e,this.crossSdkBridgeEnabled=r||!1,this.forceScwDeployBeforeMessageSignature=a||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},t)dt(t,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=t.authenticationDomain,this.passportDomain=t.passportDomain,this.imxPublicApiDomain=t.imxPublicApiDomain,this.magicPublishableApiKey=t.magicPublishableApiKey,this.magicProviderId=t.magicProviderId,this.zkEvmRpcUrl=t.zkEvmRpcUrl,this.relayerUrl=t.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:t.indexerMrBasePath}),orderBook:createConfig({basePath:t.orderBookMrBasePath}),passport:createConfig({basePath:t.passportMrBasePath})};else switch(e.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getProduction();break}case Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var F="imx_passport_confirmation",lt="im_passport_embedded_login_prompt";var z=({url:i,title:e,width:t,height:r})=>{let n=Math.max(0,Math.round(window.screenX+(window.outerWidth-t)/2)),a=Math.max(0,Math.round(window.screenY+(window.outerHeight-r)/2)),s=window.open(i,e,`
366
+ `;function q({id:i,href:e,rel:t,crossOrigin:r}){let n=`${x}-${i}`;if(!document.getElementById(n)){let a=document.createElement("link");a.id=n,a.href=e,t&&(a.rel=t),r&&(a.crossOrigin=r),document.head.appendChild(a);}}var Ve=()=>Be(Qt()),We=()=>Be(er());var P=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){q({id:"link-googleapis",href:"https://fonts.googleapis.com"}),q({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),q({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 e=document.createElement("div");e.innerHTML=this.isBlockedOverlay?Ve():We(),document.body.insertAdjacentElement("beforeend",e),this.overlay=e;}}updateTryAgainButton(e){let t=document.getElementById($);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(W);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var Z=class{storage;constructor(e,t){this.storage=tr.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 mr=500,ur={headers:{"Content-Type":"application/x-www-form-urlencoded"}},gr="/v2/logout",hr="/im-logged-out",fr="/authorize",Er=i=>i?hr:gr,yr=i=>{let{authenticationDomain:e,oidcConfiguration:t}=i,r;i.crossSdkBridgeEnabled?r=new Z("ImmutableSDKPassport",tr.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let n=new WebStorageStateStore({store:r}),a=new URL(Er(i.crossSdkBridgeEnabled),e.replace(/^(?:https?:\/\/)?(.*)/,"https://$1"));return a.searchParams.set("client_id",t.clientId),t.logoutRedirectUri&&a.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:a.toString(),revocation_endpoint:`${e}/oauth/revoke`},mergeClaimsStrategy:{array:"merge"},automaticSilentRenew:!1,scope:t.scope,userStore:n,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function me(i){return btoa(String.fromCharCode(...new Uint8Array(i))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function Rr(i){let t=new TextEncoder().encode(i);return await window.crypto.subtle.digest("SHA-256",t)}var U=class i{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new UserManager(yr(e)),this.deviceCredentialsManager=new L,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=$e(e.id_token)?.passport);let r={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.imx_eth_address&&(r.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(r.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),r};static mapDeviceTokenResponseToOidcUser=e=>{let t=$e(e.id_token);return new User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t,r){let n={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:e||""};if(t){if(t.directLoginMethod==="email"){let a=t.email;a&&(n.direct=t.directLoginMethod,n.email=a);}else n.direct=t.directLoginMethod;t.marketingConsentStatus&&(n.marketingConsent=t.marketingConsentStatus);}return r&&(n.im_passport_trace_id=r),n}async loginWithRedirect(e,t){return await this.userManager.clearStaleState(),E(async()=>{let r=this.buildExtraQueryParams(e,t);await this.userManager.signinRedirect({extraQueryParams:r});},"AUTHENTICATION_ERROR")}async login(e,t){return E(async()=>{let r,n;if(t)r=t;else if(!this.config.popupOverlayOptions.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:o,...c}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(e);r=c,n=o;}let a=window.crypto.randomUUID(),s=async()=>{let o=this.buildExtraQueryParams(e,r,n),c=this.userManager.signinPopup({extraQueryParams:o,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a}),d=window.open("",a);if(d){let l=new Promise((p,m)=>{let f=setInterval(()=>{d.closed&&(clearInterval(f),m(new Error("Popup closed by user")));},mr);c.finally(()=>{clearInterval(f),d.close();});});return Promise.race([c,l])}return c};return new Promise((o,c)=>{s().then(d=>{o(i.mapOidcUserToDomainModel(d));}).catch(d=>{if(!(d instanceof Error)||d.message!=="Attempted to navigate on a disposed window"){c(d);return}let l=!1,p=new P(this.config.popupOverlayOptions,!0);p.append(async()=>{try{if(l)window.open("",a);else {l=!0;let m=await s();p.remove(),o(i.mapOidcUserToDomainModel(m));}}catch(m){p.remove(),c(m);}},()=>{p.remove(),c(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){S.warn("Failed to retrieve a cached user session",t);}return e||this.login()}static shouldUseSigninPopupCallback(){try{let r=`oidc.${new URLSearchParams(window.location.search).get("state")}`,n=localStorage.getItem(r);return JSON.parse(n||"{}")?.request_type==="si:p"}catch{return !1}}async loginCallback(){return E(async()=>{if(i.shouldUseSigninPopupCallback()){await this.userManager.signinPopupCallback(void 0,!0);return}let e=await this.userManager.signinCallback();if(e)return i.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=me(window.crypto.getRandomValues(new Uint8Array(32))),n=me(await Rr(r)),a=me(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:o,audience:c,clientId:d}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:a,verifier:r});let l=new URL(fr,this.config.authenticationDomain);if(l.searchParams.set("response_type","code"),l.searchParams.set("code_challenge",n),l.searchParams.set("code_challenge_method","S256"),l.searchParams.set("client_id",d),l.searchParams.set("redirect_uri",s),l.searchParams.set("state",a),o&&l.searchParams.set("scope",o),c&&l.searchParams.set("audience",c),e){if(e.directLoginMethod==="email"){let p=e.email;p&&(l.searchParams.set("direct",e.directLoginMethod),l.searchParams.set("email",p));}else l.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&l.searchParams.set("marketingConsent",e.marketingConsentStatus);}return t&&l.searchParams.set("im_passport_trace_id",t),l.toString()}async loginWithPKCEFlowCallback(e,t){return E(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),a=i.mapDeviceTokenResponseToOidcUser(n),s=i.mapOidcUserToDomainModel(a);return await this.userManager.storeUser(a),s},"AUTHENTICATION_ERROR")}async getPKCEToken(e,t){return (await wt.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:t,code:e,redirect_uri:this.config.oidcConfiguration.redirectUri},ur)).data}async storeTokens(e){return E(async()=>{let t=i.mapDeviceTokenResponseToOidcUser(e),r=i.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return E(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(S.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{S.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(S.warn("Failed to refresh user token",e),null))}async refreshTokenAndUpdatePromise(){return this.refreshingPromise?this.refreshingPromise:(this.refreshingPromise=new Promise(async(e,t)=>{try{let r=await this.userManager.signinSilent();if(r){e(i.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let n="AUTHENTICATION_ERROR",a="Failed to refresh token",s=!0;if(r instanceof ErrorTimeout?(n="SILENT_LOGIN_ERROR",a=`${a}: ${r.message}`,s=!1):r instanceof ErrorResponse?(n="NOT_LOGGED_IN_ERROR",a=`${a}: ${r.message||r.error_description}`):r instanceof Error?a=`${a}: ${r.message}`:typeof r=="string"&&(a=`${a}: ${r}`),s)try{await this.userManager.removeUser();}catch(o){o instanceof Error&&(a=`${a}: Failed to remove user: ${o.message}`);}t(new g(a,n));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!Le(t)){let r=i.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async getUserZkEvm(){let e=await this.getUser(k);if(!e)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return e}async getUserImx(){let e=await this.getUser(_);if(!e)throw new Error("Failed to obtain a User with the required IMX attributes");return e}};var h=async(i,e,t=!0,r=!0)=>{let n=trackFlow("passport",e,t);try{return await i(n)}catch(a){throw a instanceof Error?trackError("passport",e,a,{flowId:n.details.flowId}):n.addEvent("errored"),a}finally{r&&n.addEvent("End");}};var Ke="ETH",G=class i extends AbstractSigner{authManager;magicTeeApiClient;userWallet=null;createWalletPromise=null;constructor(e,t){super(),this.authManager=e,this.magicTeeApiClient=t;}async getUserWallet(){let{userWallet:e}=this;e||(e=await this.createWallet());let t=await this.getUserOrThrow();if(t.profile.sub!==e.userIdentifier&&(e=await this.createWallet(t)),_(t)&&t.imx.userAdminAddress.toLowerCase()!==e.walletAddress.toLowerCase())throw new g(`Wallet address mismatch.Rollup: IMX, TEE address: ${e.walletAddress}, profile address: ${t.imx.userAdminAddress}`,"WALLET_CONNECTION_ERROR");if(k(t)&&t.zkEvm.userAdminAddress.toLowerCase()!==e.walletAddress.toLowerCase())throw new g(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${e.walletAddress}, profile address: ${t.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return e}async createWallet(e){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(t,r)=>{try{this.userWallet=null;let n=e||await this.getUserOrThrow(),a=i.getHeaders(n);await h(async s=>{try{let o=performance.now(),c=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({xMagicChain:Ke},{headers:a});return trackDuration("passport",s.details.flowName,Math.round(performance.now()-o)),this.userWallet={userIdentifier:n.profile.sub,walletAddress:c.data.public_address},t(this.userWallet)}catch(o){let c="MagicTEE: Failed to initialise EOA";return isAxiosError(o)?o.response?c+=` with status ${o.response.status}: ${JSON.stringify(o.response.data)}`:c+=`: ${o.message}`:c+=`: ${o.message}`,r(new Error(c))}},"magicCreateWallet");}catch(n){r(n);}finally{this.createWalletPromise=null;}}),this.createWalletPromise)}async getUserOrThrow(){let e=await this.authManager.getUser();if(!e)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return e}static getHeaders(e){if(!e)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return {Authorization:`Bearer ${e.idToken}`}}async getAddress(){return (await this.getUserWallet()).walletAddress}async signMessage(e){await this.getUserWallet();let t=e instanceof Uint8Array?`0x${Buffer.from(e).toString("hex")}`:e,r=await this.getUserOrThrow(),n=await i.getHeaders(r);return h(async a=>{try{let s=performance.now(),o=await this.magicTeeApiClient.signOperationsApi.signMessageV1WalletSignMessagePost({signMessageRequest:{message_base64:Buffer.from(t,"utf-8").toString("base64")},xMagicChain:Ke},{headers:n});return trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),o.data.signature}catch(s){let o="MagicTEE: Failed to sign message using EOA";throw isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,new Error(o)}},"magicSignMessage")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var Xe=async i=>E(async()=>{let e=await generateLegacyStarkPrivateKey(i);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function Je({user:i,starkSigner:e,request:t,exchangesApi:r}){return E(async()=>{let{ethAddress:n}=i.imx,a=t.amount,s=await r.getExchangeSignableTransfer({id:t.transactionID,getSignableTransferRequest:{sender:n,token:convertToSignableToken(t),amount:a,receiver:t.receiver}}),o=await e.getAddress(),{payload_hash:c}=s.data,d=await e.signMessage(c),l={sender_stark_key:s.data.sender_stark_key||o,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:d},p={Authorization:`Bearer ${i.accessToken}`},m=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:p});return {sent_signature:m?.data.sent_signature,status:m?.data.status?.toString(),time:m?.data.time,transfer_id:m?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var je="ERC721";async function Ye({starkSigner:i,user:e,request:t,ordersApi:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=e.imx,s=t.sell.type===je?"1":t.sell.amount,o=t.buy.type===je?"1":t.buy.amount,c={Authorization:`Bearer ${e.accessToken}`},d={user:a,amount_buy:o,token_buy:convertToSignableToken(t.buy),amount_sell:s,token_sell:convertToSignableToken(t.sell),fees:t.fees,split_fees:!0,expiration_timestamp:t.expiration_timestamp},l=await r.getSignableOrder({getSignableOrderRequestV3:d},{headers:c});await n.evaluateImxTransaction({payloadHash:l.data.payload_hash});let{payload_hash:p}=l.data,m=await i.signMessage(p),f=l.data,v={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:m,amount_buy:f.amount_buy,amount_sell:f.amount_sell,asset_id_buy:f.asset_id_buy,asset_id_sell:f.asset_id_sell,expiration_timestamp:f.expiration_timestamp,nonce:f.nonce,stark_key:f.stark_key,vault_id_buy:f.vault_id_buy,vault_id_sell:f.vault_id_sell}};return {...(await r.createOrderV3(v,{headers:c})).data}},"CREATE_ORDER_ERROR")}async function Qe({user:i,starkSigner:e,request:t,ordersApi:r,guardianClient:n}){return E(async()=>{let a={order_id:t.order_id},s={Authorization:`Bearer ${i.accessToken}`},o=await r.getSignableCancelOrderV3({getSignableCancelOrderRequest:a},{headers:s});await n.evaluateImxTransaction({payloadHash:o.data.payload_hash});let{payload_hash:c}=o.data,d=await e.signMessage(c),l=await r.cancelOrderV3({id:t.order_id.toString(),cancelOrderRequest:{order_id:t.order_id,stark_signature:d}},{headers:s});return {order_id:l.data.order_id,status:l.data.status}},"CANCEL_ORDER_ERROR")}async function ue({ethSigner:i,starkSigner:e,imxApiClients:t},r){return E(async()=>{let[n,a]=await Promise.all([i.getAddress(),e.getAddress()]),s=await t.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:o,payload_hash:c}=s.data,[d,l]=await Promise.all([signRaw(o,i),e.signMessage(c)]);return (await t.usersApi.registerPassportUserV2({authorization:`Bearer ${r}`,registerPassportUserRequest:{eth_signature:d,ether_key:n,stark_signature:l,stark_key:a}})).data},"USER_REGISTRATION_ERROR")}async function et({request:i,tradesApi:e,user:t,starkSigner:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=t.imx,s={expiration_timestamp:i.expiration_timestamp,fees:i.fees,order_id:i.order_id,user:a},o={Authorization:`Bearer ${t.accessToken}`},c=await e.getSignableTrade({getSignableTradeRequest:s},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,l=await r.signMessage(d),{data:p}=c,m={createTradeRequest:{include_fees:!0,fees:i?.fees,stark_signature:l,order_id:i?.order_id,fee_info:p.fee_info,amount_buy:p.amount_buy,amount_sell:p.amount_sell,asset_id_buy:p.asset_id_buy,asset_id_sell:p.asset_id_sell,expiration_timestamp:p.expiration_timestamp,nonce:p.nonce,stark_key:p.stark_key,vault_id_buy:p.vault_id_buy,vault_id_sell:p.vault_id_sell}},{data:f}=await e.createTradeV3(m,{headers:o});return f},"CREATE_TRADE_ERROR")}var rt="ERC721";async function nt({request:i,transfersApi:e,starkSigner:t,user:r,guardianClient:n}){return E(async()=>{let a=i.type===rt?"1":i.amount,s={sender:r.imx.ethAddress,token:convertToSignableToken(i),amount:a,receiver:i.receiver},o={Authorization:`Bearer ${r.accessToken}`},c=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.payload_hash});let d=c.data,{payload_hash:l}=d,p=await t.signMessage(l),m=await t.getAddress(),v={createTransferRequest:{sender_stark_key:d.sender_stark_key||m,sender_vault_id:d.sender_vault_id,receiver_stark_key:d.receiver_stark_key,receiver_vault_id:d.receiver_vault_id,asset_id:d.asset_id,amount:d.amount,nonce:d.nonce,expiration_timestamp:d.expiration_timestamp,stark_signature:p}},{data:y}=await e.createTransferV1(v,{headers:o});return {sent_signature:y.sent_signature,status:y.status?.toString(),time:y.time,transfer_id:y.transfer_id}},"TRANSFER_ERROR")}async function it({user:i,starkSigner:e,request:t,transfersApi:r,guardianClient:n}){return E(async()=>{let{ethAddress:a}=i.imx,s=t.map(m=>({amount:"1",token:convertToSignableToken({type:rt,tokenId:m.tokenId,tokenAddress:m.tokenAddress}),receiver:m.receiver})),o={Authorization:`Bearer ${i.accessToken}`},c=await r.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}},{headers:o});await n.evaluateImxTransaction({payloadHash:c.data.signable_responses[0]?.payload_hash});let d=await Promise.all(c.data.signable_responses.map(async m=>{let f=await e.signMessage(m.payload_hash);return {sender_vault_id:m.sender_vault_id,receiver_stark_key:m.receiver_stark_key,receiver_vault_id:m.receiver_vault_id,asset_id:m.asset_id,amount:m.amount,nonce:m.nonce,expiration_timestamp:m.expiration_timestamp,stark_signature:f}})),l={sender_stark_key:c.data.sender_stark_key,requests:d};return {transfer_ids:(await r.createTransfer({createTransferRequestV2:l},{headers:o}))?.data.transfer_ids}},"TRANSFER_ERROR")}var Sr=i=>new Promise(e=>{setTimeout(()=>e(),i);}),O=async(i,e)=>{let{retries:t=3,interval:r=1e3,finalErr:n=Error("Retry failed"),finallyFn:a=()=>{}}=e||{};try{return await i()}catch{return t<=0?Promise.reject(n):(await Sr(r),O(i,{retries:t-1,finalErr:n,finallyFn:a}))}finally{t<=0&&a();}};async function at(i){await O(async()=>{let e=await i.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function ge(i,e,t,r,n){return E(async()=>{try{let a=await ue({ethSigner:i,starkSigner:e,imxApiClients:n},t.accessToken);return await at(r),a}catch(a){if(wt.isAxiosError(a)&&a.response?.status===409)return await at(r),{tx_hash:""};throw a}},"USER_REGISTRATION_ERROR")}var K=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:t,passportEventEmitter:r,magicTEESigner:n,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=n,this.imxApiClients=a,this.guardianClient=s,this.#s(),r.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#s(){this.starkSigner=new Promise(async e=>{try{e(await Xe(this.magicTEESigner));}catch(t){this.signerInitialisationError=t,e(void 0);}});}async#t(){let e=await this.authManager.getUser();if(!e||!this.starkSigner)throw new g("User has been logged out","NOT_LOGGED_IN_ERROR");return e}async#i(){let e=await this.starkSigner;if(typeof e>"u")throw typeof this.signerInitialisationError<"u"?this.signerInitialisationError:new Error("Signers failed to initialise");return e}async#r(){let[e,t]=await Promise.all([this.#t(),this.#i()]);if(!_(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:t}}async transfer(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return nt({request:e,user:t,starkSigner:r,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxTransfer")}async registerOffchain(){return h(async()=>{let[e,t]=await Promise.all([this.#t(),this.#i()]);return await ge(this.magicTEESigner,t,e,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return h(async()=>!!(await this.#t()).imx,"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return Ye({request:e,user:t,starkSigner:r,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return Qe({request:e,user:t,starkSigner:r,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})(),"imxCancelOrder")}async createTrade(e){return h(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:t,starkSigner:r}=await this.#r();return et({request:e,user:t,starkSigner:r,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return h(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:t,starkSigner:r}=await this.#r();return it({request:e,user:t,starkSigner:r,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return h(async()=>{let{user:t,starkSigner:r}=await this.#r();return Je({request:e,user:t,starkSigner:r,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,t){throw new g("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return h(async()=>{let e=await this.#t();if(!_(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)},"imxGetAddress")}};var X=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:t,magicTEESigner:r,passportEventEmitter:n,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=r,this.passportEventEmitter=n,this.imxApiClients=a,this.guardianClient=s;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new g("Failed to initialise","WALLET_CONNECTION_ERROR");return new K({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var dt=(i,e,t)=>{let r=e.map(n=>!i[n]&&n).filter(n=>n).join(", ");if(r!==""){let n=t?`${t} - ${r} cannot be null`:`${r} cannot be null`;throw new g(n,"INVALID_CONFIGURATION")}},J=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:r,jsonRpcReferrer:n,forceScwDeployBeforeMessageSignature:a,popupOverlayOptions:s,...o}){if(dt(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.baseConfig=e,this.crossSdkBridgeEnabled=r||!1,this.forceScwDeployBeforeMessageSignature=a||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},t)dt(t,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=t.authenticationDomain,this.passportDomain=t.passportDomain,this.imxPublicApiDomain=t.imxPublicApiDomain,this.magicPublishableApiKey=t.magicPublishableApiKey,this.magicProviderId=t.magicProviderId,this.zkEvmRpcUrl=t.zkEvmRpcUrl,this.relayerUrl=t.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:t.indexerMrBasePath}),orderBook:createConfig({basePath:t.orderBookMrBasePath}),passport:createConfig({basePath:t.passportMrBasePath})};else switch(e.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getProduction();break}case Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var F="imx_passport_confirmation",lt="im_passport_embedded_login_prompt";var z=({url:i,title:e,width:t,height:r})=>{let n=Math.max(0,Math.round(window.screenX+(window.outerWidth-t)/2)),a=Math.max(0,Math.round(window.screenY+(window.outerHeight-r)/2)),s=window.open(i,e,`
367
367
  scrollbars=yes,
368
368
  width=${t},
369
369
  height=${r},
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@imtbl/passport",
3
3
  "description": "Passport module for Immutable SDK",
4
- "version": "2.9.0-alpha.6",
4
+ "version": "2.10.0-alpha.0",
5
5
  "author": "Immutable",
6
6
  "bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
7
7
  "dependencies": {
8
8
  "@0xsequence/abi": "^2.0.25",
9
9
  "@0xsequence/core": "^2.0.25",
10
- "@imtbl/config": "2.9.0-alpha.6",
11
- "@imtbl/generated-clients": "2.9.0-alpha.6",
12
- "@imtbl/metrics": "2.9.0-alpha.6",
13
- "@imtbl/toolkit": "2.9.0-alpha.6",
14
- "@imtbl/x-client": "2.9.0-alpha.6",
15
- "@imtbl/x-provider": "2.9.0-alpha.6",
10
+ "@imtbl/config": "2.10.0-alpha.0",
11
+ "@imtbl/generated-clients": "2.10.0-alpha.0",
12
+ "@imtbl/metrics": "2.10.0-alpha.0",
13
+ "@imtbl/toolkit": "2.10.0-alpha.0",
14
+ "@imtbl/x-client": "2.10.0-alpha.0",
15
+ "@imtbl/x-provider": "2.10.0-alpha.0",
16
16
  "@magic-ext/oidc": "12.0.5",
17
17
  "@magic-sdk/provider": "^29.0.5",
18
18
  "@metamask/detect-provider": "^2.0.0",