@imtbl/passport 2.4.10-alpha.1 → 2.4.10-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +1 -1
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.js +1 -1
- package/package.json +7 -7
package/dist/browser/index.js
CHANGED
|
@@ -331,7 +331,7 @@ function je(o){throw new Error("Node.js process "+o+" is not supported by JSPM c
|
|
|
331
331
|
${Di()}
|
|
332
332
|
</div>
|
|
333
333
|
</div>
|
|
334
|
-
`;function Ie({id:o,href:t,rel:n,crossOrigin:a}){let l=`${ge}-${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 qt=()=>$t(Ui()),Zt=()=>$t(Ni());var Y=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){Ie({id:"link-googleapis",href:"https://fonts.googleapis.com"}),Ie({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),Ie({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?qt():Zt(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(t){let n=document.getElementById(ve);n&&(this.tryAgainListener&&n.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=t,n.addEventListener("click",t));}updateCloseButton(t){let n=document.getElementById(Ae);n&&(this.onCloseListener&&n.removeEventListener("click",this.onCloseListener),this.onCloseListener=t,n.addEventListener("click",t));}};var Pe=class{storage;constructor(t,n){this.storage=Li.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 Xi={headers:{"Content-Type":"application/x-www-form-urlencoded"}},Ji="/v2/logout",zi="/im-logged-out",ji="/authorize",Yi=o=>o?zi:Ji,Qi=o=>{let{authenticationDomain:t,oidcConfiguration:n}=o,a;o.crossSdkBridgeEnabled?a=new Pe("ImmutableSDKPassport",Li.INDEXEDDB):typeof window<"u"?a=window.localStorage:a=new InMemoryWebStorage;let l=new WebStorageStateStore({store:a}),d=new URL(Yi(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 et(o){return btoa(String.fromCharCode(...new Uint8Array(o))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function ea(o){let n=new TextEncoder().encode(o);return await window.crypto.subtle.digest("SHA-256",n)}var he=class o{userManager;deviceCredentialsManager;config;logoutMode;refreshingPromise=null;constructor(t){this.config=t,this.userManager=new UserManager(Qi(t)),this.deviceCredentialsManager=new me,this.logoutMode=t.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=t=>{let n;t.id_token&&(n=Kt(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=Kt(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){let a={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:t||""};if(n){if(n.directLoginMethod==="email"){let l=n.email;l&&(a.direct=n.directLoginMethod,a.email=l);}else a.direct=n.directLoginMethod;n.marketingConsentStatus&&(a.marketingConsent=n.marketingConsentStatus);}return a}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="passportLoginPrompt",l=async()=>{let d=this.buildExtraQueryParams(t,n);return this.userManager.signinPopup({extraQueryParams:d,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a})};return new Promise((d,s)=>{l().then(m=>{d(o.mapOidcUserToDomainModel(m));}).catch(m=>{if(!(m instanceof Error)||m.message!=="Attempted to navigate on a disposed window"){s(m);return}let h=!1,f=new Y(this.config.popupOverlayOptions,!0);f.append(async()=>{try{if(h)window.open("",a);else {h=!0;let E=await l();f.remove(),d(o.mapOidcUserToDomainModel(E));}}catch(E){f.remove(),s(E);}},()=>{f.remove(),s(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let t=null;try{t=await this.getUser();}catch(n){ne.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){let n=et(window.crypto.getRandomValues(new Uint8Array(32))),a=et(await ea(n)),l=et(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:d,scope:s,audience:m,clientId:h}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:l,verifier:n});let f=new URL(ji,this.config.authenticationDomain);if(f.searchParams.set("response_type","code"),f.searchParams.set("code_challenge",a),f.searchParams.set("code_challenge_method","S256"),f.searchParams.set("client_id",h),f.searchParams.set("redirect_uri",d),f.searchParams.set("state",l),s&&f.searchParams.set("scope",s),m&&f.searchParams.set("audience",m),t){if(t.directLoginMethod==="email"){let E=t.email;E&&(f.searchParams.set("direct",t.directLoginMethod),f.searchParams.set("email",E));}else f.searchParams.set("direct",t.directLoginMethod);t.marketingConsentStatus&&f.searchParams.set("marketingConsent",t.marketingConsentStatus);}return 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 vr.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},Xi)).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||(ne.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(t=>{ne.warn("Failed to refresh user token",t);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(t=>(ne.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(m){m instanceof Error&&(d=`${d}: Failed to remove user: ${m.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(!Ft(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(le);if(!t)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return t}async getUserImx(){let t=await this.getUser(K);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 zt="ETH",fe=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()),K(n)&&n.imx.userAdminAddress!==t.walletAddress)throw new I(`Wallet address mismatch.Rollup: IMX, TEE address: ${t.walletAddress}, profile address: ${n.imx.userAdminAddress}`,"WALLET_CONNECTION_ERROR");if(le(n)&&n.zkEvm.userAdminAddress!==t.walletAddress)throw new I(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${t.walletAddress}, profile address: ${n.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return t}async createWallet(){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(t,n)=>{try{this.userWallet=null;let a=await this.getUserOrThrow(),l=o.getHeaders(a);await S(async d=>{try{let s=performance.now(),m=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({createWalletRequestModel:{chain:zt}},{headers:l});return trackDuration("passport",d.details.flowName,Math.round(performance.now()-s)),this.userWallet={userIdentifier:a.profile.sub,walletAddress:m.data.public_address},t(this.userWallet)}catch(s){let m="Failed to create wallet";return isAxiosError(s)?s.response?m+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:m+=`: ${s.message}`:m+=`: ${s.message}`,n(new Error(m))}},"magicCreateWallet");}catch(a){n(a);}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${C.from(t).toString("hex")}`:t,a=await this.getUserOrThrow(),l=await o.getHeaders(a);return S(async d=>{try{let s=performance.now(),m=await this.magicTeeApiClient.signOperationsApi.signMessageV1WalletPersonalSignPost({signMessageRequest:{message_base64:C.from(n,"utf-8").toString("base64"),chain:zt}},{headers:l});return trackDuration("passport",d.details.flowName,Math.round(performance.now()-s)),m.data.signature}catch(s){let m="Failed to create signature using EOA";throw isAxiosError(s)?s.response?m+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:m+=`: ${s.message}`:m+=`: ${s.message}`,new Error(m)}},"magicPersonalSign")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var jt=async o=>k(async()=>{let t=await generateLegacyStarkPrivateKey(o);return createStarkSigner(t)},"WALLET_CONNECTION_ERROR");async function Yt({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}}),m=await t.getAddress(),{payload_hash:h}=s.data,f=await t.signMessage(h),E={sender_stark_key:s.data.sender_stark_key||m,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:f},w={Authorization:`Bearer ${o.accessToken}`},T=await a.createExchangeTransfer({id:n.transactionID,createTransferRequest:E},{headers:w});return {sent_signature:T?.data.sent_signature,status:T?.data.status?.toString(),time:T?.data.time,transfer_id:T?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var er="ERC721";async function tr({starkSigner:o,user:t,request:n,ordersApi:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=t.imx,s=n.sell.type===er?"1":n.sell.amount,m=n.buy.type===er?"1":n.buy.amount,h={Authorization:`Bearer ${t.accessToken}`},f={user:d,amount_buy:m,token_buy:convertToSignableToken(n.buy),amount_sell:s,token_sell:convertToSignableToken(n.sell),fees:n.fees,split_fees:!0,expiration_timestamp:n.expiration_timestamp},E=await a.getSignableOrder({getSignableOrderRequestV3:f},{headers:h});await l.evaluateImxTransaction({payloadHash:E.data.payload_hash});let{payload_hash:w}=E.data,T=await o.signMessage(w),y=E.data,_={createOrderRequest:{include_fees:!0,fees:n.fees,stark_signature:T,amount_buy:y.amount_buy,amount_sell:y.amount_sell,asset_id_buy:y.asset_id_buy,asset_id_sell:y.asset_id_sell,expiration_timestamp:y.expiration_timestamp,nonce:y.nonce,stark_key:y.stark_key,vault_id_buy:y.vault_id_buy,vault_id_sell:y.vault_id_sell}};return {...(await a.createOrderV3(_,{headers:h})).data}},"CREATE_ORDER_ERROR")}async function rr({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}`},m=await a.getSignableCancelOrderV3({getSignableCancelOrderRequest:d},{headers:s});await l.evaluateImxTransaction({payloadHash:m.data.payload_hash});let{payload_hash:h}=m.data,f=await t.signMessage(h),E=await a.cancelOrderV3({id:n.order_id.toString(),cancelOrderRequest:{order_id:n.order_id,stark_signature:f}},{headers:s});return {order_id:E.data.order_id,status:E.data.status}},"CANCEL_ORDER_ERROR")}async function tt({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:m,payload_hash:h}=s.data,[f,E]=await Promise.all([signRaw(m,o),t.signMessage(h)]);return (await n.usersApi.registerPassportUserV2({authorization:`Bearer ${a}`,registerPassportUserRequest:{eth_signature:f,ether_key:l,stark_signature:E,stark_key:d}})).data},"USER_REGISTRATION_ERROR")}async function nr({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},m={Authorization:`Bearer ${n.accessToken}`},h=await t.getSignableTrade({getSignableTradeRequest:s},{headers:m});await l.evaluateImxTransaction({payloadHash:h.data.payload_hash});let{payload_hash:f}=h.data,E=await a.signMessage(f),{data:w}=h,T={createTradeRequest:{include_fees:!0,fees:o?.fees,stark_signature:E,order_id:o?.order_id,fee_info:w.fee_info,amount_buy:w.amount_buy,amount_sell:w.amount_sell,asset_id_buy:w.asset_id_buy,asset_id_sell:w.asset_id_sell,expiration_timestamp:w.expiration_timestamp,nonce:w.nonce,stark_key:w.stark_key,vault_id_buy:w.vault_id_buy,vault_id_sell:w.vault_id_sell}},{data:y}=await t.createTradeV3(T,{headers:m});return y},"CREATE_TRADE_ERROR")}var ar="ERC721";async function sr({request:o,transfersApi:t,starkSigner:n,user:a,guardianClient:l}){return k(async()=>{let d=o.type===ar?"1":o.amount,s={sender:a.imx.ethAddress,token:convertToSignableToken(o),amount:d,receiver:o.receiver},m={Authorization:`Bearer ${a.accessToken}`},h=await t.getSignableTransferV1({getSignableTransferRequest:s},{headers:m});await l.evaluateImxTransaction({payloadHash:h.data.payload_hash});let f=h.data,{payload_hash:E}=f,w=await n.signMessage(E),T=await n.getAddress(),_={createTransferRequest:{sender_stark_key:f.sender_stark_key||T,sender_vault_id:f.sender_vault_id,receiver_stark_key:f.receiver_stark_key,receiver_vault_id:f.receiver_vault_id,asset_id:f.asset_id,amount:f.amount,nonce:f.nonce,expiration_timestamp:f.expiration_timestamp,stark_signature:w}},{data:v}=await t.createTransferV1(_,{headers:m});return {sent_signature:v.sent_signature,status:v.status?.toString(),time:v.time,transfer_id:v.transfer_id}},"TRANSFER_ERROR")}async function or({user:o,starkSigner:t,request:n,transfersApi:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=o.imx,s=n.map(T=>({amount:"1",token:convertToSignableToken({type:ar,tokenId:T.tokenId,tokenAddress:T.tokenAddress}),receiver:T.receiver})),m={Authorization:`Bearer ${o.accessToken}`},h=await a.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:d,signable_requests:s}},{headers:m});await l.evaluateImxTransaction({payloadHash:h.data.signable_responses[0]?.payload_hash});let f=await Promise.all(h.data.signable_responses.map(async T=>{let y=await t.signMessage(T.payload_hash);return {sender_vault_id:T.sender_vault_id,receiver_stark_key:T.receiver_stark_key,receiver_vault_id:T.receiver_vault_id,asset_id:T.asset_id,amount:T.amount,nonce:T.nonce,expiration_timestamp:T.expiration_timestamp,stark_signature:y}})),E={sender_stark_key:h.data.sender_stark_key,requests:f};return {transfer_ids:(await a.createTransfer({createTransferRequestV2:E},{headers:m}))?.data.transfer_ids}},"TRANSFER_ERROR")}var la=o=>new Promise(t=>{setTimeout(()=>t(),o);}),ie=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 la(a),ie(o,{retries:n-1,finalErr:l,finallyFn:d}))}finally{n<=0&&d();}};async function cr(o){await ie(async()=>{let t=await o.forceUserRefresh();return t?.imx?t:Promise.reject(new Error("user wallet addresses not exist"))});}async function rt(o,t,n,a,l){return k(async()=>{try{let d=await tt({ethSigner:o,starkSigner:t,imxApiClients:l},n.accessToken);return await cr(a),d}catch(d){if(vr.isAxiosError(d)&&d.response?.status===409)return await cr(a),{tx_hash:""};throw d}},"USER_REGISTRATION_ERROR")}var Se=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.#t(),a.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#t(){this.starkSigner=new Promise(async t=>{try{t(await jt(this.magicTEESigner));}catch(n){this.signerInitialisationError=n,t(void 0);}});}async#r(){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#a(){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#n(){let[t,n]=await Promise.all([this.#r(),this.#a()]);if(!K(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.#n();return sr({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.#r(),this.#a()]);return await rt(this.magicTEESigner,n,t,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return S(async()=>!!(await this.#r()).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.#n();return tr({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.#n();return rr({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.#n();return nr({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.#n();return or({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.#n();return Yt({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.#r();if(!K(t))throw new I("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(t.imx.ethAddress)},"imxGetAddress")}};var Oe=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 Se({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var ur=(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")}},xe=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:t,overrides:n,crossSdkBridgeEnabled:a,jsonRpcReferrer:l,forceScwDeployBeforeMessageSignature:d,popupOverlayOptions:s,...m}){if(ur(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=t,this.crossSdkBridgeEnabled=a||!1,this.forceScwDeployBeforeMessageSignature=d||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1},n)ur(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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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 Ee="imx_passport_confirmation";var be=({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,`
|
|
334
|
+
`;function Ie({id:o,href:t,rel:n,crossOrigin:a}){let l=`${ge}-${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 qt=()=>$t(Ui()),Zt=()=>$t(Ni());var Y=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){Ie({id:"link-googleapis",href:"https://fonts.googleapis.com"}),Ie({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),Ie({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?qt():Zt(),document.body.insertAdjacentElement("beforeend",t),this.overlay=t;}}updateTryAgainButton(t){let n=document.getElementById(ve);n&&(this.tryAgainListener&&n.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=t,n.addEventListener("click",t));}updateCloseButton(t){let n=document.getElementById(Ae);n&&(this.onCloseListener&&n.removeEventListener("click",this.onCloseListener),this.onCloseListener=t,n.addEventListener("click",t));}};var Pe=class{storage;constructor(t,n){this.storage=Li.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 Xi={headers:{"Content-Type":"application/x-www-form-urlencoded"}},Ji="/v2/logout",zi="/im-logged-out",ji="/authorize",Yi=o=>o?zi:Ji,Qi=o=>{let{authenticationDomain:t,oidcConfiguration:n}=o,a;o.crossSdkBridgeEnabled&&typeof window<"u"?a=new Pe("ImmutableSDKPassport",Li.INDEXEDDB):typeof window<"u"?a=window.localStorage:a=new InMemoryWebStorage;let l=new WebStorageStateStore({store:a}),d=new URL(Yi(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 et(o){return btoa(String.fromCharCode(...new Uint8Array(o))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function ea(o){let n=new TextEncoder().encode(o);return await window.crypto.subtle.digest("SHA-256",n)}var he=class o{userManager;deviceCredentialsManager;config;logoutMode;refreshingPromise=null;constructor(t){this.config=t,this.userManager=new UserManager(Qi(t)),this.deviceCredentialsManager=new me,this.logoutMode=t.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=t=>{let n;t.id_token&&(n=Kt(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=Kt(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){let a={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:t||""};if(n){if(n.directLoginMethod==="email"){let l=n.email;l&&(a.direct=n.directLoginMethod,a.email=l);}else a.direct=n.directLoginMethod;n.marketingConsentStatus&&(a.marketingConsent=n.marketingConsentStatus);}return a}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="passportLoginPrompt",l=async()=>{let d=this.buildExtraQueryParams(t,n);return this.userManager.signinPopup({extraQueryParams:d,popupWindowFeatures:{width:410,height:450},popupWindowTarget:a})};return new Promise((d,s)=>{l().then(m=>{d(o.mapOidcUserToDomainModel(m));}).catch(m=>{if(!(m instanceof Error)||m.message!=="Attempted to navigate on a disposed window"){s(m);return}let h=!1,f=new Y(this.config.popupOverlayOptions,!0);f.append(async()=>{try{if(h)window.open("",a);else {h=!0;let E=await l();f.remove(),d(o.mapOidcUserToDomainModel(E));}}catch(E){f.remove(),s(E);}},()=>{f.remove(),s(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let t=null;try{t=await this.getUser();}catch(n){ne.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){let n=et(window.crypto.getRandomValues(new Uint8Array(32))),a=et(await ea(n)),l=et(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:d,scope:s,audience:m,clientId:h}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:l,verifier:n});let f=new URL(ji,this.config.authenticationDomain);if(f.searchParams.set("response_type","code"),f.searchParams.set("code_challenge",a),f.searchParams.set("code_challenge_method","S256"),f.searchParams.set("client_id",h),f.searchParams.set("redirect_uri",d),f.searchParams.set("state",l),s&&f.searchParams.set("scope",s),m&&f.searchParams.set("audience",m),t){if(t.directLoginMethod==="email"){let E=t.email;E&&(f.searchParams.set("direct",t.directLoginMethod),f.searchParams.set("email",E));}else f.searchParams.set("direct",t.directLoginMethod);t.marketingConsentStatus&&f.searchParams.set("marketingConsent",t.marketingConsentStatus);}return 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 vr.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},Xi)).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||(ne.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(t=>{ne.warn("Failed to refresh user token",t);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(t=>(ne.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(m){m instanceof Error&&(d=`${d}: Failed to remove user: ${m.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(!Ft(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(le);if(!t)throw new Error("Failed to obtain a User with the required ZkEvm attributes");return t}async getUserImx(){let t=await this.getUser(K);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 zt="ETH",fe=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()),K(n)&&n.imx.userAdminAddress!==t.walletAddress)throw new I(`Wallet address mismatch.Rollup: IMX, TEE address: ${t.walletAddress}, profile address: ${n.imx.userAdminAddress}`,"WALLET_CONNECTION_ERROR");if(le(n)&&n.zkEvm.userAdminAddress!==t.walletAddress)throw new I(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${t.walletAddress}, profile address: ${n.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return t}async createWallet(){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(t,n)=>{try{this.userWallet=null;let a=await this.getUserOrThrow(),l=o.getHeaders(a);await S(async d=>{try{let s=performance.now(),m=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({createWalletRequestModel:{chain:zt}},{headers:l});return trackDuration("passport",d.details.flowName,Math.round(performance.now()-s)),this.userWallet={userIdentifier:a.profile.sub,walletAddress:m.data.public_address},t(this.userWallet)}catch(s){let m="Failed to create wallet";return isAxiosError(s)?s.response?m+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:m+=`: ${s.message}`:m+=`: ${s.message}`,n(new Error(m))}},"magicCreateWallet");}catch(a){n(a);}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${C.from(t).toString("hex")}`:t,a=await this.getUserOrThrow(),l=await o.getHeaders(a);return S(async d=>{try{let s=performance.now(),m=await this.magicTeeApiClient.signOperationsApi.signMessageV1WalletPersonalSignPost({signMessageRequest:{message_base64:C.from(n,"utf-8").toString("base64"),chain:zt}},{headers:l});return trackDuration("passport",d.details.flowName,Math.round(performance.now()-s)),m.data.signature}catch(s){let m="Failed to create signature using EOA";throw isAxiosError(s)?s.response?m+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:m+=`: ${s.message}`:m+=`: ${s.message}`,new Error(m)}},"magicPersonalSign")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var jt=async o=>k(async()=>{let t=await generateLegacyStarkPrivateKey(o);return createStarkSigner(t)},"WALLET_CONNECTION_ERROR");async function Yt({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}}),m=await t.getAddress(),{payload_hash:h}=s.data,f=await t.signMessage(h),E={sender_stark_key:s.data.sender_stark_key||m,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:f},w={Authorization:`Bearer ${o.accessToken}`},T=await a.createExchangeTransfer({id:n.transactionID,createTransferRequest:E},{headers:w});return {sent_signature:T?.data.sent_signature,status:T?.data.status?.toString(),time:T?.data.time,transfer_id:T?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var er="ERC721";async function tr({starkSigner:o,user:t,request:n,ordersApi:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=t.imx,s=n.sell.type===er?"1":n.sell.amount,m=n.buy.type===er?"1":n.buy.amount,h={Authorization:`Bearer ${t.accessToken}`},f={user:d,amount_buy:m,token_buy:convertToSignableToken(n.buy),amount_sell:s,token_sell:convertToSignableToken(n.sell),fees:n.fees,split_fees:!0,expiration_timestamp:n.expiration_timestamp},E=await a.getSignableOrder({getSignableOrderRequestV3:f},{headers:h});await l.evaluateImxTransaction({payloadHash:E.data.payload_hash});let{payload_hash:w}=E.data,T=await o.signMessage(w),y=E.data,_={createOrderRequest:{include_fees:!0,fees:n.fees,stark_signature:T,amount_buy:y.amount_buy,amount_sell:y.amount_sell,asset_id_buy:y.asset_id_buy,asset_id_sell:y.asset_id_sell,expiration_timestamp:y.expiration_timestamp,nonce:y.nonce,stark_key:y.stark_key,vault_id_buy:y.vault_id_buy,vault_id_sell:y.vault_id_sell}};return {...(await a.createOrderV3(_,{headers:h})).data}},"CREATE_ORDER_ERROR")}async function rr({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}`},m=await a.getSignableCancelOrderV3({getSignableCancelOrderRequest:d},{headers:s});await l.evaluateImxTransaction({payloadHash:m.data.payload_hash});let{payload_hash:h}=m.data,f=await t.signMessage(h),E=await a.cancelOrderV3({id:n.order_id.toString(),cancelOrderRequest:{order_id:n.order_id,stark_signature:f}},{headers:s});return {order_id:E.data.order_id,status:E.data.status}},"CANCEL_ORDER_ERROR")}async function tt({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:m,payload_hash:h}=s.data,[f,E]=await Promise.all([signRaw(m,o),t.signMessage(h)]);return (await n.usersApi.registerPassportUserV2({authorization:`Bearer ${a}`,registerPassportUserRequest:{eth_signature:f,ether_key:l,stark_signature:E,stark_key:d}})).data},"USER_REGISTRATION_ERROR")}async function nr({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},m={Authorization:`Bearer ${n.accessToken}`},h=await t.getSignableTrade({getSignableTradeRequest:s},{headers:m});await l.evaluateImxTransaction({payloadHash:h.data.payload_hash});let{payload_hash:f}=h.data,E=await a.signMessage(f),{data:w}=h,T={createTradeRequest:{include_fees:!0,fees:o?.fees,stark_signature:E,order_id:o?.order_id,fee_info:w.fee_info,amount_buy:w.amount_buy,amount_sell:w.amount_sell,asset_id_buy:w.asset_id_buy,asset_id_sell:w.asset_id_sell,expiration_timestamp:w.expiration_timestamp,nonce:w.nonce,stark_key:w.stark_key,vault_id_buy:w.vault_id_buy,vault_id_sell:w.vault_id_sell}},{data:y}=await t.createTradeV3(T,{headers:m});return y},"CREATE_TRADE_ERROR")}var ar="ERC721";async function sr({request:o,transfersApi:t,starkSigner:n,user:a,guardianClient:l}){return k(async()=>{let d=o.type===ar?"1":o.amount,s={sender:a.imx.ethAddress,token:convertToSignableToken(o),amount:d,receiver:o.receiver},m={Authorization:`Bearer ${a.accessToken}`},h=await t.getSignableTransferV1({getSignableTransferRequest:s},{headers:m});await l.evaluateImxTransaction({payloadHash:h.data.payload_hash});let f=h.data,{payload_hash:E}=f,w=await n.signMessage(E),T=await n.getAddress(),_={createTransferRequest:{sender_stark_key:f.sender_stark_key||T,sender_vault_id:f.sender_vault_id,receiver_stark_key:f.receiver_stark_key,receiver_vault_id:f.receiver_vault_id,asset_id:f.asset_id,amount:f.amount,nonce:f.nonce,expiration_timestamp:f.expiration_timestamp,stark_signature:w}},{data:v}=await t.createTransferV1(_,{headers:m});return {sent_signature:v.sent_signature,status:v.status?.toString(),time:v.time,transfer_id:v.transfer_id}},"TRANSFER_ERROR")}async function or({user:o,starkSigner:t,request:n,transfersApi:a,guardianClient:l}){return k(async()=>{let{ethAddress:d}=o.imx,s=n.map(T=>({amount:"1",token:convertToSignableToken({type:ar,tokenId:T.tokenId,tokenAddress:T.tokenAddress}),receiver:T.receiver})),m={Authorization:`Bearer ${o.accessToken}`},h=await a.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:d,signable_requests:s}},{headers:m});await l.evaluateImxTransaction({payloadHash:h.data.signable_responses[0]?.payload_hash});let f=await Promise.all(h.data.signable_responses.map(async T=>{let y=await t.signMessage(T.payload_hash);return {sender_vault_id:T.sender_vault_id,receiver_stark_key:T.receiver_stark_key,receiver_vault_id:T.receiver_vault_id,asset_id:T.asset_id,amount:T.amount,nonce:T.nonce,expiration_timestamp:T.expiration_timestamp,stark_signature:y}})),E={sender_stark_key:h.data.sender_stark_key,requests:f};return {transfer_ids:(await a.createTransfer({createTransferRequestV2:E},{headers:m}))?.data.transfer_ids}},"TRANSFER_ERROR")}var la=o=>new Promise(t=>{setTimeout(()=>t(),o);}),ie=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 la(a),ie(o,{retries:n-1,finalErr:l,finallyFn:d}))}finally{n<=0&&d();}};async function cr(o){await ie(async()=>{let t=await o.forceUserRefresh();return t?.imx?t:Promise.reject(new Error("user wallet addresses not exist"))});}async function rt(o,t,n,a,l){return k(async()=>{try{let d=await tt({ethSigner:o,starkSigner:t,imxApiClients:l},n.accessToken);return await cr(a),d}catch(d){if(vr.isAxiosError(d)&&d.response?.status===409)return await cr(a),{tx_hash:""};throw d}},"USER_REGISTRATION_ERROR")}var Se=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.#t(),a.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#t(){this.starkSigner=new Promise(async t=>{try{t(await jt(this.magicTEESigner));}catch(n){this.signerInitialisationError=n,t(void 0);}});}async#r(){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#a(){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#n(){let[t,n]=await Promise.all([this.#r(),this.#a()]);if(!K(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.#n();return sr({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.#r(),this.#a()]);return await rt(this.magicTEESigner,n,t,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return S(async()=>!!(await this.#r()).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.#n();return tr({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.#n();return rr({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.#n();return nr({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.#n();return or({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.#n();return Yt({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.#r();if(!K(t))throw new I("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(t.imx.ethAddress)},"imxGetAddress")}};var Oe=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 Se({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var ur=(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")}},xe=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:t,overrides:n,crossSdkBridgeEnabled:a,jsonRpcReferrer:l,forceScwDeployBeforeMessageSignature:d,popupOverlayOptions:s,...m}){if(ur(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=t,this.crossSdkBridgeEnabled=a||!1,this.forceScwDeployBeforeMessageSignature=d||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1},n)ur(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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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 Ee="imx_passport_confirmation";var be=({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,`
|
|
335
335
|
scrollbars=yes,
|
|
336
336
|
width=${n},
|
|
337
337
|
height=${a},
|
package/dist/node/index.cjs
CHANGED
|
@@ -357,7 +357,7 @@ function oe(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
|
|
|
357
357
|
${Xt()}
|
|
358
358
|
</div>
|
|
359
359
|
</div>
|
|
360
|
-
`;function H({id:n,href:e,rel:t,crossOrigin:r}){let i=`${M}-${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 Le=()=>De(Zt()),Ge=()=>De(Kt());var _=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){H({id:"link-googleapis",href:"https://fonts.googleapis.com"}),H({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),H({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?Le():Ge(),document.body.insertAdjacentElement("beforeend",e),this.overlay=e;}}updateTryAgainButton(e){let t=document.getElementById(V);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(B);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var W=class{storage;constructor(e,t){this.storage=Jt__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 sr={headers:{"Content-Type":"application/x-www-form-urlencoded"}},or="/v2/logout",cr="/im-logged-out",dr="/authorize",lr=n=>n?cr:or,pr=n=>{let{authenticationDomain:e,oidcConfiguration:t}=n,r;n.crossSdkBridgeEnabled?r=new W("ImmutableSDKPassport",Jt__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let i=new oidcClientTs.WebStorageStateStore({store:r}),a=new URL(lr(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 ce(n){return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function mr(n){let t=new TextEncoder().encode(n);return await window.crypto.subtle.digest("SHA-256",t)}var N=class n{userManager;deviceCredentialsManager;config;logoutMode;refreshingPromise=null;constructor(e){this.config=e,this.userManager=new oidcClientTs.UserManager(pr(e)),this.deviceCredentialsManager=new x,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=Fe__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=Fe__default.default(e.id_token);return new oidcClientTs.User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:metrics.getDetail(metrics.Detail.RUNTIME_ID)||"",third_party_a_id:e||""};if(t){if(t.directLoginMethod==="email"){let i=t.email;i&&(r.direct=t.directLoginMethod,r.email=i);}else r.direct=t.directLoginMethod;t.marketingConsentStatus&&(r.marketingConsent=t.marketingConsentStatus);}return r}async loginWithRedirect(e,t){return await this.userManager.clearStaleState(),f(async()=>{let r=this.buildExtraQueryParams(e,t);await this.userManager.signinRedirect({extraQueryParams:r});},"AUTHENTICATION_ERROR")}async login(e,t){return f(async()=>{let r="passportLoginPrompt",i=async()=>{let a=this.buildExtraQueryParams(e,t);return this.userManager.signinPopup({extraQueryParams:a,popupWindowFeatures:{width:410,height:450},popupWindowTarget:r})};return new Promise((a,s)=>{i().then(o=>{a(n.mapOidcUserToDomainModel(o));}).catch(o=>{if(!(o instanceof Error)||o.message!=="Attempted to navigate on a disposed window"){s(o);return}let c=!1,d=new _(this.config.popupOverlayOptions,!0);d.append(async()=>{try{if(c)window.open("",r);else {c=!0;let l=await i();d.remove(),a(n.mapOidcUserToDomainModel(l));}}catch(l){d.remove(),s(l);}},()=>{d.remove(),s(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){I.warn("Failed to retrieve a cached user session",t);}return e||this.login()}async loginCallback(){return f(async()=>{let e=await this.userManager.signinCallback();if(e)return n.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e){let t=ce(window.crypto.getRandomValues(new Uint8Array(32))),r=ce(await mr(t)),i=ce(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:a,scope:s,audience:o,clientId:c}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:i,verifier:t});let d=new URL(dr,this.config.authenticationDomain);if(d.searchParams.set("response_type","code"),d.searchParams.set("code_challenge",r),d.searchParams.set("code_challenge_method","S256"),d.searchParams.set("client_id",c),d.searchParams.set("redirect_uri",a),d.searchParams.set("state",i),s&&d.searchParams.set("scope",s),o&&d.searchParams.set("audience",o),e){if(e.directLoginMethod==="email"){let l=e.email;l&&(d.searchParams.set("direct",e.directLoginMethod),d.searchParams.set("email",l));}else d.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&d.searchParams.set("marketingConsent",e.marketingConsentStatus);}return d.toString()}async loginWithPKCEFlowCallback(e,t){return f(async()=>{let r=this.deviceCredentialsManager.getPKCEData();if(!r)throw new Error("No code verifier or state for PKCE");if(t!==r.state)throw new Error("Provided state does not match stored state");let 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 Et__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},sr)).data}async storeTokens(e){return f(async()=>{let t=n.mapDeviceTokenResponseToOidcUser(e),r=n.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return f(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(I.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{I.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(I.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(!be(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(v);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 He="ETH",U=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()),v(t)&&t.imx.userAdminAddress!==e.walletAddress)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!==e.walletAddress)throw new g(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${e.walletAddress}, profile address: ${t.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return e}async createWallet(){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(e,t)=>{try{this.userWallet=null;let r=await this.getUserOrThrow(),i=n.getHeaders(r);await h(async a=>{try{let s=performance.now(),o=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({createWalletRequestModel:{chain:He}},{headers:i});return metrics.trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),this.userWallet={userIdentifier:r.profile.sub,walletAddress:o.data.public_address},e(this.userWallet)}catch(s){let o="Failed to create wallet";return Et.isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,t(new Error(o))}},"magicCreateWallet");}catch(r){t(r);}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.signMessageV1WalletPersonalSignPost({signMessageRequest:{message_base64:Buffer.from(t,"utf-8").toString("base64"),chain:He}},{headers:i});return metrics.trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),o.data.signature}catch(s){let o="Failed to create signature using EOA";throw Et.isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,new Error(o)}},"magicPersonalSign")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var We=async n=>f(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(n);return xClient.createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function $e({user:n,starkSigner:e,request:t,exchangesApi:r}){return f(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},m={Authorization:`Bearer ${n.accessToken}`},u=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:m});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 Ze="ERC721";async function Ke({starkSigner:n,user:e,request:t,ordersApi:r,guardianClient:i}){return f(async()=>{let{ethAddress:a}=e.imx,s=t.sell.type===Ze?"1":t.sell.amount,o=t.buy.type===Ze?"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:m}=l.data,u=await n.signMessage(m),E=l.data,C={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:u,amount_buy:E.amount_buy,amount_sell:E.amount_sell,asset_id_buy:E.asset_id_buy,asset_id_sell:E.asset_id_sell,expiration_timestamp:E.expiration_timestamp,nonce:E.nonce,stark_key:E.stark_key,vault_id_buy:E.vault_id_buy,vault_id_sell:E.vault_id_sell}};return {...(await r.createOrderV3(C,{headers:c})).data}},"CREATE_ORDER_ERROR")}async function Xe({user:n,starkSigner:e,request:t,ordersApi:r,guardianClient:i}){return f(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 de({ethSigner:n,starkSigner:e,imxApiClients:t},r){return f(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 Je({request:n,tradesApi:e,user:t,starkSigner:r,guardianClient:i}){return f(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:m}=c,u={createTradeRequest:{include_fees:!0,fees:n?.fees,stark_signature:l,order_id:n?.order_id,fee_info:m.fee_info,amount_buy:m.amount_buy,amount_sell:m.amount_sell,asset_id_buy:m.asset_id_buy,asset_id_sell:m.asset_id_sell,expiration_timestamp:m.expiration_timestamp,nonce:m.nonce,stark_key:m.stark_key,vault_id_buy:m.vault_id_buy,vault_id_sell:m.vault_id_sell}},{data:E}=await e.createTradeV3(u,{headers:o});return E},"CREATE_TRADE_ERROR")}var je="ERC721";async function Ye({request:n,transfersApi:e,starkSigner:t,user:r,guardianClient:i}){return f(async()=>{let a=n.type===je?"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,m=await t.signMessage(l),u=await t.getAddress(),C={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:m}},{data:R}=await e.createTransferV1(C,{headers:o});return {sent_signature:R.sent_signature,status:R.status?.toString(),time:R.time,transfer_id:R.transfer_id}},"TRANSFER_ERROR")}async function Qe({user:n,starkSigner:e,request:t,transfersApi:r,guardianClient:i}){return f(async()=>{let{ethAddress:a}=n.imx,s=t.map(u=>({amount:"1",token:toolkit.convertToSignableToken({type:je,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 E=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:E}})),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 Tr=n=>new Promise(e=>{setTimeout(()=>e(),n);}),S=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 Tr(r),S(n,{retries:t-1,finalErr:i,finallyFn:a}))}finally{t<=0&&a();}};async function et(n){await S(async()=>{let e=await n.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function le(n,e,t,r,i){return f(async()=>{try{let a=await de({ethSigner:n,starkSigner:e,imxApiClients:i},t.accessToken);return await et(r),a}catch(a){if(Et__default.default.isAxiosError(a)&&a.response?.status===409)return await et(r),{tx_hash:""};throw a}},"USER_REGISTRATION_ERROR")}var $=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.#t(),r.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#t(){this.starkSigner=new Promise(async e=>{try{e(await We(this.magicTEESigner));}catch(t){this.signerInitialisationError=t,e(void 0);}});}async#r(){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#a(){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#n(){let[e,t]=await Promise.all([this.#r(),this.#a()]);if(!v(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.#n();return Ye({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.#r(),this.#a()]);return await le(this.magicTEESigner,t,e,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return h(async()=>!!(await this.#r()).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.#n();return Ke({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.#n();return Xe({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.#n();return Je({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.#n();return Qe({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.#n();return $e({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.#r();if(!v(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)},"imxGetAddress")}};var q=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 $({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var it=(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=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:r,jsonRpcReferrer:i,forceScwDeployBeforeMessageSignature:a,popupOverlayOptions:s,...o}){if(it(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.baseConfig=e,this.crossSdkBridgeEnabled=r||!1,this.forceScwDeployBeforeMessageSignature=a||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1},t)it(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:ve.createConfig({basePath:t.indexerMrBasePath}),orderBook:ve.createConfig({basePath:t.orderBookMrBasePath}),passport:ve.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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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=ve.multiRollupConfig.getProduction();break}case config.Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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=ve.multiRollupConfig.getSandbox();break}}}};var D="imx_passport_confirmation";var K=({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,`
|
|
360
|
+
`;function H({id:n,href:e,rel:t,crossOrigin:r}){let i=`${M}-${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 Le=()=>De(Zt()),Ge=()=>De(Kt());var _=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){H({id:"link-googleapis",href:"https://fonts.googleapis.com"}),H({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),H({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?Le():Ge(),document.body.insertAdjacentElement("beforeend",e),this.overlay=e;}}updateTryAgainButton(e){let t=document.getElementById(V);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(B);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var W=class{storage;constructor(e,t){this.storage=Jt__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 sr={headers:{"Content-Type":"application/x-www-form-urlencoded"}},or="/v2/logout",cr="/im-logged-out",dr="/authorize",lr=n=>n?cr:or,pr=n=>{let{authenticationDomain:e,oidcConfiguration:t}=n,r;n.crossSdkBridgeEnabled&&typeof window<"u"?r=new W("ImmutableSDKPassport",Jt__default.default.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new oidcClientTs.InMemoryWebStorage;let i=new oidcClientTs.WebStorageStateStore({store:r}),a=new URL(lr(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 ce(n){return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function mr(n){let t=new TextEncoder().encode(n);return await window.crypto.subtle.digest("SHA-256",t)}var N=class n{userManager;deviceCredentialsManager;config;logoutMode;refreshingPromise=null;constructor(e){this.config=e,this.userManager=new oidcClientTs.UserManager(pr(e)),this.deviceCredentialsManager=new x,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=Fe__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=Fe__default.default(e.id_token);return new oidcClientTs.User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:metrics.getDetail(metrics.Detail.RUNTIME_ID)||"",third_party_a_id:e||""};if(t){if(t.directLoginMethod==="email"){let i=t.email;i&&(r.direct=t.directLoginMethod,r.email=i);}else r.direct=t.directLoginMethod;t.marketingConsentStatus&&(r.marketingConsent=t.marketingConsentStatus);}return r}async loginWithRedirect(e,t){return await this.userManager.clearStaleState(),f(async()=>{let r=this.buildExtraQueryParams(e,t);await this.userManager.signinRedirect({extraQueryParams:r});},"AUTHENTICATION_ERROR")}async login(e,t){return f(async()=>{let r="passportLoginPrompt",i=async()=>{let a=this.buildExtraQueryParams(e,t);return this.userManager.signinPopup({extraQueryParams:a,popupWindowFeatures:{width:410,height:450},popupWindowTarget:r})};return new Promise((a,s)=>{i().then(o=>{a(n.mapOidcUserToDomainModel(o));}).catch(o=>{if(!(o instanceof Error)||o.message!=="Attempted to navigate on a disposed window"){s(o);return}let c=!1,d=new _(this.config.popupOverlayOptions,!0);d.append(async()=>{try{if(c)window.open("",r);else {c=!0;let l=await i();d.remove(),a(n.mapOidcUserToDomainModel(l));}}catch(l){d.remove(),s(l);}},()=>{d.remove(),s(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){I.warn("Failed to retrieve a cached user session",t);}return e||this.login()}async loginCallback(){return f(async()=>{let e=await this.userManager.signinCallback();if(e)return n.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e){let t=ce(window.crypto.getRandomValues(new Uint8Array(32))),r=ce(await mr(t)),i=ce(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:a,scope:s,audience:o,clientId:c}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:i,verifier:t});let d=new URL(dr,this.config.authenticationDomain);if(d.searchParams.set("response_type","code"),d.searchParams.set("code_challenge",r),d.searchParams.set("code_challenge_method","S256"),d.searchParams.set("client_id",c),d.searchParams.set("redirect_uri",a),d.searchParams.set("state",i),s&&d.searchParams.set("scope",s),o&&d.searchParams.set("audience",o),e){if(e.directLoginMethod==="email"){let l=e.email;l&&(d.searchParams.set("direct",e.directLoginMethod),d.searchParams.set("email",l));}else d.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&d.searchParams.set("marketingConsent",e.marketingConsentStatus);}return d.toString()}async loginWithPKCEFlowCallback(e,t){return f(async()=>{let r=this.deviceCredentialsManager.getPKCEData();if(!r)throw new Error("No code verifier or state for PKCE");if(t!==r.state)throw new Error("Provided state does not match stored state");let 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 Et__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},sr)).data}async storeTokens(e){return f(async()=>{let t=n.mapDeviceTokenResponseToOidcUser(e),r=n.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return f(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(I.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{I.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(I.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(!be(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(v);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 He="ETH",U=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()),v(t)&&t.imx.userAdminAddress!==e.walletAddress)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!==e.walletAddress)throw new g(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${e.walletAddress}, profile address: ${t.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return e}async createWallet(){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(e,t)=>{try{this.userWallet=null;let r=await this.getUserOrThrow(),i=n.getHeaders(r);await h(async a=>{try{let s=performance.now(),o=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({createWalletRequestModel:{chain:He}},{headers:i});return metrics.trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),this.userWallet={userIdentifier:r.profile.sub,walletAddress:o.data.public_address},e(this.userWallet)}catch(s){let o="Failed to create wallet";return Et.isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,t(new Error(o))}},"magicCreateWallet");}catch(r){t(r);}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.signMessageV1WalletPersonalSignPost({signMessageRequest:{message_base64:Buffer.from(t,"utf-8").toString("base64"),chain:He}},{headers:i});return metrics.trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),o.data.signature}catch(s){let o="Failed to create signature using EOA";throw Et.isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,new Error(o)}},"magicPersonalSign")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var We=async n=>f(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(n);return xClient.createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function $e({user:n,starkSigner:e,request:t,exchangesApi:r}){return f(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},m={Authorization:`Bearer ${n.accessToken}`},u=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:m});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 Ze="ERC721";async function Ke({starkSigner:n,user:e,request:t,ordersApi:r,guardianClient:i}){return f(async()=>{let{ethAddress:a}=e.imx,s=t.sell.type===Ze?"1":t.sell.amount,o=t.buy.type===Ze?"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:m}=l.data,u=await n.signMessage(m),E=l.data,C={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:u,amount_buy:E.amount_buy,amount_sell:E.amount_sell,asset_id_buy:E.asset_id_buy,asset_id_sell:E.asset_id_sell,expiration_timestamp:E.expiration_timestamp,nonce:E.nonce,stark_key:E.stark_key,vault_id_buy:E.vault_id_buy,vault_id_sell:E.vault_id_sell}};return {...(await r.createOrderV3(C,{headers:c})).data}},"CREATE_ORDER_ERROR")}async function Xe({user:n,starkSigner:e,request:t,ordersApi:r,guardianClient:i}){return f(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 de({ethSigner:n,starkSigner:e,imxApiClients:t},r){return f(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 Je({request:n,tradesApi:e,user:t,starkSigner:r,guardianClient:i}){return f(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:m}=c,u={createTradeRequest:{include_fees:!0,fees:n?.fees,stark_signature:l,order_id:n?.order_id,fee_info:m.fee_info,amount_buy:m.amount_buy,amount_sell:m.amount_sell,asset_id_buy:m.asset_id_buy,asset_id_sell:m.asset_id_sell,expiration_timestamp:m.expiration_timestamp,nonce:m.nonce,stark_key:m.stark_key,vault_id_buy:m.vault_id_buy,vault_id_sell:m.vault_id_sell}},{data:E}=await e.createTradeV3(u,{headers:o});return E},"CREATE_TRADE_ERROR")}var je="ERC721";async function Ye({request:n,transfersApi:e,starkSigner:t,user:r,guardianClient:i}){return f(async()=>{let a=n.type===je?"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,m=await t.signMessage(l),u=await t.getAddress(),C={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:m}},{data:R}=await e.createTransferV1(C,{headers:o});return {sent_signature:R.sent_signature,status:R.status?.toString(),time:R.time,transfer_id:R.transfer_id}},"TRANSFER_ERROR")}async function Qe({user:n,starkSigner:e,request:t,transfersApi:r,guardianClient:i}){return f(async()=>{let{ethAddress:a}=n.imx,s=t.map(u=>({amount:"1",token:toolkit.convertToSignableToken({type:je,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 E=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:E}})),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 Tr=n=>new Promise(e=>{setTimeout(()=>e(),n);}),S=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 Tr(r),S(n,{retries:t-1,finalErr:i,finallyFn:a}))}finally{t<=0&&a();}};async function et(n){await S(async()=>{let e=await n.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function le(n,e,t,r,i){return f(async()=>{try{let a=await de({ethSigner:n,starkSigner:e,imxApiClients:i},t.accessToken);return await et(r),a}catch(a){if(Et__default.default.isAxiosError(a)&&a.response?.status===409)return await et(r),{tx_hash:""};throw a}},"USER_REGISTRATION_ERROR")}var $=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.#t(),r.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#t(){this.starkSigner=new Promise(async e=>{try{e(await We(this.magicTEESigner));}catch(t){this.signerInitialisationError=t,e(void 0);}});}async#r(){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#a(){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#n(){let[e,t]=await Promise.all([this.#r(),this.#a()]);if(!v(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.#n();return Ye({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.#r(),this.#a()]);return await le(this.magicTEESigner,t,e,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return h(async()=>!!(await this.#r()).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.#n();return Ke({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.#n();return Xe({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.#n();return Je({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.#n();return Qe({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.#n();return $e({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.#r();if(!v(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)},"imxGetAddress")}};var q=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 $({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var it=(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=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:r,jsonRpcReferrer:i,forceScwDeployBeforeMessageSignature:a,popupOverlayOptions:s,...o}){if(it(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.baseConfig=e,this.crossSdkBridgeEnabled=r||!1,this.forceScwDeployBeforeMessageSignature=a||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1},t)it(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:ve.createConfig({basePath:t.indexerMrBasePath}),orderBook:ve.createConfig({basePath:t.orderBookMrBasePath}),passport:ve.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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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=ve.multiRollupConfig.getProduction();break}case config.Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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=ve.multiRollupConfig.getSandbox();break}}}};var D="imx_passport_confirmation";var K=({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,`
|
|
361
361
|
scrollbars=yes,
|
|
362
362
|
width=${t},
|
|
363
363
|
height=${r},
|
package/dist/node/index.js
CHANGED
|
@@ -331,7 +331,7 @@ function oe(n){return "code"in n&&"message"in n}var g=class extends Error{type;c
|
|
|
331
331
|
${Xt()}
|
|
332
332
|
</div>
|
|
333
333
|
</div>
|
|
334
|
-
`;function H({id:n,href:e,rel:t,crossOrigin:r}){let i=`${M}-${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 Le=()=>De(Zt()),Ge=()=>De(Kt());var _=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){H({id:"link-googleapis",href:"https://fonts.googleapis.com"}),H({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),H({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?Le():Ge(),document.body.insertAdjacentElement("beforeend",e),this.overlay=e;}}updateTryAgainButton(e){let t=document.getElementById(V);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(B);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var W=class{storage;constructor(e,t){this.storage=Jt.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 sr={headers:{"Content-Type":"application/x-www-form-urlencoded"}},or="/v2/logout",cr="/im-logged-out",dr="/authorize",lr=n=>n?cr:or,pr=n=>{let{authenticationDomain:e,oidcConfiguration:t}=n,r;n.crossSdkBridgeEnabled?r=new W("ImmutableSDKPassport",Jt.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let i=new WebStorageStateStore({store:r}),a=new URL(lr(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 ce(n){return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function mr(n){let t=new TextEncoder().encode(n);return await window.crypto.subtle.digest("SHA-256",t)}var N=class n{userManager;deviceCredentialsManager;config;logoutMode;refreshingPromise=null;constructor(e){this.config=e,this.userManager=new UserManager(pr(e)),this.deviceCredentialsManager=new x,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=Fe(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=Fe(e.id_token);return new User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:e||""};if(t){if(t.directLoginMethod==="email"){let i=t.email;i&&(r.direct=t.directLoginMethod,r.email=i);}else r.direct=t.directLoginMethod;t.marketingConsentStatus&&(r.marketingConsent=t.marketingConsentStatus);}return r}async loginWithRedirect(e,t){return await this.userManager.clearStaleState(),f(async()=>{let r=this.buildExtraQueryParams(e,t);await this.userManager.signinRedirect({extraQueryParams:r});},"AUTHENTICATION_ERROR")}async login(e,t){return f(async()=>{let r="passportLoginPrompt",i=async()=>{let a=this.buildExtraQueryParams(e,t);return this.userManager.signinPopup({extraQueryParams:a,popupWindowFeatures:{width:410,height:450},popupWindowTarget:r})};return new Promise((a,s)=>{i().then(o=>{a(n.mapOidcUserToDomainModel(o));}).catch(o=>{if(!(o instanceof Error)||o.message!=="Attempted to navigate on a disposed window"){s(o);return}let c=!1,d=new _(this.config.popupOverlayOptions,!0);d.append(async()=>{try{if(c)window.open("",r);else {c=!0;let l=await i();d.remove(),a(n.mapOidcUserToDomainModel(l));}}catch(l){d.remove(),s(l);}},()=>{d.remove(),s(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){I.warn("Failed to retrieve a cached user session",t);}return e||this.login()}async loginCallback(){return f(async()=>{let e=await this.userManager.signinCallback();if(e)return n.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e){let t=ce(window.crypto.getRandomValues(new Uint8Array(32))),r=ce(await mr(t)),i=ce(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:a,scope:s,audience:o,clientId:c}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:i,verifier:t});let d=new URL(dr,this.config.authenticationDomain);if(d.searchParams.set("response_type","code"),d.searchParams.set("code_challenge",r),d.searchParams.set("code_challenge_method","S256"),d.searchParams.set("client_id",c),d.searchParams.set("redirect_uri",a),d.searchParams.set("state",i),s&&d.searchParams.set("scope",s),o&&d.searchParams.set("audience",o),e){if(e.directLoginMethod==="email"){let l=e.email;l&&(d.searchParams.set("direct",e.directLoginMethod),d.searchParams.set("email",l));}else d.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&d.searchParams.set("marketingConsent",e.marketingConsentStatus);}return d.toString()}async loginWithPKCEFlowCallback(e,t){return f(async()=>{let r=this.deviceCredentialsManager.getPKCEData();if(!r)throw new Error("No code verifier or state for PKCE");if(t!==r.state)throw new Error("Provided state does not match stored state");let 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 Et.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},sr)).data}async storeTokens(e){return f(async()=>{let t=n.mapDeviceTokenResponseToOidcUser(e),r=n.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return f(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(I.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{I.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(I.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(!be(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(v);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 He="ETH",U=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()),v(t)&&t.imx.userAdminAddress!==e.walletAddress)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!==e.walletAddress)throw new g(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${e.walletAddress}, profile address: ${t.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return e}async createWallet(){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(e,t)=>{try{this.userWallet=null;let r=await this.getUserOrThrow(),i=n.getHeaders(r);await h(async a=>{try{let s=performance.now(),o=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({createWalletRequestModel:{chain:He}},{headers:i});return trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),this.userWallet={userIdentifier:r.profile.sub,walletAddress:o.data.public_address},e(this.userWallet)}catch(s){let o="Failed to create wallet";return isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,t(new Error(o))}},"magicCreateWallet");}catch(r){t(r);}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.signMessageV1WalletPersonalSignPost({signMessageRequest:{message_base64:Buffer.from(t,"utf-8").toString("base64"),chain:He}},{headers:i});return trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),o.data.signature}catch(s){let o="Failed to create signature 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)}},"magicPersonalSign")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var We=async n=>f(async()=>{let e=await generateLegacyStarkPrivateKey(n);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function $e({user:n,starkSigner:e,request:t,exchangesApi:r}){return f(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},m={Authorization:`Bearer ${n.accessToken}`},u=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:m});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 Ze="ERC721";async function Ke({starkSigner:n,user:e,request:t,ordersApi:r,guardianClient:i}){return f(async()=>{let{ethAddress:a}=e.imx,s=t.sell.type===Ze?"1":t.sell.amount,o=t.buy.type===Ze?"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:m}=l.data,u=await n.signMessage(m),E=l.data,C={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:u,amount_buy:E.amount_buy,amount_sell:E.amount_sell,asset_id_buy:E.asset_id_buy,asset_id_sell:E.asset_id_sell,expiration_timestamp:E.expiration_timestamp,nonce:E.nonce,stark_key:E.stark_key,vault_id_buy:E.vault_id_buy,vault_id_sell:E.vault_id_sell}};return {...(await r.createOrderV3(C,{headers:c})).data}},"CREATE_ORDER_ERROR")}async function Xe({user:n,starkSigner:e,request:t,ordersApi:r,guardianClient:i}){return f(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 de({ethSigner:n,starkSigner:e,imxApiClients:t},r){return f(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 Je({request:n,tradesApi:e,user:t,starkSigner:r,guardianClient:i}){return f(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:m}=c,u={createTradeRequest:{include_fees:!0,fees:n?.fees,stark_signature:l,order_id:n?.order_id,fee_info:m.fee_info,amount_buy:m.amount_buy,amount_sell:m.amount_sell,asset_id_buy:m.asset_id_buy,asset_id_sell:m.asset_id_sell,expiration_timestamp:m.expiration_timestamp,nonce:m.nonce,stark_key:m.stark_key,vault_id_buy:m.vault_id_buy,vault_id_sell:m.vault_id_sell}},{data:E}=await e.createTradeV3(u,{headers:o});return E},"CREATE_TRADE_ERROR")}var je="ERC721";async function Ye({request:n,transfersApi:e,starkSigner:t,user:r,guardianClient:i}){return f(async()=>{let a=n.type===je?"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,m=await t.signMessage(l),u=await t.getAddress(),C={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:m}},{data:R}=await e.createTransferV1(C,{headers:o});return {sent_signature:R.sent_signature,status:R.status?.toString(),time:R.time,transfer_id:R.transfer_id}},"TRANSFER_ERROR")}async function Qe({user:n,starkSigner:e,request:t,transfersApi:r,guardianClient:i}){return f(async()=>{let{ethAddress:a}=n.imx,s=t.map(u=>({amount:"1",token:convertToSignableToken({type:je,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 E=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:E}})),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 Tr=n=>new Promise(e=>{setTimeout(()=>e(),n);}),S=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 Tr(r),S(n,{retries:t-1,finalErr:i,finallyFn:a}))}finally{t<=0&&a();}};async function et(n){await S(async()=>{let e=await n.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function le(n,e,t,r,i){return f(async()=>{try{let a=await de({ethSigner:n,starkSigner:e,imxApiClients:i},t.accessToken);return await et(r),a}catch(a){if(Et.isAxiosError(a)&&a.response?.status===409)return await et(r),{tx_hash:""};throw a}},"USER_REGISTRATION_ERROR")}var $=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.#t(),r.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#t(){this.starkSigner=new Promise(async e=>{try{e(await We(this.magicTEESigner));}catch(t){this.signerInitialisationError=t,e(void 0);}});}async#r(){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#a(){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#n(){let[e,t]=await Promise.all([this.#r(),this.#a()]);if(!v(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.#n();return Ye({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.#r(),this.#a()]);return await le(this.magicTEESigner,t,e,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return h(async()=>!!(await this.#r()).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.#n();return Ke({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.#n();return Xe({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.#n();return Je({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.#n();return Qe({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.#n();return $e({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.#r();if(!v(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)},"imxGetAddress")}};var q=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 $({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var it=(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=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:r,jsonRpcReferrer:i,forceScwDeployBeforeMessageSignature:a,popupOverlayOptions:s,...o}){if(it(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.baseConfig=e,this.crossSdkBridgeEnabled=r||!1,this.forceScwDeployBeforeMessageSignature=a||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1},t)it(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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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 D="imx_passport_confirmation";var K=({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,`
|
|
334
|
+
`;function H({id:n,href:e,rel:t,crossOrigin:r}){let i=`${M}-${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 Le=()=>De(Zt()),Ge=()=>De(Kt());var _=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){H({id:"link-googleapis",href:"https://fonts.googleapis.com"}),H({id:"link-gstatic",href:"https://fonts.gstatic.com",crossOrigin:"anonymous"}),H({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?Le():Ge(),document.body.insertAdjacentElement("beforeend",e),this.overlay=e;}}updateTryAgainButton(e){let t=document.getElementById(V);t&&(this.tryAgainListener&&t.removeEventListener("click",this.tryAgainListener),this.tryAgainListener=e,t.addEventListener("click",e));}updateCloseButton(e){let t=document.getElementById(B);t&&(this.onCloseListener&&t.removeEventListener("click",this.onCloseListener),this.onCloseListener=e,t.addEventListener("click",e));}};var W=class{storage;constructor(e,t){this.storage=Jt.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 sr={headers:{"Content-Type":"application/x-www-form-urlencoded"}},or="/v2/logout",cr="/im-logged-out",dr="/authorize",lr=n=>n?cr:or,pr=n=>{let{authenticationDomain:e,oidcConfiguration:t}=n,r;n.crossSdkBridgeEnabled&&typeof window<"u"?r=new W("ImmutableSDKPassport",Jt.INDEXEDDB):typeof window<"u"?r=window.localStorage:r=new InMemoryWebStorage;let i=new WebStorageStateStore({store:r}),a=new URL(lr(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 ce(n){return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function mr(n){let t=new TextEncoder().encode(n);return await window.crypto.subtle.digest("SHA-256",t)}var N=class n{userManager;deviceCredentialsManager;config;logoutMode;refreshingPromise=null;constructor(e){this.config=e,this.userManager=new UserManager(pr(e)),this.deviceCredentialsManager=new x,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect";}static mapOidcUserToDomainModel=e=>{let t;e.id_token&&(t=Fe(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=Fe(e.id_token);return new User({id_token:e.id_token,access_token:e.access_token,refresh_token:e.refresh_token,token_type:e.token_type,profile:{sub:t.sub,iss:t.iss,aud:t.aud,exp:t.exp,iat:t.iat,email:t.email,nickname:t.nickname,passport:t.passport}})};buildExtraQueryParams(e,t){let r={...this.userManager.settings?.extraQueryParams??{},rid:getDetail(Detail.RUNTIME_ID)||"",third_party_a_id:e||""};if(t){if(t.directLoginMethod==="email"){let i=t.email;i&&(r.direct=t.directLoginMethod,r.email=i);}else r.direct=t.directLoginMethod;t.marketingConsentStatus&&(r.marketingConsent=t.marketingConsentStatus);}return r}async loginWithRedirect(e,t){return await this.userManager.clearStaleState(),f(async()=>{let r=this.buildExtraQueryParams(e,t);await this.userManager.signinRedirect({extraQueryParams:r});},"AUTHENTICATION_ERROR")}async login(e,t){return f(async()=>{let r="passportLoginPrompt",i=async()=>{let a=this.buildExtraQueryParams(e,t);return this.userManager.signinPopup({extraQueryParams:a,popupWindowFeatures:{width:410,height:450},popupWindowTarget:r})};return new Promise((a,s)=>{i().then(o=>{a(n.mapOidcUserToDomainModel(o));}).catch(o=>{if(!(o instanceof Error)||o.message!=="Attempted to navigate on a disposed window"){s(o);return}let c=!1,d=new _(this.config.popupOverlayOptions,!0);d.append(async()=>{try{if(c)window.open("",r);else {c=!0;let l=await i();d.remove(),a(n.mapOidcUserToDomainModel(l));}}catch(l){d.remove(),s(l);}},()=>{d.remove(),s(new Error("Popup closed by user"));});});})},"AUTHENTICATION_ERROR")}async getUserOrLogin(){let e=null;try{e=await this.getUser();}catch(t){I.warn("Failed to retrieve a cached user session",t);}return e||this.login()}async loginCallback(){return f(async()=>{let e=await this.userManager.signinCallback();if(e)return n.mapOidcUserToDomainModel(e)},"AUTHENTICATION_ERROR")}async getPKCEAuthorizationUrl(e){let t=ce(window.crypto.getRandomValues(new Uint8Array(32))),r=ce(await mr(t)),i=ce(window.crypto.getRandomValues(new Uint8Array(32))),{redirectUri:a,scope:s,audience:o,clientId:c}=this.config.oidcConfiguration;this.deviceCredentialsManager.savePKCEData({state:i,verifier:t});let d=new URL(dr,this.config.authenticationDomain);if(d.searchParams.set("response_type","code"),d.searchParams.set("code_challenge",r),d.searchParams.set("code_challenge_method","S256"),d.searchParams.set("client_id",c),d.searchParams.set("redirect_uri",a),d.searchParams.set("state",i),s&&d.searchParams.set("scope",s),o&&d.searchParams.set("audience",o),e){if(e.directLoginMethod==="email"){let l=e.email;l&&(d.searchParams.set("direct",e.directLoginMethod),d.searchParams.set("email",l));}else d.searchParams.set("direct",e.directLoginMethod);e.marketingConsentStatus&&d.searchParams.set("marketingConsent",e.marketingConsentStatus);}return d.toString()}async loginWithPKCEFlowCallback(e,t){return f(async()=>{let r=this.deviceCredentialsManager.getPKCEData();if(!r)throw new Error("No code verifier or state for PKCE");if(t!==r.state)throw new Error("Provided state does not match stored state");let 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 Et.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},sr)).data}async storeTokens(e){return f(async()=>{let t=n.mapDeviceTokenResponseToOidcUser(e),r=n.mapOidcUserToDomainModel(t);return await this.userManager.storeUser(t),r},"AUTHENTICATION_ERROR")}async logout(){return f(async()=>{await this.userManager.revokeTokens(["refresh_token"]),this.logoutMode==="silent"?await this.userManager.signoutSilent():await this.userManager.signoutRedirect();},"LOGOUT_ERROR")}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async removeUser(){return this.userManager.removeUser()}async getLogoutUrl(){let e=this.userManager.settings?.metadata?.end_session_endpoint;return e||(I.warn("Failed to get logout URL"),null)}forceUserRefreshInBackground(){this.refreshTokenAndUpdatePromise().catch(e=>{I.warn("Failed to refresh user token",e);});}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise().catch(e=>(I.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(!be(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(v);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 He="ETH",U=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()),v(t)&&t.imx.userAdminAddress!==e.walletAddress)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!==e.walletAddress)throw new g(`Wallet address mismatch.Rollup: zkEVM, TEE address: ${e.walletAddress}, profile address: ${t.zkEvm.userAdminAddress}`,"WALLET_CONNECTION_ERROR");return e}async createWallet(){return this.createWalletPromise?this.createWalletPromise:(this.createWalletPromise=new Promise(async(e,t)=>{try{this.userWallet=null;let r=await this.getUserOrThrow(),i=n.getHeaders(r);await h(async a=>{try{let s=performance.now(),o=await this.magicTeeApiClient.walletApi.createWalletV1WalletPost({createWalletRequestModel:{chain:He}},{headers:i});return trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),this.userWallet={userIdentifier:r.profile.sub,walletAddress:o.data.public_address},e(this.userWallet)}catch(s){let o="Failed to create wallet";return isAxiosError(s)?s.response?o+=` with status ${s.response.status}: ${JSON.stringify(s.response.data)}`:o+=`: ${s.message}`:o+=`: ${s.message}`,t(new Error(o))}},"magicCreateWallet");}catch(r){t(r);}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.signMessageV1WalletPersonalSignPost({signMessageRequest:{message_base64:Buffer.from(t,"utf-8").toString("base64"),chain:He}},{headers:i});return trackDuration("passport",a.details.flowName,Math.round(performance.now()-s)),o.data.signature}catch(s){let o="Failed to create signature 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)}},"magicPersonalSign")}connect(){throw new Error("Method not implemented.")}signTransaction(){throw new Error("Method not implemented.")}signTypedData(){throw new Error("Method not implemented.")}};var We=async n=>f(async()=>{let e=await generateLegacyStarkPrivateKey(n);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function $e({user:n,starkSigner:e,request:t,exchangesApi:r}){return f(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},m={Authorization:`Bearer ${n.accessToken}`},u=await r.createExchangeTransfer({id:t.transactionID,createTransferRequest:l},{headers:m});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 Ze="ERC721";async function Ke({starkSigner:n,user:e,request:t,ordersApi:r,guardianClient:i}){return f(async()=>{let{ethAddress:a}=e.imx,s=t.sell.type===Ze?"1":t.sell.amount,o=t.buy.type===Ze?"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:m}=l.data,u=await n.signMessage(m),E=l.data,C={createOrderRequest:{include_fees:!0,fees:t.fees,stark_signature:u,amount_buy:E.amount_buy,amount_sell:E.amount_sell,asset_id_buy:E.asset_id_buy,asset_id_sell:E.asset_id_sell,expiration_timestamp:E.expiration_timestamp,nonce:E.nonce,stark_key:E.stark_key,vault_id_buy:E.vault_id_buy,vault_id_sell:E.vault_id_sell}};return {...(await r.createOrderV3(C,{headers:c})).data}},"CREATE_ORDER_ERROR")}async function Xe({user:n,starkSigner:e,request:t,ordersApi:r,guardianClient:i}){return f(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 de({ethSigner:n,starkSigner:e,imxApiClients:t},r){return f(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 Je({request:n,tradesApi:e,user:t,starkSigner:r,guardianClient:i}){return f(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:m}=c,u={createTradeRequest:{include_fees:!0,fees:n?.fees,stark_signature:l,order_id:n?.order_id,fee_info:m.fee_info,amount_buy:m.amount_buy,amount_sell:m.amount_sell,asset_id_buy:m.asset_id_buy,asset_id_sell:m.asset_id_sell,expiration_timestamp:m.expiration_timestamp,nonce:m.nonce,stark_key:m.stark_key,vault_id_buy:m.vault_id_buy,vault_id_sell:m.vault_id_sell}},{data:E}=await e.createTradeV3(u,{headers:o});return E},"CREATE_TRADE_ERROR")}var je="ERC721";async function Ye({request:n,transfersApi:e,starkSigner:t,user:r,guardianClient:i}){return f(async()=>{let a=n.type===je?"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,m=await t.signMessage(l),u=await t.getAddress(),C={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:m}},{data:R}=await e.createTransferV1(C,{headers:o});return {sent_signature:R.sent_signature,status:R.status?.toString(),time:R.time,transfer_id:R.transfer_id}},"TRANSFER_ERROR")}async function Qe({user:n,starkSigner:e,request:t,transfersApi:r,guardianClient:i}){return f(async()=>{let{ethAddress:a}=n.imx,s=t.map(u=>({amount:"1",token:convertToSignableToken({type:je,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 E=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:E}})),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 Tr=n=>new Promise(e=>{setTimeout(()=>e(),n);}),S=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 Tr(r),S(n,{retries:t-1,finalErr:i,finallyFn:a}))}finally{t<=0&&a();}};async function et(n){await S(async()=>{let e=await n.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function le(n,e,t,r,i){return f(async()=>{try{let a=await de({ethSigner:n,starkSigner:e,imxApiClients:i},t.accessToken);return await et(r),a}catch(a){if(Et.isAxiosError(a)&&a.response?.status===409)return await et(r),{tx_hash:""};throw a}},"USER_REGISTRATION_ERROR")}var $=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.#t(),r.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#t(){this.starkSigner=new Promise(async e=>{try{e(await We(this.magicTEESigner));}catch(t){this.signerInitialisationError=t,e(void 0);}});}async#r(){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#a(){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#n(){let[e,t]=await Promise.all([this.#r(),this.#a()]);if(!v(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.#n();return Ye({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.#r(),this.#a()]);return await le(this.magicTEESigner,t,e,this.authManager,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return h(async()=>!!(await this.#r()).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.#n();return Ke({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.#n();return Xe({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.#n();return Je({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.#n();return Qe({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.#n();return $e({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.#r();if(!v(e))throw new g("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)},"imxGetAddress")}};var q=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 $({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var it=(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=6e3;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:r,jsonRpcReferrer:i,forceScwDeployBeforeMessageSignature:a,popupOverlayOptions:s,...o}){if(it(o,["clientId","redirectUri"]),this.oidcConfiguration=o,this.baseConfig=e,this.crossSdkBridgeEnabled=r||!1,this.forceScwDeployBeforeMessageSignature=a||!1,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1},t)it(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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",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 D="imx_passport_confirmation";var K=({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,`
|
|
335
335
|
scrollbars=yes,
|
|
336
336
|
width=${t},
|
|
337
337
|
height=${r},
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@imtbl/passport",
|
|
3
3
|
"description": "Passport module for Immutable SDK",
|
|
4
|
-
"version": "2.4.10-alpha.
|
|
4
|
+
"version": "2.4.10-alpha.2",
|
|
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.4.10-alpha.
|
|
11
|
-
"@imtbl/generated-clients": "2.4.10-alpha.
|
|
12
|
-
"@imtbl/metrics": "2.4.10-alpha.
|
|
13
|
-
"@imtbl/toolkit": "2.4.10-alpha.
|
|
14
|
-
"@imtbl/x-client": "2.4.10-alpha.
|
|
15
|
-
"@imtbl/x-provider": "2.4.10-alpha.
|
|
10
|
+
"@imtbl/config": "2.4.10-alpha.2",
|
|
11
|
+
"@imtbl/generated-clients": "2.4.10-alpha.2",
|
|
12
|
+
"@imtbl/metrics": "2.4.10-alpha.2",
|
|
13
|
+
"@imtbl/toolkit": "2.4.10-alpha.2",
|
|
14
|
+
"@imtbl/x-client": "2.4.10-alpha.2",
|
|
15
|
+
"@imtbl/x-provider": "2.4.10-alpha.2",
|
|
16
16
|
"@magic-ext/oidc": "12.0.5",
|
|
17
17
|
"@magic-sdk/provider": "^29.0.5",
|
|
18
18
|
"@metamask/detect-provider": "^2.0.0",
|