@imtbl/passport 2.10.7-alpha.7 → 2.10.7-alpha.9

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(Pe);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={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ta="/v2/logout",ra="/im-logged-out",na="/authorize",ia=o=>o?ra:ta,aa=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(ia(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 sa(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(aa(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,...h}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(t);a=h,l=u;}let d=window.crypto.randomUUID(),s=async()=>{let u=this.buildExtraQueryParams(t,a,l);return this.userManager.signinPopup({extraQueryParams:u,popupWindowFeatures:{width:410,height:450},popupWindowTarget:d})};return new Promise((u,h)=>{s().then(E=>{u(o.mapOidcUserToDomainModel(E));}).catch(E=>{if(!(E instanceof Error)||E.message!=="Attempted to navigate on a disposed window"){h(E);return}let f=!1,y=new Q(this.config.popupOverlayOptions,!0);y.append(async()=>{try{if(f)window.open("",d);else {f=!0;let C=await s();y.remove(),u(o.mapOidcUserToDomainModel(C));}}catch(C){y.remove(),h(C);}},()=>{y.remove(),h(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()}async loginCallback(){return k(async()=>{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 sa(a)),d=it(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:u,audience:h,clientId:E}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:d,verifier:a});let f=new URL(na,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),h&&f.searchParams.set("audience",h),t){if(t.directLoginMethod==="email"){let y=t.email;y&&(f.searchParams.set("direct",t.directLoginMethod),f.searchParams.set("email",y));}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},ea)).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 I(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 I(`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 I(`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(),h=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:h.data.public_address},n(this.userWallet)}catch(u){let h="MagicTEE: Failed to initialise EOA";return isAxiosError(u)?u.response?h+=` with status ${u.response.status}: ${JSON.stringify(u.response.data)}`:h+=`: ${u.message}`:h+=`: ${u.message}`,a(new Error(h))}},"magicCreateWallet");}catch(l){a(l);}finally{this.createWalletPromise=null;}}),this.createWalletPromise)}async getUserOrThrow(){let t=await this.authManager.getUser();if(!t)throw new I("User has been logged out","NOT_LOGGED_IN_ERROR");return t}static getHeaders(t){if(!t)throw new I("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:h}=s.data,E=await t.signMessage(h),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},y={Authorization:`Bearer ${o.accessToken}`},C=await a.createExchangeTransfer({id:n.transactionID,createTransferRequest:f},{headers:y});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,h={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:h});await l.evaluateImxTransaction({payloadHash:f.data.payload_hash});let{payload_hash:y}=f.data,C=await o.signMessage(y),w=f.data,_={createOrderRequest:{include_fees:!0,fees:n.fees,stark_signature:C,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}};return {...(await a.createOrderV3(_,{headers:h})).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:h}=u.data,E=await t.signMessage(h),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:h}=s.data,[E,f]=await Promise.all([signRaw(u,o),t.signMessage(h)]);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}`},h=await t.getSignableTrade({getSignableTradeRequest:s},{headers:u});await l.evaluateImxTransaction({payloadHash:h.data.payload_hash});let{payload_hash:E}=h.data,f=await a.signMessage(E),{data:y}=h,C={createTradeRequest:{include_fees:!0,fees:o?.fees,stark_signature:f,order_id:o?.order_id,fee_info:y.fee_info,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}},{data:w}=await t.createTradeV3(C,{headers:u});return w},"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}`},h=await t.getSignableTransferV1({getSignableTransferRequest:s},{headers:u});await l.evaluateImxTransaction({payloadHash:h.data.payload_hash});let E=h.data,{payload_hash:f}=E,y=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:y}},{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}`},h=await a.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:d,signable_requests:s}},{headers:u});await l.evaluateImxTransaction({payloadHash:h.data.signable_responses[0]?.payload_hash});let E=await Promise.all(h.data.signable_responses.map(async C=>{let w=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:w}})),f={sender_stark_key:h.data.sender_stark_key,requests:E};return {transfer_ids:(await a.createTransfer({createTransferRequestV2:f},{headers:u}))?.data.transfer_ids}},"TRANSFER_ERROR")}var ha=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 ha(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 I("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 I("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 I("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 I("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(t){throw new I("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(t,n){throw new I("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return S(async()=>{let t=await this.#t();if(!X(t))throw new I("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 I("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 I(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,`
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(Pe);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={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ta="/v2/logout",ra="/im-logged-out",na="/authorize",ia=o=>o?ra:ta,aa=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(ia(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 sa(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(aa(t)),this.deviceCredentialsManager=new fe,this.embeddedLoginPrompt=n,this.logoutMode=t.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=t=>{let n,a;if(t.id_token){let d=Yt(t.id_token);n=d?.passport,d?.username&&(a=d?.username);}let l={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,username:a}};return n?.imx_eth_address&&(l.imx={ethAddress:n.imx_eth_address,starkAddress:n.imx_stark_address,userAdminAddress:n.imx_user_admin_address}),n?.zkevm_eth_address&&(l.zkEvm={ethAddress:n?.zkevm_eth_address,userAdminAddress:n?.zkevm_user_admin_address}),l};static mapDeviceTokenResponseToOidcUser=t=>{let n=Yt(t.id_token),a=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}}),{username:l}=n;return l&&(a.profile.username=l),a};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,...h}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(t);a=h,l=u;}let d=window.crypto.randomUUID(),s=async()=>{let u=this.buildExtraQueryParams(t,a,l);return this.userManager.signinPopup({extraQueryParams:u,popupWindowFeatures:{width:410,height:450},popupWindowTarget:d})};return new Promise((u,h)=>{s().then(E=>{u(o.mapOidcUserToDomainModel(E));}).catch(E=>{if(!(E instanceof Error)||E.message!=="Attempted to navigate on a disposed window"){h(E);return}let f=!1,y=new Q(this.config.popupOverlayOptions,!0);y.append(async()=>{try{if(f)window.open("",d);else {f=!0;let C=await s();y.remove(),u(o.mapOidcUserToDomainModel(C));}}catch(C){y.remove(),h(C);}},()=>{y.remove(),h(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()}async loginCallback(){return k(async()=>{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 sa(a)),d=it(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:s,scope:u,audience:h,clientId:E}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:d,verifier:a});let f=new URL(na,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),h&&f.searchParams.set("audience",h),t){if(t.directLoginMethod==="email"){let y=t.email;y&&(f.searchParams.set("direct",t.directLoginMethod),f.searchParams.set("email",y));}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},ea)).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 I(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 I(`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 I(`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(),h=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:h.data.public_address},n(this.userWallet)}catch(u){let h="MagicTEE: Failed to initialise EOA";return isAxiosError(u)?u.response?h+=` with status ${u.response.status}: ${JSON.stringify(u.response.data)}`:h+=`: ${u.message}`:h+=`: ${u.message}`,a(new Error(h))}},"magicCreateWallet");}catch(l){a(l);}finally{this.createWalletPromise=null;}}),this.createWalletPromise)}async getUserOrThrow(){let t=await this.authManager.getUser();if(!t)throw new I("User has been logged out","NOT_LOGGED_IN_ERROR");return t}static getHeaders(t){if(!t)throw new I("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:h}=s.data,E=await t.signMessage(h),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},y={Authorization:`Bearer ${o.accessToken}`},C=await a.createExchangeTransfer({id:n.transactionID,createTransferRequest:f},{headers:y});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,h={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:h});await l.evaluateImxTransaction({payloadHash:f.data.payload_hash});let{payload_hash:y}=f.data,C=await o.signMessage(y),w=f.data,_={createOrderRequest:{include_fees:!0,fees:n.fees,stark_signature:C,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}};return {...(await a.createOrderV3(_,{headers:h})).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:h}=u.data,E=await t.signMessage(h),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:h}=s.data,[E,f]=await Promise.all([signRaw(u,o),t.signMessage(h)]);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}`},h=await t.getSignableTrade({getSignableTradeRequest:s},{headers:u});await l.evaluateImxTransaction({payloadHash:h.data.payload_hash});let{payload_hash:E}=h.data,f=await a.signMessage(E),{data:y}=h,C={createTradeRequest:{include_fees:!0,fees:o?.fees,stark_signature:f,order_id:o?.order_id,fee_info:y.fee_info,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}},{data:w}=await t.createTradeV3(C,{headers:u});return w},"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}`},h=await t.getSignableTransferV1({getSignableTransferRequest:s},{headers:u});await l.evaluateImxTransaction({payloadHash:h.data.payload_hash});let E=h.data,{payload_hash:f}=E,y=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:y}},{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}`},h=await a.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:d,signable_requests:s}},{headers:u});await l.evaluateImxTransaction({payloadHash:h.data.signable_responses[0]?.payload_hash});let E=await Promise.all(h.data.signable_responses.map(async C=>{let w=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:w}})),f={sender_stark_key:h.data.sender_stark_key,requests:E};return {transfer_ids:(await a.createTransfer({createTransferRequestV2:f},{headers:u}))?.data.transfer_ids}},"TRANSFER_ERROR")}var ha=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 ha(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 I("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 I("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 I("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 I("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(t){throw new I("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(t,n){throw new I("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return S(async()=>{let t=await this.#t();if(!X(t))throw new I("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 I("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 I(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},
@@ -40,7 +40,7 @@ var Ae__namespace = /*#__PURE__*/_interopNamespace(Ae);
40
40
  var $e__default = /*#__PURE__*/_interopDefault($e);
41
41
  var tr__default = /*#__PURE__*/_interopDefault(tr);
42
42
 
43
- function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;constructor(e,t){super(e),this.type=t;}},E=async(n,e)=>{try{return await n()}catch(t){let r;throw t instanceof g&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new g(t.message,t.type):(wt.isAxiosError(t)&&t.response?.data&&le(t.response.data)?r=t.response.data.message:r=t.message,new g(r,e))}};var xe="pkce_state",Me="pkce_verifier",zt=3600,L=class{isTokenValid(e){try{let r=$e__default.default(e).exp??0,i=Date.now()/1e3+zt;return r>i}catch{return !1}}savePKCEData(e){localStorage.setItem(xe,e.state),localStorage.setItem(Me,e.verifier);}getPKCEData(){let e=localStorage.getItem(xe),t=localStorage.getItem(Me);return e&&t?{state:e,verifier:t}:null}};var Jt=(...n)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...n);},S={warn:Jt};function Ne(n){try{let e=$e__default.default(n),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function Le(n){let{id_token:e,access_token:t}=n;return !t||!e?!0:Ne(t)||Ne(e)}var k=n=>!!n.zkEvm,_=n=>!!n.imx,De=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(De||{});var x="passport-overlay",D="passport-overlay-contents",W=`${x}-close`,$=`${x}-try-again`,Ue=`
43
+ function le(i){return "code"in i&&"message"in i}var g=class extends Error{type;constructor(e,t){super(e),this.type=t;}},E=async(i,e)=>{try{return await i()}catch(t){let r;throw t instanceof g&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new g(t.message,t.type):(wt.isAxiosError(t)&&t.response?.data&&le(t.response.data)?r=t.response.data.message:r=t.message,new g(r,e))}};var xe="pkce_state",Me="pkce_verifier",zt=3600,L=class{isTokenValid(e){try{let r=$e__default.default(e).exp??0,n=Date.now()/1e3+zt;return r>n}catch{return !1}}savePKCEData(e){localStorage.setItem(xe,e.state),localStorage.setItem(Me,e.verifier);}getPKCEData(){let e=localStorage.getItem(xe),t=localStorage.getItem(Me);return e&&t?{state:e,verifier:t}:null}};var Jt=(...i)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...i);},S={warn:Jt};function Ne(i){try{let e=$e__default.default(i),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function Le(i){let{id_token:e,access_token:t}=i;return !t||!e?!0:Ne(t)||Ne(e)}var k=i=>!!i.zkEvm,_=i=>!!i.imx,De=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(De||{});var x="passport-overlay",D="passport-overlay-contents",W=`${x}-close`,$=`${x}-try-again`,Ue=`
44
44
  <svg
45
45
  viewBox="0 0 20 20"
46
46
  fill="none"
@@ -322,7 +322,7 @@ function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
322
322
  Secure pop-up not showing?<br />We'll help you re-launch
323
323
  </p>
324
324
  ${Fe()}
325
- `,Be=n=>`
325
+ `,Be=i=>`
326
326
  <div
327
327
  id="${x}"
328
328
  style="
@@ -357,7 +357,7 @@ function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
357
357
  max-width: 400px !important;
358
358
  "
359
359
  >
360
- ${n??""}
360
+ ${i??""}
361
361
  </div>
362
362
  </div>
363
363
  `,He=()=>`
@@ -389,13 +389,13 @@ function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
389
389
  "
390
390
  />
391
391
  </div>
392
- `;function q({id:n,href:e,rel:t,crossOrigin:r}){let i=`${x}-${n}`;if(!document.getElementById(i)){let a=document.createElement("link");a.id=i,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={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ur="/v2/logout",gr="/im-logged-out",hr="/authorize",fr=n=>n?gr:ur,Er=n=>{let{authenticationDomain:e,oidcConfiguration:t}=n,r;n.crossSdkBridgeEnabled?r=new Z("ImmutableSDKPassport",tr__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let i=new oidcClientTs.WebStorageStateStore({store:r}),a=new URL(fr(n.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:i,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function me(n){return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function yr(n){let t=new TextEncoder().encode(n);return await window.crypto.subtle.digest("SHA-256",t)}var U=class n{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new oidcClientTs.UserManager(Er(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 i={...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&&(i.direct=t.directLoginMethod,i.email=a);}else i.direct=t.directLoginMethod;t.marketingConsentStatus&&(i.marketingConsent=t.marketingConsentStatus);}return r&&(i.im_passport_trace_id=r),i}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,i;if(t)r=t;else if(!this.config.popupOverlayOptions.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:o,...c}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(e);r=c,i=o;}let a=window.crypto.randomUUID(),s=async()=>{let o=this.buildExtraQueryParams(e,r,i);return this.userManager.signinPopup({extraQueryParams:o,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a})};return new Promise((o,c)=>{s().then(d=>{o(n.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 u=await s();p.remove(),o(n.mapOidcUserToDomainModel(u));}}catch(u){p.remove(),c(u);}},()=>{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()}async loginCallback(){return E(async()=>{let e=await this.userManager.signinCallback();if(e)return n.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=me(window.crypto.getRandomValues(new Uint8Array(32))),i=me(await yr(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(hr,this.config.authenticationDomain);if(l.searchParams.set("response_type","code"),l.searchParams.set("code_challenge",i),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 i=await this.getPKCEToken(e,r.verifier),a=n.mapDeviceTokenResponseToOidcUser(i),s=n.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},mr)).data}async storeTokens(e){return E(async()=>{let t=n.mapDeviceTokenResponseToOidcUser(e),r=n.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(n.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let i="AUTHENTICATION_ERROR",a="Failed to refresh token",s=!0;if(r instanceof oidcClientTs.ErrorTimeout?(i="SILENT_LOGIN_ERROR",a=`${a}: ${r.message}`,s=!1):r instanceof oidcClientTs.ErrorResponse?(i="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,i));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!Le(t)){let r=n.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async 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(n,e,t=!0,r=!0)=>{let i=metrics.trackFlow("passport",e,t);try{return await n(i)}catch(a){throw a instanceof Error?metrics.trackError("passport",e,a,{flowId:i.details.flowId}):i.addEvent("errored"),a}finally{r&&i.addEvent("End");}};var Ke="ETH",G=class n 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 i=e||await this.getUserOrThrow(),a=n.getHeaders(i);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:i.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(i){r(i);}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(),i=await n.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:i});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 n=>E(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(n);return xClient.createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function ze({user:n,starkSigner:e,request:t,exchangesApi:r}){return E(async()=>{let{ethAddress:i}=n.imx,a=t.amount,s=await r.getExchangeSignableTransfer({id:t.transactionID,getSignableTransferRequest:{sender:i,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 ${n.accessToken}`},u=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:p});return {sent_signature:u?.data.sent_signature,status:u?.data.status?.toString(),time:u?.data.time,transfer_id:u?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var je="ERC721";async function Ye({starkSigner:n,user:e,request:t,ordersApi:r,guardianClient:i}){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 i.evaluateImxTransaction({payloadHash:l.data.payload_hash});let{payload_hash:p}=l.data,u=await n.signMessage(p),f=l.data,v={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:u,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:n,starkSigner:e,request:t,ordersApi:r,guardianClient:i}){return E(async()=>{let a={order_id:t.order_id},s={Authorization:`Bearer ${n.accessToken}`},o=await r.getSignableCancelOrderV3({getSignableCancelOrderRequest:a},{headers:s});await i.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:n,starkSigner:e,imxApiClients:t},r){return E(async()=>{let[i,a]=await Promise.all([n.getAddress(),e.getAddress()]),s=await t.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:i,stark_key:a}}),{signable_message:o,payload_hash:c}=s.data,[d,l]=await Promise.all([toolkit.signRaw(o,n),e.signMessage(c)]);return (await t.usersApi.registerPassportUserV2({authorization:`Bearer ${r}`,registerPassportUserRequest:{eth_signature:d,ether_key:i,stark_signature:l,stark_key:a}})).data},"USER_REGISTRATION_ERROR")}async function et({request:n,tradesApi:e,user:t,starkSigner:r,guardianClient:i}){return E(async()=>{let{ethAddress:a}=t.imx,s={expiration_timestamp:n.expiration_timestamp,fees:n.fees,order_id:n.order_id,user:a},o={Authorization:`Bearer ${t.accessToken}`},c=await e.getSignableTrade({getSignableTradeRequest:s},{headers:o});await i.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,l=await r.signMessage(d),{data:p}=c,u={createTradeRequest:{include_fees:!0,fees:n?.fees,stark_signature:l,order_id:n?.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(u,{headers:o});return f},"CREATE_TRADE_ERROR")}var rt="ERC721";async function nt({request:n,transfersApi:e,starkSigner:t,user:r,guardianClient:i}){return E(async()=>{let a=n.type===rt?"1":n.amount,s={sender:r.imx.ethAddress,token:toolkit.convertToSignableToken(n),amount:a,receiver:n.receiver},o={Authorization:`Bearer ${r.accessToken}`},c=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:o});await i.evaluateImxTransaction({payloadHash:c.data.payload_hash});let d=c.data,{payload_hash:l}=d,p=await t.signMessage(l),u=await t.getAddress(),v={createTransferRequest:{sender_stark_key:d.sender_stark_key||u,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:n,starkSigner:e,request:t,transfersApi:r,guardianClient:i}){return E(async()=>{let{ethAddress:a}=n.imx,s=t.map(u=>({amount:"1",token:toolkit.convertToSignableToken({type:rt,tokenId:u.tokenId,tokenAddress:u.tokenAddress}),receiver:u.receiver})),o={Authorization:`Bearer ${n.accessToken}`},c=await r.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}},{headers:o});await i.evaluateImxTransaction({payloadHash:c.data.signable_responses[0]?.payload_hash});let d=await Promise.all(c.data.signable_responses.map(async u=>{let f=await e.signMessage(u.payload_hash);return {sender_vault_id:u.sender_vault_id,receiver_stark_key:u.receiver_stark_key,receiver_vault_id:u.receiver_vault_id,asset_id:u.asset_id,amount:u.amount,nonce:u.nonce,expiration_timestamp:u.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 Ir=n=>new Promise(e=>{setTimeout(()=>e(),n);}),O=async(n,e)=>{let{retries:t=3,interval:r=1e3,finalErr:i=Error("Retry failed"),finallyFn:a=()=>{}}=e||{};try{return await n()}catch{return t<=0?Promise.reject(i):(await Ir(r),O(n,{retries:t-1,finalErr:i,finallyFn:a}))}finally{t<=0&&a();}};async function at(n){await O(async()=>{let e=await n.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function ge(n,e,t,r,i){return E(async()=>{try{let a=await ue({ethSigner:n,starkSigner:e,imxApiClients:i},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:i,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=i,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 ze({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:i,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=r,this.passportEventEmitter=i,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=(n,e,t)=>{let r=e.map(i=>!n[i]&&i).filter(i=>i).join(", ");if(r!==""){let i=t?`${t} - ${r} cannot be null`:`${r} cannot be null`;throw new g(i,"INVALID_CONFIGURATION")}},z=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:i,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 J=({url:n,title:e,width:t,height:r})=>{let i=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(n,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={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ur="/v2/logout",gr="/im-logged-out",hr="/authorize",fr=i=>i?gr:ur,Er=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(fr(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 yr(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(Er(e)),this.deviceCredentialsManager=new L,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t,r;if(e.id_token){let a=$e__default.default(e.id_token);t=a?.passport,a?.username&&(r=a?.username);}let n={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname,username:r}};return t?.imx_eth_address&&(n.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(n.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),n};static mapDeviceTokenResponseToOidcUser=e=>{let t=$e__default.default(e.id_token),r=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}}),{username:n}=t;return n&&(r.profile.username=n),r};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);return this.userManager.signinPopup({extraQueryParams:o,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a})};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 u=await s();p.remove(),o(i.mapOidcUserToDomainModel(u));}}catch(u){p.remove(),c(u);}},()=>{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()}async loginCallback(){return E(async()=>{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 yr(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(hr,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},mr)).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 ze({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}`},u=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:p});return {sent_signature:u?.data.sent_signature,status:u?.data.status?.toString(),time:u?.data.time,transfer_id:u?.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,u=await i.signMessage(p),f=l.data,v={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:u,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,u={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(u,{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),u=await t.getAddress(),v={createTransferRequest:{sender_stark_key:d.sender_stark_key||u,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(u=>({amount:"1",token:toolkit.convertToSignableToken({type:rt,tokenId:u.tokenId,tokenAddress:u.tokenAddress}),receiver:u.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 u=>{let f=await e.signMessage(u.payload_hash);return {sender_vault_id:u.sender_vault_id,receiver_stark_key:u.receiver_stark_key,receiver_vault_id:u.receiver_vault_id,asset_id:u.asset_id,amount:u.amount,nonce:u.nonce,expiration_timestamp:u.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 Ir=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 Ir(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 ze({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")}},z=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 J=({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},
396
396
  top=${a},
397
- left=${i}
398
- `);if(!s)throw new Error("Failed to open confirmation screen");return s.focus(),s};var fe="Confirm this transaction",Ee=720,ye=480,pt=1e3;var M=class{config;confirmationWindow;popupOptions;overlay;overlayClosed;timer;constructor(e){this.config=e,this.overlayClosed=!1;}getHref(e,t){let r=`${this.config.passportDomain}/transaction-confirmation/${e}`;if(t){let i=t?Object.keys(t).map(a=>`${a}=${t[a]}`).join("&"):"";r=`${r}?${i}`;}return r}requestConfirmation(e,t,r,i){return new Promise((a,s)=>{let o=({data:d,origin:l})=>{if(!(l!==this.config.passportDomain||d.eventType!==F))switch(d.messageType){case"confirmation_window_ready":{this.confirmationWindow?.postMessage({eventType:F,messageType:"confirmation_start"},this.config.passportDomain);break}case"transaction_confirmed":{this.closeWindow(),a({confirmed:!0});break}case"transaction_rejected":{this.closeWindow(),a({confirmed:!1});break}case"transaction_error":{this.closeWindow(),s(new Error("Error during transaction confirmation"));break}default:this.closeWindow(),s(new Error("Unsupported message type"));}},c="";r===Ae__namespace.mr.TransactionApprovalRequestChainTypeEnum.Starkex?c=this.getHref("transaction",{transactionId:e,etherAddress:t,chainType:r}):c=this.getHref("zkevm/transaction",{transactionID:e,etherAddress:t,chainType:r,chainID:i}),window.addEventListener("message",o),this.showConfirmationScreen(c,o,a);})}requestMessageConfirmation(e,t,r){return new Promise((i,a)=>{let s=({data:c,origin:d})=>{if(!(d!==this.config.passportDomain||c.eventType!==F))switch(c.messageType){case"confirmation_window_ready":{this.confirmationWindow?.postMessage({eventType:F,messageType:"confirmation_start"},this.config.passportDomain);break}case"message_confirmed":{this.closeWindow(),i({confirmed:!0});break}case"message_rejected":{this.closeWindow(),i({confirmed:!1});break}case"message_error":{this.closeWindow(),a(new Error("Error during message confirmation"));break}default:this.closeWindow(),a(new Error("Unsupported message type"));}};window.addEventListener("message",s);let o=this.getHref("zkevm/message",{messageID:e,etherAddress:t,...r?{messageType:r}:{}});this.showConfirmationScreen(o,s,i);})}showServiceUnavailable(){return new Promise((e,t)=>{this.showConfirmationScreen(this.getHref("unavailable"),()=>{},()=>{this.closeWindow(),t(new Error("Service unavailable"));});})}loading(e){if(!this.config.crossSdkBridgeEnabled){this.popupOptions=e;try{this.confirmationWindow=J({url:this.getHref("loading"),title:fe,width:e?.width||ye,height:e?.height||Ee}),this.overlay=new P(this.config.popupOverlayOptions);}catch(t){let r=t instanceof Error?t.message:String(t);metrics.trackError("passport","confirmationPopupDenied",new Error(r)),this.overlay=new P(this.config.popupOverlayOptions,!0);}this.overlay.append(()=>{try{this.confirmationWindow?.close(),this.confirmationWindow=J({url:this.getHref("loading"),title:fe,width:this.popupOptions?.width||ye,height:this.popupOptions?.height||Ee});}catch{}},()=>{this.overlayClosed=!0,this.closeWindow();});}}closeWindow(){this.confirmationWindow?.close(),this.overlay?.remove(),this.overlay=void 0;}showConfirmationScreen(e,t,r){if(this.confirmationWindow&&(this.confirmationWindow.location.href=e),!this.overlay){this.overlayClosed=!1,r({confirmed:!1});return}let i=()=>{(this.confirmationWindow?.closed||this.overlayClosed)&&(clearInterval(this.timer),window.removeEventListener("message",t),r({confirmed:!1}),this.overlayClosed=!1,this.confirmationWindow=void 0);};this.timer=setInterval(i,pt),this.overlay.update(()=>this.recreateConfirmationWindow(e,i));}recreateConfirmationWindow(e,t){try{clearInterval(this.timer),this.confirmationWindow?.close(),this.confirmationWindow=J({url:e,title:fe,width:this.popupOptions?.width||ye,height:this.popupOptions?.height||Ee}),this.timer=setInterval(t,pt);}catch{}}};var T=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let r=document.createElement("div");r.innerHTML=He(),document.body.insertAdjacentElement("beforeend",r);let i=document.querySelector(`#${D}`);i&&i.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var xr=660,Mr=440,Nr="16px",ut="passport-embedded-login-keyframes",gt="passport-embedded-login-iframe",N=class n{config;constructor(e){this.config=e;}getHref=e=>{let t=`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${metrics.getDetail(metrics.Detail.RUNTIME_ID)}`;return e&&(t+=`&third_party_a_id=${e}`),t};static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(ut))return;let e=document.createElement("style");e.id=ut,e.textContent=`
397
+ left=${n}
398
+ `);if(!s)throw new Error("Failed to open confirmation screen");return s.focus(),s};var fe="Confirm this transaction",Ee=720,ye=480,pt=1e3;var M=class{config;confirmationWindow;popupOptions;overlay;overlayClosed;timer;constructor(e){this.config=e,this.overlayClosed=!1;}getHref(e,t){let r=`${this.config.passportDomain}/transaction-confirmation/${e}`;if(t){let n=t?Object.keys(t).map(a=>`${a}=${t[a]}`).join("&"):"";r=`${r}?${n}`;}return r}requestConfirmation(e,t,r,n){return new Promise((a,s)=>{let o=({data:d,origin:l})=>{if(!(l!==this.config.passportDomain||d.eventType!==F))switch(d.messageType){case"confirmation_window_ready":{this.confirmationWindow?.postMessage({eventType:F,messageType:"confirmation_start"},this.config.passportDomain);break}case"transaction_confirmed":{this.closeWindow(),a({confirmed:!0});break}case"transaction_rejected":{this.closeWindow(),a({confirmed:!1});break}case"transaction_error":{this.closeWindow(),s(new Error("Error during transaction confirmation"));break}default:this.closeWindow(),s(new Error("Unsupported message type"));}},c="";r===Ae__namespace.mr.TransactionApprovalRequestChainTypeEnum.Starkex?c=this.getHref("transaction",{transactionId:e,etherAddress:t,chainType:r}):c=this.getHref("zkevm/transaction",{transactionID:e,etherAddress:t,chainType:r,chainID:n}),window.addEventListener("message",o),this.showConfirmationScreen(c,o,a);})}requestMessageConfirmation(e,t,r){return new Promise((n,a)=>{let s=({data:c,origin:d})=>{if(!(d!==this.config.passportDomain||c.eventType!==F))switch(c.messageType){case"confirmation_window_ready":{this.confirmationWindow?.postMessage({eventType:F,messageType:"confirmation_start"},this.config.passportDomain);break}case"message_confirmed":{this.closeWindow(),n({confirmed:!0});break}case"message_rejected":{this.closeWindow(),n({confirmed:!1});break}case"message_error":{this.closeWindow(),a(new Error("Error during message confirmation"));break}default:this.closeWindow(),a(new Error("Unsupported message type"));}};window.addEventListener("message",s);let o=this.getHref("zkevm/message",{messageID:e,etherAddress:t,...r?{messageType:r}:{}});this.showConfirmationScreen(o,s,n);})}showServiceUnavailable(){return new Promise((e,t)=>{this.showConfirmationScreen(this.getHref("unavailable"),()=>{},()=>{this.closeWindow(),t(new Error("Service unavailable"));});})}loading(e){if(!this.config.crossSdkBridgeEnabled){this.popupOptions=e;try{this.confirmationWindow=J({url:this.getHref("loading"),title:fe,width:e?.width||ye,height:e?.height||Ee}),this.overlay=new P(this.config.popupOverlayOptions);}catch(t){let r=t instanceof Error?t.message:String(t);metrics.trackError("passport","confirmationPopupDenied",new Error(r)),this.overlay=new P(this.config.popupOverlayOptions,!0);}this.overlay.append(()=>{try{this.confirmationWindow?.close(),this.confirmationWindow=J({url:this.getHref("loading"),title:fe,width:this.popupOptions?.width||ye,height:this.popupOptions?.height||Ee});}catch{}},()=>{this.overlayClosed=!0,this.closeWindow();});}}closeWindow(){this.confirmationWindow?.close(),this.overlay?.remove(),this.overlay=void 0;}showConfirmationScreen(e,t,r){if(this.confirmationWindow&&(this.confirmationWindow.location.href=e),!this.overlay){this.overlayClosed=!1,r({confirmed:!1});return}let n=()=>{(this.confirmationWindow?.closed||this.overlayClosed)&&(clearInterval(this.timer),window.removeEventListener("message",t),r({confirmed:!1}),this.overlayClosed=!1,this.confirmationWindow=void 0);};this.timer=setInterval(n,pt),this.overlay.update(()=>this.recreateConfirmationWindow(e,n));}recreateConfirmationWindow(e,t){try{clearInterval(this.timer),this.confirmationWindow?.close(),this.confirmationWindow=J({url:e,title:fe,width:this.popupOptions?.width||ye,height:this.popupOptions?.height||Ee}),this.timer=setInterval(t,pt);}catch{}}};var T=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let r=document.createElement("div");r.innerHTML=He(),document.body.insertAdjacentElement("beforeend",r);let n=document.querySelector(`#${D}`);n&&n.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var xr=660,Mr=440,Nr="16px",ut="passport-embedded-login-keyframes",gt="passport-embedded-login-iframe",N=class i{config;constructor(e){this.config=e;}getHref=e=>{let t=`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${metrics.getDetail(metrics.Detail.RUNTIME_ID)}`;return e&&(t+=`&third_party_a_id=${e}`),t};static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(ut))return;let e=document.createElement("style");e.id=ut,e.textContent=`
399
399
  @keyframes passportEmbeddedLoginPromptPopBounceIn {
400
400
  0% {
401
401
  opacity: 0.5;
@@ -428,14 +428,14 @@ function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
428
428
  opacity: 1;
429
429
  }
430
430
  }
431
- `,document.head.appendChild(e);};getEmbeddedLoginIFrame=e=>{let t=document.createElement("iframe");return t.id=gt,t.src=this.getHref(e),t.style.height="100vh",t.style.width="100vw",t.style.maxHeight=`${xr}px`,t.style.maxWidth=`${Mr}px`,t.style.borderRadius=Nr,t.style.opacity="0",t.style.transform="scale(0.6)",t.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",n.appendIFrameStylesIfNeeded(),t};displayEmbeddedLoginPrompt(e){return new Promise((t,r)=>{let i=this.getEmbeddedLoginIFrame(e),a=({data:s,origin:o})=>{if(!(o!==this.config.authenticationDomain||s.eventType!==lt))switch(s.messageType){case"login_method_selected":{let c=s.payload;window.removeEventListener("message",a),T.remove(),t(c);break}case"login_prompt_error":{window.removeEventListener("message",a),T.remove(),r(new Error("Error during embedded login prompt",{cause:s.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",a),T.remove(),r(new Error("Popup closed by user"));break}default:window.removeEventListener("message",a),T.remove(),r(new Error(`Unsupported message type: ${s.messageType}`));break}};window.addEventListener("message",a),T.appendOverlay(i,()=>{window.removeEventListener("message",a),T.remove(),r(new Error("Popup closed by user"));});})}};var Re=(e=>(e.ACCOUNTS_CHANGED="accountsChanged",e))(Re||{});var b=class{emitter=new events.EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var Et=1,Wr=1,$r=2,yt="02",qr="",Rt=`tuple(
431
+ `,document.head.appendChild(e);};getEmbeddedLoginIFrame=e=>{let t=document.createElement("iframe");return t.id=gt,t.src=this.getHref(e),t.style.height="100vh",t.style.width="100vw",t.style.maxHeight=`${xr}px`,t.style.maxWidth=`${Mr}px`,t.style.borderRadius=Nr,t.style.opacity="0",t.style.transform="scale(0.6)",t.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",i.appendIFrameStylesIfNeeded(),t};displayEmbeddedLoginPrompt(e){return new Promise((t,r)=>{let n=this.getEmbeddedLoginIFrame(e),a=({data:s,origin:o})=>{if(!(o!==this.config.authenticationDomain||s.eventType!==lt))switch(s.messageType){case"login_method_selected":{let c=s.payload;window.removeEventListener("message",a),T.remove(),t(c);break}case"login_prompt_error":{window.removeEventListener("message",a),T.remove(),r(new Error("Error during embedded login prompt",{cause:s.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",a),T.remove(),r(new Error("Popup closed by user"));break}default:window.removeEventListener("message",a),T.remove(),r(new Error(`Unsupported message type: ${s.messageType}`));break}};window.addEventListener("message",a),T.appendOverlay(n,()=>{window.removeEventListener("message",a),T.remove(),r(new Error("Popup closed by user"));});})}};var Re=(e=>(e.ACCOUNTS_CHANGED="accountsChanged",e))(Re||{});var b=class{emitter=new events.EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var Et=1,Wr=1,$r=2,yt="02",qr="",Rt=`tuple(
432
432
  bool delegateCall,
433
433
  bool revertOnError,
434
434
  uint256 gasLimit,
435
435
  address target,
436
436
  uint256 value,
437
437
  bytes data
438
- )[]`,ve=n=>n.map(e=>({delegateCall:e.delegateCall===!0,revertOnError:e.revertOnError===!0,gasLimit:e.gasLimit??BigInt(0),target:e.to??ethers.ZeroAddress,value:e.value??BigInt(0),data:e.data??"0x"})),Zr=(n,e)=>{let t=ethers.AbiCoder.defaultAbiCoder().encode(["uint256",Rt],[n,e]);return ethers.keccak256(t)},Ct=n=>ethers.AbiCoder.defaultAbiCoder().encode([Rt],[n]),Kr=n=>n||0n,Xr=(n,e)=>{let t=BigInt(n)*2n**96n;return BigInt(e)+t},Y=async(n,e,t)=>{try{let r=new ethers.Contract(e,abi.walletContracts.mainModule.abi,n),i=Kr(t),a=await r.readNonce(i);if(typeof a=="bigint")return Xr(i,a);throw new Error("Unexpected result from contract.nonce() call.")}catch(r){if(ethers.isError(r,"BAD_DATA"))return BigInt(0);throw r}},_e=(n,e,t)=>ethers.solidityPacked(["string","uint256","address","bytes32"],[qr,n,e,t]),we=async(n,e,t,r,i)=>{let a=ve(n),s=Zr(e,a),o=_e(t,r,s),c=ethers.keccak256(o),d=ethers.getBytes(c),p=`${await i.signMessage(d)}${yt}`,u=core.v1.signature.encodeSignature({version:1,threshold:Wr,signers:[{isDynamic:!1,unrecovered:!0,weight:Et,signature:p}]}),f=new ethers.Interface(abi.walletContracts.mainModule.abi);return f.encodeFunctionData(f.getFunction("execute")??"",[a,e,u])},zr=n=>{let e=`0x0000${n}`;return core.v1.signature.decodeSignature(e)},Pe=(n,e,t)=>{let r=`${n}${yt}`,{signers:i}=zr(t),s=[...i,{isDynamic:!1,unrecovered:!0,weight:Et,signature:r,address:e}].sort((o,c)=>{let d=BigInt(o.address??0),l=BigInt(c.address??0);return d<=l?-1:d===l?0:1});return core.v1.signature.encodeSignature({version:1,threshold:$r,signers:s})},Tt=async(n,e,t,r,i)=>{let a={...n.types};delete a.EIP712Domain;let s=ethers.TypedDataEncoder.hash(n.domain,a,n.message),o=_e(t,r,s),c=ethers.keccak256(o),d=ethers.getBytes(c),l=await i.signMessage(d),p=await i.getAddress();return Pe(l,p,e)},vt=async(n,e,t,r)=>{let i=ethers.hashMessage(e),a=_e(n,r,i),s=ethers.keccak256(a),o=ethers.getBytes(s);return t.signMessage(o)},C=n=>`eip155:${n}`;var Q=class n{config;rpcProvider;authManager;constructor({config:e,rpcProvider:t,authManager:r}){this.config=e,this.rpcProvider=t,this.authManager=r;}static getResponsePreview(e){return e.length>100?`${e.substring(0,50)}...${e.substring(e.length-50)}`:e}async postToRelayer(e){let t={id:1,jsonrpc:"2.0",...e},r=await this.authManager.getUserZkEvm(),i=await fetch(`${this.config.relayerUrl}/v1/transactions`,{method:"POST",headers:{Authorization:`Bearer ${r.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await i.text();if(!i.ok){let o=n.getResponsePreview(a);throw new Error(`Relayer HTTP error: ${i.status}. Content: "${o}"`)}let s;try{s=JSON.parse(a);}catch(o){let c=n.getResponsePreview(a);throw new Error(`Relayer JSON parse error: ${o instanceof Error?o.message:"Unknown error"}. Content: "${c}"`)}if(s.error)throw new Error(s.error);return s}async ethSendTransaction(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),i={method:"eth_sendTransaction",params:[{to:e,data:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(i);return a}async imGetTransactionByHash(e){let t={method:"im_getTransactionByHash",params:[e]},{result:r}=await this.postToRelayer(t);return r}async imGetFeeOptions(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),i={method:"im_getFeeOptions",params:[{userAddress:e,data:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(i);return a}async imSignTypedData(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),i={method:"im_signTypedData",params:[{address:e,eip712Payload:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(i);return a}async imSign(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),i={method:"im_sign",params:[{address:e,message:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(i);return a}};var ee=(i=>(i[i.USER_REJECTED_REQUEST=4001]="USER_REJECTED_REQUEST",i[i.UNAUTHORIZED=4100]="UNAUTHORIZED",i[i.UNSUPPORTED_METHOD=4200]="UNSUPPORTED_METHOD",i[i.DISCONNECTED=4900]="DISCONNECTED",i))(ee||{}),w=(o=>(o[o.RPC_SERVER_ERROR=-32e3]="RPC_SERVER_ERROR",o[o.INVALID_REQUEST=-32600]="INVALID_REQUEST",o[o.METHOD_NOT_FOUND=-32601]="METHOD_NOT_FOUND",o[o.INVALID_PARAMS=-32602]="INVALID_PARAMS",o[o.INTERNAL_ERROR=-32603]="INTERNAL_ERROR",o[o.PARSE_ERROR=-32700]="PARSE_ERROR",o[o.TRANSACTION_REJECTED=-32003]="TRANSACTION_REJECTED",o))(w||{}),m=class extends Error{message;code;constructor(e,t){super(t),this.message=t,this.code=e;}};var jr="Only sign this message from Immutable Passport";async function _t({authManager:n,ethSigner:e,multiRollupApiClients:t,accessToken:r,rpcProvider:i,flow:a}){let s=e.getAddress();s.then(()=>a.addEvent("endGetAddress"));let o=toolkit.signRaw(jr,e);o.then(()=>a.addEvent("endSignRaw"));let c=i.getNetwork();c.then(()=>a.addEvent("endDetectNetwork"));let d=t.chainsApi.listChains();d.then(()=>a.addEvent("endListChains"));let[l,p,u,f]=await Promise.all([s,o,c,d]),v=C(Number(u.chainId)),y=f.data?.result?.find(I=>I.id===v)?.name;if(!y)throw new m(-32603,`Chain name does not exist on for chain id ${u.chainId}`);try{let I=await t.passportApi.createCounterfactualAddressV2({chainName:y,createCounterfactualAddressRequest:{ethereum_address:l,ethereum_signature:p}},{headers:{Authorization:`Bearer ${r}`}});return a.addEvent("endCreateCounterfactualAddress"),n.forceUserRefreshInBackground(),I.data.counterfactual_address}catch(I){throw new m(-32603,`Failed to create counterfactual address: ${I}`)}}var te="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",re=n=>BigInt(n).toString(),Qr=n=>{try{return n.map(e=>({delegateCall:e.delegateCall===!0,revertOnError:e.revertOnError===!0,gasLimit:e.gasLimit?re(e.gasLimit):"0",target:e.to??ethers.ZeroAddress,value:e.value?re(e.value):"0",data:e.data?e.data.toString():"0x"}))}catch(e){let t=e instanceof Error?e.message:String(e);throw new m(-32602,`Transaction failed to parsing: ${t}`)}},B=class{guardianApi;confirmationScreen;crossSdkBridgeEnabled;authManager;constructor({confirmationScreen:e,config:t,authManager:r,guardianApi:i}){this.confirmationScreen=e,this.crossSdkBridgeEnabled=t.crossSdkBridgeEnabled,this.guardianApi=i,this.authManager=r;}withConfirmationScreen(e){return t=>this.withConfirmationScreenTask(e)(t)()}withConfirmationScreenTask(e){return t=>async()=>{this.confirmationScreen.loading(e);try{return await t()}catch(r){throw r instanceof g&&r.type==="SERVICE_UNAVAILABLE_ERROR"?(await this.confirmationScreen.showServiceUnavailable(),r):(this.confirmationScreen.closeWindow(),r)}}}withDefaultConfirmationScreenTask(e){return this.withConfirmationScreenTask()(e)}async evaluateImxTransaction({payloadHash:e}){try{let t=()=>{this.confirmationScreen.closeWindow();},r=await this.authManager.getUserImx(),i={Authorization:`Bearer ${r.accessToken}`};if(!(await O(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:i}),{finallyFn:t})).data.id)throw new Error("Transaction doesn't exists");let s=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:i}),{confirmationRequired:o}=s.data;if(o){if(this.crossSdkBridgeEnabled)throw new Error(te);if(!(await this.confirmationScreen.requestConfirmation(e,r.imx.ethAddress,Ae__namespace.mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new Error("Transaction rejected by user")}else this.confirmationScreen.closeWindow();}catch(t){throw wt__default.default.isAxiosError(t)&&t.response?.status===403?new g("Service unavailable","SERVICE_UNAVAILABLE_ERROR"):t}}async evaluateEVMTransaction({chainId:e,nonce:t,metaTransactions:r}){let i=await this.authManager.getUserZkEvm(),a={Authorization:`Bearer ${i.accessToken}`},s=Qr(r);try{return (await this.guardianApi.evaluateTransaction({id:"evm",transactionEvaluationRequest:{chainType:"evm",chainId:e,transactionData:{nonce:t,userAddress:i.zkEvm.ethAddress,metaTransactions:s}}},{headers:a})).data}catch(o){if(wt__default.default.isAxiosError(o)&&o.response?.status===403)throw new g("Service unavailable","SERVICE_UNAVAILABLE_ERROR");let c=o instanceof Error?o.message:String(o);throw new m(-32603,`Transaction failed to validate with error: ${c}`)}}async validateEVMTransaction({chainId:e,nonce:t,metaTransactions:r,isBackgroundTransaction:i}){let a=await this.evaluateEVMTransaction({chainId:e,nonce:t,metaTransactions:r}),{confirmationRequired:s,transactionId:o}=a;if(s&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(s&&o){let c=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestConfirmation(o,c.zkEvm.ethAddress,Ae__namespace.mr.TransactionApprovalRequestChainTypeEnum.Evm,e)).confirmed)throw new m(-32003,"Transaction rejected by user")}else i||this.confirmationScreen.closeWindow();}async handleEIP712MessageEvaluation({chainID:e,payload:t}){try{let r=await this.authManager.getUserZkEvm();if(r===null)throw new m(4100,"User not logged in. Please log in first.");return (await this.guardianApi.evaluateMessage({messageEvaluationRequest:{chainID:e,payload:t}},{headers:{Authorization:`Bearer ${r.accessToken}`}})).data}catch(r){let i=r instanceof Error?r.message:String(r);throw new m(-32603,`Message failed to validate with error: ${i}`)}}async evaluateEIP712Message({chainID:e,payload:t}){let{messageId:r,confirmationRequired:i}=await this.handleEIP712MessageEvaluation({chainID:e,payload:t});if(i&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(i&&r){let a=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestMessageConfirmation(r,a.zkEvm.ethAddress,"eip712")).confirmed)throw new m(-32003,"Signature rejected by user")}else this.confirmationScreen.closeWindow();}async handleERC191MessageEvaluation({chainID:e,payload:t}){try{let r=await this.authManager.getUserZkEvm();if(r===null)throw new m(4100,"User not logged in. Please log in first.");return (await this.guardianApi.evaluateErc191Message({eRC191MessageEvaluationRequest:{chainID:C(Number(e)),payload:t}},{headers:{Authorization:`Bearer ${r.accessToken}`}})).data}catch(r){let i=r instanceof Error?r.message:String(r);throw new m(-32603,`Message failed to validate with error: ${i}`)}}async evaluateERC191Message({chainID:e,payload:t}){let{messageId:r,confirmationRequired:i}=await this.handleERC191MessageEvaluation({chainID:e,payload:t});if(i&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(i&&r){let a=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestMessageConfirmation(r,a.zkEvm.ethAddress,"erc191")).confirmed)throw new m(-32003,"Signature rejected by user")}else this.confirmationScreen.closeWindow();}};var en=30,tn=1e3,rn=async(n,e,t)=>{let r=ve([n]),i=Ct(r),a=await t.imGetFeeOptions(e,i);if(!a||!Array.isArray(a))throw new Error("Invalid fee options received from relayer");let s=a.find(o=>o.tokenSymbol==="IMX");if(!s)throw new Error("Failed to retrieve fees for IMX token");return s},nn=async(n,e,t,r,i)=>{if(!n.to)throw new m(-32602,'eth_sendTransaction requires a "to" field');let a={to:n.to.toString(),data:n.data,nonce:BigInt(0),value:n.value,revertOnError:!0},[s,o]=await Promise.all([Y(e,r,i),rn(a,r,t)]),c=[{...a,nonce:s}],d=BigInt(o.tokenPrice);return d!==BigInt(0)&&c.push({nonce:s,to:o.recipientAddress,value:d,revertOnError:!0}),c},ne=async(n,e,t)=>{let i=await O(async()=>{let a=await n.imGetTransactionByHash(e);if(a.status==="PENDING")throw new Error;return a},{retries:en,interval:tn,finalErr:new m(-32e3,"transaction hash not generated in time")});if(t.addEvent("endRetrieveRelayerTransaction"),!["SUBMITTED","SUCCESSFUL"].includes(i.status)){let a=`Transaction failed to submit with status ${i.status}.`;throw i.statusMessage&&(a+=` Error message: ${i.statusMessage}`),new m(-32e3,a)}return i},ie=async({transactionRequest:n,ethSigner:e,rpcProvider:t,guardianClient:r,relayerClient:i,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c})=>{let{chainId:d}=await t.getNetwork(),l=BigInt(d);s.addEvent("endDetectNetwork");let p=await nn(n,t,i,a,o);s.addEvent("endBuildMetaTransactions");let{nonce:u}=p[0];if(typeof u>"u")throw new Error("Failed to retrieve nonce from the smart wallet");let f=async()=>{await r.validateEVMTransaction({chainId:C(Number(d)),nonce:re(u),metaTransactions:p,isBackgroundTransaction:c}),s.addEvent("endValidateEVMTransaction");},v=async()=>{let Zt=await we(p,u,l,a,e);return s.addEvent("endGetSignedMetaTransactions"),Zt},[,y]=await Promise.all([f(),v()]),I=await i.ethSendTransaction(a,y);return s.addEvent("endRelayerSendTransaction"),{signedTransactions:y,relayerId:I,nonce:u}},an=async n=>{if(!n.to)throw new m(-32602,'im_signEjectionTransaction requires a "to" field');if(typeof n.nonce>"u")throw new m(-32602,'im_signEjectionTransaction requires a "nonce" field');if(!n.chainId)throw new m(-32602,'im_signEjectionTransaction requires a "chainId" field');return [{to:n.to.toString(),data:n.data,nonce:n.nonce??void 0,value:n.value,revertOnError:!0}]},Pt=async({transactionRequest:n,ethSigner:e,zkEvmAddress:t,flow:r})=>{let i=await an(n);r.addEvent("endBuildMetaTransactions");let a=await we(i,n.nonce,BigInt(n.chainId??0),t,e);return r.addEvent("endGetSignedMetaTransactions"),{to:t,data:a,chainId:C(Number(n.chainId??0))}};var Ie=async({params:n,ethSigner:e,rpcProvider:t,relayerClient:r,guardianClient:i,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c=!1})=>{let d=n[0],{relayerId:l}=await ie({transactionRequest:d,ethSigner:e,rpcProvider:t,guardianClient:i,relayerClient:r,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c}),{hash:p}=await ne(r,l,s);return p};var At=["types","domain","primaryType","message"],sn=n=>At.every(e=>e in n),on=(n,e)=>{let t;if(typeof n=="string")try{t=JSON.parse(n);}catch(i){throw new m(-32602,`Failed to parse typed data JSON: ${i}`)}else if(typeof n=="object")t=n;else throw new m(-32602,`Invalid typed data argument: ${n}`);if(!sn(t))throw new m(-32602,`Invalid typed data argument. The following properties are required: ${At.join(", ")}`);let r=t.domain?.chainId;if(r&&(typeof r=="string"&&(r.startsWith("0x")?t.domain.chainId=parseInt(r,16).toString():t.domain.chainId=parseInt(r,10).toString()),BigInt(t.domain.chainId??0)!==e))throw new m(-32602,`Invalid chainId, expected ${e}`);return t},It=async({params:n,method:e,ethSigner:t,rpcProvider:r,relayerClient:i,guardianClient:a,flow:s})=>{let o=n[0],c=n[1];if(!o||!c)throw new m(-32602,`${e} requires an address and a typed data JSON`);let{chainId:d}=await r.getNetwork(),l=on(c,d);s.addEvent("endDetectNetwork"),await a.evaluateEIP712Message({chainID:String(d),payload:l}),s.addEvent("endValidateMessage");let p=await i.imSignTypedData(o,l);s.addEvent("endRelayerSignTypedData");let u=await Tt(l,p,BigInt(d),o,t);return s.addEvent("getSignedTypedData"),u};var St=n=>{if(!n)return n;try{let e=ethers.stripZerosLeft(ethers.getBytes(n));return ethers.toUtf8String(e)}catch{return n}};var ae=async({params:n,ethSigner:e,zkEvmAddress:t,rpcProvider:r,guardianClient:i,relayerClient:a,flow:s})=>{let o=n[0],c=n[1];if(!c||!o)throw new m(-32602,"personal_sign requires an address and a message");if(c.toLowerCase()!==t.toLowerCase())throw new m(-32602,"personal_sign requires the signer to be the from address");let d=St(o),{chainId:l}=await r.getNetwork();s.addEvent("endDetectNetwork");let p=BigInt(l),u=vt(p,d,e,c);u.then(()=>s.addEvent("endEOASignature")),await i.evaluateERC191Message({chainID:l,payload:d}),s.addEvent("endEvaluateERC191Message");let[f,v]=await Promise.all([u,a.imSign(c,d)]);s.addEvent("endRelayerSign");let y=await e.getAddress();return s.addEvent("endGetEOAAddress"),Pe(f,y,v)};var mn="https://api.immutable.com",un="https://api.sandbox.immutable.com",gn="/v1/sdk/session-activity/check",hn=n=>{switch(n){case config.Environment.SANDBOX:return un;case config.Environment.PRODUCTION:return mn;default:throw new Error("Environment not supported")}},se,bt=n=>{se||(se=wt__default.default.create({baseURL:hn(n)}));};async function kt(n){if(!se)throw new Error("Client not initialised");return se.get(gn,{params:n}).then(e=>e.data).catch(e=>{if(e.response.status!==404)throw e})}function Mt(n,e){return (...t)=>{try{let r=n(...t);return r instanceof Promise?r.catch(i=>(i instanceof Error&&metrics.trackError("passport","sessionActivityError",i),e)):r}catch(r){return r instanceof Error&&metrics.trackError("passport","sessionActivityError",r),e}}}var{getItem:Nt,setItem:Se}=metrics.utils.localStorage,Oe="sessionActivitySendCount",Lt="sessionActivityDate",be={},A={},oe={},Dt=()=>{A=Nt(Oe)||{};let n=Nt(Lt),e=new Date,t=e.getFullYear(),r=`${e.getMonth()+1}`.padStart(2,"0"),i=`${e.getDate()}`.padStart(2,"0"),a=`${t}-${r}-${i}`;(!n||n!==a)&&(A={}),Se(Lt,a),Se(Oe,A);};Dt();var Cn=n=>{Dt(),A[n]||(A[n]=0),A[n]++,Se(Oe,A),be[n]=0;},Tn=async n=>new Promise(e=>{setTimeout(e,n*1e3);}),vn=async n=>{let e=n.flow||metrics.trackFlow("passport","sendSessionActivity"),t=n.passportClient;if(!t)throw e.addEvent("No Passport Client ID"),new Error("No Passport Client ID provided");if(oe[t])return;oe[t]=!0;let{sendTransaction:r,environment:i}=n;if(!r)throw new Error("No sendTransaction function provided");if(!i)throw new Error("No environment provided");bt(i);let a=n.walletAddress;if(!a)throw e.addEvent("No Passport Wallet Address"),new Error("No wallet address");let s;try{if(s=await kt({clientId:t,wallet:a,checkCount:be[t]||0,sendCount:A[t]||0}),be[t]++,!s)return}catch(o){throw e.addEvent("Failed to fetch details"),new Error("Failed to get details",{cause:o})}if(s&&s.contractAddress&&s.functionName){let c=new ethers.Interface([`function ${s.functionName}()`]).encodeFunctionData(s.functionName),d=s.contractAddress;try{e.addEvent("Start Sending Transaction");let l=await n.sendTransaction([{to:d,from:a,data:c}],e);Cn(t),e.addEvent("Transaction Sent",{tx:l});}catch(l){e.addEvent("Failed to send Transaction");let p=new Error("Failed to send transaction",{cause:l});metrics.trackError("passport","sessionActivityError",p,{flowId:e.details.flowId});}}s&&s.delay&&s.delay>0&&(e.addEvent("Delaying Transaction",{delay:s.delay}),await Tn(s.delay),setTimeout(()=>{e.addEvent("Retrying after Delay"),oe[t]=!1,Ut({...n,flow:e});},0));},Ut=n=>Mt(vn)(n).then(()=>{oe[n.passportClient]=!1;}),Gt=Ut;var Ft=async({params:n,ethSigner:e,rpcProvider:t,relayerClient:r,guardianClient:i,zkEvmAddress:a,flow:s})=>{let o={to:a,value:0},{relayerId:c}=await ie({transactionRequest:o,ethSigner:e,rpcProvider:t,guardianClient:i,relayerClient:r,zkEvmAddress:a,flow:s});return i.withConfirmationScreen()(async()=>{let d=await ae({params:n,ethSigner:e,zkEvmAddress:a,rpcProvider:t,guardianClient:i,relayerClient:r,flow:s});return await ne(r,c,s),d})};var Bt=async({params:n,ethSigner:e,zkEvmAddress:t,flow:r})=>{if(!n||n.length!==1)throw new m(-32602,"im_signEjectionTransaction requires a singular param (hash)");let i=n[0];return await Pt({transactionRequest:i,ethSigner:e,zkEvmAddress:t,flow:r})};var ce=n=>"zkEvm"in n,de=class{#s;#t;#i;#r;#n;#e;#l;#c;#a;isPassport=!0;constructor({authManager:e,config:t,multiRollupApiClients:r,passportEventEmitter:i,guardianClient:a,ethSigner:s,user:o}){this.#s=e,this.#t=t,this.#n=a,this.#r=i,this.#a=s,this.#e=new ethers.JsonRpcProvider(this.#t.zkEvmRpcUrl,void 0,{staticNetwork:!0}),this.#c=new Q({config:this.#t,rpcProvider:this.#e,authManager:this.#s}),this.#l=r,this.#i=new b,o&&ce(o)&&this.#d(o.zkEvm.ethAddress),i.on("loggedIn",c=>{ce(c)&&this.#d(c.zkEvm.ethAddress);}),i.on("loggedOut",this.#p),i.on("accountsRequested",Gt);}#p=()=>{this.#i.emit("accountsChanged",[]);};async#d(e,t){let r=BigInt(1),i=async(a,s)=>await Ie({params:a,ethSigner:this.#a,guardianClient:this.#n,rpcProvider:this.#e,relayerClient:this.#c,zkEvmAddress:e,flow:s,nonceSpace:r,isBackgroundTransaction:!0});this.#r.emit("accountsRequested",{environment:this.#t.baseConfig.environment,sendTransaction:i,walletAddress:e,passportClient:t||this.#t.oidcConfiguration.clientId});}async#o(){try{let e=await this.#s.getUser();return e&&ce(e)?e.zkEvm.ethAddress:void 0}catch{return}}async#m(e){switch(e.method){case"eth_requestAccounts":{let t=await this.#o();if(t)return [t];let r=metrics.trackFlow("passport","ethRequestAccounts");try{let i=await this.#s.getUserOrLogin();r.addEvent("endGetUserOrLogin");let a;return ce(i)?a=i.zkEvm.ethAddress:(r.addEvent("startUserRegistration"),a=await _t({ethSigner:this.#a,authManager:this.#s,multiRollupApiClients:this.#l,accessToken:i.accessToken,rpcProvider:this.#e,flow:r}),r.addEvent("endUserRegistration")),this.#i.emit("accountsChanged",[a]),metrics.identify({passportId:i.profile.sub}),this.#d(a),[a]}catch(i){throw i instanceof Error?metrics.trackError("passport","ethRequestAccounts",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"eth_sendTransaction":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=metrics.trackFlow("passport","ethSendTransaction");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>await Ie({params:e.params||[],ethSigner:this.#a,guardianClient:this.#n,rpcProvider:this.#e,relayerClient:this.#c,zkEvmAddress:t,flow:r}))}catch(i){throw i instanceof Error?metrics.trackError("passport","eth_sendTransaction",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"eth_accounts":{let t=await this.#o();return t?[t]:[]}case"personal_sign":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=metrics.trackFlow("passport","personalSign");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>this.#t.forceScwDeployBeforeMessageSignature&&!(await Y(this.#e,t)>BigInt(0))?await Ft({params:e.params||[],zkEvmAddress:t,ethSigner:this.#a,rpcProvider:this.#e,guardianClient:this.#n,relayerClient:this.#c,flow:r}):await ae({params:e.params||[],zkEvmAddress:t,ethSigner:this.#a,rpcProvider:this.#e,guardianClient:this.#n,relayerClient:this.#c,flow:r}))}catch(i){throw i instanceof Error?metrics.trackError("passport","personal_sign",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"eth_signTypedData":case"eth_signTypedData_v4":{if(!await this.#o())throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=metrics.trackFlow("passport","ethSignTypedDataV4");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>await It({method:e.method,params:e.params||[],ethSigner:this.#a,rpcProvider:this.#e,relayerClient:this.#c,guardianClient:this.#n,flow:r}))}catch(i){throw i instanceof Error?metrics.trackError("passport","eth_signTypedData",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"eth_chainId":{let{chainId:t}=await this.#e.getNetwork();return ethers.toBeHex(t)}case"eth_getBalance":case"eth_getCode":case"eth_getTransactionCount":{let[t,r]=e.params||[];return this.#e.send(e.method,[t,r||"latest"])}case"eth_getStorageAt":{let[t,r,i]=e.params||[];return this.#e.send(e.method,[t,r,i||"latest"])}case"eth_call":case"eth_estimateGas":{let[t,r]=e.params||[];return this.#e.send(e.method,[t,r||"latest"])}case"eth_gasPrice":case"eth_blockNumber":case"eth_getBlockByHash":case"eth_getBlockByNumber":case"eth_getTransactionByHash":case"eth_getTransactionReceipt":return this.#e.send(e.method,e.params||[]);case"im_signEjectionTransaction":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=metrics.trackFlow("passport","imSignEjectionTransaction");try{return await Bt({params:e.params||[],ethSigner:this.#a,zkEvmAddress:t,flow:r})}catch(i){throw i instanceof Error?metrics.trackError("passport","imSignEjectionTransaction",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"im_addSessionActivity":{let[t]=e.params||[],r=await this.#o();return r&&this.#d(r,t),null}default:throw new m(4200,"Method not supported")}}async request(e){try{return this.#m(e)}catch(t){throw t instanceof m?t:t instanceof Error?new m(-32603,t.message):new m(-32603,"Internal error")}}on(e,t){this.#i.on(e,t);}removeListener(e,t){this.#i.removeListener(e,t);}};var Ht={icon:'data:image/svg+xml,<svg viewBox="0 0 48 48" class="SvgIcon undefined Logo Logo--PassportSymbolOutlined css-1dn9atd" xmlns="http://www.w3.org/2000/svg"><g data-testid="undefined__g"><circle cx="24" cy="24" r="22.5" fill="url(%23paint0_radial_6324_83922)"></circle><circle cx="24" cy="24" r="22.5" fill="url(%23paint1_radial_6324_83922)"></circle><path d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM23.0718 9.16608C23.7383 8.83951 24.4406 8.86188 25.087 9.2287C27.3282 10.5059 29.5627 11.7942 31.786 13.096C32.5018 13.5165 32.8686 14.1897 32.8708 15.0173C32.8843 17.9184 32.8798 20.8171 32.8708 23.7182C32.8708 23.8255 32.8015 23.9821 32.7143 24.0335C31.8531 24.548 30.9808 25.0423 30.0347 25.5881V25.1318C30.0347 22.148 30.0257 19.1664 30.0414 16.1827C30.0436 15.6101 29.8468 15.241 29.339 14.9525C26.7377 13.474 24.1499 11.9687 21.5575 10.4723C21.4457 10.4075 21.3361 10.3381 21.1661 10.2352C21.8326 9.85722 22.4321 9.47698 23.0673 9.16608H23.0718ZM22.5953 38.8451C22.45 38.7713 22.3426 38.7198 22.2375 38.6595C18.8041 36.68 15.3752 34.687 11.9307 32.7232C10.9644 32.173 10.5238 31.3879 10.5349 30.2852C10.5551 27.9411 10.5484 25.597 10.5372 23.2507C10.5327 22.1927 10.9622 21.4255 11.8926 20.8977C14.3105 19.5221 16.715 18.1264 19.1195 16.7284C19.3275 16.6076 19.4796 16.5875 19.6965 16.7172C20.5264 17.216 21.3719 17.6924 22.2554 18.2024C22.0876 18.3031 21.9601 18.3791 21.8304 18.4552C19.2268 19.9582 16.6278 21.4658 14.0175 22.9599C13.5903 23.2037 13.3912 23.5213 13.3957 24.0179C13.4091 25.8654 13.4114 27.713 13.3957 29.5605C13.3912 30.0705 13.5948 30.3948 14.0332 30.6453C16.7866 32.2199 19.5288 33.8125 22.28 35.3916C22.5126 35.5258 22.611 35.6645 22.6065 35.9418C22.5864 36.888 22.5998 37.8363 22.5998 38.8473L22.5953 38.8451ZM22.5953 33.553C22.356 33.4166 22.1838 33.3204 22.0116 33.2198C19.8285 31.9605 17.6477 30.6967 15.4602 29.4464C15.2231 29.3122 15.1359 29.1668 15.1381 28.8917C15.1538 27.4714 15.1471 26.0511 15.1426 24.6308C15.1426 24.4384 15.1717 24.3064 15.3618 24.1991C16.167 23.7495 16.9633 23.2798 17.7618 22.8212C17.8199 22.7877 17.8826 22.7631 17.9877 22.7116V24.3064C17.9877 25.1698 18.0011 26.0354 17.9832 26.8988C17.972 27.3909 18.1622 27.7241 18.5916 27.9657C19.8285 28.6636 21.0498 29.3883 22.2867 30.0839C22.5305 30.2203 22.6043 30.3724 22.5998 30.6408C22.5842 31.5847 22.5931 32.5308 22.5931 33.5508L22.5953 33.553ZM20.0746 14.91C19.6116 14.6371 19.2157 14.6393 18.7527 14.91C16.1581 16.4265 13.5523 17.9228 10.9487 19.4259C10.8391 19.4908 10.7251 19.5489 10.5305 19.6541C10.5998 18.6654 10.3873 17.7327 10.7251 16.8291C10.9085 16.3348 11.2529 15.9635 11.7092 15.6995C13.8811 14.4447 16.0507 13.1877 18.227 11.9396C19.0211 11.4833 19.8308 11.4945 20.6248 11.953C23.0964 13.3756 25.5657 14.8026 28.0306 16.2341C28.1357 16.2945 28.2677 16.4309 28.2677 16.5338C28.2856 17.5493 28.2788 18.567 28.2788 19.6563C27.3819 19.1396 26.5543 18.6609 25.7267 18.1823C23.8412 17.093 21.9512 16.0149 20.0746 14.91ZM37.4427 30.8779C37.3778 31.6764 36.9103 32.2423 36.2192 32.6404C33.5732 34.1614 30.9294 35.6913 28.2856 37.2168C27.4557 37.6954 26.6259 38.1741 25.7938 38.6527C25.6932 38.7109 25.5903 38.7601 25.4539 38.8317C25.4449 38.693 25.4337 38.5924 25.4337 38.4917C25.4337 37.6149 25.4382 36.7404 25.4293 35.8636C25.4293 35.6645 25.4762 35.5437 25.6596 35.4386C29.5157 33.2198 33.3696 30.9942 37.2212 28.7709C37.2794 28.7374 37.3443 28.7105 37.4539 28.6591C37.4539 29.4375 37.4986 30.1622 37.4427 30.8779ZM37.4628 25.3577C37.4561 26.2658 36.9663 26.9033 36.1901 27.3506C33.175 29.0841 30.1622 30.8265 27.1493 32.5666C26.5991 32.8842 26.0466 33.1996 25.4561 33.5396C25.4472 33.3897 25.436 33.2913 25.436 33.1907C25.436 32.3273 25.4449 31.4617 25.4293 30.5983C25.4248 30.3523 25.5075 30.2226 25.72 30.0995C28.46 28.5271 31.1911 26.9368 33.9355 25.3733C34.4231 25.096 34.6378 24.7538 34.6334 24.1812C34.6132 21.1974 34.6244 18.2136 34.6244 15.2298V14.7087C35.3402 15.1404 36.0112 15.496 36.624 15.9299C37.1832 16.3258 37.465 16.9253 37.4673 17.6164C37.4762 20.1976 37.4829 22.7788 37.465 25.3599L37.4628 25.3577Z" fill="%230D0D0D"></path><path fill-rule="evenodd" d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM24 2C11.8497 2 2 11.8497 2 24C2 36.1503 11.8497 46 24 46C36.1503 46 46 36.1503 46 24C46 11.8497 36.1503 2 24 2Z" fill="url(%23paint2_radial_6324_83922)"></path><path fill-rule="evenodd" d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM24 2C11.8497 2 2 11.8497 2 24C2 36.1503 11.8497 46 24 46C36.1503 46 46 36.1503 46 24C46 11.8497 36.1503 2 24 2Z" fill="url(%23paint3_radial_6324_83922)"></path><defs><radialGradient id="paint0_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.4442 13.3899) rotate(44.9817) scale(46.7487 99.1435)"><stop stop-color="%23A3EEF8"></stop><stop offset="0.177083" stop-color="%23A4DCF5"></stop><stop offset="0.380208" stop-color="%23A6AEEC"></stop><stop offset="1" stop-color="%23ECBEE1"></stop></radialGradient><radialGradient id="paint1_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.9515 43.7068) rotate(84.265) scale(24.2138 46.3215)"><stop stop-color="%23FCF5EE"></stop><stop offset="0.715135" stop-color="%23ECBEE1" stop-opacity="0"></stop></radialGradient><radialGradient id="paint2_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(12.7405 12.6825) rotate(44.9817) scale(49.8653 105.753)"><stop stop-color="%23A3EEF8"></stop><stop offset="0.177083" stop-color="%23A4DCF5"></stop><stop offset="0.380208" stop-color="%23A6AEEC"></stop><stop offset="1" stop-color="%23ECBEE1"></stop></radialGradient><radialGradient id="paint3_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26.0816 45.0206) rotate(84.265) scale(25.828 49.4096)"><stop stop-color="%23FCF5EE"></stop><stop offset="0.715135" stop-color="%23ECBEE1" stop-opacity="0"></stop></radialGradient></defs></g></svg>',name:"Immutable Passport",rdns:"com.immutable.passport",uuid:uuid.v4()};function Vt(n){if(typeof window>"u")return;let e=new CustomEvent("eip6963:announceProvider",{detail:Object.freeze(n)});window.dispatchEvent(e);let t=()=>window.dispatchEvent(e);window.addEventListener("eip6963:requestProvider",t);}var Un=n=>n.overrides?Ae.createConfig({basePath:n.overrides.imxPublicApiDomain}):n.baseConfig.environment===config.Environment.SANDBOX?Ae.imxApiConfig.getSandbox():Ae.imxApiConfig.getProduction(),Gn=n=>{if(n.overrides?.imxApiClients)return n.overrides.imxApiClients;let e=Un(n);return new Ae.ImxApiClients(e)},Fn=n=>{let e=new z(n),t=new N(e),r=new U(e,t),i=new M(e),a=new Ae.MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),s=new G(r,a),o=new Ae.MultiRollupApiClients(e.multiRollupConfig),c=new b,d=n.overrides?n.overrides.immutableXClient:new xClient.IMXClient({baseConfig:n.baseConfig}),l=new B({confirmationScreen:i,config:e,authManager:r,guardianApi:o.guardianApi}),p=Gn(n),u=new X({authManager:r,immutableXClient:d,magicTEESigner:s,passportEventEmitter:c,imxApiClients:p,guardianClient:l});return {config:e,authManager:r,magicTEESigner:s,confirmationScreen:i,embeddedLoginPrompt:t,immutableXClient:d,multiRollupApiClients:o,passportEventEmitter:c,passportImxProviderFactory:u,guardianClient:l}},ke=class{authManager;config;confirmationScreen;embeddedLoginPrompt;immutableXClient;magicTEESigner;multiRollupApiClients;passportImxProviderFactory;passportEventEmitter;guardianClient;constructor(e){let t=Fn(e);this.config=t.config,this.authManager=t.authManager,this.magicTEESigner=t.magicTEESigner,this.confirmationScreen=t.confirmationScreen,this.embeddedLoginPrompt=t.embeddedLoginPrompt,this.immutableXClient=t.immutableXClient,this.multiRollupApiClients=t.multiRollupApiClients,this.passportEventEmitter=t.passportEventEmitter,this.passportImxProviderFactory=t.passportImxProviderFactory,this.guardianClient=t.guardianClient,metrics.setPassportClientId(e.clientId),metrics.track("passport","initialise");}async connectImxSilent(){return h(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return h(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return h(async()=>{let t=null;try{t=await this.authManager.getUser();}catch{}let r=new de({passportEventEmitter:this.passportEventEmitter,authManager:this.authManager,config:this.config,multiRollupApiClients:this.multiRollupApiClients,guardianClient:this.guardianClient,ethSigner:this.magicTEESigner,user:t});return e?.announceProvider&&Vt({info:Ht,provider:r}),r},"connectEvm",!1)}async login(e){return h(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},i=null;try{i=await this.authManager.getUser();}catch(a){if(a instanceof Error&&!a.message.includes("Unknown or invalid refresh token")&&metrics.trackError("passport","login",a),t)throw a;S.warn("Failed to retrieve a cached user session",a);}return !i&&r?i=await this.authManager.forceUserRefresh():!i&&!t&&(e?.useRedirectFlow?await this.authManager.loginWithRedirect(e?.anonymousId,e?.directLoginOptions):i=await this.authManager.login(e?.anonymousId,e?.directLoginOptions)),i&&(metrics.identify({passportId:i.profile.sub}),this.passportEventEmitter.emit("loggedIn",i)),i?i.profile:null},"login")}async loginCallback(){await h(()=>this.authManager.loginCallback(),"loginCallback").then(e=>{e&&(metrics.identify({passportId:e.profile.sub}),this.passportEventEmitter.emit("loggedIn",e));});}loginWithPKCEFlow(e,t){return h(async()=>await this.authManager.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return h(async()=>{let r=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.passportEventEmitter.emit("loggedIn",r),r.profile},"loginWithPKCEFlowCallback")}async storeTokens(e){return h(async()=>{let t=await this.authManager.storeTokens(e);return this.passportEventEmitter.emit("loggedIn",t),t.profile},"storeTokens")}async logout(){return h(async()=>{await this.authManager.logout(),this.passportEventEmitter.emit("loggedOut");},"logout")}async getLogoutUrl(){return h(async()=>(await this.authManager.removeUser(),this.passportEventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()),"getLogoutUrl")}async logoutSilentCallback(e){return h(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback")}async getUserInfo(){return h(async()=>(await this.authManager.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return h(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return h(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1,!1)}async getLinkedAddresses(){return h(async()=>{let e=await this.authManager.getUser();if(!e?.profile.sub)return [];let t={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:t})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let t=metrics.trackFlow("passport","linkExternalWallet",!1),r=await this.authManager.getUser();if(!r)throw new g("User is not logged in","NOT_LOGGED_IN_ERROR");let i=_(r),a=k(r);if(!i&&!a)throw new g("User has not been registered","USER_NOT_REGISTERED_ERROR");let s={Authorization:`Bearer ${r.accessToken}`},o={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};try{return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:o},{headers:s})).data}}catch(c){if(c instanceof Error?metrics.trackError("passport","linkExternalWallet",c):t.addEvent("errored"),wt.isAxiosError(c)&&c.response){if(c.response.data&&le(c.response.data)){let{code:l,message:p}=c.response.data;switch(l){case"ALREADY_LINKED":throw new g(p,"LINK_WALLET_ALREADY_LINKED_ERROR");case"MAX_WALLETS_LINKED":throw new g(p,"LINK_WALLET_MAX_WALLETS_LINKED_ERROR");case"DUPLICATE_NONCE":throw new g(p,"LINK_WALLET_DUPLICATE_NONCE_ERROR");case"VALIDATION_ERROR":throw new g(p,"LINK_WALLET_VALIDATION_ERROR");default:throw new g(p,"LINK_WALLET_GENERIC_ERROR")}}else if(c.response.status)throw new g(`Link wallet request failed with status code ${c.response.status}`,"LINK_WALLET_GENERIC_ERROR")}let d="Link wallet request failed";throw c instanceof Error&&(d+=`: ${c.message}`),new g(d,"LINK_WALLET_GENERIC_ERROR")}finally{t.addEvent("End");}}};
438
+ )[]`,ve=i=>i.map(e=>({delegateCall:e.delegateCall===!0,revertOnError:e.revertOnError===!0,gasLimit:e.gasLimit??BigInt(0),target:e.to??ethers.ZeroAddress,value:e.value??BigInt(0),data:e.data??"0x"})),Zr=(i,e)=>{let t=ethers.AbiCoder.defaultAbiCoder().encode(["uint256",Rt],[i,e]);return ethers.keccak256(t)},Ct=i=>ethers.AbiCoder.defaultAbiCoder().encode([Rt],[i]),Kr=i=>i||0n,Xr=(i,e)=>{let t=BigInt(i)*2n**96n;return BigInt(e)+t},Y=async(i,e,t)=>{try{let r=new ethers.Contract(e,abi.walletContracts.mainModule.abi,i),n=Kr(t),a=await r.readNonce(n);if(typeof a=="bigint")return Xr(n,a);throw new Error("Unexpected result from contract.nonce() call.")}catch(r){if(ethers.isError(r,"BAD_DATA"))return BigInt(0);throw r}},_e=(i,e,t)=>ethers.solidityPacked(["string","uint256","address","bytes32"],[qr,i,e,t]),we=async(i,e,t,r,n)=>{let a=ve(i),s=Zr(e,a),o=_e(t,r,s),c=ethers.keccak256(o),d=ethers.getBytes(c),p=`${await n.signMessage(d)}${yt}`,u=core.v1.signature.encodeSignature({version:1,threshold:Wr,signers:[{isDynamic:!1,unrecovered:!0,weight:Et,signature:p}]}),f=new ethers.Interface(abi.walletContracts.mainModule.abi);return f.encodeFunctionData(f.getFunction("execute")??"",[a,e,u])},zr=i=>{let e=`0x0000${i}`;return core.v1.signature.decodeSignature(e)},Pe=(i,e,t)=>{let r=`${i}${yt}`,{signers:n}=zr(t),s=[...n,{isDynamic:!1,unrecovered:!0,weight:Et,signature:r,address:e}].sort((o,c)=>{let d=BigInt(o.address??0),l=BigInt(c.address??0);return d<=l?-1:d===l?0:1});return core.v1.signature.encodeSignature({version:1,threshold:$r,signers:s})},Tt=async(i,e,t,r,n)=>{let a={...i.types};delete a.EIP712Domain;let s=ethers.TypedDataEncoder.hash(i.domain,a,i.message),o=_e(t,r,s),c=ethers.keccak256(o),d=ethers.getBytes(c),l=await n.signMessage(d),p=await n.getAddress();return Pe(l,p,e)},vt=async(i,e,t,r)=>{let n=ethers.hashMessage(e),a=_e(i,r,n),s=ethers.keccak256(a),o=ethers.getBytes(s);return t.signMessage(o)},C=i=>`eip155:${i}`;var Q=class i{config;rpcProvider;authManager;constructor({config:e,rpcProvider:t,authManager:r}){this.config=e,this.rpcProvider=t,this.authManager=r;}static getResponsePreview(e){return e.length>100?`${e.substring(0,50)}...${e.substring(e.length-50)}`:e}async postToRelayer(e){let t={id:1,jsonrpc:"2.0",...e},r=await this.authManager.getUserZkEvm(),n=await fetch(`${this.config.relayerUrl}/v1/transactions`,{method:"POST",headers:{Authorization:`Bearer ${r.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await n.text();if(!n.ok){let o=i.getResponsePreview(a);throw new Error(`Relayer HTTP error: ${n.status}. Content: "${o}"`)}let s;try{s=JSON.parse(a);}catch(o){let c=i.getResponsePreview(a);throw new Error(`Relayer JSON parse error: ${o instanceof Error?o.message:"Unknown error"}. Content: "${c}"`)}if(s.error)throw new Error(s.error);return s}async ethSendTransaction(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),n={method:"eth_sendTransaction",params:[{to:e,data:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(n);return a}async imGetTransactionByHash(e){let t={method:"im_getTransactionByHash",params:[e]},{result:r}=await this.postToRelayer(t);return r}async imGetFeeOptions(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),n={method:"im_getFeeOptions",params:[{userAddress:e,data:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(n);return a}async imSignTypedData(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),n={method:"im_signTypedData",params:[{address:e,eip712Payload:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(n);return a}async imSign(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),n={method:"im_sign",params:[{address:e,message:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(n);return a}};var ee=(n=>(n[n.USER_REJECTED_REQUEST=4001]="USER_REJECTED_REQUEST",n[n.UNAUTHORIZED=4100]="UNAUTHORIZED",n[n.UNSUPPORTED_METHOD=4200]="UNSUPPORTED_METHOD",n[n.DISCONNECTED=4900]="DISCONNECTED",n))(ee||{}),w=(o=>(o[o.RPC_SERVER_ERROR=-32e3]="RPC_SERVER_ERROR",o[o.INVALID_REQUEST=-32600]="INVALID_REQUEST",o[o.METHOD_NOT_FOUND=-32601]="METHOD_NOT_FOUND",o[o.INVALID_PARAMS=-32602]="INVALID_PARAMS",o[o.INTERNAL_ERROR=-32603]="INTERNAL_ERROR",o[o.PARSE_ERROR=-32700]="PARSE_ERROR",o[o.TRANSACTION_REJECTED=-32003]="TRANSACTION_REJECTED",o))(w||{}),m=class extends Error{message;code;constructor(e,t){super(t),this.message=t,this.code=e;}};var jr="Only sign this message from Immutable Passport";async function _t({authManager:i,ethSigner:e,multiRollupApiClients:t,accessToken:r,rpcProvider:n,flow:a}){let s=e.getAddress();s.then(()=>a.addEvent("endGetAddress"));let o=toolkit.signRaw(jr,e);o.then(()=>a.addEvent("endSignRaw"));let c=n.getNetwork();c.then(()=>a.addEvent("endDetectNetwork"));let d=t.chainsApi.listChains();d.then(()=>a.addEvent("endListChains"));let[l,p,u,f]=await Promise.all([s,o,c,d]),v=C(Number(u.chainId)),y=f.data?.result?.find(I=>I.id===v)?.name;if(!y)throw new m(-32603,`Chain name does not exist on for chain id ${u.chainId}`);try{let I=await t.passportApi.createCounterfactualAddressV2({chainName:y,createCounterfactualAddressRequest:{ethereum_address:l,ethereum_signature:p}},{headers:{Authorization:`Bearer ${r}`}});return a.addEvent("endCreateCounterfactualAddress"),i.forceUserRefreshInBackground(),I.data.counterfactual_address}catch(I){throw new m(-32603,`Failed to create counterfactual address: ${I}`)}}var te="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",re=i=>BigInt(i).toString(),Qr=i=>{try{return i.map(e=>({delegateCall:e.delegateCall===!0,revertOnError:e.revertOnError===!0,gasLimit:e.gasLimit?re(e.gasLimit):"0",target:e.to??ethers.ZeroAddress,value:e.value?re(e.value):"0",data:e.data?e.data.toString():"0x"}))}catch(e){let t=e instanceof Error?e.message:String(e);throw new m(-32602,`Transaction failed to parsing: ${t}`)}},B=class{guardianApi;confirmationScreen;crossSdkBridgeEnabled;authManager;constructor({confirmationScreen:e,config:t,authManager:r,guardianApi:n}){this.confirmationScreen=e,this.crossSdkBridgeEnabled=t.crossSdkBridgeEnabled,this.guardianApi=n,this.authManager=r;}withConfirmationScreen(e){return t=>this.withConfirmationScreenTask(e)(t)()}withConfirmationScreenTask(e){return t=>async()=>{this.confirmationScreen.loading(e);try{return await t()}catch(r){throw r instanceof g&&r.type==="SERVICE_UNAVAILABLE_ERROR"?(await this.confirmationScreen.showServiceUnavailable(),r):(this.confirmationScreen.closeWindow(),r)}}}withDefaultConfirmationScreenTask(e){return this.withConfirmationScreenTask()(e)}async evaluateImxTransaction({payloadHash:e}){try{let t=()=>{this.confirmationScreen.closeWindow();},r=await this.authManager.getUserImx(),n={Authorization:`Bearer ${r.accessToken}`};if(!(await O(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:n}),{finallyFn:t})).data.id)throw new Error("Transaction doesn't exists");let s=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:n}),{confirmationRequired:o}=s.data;if(o){if(this.crossSdkBridgeEnabled)throw new Error(te);if(!(await this.confirmationScreen.requestConfirmation(e,r.imx.ethAddress,Ae__namespace.mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new Error("Transaction rejected by user")}else this.confirmationScreen.closeWindow();}catch(t){throw wt__default.default.isAxiosError(t)&&t.response?.status===403?new g("Service unavailable","SERVICE_UNAVAILABLE_ERROR"):t}}async evaluateEVMTransaction({chainId:e,nonce:t,metaTransactions:r}){let n=await this.authManager.getUserZkEvm(),a={Authorization:`Bearer ${n.accessToken}`},s=Qr(r);try{return (await this.guardianApi.evaluateTransaction({id:"evm",transactionEvaluationRequest:{chainType:"evm",chainId:e,transactionData:{nonce:t,userAddress:n.zkEvm.ethAddress,metaTransactions:s}}},{headers:a})).data}catch(o){if(wt__default.default.isAxiosError(o)&&o.response?.status===403)throw new g("Service unavailable","SERVICE_UNAVAILABLE_ERROR");let c=o instanceof Error?o.message:String(o);throw new m(-32603,`Transaction failed to validate with error: ${c}`)}}async validateEVMTransaction({chainId:e,nonce:t,metaTransactions:r,isBackgroundTransaction:n}){let a=await this.evaluateEVMTransaction({chainId:e,nonce:t,metaTransactions:r}),{confirmationRequired:s,transactionId:o}=a;if(s&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(s&&o){let c=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestConfirmation(o,c.zkEvm.ethAddress,Ae__namespace.mr.TransactionApprovalRequestChainTypeEnum.Evm,e)).confirmed)throw new m(-32003,"Transaction rejected by user")}else n||this.confirmationScreen.closeWindow();}async handleEIP712MessageEvaluation({chainID:e,payload:t}){try{let r=await this.authManager.getUserZkEvm();if(r===null)throw new m(4100,"User not logged in. Please log in first.");return (await this.guardianApi.evaluateMessage({messageEvaluationRequest:{chainID:e,payload:t}},{headers:{Authorization:`Bearer ${r.accessToken}`}})).data}catch(r){let n=r instanceof Error?r.message:String(r);throw new m(-32603,`Message failed to validate with error: ${n}`)}}async evaluateEIP712Message({chainID:e,payload:t}){let{messageId:r,confirmationRequired:n}=await this.handleEIP712MessageEvaluation({chainID:e,payload:t});if(n&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(n&&r){let a=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestMessageConfirmation(r,a.zkEvm.ethAddress,"eip712")).confirmed)throw new m(-32003,"Signature rejected by user")}else this.confirmationScreen.closeWindow();}async handleERC191MessageEvaluation({chainID:e,payload:t}){try{let r=await this.authManager.getUserZkEvm();if(r===null)throw new m(4100,"User not logged in. Please log in first.");return (await this.guardianApi.evaluateErc191Message({eRC191MessageEvaluationRequest:{chainID:C(Number(e)),payload:t}},{headers:{Authorization:`Bearer ${r.accessToken}`}})).data}catch(r){let n=r instanceof Error?r.message:String(r);throw new m(-32603,`Message failed to validate with error: ${n}`)}}async evaluateERC191Message({chainID:e,payload:t}){let{messageId:r,confirmationRequired:n}=await this.handleERC191MessageEvaluation({chainID:e,payload:t});if(n&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(n&&r){let a=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestMessageConfirmation(r,a.zkEvm.ethAddress,"erc191")).confirmed)throw new m(-32003,"Signature rejected by user")}else this.confirmationScreen.closeWindow();}};var en=30,tn=1e3,rn=async(i,e,t)=>{let r=ve([i]),n=Ct(r),a=await t.imGetFeeOptions(e,n);if(!a||!Array.isArray(a))throw new Error("Invalid fee options received from relayer");let s=a.find(o=>o.tokenSymbol==="IMX");if(!s)throw new Error("Failed to retrieve fees for IMX token");return s},nn=async(i,e,t,r,n)=>{if(!i.to)throw new m(-32602,'eth_sendTransaction requires a "to" field');let a={to:i.to.toString(),data:i.data,nonce:BigInt(0),value:i.value,revertOnError:!0},[s,o]=await Promise.all([Y(e,r,n),rn(a,r,t)]),c=[{...a,nonce:s}],d=BigInt(o.tokenPrice);return d!==BigInt(0)&&c.push({nonce:s,to:o.recipientAddress,value:d,revertOnError:!0}),c},ne=async(i,e,t)=>{let n=await O(async()=>{let a=await i.imGetTransactionByHash(e);if(a.status==="PENDING")throw new Error;return a},{retries:en,interval:tn,finalErr:new m(-32e3,"transaction hash not generated in time")});if(t.addEvent("endRetrieveRelayerTransaction"),!["SUBMITTED","SUCCESSFUL"].includes(n.status)){let a=`Transaction failed to submit with status ${n.status}.`;throw n.statusMessage&&(a+=` Error message: ${n.statusMessage}`),new m(-32e3,a)}return n},ie=async({transactionRequest:i,ethSigner:e,rpcProvider:t,guardianClient:r,relayerClient:n,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c})=>{let{chainId:d}=await t.getNetwork(),l=BigInt(d);s.addEvent("endDetectNetwork");let p=await nn(i,t,n,a,o);s.addEvent("endBuildMetaTransactions");let{nonce:u}=p[0];if(typeof u>"u")throw new Error("Failed to retrieve nonce from the smart wallet");let f=async()=>{await r.validateEVMTransaction({chainId:C(Number(d)),nonce:re(u),metaTransactions:p,isBackgroundTransaction:c}),s.addEvent("endValidateEVMTransaction");},v=async()=>{let Zt=await we(p,u,l,a,e);return s.addEvent("endGetSignedMetaTransactions"),Zt},[,y]=await Promise.all([f(),v()]),I=await n.ethSendTransaction(a,y);return s.addEvent("endRelayerSendTransaction"),{signedTransactions:y,relayerId:I,nonce:u}},an=async i=>{if(!i.to)throw new m(-32602,'im_signEjectionTransaction requires a "to" field');if(typeof i.nonce>"u")throw new m(-32602,'im_signEjectionTransaction requires a "nonce" field');if(!i.chainId)throw new m(-32602,'im_signEjectionTransaction requires a "chainId" field');return [{to:i.to.toString(),data:i.data,nonce:i.nonce??void 0,value:i.value,revertOnError:!0}]},Pt=async({transactionRequest:i,ethSigner:e,zkEvmAddress:t,flow:r})=>{let n=await an(i);r.addEvent("endBuildMetaTransactions");let a=await we(n,i.nonce,BigInt(i.chainId??0),t,e);return r.addEvent("endGetSignedMetaTransactions"),{to:t,data:a,chainId:C(Number(i.chainId??0))}};var Ie=async({params:i,ethSigner:e,rpcProvider:t,relayerClient:r,guardianClient:n,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c=!1})=>{let d=i[0],{relayerId:l}=await ie({transactionRequest:d,ethSigner:e,rpcProvider:t,guardianClient:n,relayerClient:r,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c}),{hash:p}=await ne(r,l,s);return p};var At=["types","domain","primaryType","message"],sn=i=>At.every(e=>e in i),on=(i,e)=>{let t;if(typeof i=="string")try{t=JSON.parse(i);}catch(n){throw new m(-32602,`Failed to parse typed data JSON: ${n}`)}else if(typeof i=="object")t=i;else throw new m(-32602,`Invalid typed data argument: ${i}`);if(!sn(t))throw new m(-32602,`Invalid typed data argument. The following properties are required: ${At.join(", ")}`);let r=t.domain?.chainId;if(r&&(typeof r=="string"&&(r.startsWith("0x")?t.domain.chainId=parseInt(r,16).toString():t.domain.chainId=parseInt(r,10).toString()),BigInt(t.domain.chainId??0)!==e))throw new m(-32602,`Invalid chainId, expected ${e}`);return t},It=async({params:i,method:e,ethSigner:t,rpcProvider:r,relayerClient:n,guardianClient:a,flow:s})=>{let o=i[0],c=i[1];if(!o||!c)throw new m(-32602,`${e} requires an address and a typed data JSON`);let{chainId:d}=await r.getNetwork(),l=on(c,d);s.addEvent("endDetectNetwork"),await a.evaluateEIP712Message({chainID:String(d),payload:l}),s.addEvent("endValidateMessage");let p=await n.imSignTypedData(o,l);s.addEvent("endRelayerSignTypedData");let u=await Tt(l,p,BigInt(d),o,t);return s.addEvent("getSignedTypedData"),u};var St=i=>{if(!i)return i;try{let e=ethers.stripZerosLeft(ethers.getBytes(i));return ethers.toUtf8String(e)}catch{return i}};var ae=async({params:i,ethSigner:e,zkEvmAddress:t,rpcProvider:r,guardianClient:n,relayerClient:a,flow:s})=>{let o=i[0],c=i[1];if(!c||!o)throw new m(-32602,"personal_sign requires an address and a message");if(c.toLowerCase()!==t.toLowerCase())throw new m(-32602,"personal_sign requires the signer to be the from address");let d=St(o),{chainId:l}=await r.getNetwork();s.addEvent("endDetectNetwork");let p=BigInt(l),u=vt(p,d,e,c);u.then(()=>s.addEvent("endEOASignature")),await n.evaluateERC191Message({chainID:l,payload:d}),s.addEvent("endEvaluateERC191Message");let[f,v]=await Promise.all([u,a.imSign(c,d)]);s.addEvent("endRelayerSign");let y=await e.getAddress();return s.addEvent("endGetEOAAddress"),Pe(f,y,v)};var mn="https://api.immutable.com",un="https://api.sandbox.immutable.com",gn="/v1/sdk/session-activity/check",hn=i=>{switch(i){case config.Environment.SANDBOX:return un;case config.Environment.PRODUCTION:return mn;default:throw new Error("Environment not supported")}},se,bt=i=>{se||(se=wt__default.default.create({baseURL:hn(i)}));};async function kt(i){if(!se)throw new Error("Client not initialised");return se.get(gn,{params:i}).then(e=>e.data).catch(e=>{if(e.response.status!==404)throw e})}function Mt(i,e){return (...t)=>{try{let r=i(...t);return r instanceof Promise?r.catch(n=>(n instanceof Error&&metrics.trackError("passport","sessionActivityError",n),e)):r}catch(r){return r instanceof Error&&metrics.trackError("passport","sessionActivityError",r),e}}}var{getItem:Nt,setItem:Se}=metrics.utils.localStorage,Oe="sessionActivitySendCount",Lt="sessionActivityDate",be={},A={},oe={},Dt=()=>{A=Nt(Oe)||{};let i=Nt(Lt),e=new Date,t=e.getFullYear(),r=`${e.getMonth()+1}`.padStart(2,"0"),n=`${e.getDate()}`.padStart(2,"0"),a=`${t}-${r}-${n}`;(!i||i!==a)&&(A={}),Se(Lt,a),Se(Oe,A);};Dt();var Cn=i=>{Dt(),A[i]||(A[i]=0),A[i]++,Se(Oe,A),be[i]=0;},Tn=async i=>new Promise(e=>{setTimeout(e,i*1e3);}),vn=async i=>{let e=i.flow||metrics.trackFlow("passport","sendSessionActivity"),t=i.passportClient;if(!t)throw e.addEvent("No Passport Client ID"),new Error("No Passport Client ID provided");if(oe[t])return;oe[t]=!0;let{sendTransaction:r,environment:n}=i;if(!r)throw new Error("No sendTransaction function provided");if(!n)throw new Error("No environment provided");bt(n);let a=i.walletAddress;if(!a)throw e.addEvent("No Passport Wallet Address"),new Error("No wallet address");let s;try{if(s=await kt({clientId:t,wallet:a,checkCount:be[t]||0,sendCount:A[t]||0}),be[t]++,!s)return}catch(o){throw e.addEvent("Failed to fetch details"),new Error("Failed to get details",{cause:o})}if(s&&s.contractAddress&&s.functionName){let c=new ethers.Interface([`function ${s.functionName}()`]).encodeFunctionData(s.functionName),d=s.contractAddress;try{e.addEvent("Start Sending Transaction");let l=await i.sendTransaction([{to:d,from:a,data:c}],e);Cn(t),e.addEvent("Transaction Sent",{tx:l});}catch(l){e.addEvent("Failed to send Transaction");let p=new Error("Failed to send transaction",{cause:l});metrics.trackError("passport","sessionActivityError",p,{flowId:e.details.flowId});}}s&&s.delay&&s.delay>0&&(e.addEvent("Delaying Transaction",{delay:s.delay}),await Tn(s.delay),setTimeout(()=>{e.addEvent("Retrying after Delay"),oe[t]=!1,Ut({...i,flow:e});},0));},Ut=i=>Mt(vn)(i).then(()=>{oe[i.passportClient]=!1;}),Gt=Ut;var Ft=async({params:i,ethSigner:e,rpcProvider:t,relayerClient:r,guardianClient:n,zkEvmAddress:a,flow:s})=>{let o={to:a,value:0},{relayerId:c}=await ie({transactionRequest:o,ethSigner:e,rpcProvider:t,guardianClient:n,relayerClient:r,zkEvmAddress:a,flow:s});return n.withConfirmationScreen()(async()=>{let d=await ae({params:i,ethSigner:e,zkEvmAddress:a,rpcProvider:t,guardianClient:n,relayerClient:r,flow:s});return await ne(r,c,s),d})};var Bt=async({params:i,ethSigner:e,zkEvmAddress:t,flow:r})=>{if(!i||i.length!==1)throw new m(-32602,"im_signEjectionTransaction requires a singular param (hash)");let n=i[0];return await Pt({transactionRequest:n,ethSigner:e,zkEvmAddress:t,flow:r})};var ce=i=>"zkEvm"in i,de=class{#s;#t;#i;#r;#n;#e;#l;#c;#a;isPassport=!0;constructor({authManager:e,config:t,multiRollupApiClients:r,passportEventEmitter:n,guardianClient:a,ethSigner:s,user:o}){this.#s=e,this.#t=t,this.#n=a,this.#r=n,this.#a=s,this.#e=new ethers.JsonRpcProvider(this.#t.zkEvmRpcUrl,void 0,{staticNetwork:!0}),this.#c=new Q({config:this.#t,rpcProvider:this.#e,authManager:this.#s}),this.#l=r,this.#i=new b,o&&ce(o)&&this.#d(o.zkEvm.ethAddress),n.on("loggedIn",c=>{ce(c)&&this.#d(c.zkEvm.ethAddress);}),n.on("loggedOut",this.#p),n.on("accountsRequested",Gt);}#p=()=>{this.#i.emit("accountsChanged",[]);};async#d(e,t){let r=BigInt(1),n=async(a,s)=>await Ie({params:a,ethSigner:this.#a,guardianClient:this.#n,rpcProvider:this.#e,relayerClient:this.#c,zkEvmAddress:e,flow:s,nonceSpace:r,isBackgroundTransaction:!0});this.#r.emit("accountsRequested",{environment:this.#t.baseConfig.environment,sendTransaction:n,walletAddress:e,passportClient:t||this.#t.oidcConfiguration.clientId});}async#o(){try{let e=await this.#s.getUser();return e&&ce(e)?e.zkEvm.ethAddress:void 0}catch{return}}async#m(e){switch(e.method){case"eth_requestAccounts":{let t=await this.#o();if(t)return [t];let r=metrics.trackFlow("passport","ethRequestAccounts");try{let n=await this.#s.getUserOrLogin();r.addEvent("endGetUserOrLogin");let a;return ce(n)?a=n.zkEvm.ethAddress:(r.addEvent("startUserRegistration"),a=await _t({ethSigner:this.#a,authManager:this.#s,multiRollupApiClients:this.#l,accessToken:n.accessToken,rpcProvider:this.#e,flow:r}),r.addEvent("endUserRegistration")),this.#i.emit("accountsChanged",[a]),metrics.identify({passportId:n.profile.sub}),this.#d(a),[a]}catch(n){throw n instanceof Error?metrics.trackError("passport","ethRequestAccounts",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"eth_sendTransaction":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=metrics.trackFlow("passport","ethSendTransaction");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>await Ie({params:e.params||[],ethSigner:this.#a,guardianClient:this.#n,rpcProvider:this.#e,relayerClient:this.#c,zkEvmAddress:t,flow:r}))}catch(n){throw n instanceof Error?metrics.trackError("passport","eth_sendTransaction",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"eth_accounts":{let t=await this.#o();return t?[t]:[]}case"personal_sign":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=metrics.trackFlow("passport","personalSign");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>this.#t.forceScwDeployBeforeMessageSignature&&!(await Y(this.#e,t)>BigInt(0))?await Ft({params:e.params||[],zkEvmAddress:t,ethSigner:this.#a,rpcProvider:this.#e,guardianClient:this.#n,relayerClient:this.#c,flow:r}):await ae({params:e.params||[],zkEvmAddress:t,ethSigner:this.#a,rpcProvider:this.#e,guardianClient:this.#n,relayerClient:this.#c,flow:r}))}catch(n){throw n instanceof Error?metrics.trackError("passport","personal_sign",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"eth_signTypedData":case"eth_signTypedData_v4":{if(!await this.#o())throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=metrics.trackFlow("passport","ethSignTypedDataV4");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>await It({method:e.method,params:e.params||[],ethSigner:this.#a,rpcProvider:this.#e,relayerClient:this.#c,guardianClient:this.#n,flow:r}))}catch(n){throw n instanceof Error?metrics.trackError("passport","eth_signTypedData",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"eth_chainId":{let{chainId:t}=await this.#e.getNetwork();return ethers.toBeHex(t)}case"eth_getBalance":case"eth_getCode":case"eth_getTransactionCount":{let[t,r]=e.params||[];return this.#e.send(e.method,[t,r||"latest"])}case"eth_getStorageAt":{let[t,r,n]=e.params||[];return this.#e.send(e.method,[t,r,n||"latest"])}case"eth_call":case"eth_estimateGas":{let[t,r]=e.params||[];return this.#e.send(e.method,[t,r||"latest"])}case"eth_gasPrice":case"eth_blockNumber":case"eth_getBlockByHash":case"eth_getBlockByNumber":case"eth_getTransactionByHash":case"eth_getTransactionReceipt":return this.#e.send(e.method,e.params||[]);case"im_signEjectionTransaction":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=metrics.trackFlow("passport","imSignEjectionTransaction");try{return await Bt({params:e.params||[],ethSigner:this.#a,zkEvmAddress:t,flow:r})}catch(n){throw n instanceof Error?metrics.trackError("passport","imSignEjectionTransaction",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"im_addSessionActivity":{let[t]=e.params||[],r=await this.#o();return r&&this.#d(r,t),null}default:throw new m(4200,"Method not supported")}}async request(e){try{return this.#m(e)}catch(t){throw t instanceof m?t:t instanceof Error?new m(-32603,t.message):new m(-32603,"Internal error")}}on(e,t){this.#i.on(e,t);}removeListener(e,t){this.#i.removeListener(e,t);}};var Ht={icon:'data:image/svg+xml,<svg viewBox="0 0 48 48" class="SvgIcon undefined Logo Logo--PassportSymbolOutlined css-1dn9atd" xmlns="http://www.w3.org/2000/svg"><g data-testid="undefined__g"><circle cx="24" cy="24" r="22.5" fill="url(%23paint0_radial_6324_83922)"></circle><circle cx="24" cy="24" r="22.5" fill="url(%23paint1_radial_6324_83922)"></circle><path d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM23.0718 9.16608C23.7383 8.83951 24.4406 8.86188 25.087 9.2287C27.3282 10.5059 29.5627 11.7942 31.786 13.096C32.5018 13.5165 32.8686 14.1897 32.8708 15.0173C32.8843 17.9184 32.8798 20.8171 32.8708 23.7182C32.8708 23.8255 32.8015 23.9821 32.7143 24.0335C31.8531 24.548 30.9808 25.0423 30.0347 25.5881V25.1318C30.0347 22.148 30.0257 19.1664 30.0414 16.1827C30.0436 15.6101 29.8468 15.241 29.339 14.9525C26.7377 13.474 24.1499 11.9687 21.5575 10.4723C21.4457 10.4075 21.3361 10.3381 21.1661 10.2352C21.8326 9.85722 22.4321 9.47698 23.0673 9.16608H23.0718ZM22.5953 38.8451C22.45 38.7713 22.3426 38.7198 22.2375 38.6595C18.8041 36.68 15.3752 34.687 11.9307 32.7232C10.9644 32.173 10.5238 31.3879 10.5349 30.2852C10.5551 27.9411 10.5484 25.597 10.5372 23.2507C10.5327 22.1927 10.9622 21.4255 11.8926 20.8977C14.3105 19.5221 16.715 18.1264 19.1195 16.7284C19.3275 16.6076 19.4796 16.5875 19.6965 16.7172C20.5264 17.216 21.3719 17.6924 22.2554 18.2024C22.0876 18.3031 21.9601 18.3791 21.8304 18.4552C19.2268 19.9582 16.6278 21.4658 14.0175 22.9599C13.5903 23.2037 13.3912 23.5213 13.3957 24.0179C13.4091 25.8654 13.4114 27.713 13.3957 29.5605C13.3912 30.0705 13.5948 30.3948 14.0332 30.6453C16.7866 32.2199 19.5288 33.8125 22.28 35.3916C22.5126 35.5258 22.611 35.6645 22.6065 35.9418C22.5864 36.888 22.5998 37.8363 22.5998 38.8473L22.5953 38.8451ZM22.5953 33.553C22.356 33.4166 22.1838 33.3204 22.0116 33.2198C19.8285 31.9605 17.6477 30.6967 15.4602 29.4464C15.2231 29.3122 15.1359 29.1668 15.1381 28.8917C15.1538 27.4714 15.1471 26.0511 15.1426 24.6308C15.1426 24.4384 15.1717 24.3064 15.3618 24.1991C16.167 23.7495 16.9633 23.2798 17.7618 22.8212C17.8199 22.7877 17.8826 22.7631 17.9877 22.7116V24.3064C17.9877 25.1698 18.0011 26.0354 17.9832 26.8988C17.972 27.3909 18.1622 27.7241 18.5916 27.9657C19.8285 28.6636 21.0498 29.3883 22.2867 30.0839C22.5305 30.2203 22.6043 30.3724 22.5998 30.6408C22.5842 31.5847 22.5931 32.5308 22.5931 33.5508L22.5953 33.553ZM20.0746 14.91C19.6116 14.6371 19.2157 14.6393 18.7527 14.91C16.1581 16.4265 13.5523 17.9228 10.9487 19.4259C10.8391 19.4908 10.7251 19.5489 10.5305 19.6541C10.5998 18.6654 10.3873 17.7327 10.7251 16.8291C10.9085 16.3348 11.2529 15.9635 11.7092 15.6995C13.8811 14.4447 16.0507 13.1877 18.227 11.9396C19.0211 11.4833 19.8308 11.4945 20.6248 11.953C23.0964 13.3756 25.5657 14.8026 28.0306 16.2341C28.1357 16.2945 28.2677 16.4309 28.2677 16.5338C28.2856 17.5493 28.2788 18.567 28.2788 19.6563C27.3819 19.1396 26.5543 18.6609 25.7267 18.1823C23.8412 17.093 21.9512 16.0149 20.0746 14.91ZM37.4427 30.8779C37.3778 31.6764 36.9103 32.2423 36.2192 32.6404C33.5732 34.1614 30.9294 35.6913 28.2856 37.2168C27.4557 37.6954 26.6259 38.1741 25.7938 38.6527C25.6932 38.7109 25.5903 38.7601 25.4539 38.8317C25.4449 38.693 25.4337 38.5924 25.4337 38.4917C25.4337 37.6149 25.4382 36.7404 25.4293 35.8636C25.4293 35.6645 25.4762 35.5437 25.6596 35.4386C29.5157 33.2198 33.3696 30.9942 37.2212 28.7709C37.2794 28.7374 37.3443 28.7105 37.4539 28.6591C37.4539 29.4375 37.4986 30.1622 37.4427 30.8779ZM37.4628 25.3577C37.4561 26.2658 36.9663 26.9033 36.1901 27.3506C33.175 29.0841 30.1622 30.8265 27.1493 32.5666C26.5991 32.8842 26.0466 33.1996 25.4561 33.5396C25.4472 33.3897 25.436 33.2913 25.436 33.1907C25.436 32.3273 25.4449 31.4617 25.4293 30.5983C25.4248 30.3523 25.5075 30.2226 25.72 30.0995C28.46 28.5271 31.1911 26.9368 33.9355 25.3733C34.4231 25.096 34.6378 24.7538 34.6334 24.1812C34.6132 21.1974 34.6244 18.2136 34.6244 15.2298V14.7087C35.3402 15.1404 36.0112 15.496 36.624 15.9299C37.1832 16.3258 37.465 16.9253 37.4673 17.6164C37.4762 20.1976 37.4829 22.7788 37.465 25.3599L37.4628 25.3577Z" fill="%230D0D0D"></path><path fill-rule="evenodd" d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM24 2C11.8497 2 2 11.8497 2 24C2 36.1503 11.8497 46 24 46C36.1503 46 46 36.1503 46 24C46 11.8497 36.1503 2 24 2Z" fill="url(%23paint2_radial_6324_83922)"></path><path fill-rule="evenodd" d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM24 2C11.8497 2 2 11.8497 2 24C2 36.1503 11.8497 46 24 46C36.1503 46 46 36.1503 46 24C46 11.8497 36.1503 2 24 2Z" fill="url(%23paint3_radial_6324_83922)"></path><defs><radialGradient id="paint0_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.4442 13.3899) rotate(44.9817) scale(46.7487 99.1435)"><stop stop-color="%23A3EEF8"></stop><stop offset="0.177083" stop-color="%23A4DCF5"></stop><stop offset="0.380208" stop-color="%23A6AEEC"></stop><stop offset="1" stop-color="%23ECBEE1"></stop></radialGradient><radialGradient id="paint1_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.9515 43.7068) rotate(84.265) scale(24.2138 46.3215)"><stop stop-color="%23FCF5EE"></stop><stop offset="0.715135" stop-color="%23ECBEE1" stop-opacity="0"></stop></radialGradient><radialGradient id="paint2_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(12.7405 12.6825) rotate(44.9817) scale(49.8653 105.753)"><stop stop-color="%23A3EEF8"></stop><stop offset="0.177083" stop-color="%23A4DCF5"></stop><stop offset="0.380208" stop-color="%23A6AEEC"></stop><stop offset="1" stop-color="%23ECBEE1"></stop></radialGradient><radialGradient id="paint3_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26.0816 45.0206) rotate(84.265) scale(25.828 49.4096)"><stop stop-color="%23FCF5EE"></stop><stop offset="0.715135" stop-color="%23ECBEE1" stop-opacity="0"></stop></radialGradient></defs></g></svg>',name:"Immutable Passport",rdns:"com.immutable.passport",uuid:uuid.v4()};function Vt(i){if(typeof window>"u")return;let e=new CustomEvent("eip6963:announceProvider",{detail:Object.freeze(i)});window.dispatchEvent(e);let t=()=>window.dispatchEvent(e);window.addEventListener("eip6963:requestProvider",t);}var Un=i=>i.overrides?Ae.createConfig({basePath:i.overrides.imxPublicApiDomain}):i.baseConfig.environment===config.Environment.SANDBOX?Ae.imxApiConfig.getSandbox():Ae.imxApiConfig.getProduction(),Gn=i=>{if(i.overrides?.imxApiClients)return i.overrides.imxApiClients;let e=Un(i);return new Ae.ImxApiClients(e)},Fn=i=>{let e=new z(i),t=new N(e),r=new U(e,t),n=new M(e),a=new Ae.MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),s=new G(r,a),o=new Ae.MultiRollupApiClients(e.multiRollupConfig),c=new b,d=i.overrides?i.overrides.immutableXClient:new xClient.IMXClient({baseConfig:i.baseConfig}),l=new B({confirmationScreen:n,config:e,authManager:r,guardianApi:o.guardianApi}),p=Gn(i),u=new X({authManager:r,immutableXClient:d,magicTEESigner:s,passportEventEmitter:c,imxApiClients:p,guardianClient:l});return {config:e,authManager:r,magicTEESigner:s,confirmationScreen:n,embeddedLoginPrompt:t,immutableXClient:d,multiRollupApiClients:o,passportEventEmitter:c,passportImxProviderFactory:u,guardianClient:l}},ke=class{authManager;config;confirmationScreen;embeddedLoginPrompt;immutableXClient;magicTEESigner;multiRollupApiClients;passportImxProviderFactory;passportEventEmitter;guardianClient;constructor(e){let t=Fn(e);this.config=t.config,this.authManager=t.authManager,this.magicTEESigner=t.magicTEESigner,this.confirmationScreen=t.confirmationScreen,this.embeddedLoginPrompt=t.embeddedLoginPrompt,this.immutableXClient=t.immutableXClient,this.multiRollupApiClients=t.multiRollupApiClients,this.passportEventEmitter=t.passportEventEmitter,this.passportImxProviderFactory=t.passportImxProviderFactory,this.guardianClient=t.guardianClient,metrics.setPassportClientId(e.clientId),metrics.track("passport","initialise");}async connectImxSilent(){return h(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return h(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return h(async()=>{let t=null;try{t=await this.authManager.getUser();}catch{}let r=new de({passportEventEmitter:this.passportEventEmitter,authManager:this.authManager,config:this.config,multiRollupApiClients:this.multiRollupApiClients,guardianClient:this.guardianClient,ethSigner:this.magicTEESigner,user:t});return e?.announceProvider&&Vt({info:Ht,provider:r}),r},"connectEvm",!1)}async login(e){return h(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},n=null;try{n=await this.authManager.getUser();}catch(a){if(a instanceof Error&&!a.message.includes("Unknown or invalid refresh token")&&metrics.trackError("passport","login",a),t)throw a;S.warn("Failed to retrieve a cached user session",a);}return !n&&r?n=await this.authManager.forceUserRefresh():!n&&!t&&(e?.useRedirectFlow?await this.authManager.loginWithRedirect(e?.anonymousId,e?.directLoginOptions):n=await this.authManager.login(e?.anonymousId,e?.directLoginOptions)),n&&(metrics.identify({passportId:n.profile.sub}),this.passportEventEmitter.emit("loggedIn",n)),n?n.profile:null},"login")}async loginCallback(){await h(()=>this.authManager.loginCallback(),"loginCallback").then(e=>{e&&(metrics.identify({passportId:e.profile.sub}),this.passportEventEmitter.emit("loggedIn",e));});}loginWithPKCEFlow(e,t){return h(async()=>await this.authManager.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return h(async()=>{let r=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.passportEventEmitter.emit("loggedIn",r),r.profile},"loginWithPKCEFlowCallback")}async storeTokens(e){return h(async()=>{let t=await this.authManager.storeTokens(e);return this.passportEventEmitter.emit("loggedIn",t),t.profile},"storeTokens")}async logout(){return h(async()=>{await this.authManager.logout(),this.passportEventEmitter.emit("loggedOut");},"logout")}async getLogoutUrl(){return h(async()=>(await this.authManager.removeUser(),this.passportEventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()),"getLogoutUrl")}async logoutSilentCallback(e){return h(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback")}async getUserInfo(){return h(async()=>(await this.authManager.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return h(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return h(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1,!1)}async getLinkedAddresses(){return h(async()=>{let e=await this.authManager.getUser();if(!e?.profile.sub)return [];let t={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:t})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let t=metrics.trackFlow("passport","linkExternalWallet",!1),r=await this.authManager.getUser();if(!r)throw new g("User is not logged in","NOT_LOGGED_IN_ERROR");let n=_(r),a=k(r);if(!n&&!a)throw new g("User has not been registered","USER_NOT_REGISTERED_ERROR");let s={Authorization:`Bearer ${r.accessToken}`},o={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};try{return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:o},{headers:s})).data}}catch(c){if(c instanceof Error?metrics.trackError("passport","linkExternalWallet",c):t.addEvent("errored"),wt.isAxiosError(c)&&c.response){if(c.response.data&&le(c.response.data)){let{code:l,message:p}=c.response.data;switch(l){case"ALREADY_LINKED":throw new g(p,"LINK_WALLET_ALREADY_LINKED_ERROR");case"MAX_WALLETS_LINKED":throw new g(p,"LINK_WALLET_MAX_WALLETS_LINKED_ERROR");case"DUPLICATE_NONCE":throw new g(p,"LINK_WALLET_DUPLICATE_NONCE_ERROR");case"VALIDATION_ERROR":throw new g(p,"LINK_WALLET_VALIDATION_ERROR");default:throw new g(p,"LINK_WALLET_GENERIC_ERROR")}}else if(c.response.status)throw new g(`Link wallet request failed with status code ${c.response.status}`,"LINK_WALLET_GENERIC_ERROR")}let d="Link wallet request failed";throw c instanceof Error&&(d+=`: ${c.message}`),new g(d,"LINK_WALLET_GENERIC_ERROR")}finally{t.addEvent("End");}}};
439
439
 
440
440
  exports.JsonRpcError = m;
441
441
  exports.MarketingConsentStatus = De;
@@ -14,7 +14,7 @@ import { walletContracts } from '@0xsequence/abi';
14
14
  import { v1 } from '@0xsequence/core';
15
15
  import { v4 } from 'uuid';
16
16
 
17
- function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;constructor(e,t){super(e),this.type=t;}},E=async(n,e)=>{try{return await n()}catch(t){let r;throw t instanceof g&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new g(t.message,t.type):(isAxiosError(t)&&t.response?.data&&le(t.response.data)?r=t.response.data.message:r=t.message,new g(r,e))}};var xe="pkce_state",Me="pkce_verifier",zt=3600,L=class{isTokenValid(e){try{let r=$e(e).exp??0,i=Date.now()/1e3+zt;return r>i}catch{return !1}}savePKCEData(e){localStorage.setItem(xe,e.state),localStorage.setItem(Me,e.verifier);}getPKCEData(){let e=localStorage.getItem(xe),t=localStorage.getItem(Me);return e&&t?{state:e,verifier:t}:null}};var Jt=(...n)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...n);},S={warn:Jt};function Ne(n){try{let e=$e(n),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function Le(n){let{id_token:e,access_token:t}=n;return !t||!e?!0:Ne(t)||Ne(e)}var k=n=>!!n.zkEvm,_=n=>!!n.imx,De=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(De||{});var x="passport-overlay",D="passport-overlay-contents",W=`${x}-close`,$=`${x}-try-again`,Ue=`
17
+ function le(i){return "code"in i&&"message"in i}var g=class extends Error{type;constructor(e,t){super(e),this.type=t;}},E=async(i,e)=>{try{return await i()}catch(t){let r;throw t instanceof g&&t.type==="SERVICE_UNAVAILABLE_ERROR"?new g(t.message,t.type):(isAxiosError(t)&&t.response?.data&&le(t.response.data)?r=t.response.data.message:r=t.message,new g(r,e))}};var xe="pkce_state",Me="pkce_verifier",zt=3600,L=class{isTokenValid(e){try{let r=$e(e).exp??0,n=Date.now()/1e3+zt;return r>n}catch{return !1}}savePKCEData(e){localStorage.setItem(xe,e.state),localStorage.setItem(Me,e.verifier);}getPKCEData(){let e=localStorage.getItem(xe),t=localStorage.getItem(Me);return e&&t?{state:e,verifier:t}:null}};var Jt=(...i)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...i);},S={warn:Jt};function Ne(i){try{let e=$e(i),t=Math.floor(Date.now()/1e3);return e.exp?e.exp<=t+30:!0}catch{return !0}}function Le(i){let{id_token:e,access_token:t}=i;return !t||!e?!0:Ne(t)||Ne(e)}var k=i=>!!i.zkEvm,_=i=>!!i.imx,De=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t))(De||{});var x="passport-overlay",D="passport-overlay-contents",W=`${x}-close`,$=`${x}-try-again`,Ue=`
18
18
  <svg
19
19
  viewBox="0 0 20 20"
20
20
  fill="none"
@@ -296,7 +296,7 @@ function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
296
296
  Secure pop-up not showing?<br />We'll help you re-launch
297
297
  </p>
298
298
  ${Fe()}
299
- `,Be=n=>`
299
+ `,Be=i=>`
300
300
  <div
301
301
  id="${x}"
302
302
  style="
@@ -331,7 +331,7 @@ function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
331
331
  max-width: 400px !important;
332
332
  "
333
333
  >
334
- ${n??""}
334
+ ${i??""}
335
335
  </div>
336
336
  </div>
337
337
  `,He=()=>`
@@ -363,13 +363,13 @@ function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
363
363
  "
364
364
  />
365
365
  </div>
366
- `;function q({id:n,href:e,rel:t,crossOrigin:r}){let i=`${x}-${n}`;if(!document.getElementById(i)){let a=document.createElement("link");a.id=i,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={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ur="/v2/logout",gr="/im-logged-out",hr="/authorize",fr=n=>n?gr:ur,Er=n=>{let{authenticationDomain:e,oidcConfiguration:t}=n,r;n.crossSdkBridgeEnabled?r=new Z("ImmutableSDKPassport",tr.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let i=new WebStorageStateStore({store:r}),a=new URL(fr(n.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:i,revokeTokenTypes:["refresh_token"],extraQueryParams:{...t.audience?{audience:t.audience}:{}}}};function me(n){return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function yr(n){let t=new TextEncoder().encode(n);return await window.crypto.subtle.digest("SHA-256",t)}var U=class n{userManager;deviceCredentialsManager;config;embeddedLoginPrompt;logoutMode;refreshingPromise=null;constructor(e,t){this.config=e,this.userManager=new UserManager(Er(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 i={...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&&(i.direct=t.directLoginMethod,i.email=a);}else i.direct=t.directLoginMethod;t.marketingConsentStatus&&(i.marketingConsent=t.marketingConsentStatus);}return r&&(i.im_passport_trace_id=r),i}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,i;if(t)r=t;else if(!this.config.popupOverlayOptions.disableHeadlessLoginPromptOverlay){let{imPassportTraceId:o,...c}=await this.embeddedLoginPrompt.displayEmbeddedLoginPrompt(e);r=c,i=o;}let a=window.crypto.randomUUID(),s=async()=>{let o=this.buildExtraQueryParams(e,r,i);return this.userManager.signinPopup({extraQueryParams:o,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a})};return new Promise((o,c)=>{s().then(d=>{o(n.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 u=await s();p.remove(),o(n.mapOidcUserToDomainModel(u));}}catch(u){p.remove(),c(u);}},()=>{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()}async loginCallback(){return E(async()=>{let e=await this.userManager.signinCallback();if(e)return n.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e,t){let r=me(window.crypto.getRandomValues(new Uint8Array(32))),i=me(await yr(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(hr,this.config.authenticationDomain);if(l.searchParams.set("response_type","code"),l.searchParams.set("code_challenge",i),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 i=await this.getPKCEToken(e,r.verifier),a=n.mapDeviceTokenResponseToOidcUser(i),s=n.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},mr)).data}async storeTokens(e){return E(async()=>{let t=n.mapDeviceTokenResponseToOidcUser(e),r=n.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(n.mapOidcUserToDomainModel(r));return}e(null);}catch(r){let i="AUTHENTICATION_ERROR",a="Failed to refresh token",s=!0;if(r instanceof ErrorTimeout?(i="SILENT_LOGIN_ERROR",a=`${a}: ${r.message}`,s=!1):r instanceof ErrorResponse?(i="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,i));}finally{this.refreshingPromise=null;}}),this.refreshingPromise)}async getUser(e=t=>!0){if(this.refreshingPromise){let r=await this.refreshingPromise;return r&&e(r)?r:null}let t=await this.userManager.getUser();if(!t)return null;if(!Le(t)){let r=n.mapOidcUserToDomainModel(t);if(r&&e(r))return r}if(t.refresh_token){let r=await this.refreshTokenAndUpdatePromise();if(r&&e(r))return r}return null}async 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(n,e,t=!0,r=!0)=>{let i=trackFlow("passport",e,t);try{return await n(i)}catch(a){throw a instanceof Error?trackError("passport",e,a,{flowId:i.details.flowId}):i.addEvent("errored"),a}finally{r&&i.addEvent("End");}};var Ke="ETH",G=class n 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 i=e||await this.getUserOrThrow(),a=n.getHeaders(i);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:i.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(i){r(i);}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(),i=await n.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:i});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 n=>E(async()=>{let e=await generateLegacyStarkPrivateKey(n);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function ze({user:n,starkSigner:e,request:t,exchangesApi:r}){return E(async()=>{let{ethAddress:i}=n.imx,a=t.amount,s=await r.getExchangeSignableTransfer({id:t.transactionID,getSignableTransferRequest:{sender:i,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 ${n.accessToken}`},u=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:p});return {sent_signature:u?.data.sent_signature,status:u?.data.status?.toString(),time:u?.data.time,transfer_id:u?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var je="ERC721";async function Ye({starkSigner:n,user:e,request:t,ordersApi:r,guardianClient:i}){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 i.evaluateImxTransaction({payloadHash:l.data.payload_hash});let{payload_hash:p}=l.data,u=await n.signMessage(p),f=l.data,v={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:u,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:n,starkSigner:e,request:t,ordersApi:r,guardianClient:i}){return E(async()=>{let a={order_id:t.order_id},s={Authorization:`Bearer ${n.accessToken}`},o=await r.getSignableCancelOrderV3({getSignableCancelOrderRequest:a},{headers:s});await i.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:n,starkSigner:e,imxApiClients:t},r){return E(async()=>{let[i,a]=await Promise.all([n.getAddress(),e.getAddress()]),s=await t.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:i,stark_key:a}}),{signable_message:o,payload_hash:c}=s.data,[d,l]=await Promise.all([signRaw(o,n),e.signMessage(c)]);return (await t.usersApi.registerPassportUserV2({authorization:`Bearer ${r}`,registerPassportUserRequest:{eth_signature:d,ether_key:i,stark_signature:l,stark_key:a}})).data},"USER_REGISTRATION_ERROR")}async function et({request:n,tradesApi:e,user:t,starkSigner:r,guardianClient:i}){return E(async()=>{let{ethAddress:a}=t.imx,s={expiration_timestamp:n.expiration_timestamp,fees:n.fees,order_id:n.order_id,user:a},o={Authorization:`Bearer ${t.accessToken}`},c=await e.getSignableTrade({getSignableTradeRequest:s},{headers:o});await i.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,l=await r.signMessage(d),{data:p}=c,u={createTradeRequest:{include_fees:!0,fees:n?.fees,stark_signature:l,order_id:n?.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(u,{headers:o});return f},"CREATE_TRADE_ERROR")}var rt="ERC721";async function nt({request:n,transfersApi:e,starkSigner:t,user:r,guardianClient:i}){return E(async()=>{let a=n.type===rt?"1":n.amount,s={sender:r.imx.ethAddress,token:convertToSignableToken(n),amount:a,receiver:n.receiver},o={Authorization:`Bearer ${r.accessToken}`},c=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:o});await i.evaluateImxTransaction({payloadHash:c.data.payload_hash});let d=c.data,{payload_hash:l}=d,p=await t.signMessage(l),u=await t.getAddress(),v={createTransferRequest:{sender_stark_key:d.sender_stark_key||u,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:n,starkSigner:e,request:t,transfersApi:r,guardianClient:i}){return E(async()=>{let{ethAddress:a}=n.imx,s=t.map(u=>({amount:"1",token:convertToSignableToken({type:rt,tokenId:u.tokenId,tokenAddress:u.tokenAddress}),receiver:u.receiver})),o={Authorization:`Bearer ${n.accessToken}`},c=await r.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}},{headers:o});await i.evaluateImxTransaction({payloadHash:c.data.signable_responses[0]?.payload_hash});let d=await Promise.all(c.data.signable_responses.map(async u=>{let f=await e.signMessage(u.payload_hash);return {sender_vault_id:u.sender_vault_id,receiver_stark_key:u.receiver_stark_key,receiver_vault_id:u.receiver_vault_id,asset_id:u.asset_id,amount:u.amount,nonce:u.nonce,expiration_timestamp:u.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 Ir=n=>new Promise(e=>{setTimeout(()=>e(),n);}),O=async(n,e)=>{let{retries:t=3,interval:r=1e3,finalErr:i=Error("Retry failed"),finallyFn:a=()=>{}}=e||{};try{return await n()}catch{return t<=0?Promise.reject(i):(await Ir(r),O(n,{retries:t-1,finalErr:i,finallyFn:a}))}finally{t<=0&&a();}};async function at(n){await O(async()=>{let e=await n.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function ge(n,e,t,r,i){return E(async()=>{try{let a=await ue({ethSigner:n,starkSigner:e,imxApiClients:i},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:i,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=i,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 ze({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:i,imxApiClients:a,guardianClient:s}){this.authManager=e,this.immutableXClient=t,this.magicTEESigner=r,this.passportEventEmitter=i,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=(n,e,t)=>{let r=e.map(i=>!n[i]&&i).filter(i=>i).join(", ");if(r!==""){let i=t?`${t} - ${r} cannot be null`:`${r} cannot be null`;throw new g(i,"INVALID_CONFIGURATION")}},z=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:i,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 J=({url:n,title:e,width:t,height:r})=>{let i=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(n,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={headers:{"Content-Type":"application/x-www-form-urlencoded"}},ur="/v2/logout",gr="/im-logged-out",hr="/authorize",fr=i=>i?gr:ur,Er=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(fr(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 yr(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(Er(e)),this.deviceCredentialsManager=new L,this.embeddedLoginPrompt=t,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t,r;if(e.id_token){let a=$e(e.id_token);t=a?.passport,a?.username&&(r=a?.username);}let n={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname,username:r}};return t?.imx_eth_address&&(n.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(n.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),n};static mapDeviceTokenResponseToOidcUser=e=>{let t=$e(e.id_token),r=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}}),{username:n}=t;return n&&(r.profile.username=n),r};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);return this.userManager.signinPopup({extraQueryParams:o,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a})};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 u=await s();p.remove(),o(i.mapOidcUserToDomainModel(u));}}catch(u){p.remove(),c(u);}},()=>{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()}async loginCallback(){return E(async()=>{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 yr(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(hr,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},mr)).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 ze({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}`},u=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:p});return {sent_signature:u?.data.sent_signature,status:u?.data.status?.toString(),time:u?.data.time,transfer_id:u?.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,u=await i.signMessage(p),f=l.data,v={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:u,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,u={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(u,{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),u=await t.getAddress(),v={createTransferRequest:{sender_stark_key:d.sender_stark_key||u,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(u=>({amount:"1",token:convertToSignableToken({type:rt,tokenId:u.tokenId,tokenAddress:u.tokenAddress}),receiver:u.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 u=>{let f=await e.signMessage(u.payload_hash);return {sender_vault_id:u.sender_vault_id,receiver_stark_key:u.receiver_stark_key,receiver_vault_id:u.receiver_vault_id,asset_id:u.asset_id,amount:u.amount,nonce:u.nonce,expiration_timestamp:u.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 Ir=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 Ir(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 ze({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")}},z=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 J=({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},
370
370
  top=${a},
371
- left=${i}
372
- `);if(!s)throw new Error("Failed to open confirmation screen");return s.focus(),s};var fe="Confirm this transaction",Ee=720,ye=480,pt=1e3;var M=class{config;confirmationWindow;popupOptions;overlay;overlayClosed;timer;constructor(e){this.config=e,this.overlayClosed=!1;}getHref(e,t){let r=`${this.config.passportDomain}/transaction-confirmation/${e}`;if(t){let i=t?Object.keys(t).map(a=>`${a}=${t[a]}`).join("&"):"";r=`${r}?${i}`;}return r}requestConfirmation(e,t,r,i){return new Promise((a,s)=>{let o=({data:d,origin:l})=>{if(!(l!==this.config.passportDomain||d.eventType!==F))switch(d.messageType){case"confirmation_window_ready":{this.confirmationWindow?.postMessage({eventType:F,messageType:"confirmation_start"},this.config.passportDomain);break}case"transaction_confirmed":{this.closeWindow(),a({confirmed:!0});break}case"transaction_rejected":{this.closeWindow(),a({confirmed:!1});break}case"transaction_error":{this.closeWindow(),s(new Error("Error during transaction confirmation"));break}default:this.closeWindow(),s(new Error("Unsupported message type"));}},c="";r===Ae.mr.TransactionApprovalRequestChainTypeEnum.Starkex?c=this.getHref("transaction",{transactionId:e,etherAddress:t,chainType:r}):c=this.getHref("zkevm/transaction",{transactionID:e,etherAddress:t,chainType:r,chainID:i}),window.addEventListener("message",o),this.showConfirmationScreen(c,o,a);})}requestMessageConfirmation(e,t,r){return new Promise((i,a)=>{let s=({data:c,origin:d})=>{if(!(d!==this.config.passportDomain||c.eventType!==F))switch(c.messageType){case"confirmation_window_ready":{this.confirmationWindow?.postMessage({eventType:F,messageType:"confirmation_start"},this.config.passportDomain);break}case"message_confirmed":{this.closeWindow(),i({confirmed:!0});break}case"message_rejected":{this.closeWindow(),i({confirmed:!1});break}case"message_error":{this.closeWindow(),a(new Error("Error during message confirmation"));break}default:this.closeWindow(),a(new Error("Unsupported message type"));}};window.addEventListener("message",s);let o=this.getHref("zkevm/message",{messageID:e,etherAddress:t,...r?{messageType:r}:{}});this.showConfirmationScreen(o,s,i);})}showServiceUnavailable(){return new Promise((e,t)=>{this.showConfirmationScreen(this.getHref("unavailable"),()=>{},()=>{this.closeWindow(),t(new Error("Service unavailable"));});})}loading(e){if(!this.config.crossSdkBridgeEnabled){this.popupOptions=e;try{this.confirmationWindow=J({url:this.getHref("loading"),title:fe,width:e?.width||ye,height:e?.height||Ee}),this.overlay=new P(this.config.popupOverlayOptions);}catch(t){let r=t instanceof Error?t.message:String(t);trackError("passport","confirmationPopupDenied",new Error(r)),this.overlay=new P(this.config.popupOverlayOptions,!0);}this.overlay.append(()=>{try{this.confirmationWindow?.close(),this.confirmationWindow=J({url:this.getHref("loading"),title:fe,width:this.popupOptions?.width||ye,height:this.popupOptions?.height||Ee});}catch{}},()=>{this.overlayClosed=!0,this.closeWindow();});}}closeWindow(){this.confirmationWindow?.close(),this.overlay?.remove(),this.overlay=void 0;}showConfirmationScreen(e,t,r){if(this.confirmationWindow&&(this.confirmationWindow.location.href=e),!this.overlay){this.overlayClosed=!1,r({confirmed:!1});return}let i=()=>{(this.confirmationWindow?.closed||this.overlayClosed)&&(clearInterval(this.timer),window.removeEventListener("message",t),r({confirmed:!1}),this.overlayClosed=!1,this.confirmationWindow=void 0);};this.timer=setInterval(i,pt),this.overlay.update(()=>this.recreateConfirmationWindow(e,i));}recreateConfirmationWindow(e,t){try{clearInterval(this.timer),this.confirmationWindow?.close(),this.confirmationWindow=J({url:e,title:fe,width:this.popupOptions?.width||ye,height:this.popupOptions?.height||Ee}),this.timer=setInterval(t,pt);}catch{}}};var T=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let r=document.createElement("div");r.innerHTML=He(),document.body.insertAdjacentElement("beforeend",r);let i=document.querySelector(`#${D}`);i&&i.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var xr=660,Mr=440,Nr="16px",ut="passport-embedded-login-keyframes",gt="passport-embedded-login-iframe",N=class n{config;constructor(e){this.config=e;}getHref=e=>{let t=`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${getDetail(Detail.RUNTIME_ID)}`;return e&&(t+=`&third_party_a_id=${e}`),t};static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(ut))return;let e=document.createElement("style");e.id=ut,e.textContent=`
371
+ left=${n}
372
+ `);if(!s)throw new Error("Failed to open confirmation screen");return s.focus(),s};var fe="Confirm this transaction",Ee=720,ye=480,pt=1e3;var M=class{config;confirmationWindow;popupOptions;overlay;overlayClosed;timer;constructor(e){this.config=e,this.overlayClosed=!1;}getHref(e,t){let r=`${this.config.passportDomain}/transaction-confirmation/${e}`;if(t){let n=t?Object.keys(t).map(a=>`${a}=${t[a]}`).join("&"):"";r=`${r}?${n}`;}return r}requestConfirmation(e,t,r,n){return new Promise((a,s)=>{let o=({data:d,origin:l})=>{if(!(l!==this.config.passportDomain||d.eventType!==F))switch(d.messageType){case"confirmation_window_ready":{this.confirmationWindow?.postMessage({eventType:F,messageType:"confirmation_start"},this.config.passportDomain);break}case"transaction_confirmed":{this.closeWindow(),a({confirmed:!0});break}case"transaction_rejected":{this.closeWindow(),a({confirmed:!1});break}case"transaction_error":{this.closeWindow(),s(new Error("Error during transaction confirmation"));break}default:this.closeWindow(),s(new Error("Unsupported message type"));}},c="";r===Ae.mr.TransactionApprovalRequestChainTypeEnum.Starkex?c=this.getHref("transaction",{transactionId:e,etherAddress:t,chainType:r}):c=this.getHref("zkevm/transaction",{transactionID:e,etherAddress:t,chainType:r,chainID:n}),window.addEventListener("message",o),this.showConfirmationScreen(c,o,a);})}requestMessageConfirmation(e,t,r){return new Promise((n,a)=>{let s=({data:c,origin:d})=>{if(!(d!==this.config.passportDomain||c.eventType!==F))switch(c.messageType){case"confirmation_window_ready":{this.confirmationWindow?.postMessage({eventType:F,messageType:"confirmation_start"},this.config.passportDomain);break}case"message_confirmed":{this.closeWindow(),n({confirmed:!0});break}case"message_rejected":{this.closeWindow(),n({confirmed:!1});break}case"message_error":{this.closeWindow(),a(new Error("Error during message confirmation"));break}default:this.closeWindow(),a(new Error("Unsupported message type"));}};window.addEventListener("message",s);let o=this.getHref("zkevm/message",{messageID:e,etherAddress:t,...r?{messageType:r}:{}});this.showConfirmationScreen(o,s,n);})}showServiceUnavailable(){return new Promise((e,t)=>{this.showConfirmationScreen(this.getHref("unavailable"),()=>{},()=>{this.closeWindow(),t(new Error("Service unavailable"));});})}loading(e){if(!this.config.crossSdkBridgeEnabled){this.popupOptions=e;try{this.confirmationWindow=J({url:this.getHref("loading"),title:fe,width:e?.width||ye,height:e?.height||Ee}),this.overlay=new P(this.config.popupOverlayOptions);}catch(t){let r=t instanceof Error?t.message:String(t);trackError("passport","confirmationPopupDenied",new Error(r)),this.overlay=new P(this.config.popupOverlayOptions,!0);}this.overlay.append(()=>{try{this.confirmationWindow?.close(),this.confirmationWindow=J({url:this.getHref("loading"),title:fe,width:this.popupOptions?.width||ye,height:this.popupOptions?.height||Ee});}catch{}},()=>{this.overlayClosed=!0,this.closeWindow();});}}closeWindow(){this.confirmationWindow?.close(),this.overlay?.remove(),this.overlay=void 0;}showConfirmationScreen(e,t,r){if(this.confirmationWindow&&(this.confirmationWindow.location.href=e),!this.overlay){this.overlayClosed=!1,r({confirmed:!1});return}let n=()=>{(this.confirmationWindow?.closed||this.overlayClosed)&&(clearInterval(this.timer),window.removeEventListener("message",t),r({confirmed:!1}),this.overlayClosed=!1,this.confirmationWindow=void 0);};this.timer=setInterval(n,pt),this.overlay.update(()=>this.recreateConfirmationWindow(e,n));}recreateConfirmationWindow(e,t){try{clearInterval(this.timer),this.confirmationWindow?.close(),this.confirmationWindow=J({url:e,title:fe,width:this.popupOptions?.width||ye,height:this.popupOptions?.height||Ee}),this.timer=setInterval(t,pt);}catch{}}};var T=class{static overlay;static onCloseListener;static closeButton;static remove(){this.onCloseListener&&this.closeButton?.removeEventListener?.("click",this.onCloseListener),this.overlay?.remove(),this.closeButton=void 0,this.onCloseListener=void 0,this.overlay=void 0;}static appendOverlay(e,t){if(!this.overlay){let r=document.createElement("div");r.innerHTML=He(),document.body.insertAdjacentElement("beforeend",r);let n=document.querySelector(`#${D}`);n&&n.appendChild(e),r.addEventListener("click",t),this.overlay=r;}}};var xr=660,Mr=440,Nr="16px",ut="passport-embedded-login-keyframes",gt="passport-embedded-login-iframe",N=class i{config;constructor(e){this.config=e;}getHref=e=>{let t=`${this.config.authenticationDomain}/im-embedded-login-prompt?client_id=${this.config.oidcConfiguration.clientId}&rid=${getDetail(Detail.RUNTIME_ID)}`;return e&&(t+=`&third_party_a_id=${e}`),t};static appendIFrameStylesIfNeeded=()=>{if(document.getElementById(ut))return;let e=document.createElement("style");e.id=ut,e.textContent=`
373
373
  @keyframes passportEmbeddedLoginPromptPopBounceIn {
374
374
  0% {
375
375
  opacity: 0.5;
@@ -402,13 +402,13 @@ function le(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
402
402
  opacity: 1;
403
403
  }
404
404
  }
405
- `,document.head.appendChild(e);};getEmbeddedLoginIFrame=e=>{let t=document.createElement("iframe");return t.id=gt,t.src=this.getHref(e),t.style.height="100vh",t.style.width="100vw",t.style.maxHeight=`${xr}px`,t.style.maxWidth=`${Mr}px`,t.style.borderRadius=Nr,t.style.opacity="0",t.style.transform="scale(0.6)",t.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",n.appendIFrameStylesIfNeeded(),t};displayEmbeddedLoginPrompt(e){return new Promise((t,r)=>{let i=this.getEmbeddedLoginIFrame(e),a=({data:s,origin:o})=>{if(!(o!==this.config.authenticationDomain||s.eventType!==lt))switch(s.messageType){case"login_method_selected":{let c=s.payload;window.removeEventListener("message",a),T.remove(),t(c);break}case"login_prompt_error":{window.removeEventListener("message",a),T.remove(),r(new Error("Error during embedded login prompt",{cause:s.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",a),T.remove(),r(new Error("Popup closed by user"));break}default:window.removeEventListener("message",a),T.remove(),r(new Error(`Unsupported message type: ${s.messageType}`));break}};window.addEventListener("message",a),T.appendOverlay(i,()=>{window.removeEventListener("message",a),T.remove(),r(new Error("Popup closed by user"));});})}};var Re=(e=>(e.ACCOUNTS_CHANGED="accountsChanged",e))(Re||{});var b=class{emitter=new EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var Et=1,Wr=1,$r=2,yt="02",qr="",Rt=`tuple(
405
+ `,document.head.appendChild(e);};getEmbeddedLoginIFrame=e=>{let t=document.createElement("iframe");return t.id=gt,t.src=this.getHref(e),t.style.height="100vh",t.style.width="100vw",t.style.maxHeight=`${xr}px`,t.style.maxWidth=`${Mr}px`,t.style.borderRadius=Nr,t.style.opacity="0",t.style.transform="scale(0.6)",t.style.animation="passportEmbeddedLoginPromptPopBounceIn 1s ease forwards",i.appendIFrameStylesIfNeeded(),t};displayEmbeddedLoginPrompt(e){return new Promise((t,r)=>{let n=this.getEmbeddedLoginIFrame(e),a=({data:s,origin:o})=>{if(!(o!==this.config.authenticationDomain||s.eventType!==lt))switch(s.messageType){case"login_method_selected":{let c=s.payload;window.removeEventListener("message",a),T.remove(),t(c);break}case"login_prompt_error":{window.removeEventListener("message",a),T.remove(),r(new Error("Error during embedded login prompt",{cause:s.payload}));break}case"login_prompt_closed":{window.removeEventListener("message",a),T.remove(),r(new Error("Popup closed by user"));break}default:window.removeEventListener("message",a),T.remove(),r(new Error(`Unsupported message type: ${s.messageType}`));break}};window.addEventListener("message",a),T.appendOverlay(n,()=>{window.removeEventListener("message",a),T.remove(),r(new Error("Popup closed by user"));});})}};var Re=(e=>(e.ACCOUNTS_CHANGED="accountsChanged",e))(Re||{});var b=class{emitter=new EventEmitter;emit(e,...t){this.emitter.emit(e,...t);}on(e,t){this.emitter.on(e,t);}removeListener(e,t){this.emitter.removeListener(e,t);}};var Et=1,Wr=1,$r=2,yt="02",qr="",Rt=`tuple(
406
406
  bool delegateCall,
407
407
  bool revertOnError,
408
408
  uint256 gasLimit,
409
409
  address target,
410
410
  uint256 value,
411
411
  bytes data
412
- )[]`,ve=n=>n.map(e=>({delegateCall:e.delegateCall===!0,revertOnError:e.revertOnError===!0,gasLimit:e.gasLimit??BigInt(0),target:e.to??ZeroAddress,value:e.value??BigInt(0),data:e.data??"0x"})),Zr=(n,e)=>{let t=AbiCoder.defaultAbiCoder().encode(["uint256",Rt],[n,e]);return keccak256(t)},Ct=n=>AbiCoder.defaultAbiCoder().encode([Rt],[n]),Kr=n=>n||0n,Xr=(n,e)=>{let t=BigInt(n)*2n**96n;return BigInt(e)+t},Y=async(n,e,t)=>{try{let r=new Contract(e,walletContracts.mainModule.abi,n),i=Kr(t),a=await r.readNonce(i);if(typeof a=="bigint")return Xr(i,a);throw new Error("Unexpected result from contract.nonce() call.")}catch(r){if(isError(r,"BAD_DATA"))return BigInt(0);throw r}},_e=(n,e,t)=>solidityPacked(["string","uint256","address","bytes32"],[qr,n,e,t]),we=async(n,e,t,r,i)=>{let a=ve(n),s=Zr(e,a),o=_e(t,r,s),c=keccak256(o),d=getBytes(c),p=`${await i.signMessage(d)}${yt}`,u=v1.signature.encodeSignature({version:1,threshold:Wr,signers:[{isDynamic:!1,unrecovered:!0,weight:Et,signature:p}]}),f=new Interface(walletContracts.mainModule.abi);return f.encodeFunctionData(f.getFunction("execute")??"",[a,e,u])},zr=n=>{let e=`0x0000${n}`;return v1.signature.decodeSignature(e)},Pe=(n,e,t)=>{let r=`${n}${yt}`,{signers:i}=zr(t),s=[...i,{isDynamic:!1,unrecovered:!0,weight:Et,signature:r,address:e}].sort((o,c)=>{let d=BigInt(o.address??0),l=BigInt(c.address??0);return d<=l?-1:d===l?0:1});return v1.signature.encodeSignature({version:1,threshold:$r,signers:s})},Tt=async(n,e,t,r,i)=>{let a={...n.types};delete a.EIP712Domain;let s=TypedDataEncoder.hash(n.domain,a,n.message),o=_e(t,r,s),c=keccak256(o),d=getBytes(c),l=await i.signMessage(d),p=await i.getAddress();return Pe(l,p,e)},vt=async(n,e,t,r)=>{let i=hashMessage(e),a=_e(n,r,i),s=keccak256(a),o=getBytes(s);return t.signMessage(o)},C=n=>`eip155:${n}`;var Q=class n{config;rpcProvider;authManager;constructor({config:e,rpcProvider:t,authManager:r}){this.config=e,this.rpcProvider=t,this.authManager=r;}static getResponsePreview(e){return e.length>100?`${e.substring(0,50)}...${e.substring(e.length-50)}`:e}async postToRelayer(e){let t={id:1,jsonrpc:"2.0",...e},r=await this.authManager.getUserZkEvm(),i=await fetch(`${this.config.relayerUrl}/v1/transactions`,{method:"POST",headers:{Authorization:`Bearer ${r.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await i.text();if(!i.ok){let o=n.getResponsePreview(a);throw new Error(`Relayer HTTP error: ${i.status}. Content: "${o}"`)}let s;try{s=JSON.parse(a);}catch(o){let c=n.getResponsePreview(a);throw new Error(`Relayer JSON parse error: ${o instanceof Error?o.message:"Unknown error"}. Content: "${c}"`)}if(s.error)throw new Error(s.error);return s}async ethSendTransaction(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),i={method:"eth_sendTransaction",params:[{to:e,data:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(i);return a}async imGetTransactionByHash(e){let t={method:"im_getTransactionByHash",params:[e]},{result:r}=await this.postToRelayer(t);return r}async imGetFeeOptions(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),i={method:"im_getFeeOptions",params:[{userAddress:e,data:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(i);return a}async imSignTypedData(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),i={method:"im_signTypedData",params:[{address:e,eip712Payload:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(i);return a}async imSign(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),i={method:"im_sign",params:[{address:e,message:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(i);return a}};var ee=(i=>(i[i.USER_REJECTED_REQUEST=4001]="USER_REJECTED_REQUEST",i[i.UNAUTHORIZED=4100]="UNAUTHORIZED",i[i.UNSUPPORTED_METHOD=4200]="UNSUPPORTED_METHOD",i[i.DISCONNECTED=4900]="DISCONNECTED",i))(ee||{}),w=(o=>(o[o.RPC_SERVER_ERROR=-32e3]="RPC_SERVER_ERROR",o[o.INVALID_REQUEST=-32600]="INVALID_REQUEST",o[o.METHOD_NOT_FOUND=-32601]="METHOD_NOT_FOUND",o[o.INVALID_PARAMS=-32602]="INVALID_PARAMS",o[o.INTERNAL_ERROR=-32603]="INTERNAL_ERROR",o[o.PARSE_ERROR=-32700]="PARSE_ERROR",o[o.TRANSACTION_REJECTED=-32003]="TRANSACTION_REJECTED",o))(w||{}),m=class extends Error{message;code;constructor(e,t){super(t),this.message=t,this.code=e;}};var jr="Only sign this message from Immutable Passport";async function _t({authManager:n,ethSigner:e,multiRollupApiClients:t,accessToken:r,rpcProvider:i,flow:a}){let s=e.getAddress();s.then(()=>a.addEvent("endGetAddress"));let o=signRaw(jr,e);o.then(()=>a.addEvent("endSignRaw"));let c=i.getNetwork();c.then(()=>a.addEvent("endDetectNetwork"));let d=t.chainsApi.listChains();d.then(()=>a.addEvent("endListChains"));let[l,p,u,f]=await Promise.all([s,o,c,d]),v=C(Number(u.chainId)),y=f.data?.result?.find(I=>I.id===v)?.name;if(!y)throw new m(-32603,`Chain name does not exist on for chain id ${u.chainId}`);try{let I=await t.passportApi.createCounterfactualAddressV2({chainName:y,createCounterfactualAddressRequest:{ethereum_address:l,ethereum_signature:p}},{headers:{Authorization:`Bearer ${r}`}});return a.addEvent("endCreateCounterfactualAddress"),n.forceUserRefreshInBackground(),I.data.counterfactual_address}catch(I){throw new m(-32603,`Failed to create counterfactual address: ${I}`)}}var te="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",re=n=>BigInt(n).toString(),Qr=n=>{try{return n.map(e=>({delegateCall:e.delegateCall===!0,revertOnError:e.revertOnError===!0,gasLimit:e.gasLimit?re(e.gasLimit):"0",target:e.to??ZeroAddress,value:e.value?re(e.value):"0",data:e.data?e.data.toString():"0x"}))}catch(e){let t=e instanceof Error?e.message:String(e);throw new m(-32602,`Transaction failed to parsing: ${t}`)}},B=class{guardianApi;confirmationScreen;crossSdkBridgeEnabled;authManager;constructor({confirmationScreen:e,config:t,authManager:r,guardianApi:i}){this.confirmationScreen=e,this.crossSdkBridgeEnabled=t.crossSdkBridgeEnabled,this.guardianApi=i,this.authManager=r;}withConfirmationScreen(e){return t=>this.withConfirmationScreenTask(e)(t)()}withConfirmationScreenTask(e){return t=>async()=>{this.confirmationScreen.loading(e);try{return await t()}catch(r){throw r instanceof g&&r.type==="SERVICE_UNAVAILABLE_ERROR"?(await this.confirmationScreen.showServiceUnavailable(),r):(this.confirmationScreen.closeWindow(),r)}}}withDefaultConfirmationScreenTask(e){return this.withConfirmationScreenTask()(e)}async evaluateImxTransaction({payloadHash:e}){try{let t=()=>{this.confirmationScreen.closeWindow();},r=await this.authManager.getUserImx(),i={Authorization:`Bearer ${r.accessToken}`};if(!(await O(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:i}),{finallyFn:t})).data.id)throw new Error("Transaction doesn't exists");let s=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:i}),{confirmationRequired:o}=s.data;if(o){if(this.crossSdkBridgeEnabled)throw new Error(te);if(!(await this.confirmationScreen.requestConfirmation(e,r.imx.ethAddress,Ae.mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new Error("Transaction rejected by user")}else this.confirmationScreen.closeWindow();}catch(t){throw wt.isAxiosError(t)&&t.response?.status===403?new g("Service unavailable","SERVICE_UNAVAILABLE_ERROR"):t}}async evaluateEVMTransaction({chainId:e,nonce:t,metaTransactions:r}){let i=await this.authManager.getUserZkEvm(),a={Authorization:`Bearer ${i.accessToken}`},s=Qr(r);try{return (await this.guardianApi.evaluateTransaction({id:"evm",transactionEvaluationRequest:{chainType:"evm",chainId:e,transactionData:{nonce:t,userAddress:i.zkEvm.ethAddress,metaTransactions:s}}},{headers:a})).data}catch(o){if(wt.isAxiosError(o)&&o.response?.status===403)throw new g("Service unavailable","SERVICE_UNAVAILABLE_ERROR");let c=o instanceof Error?o.message:String(o);throw new m(-32603,`Transaction failed to validate with error: ${c}`)}}async validateEVMTransaction({chainId:e,nonce:t,metaTransactions:r,isBackgroundTransaction:i}){let a=await this.evaluateEVMTransaction({chainId:e,nonce:t,metaTransactions:r}),{confirmationRequired:s,transactionId:o}=a;if(s&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(s&&o){let c=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestConfirmation(o,c.zkEvm.ethAddress,Ae.mr.TransactionApprovalRequestChainTypeEnum.Evm,e)).confirmed)throw new m(-32003,"Transaction rejected by user")}else i||this.confirmationScreen.closeWindow();}async handleEIP712MessageEvaluation({chainID:e,payload:t}){try{let r=await this.authManager.getUserZkEvm();if(r===null)throw new m(4100,"User not logged in. Please log in first.");return (await this.guardianApi.evaluateMessage({messageEvaluationRequest:{chainID:e,payload:t}},{headers:{Authorization:`Bearer ${r.accessToken}`}})).data}catch(r){let i=r instanceof Error?r.message:String(r);throw new m(-32603,`Message failed to validate with error: ${i}`)}}async evaluateEIP712Message({chainID:e,payload:t}){let{messageId:r,confirmationRequired:i}=await this.handleEIP712MessageEvaluation({chainID:e,payload:t});if(i&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(i&&r){let a=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestMessageConfirmation(r,a.zkEvm.ethAddress,"eip712")).confirmed)throw new m(-32003,"Signature rejected by user")}else this.confirmationScreen.closeWindow();}async handleERC191MessageEvaluation({chainID:e,payload:t}){try{let r=await this.authManager.getUserZkEvm();if(r===null)throw new m(4100,"User not logged in. Please log in first.");return (await this.guardianApi.evaluateErc191Message({eRC191MessageEvaluationRequest:{chainID:C(Number(e)),payload:t}},{headers:{Authorization:`Bearer ${r.accessToken}`}})).data}catch(r){let i=r instanceof Error?r.message:String(r);throw new m(-32603,`Message failed to validate with error: ${i}`)}}async evaluateERC191Message({chainID:e,payload:t}){let{messageId:r,confirmationRequired:i}=await this.handleERC191MessageEvaluation({chainID:e,payload:t});if(i&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(i&&r){let a=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestMessageConfirmation(r,a.zkEvm.ethAddress,"erc191")).confirmed)throw new m(-32003,"Signature rejected by user")}else this.confirmationScreen.closeWindow();}};var en=30,tn=1e3,rn=async(n,e,t)=>{let r=ve([n]),i=Ct(r),a=await t.imGetFeeOptions(e,i);if(!a||!Array.isArray(a))throw new Error("Invalid fee options received from relayer");let s=a.find(o=>o.tokenSymbol==="IMX");if(!s)throw new Error("Failed to retrieve fees for IMX token");return s},nn=async(n,e,t,r,i)=>{if(!n.to)throw new m(-32602,'eth_sendTransaction requires a "to" field');let a={to:n.to.toString(),data:n.data,nonce:BigInt(0),value:n.value,revertOnError:!0},[s,o]=await Promise.all([Y(e,r,i),rn(a,r,t)]),c=[{...a,nonce:s}],d=BigInt(o.tokenPrice);return d!==BigInt(0)&&c.push({nonce:s,to:o.recipientAddress,value:d,revertOnError:!0}),c},ne=async(n,e,t)=>{let i=await O(async()=>{let a=await n.imGetTransactionByHash(e);if(a.status==="PENDING")throw new Error;return a},{retries:en,interval:tn,finalErr:new m(-32e3,"transaction hash not generated in time")});if(t.addEvent("endRetrieveRelayerTransaction"),!["SUBMITTED","SUCCESSFUL"].includes(i.status)){let a=`Transaction failed to submit with status ${i.status}.`;throw i.statusMessage&&(a+=` Error message: ${i.statusMessage}`),new m(-32e3,a)}return i},ie=async({transactionRequest:n,ethSigner:e,rpcProvider:t,guardianClient:r,relayerClient:i,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c})=>{let{chainId:d}=await t.getNetwork(),l=BigInt(d);s.addEvent("endDetectNetwork");let p=await nn(n,t,i,a,o);s.addEvent("endBuildMetaTransactions");let{nonce:u}=p[0];if(typeof u>"u")throw new Error("Failed to retrieve nonce from the smart wallet");let f=async()=>{await r.validateEVMTransaction({chainId:C(Number(d)),nonce:re(u),metaTransactions:p,isBackgroundTransaction:c}),s.addEvent("endValidateEVMTransaction");},v=async()=>{let Zt=await we(p,u,l,a,e);return s.addEvent("endGetSignedMetaTransactions"),Zt},[,y]=await Promise.all([f(),v()]),I=await i.ethSendTransaction(a,y);return s.addEvent("endRelayerSendTransaction"),{signedTransactions:y,relayerId:I,nonce:u}},an=async n=>{if(!n.to)throw new m(-32602,'im_signEjectionTransaction requires a "to" field');if(typeof n.nonce>"u")throw new m(-32602,'im_signEjectionTransaction requires a "nonce" field');if(!n.chainId)throw new m(-32602,'im_signEjectionTransaction requires a "chainId" field');return [{to:n.to.toString(),data:n.data,nonce:n.nonce??void 0,value:n.value,revertOnError:!0}]},Pt=async({transactionRequest:n,ethSigner:e,zkEvmAddress:t,flow:r})=>{let i=await an(n);r.addEvent("endBuildMetaTransactions");let a=await we(i,n.nonce,BigInt(n.chainId??0),t,e);return r.addEvent("endGetSignedMetaTransactions"),{to:t,data:a,chainId:C(Number(n.chainId??0))}};var Ie=async({params:n,ethSigner:e,rpcProvider:t,relayerClient:r,guardianClient:i,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c=!1})=>{let d=n[0],{relayerId:l}=await ie({transactionRequest:d,ethSigner:e,rpcProvider:t,guardianClient:i,relayerClient:r,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c}),{hash:p}=await ne(r,l,s);return p};var At=["types","domain","primaryType","message"],sn=n=>At.every(e=>e in n),on=(n,e)=>{let t;if(typeof n=="string")try{t=JSON.parse(n);}catch(i){throw new m(-32602,`Failed to parse typed data JSON: ${i}`)}else if(typeof n=="object")t=n;else throw new m(-32602,`Invalid typed data argument: ${n}`);if(!sn(t))throw new m(-32602,`Invalid typed data argument. The following properties are required: ${At.join(", ")}`);let r=t.domain?.chainId;if(r&&(typeof r=="string"&&(r.startsWith("0x")?t.domain.chainId=parseInt(r,16).toString():t.domain.chainId=parseInt(r,10).toString()),BigInt(t.domain.chainId??0)!==e))throw new m(-32602,`Invalid chainId, expected ${e}`);return t},It=async({params:n,method:e,ethSigner:t,rpcProvider:r,relayerClient:i,guardianClient:a,flow:s})=>{let o=n[0],c=n[1];if(!o||!c)throw new m(-32602,`${e} requires an address and a typed data JSON`);let{chainId:d}=await r.getNetwork(),l=on(c,d);s.addEvent("endDetectNetwork"),await a.evaluateEIP712Message({chainID:String(d),payload:l}),s.addEvent("endValidateMessage");let p=await i.imSignTypedData(o,l);s.addEvent("endRelayerSignTypedData");let u=await Tt(l,p,BigInt(d),o,t);return s.addEvent("getSignedTypedData"),u};var St=n=>{if(!n)return n;try{let e=stripZerosLeft(getBytes(n));return toUtf8String(e)}catch{return n}};var ae=async({params:n,ethSigner:e,zkEvmAddress:t,rpcProvider:r,guardianClient:i,relayerClient:a,flow:s})=>{let o=n[0],c=n[1];if(!c||!o)throw new m(-32602,"personal_sign requires an address and a message");if(c.toLowerCase()!==t.toLowerCase())throw new m(-32602,"personal_sign requires the signer to be the from address");let d=St(o),{chainId:l}=await r.getNetwork();s.addEvent("endDetectNetwork");let p=BigInt(l),u=vt(p,d,e,c);u.then(()=>s.addEvent("endEOASignature")),await i.evaluateERC191Message({chainID:l,payload:d}),s.addEvent("endEvaluateERC191Message");let[f,v]=await Promise.all([u,a.imSign(c,d)]);s.addEvent("endRelayerSign");let y=await e.getAddress();return s.addEvent("endGetEOAAddress"),Pe(f,y,v)};var mn="https://api.immutable.com",un="https://api.sandbox.immutable.com",gn="/v1/sdk/session-activity/check",hn=n=>{switch(n){case Environment.SANDBOX:return un;case Environment.PRODUCTION:return mn;default:throw new Error("Environment not supported")}},se,bt=n=>{se||(se=wt.create({baseURL:hn(n)}));};async function kt(n){if(!se)throw new Error("Client not initialised");return se.get(gn,{params:n}).then(e=>e.data).catch(e=>{if(e.response.status!==404)throw e})}function Mt(n,e){return (...t)=>{try{let r=n(...t);return r instanceof Promise?r.catch(i=>(i instanceof Error&&trackError("passport","sessionActivityError",i),e)):r}catch(r){return r instanceof Error&&trackError("passport","sessionActivityError",r),e}}}var{getItem:Nt,setItem:Se}=utils.localStorage,Oe="sessionActivitySendCount",Lt="sessionActivityDate",be={},A={},oe={},Dt=()=>{A=Nt(Oe)||{};let n=Nt(Lt),e=new Date,t=e.getFullYear(),r=`${e.getMonth()+1}`.padStart(2,"0"),i=`${e.getDate()}`.padStart(2,"0"),a=`${t}-${r}-${i}`;(!n||n!==a)&&(A={}),Se(Lt,a),Se(Oe,A);};Dt();var Cn=n=>{Dt(),A[n]||(A[n]=0),A[n]++,Se(Oe,A),be[n]=0;},Tn=async n=>new Promise(e=>{setTimeout(e,n*1e3);}),vn=async n=>{let e=n.flow||trackFlow("passport","sendSessionActivity"),t=n.passportClient;if(!t)throw e.addEvent("No Passport Client ID"),new Error("No Passport Client ID provided");if(oe[t])return;oe[t]=!0;let{sendTransaction:r,environment:i}=n;if(!r)throw new Error("No sendTransaction function provided");if(!i)throw new Error("No environment provided");bt(i);let a=n.walletAddress;if(!a)throw e.addEvent("No Passport Wallet Address"),new Error("No wallet address");let s;try{if(s=await kt({clientId:t,wallet:a,checkCount:be[t]||0,sendCount:A[t]||0}),be[t]++,!s)return}catch(o){throw e.addEvent("Failed to fetch details"),new Error("Failed to get details",{cause:o})}if(s&&s.contractAddress&&s.functionName){let c=new Interface([`function ${s.functionName}()`]).encodeFunctionData(s.functionName),d=s.contractAddress;try{e.addEvent("Start Sending Transaction");let l=await n.sendTransaction([{to:d,from:a,data:c}],e);Cn(t),e.addEvent("Transaction Sent",{tx:l});}catch(l){e.addEvent("Failed to send Transaction");let p=new Error("Failed to send transaction",{cause:l});trackError("passport","sessionActivityError",p,{flowId:e.details.flowId});}}s&&s.delay&&s.delay>0&&(e.addEvent("Delaying Transaction",{delay:s.delay}),await Tn(s.delay),setTimeout(()=>{e.addEvent("Retrying after Delay"),oe[t]=!1,Ut({...n,flow:e});},0));},Ut=n=>Mt(vn)(n).then(()=>{oe[n.passportClient]=!1;}),Gt=Ut;var Ft=async({params:n,ethSigner:e,rpcProvider:t,relayerClient:r,guardianClient:i,zkEvmAddress:a,flow:s})=>{let o={to:a,value:0},{relayerId:c}=await ie({transactionRequest:o,ethSigner:e,rpcProvider:t,guardianClient:i,relayerClient:r,zkEvmAddress:a,flow:s});return i.withConfirmationScreen()(async()=>{let d=await ae({params:n,ethSigner:e,zkEvmAddress:a,rpcProvider:t,guardianClient:i,relayerClient:r,flow:s});return await ne(r,c,s),d})};var Bt=async({params:n,ethSigner:e,zkEvmAddress:t,flow:r})=>{if(!n||n.length!==1)throw new m(-32602,"im_signEjectionTransaction requires a singular param (hash)");let i=n[0];return await Pt({transactionRequest:i,ethSigner:e,zkEvmAddress:t,flow:r})};var ce=n=>"zkEvm"in n,de=class{#s;#t;#i;#r;#n;#e;#l;#c;#a;isPassport=!0;constructor({authManager:e,config:t,multiRollupApiClients:r,passportEventEmitter:i,guardianClient:a,ethSigner:s,user:o}){this.#s=e,this.#t=t,this.#n=a,this.#r=i,this.#a=s,this.#e=new JsonRpcProvider(this.#t.zkEvmRpcUrl,void 0,{staticNetwork:!0}),this.#c=new Q({config:this.#t,rpcProvider:this.#e,authManager:this.#s}),this.#l=r,this.#i=new b,o&&ce(o)&&this.#d(o.zkEvm.ethAddress),i.on("loggedIn",c=>{ce(c)&&this.#d(c.zkEvm.ethAddress);}),i.on("loggedOut",this.#p),i.on("accountsRequested",Gt);}#p=()=>{this.#i.emit("accountsChanged",[]);};async#d(e,t){let r=BigInt(1),i=async(a,s)=>await Ie({params:a,ethSigner:this.#a,guardianClient:this.#n,rpcProvider:this.#e,relayerClient:this.#c,zkEvmAddress:e,flow:s,nonceSpace:r,isBackgroundTransaction:!0});this.#r.emit("accountsRequested",{environment:this.#t.baseConfig.environment,sendTransaction:i,walletAddress:e,passportClient:t||this.#t.oidcConfiguration.clientId});}async#o(){try{let e=await this.#s.getUser();return e&&ce(e)?e.zkEvm.ethAddress:void 0}catch{return}}async#m(e){switch(e.method){case"eth_requestAccounts":{let t=await this.#o();if(t)return [t];let r=trackFlow("passport","ethRequestAccounts");try{let i=await this.#s.getUserOrLogin();r.addEvent("endGetUserOrLogin");let a;return ce(i)?a=i.zkEvm.ethAddress:(r.addEvent("startUserRegistration"),a=await _t({ethSigner:this.#a,authManager:this.#s,multiRollupApiClients:this.#l,accessToken:i.accessToken,rpcProvider:this.#e,flow:r}),r.addEvent("endUserRegistration")),this.#i.emit("accountsChanged",[a]),identify({passportId:i.profile.sub}),this.#d(a),[a]}catch(i){throw i instanceof Error?trackError("passport","ethRequestAccounts",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"eth_sendTransaction":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=trackFlow("passport","ethSendTransaction");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>await Ie({params:e.params||[],ethSigner:this.#a,guardianClient:this.#n,rpcProvider:this.#e,relayerClient:this.#c,zkEvmAddress:t,flow:r}))}catch(i){throw i instanceof Error?trackError("passport","eth_sendTransaction",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"eth_accounts":{let t=await this.#o();return t?[t]:[]}case"personal_sign":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=trackFlow("passport","personalSign");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>this.#t.forceScwDeployBeforeMessageSignature&&!(await Y(this.#e,t)>BigInt(0))?await Ft({params:e.params||[],zkEvmAddress:t,ethSigner:this.#a,rpcProvider:this.#e,guardianClient:this.#n,relayerClient:this.#c,flow:r}):await ae({params:e.params||[],zkEvmAddress:t,ethSigner:this.#a,rpcProvider:this.#e,guardianClient:this.#n,relayerClient:this.#c,flow:r}))}catch(i){throw i instanceof Error?trackError("passport","personal_sign",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"eth_signTypedData":case"eth_signTypedData_v4":{if(!await this.#o())throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=trackFlow("passport","ethSignTypedDataV4");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>await It({method:e.method,params:e.params||[],ethSigner:this.#a,rpcProvider:this.#e,relayerClient:this.#c,guardianClient:this.#n,flow:r}))}catch(i){throw i instanceof Error?trackError("passport","eth_signTypedData",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"eth_chainId":{let{chainId:t}=await this.#e.getNetwork();return toBeHex(t)}case"eth_getBalance":case"eth_getCode":case"eth_getTransactionCount":{let[t,r]=e.params||[];return this.#e.send(e.method,[t,r||"latest"])}case"eth_getStorageAt":{let[t,r,i]=e.params||[];return this.#e.send(e.method,[t,r,i||"latest"])}case"eth_call":case"eth_estimateGas":{let[t,r]=e.params||[];return this.#e.send(e.method,[t,r||"latest"])}case"eth_gasPrice":case"eth_blockNumber":case"eth_getBlockByHash":case"eth_getBlockByNumber":case"eth_getTransactionByHash":case"eth_getTransactionReceipt":return this.#e.send(e.method,e.params||[]);case"im_signEjectionTransaction":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=trackFlow("passport","imSignEjectionTransaction");try{return await Bt({params:e.params||[],ethSigner:this.#a,zkEvmAddress:t,flow:r})}catch(i){throw i instanceof Error?trackError("passport","imSignEjectionTransaction",i,{flowId:r.details.flowId}):r.addEvent("errored"),i}finally{r.addEvent("End");}}case"im_addSessionActivity":{let[t]=e.params||[],r=await this.#o();return r&&this.#d(r,t),null}default:throw new m(4200,"Method not supported")}}async request(e){try{return this.#m(e)}catch(t){throw t instanceof m?t:t instanceof Error?new m(-32603,t.message):new m(-32603,"Internal error")}}on(e,t){this.#i.on(e,t);}removeListener(e,t){this.#i.removeListener(e,t);}};var Ht={icon:'data:image/svg+xml,<svg viewBox="0 0 48 48" class="SvgIcon undefined Logo Logo--PassportSymbolOutlined css-1dn9atd" xmlns="http://www.w3.org/2000/svg"><g data-testid="undefined__g"><circle cx="24" cy="24" r="22.5" fill="url(%23paint0_radial_6324_83922)"></circle><circle cx="24" cy="24" r="22.5" fill="url(%23paint1_radial_6324_83922)"></circle><path d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM23.0718 9.16608C23.7383 8.83951 24.4406 8.86188 25.087 9.2287C27.3282 10.5059 29.5627 11.7942 31.786 13.096C32.5018 13.5165 32.8686 14.1897 32.8708 15.0173C32.8843 17.9184 32.8798 20.8171 32.8708 23.7182C32.8708 23.8255 32.8015 23.9821 32.7143 24.0335C31.8531 24.548 30.9808 25.0423 30.0347 25.5881V25.1318C30.0347 22.148 30.0257 19.1664 30.0414 16.1827C30.0436 15.6101 29.8468 15.241 29.339 14.9525C26.7377 13.474 24.1499 11.9687 21.5575 10.4723C21.4457 10.4075 21.3361 10.3381 21.1661 10.2352C21.8326 9.85722 22.4321 9.47698 23.0673 9.16608H23.0718ZM22.5953 38.8451C22.45 38.7713 22.3426 38.7198 22.2375 38.6595C18.8041 36.68 15.3752 34.687 11.9307 32.7232C10.9644 32.173 10.5238 31.3879 10.5349 30.2852C10.5551 27.9411 10.5484 25.597 10.5372 23.2507C10.5327 22.1927 10.9622 21.4255 11.8926 20.8977C14.3105 19.5221 16.715 18.1264 19.1195 16.7284C19.3275 16.6076 19.4796 16.5875 19.6965 16.7172C20.5264 17.216 21.3719 17.6924 22.2554 18.2024C22.0876 18.3031 21.9601 18.3791 21.8304 18.4552C19.2268 19.9582 16.6278 21.4658 14.0175 22.9599C13.5903 23.2037 13.3912 23.5213 13.3957 24.0179C13.4091 25.8654 13.4114 27.713 13.3957 29.5605C13.3912 30.0705 13.5948 30.3948 14.0332 30.6453C16.7866 32.2199 19.5288 33.8125 22.28 35.3916C22.5126 35.5258 22.611 35.6645 22.6065 35.9418C22.5864 36.888 22.5998 37.8363 22.5998 38.8473L22.5953 38.8451ZM22.5953 33.553C22.356 33.4166 22.1838 33.3204 22.0116 33.2198C19.8285 31.9605 17.6477 30.6967 15.4602 29.4464C15.2231 29.3122 15.1359 29.1668 15.1381 28.8917C15.1538 27.4714 15.1471 26.0511 15.1426 24.6308C15.1426 24.4384 15.1717 24.3064 15.3618 24.1991C16.167 23.7495 16.9633 23.2798 17.7618 22.8212C17.8199 22.7877 17.8826 22.7631 17.9877 22.7116V24.3064C17.9877 25.1698 18.0011 26.0354 17.9832 26.8988C17.972 27.3909 18.1622 27.7241 18.5916 27.9657C19.8285 28.6636 21.0498 29.3883 22.2867 30.0839C22.5305 30.2203 22.6043 30.3724 22.5998 30.6408C22.5842 31.5847 22.5931 32.5308 22.5931 33.5508L22.5953 33.553ZM20.0746 14.91C19.6116 14.6371 19.2157 14.6393 18.7527 14.91C16.1581 16.4265 13.5523 17.9228 10.9487 19.4259C10.8391 19.4908 10.7251 19.5489 10.5305 19.6541C10.5998 18.6654 10.3873 17.7327 10.7251 16.8291C10.9085 16.3348 11.2529 15.9635 11.7092 15.6995C13.8811 14.4447 16.0507 13.1877 18.227 11.9396C19.0211 11.4833 19.8308 11.4945 20.6248 11.953C23.0964 13.3756 25.5657 14.8026 28.0306 16.2341C28.1357 16.2945 28.2677 16.4309 28.2677 16.5338C28.2856 17.5493 28.2788 18.567 28.2788 19.6563C27.3819 19.1396 26.5543 18.6609 25.7267 18.1823C23.8412 17.093 21.9512 16.0149 20.0746 14.91ZM37.4427 30.8779C37.3778 31.6764 36.9103 32.2423 36.2192 32.6404C33.5732 34.1614 30.9294 35.6913 28.2856 37.2168C27.4557 37.6954 26.6259 38.1741 25.7938 38.6527C25.6932 38.7109 25.5903 38.7601 25.4539 38.8317C25.4449 38.693 25.4337 38.5924 25.4337 38.4917C25.4337 37.6149 25.4382 36.7404 25.4293 35.8636C25.4293 35.6645 25.4762 35.5437 25.6596 35.4386C29.5157 33.2198 33.3696 30.9942 37.2212 28.7709C37.2794 28.7374 37.3443 28.7105 37.4539 28.6591C37.4539 29.4375 37.4986 30.1622 37.4427 30.8779ZM37.4628 25.3577C37.4561 26.2658 36.9663 26.9033 36.1901 27.3506C33.175 29.0841 30.1622 30.8265 27.1493 32.5666C26.5991 32.8842 26.0466 33.1996 25.4561 33.5396C25.4472 33.3897 25.436 33.2913 25.436 33.1907C25.436 32.3273 25.4449 31.4617 25.4293 30.5983C25.4248 30.3523 25.5075 30.2226 25.72 30.0995C28.46 28.5271 31.1911 26.9368 33.9355 25.3733C34.4231 25.096 34.6378 24.7538 34.6334 24.1812C34.6132 21.1974 34.6244 18.2136 34.6244 15.2298V14.7087C35.3402 15.1404 36.0112 15.496 36.624 15.9299C37.1832 16.3258 37.465 16.9253 37.4673 17.6164C37.4762 20.1976 37.4829 22.7788 37.465 25.3599L37.4628 25.3577Z" fill="%230D0D0D"></path><path fill-rule="evenodd" d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM24 2C11.8497 2 2 11.8497 2 24C2 36.1503 11.8497 46 24 46C36.1503 46 46 36.1503 46 24C46 11.8497 36.1503 2 24 2Z" fill="url(%23paint2_radial_6324_83922)"></path><path fill-rule="evenodd" d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM24 2C11.8497 2 2 11.8497 2 24C2 36.1503 11.8497 46 24 46C36.1503 46 46 36.1503 46 24C46 11.8497 36.1503 2 24 2Z" fill="url(%23paint3_radial_6324_83922)"></path><defs><radialGradient id="paint0_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.4442 13.3899) rotate(44.9817) scale(46.7487 99.1435)"><stop stop-color="%23A3EEF8"></stop><stop offset="0.177083" stop-color="%23A4DCF5"></stop><stop offset="0.380208" stop-color="%23A6AEEC"></stop><stop offset="1" stop-color="%23ECBEE1"></stop></radialGradient><radialGradient id="paint1_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.9515 43.7068) rotate(84.265) scale(24.2138 46.3215)"><stop stop-color="%23FCF5EE"></stop><stop offset="0.715135" stop-color="%23ECBEE1" stop-opacity="0"></stop></radialGradient><radialGradient id="paint2_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(12.7405 12.6825) rotate(44.9817) scale(49.8653 105.753)"><stop stop-color="%23A3EEF8"></stop><stop offset="0.177083" stop-color="%23A4DCF5"></stop><stop offset="0.380208" stop-color="%23A6AEEC"></stop><stop offset="1" stop-color="%23ECBEE1"></stop></radialGradient><radialGradient id="paint3_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26.0816 45.0206) rotate(84.265) scale(25.828 49.4096)"><stop stop-color="%23FCF5EE"></stop><stop offset="0.715135" stop-color="%23ECBEE1" stop-opacity="0"></stop></radialGradient></defs></g></svg>',name:"Immutable Passport",rdns:"com.immutable.passport",uuid:v4()};function Vt(n){if(typeof window>"u")return;let e=new CustomEvent("eip6963:announceProvider",{detail:Object.freeze(n)});window.dispatchEvent(e);let t=()=>window.dispatchEvent(e);window.addEventListener("eip6963:requestProvider",t);}var Un=n=>n.overrides?createConfig({basePath:n.overrides.imxPublicApiDomain}):n.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),Gn=n=>{if(n.overrides?.imxApiClients)return n.overrides.imxApiClients;let e=Un(n);return new ImxApiClients(e)},Fn=n=>{let e=new z(n),t=new N(e),r=new U(e,t),i=new M(e),a=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),s=new G(r,a),o=new MultiRollupApiClients(e.multiRollupConfig),c=new b,d=n.overrides?n.overrides.immutableXClient:new IMXClient({baseConfig:n.baseConfig}),l=new B({confirmationScreen:i,config:e,authManager:r,guardianApi:o.guardianApi}),p=Gn(n),u=new X({authManager:r,immutableXClient:d,magicTEESigner:s,passportEventEmitter:c,imxApiClients:p,guardianClient:l});return {config:e,authManager:r,magicTEESigner:s,confirmationScreen:i,embeddedLoginPrompt:t,immutableXClient:d,multiRollupApiClients:o,passportEventEmitter:c,passportImxProviderFactory:u,guardianClient:l}},ke=class{authManager;config;confirmationScreen;embeddedLoginPrompt;immutableXClient;magicTEESigner;multiRollupApiClients;passportImxProviderFactory;passportEventEmitter;guardianClient;constructor(e){let t=Fn(e);this.config=t.config,this.authManager=t.authManager,this.magicTEESigner=t.magicTEESigner,this.confirmationScreen=t.confirmationScreen,this.embeddedLoginPrompt=t.embeddedLoginPrompt,this.immutableXClient=t.immutableXClient,this.multiRollupApiClients=t.multiRollupApiClients,this.passportEventEmitter=t.passportEventEmitter,this.passportImxProviderFactory=t.passportImxProviderFactory,this.guardianClient=t.guardianClient,setPassportClientId(e.clientId),track("passport","initialise");}async connectImxSilent(){return h(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return h(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return h(async()=>{let t=null;try{t=await this.authManager.getUser();}catch{}let r=new de({passportEventEmitter:this.passportEventEmitter,authManager:this.authManager,config:this.config,multiRollupApiClients:this.multiRollupApiClients,guardianClient:this.guardianClient,ethSigner:this.magicTEESigner,user:t});return e?.announceProvider&&Vt({info:Ht,provider:r}),r},"connectEvm",!1)}async login(e){return h(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},i=null;try{i=await this.authManager.getUser();}catch(a){if(a instanceof Error&&!a.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",a),t)throw a;S.warn("Failed to retrieve a cached user session",a);}return !i&&r?i=await this.authManager.forceUserRefresh():!i&&!t&&(e?.useRedirectFlow?await this.authManager.loginWithRedirect(e?.anonymousId,e?.directLoginOptions):i=await this.authManager.login(e?.anonymousId,e?.directLoginOptions)),i&&(identify({passportId:i.profile.sub}),this.passportEventEmitter.emit("loggedIn",i)),i?i.profile:null},"login")}async loginCallback(){await h(()=>this.authManager.loginCallback(),"loginCallback").then(e=>{e&&(identify({passportId:e.profile.sub}),this.passportEventEmitter.emit("loggedIn",e));});}loginWithPKCEFlow(e,t){return h(async()=>await this.authManager.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return h(async()=>{let r=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.passportEventEmitter.emit("loggedIn",r),r.profile},"loginWithPKCEFlowCallback")}async storeTokens(e){return h(async()=>{let t=await this.authManager.storeTokens(e);return this.passportEventEmitter.emit("loggedIn",t),t.profile},"storeTokens")}async logout(){return h(async()=>{await this.authManager.logout(),this.passportEventEmitter.emit("loggedOut");},"logout")}async getLogoutUrl(){return h(async()=>(await this.authManager.removeUser(),this.passportEventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()),"getLogoutUrl")}async logoutSilentCallback(e){return h(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback")}async getUserInfo(){return h(async()=>(await this.authManager.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return h(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return h(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1,!1)}async getLinkedAddresses(){return h(async()=>{let e=await this.authManager.getUser();if(!e?.profile.sub)return [];let t={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:t})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let t=trackFlow("passport","linkExternalWallet",!1),r=await this.authManager.getUser();if(!r)throw new g("User is not logged in","NOT_LOGGED_IN_ERROR");let i=_(r),a=k(r);if(!i&&!a)throw new g("User has not been registered","USER_NOT_REGISTERED_ERROR");let s={Authorization:`Bearer ${r.accessToken}`},o={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};try{return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:o},{headers:s})).data}}catch(c){if(c instanceof Error?trackError("passport","linkExternalWallet",c):t.addEvent("errored"),isAxiosError(c)&&c.response){if(c.response.data&&le(c.response.data)){let{code:l,message:p}=c.response.data;switch(l){case"ALREADY_LINKED":throw new g(p,"LINK_WALLET_ALREADY_LINKED_ERROR");case"MAX_WALLETS_LINKED":throw new g(p,"LINK_WALLET_MAX_WALLETS_LINKED_ERROR");case"DUPLICATE_NONCE":throw new g(p,"LINK_WALLET_DUPLICATE_NONCE_ERROR");case"VALIDATION_ERROR":throw new g(p,"LINK_WALLET_VALIDATION_ERROR");default:throw new g(p,"LINK_WALLET_GENERIC_ERROR")}}else if(c.response.status)throw new g(`Link wallet request failed with status code ${c.response.status}`,"LINK_WALLET_GENERIC_ERROR")}let d="Link wallet request failed";throw c instanceof Error&&(d+=`: ${c.message}`),new g(d,"LINK_WALLET_GENERIC_ERROR")}finally{t.addEvent("End");}}};
412
+ )[]`,ve=i=>i.map(e=>({delegateCall:e.delegateCall===!0,revertOnError:e.revertOnError===!0,gasLimit:e.gasLimit??BigInt(0),target:e.to??ZeroAddress,value:e.value??BigInt(0),data:e.data??"0x"})),Zr=(i,e)=>{let t=AbiCoder.defaultAbiCoder().encode(["uint256",Rt],[i,e]);return keccak256(t)},Ct=i=>AbiCoder.defaultAbiCoder().encode([Rt],[i]),Kr=i=>i||0n,Xr=(i,e)=>{let t=BigInt(i)*2n**96n;return BigInt(e)+t},Y=async(i,e,t)=>{try{let r=new Contract(e,walletContracts.mainModule.abi,i),n=Kr(t),a=await r.readNonce(n);if(typeof a=="bigint")return Xr(n,a);throw new Error("Unexpected result from contract.nonce() call.")}catch(r){if(isError(r,"BAD_DATA"))return BigInt(0);throw r}},_e=(i,e,t)=>solidityPacked(["string","uint256","address","bytes32"],[qr,i,e,t]),we=async(i,e,t,r,n)=>{let a=ve(i),s=Zr(e,a),o=_e(t,r,s),c=keccak256(o),d=getBytes(c),p=`${await n.signMessage(d)}${yt}`,u=v1.signature.encodeSignature({version:1,threshold:Wr,signers:[{isDynamic:!1,unrecovered:!0,weight:Et,signature:p}]}),f=new Interface(walletContracts.mainModule.abi);return f.encodeFunctionData(f.getFunction("execute")??"",[a,e,u])},zr=i=>{let e=`0x0000${i}`;return v1.signature.decodeSignature(e)},Pe=(i,e,t)=>{let r=`${i}${yt}`,{signers:n}=zr(t),s=[...n,{isDynamic:!1,unrecovered:!0,weight:Et,signature:r,address:e}].sort((o,c)=>{let d=BigInt(o.address??0),l=BigInt(c.address??0);return d<=l?-1:d===l?0:1});return v1.signature.encodeSignature({version:1,threshold:$r,signers:s})},Tt=async(i,e,t,r,n)=>{let a={...i.types};delete a.EIP712Domain;let s=TypedDataEncoder.hash(i.domain,a,i.message),o=_e(t,r,s),c=keccak256(o),d=getBytes(c),l=await n.signMessage(d),p=await n.getAddress();return Pe(l,p,e)},vt=async(i,e,t,r)=>{let n=hashMessage(e),a=_e(i,r,n),s=keccak256(a),o=getBytes(s);return t.signMessage(o)},C=i=>`eip155:${i}`;var Q=class i{config;rpcProvider;authManager;constructor({config:e,rpcProvider:t,authManager:r}){this.config=e,this.rpcProvider=t,this.authManager=r;}static getResponsePreview(e){return e.length>100?`${e.substring(0,50)}...${e.substring(e.length-50)}`:e}async postToRelayer(e){let t={id:1,jsonrpc:"2.0",...e},r=await this.authManager.getUserZkEvm(),n=await fetch(`${this.config.relayerUrl}/v1/transactions`,{method:"POST",headers:{Authorization:`Bearer ${r.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify(t)}),a=await n.text();if(!n.ok){let o=i.getResponsePreview(a);throw new Error(`Relayer HTTP error: ${n.status}. Content: "${o}"`)}let s;try{s=JSON.parse(a);}catch(o){let c=i.getResponsePreview(a);throw new Error(`Relayer JSON parse error: ${o instanceof Error?o.message:"Unknown error"}. Content: "${c}"`)}if(s.error)throw new Error(s.error);return s}async ethSendTransaction(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),n={method:"eth_sendTransaction",params:[{to:e,data:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(n);return a}async imGetTransactionByHash(e){let t={method:"im_getTransactionByHash",params:[e]},{result:r}=await this.postToRelayer(t);return r}async imGetFeeOptions(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),n={method:"im_getFeeOptions",params:[{userAddress:e,data:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(n);return a}async imSignTypedData(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),n={method:"im_signTypedData",params:[{address:e,eip712Payload:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(n);return a}async imSign(e,t){let{chainId:r}=await this.rpcProvider.getNetwork(),n={method:"im_sign",params:[{address:e,message:t,chainId:C(Number(r))}]},{result:a}=await this.postToRelayer(n);return a}};var ee=(n=>(n[n.USER_REJECTED_REQUEST=4001]="USER_REJECTED_REQUEST",n[n.UNAUTHORIZED=4100]="UNAUTHORIZED",n[n.UNSUPPORTED_METHOD=4200]="UNSUPPORTED_METHOD",n[n.DISCONNECTED=4900]="DISCONNECTED",n))(ee||{}),w=(o=>(o[o.RPC_SERVER_ERROR=-32e3]="RPC_SERVER_ERROR",o[o.INVALID_REQUEST=-32600]="INVALID_REQUEST",o[o.METHOD_NOT_FOUND=-32601]="METHOD_NOT_FOUND",o[o.INVALID_PARAMS=-32602]="INVALID_PARAMS",o[o.INTERNAL_ERROR=-32603]="INTERNAL_ERROR",o[o.PARSE_ERROR=-32700]="PARSE_ERROR",o[o.TRANSACTION_REJECTED=-32003]="TRANSACTION_REJECTED",o))(w||{}),m=class extends Error{message;code;constructor(e,t){super(t),this.message=t,this.code=e;}};var jr="Only sign this message from Immutable Passport";async function _t({authManager:i,ethSigner:e,multiRollupApiClients:t,accessToken:r,rpcProvider:n,flow:a}){let s=e.getAddress();s.then(()=>a.addEvent("endGetAddress"));let o=signRaw(jr,e);o.then(()=>a.addEvent("endSignRaw"));let c=n.getNetwork();c.then(()=>a.addEvent("endDetectNetwork"));let d=t.chainsApi.listChains();d.then(()=>a.addEvent("endListChains"));let[l,p,u,f]=await Promise.all([s,o,c,d]),v=C(Number(u.chainId)),y=f.data?.result?.find(I=>I.id===v)?.name;if(!y)throw new m(-32603,`Chain name does not exist on for chain id ${u.chainId}`);try{let I=await t.passportApi.createCounterfactualAddressV2({chainName:y,createCounterfactualAddressRequest:{ethereum_address:l,ethereum_signature:p}},{headers:{Authorization:`Bearer ${r}`}});return a.addEvent("endCreateCounterfactualAddress"),i.forceUserRefreshInBackground(),I.data.counterfactual_address}catch(I){throw new m(-32603,`Failed to create counterfactual address: ${I}`)}}var te="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",re=i=>BigInt(i).toString(),Qr=i=>{try{return i.map(e=>({delegateCall:e.delegateCall===!0,revertOnError:e.revertOnError===!0,gasLimit:e.gasLimit?re(e.gasLimit):"0",target:e.to??ZeroAddress,value:e.value?re(e.value):"0",data:e.data?e.data.toString():"0x"}))}catch(e){let t=e instanceof Error?e.message:String(e);throw new m(-32602,`Transaction failed to parsing: ${t}`)}},B=class{guardianApi;confirmationScreen;crossSdkBridgeEnabled;authManager;constructor({confirmationScreen:e,config:t,authManager:r,guardianApi:n}){this.confirmationScreen=e,this.crossSdkBridgeEnabled=t.crossSdkBridgeEnabled,this.guardianApi=n,this.authManager=r;}withConfirmationScreen(e){return t=>this.withConfirmationScreenTask(e)(t)()}withConfirmationScreenTask(e){return t=>async()=>{this.confirmationScreen.loading(e);try{return await t()}catch(r){throw r instanceof g&&r.type==="SERVICE_UNAVAILABLE_ERROR"?(await this.confirmationScreen.showServiceUnavailable(),r):(this.confirmationScreen.closeWindow(),r)}}}withDefaultConfirmationScreenTask(e){return this.withConfirmationScreenTask()(e)}async evaluateImxTransaction({payloadHash:e}){try{let t=()=>{this.confirmationScreen.closeWindow();},r=await this.authManager.getUserImx(),n={Authorization:`Bearer ${r.accessToken}`};if(!(await O(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:n}),{finallyFn:t})).data.id)throw new Error("Transaction doesn't exists");let s=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:n}),{confirmationRequired:o}=s.data;if(o){if(this.crossSdkBridgeEnabled)throw new Error(te);if(!(await this.confirmationScreen.requestConfirmation(e,r.imx.ethAddress,Ae.mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new Error("Transaction rejected by user")}else this.confirmationScreen.closeWindow();}catch(t){throw wt.isAxiosError(t)&&t.response?.status===403?new g("Service unavailable","SERVICE_UNAVAILABLE_ERROR"):t}}async evaluateEVMTransaction({chainId:e,nonce:t,metaTransactions:r}){let n=await this.authManager.getUserZkEvm(),a={Authorization:`Bearer ${n.accessToken}`},s=Qr(r);try{return (await this.guardianApi.evaluateTransaction({id:"evm",transactionEvaluationRequest:{chainType:"evm",chainId:e,transactionData:{nonce:t,userAddress:n.zkEvm.ethAddress,metaTransactions:s}}},{headers:a})).data}catch(o){if(wt.isAxiosError(o)&&o.response?.status===403)throw new g("Service unavailable","SERVICE_UNAVAILABLE_ERROR");let c=o instanceof Error?o.message:String(o);throw new m(-32603,`Transaction failed to validate with error: ${c}`)}}async validateEVMTransaction({chainId:e,nonce:t,metaTransactions:r,isBackgroundTransaction:n}){let a=await this.evaluateEVMTransaction({chainId:e,nonce:t,metaTransactions:r}),{confirmationRequired:s,transactionId:o}=a;if(s&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(s&&o){let c=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestConfirmation(o,c.zkEvm.ethAddress,Ae.mr.TransactionApprovalRequestChainTypeEnum.Evm,e)).confirmed)throw new m(-32003,"Transaction rejected by user")}else n||this.confirmationScreen.closeWindow();}async handleEIP712MessageEvaluation({chainID:e,payload:t}){try{let r=await this.authManager.getUserZkEvm();if(r===null)throw new m(4100,"User not logged in. Please log in first.");return (await this.guardianApi.evaluateMessage({messageEvaluationRequest:{chainID:e,payload:t}},{headers:{Authorization:`Bearer ${r.accessToken}`}})).data}catch(r){let n=r instanceof Error?r.message:String(r);throw new m(-32603,`Message failed to validate with error: ${n}`)}}async evaluateEIP712Message({chainID:e,payload:t}){let{messageId:r,confirmationRequired:n}=await this.handleEIP712MessageEvaluation({chainID:e,payload:t});if(n&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(n&&r){let a=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestMessageConfirmation(r,a.zkEvm.ethAddress,"eip712")).confirmed)throw new m(-32003,"Signature rejected by user")}else this.confirmationScreen.closeWindow();}async handleERC191MessageEvaluation({chainID:e,payload:t}){try{let r=await this.authManager.getUserZkEvm();if(r===null)throw new m(4100,"User not logged in. Please log in first.");return (await this.guardianApi.evaluateErc191Message({eRC191MessageEvaluationRequest:{chainID:C(Number(e)),payload:t}},{headers:{Authorization:`Bearer ${r.accessToken}`}})).data}catch(r){let n=r instanceof Error?r.message:String(r);throw new m(-32603,`Message failed to validate with error: ${n}`)}}async evaluateERC191Message({chainID:e,payload:t}){let{messageId:r,confirmationRequired:n}=await this.handleERC191MessageEvaluation({chainID:e,payload:t});if(n&&this.crossSdkBridgeEnabled)throw new m(-32003,te);if(n&&r){let a=await this.authManager.getUserZkEvm();if(!(await this.confirmationScreen.requestMessageConfirmation(r,a.zkEvm.ethAddress,"erc191")).confirmed)throw new m(-32003,"Signature rejected by user")}else this.confirmationScreen.closeWindow();}};var en=30,tn=1e3,rn=async(i,e,t)=>{let r=ve([i]),n=Ct(r),a=await t.imGetFeeOptions(e,n);if(!a||!Array.isArray(a))throw new Error("Invalid fee options received from relayer");let s=a.find(o=>o.tokenSymbol==="IMX");if(!s)throw new Error("Failed to retrieve fees for IMX token");return s},nn=async(i,e,t,r,n)=>{if(!i.to)throw new m(-32602,'eth_sendTransaction requires a "to" field');let a={to:i.to.toString(),data:i.data,nonce:BigInt(0),value:i.value,revertOnError:!0},[s,o]=await Promise.all([Y(e,r,n),rn(a,r,t)]),c=[{...a,nonce:s}],d=BigInt(o.tokenPrice);return d!==BigInt(0)&&c.push({nonce:s,to:o.recipientAddress,value:d,revertOnError:!0}),c},ne=async(i,e,t)=>{let n=await O(async()=>{let a=await i.imGetTransactionByHash(e);if(a.status==="PENDING")throw new Error;return a},{retries:en,interval:tn,finalErr:new m(-32e3,"transaction hash not generated in time")});if(t.addEvent("endRetrieveRelayerTransaction"),!["SUBMITTED","SUCCESSFUL"].includes(n.status)){let a=`Transaction failed to submit with status ${n.status}.`;throw n.statusMessage&&(a+=` Error message: ${n.statusMessage}`),new m(-32e3,a)}return n},ie=async({transactionRequest:i,ethSigner:e,rpcProvider:t,guardianClient:r,relayerClient:n,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c})=>{let{chainId:d}=await t.getNetwork(),l=BigInt(d);s.addEvent("endDetectNetwork");let p=await nn(i,t,n,a,o);s.addEvent("endBuildMetaTransactions");let{nonce:u}=p[0];if(typeof u>"u")throw new Error("Failed to retrieve nonce from the smart wallet");let f=async()=>{await r.validateEVMTransaction({chainId:C(Number(d)),nonce:re(u),metaTransactions:p,isBackgroundTransaction:c}),s.addEvent("endValidateEVMTransaction");},v=async()=>{let Zt=await we(p,u,l,a,e);return s.addEvent("endGetSignedMetaTransactions"),Zt},[,y]=await Promise.all([f(),v()]),I=await n.ethSendTransaction(a,y);return s.addEvent("endRelayerSendTransaction"),{signedTransactions:y,relayerId:I,nonce:u}},an=async i=>{if(!i.to)throw new m(-32602,'im_signEjectionTransaction requires a "to" field');if(typeof i.nonce>"u")throw new m(-32602,'im_signEjectionTransaction requires a "nonce" field');if(!i.chainId)throw new m(-32602,'im_signEjectionTransaction requires a "chainId" field');return [{to:i.to.toString(),data:i.data,nonce:i.nonce??void 0,value:i.value,revertOnError:!0}]},Pt=async({transactionRequest:i,ethSigner:e,zkEvmAddress:t,flow:r})=>{let n=await an(i);r.addEvent("endBuildMetaTransactions");let a=await we(n,i.nonce,BigInt(i.chainId??0),t,e);return r.addEvent("endGetSignedMetaTransactions"),{to:t,data:a,chainId:C(Number(i.chainId??0))}};var Ie=async({params:i,ethSigner:e,rpcProvider:t,relayerClient:r,guardianClient:n,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c=!1})=>{let d=i[0],{relayerId:l}=await ie({transactionRequest:d,ethSigner:e,rpcProvider:t,guardianClient:n,relayerClient:r,zkEvmAddress:a,flow:s,nonceSpace:o,isBackgroundTransaction:c}),{hash:p}=await ne(r,l,s);return p};var At=["types","domain","primaryType","message"],sn=i=>At.every(e=>e in i),on=(i,e)=>{let t;if(typeof i=="string")try{t=JSON.parse(i);}catch(n){throw new m(-32602,`Failed to parse typed data JSON: ${n}`)}else if(typeof i=="object")t=i;else throw new m(-32602,`Invalid typed data argument: ${i}`);if(!sn(t))throw new m(-32602,`Invalid typed data argument. The following properties are required: ${At.join(", ")}`);let r=t.domain?.chainId;if(r&&(typeof r=="string"&&(r.startsWith("0x")?t.domain.chainId=parseInt(r,16).toString():t.domain.chainId=parseInt(r,10).toString()),BigInt(t.domain.chainId??0)!==e))throw new m(-32602,`Invalid chainId, expected ${e}`);return t},It=async({params:i,method:e,ethSigner:t,rpcProvider:r,relayerClient:n,guardianClient:a,flow:s})=>{let o=i[0],c=i[1];if(!o||!c)throw new m(-32602,`${e} requires an address and a typed data JSON`);let{chainId:d}=await r.getNetwork(),l=on(c,d);s.addEvent("endDetectNetwork"),await a.evaluateEIP712Message({chainID:String(d),payload:l}),s.addEvent("endValidateMessage");let p=await n.imSignTypedData(o,l);s.addEvent("endRelayerSignTypedData");let u=await Tt(l,p,BigInt(d),o,t);return s.addEvent("getSignedTypedData"),u};var St=i=>{if(!i)return i;try{let e=stripZerosLeft(getBytes(i));return toUtf8String(e)}catch{return i}};var ae=async({params:i,ethSigner:e,zkEvmAddress:t,rpcProvider:r,guardianClient:n,relayerClient:a,flow:s})=>{let o=i[0],c=i[1];if(!c||!o)throw new m(-32602,"personal_sign requires an address and a message");if(c.toLowerCase()!==t.toLowerCase())throw new m(-32602,"personal_sign requires the signer to be the from address");let d=St(o),{chainId:l}=await r.getNetwork();s.addEvent("endDetectNetwork");let p=BigInt(l),u=vt(p,d,e,c);u.then(()=>s.addEvent("endEOASignature")),await n.evaluateERC191Message({chainID:l,payload:d}),s.addEvent("endEvaluateERC191Message");let[f,v]=await Promise.all([u,a.imSign(c,d)]);s.addEvent("endRelayerSign");let y=await e.getAddress();return s.addEvent("endGetEOAAddress"),Pe(f,y,v)};var mn="https://api.immutable.com",un="https://api.sandbox.immutable.com",gn="/v1/sdk/session-activity/check",hn=i=>{switch(i){case Environment.SANDBOX:return un;case Environment.PRODUCTION:return mn;default:throw new Error("Environment not supported")}},se,bt=i=>{se||(se=wt.create({baseURL:hn(i)}));};async function kt(i){if(!se)throw new Error("Client not initialised");return se.get(gn,{params:i}).then(e=>e.data).catch(e=>{if(e.response.status!==404)throw e})}function Mt(i,e){return (...t)=>{try{let r=i(...t);return r instanceof Promise?r.catch(n=>(n instanceof Error&&trackError("passport","sessionActivityError",n),e)):r}catch(r){return r instanceof Error&&trackError("passport","sessionActivityError",r),e}}}var{getItem:Nt,setItem:Se}=utils.localStorage,Oe="sessionActivitySendCount",Lt="sessionActivityDate",be={},A={},oe={},Dt=()=>{A=Nt(Oe)||{};let i=Nt(Lt),e=new Date,t=e.getFullYear(),r=`${e.getMonth()+1}`.padStart(2,"0"),n=`${e.getDate()}`.padStart(2,"0"),a=`${t}-${r}-${n}`;(!i||i!==a)&&(A={}),Se(Lt,a),Se(Oe,A);};Dt();var Cn=i=>{Dt(),A[i]||(A[i]=0),A[i]++,Se(Oe,A),be[i]=0;},Tn=async i=>new Promise(e=>{setTimeout(e,i*1e3);}),vn=async i=>{let e=i.flow||trackFlow("passport","sendSessionActivity"),t=i.passportClient;if(!t)throw e.addEvent("No Passport Client ID"),new Error("No Passport Client ID provided");if(oe[t])return;oe[t]=!0;let{sendTransaction:r,environment:n}=i;if(!r)throw new Error("No sendTransaction function provided");if(!n)throw new Error("No environment provided");bt(n);let a=i.walletAddress;if(!a)throw e.addEvent("No Passport Wallet Address"),new Error("No wallet address");let s;try{if(s=await kt({clientId:t,wallet:a,checkCount:be[t]||0,sendCount:A[t]||0}),be[t]++,!s)return}catch(o){throw e.addEvent("Failed to fetch details"),new Error("Failed to get details",{cause:o})}if(s&&s.contractAddress&&s.functionName){let c=new Interface([`function ${s.functionName}()`]).encodeFunctionData(s.functionName),d=s.contractAddress;try{e.addEvent("Start Sending Transaction");let l=await i.sendTransaction([{to:d,from:a,data:c}],e);Cn(t),e.addEvent("Transaction Sent",{tx:l});}catch(l){e.addEvent("Failed to send Transaction");let p=new Error("Failed to send transaction",{cause:l});trackError("passport","sessionActivityError",p,{flowId:e.details.flowId});}}s&&s.delay&&s.delay>0&&(e.addEvent("Delaying Transaction",{delay:s.delay}),await Tn(s.delay),setTimeout(()=>{e.addEvent("Retrying after Delay"),oe[t]=!1,Ut({...i,flow:e});},0));},Ut=i=>Mt(vn)(i).then(()=>{oe[i.passportClient]=!1;}),Gt=Ut;var Ft=async({params:i,ethSigner:e,rpcProvider:t,relayerClient:r,guardianClient:n,zkEvmAddress:a,flow:s})=>{let o={to:a,value:0},{relayerId:c}=await ie({transactionRequest:o,ethSigner:e,rpcProvider:t,guardianClient:n,relayerClient:r,zkEvmAddress:a,flow:s});return n.withConfirmationScreen()(async()=>{let d=await ae({params:i,ethSigner:e,zkEvmAddress:a,rpcProvider:t,guardianClient:n,relayerClient:r,flow:s});return await ne(r,c,s),d})};var Bt=async({params:i,ethSigner:e,zkEvmAddress:t,flow:r})=>{if(!i||i.length!==1)throw new m(-32602,"im_signEjectionTransaction requires a singular param (hash)");let n=i[0];return await Pt({transactionRequest:n,ethSigner:e,zkEvmAddress:t,flow:r})};var ce=i=>"zkEvm"in i,de=class{#s;#t;#i;#r;#n;#e;#l;#c;#a;isPassport=!0;constructor({authManager:e,config:t,multiRollupApiClients:r,passportEventEmitter:n,guardianClient:a,ethSigner:s,user:o}){this.#s=e,this.#t=t,this.#n=a,this.#r=n,this.#a=s,this.#e=new JsonRpcProvider(this.#t.zkEvmRpcUrl,void 0,{staticNetwork:!0}),this.#c=new Q({config:this.#t,rpcProvider:this.#e,authManager:this.#s}),this.#l=r,this.#i=new b,o&&ce(o)&&this.#d(o.zkEvm.ethAddress),n.on("loggedIn",c=>{ce(c)&&this.#d(c.zkEvm.ethAddress);}),n.on("loggedOut",this.#p),n.on("accountsRequested",Gt);}#p=()=>{this.#i.emit("accountsChanged",[]);};async#d(e,t){let r=BigInt(1),n=async(a,s)=>await Ie({params:a,ethSigner:this.#a,guardianClient:this.#n,rpcProvider:this.#e,relayerClient:this.#c,zkEvmAddress:e,flow:s,nonceSpace:r,isBackgroundTransaction:!0});this.#r.emit("accountsRequested",{environment:this.#t.baseConfig.environment,sendTransaction:n,walletAddress:e,passportClient:t||this.#t.oidcConfiguration.clientId});}async#o(){try{let e=await this.#s.getUser();return e&&ce(e)?e.zkEvm.ethAddress:void 0}catch{return}}async#m(e){switch(e.method){case"eth_requestAccounts":{let t=await this.#o();if(t)return [t];let r=trackFlow("passport","ethRequestAccounts");try{let n=await this.#s.getUserOrLogin();r.addEvent("endGetUserOrLogin");let a;return ce(n)?a=n.zkEvm.ethAddress:(r.addEvent("startUserRegistration"),a=await _t({ethSigner:this.#a,authManager:this.#s,multiRollupApiClients:this.#l,accessToken:n.accessToken,rpcProvider:this.#e,flow:r}),r.addEvent("endUserRegistration")),this.#i.emit("accountsChanged",[a]),identify({passportId:n.profile.sub}),this.#d(a),[a]}catch(n){throw n instanceof Error?trackError("passport","ethRequestAccounts",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"eth_sendTransaction":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=trackFlow("passport","ethSendTransaction");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>await Ie({params:e.params||[],ethSigner:this.#a,guardianClient:this.#n,rpcProvider:this.#e,relayerClient:this.#c,zkEvmAddress:t,flow:r}))}catch(n){throw n instanceof Error?trackError("passport","eth_sendTransaction",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"eth_accounts":{let t=await this.#o();return t?[t]:[]}case"personal_sign":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=trackFlow("passport","personalSign");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>this.#t.forceScwDeployBeforeMessageSignature&&!(await Y(this.#e,t)>BigInt(0))?await Ft({params:e.params||[],zkEvmAddress:t,ethSigner:this.#a,rpcProvider:this.#e,guardianClient:this.#n,relayerClient:this.#c,flow:r}):await ae({params:e.params||[],zkEvmAddress:t,ethSigner:this.#a,rpcProvider:this.#e,guardianClient:this.#n,relayerClient:this.#c,flow:r}))}catch(n){throw n instanceof Error?trackError("passport","personal_sign",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"eth_signTypedData":case"eth_signTypedData_v4":{if(!await this.#o())throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=trackFlow("passport","ethSignTypedDataV4");try{return await this.#n.withConfirmationScreen({width:480,height:720})(async()=>await It({method:e.method,params:e.params||[],ethSigner:this.#a,rpcProvider:this.#e,relayerClient:this.#c,guardianClient:this.#n,flow:r}))}catch(n){throw n instanceof Error?trackError("passport","eth_signTypedData",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"eth_chainId":{let{chainId:t}=await this.#e.getNetwork();return toBeHex(t)}case"eth_getBalance":case"eth_getCode":case"eth_getTransactionCount":{let[t,r]=e.params||[];return this.#e.send(e.method,[t,r||"latest"])}case"eth_getStorageAt":{let[t,r,n]=e.params||[];return this.#e.send(e.method,[t,r,n||"latest"])}case"eth_call":case"eth_estimateGas":{let[t,r]=e.params||[];return this.#e.send(e.method,[t,r||"latest"])}case"eth_gasPrice":case"eth_blockNumber":case"eth_getBlockByHash":case"eth_getBlockByNumber":case"eth_getTransactionByHash":case"eth_getTransactionReceipt":return this.#e.send(e.method,e.params||[]);case"im_signEjectionTransaction":{let t=await this.#o();if(!t)throw new m(4100,"Unauthorised - call eth_requestAccounts first");let r=trackFlow("passport","imSignEjectionTransaction");try{return await Bt({params:e.params||[],ethSigner:this.#a,zkEvmAddress:t,flow:r})}catch(n){throw n instanceof Error?trackError("passport","imSignEjectionTransaction",n,{flowId:r.details.flowId}):r.addEvent("errored"),n}finally{r.addEvent("End");}}case"im_addSessionActivity":{let[t]=e.params||[],r=await this.#o();return r&&this.#d(r,t),null}default:throw new m(4200,"Method not supported")}}async request(e){try{return this.#m(e)}catch(t){throw t instanceof m?t:t instanceof Error?new m(-32603,t.message):new m(-32603,"Internal error")}}on(e,t){this.#i.on(e,t);}removeListener(e,t){this.#i.removeListener(e,t);}};var Ht={icon:'data:image/svg+xml,<svg viewBox="0 0 48 48" class="SvgIcon undefined Logo Logo--PassportSymbolOutlined css-1dn9atd" xmlns="http://www.w3.org/2000/svg"><g data-testid="undefined__g"><circle cx="24" cy="24" r="22.5" fill="url(%23paint0_radial_6324_83922)"></circle><circle cx="24" cy="24" r="22.5" fill="url(%23paint1_radial_6324_83922)"></circle><path d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM23.0718 9.16608C23.7383 8.83951 24.4406 8.86188 25.087 9.2287C27.3282 10.5059 29.5627 11.7942 31.786 13.096C32.5018 13.5165 32.8686 14.1897 32.8708 15.0173C32.8843 17.9184 32.8798 20.8171 32.8708 23.7182C32.8708 23.8255 32.8015 23.9821 32.7143 24.0335C31.8531 24.548 30.9808 25.0423 30.0347 25.5881V25.1318C30.0347 22.148 30.0257 19.1664 30.0414 16.1827C30.0436 15.6101 29.8468 15.241 29.339 14.9525C26.7377 13.474 24.1499 11.9687 21.5575 10.4723C21.4457 10.4075 21.3361 10.3381 21.1661 10.2352C21.8326 9.85722 22.4321 9.47698 23.0673 9.16608H23.0718ZM22.5953 38.8451C22.45 38.7713 22.3426 38.7198 22.2375 38.6595C18.8041 36.68 15.3752 34.687 11.9307 32.7232C10.9644 32.173 10.5238 31.3879 10.5349 30.2852C10.5551 27.9411 10.5484 25.597 10.5372 23.2507C10.5327 22.1927 10.9622 21.4255 11.8926 20.8977C14.3105 19.5221 16.715 18.1264 19.1195 16.7284C19.3275 16.6076 19.4796 16.5875 19.6965 16.7172C20.5264 17.216 21.3719 17.6924 22.2554 18.2024C22.0876 18.3031 21.9601 18.3791 21.8304 18.4552C19.2268 19.9582 16.6278 21.4658 14.0175 22.9599C13.5903 23.2037 13.3912 23.5213 13.3957 24.0179C13.4091 25.8654 13.4114 27.713 13.3957 29.5605C13.3912 30.0705 13.5948 30.3948 14.0332 30.6453C16.7866 32.2199 19.5288 33.8125 22.28 35.3916C22.5126 35.5258 22.611 35.6645 22.6065 35.9418C22.5864 36.888 22.5998 37.8363 22.5998 38.8473L22.5953 38.8451ZM22.5953 33.553C22.356 33.4166 22.1838 33.3204 22.0116 33.2198C19.8285 31.9605 17.6477 30.6967 15.4602 29.4464C15.2231 29.3122 15.1359 29.1668 15.1381 28.8917C15.1538 27.4714 15.1471 26.0511 15.1426 24.6308C15.1426 24.4384 15.1717 24.3064 15.3618 24.1991C16.167 23.7495 16.9633 23.2798 17.7618 22.8212C17.8199 22.7877 17.8826 22.7631 17.9877 22.7116V24.3064C17.9877 25.1698 18.0011 26.0354 17.9832 26.8988C17.972 27.3909 18.1622 27.7241 18.5916 27.9657C19.8285 28.6636 21.0498 29.3883 22.2867 30.0839C22.5305 30.2203 22.6043 30.3724 22.5998 30.6408C22.5842 31.5847 22.5931 32.5308 22.5931 33.5508L22.5953 33.553ZM20.0746 14.91C19.6116 14.6371 19.2157 14.6393 18.7527 14.91C16.1581 16.4265 13.5523 17.9228 10.9487 19.4259C10.8391 19.4908 10.7251 19.5489 10.5305 19.6541C10.5998 18.6654 10.3873 17.7327 10.7251 16.8291C10.9085 16.3348 11.2529 15.9635 11.7092 15.6995C13.8811 14.4447 16.0507 13.1877 18.227 11.9396C19.0211 11.4833 19.8308 11.4945 20.6248 11.953C23.0964 13.3756 25.5657 14.8026 28.0306 16.2341C28.1357 16.2945 28.2677 16.4309 28.2677 16.5338C28.2856 17.5493 28.2788 18.567 28.2788 19.6563C27.3819 19.1396 26.5543 18.6609 25.7267 18.1823C23.8412 17.093 21.9512 16.0149 20.0746 14.91ZM37.4427 30.8779C37.3778 31.6764 36.9103 32.2423 36.2192 32.6404C33.5732 34.1614 30.9294 35.6913 28.2856 37.2168C27.4557 37.6954 26.6259 38.1741 25.7938 38.6527C25.6932 38.7109 25.5903 38.7601 25.4539 38.8317C25.4449 38.693 25.4337 38.5924 25.4337 38.4917C25.4337 37.6149 25.4382 36.7404 25.4293 35.8636C25.4293 35.6645 25.4762 35.5437 25.6596 35.4386C29.5157 33.2198 33.3696 30.9942 37.2212 28.7709C37.2794 28.7374 37.3443 28.7105 37.4539 28.6591C37.4539 29.4375 37.4986 30.1622 37.4427 30.8779ZM37.4628 25.3577C37.4561 26.2658 36.9663 26.9033 36.1901 27.3506C33.175 29.0841 30.1622 30.8265 27.1493 32.5666C26.5991 32.8842 26.0466 33.1996 25.4561 33.5396C25.4472 33.3897 25.436 33.2913 25.436 33.1907C25.436 32.3273 25.4449 31.4617 25.4293 30.5983C25.4248 30.3523 25.5075 30.2226 25.72 30.0995C28.46 28.5271 31.1911 26.9368 33.9355 25.3733C34.4231 25.096 34.6378 24.7538 34.6334 24.1812C34.6132 21.1974 34.6244 18.2136 34.6244 15.2298V14.7087C35.3402 15.1404 36.0112 15.496 36.624 15.9299C37.1832 16.3258 37.465 16.9253 37.4673 17.6164C37.4762 20.1976 37.4829 22.7788 37.465 25.3599L37.4628 25.3577Z" fill="%230D0D0D"></path><path fill-rule="evenodd" d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM24 2C11.8497 2 2 11.8497 2 24C2 36.1503 11.8497 46 24 46C36.1503 46 46 36.1503 46 24C46 11.8497 36.1503 2 24 2Z" fill="url(%23paint2_radial_6324_83922)"></path><path fill-rule="evenodd" d="M24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0ZM24 2C11.8497 2 2 11.8497 2 24C2 36.1503 11.8497 46 24 46C36.1503 46 46 36.1503 46 24C46 11.8497 36.1503 2 24 2Z" fill="url(%23paint3_radial_6324_83922)"></path><defs><radialGradient id="paint0_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(13.4442 13.3899) rotate(44.9817) scale(46.7487 99.1435)"><stop stop-color="%23A3EEF8"></stop><stop offset="0.177083" stop-color="%23A4DCF5"></stop><stop offset="0.380208" stop-color="%23A6AEEC"></stop><stop offset="1" stop-color="%23ECBEE1"></stop></radialGradient><radialGradient id="paint1_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.9515 43.7068) rotate(84.265) scale(24.2138 46.3215)"><stop stop-color="%23FCF5EE"></stop><stop offset="0.715135" stop-color="%23ECBEE1" stop-opacity="0"></stop></radialGradient><radialGradient id="paint2_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(12.7405 12.6825) rotate(44.9817) scale(49.8653 105.753)"><stop stop-color="%23A3EEF8"></stop><stop offset="0.177083" stop-color="%23A4DCF5"></stop><stop offset="0.380208" stop-color="%23A6AEEC"></stop><stop offset="1" stop-color="%23ECBEE1"></stop></radialGradient><radialGradient id="paint3_radial_6324_83922" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(26.0816 45.0206) rotate(84.265) scale(25.828 49.4096)"><stop stop-color="%23FCF5EE"></stop><stop offset="0.715135" stop-color="%23ECBEE1" stop-opacity="0"></stop></radialGradient></defs></g></svg>',name:"Immutable Passport",rdns:"com.immutable.passport",uuid:v4()};function Vt(i){if(typeof window>"u")return;let e=new CustomEvent("eip6963:announceProvider",{detail:Object.freeze(i)});window.dispatchEvent(e);let t=()=>window.dispatchEvent(e);window.addEventListener("eip6963:requestProvider",t);}var Un=i=>i.overrides?createConfig({basePath:i.overrides.imxPublicApiDomain}):i.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),Gn=i=>{if(i.overrides?.imxApiClients)return i.overrides.imxApiClients;let e=Un(i);return new ImxApiClients(e)},Fn=i=>{let e=new z(i),t=new N(e),r=new U(e,t),n=new M(e),a=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),s=new G(r,a),o=new MultiRollupApiClients(e.multiRollupConfig),c=new b,d=i.overrides?i.overrides.immutableXClient:new IMXClient({baseConfig:i.baseConfig}),l=new B({confirmationScreen:n,config:e,authManager:r,guardianApi:o.guardianApi}),p=Gn(i),u=new X({authManager:r,immutableXClient:d,magicTEESigner:s,passportEventEmitter:c,imxApiClients:p,guardianClient:l});return {config:e,authManager:r,magicTEESigner:s,confirmationScreen:n,embeddedLoginPrompt:t,immutableXClient:d,multiRollupApiClients:o,passportEventEmitter:c,passportImxProviderFactory:u,guardianClient:l}},ke=class{authManager;config;confirmationScreen;embeddedLoginPrompt;immutableXClient;magicTEESigner;multiRollupApiClients;passportImxProviderFactory;passportEventEmitter;guardianClient;constructor(e){let t=Fn(e);this.config=t.config,this.authManager=t.authManager,this.magicTEESigner=t.magicTEESigner,this.confirmationScreen=t.confirmationScreen,this.embeddedLoginPrompt=t.embeddedLoginPrompt,this.immutableXClient=t.immutableXClient,this.multiRollupApiClients=t.multiRollupApiClients,this.passportEventEmitter=t.passportEventEmitter,this.passportImxProviderFactory=t.passportImxProviderFactory,this.guardianClient=t.guardianClient,setPassportClientId(e.clientId),track("passport","initialise");}async connectImxSilent(){return h(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return h(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return h(async()=>{let t=null;try{t=await this.authManager.getUser();}catch{}let r=new de({passportEventEmitter:this.passportEventEmitter,authManager:this.authManager,config:this.config,multiRollupApiClients:this.multiRollupApiClients,guardianClient:this.guardianClient,ethSigner:this.magicTEESigner,user:t});return e?.announceProvider&&Vt({info:Ht,provider:r}),r},"connectEvm",!1)}async login(e){return h(async()=>{let{useCachedSession:t=!1,useSilentLogin:r}=e||{},n=null;try{n=await this.authManager.getUser();}catch(a){if(a instanceof Error&&!a.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",a),t)throw a;S.warn("Failed to retrieve a cached user session",a);}return !n&&r?n=await this.authManager.forceUserRefresh():!n&&!t&&(e?.useRedirectFlow?await this.authManager.loginWithRedirect(e?.anonymousId,e?.directLoginOptions):n=await this.authManager.login(e?.anonymousId,e?.directLoginOptions)),n&&(identify({passportId:n.profile.sub}),this.passportEventEmitter.emit("loggedIn",n)),n?n.profile:null},"login")}async loginCallback(){await h(()=>this.authManager.loginCallback(),"loginCallback").then(e=>{e&&(identify({passportId:e.profile.sub}),this.passportEventEmitter.emit("loggedIn",e));});}loginWithPKCEFlow(e,t){return h(async()=>await this.authManager.getPKCEAuthorizationUrl(e,t),"loginWithPKCEFlow")}async loginWithPKCEFlowCallback(e,t){return h(async()=>{let r=await this.authManager.loginWithPKCEFlowCallback(e,t);return this.passportEventEmitter.emit("loggedIn",r),r.profile},"loginWithPKCEFlowCallback")}async storeTokens(e){return h(async()=>{let t=await this.authManager.storeTokens(e);return this.passportEventEmitter.emit("loggedIn",t),t.profile},"storeTokens")}async logout(){return h(async()=>{await this.authManager.logout(),this.passportEventEmitter.emit("loggedOut");},"logout")}async getLogoutUrl(){return h(async()=>(await this.authManager.removeUser(),this.passportEventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()),"getLogoutUrl")}async logoutSilentCallback(e){return h(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback")}async getUserInfo(){return h(async()=>(await this.authManager.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return h(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return h(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1,!1)}async getLinkedAddresses(){return h(async()=>{let e=await this.authManager.getUser();if(!e?.profile.sub)return [];let t={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:t})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let t=trackFlow("passport","linkExternalWallet",!1),r=await this.authManager.getUser();if(!r)throw new g("User is not logged in","NOT_LOGGED_IN_ERROR");let n=_(r),a=k(r);if(!n&&!a)throw new g("User has not been registered","USER_NOT_REGISTERED_ERROR");let s={Authorization:`Bearer ${r.accessToken}`},o={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};try{return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:o},{headers:s})).data}}catch(c){if(c instanceof Error?trackError("passport","linkExternalWallet",c):t.addEvent("errored"),isAxiosError(c)&&c.response){if(c.response.data&&le(c.response.data)){let{code:l,message:p}=c.response.data;switch(l){case"ALREADY_LINKED":throw new g(p,"LINK_WALLET_ALREADY_LINKED_ERROR");case"MAX_WALLETS_LINKED":throw new g(p,"LINK_WALLET_MAX_WALLETS_LINKED_ERROR");case"DUPLICATE_NONCE":throw new g(p,"LINK_WALLET_DUPLICATE_NONCE_ERROR");case"VALIDATION_ERROR":throw new g(p,"LINK_WALLET_VALIDATION_ERROR");default:throw new g(p,"LINK_WALLET_GENERIC_ERROR")}}else if(c.response.status)throw new g(`Link wallet request failed with status code ${c.response.status}`,"LINK_WALLET_GENERIC_ERROR")}let d="Link wallet request failed";throw c instanceof Error&&(d+=`: ${c.message}`),new g(d,"LINK_WALLET_GENERIC_ERROR")}finally{t.addEvent("End");}}};
413
413
 
414
414
  export { m as JsonRpcError, De as MarketingConsentStatus, ke as Passport, g as PassportError, ee as ProviderErrorCode, Re as ProviderEvent, w as RpcErrorCode };
@@ -29,6 +29,7 @@ export type UserProfile = {
29
29
  email?: string;
30
30
  nickname?: string;
31
31
  sub: string;
32
+ username?: string;
32
33
  };
33
34
  export declare enum RollupType {
34
35
  IMX = "imx",
@@ -129,6 +130,7 @@ export type IdTokenPayload = {
129
130
  passport?: PassportMetadata;
130
131
  email: string;
131
132
  nickname: string;
133
+ username?: string;
132
134
  aud: string;
133
135
  sub: string;
134
136
  exp: number;
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.10.7-alpha.7",
4
+ "version": "2.10.7-alpha.9",
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.10.7-alpha.7",
11
- "@imtbl/generated-clients": "2.10.7-alpha.7",
12
- "@imtbl/metrics": "2.10.7-alpha.7",
13
- "@imtbl/toolkit": "2.10.7-alpha.7",
14
- "@imtbl/x-client": "2.10.7-alpha.7",
15
- "@imtbl/x-provider": "2.10.7-alpha.7",
10
+ "@imtbl/config": "2.10.7-alpha.9",
11
+ "@imtbl/generated-clients": "2.10.7-alpha.9",
12
+ "@imtbl/metrics": "2.10.7-alpha.9",
13
+ "@imtbl/toolkit": "2.10.7-alpha.9",
14
+ "@imtbl/x-client": "2.10.7-alpha.9",
15
+ "@imtbl/x-provider": "2.10.7-alpha.9",
16
16
  "@magic-ext/oidc": "12.0.5",
17
17
  "@magic-sdk/provider": "^29.0.5",
18
18
  "@metamask/detect-provider": "^2.0.0",