@imtbl/passport 2.12.7-alpha.0 → 2.12.7-alpha.10

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.
@@ -4,10 +4,10 @@ import { MultiRollupApiClients, MagicTeeApiClients, createConfig, multiRollupCon
4
4
  import { IMXClient, generateLegacyStarkPrivateKey, createStarkSigner } from '@imtbl/x-client';
5
5
  import { Environment } from '@imtbl/config';
6
6
  import { setPassportClientId, trackFlow, trackError } from '@imtbl/metrics';
7
- import { EvmChain, getChainConfig, ConfirmationScreen, WalletConfiguration, GuardianClient, MagicTEESigner, connectWallet, retryWithDelay } from '@imtbl/wallet';
8
- export { EvmChain, JsonRpcError, ProviderErrorCode, ProviderEvent, RpcErrorCode } from '@imtbl/wallet';
7
+ import { ConfirmationScreen, WalletConfiguration, GuardianClient, MagicTEESigner, connectWallet, retryWithDelay } from '@imtbl/wallet';
8
+ export { JsonRpcError, ProviderErrorCode, ProviderEvent, RpcErrorCode } from '@imtbl/wallet';
9
9
  import { convertToSignableToken, signRaw } from '@imtbl/toolkit';
10
10
 
11
- var C=i=>{if(!i.idToken)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);let r=decodeJwtPayload(i.idToken).passport;if(!r?.imx_eth_address||!r?.imx_stark_address||!r?.imx_user_admin_address)throw new PassportError("User has not been registered with StarkEx",PassportErrorType.USER_NOT_REGISTERED_ERROR);return {...i,imx:{ethAddress:r.imx_eth_address,starkAddress:r.imx_stark_address,userAdminAddress:r.imx_user_admin_address}}};var D=async i=>withPassportError(async()=>{let e=await generateLegacyStarkPrivateKey(i);return createStarkSigner(e)},PassportErrorType.WALLET_CONNECTION_ERROR);async function L({user:i,starkSigner:e,request:r,exchangesApi:t}){return withPassportError(async()=>{let{ethAddress:a}=i.imx,n=r.amount,o=await t.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:n,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=o.data,d=await e.signMessage(p),u={sender_stark_key:o.data.sender_stark_key||m,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:d},g={Authorization:`Bearer ${i.accessToken}`},c=await t.createExchangeTransfer({id:r.transactionID,createTransferRequest:u},{headers:g});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}},PassportErrorType.EXCHANGE_TRANSFER_ERROR)}var N="ERC721";async function G({starkSigner:i,user:e,request:r,ordersApi:t,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:n}=e.imx,o=r.sell.type===N?"1":r.sell.amount,m=r.buy.type===N?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},d={user:n,amount_buy:m,token_buy:convertToSignableToken(r.buy),amount_sell:o,token_sell:convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},u=await t.getSignableOrder({getSignableOrderRequestV3:d},{headers:p});await a.evaluateTransaction(u.data.payload_hash);let{payload_hash:g}=u.data,c=await i.signMessage(g),y=u.data,P={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:c,amount_buy:y.amount_buy,amount_sell:y.amount_sell,asset_id_buy:y.asset_id_buy,asset_id_sell:y.asset_id_sell,expiration_timestamp:y.expiration_timestamp,nonce:y.nonce,stark_key:y.stark_key,vault_id_buy:y.vault_id_buy,vault_id_sell:y.vault_id_sell}};return {...(await t.createOrderV3(P,{headers:p})).data}},PassportErrorType.CREATE_ORDER_ERROR)}async function B({user:i,starkSigner:e,request:r,ordersApi:t,guardianClient:a}){return withPassportError(async()=>{let n={order_id:r.order_id},o={Authorization:`Bearer ${i.accessToken}`},m=await t.getSignableCancelOrderV3({getSignableCancelOrderRequest:n},{headers:o});await a.evaluateTransaction(m.data.payload_hash);let{payload_hash:p}=m.data,d=await e.signMessage(p),u=await t.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:d}},{headers:o});return {order_id:u.data.order_id,status:u.data.status}},PassportErrorType.CANCEL_ORDER_ERROR)}async function S({ethSigner:i,starkSigner:e,imxApiClients:r},t){return withPassportError(async()=>{let[a,n]=await Promise.all([i.getAddress(),e.getAddress()]),o=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:m,payload_hash:p}=o.data,[d,u]=await Promise.all([signRaw(m,i),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${t}`,registerPassportUserRequest:{eth_signature:d,ether_key:a,stark_signature:u,stark_key:n}})).data},PassportErrorType.USER_REGISTRATION_ERROR)}async function W({request:i,tradesApi:e,user:r,starkSigner:t,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:n}=r.imx,o={expiration_timestamp:i.expiration_timestamp,fees:i.fees,order_id:i.order_id,user:n},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let{payload_hash:d}=p.data,u=await t.signMessage(d),{data:g}=p,c={createTradeRequest:{include_fees:!0,fees:i?.fees,stark_signature:u,order_id:i?.order_id,fee_info:g.fee_info,amount_buy:g.amount_buy,amount_sell:g.amount_sell,asset_id_buy:g.asset_id_buy,asset_id_sell:g.asset_id_sell,expiration_timestamp:g.expiration_timestamp,nonce:g.nonce,stark_key:g.stark_key,vault_id_buy:g.vault_id_buy,vault_id_sell:g.vault_id_sell}},{data:y}=await e.createTradeV3(c,{headers:m});return y},PassportErrorType.CREATE_TRADE_ERROR)}var K="ERC721";async function q({request:i,transfersApi:e,starkSigner:r,user:t,guardianClient:a}){return withPassportError(async()=>{let n=i.type===K?"1":i.amount,o={sender:t.imx.ethAddress,token:convertToSignableToken(i),amount:n,receiver:i.receiver},m={Authorization:`Bearer ${t.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let d=p.data,{payload_hash:u}=d,g=await r.signMessage(u),c=await r.getAddress(),P={createTransferRequest:{sender_stark_key:d.sender_stark_key||c,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:g}},{data:x}=await e.createTransferV1(P,{headers:m});return {sent_signature:x.sent_signature,status:x.status?.toString(),time:x.time,transfer_id:x.transfer_id}},PassportErrorType.TRANSFER_ERROR)}async function V({user:i,starkSigner:e,request:r,transfersApi:t,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:n}=i.imx,o=r.map(c=>({amount:"1",token:convertToSignableToken({type:K,tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),m={Authorization:`Bearer ${i.accessToken}`},p=await t.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:o}},{headers:m});await a.evaluateTransaction(p.data.signable_responses[0]?.payload_hash);let d=await Promise.all(p.data.signable_responses.map(async c=>{let y=await e.signMessage(c.payload_hash);return {sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:y}})),u={sender_stark_key:p.data.sender_stark_key,requests:d};return {transfer_ids:(await t.createTransfer({createTransferRequestV2:u},{headers:m}))?.data.transfer_ids}},PassportErrorType.TRANSFER_ERROR)}var A=i=>{if(typeof i=="object"&&i!==null&&"response"in i){let{response:e}=i;if(e&&typeof e=="object")return e}},_=i=>A(i)?.status;async function F(i){await retryWithDelay(async()=>{let e=await i.forceUserRefresh();if(!e)return Promise.reject(new Error("user wallet addresses not exist"));try{return C(e),e}catch{return Promise.reject(new Error("user wallet addresses not exist"))}});}async function w(i,e,r,t,a){return withPassportError(async()=>{try{let n=await S({ethSigner:i,starkSigner:e,imxApiClients:a},r.accessToken);return await F(t),n}catch(n){if(_(n)===409)return await F(t),{tx_hash:""};throw n}},PassportErrorType.USER_REGISTRATION_ERROR)}var R=async(i,e,r=!0,t=!0)=>{let a=trackFlow("passport",e,r);try{return await i(a)}catch(n){throw n instanceof Error?trackError("passport",e,n,{flowId:a.details.flowId}):a.addEvent("errored"),n}finally{t&&a.addEvent("End");}};var b=class{auth;immutableXClient;guardianClient;imxApiClients;magicTEESigner;imxGuardianClient;starkSigner;signerInitialisationError;constructor({auth:e,immutableXClient:r,passportEventEmitter:t,magicTEESigner:a,imxApiClients:n,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=n,this.guardianClient=o,this.imxGuardianClient=m,this.#i(),t.on(AuthEvents.LOGGED_OUT,this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await D(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.auth.getUser();if(!e||!this.starkSigner)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);return e}async#t(){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#e(){let[e,r]=await Promise.all([this.#r(),this.#t()]);return {user:C(e),starkSigner:r}}async transfer(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return q({request:e,user:r,starkSigner:t,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxTransfer")}async registerOffchain(){return R(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await w(this.magicTEESigner,r,e,this.auth,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return R(async()=>{try{let e=await this.#r();return !!C(e).imx}catch(e){if(e instanceof PassportError&&e.type===PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw e}},"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async createOrder(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return G({request:e,user:r,starkSigner:t,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return B({request:e,user:r,starkSigner:t,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCancelOrder")}async createTrade(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return W({request:e,user:r,starkSigner:t,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.imxGuardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return R(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:t}=await this.#e();return V({request:e,user:r,starkSigner:t,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return R(async()=>{let{user:r,starkSigner:t}=await this.#e();return L({request:e,user:r,starkSigner:t,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}prepareWithdrawal(e){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}completeWithdrawal(e,r){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async getAddress(){return R(async()=>{let e=await this.#r(),r=C(e);return Promise.resolve(r.imx.ethAddress)},"imxGetAddress")}};var T=class{auth;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;imxGuardianClient;constructor({auth:e,immutableXClient:r,magicTEESigner:t,passportEventEmitter:a,imxApiClients:n,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=t,this.passportEventEmitter=a,this.imxApiClients=n,this.guardianClient=o,this.imxGuardianClient=m;}async getProvider(){let e=await this.auth.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.auth.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new PassportError("Failed to initialise",PassportErrorType.WALLET_CONNECTION_ERROR);return new b({auth:this.auth,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient,imxGuardianClient:this.imxGuardianClient})}};var $=(i,e,r)=>{let t=e.map(a=>!i[a]&&a).filter(a=>a).join(", ");if(t!==""){let a=r?`${r} - ${t} cannot be null`:`${t} cannot be null`;throw new PassportError(a,PassportErrorType.INVALID_CONFIGURATION)}},k=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:t,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:n,popupOverlayOptions:o,...m}){if($(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=t||!1,this.forceScwDeployBeforeMessageSignature=n||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)$(r,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=r.authenticationDomain,this.passportDomain=r.passportDomain,this.imxPublicApiDomain=r.imxPublicApiDomain,this.magicPublishableApiKey=r.magicPublishableApiKey,this.magicProviderId=r.magicProviderId,this.zkEvmRpcUrl=r.zkEvmRpcUrl,this.relayerUrl=r.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:r.indexerMrBasePath}),orderBook:createConfig({basePath:r.orderBookMrBasePath}),passport:createConfig({basePath:r.passportMrBasePath})};else switch(e.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getProduction();break}case Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var de="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",v=class{auth;guardianApi;confirmationScreen;crossSdkBridgeEnabled;constructor({auth:e,guardianApi:r,confirmationScreen:t,crossSdkBridgeEnabled:a=!1}){this.auth=e,this.guardianApi=r,this.confirmationScreen=t,this.crossSdkBridgeEnabled=a;}async evaluateTransaction(e){let r=await this.auth.getUser();if(!r)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);let t=C(r),a={Authorization:`Bearer ${t.accessToken}`};try{if(!(await retryWithDelay(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:a}),{finallyFn:()=>{this.confirmationScreen.closeWindow();}})).data.id)throw new PassportError("Transaction does not exist",PassportErrorType.TRANSFER_ERROR);let m=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:a}),{confirmationRequired:p}=m.data;if(p){if(this.crossSdkBridgeEnabled)throw new PassportError(de,PassportErrorType.TRANSACTION_REJECTED);if(!(await this.confirmationScreen.requestConfirmation(e,t.imx.ethAddress,mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new PassportError("Transaction rejected by user",PassportErrorType.TRANSACTION_REJECTED)}else this.confirmationScreen.closeWindow();}catch(n){throw _(n)===403?new PassportError("Service unavailable",PassportErrorType.SERVICE_UNAVAILABLE_ERROR):n}}};var ve=i=>i.overrides?createConfig({basePath:i.overrides.imxPublicApiDomain}):i.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),Se=i=>{if(i.overrides?.imxApiClients)return i.overrides.imxApiClients;let e=ve(i);return new ImxApiClients(e)},Ae=i=>{let e=new k(i),r=new Auth({...i,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled,popupOverlayOptions:i.popupOverlayOptions,passportDomain:e.passportDomain}),t=r.getConfig(),a=new ConfirmationScreen(t),n=new WalletConfiguration({passportDomain:e.passportDomain,zkEvmRpcUrl:e.zkEvmRpcUrl,relayerUrl:e.relayerUrl,indexerMrBasePath:e.multiRollupConfig.indexer.basePath||e.passportDomain,jsonRpcReferrer:i.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:i.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled}),o=new MultiRollupApiClients(e.multiRollupConfig),m=i.overrides?i.overrides.immutableXClient:new IMXClient({baseConfig:i.baseConfig}),p=new GuardianClient({config:n,getUser:P=>P?r.forceUserRefresh():r.getUser(),guardianApi:o.guardianApi,passportDomain:e.passportDomain,clientId:e.oidcConfiguration.clientId}),d=new v({auth:r,guardianApi:o.guardianApi,confirmationScreen:a,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled||!1}),u=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),g=new MagicTEESigner(P=>P?r.forceUserRefresh():r.getUser(),u),c=Se(i),y=new T({auth:r,immutableXClient:m,magicTEESigner:g,passportEventEmitter:r.eventEmitter,imxApiClients:c,guardianClient:p,imxGuardianClient:d});return {passportConfig:e,auth:r,passportImxProviderFactory:y,environment:i.baseConfig.environment,walletConfig:n}},U=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=Ae(e);this.auth=r.auth,this.passportImxProviderFactory=r.passportImxProviderFactory,this.passportConfig=r.passportConfig,this.multiRollupApiClients=new MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=r.environment,setPassportClientId(e.clientId);}async connectImxSilent(){return R(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return R(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return R(async()=>{let r=e?.chain??EvmChain.ZKEVM;if(r!==EvmChain.ZKEVM)throw new Error(`Chain ${r} is not yet supported. Only ZKEVM is currently available.`);let t=this.buildChainConfig(r),a=t.feeTokenSymbol??"IMX";return await connectWallet({getUser:o=>o?this.auth.forceUserRefresh():this.auth.getUserOrLogin(),clientId:this.passportConfig.oidcConfiguration.clientId,chains:[t],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,feeTokenSymbol:a,announceProvider:e?.announceProvider??!0})},"connectEvm",!1)}buildChainConfig(e){let r=this.passportConfig.overrides;if(e===EvmChain.ZKEVM)return r?.zkEvmChainId?{chainId:r.zkEvmChainId,name:r.zkEvmChainName||"Dev Chain",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:r.magicTeeBasePath||this.passportConfig.magicTeeBasePath}:this.environment===Environment.PRODUCTION?{chainId:13371,name:"Immutable zkEVM",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath}:{chainId:13473,name:"Immutable zkEVM Testnet",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath};let t=getChainConfig(e,this.environment);return r?{...t,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||t.apiUrl,passportDomain:this.passportConfig.passportDomain}:{...t,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||t.apiUrl,passportDomain:this.passportConfig.passportDomain}}async login(e){let r=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,t=await this.auth.login(r);return t?t.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return R(async()=>(await this.auth.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return (await this.auth.getUser())?.idToken}async getAccessToken(){return (await this.auth.getUser())?.accessToken}async loginWithPKCEFlow(e,r){return this.auth.loginWithPKCEFlow(e,r)}async loginWithPKCEFlowCallback(e,r){return (await this.auth.loginWithPKCEFlowCallback(e,r)).profile}async storeTokens(e){return (await this.auth.storeTokens(e)).profile}async getLogoutUrl(){return await this.auth.getLogoutUrl()}async logoutSilentCallback(e){return this.auth.logoutSilentCallback(e)}async getLinkedAddresses(){return R(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=a=>typeof a=="object"&&a!==null&&"code"in a&&"message"in a,t=trackFlow("passport","linkExternalWallet",!1);try{let a=await this.auth.getUser();if(!a)throw new PassportError("User is not logged in",PassportErrorType.NOT_LOGGED_IN_ERROR);let n=isUserZkEvm(a);if(!(()=>{try{return C(a),!0}catch(u){if(u instanceof PassportError&&u.type===PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw u}})()&&!n)throw new PassportError("User has not been registered",PassportErrorType.USER_NOT_REGISTERED_ERROR);let m={Authorization:`Bearer ${a.accessToken}`},p={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:p},{headers:m})).data}}catch(a){if(a instanceof Error?trackError("passport","linkExternalWallet",a):t.addEvent("errored"),a instanceof PassportError)throw a;let n=A(a);if(n){if(n.data&&r(n.data)){let{code:m,message:p}=n.data;switch(m){case"ALREADY_LINKED":throw new PassportError(p,PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new PassportError(p,PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new PassportError(p,PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new PassportError(p,PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new PassportError(p,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}}else if(n.status)throw new PassportError(`Link wallet request failed with status code ${n.status}`,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}let o="Link wallet request failed";throw a instanceof Error&&(o+=`: ${a.message}`),new PassportError(o,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{t.addEvent("End");}}};var Y=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t.Subscribed="subscribed",t))(Y||{});
11
+ var P=t=>{if(!t.idToken)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);let r=decodeJwtPayload(t.idToken).passport;if(!r?.imx_eth_address||!r?.imx_stark_address||!r?.imx_user_admin_address)throw new PassportError("User has not been registered with StarkEx",PassportErrorType.USER_NOT_REGISTERED_ERROR);return {...t,imx:{ethAddress:r.imx_eth_address,starkAddress:r.imx_stark_address,userAdminAddress:r.imx_user_admin_address}}};var U=async t=>withPassportError(async()=>{let e=await generateLegacyStarkPrivateKey(t);return createStarkSigner(e)},PassportErrorType.WALLET_CONNECTION_ERROR);async function D({user:t,starkSigner:e,request:r,exchangesApi:i}){return withPassportError(async()=>{let{ethAddress:a}=t.imx,s=r.amount,o=await i.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:s,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=o.data,d=await e.signMessage(p),u={sender_stark_key:o.data.sender_stark_key||m,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:d},g={Authorization:`Bearer ${t.accessToken}`},c=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:u},{headers:g});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}},PassportErrorType.EXCHANGE_TRANSFER_ERROR)}var M="ERC721";async function N({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:s}=e.imx,o=r.sell.type===M?"1":r.sell.amount,m=r.buy.type===M?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},d={user:s,amount_buy:m,token_buy:convertToSignableToken(r.buy),amount_sell:o,token_sell:convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},u=await i.getSignableOrder({getSignableOrderRequestV3:d},{headers:p});await a.evaluateTransaction(u.data.payload_hash);let{payload_hash:g}=u.data,c=await t.signMessage(g),y=u.data,x={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:c,amount_buy:y.amount_buy,amount_sell:y.amount_sell,asset_id_buy:y.asset_id_buy,asset_id_sell:y.asset_id_sell,expiration_timestamp:y.expiration_timestamp,nonce:y.nonce,stark_key:y.stark_key,vault_id_buy:y.vault_id_buy,vault_id_sell:y.vault_id_sell}};return {...(await i.createOrderV3(x,{headers:p})).data}},PassportErrorType.CREATE_ORDER_ERROR)}async function G({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return withPassportError(async()=>{let s={order_id:r.order_id},o={Authorization:`Bearer ${t.accessToken}`},m=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:s},{headers:o});await a.evaluateTransaction(m.data.payload_hash);let{payload_hash:p}=m.data,d=await e.signMessage(p),u=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:d}},{headers:o});return {order_id:u.data.order_id,status:u.data.status}},PassportErrorType.CANCEL_ORDER_ERROR)}async function S({ethSigner:t,starkSigner:e,imxApiClients:r},i){return withPassportError(async()=>{let[a,s]=await Promise.all([t.getAddress(),e.getAddress()]),o=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:s}}),{signable_message:m,payload_hash:p}=o.data,[d,u]=await Promise.all([signRaw(m,t),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:d,ether_key:a,stark_signature:u,stark_key:s}})).data},PassportErrorType.USER_REGISTRATION_ERROR)}async function B({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:s}=r.imx,o={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:s},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let{payload_hash:d}=p.data,u=await i.signMessage(d),{data:g}=p,c={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:u,order_id:t?.order_id,fee_info:g.fee_info,amount_buy:g.amount_buy,amount_sell:g.amount_sell,asset_id_buy:g.asset_id_buy,asset_id_sell:g.asset_id_sell,expiration_timestamp:g.expiration_timestamp,nonce:g.nonce,stark_key:g.stark_key,vault_id_buy:g.vault_id_buy,vault_id_sell:g.vault_id_sell}},{data:y}=await e.createTradeV3(c,{headers:m});return y},PassportErrorType.CREATE_TRADE_ERROR)}var X="ERC721";async function q({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return withPassportError(async()=>{let s=t.type===X?"1":t.amount,o={sender:i.imx.ethAddress,token:convertToSignableToken(t),amount:s,receiver:t.receiver},m={Authorization:`Bearer ${i.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let d=p.data,{payload_hash:u}=d,g=await r.signMessage(u),c=await r.getAddress(),x={createTransferRequest:{sender_stark_key:d.sender_stark_key||c,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:g}},{data:C}=await e.createTransferV1(x,{headers:m});return {sent_signature:C.sent_signature,status:C.status?.toString(),time:C.time,transfer_id:C.transfer_id}},PassportErrorType.TRANSFER_ERROR)}async function K({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:s}=t.imx,o=r.map(c=>({amount:"1",token:convertToSignableToken({type:X,tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),m={Authorization:`Bearer ${t.accessToken}`},p=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:s,signable_requests:o}},{headers:m});await a.evaluateTransaction(p.data.signable_responses[0]?.payload_hash);let d=await Promise.all(p.data.signable_responses.map(async c=>{let y=await e.signMessage(c.payload_hash);return {sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:y}})),u={sender_stark_key:p.data.sender_stark_key,requests:d};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:u},{headers:m}))?.data.transfer_ids}},PassportErrorType.TRANSFER_ERROR)}var A=t=>{if(typeof t=="object"&&t!==null&&"response"in t){let{response:e}=t;if(e&&typeof e=="object")return e}},_=t=>A(t)?.status;async function F(t){await retryWithDelay(async()=>{let e=await t.forceUserRefresh();if(!e)return Promise.reject(new Error("user wallet addresses not exist"));try{return P(e),e}catch{return Promise.reject(new Error("user wallet addresses not exist"))}});}async function w(t,e,r,i,a){return withPassportError(async()=>{try{let s=await S({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await F(i),s}catch(s){if(_(s)===409)return await F(i),{tx_hash:""};throw s}},PassportErrorType.USER_REGISTRATION_ERROR)}var E=async(t,e,r=!0,i=!0)=>{let a=trackFlow("passport",e,r);try{return await t(a)}catch(s){throw s instanceof Error?trackError("passport",e,s,{flowId:a.details.flowId}):a.addEvent("errored"),s}finally{i&&a.addEvent("End");}};var b=class{auth;immutableXClient;guardianClient;imxApiClients;magicTEESigner;imxGuardianClient;starkSigner;signerInitialisationError;constructor({auth:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:s,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=s,this.guardianClient=o,this.imxGuardianClient=m,this.#i(),i.on(AuthEvents.LOGGED_OUT,this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await U(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.auth.getUser();if(!e||!this.starkSigner)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);return e}async#t(){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#e(){let[e,r]=await Promise.all([this.#r(),this.#t()]);return {user:P(e),starkSigner:r}}async transfer(e){return E(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return q({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxTransfer")}async registerOffchain(){return E(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await w(this.magicTEESigner,r,e,this.auth,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return E(async()=>{try{let e=await this.#r();return !!P(e).imx}catch(e){if(e instanceof PassportError&&e.type===PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw e}},"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async createOrder(e){return E(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return N({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return E(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return G({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCancelOrder")}async createTrade(e){return E(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return B({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.imxGuardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return E(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:i}=await this.#e();return K({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return E(async()=>{let{user:r,starkSigner:i}=await this.#e();return D({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}prepareWithdrawal(e){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}completeWithdrawal(e,r){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async getAddress(){return E(async()=>{let e=await this.#r(),r=P(e);return Promise.resolve(r.imx.ethAddress)},"imxGetAddress")}};var T=class{auth;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;imxGuardianClient;constructor({auth:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:s,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=s,this.guardianClient=o,this.imxGuardianClient=m;}async getProvider(){let e=await this.auth.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.auth.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new PassportError("Failed to initialise",PassportErrorType.WALLET_CONNECTION_ERROR);return new b({auth:this.auth,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient,imxGuardianClient:this.imxGuardianClient})}};var H=(t,e,r)=>{let i=e.map(a=>!t[a]&&a).filter(a=>a).join(", ");if(i!==""){let a=r?`${r} - ${i} cannot be null`:`${i} cannot be null`;throw new PassportError(a,PassportErrorType.INVALID_CONFIGURATION)}},k=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:i,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:s,popupOverlayOptions:o,...m}){if(H(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=s||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)H(r,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=r.authenticationDomain,this.passportDomain=r.passportDomain,this.imxPublicApiDomain=r.imxPublicApiDomain,this.magicPublishableApiKey=r.magicPublishableApiKey,this.magicProviderId=r.magicProviderId,this.zkEvmRpcUrl=r.zkEvmRpcUrl,this.relayerUrl=r.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:r.indexerMrBasePath}),orderBook:createConfig({basePath:r.orderBookMrBasePath}),passport:createConfig({basePath:r.passportMrBasePath})};else switch(e.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getProduction();break}case Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var pe="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",v=class{auth;guardianApi;confirmationScreen;crossSdkBridgeEnabled;constructor({auth:e,guardianApi:r,confirmationScreen:i,crossSdkBridgeEnabled:a=!1}){this.auth=e,this.guardianApi=r,this.confirmationScreen=i,this.crossSdkBridgeEnabled=a;}async evaluateTransaction(e){let r=await this.auth.getUser();if(!r)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);let i=P(r),a={Authorization:`Bearer ${i.accessToken}`};try{if(!(await retryWithDelay(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:a}),{finallyFn:()=>{this.confirmationScreen.closeWindow();}})).data.id)throw new PassportError("Transaction does not exist",PassportErrorType.TRANSFER_ERROR);let m=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:a}),{confirmationRequired:p}=m.data;if(p){if(this.crossSdkBridgeEnabled)throw new PassportError(pe,PassportErrorType.TRANSACTION_REJECTED);if(!(await this.confirmationScreen.requestConfirmation(e,i.imx.ethAddress,mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new PassportError("Transaction rejected by user",PassportErrorType.TRANSACTION_REJECTED)}else this.confirmationScreen.closeWindow();}catch(s){throw _(s)===403?new PassportError("Service unavailable",PassportErrorType.SERVICE_UNAVAILABLE_ERROR):s}}};var Te=t=>t.overrides?createConfig({basePath:t.overrides.imxPublicApiDomain}):t.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),ke=t=>{if(t.overrides?.imxApiClients)return t.overrides.imxApiClients;let e=Te(t);return new ImxApiClients(e)},ve=t=>{let e=new k(t),r=new Auth({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=r.getConfig(),a=new ConfirmationScreen(i),s=new WalletConfiguration({passportDomain:e.passportDomain,zkEvmRpcUrl:e.zkEvmRpcUrl,relayerUrl:e.relayerUrl,indexerMrBasePath:e.multiRollupConfig.indexer.basePath||e.passportDomain,jsonRpcReferrer:t.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:t.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled}),o=new MultiRollupApiClients(e.multiRollupConfig),m=t.overrides?t.overrides.immutableXClient:new IMXClient({baseConfig:t.baseConfig}),p=new GuardianClient({config:s,getUser:x=>x?r.forceUserRefresh():r.getUser(),guardianApi:o.guardianApi,passportDomain:e.passportDomain,clientId:e.oidcConfiguration.clientId}),d=new v({auth:r,guardianApi:o.guardianApi,confirmationScreen:a,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled||!1}),u=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),g=new MagicTEESigner(x=>x?r.forceUserRefresh():r.getUser(),u),c=ke(t),y=new T({auth:r,immutableXClient:m,magicTEESigner:g,passportEventEmitter:r.eventEmitter,imxApiClients:c,guardianClient:p,imxGuardianClient:d});return {passportConfig:e,auth:r,passportImxProviderFactory:y,environment:t.baseConfig.environment,walletConfig:s}},O=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=ve(e);this.auth=r.auth,this.passportImxProviderFactory=r.passportImxProviderFactory,this.passportConfig=r.passportConfig,this.multiRollupApiClients=new MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=r.environment,setPassportClientId(e.clientId);}async connectImxSilent(){return E(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return E(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return E(async()=>{let r=this.passportConfig.overrides,i;return r?.zkEvmChainId?i={chainId:r.zkEvmChainId,name:r.zkEvmChainName||"Dev Chain",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:r.magicTeeBasePath||this.passportConfig.magicTeeBasePath}:this.environment===Environment.PRODUCTION?i={chainId:13371,name:"Immutable zkEVM",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath}:i={chainId:13473,name:"Immutable zkEVM Testnet",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath},await connectWallet({getUser:s=>s?this.auth.forceUserRefresh():this.auth.getUserOrLogin(),clientId:this.passportConfig.oidcConfiguration.clientId,chains:[i],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,feeTokenSymbol:"IMX",announceProvider:e?.announceProvider??!0})},"connectEvm",!1)}async login(e){let r=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,i=await this.auth.login(r);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return E(async()=>(await this.auth.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return (await this.auth.getUser())?.idToken}async getAccessToken(){return (await this.auth.getUser())?.accessToken}async loginWithPKCEFlow(e,r){return this.auth.loginWithPKCEFlow(e,r)}async loginWithPKCEFlowCallback(e,r){return (await this.auth.loginWithPKCEFlowCallback(e,r)).profile}async storeTokens(e){return (await this.auth.storeTokens(e)).profile}async getLogoutUrl(){return await this.auth.getLogoutUrl()}async logoutSilentCallback(e){return this.auth.logoutSilentCallback(e)}async getLinkedAddresses(){return E(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=a=>typeof a=="object"&&a!==null&&"code"in a&&"message"in a,i=trackFlow("passport","linkExternalWallet",!1);try{let a=await this.auth.getUser();if(!a)throw new PassportError("User is not logged in",PassportErrorType.NOT_LOGGED_IN_ERROR);let s=isUserZkEvm(a);if(!(()=>{try{return P(a),!0}catch(u){if(u instanceof PassportError&&u.type===PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw u}})()&&!s)throw new PassportError("User has not been registered",PassportErrorType.USER_NOT_REGISTERED_ERROR);let m={Authorization:`Bearer ${a.accessToken}`},p={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:p},{headers:m})).data}}catch(a){if(a instanceof Error?trackError("passport","linkExternalWallet",a):i.addEvent("errored"),a instanceof PassportError)throw a;let s=A(a);if(s){if(s.data&&r(s.data)){let{code:m,message:p}=s.data;switch(m){case"ALREADY_LINKED":throw new PassportError(p,PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new PassportError(p,PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new PassportError(p,PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new PassportError(p,PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new PassportError(p,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}}else if(s.status)throw new PassportError(`Link wallet request failed with status code ${s.status}`,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}let o="Link wallet request failed";throw a instanceof Error&&(o+=`: ${a.message}`),new PassportError(o,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{i.addEvent("End");}}};var J=(i=>(i.OptedIn="opted_in",i.Unsubscribed="unsubscribed",i.Subscribed="subscribed",i))(J||{});
12
12
 
13
- export { Y as MarketingConsentStatus, U as Passport };
13
+ export { J as MarketingConsentStatus, O as Passport };
@@ -8,16 +8,12 @@ var metrics = require('@imtbl/metrics');
8
8
  var wallet = require('@imtbl/wallet');
9
9
  var toolkit = require('@imtbl/toolkit');
10
10
 
11
- var E=i=>{if(!i.idToken)throw new auth.PassportError("User has been logged out",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);let r=auth.decodeJwtPayload(i.idToken).passport;if(!r?.imx_eth_address||!r?.imx_stark_address||!r?.imx_user_admin_address)throw new auth.PassportError("User has not been registered with StarkEx",auth.PassportErrorType.USER_NOT_REGISTERED_ERROR);return {...i,imx:{ethAddress:r.imx_eth_address,starkAddress:r.imx_stark_address,userAdminAddress:r.imx_user_admin_address}}};var O=async i=>auth.withPassportError(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(i);return xClient.createStarkSigner(e)},auth.PassportErrorType.WALLET_CONNECTION_ERROR);async function U({user:i,starkSigner:e,request:r,exchangesApi:t}){return auth.withPassportError(async()=>{let{ethAddress:a}=i.imx,n=r.amount,o=await t.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(r),amount:n,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=o.data,d=await e.signMessage(p),u={sender_stark_key:o.data.sender_stark_key||m,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:d},g={Authorization:`Bearer ${i.accessToken}`},c=await t.createExchangeTransfer({id:r.transactionID,createTransferRequest:u},{headers:g});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}},auth.PassportErrorType.EXCHANGE_TRANSFER_ERROR)}var L="ERC721";async function M({starkSigner:i,user:e,request:r,ordersApi:t,guardianClient:a}){return auth.withPassportError(async()=>{let{ethAddress:n}=e.imx,o=r.sell.type===L?"1":r.sell.amount,m=r.buy.type===L?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},d={user:n,amount_buy:m,token_buy:toolkit.convertToSignableToken(r.buy),amount_sell:o,token_sell:toolkit.convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},u=await t.getSignableOrder({getSignableOrderRequestV3:d},{headers:p});await a.evaluateTransaction(u.data.payload_hash);let{payload_hash:g}=u.data,c=await i.signMessage(g),h=u.data,R={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:c,amount_buy:h.amount_buy,amount_sell:h.amount_sell,asset_id_buy:h.asset_id_buy,asset_id_sell:h.asset_id_sell,expiration_timestamp:h.expiration_timestamp,nonce:h.nonce,stark_key:h.stark_key,vault_id_buy:h.vault_id_buy,vault_id_sell:h.vault_id_sell}};return {...(await t.createOrderV3(R,{headers:p})).data}},auth.PassportErrorType.CREATE_ORDER_ERROR)}async function N({user:i,starkSigner:e,request:r,ordersApi:t,guardianClient:a}){return auth.withPassportError(async()=>{let n={order_id:r.order_id},o={Authorization:`Bearer ${i.accessToken}`},m=await t.getSignableCancelOrderV3({getSignableCancelOrderRequest:n},{headers:o});await a.evaluateTransaction(m.data.payload_hash);let{payload_hash:p}=m.data,d=await e.signMessage(p),u=await t.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:d}},{headers:o});return {order_id:u.data.order_id,status:u.data.status}},auth.PassportErrorType.CANCEL_ORDER_ERROR)}async function k({ethSigner:i,starkSigner:e,imxApiClients:r},t){return auth.withPassportError(async()=>{let[a,n]=await Promise.all([i.getAddress(),e.getAddress()]),o=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:m,payload_hash:p}=o.data,[d,u]=await Promise.all([toolkit.signRaw(m,i),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${t}`,registerPassportUserRequest:{eth_signature:d,ether_key:a,stark_signature:u,stark_key:n}})).data},auth.PassportErrorType.USER_REGISTRATION_ERROR)}async function G({request:i,tradesApi:e,user:r,starkSigner:t,guardianClient:a}){return auth.withPassportError(async()=>{let{ethAddress:n}=r.imx,o={expiration_timestamp:i.expiration_timestamp,fees:i.fees,order_id:i.order_id,user:n},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let{payload_hash:d}=p.data,u=await t.signMessage(d),{data:g}=p,c={createTradeRequest:{include_fees:!0,fees:i?.fees,stark_signature:u,order_id:i?.order_id,fee_info:g.fee_info,amount_buy:g.amount_buy,amount_sell:g.amount_sell,asset_id_buy:g.asset_id_buy,asset_id_sell:g.asset_id_sell,expiration_timestamp:g.expiration_timestamp,nonce:g.nonce,stark_key:g.stark_key,vault_id_buy:g.vault_id_buy,vault_id_sell:g.vault_id_sell}},{data:h}=await e.createTradeV3(c,{headers:m});return h},auth.PassportErrorType.CREATE_TRADE_ERROR)}var W="ERC721";async function X({request:i,transfersApi:e,starkSigner:r,user:t,guardianClient:a}){return auth.withPassportError(async()=>{let n=i.type===W?"1":i.amount,o={sender:t.imx.ethAddress,token:toolkit.convertToSignableToken(i),amount:n,receiver:i.receiver},m={Authorization:`Bearer ${t.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let d=p.data,{payload_hash:u}=d,g=await r.signMessage(u),c=await r.getAddress(),R={createTransferRequest:{sender_stark_key:d.sender_stark_key||c,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:g}},{data:C}=await e.createTransferV1(R,{headers:m});return {sent_signature:C.sent_signature,status:C.status?.toString(),time:C.time,transfer_id:C.transfer_id}},auth.PassportErrorType.TRANSFER_ERROR)}async function K({user:i,starkSigner:e,request:r,transfersApi:t,guardianClient:a}){return auth.withPassportError(async()=>{let{ethAddress:n}=i.imx,o=r.map(c=>({amount:"1",token:toolkit.convertToSignableToken({type:W,tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),m={Authorization:`Bearer ${i.accessToken}`},p=await t.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:o}},{headers:m});await a.evaluateTransaction(p.data.signable_responses[0]?.payload_hash);let d=await Promise.all(p.data.signable_responses.map(async c=>{let h=await e.signMessage(c.payload_hash);return {sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:h}})),u={sender_stark_key:p.data.sender_stark_key,requests:d};return {transfer_ids:(await t.createTransfer({createTransferRequestV2:u},{headers:m}))?.data.transfer_ids}},auth.PassportErrorType.TRANSFER_ERROR)}var v=i=>{if(typeof i=="object"&&i!==null&&"response"in i){let{response:e}=i;if(e&&typeof e=="object")return e}},P=i=>v(i)?.status;async function q(i){await wallet.retryWithDelay(async()=>{let e=await i.forceUserRefresh();if(!e)return Promise.reject(new Error("user wallet addresses not exist"));try{return E(e),e}catch{return Promise.reject(new Error("user wallet addresses not exist"))}});}async function S(i,e,r,t,a){return auth.withPassportError(async()=>{try{let n=await k({ethSigner:i,starkSigner:e,imxApiClients:a},r.accessToken);return await q(t),n}catch(n){if(P(n)===409)return await q(t),{tx_hash:""};throw n}},auth.PassportErrorType.USER_REGISTRATION_ERROR)}var y=async(i,e,r=!0,t=!0)=>{let a=metrics.trackFlow("passport",e,r);try{return await i(a)}catch(n){throw n instanceof Error?metrics.trackError("passport",e,n,{flowId:a.details.flowId}):a.addEvent("errored"),n}finally{t&&a.addEvent("End");}};var x=class{auth;immutableXClient;guardianClient;imxApiClients;magicTEESigner;imxGuardianClient;starkSigner;signerInitialisationError;constructor({auth:e,immutableXClient:r,passportEventEmitter:t,magicTEESigner:a,imxApiClients:n,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=n,this.guardianClient=o,this.imxGuardianClient=m,this.#i(),t.on(auth.AuthEvents.LOGGED_OUT,this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await O(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.auth.getUser();if(!e||!this.starkSigner)throw new auth.PassportError("User has been logged out",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);return e}async#t(){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#e(){let[e,r]=await Promise.all([this.#r(),this.#t()]);return {user:E(e),starkSigner:r}}async transfer(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return X({request:e,user:r,starkSigner:t,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxTransfer")}async registerOffchain(){return y(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await S(this.magicTEESigner,r,e,this.auth,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return y(async()=>{try{let e=await this.#r();return !!E(e).imx}catch(e){if(e instanceof auth.PassportError&&e.type===auth.PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw e}},"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new auth.PassportError("Operation not supported",auth.PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async createOrder(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return M({request:e,user:r,starkSigner:t,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return N({request:e,user:r,starkSigner:t,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCancelOrder")}async createTrade(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return G({request:e,user:r,starkSigner:t,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.imxGuardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return y(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:t}=await this.#e();return K({request:e,user:r,starkSigner:t,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return y(async()=>{let{user:r,starkSigner:t}=await this.#e();return U({request:e,user:r,starkSigner:t,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new auth.PassportError("Operation not supported",auth.PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}prepareWithdrawal(e){throw new auth.PassportError("Operation not supported",auth.PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}completeWithdrawal(e,r){throw new auth.PassportError("Operation not supported",auth.PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async getAddress(){return y(async()=>{let e=await this.#r(),r=E(e);return Promise.resolve(r.imx.ethAddress)},"imxGetAddress")}};var _=class{auth;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;imxGuardianClient;constructor({auth:e,immutableXClient:r,magicTEESigner:t,passportEventEmitter:a,imxApiClients:n,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=t,this.passportEventEmitter=a,this.imxApiClients=n,this.guardianClient=o,this.imxGuardianClient=m;}async getProvider(){let e=await this.auth.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.auth.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new auth.PassportError("Failed to initialise",auth.PassportErrorType.WALLET_CONNECTION_ERROR);return new x({auth:this.auth,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient,imxGuardianClient:this.imxGuardianClient})}};var z=(i,e,r)=>{let t=e.map(a=>!i[a]&&a).filter(a=>a).join(", ");if(t!==""){let a=r?`${r} - ${t} cannot be null`:`${t} cannot be null`;throw new auth.PassportError(a,auth.PassportErrorType.INVALID_CONFIGURATION)}},b=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:t,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:n,popupOverlayOptions:o,...m}){if(z(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=t||!1,this.forceScwDeployBeforeMessageSignature=n||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)z(r,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=r.authenticationDomain,this.passportDomain=r.passportDomain,this.imxPublicApiDomain=r.imxPublicApiDomain,this.magicPublishableApiKey=r.magicPublishableApiKey,this.magicProviderId=r.magicProviderId,this.zkEvmRpcUrl=r.zkEvmRpcUrl,this.relayerUrl=r.relayerUrl,this.multiRollupConfig={indexer:generatedClients.createConfig({basePath:r.indexerMrBasePath}),orderBook:generatedClients.createConfig({basePath:r.orderBookMrBasePath}),passport:generatedClients.createConfig({basePath:r.passportMrBasePath})};else switch(e.environment){case config.Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=generatedClients.multiRollupConfig.getProduction();break}case config.Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=generatedClients.multiRollupConfig.getSandbox();break}}}};var me="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",T=class{auth;guardianApi;confirmationScreen;crossSdkBridgeEnabled;constructor({auth:e,guardianApi:r,confirmationScreen:t,crossSdkBridgeEnabled:a=!1}){this.auth=e,this.guardianApi=r,this.confirmationScreen=t,this.crossSdkBridgeEnabled=a;}async evaluateTransaction(e){let r=await this.auth.getUser();if(!r)throw new auth.PassportError("User has been logged out",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);let t=E(r),a={Authorization:`Bearer ${t.accessToken}`};try{if(!(await wallet.retryWithDelay(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:a}),{finallyFn:()=>{this.confirmationScreen.closeWindow();}})).data.id)throw new auth.PassportError("Transaction does not exist",auth.PassportErrorType.TRANSFER_ERROR);let m=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:a}),{confirmationRequired:p}=m.data;if(p){if(this.crossSdkBridgeEnabled)throw new auth.PassportError(me,auth.PassportErrorType.TRANSACTION_REJECTED);if(!(await this.confirmationScreen.requestConfirmation(e,t.imx.ethAddress,generatedClients.mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new auth.PassportError("Transaction rejected by user",auth.PassportErrorType.TRANSACTION_REJECTED)}else this.confirmationScreen.closeWindow();}catch(n){throw P(n)===403?new auth.PassportError("Service unavailable",auth.PassportErrorType.SERVICE_UNAVAILABLE_ERROR):n}}};var Te=i=>i.overrides?generatedClients.createConfig({basePath:i.overrides.imxPublicApiDomain}):i.baseConfig.environment===config.Environment.SANDBOX?generatedClients.imxApiConfig.getSandbox():generatedClients.imxApiConfig.getProduction(),ke=i=>{if(i.overrides?.imxApiClients)return i.overrides.imxApiClients;let e=Te(i);return new generatedClients.ImxApiClients(e)},ve=i=>{let e=new b(i),r=new auth.Auth({...i,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled,popupOverlayOptions:i.popupOverlayOptions,passportDomain:e.passportDomain}),t=r.getConfig(),a=new wallet.ConfirmationScreen(t),n=new wallet.WalletConfiguration({passportDomain:e.passportDomain,zkEvmRpcUrl:e.zkEvmRpcUrl,relayerUrl:e.relayerUrl,indexerMrBasePath:e.multiRollupConfig.indexer.basePath||e.passportDomain,jsonRpcReferrer:i.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:i.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled}),o=new generatedClients.MultiRollupApiClients(e.multiRollupConfig),m=i.overrides?i.overrides.immutableXClient:new xClient.IMXClient({baseConfig:i.baseConfig}),p=new wallet.GuardianClient({config:n,getUser:R=>R?r.forceUserRefresh():r.getUser(),guardianApi:o.guardianApi,passportDomain:e.passportDomain,clientId:e.oidcConfiguration.clientId}),d=new T({auth:r,guardianApi:o.guardianApi,confirmationScreen:a,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled||!1}),u=new generatedClients.MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),g=new wallet.MagicTEESigner(R=>R?r.forceUserRefresh():r.getUser(),u),c=ke(i),h=new _({auth:r,immutableXClient:m,magicTEESigner:g,passportEventEmitter:r.eventEmitter,imxApiClients:c,guardianClient:p,imxGuardianClient:d});return {passportConfig:e,auth:r,passportImxProviderFactory:h,environment:i.baseConfig.environment,walletConfig:n}},I=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=ve(e);this.auth=r.auth,this.passportImxProviderFactory=r.passportImxProviderFactory,this.passportConfig=r.passportConfig,this.multiRollupApiClients=new generatedClients.MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=r.environment,metrics.setPassportClientId(e.clientId);}async connectImxSilent(){return y(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return y(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return y(async()=>{let r=e?.chain??wallet.EvmChain.ZKEVM;if(r!==wallet.EvmChain.ZKEVM)throw new Error(`Chain ${r} is not yet supported. Only ZKEVM is currently available.`);let t=this.buildChainConfig(r),a=t.feeTokenSymbol??"IMX";return await wallet.connectWallet({getUser:o=>o?this.auth.forceUserRefresh():this.auth.getUserOrLogin(),clientId:this.passportConfig.oidcConfiguration.clientId,chains:[t],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,feeTokenSymbol:a,announceProvider:e?.announceProvider??!0})},"connectEvm",!1)}buildChainConfig(e){let r=this.passportConfig.overrides;if(e===wallet.EvmChain.ZKEVM)return r?.zkEvmChainId?{chainId:r.zkEvmChainId,name:r.zkEvmChainName||"Dev Chain",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:r.magicTeeBasePath||this.passportConfig.magicTeeBasePath}:this.environment===config.Environment.PRODUCTION?{chainId:13371,name:"Immutable zkEVM",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath}:{chainId:13473,name:"Immutable zkEVM Testnet",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath};let t=wallet.getChainConfig(e,this.environment);return r?{...t,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||t.apiUrl,passportDomain:this.passportConfig.passportDomain}:{...t,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||t.apiUrl,passportDomain:this.passportConfig.passportDomain}}async login(e){let r=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,t=await this.auth.login(r);return t?t.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return y(async()=>(await this.auth.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return (await this.auth.getUser())?.idToken}async getAccessToken(){return (await this.auth.getUser())?.accessToken}async loginWithPKCEFlow(e,r){return this.auth.loginWithPKCEFlow(e,r)}async loginWithPKCEFlowCallback(e,r){return (await this.auth.loginWithPKCEFlowCallback(e,r)).profile}async storeTokens(e){return (await this.auth.storeTokens(e)).profile}async getLogoutUrl(){return await this.auth.getLogoutUrl()}async logoutSilentCallback(e){return this.auth.logoutSilentCallback(e)}async getLinkedAddresses(){return y(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=a=>typeof a=="object"&&a!==null&&"code"in a&&"message"in a,t=metrics.trackFlow("passport","linkExternalWallet",!1);try{let a=await this.auth.getUser();if(!a)throw new auth.PassportError("User is not logged in",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);let n=auth.isUserZkEvm(a);if(!(()=>{try{return E(a),!0}catch(u){if(u instanceof auth.PassportError&&u.type===auth.PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw u}})()&&!n)throw new auth.PassportError("User has not been registered",auth.PassportErrorType.USER_NOT_REGISTERED_ERROR);let m={Authorization:`Bearer ${a.accessToken}`},p={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:p},{headers:m})).data}}catch(a){if(a instanceof Error?metrics.trackError("passport","linkExternalWallet",a):t.addEvent("errored"),a instanceof auth.PassportError)throw a;let n=v(a);if(n){if(n.data&&r(n.data)){let{code:m,message:p}=n.data;switch(m){case"ALREADY_LINKED":throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_GENERIC_ERROR)}}else if(n.status)throw new auth.PassportError(`Link wallet request failed with status code ${n.status}`,auth.PassportErrorType.LINK_WALLET_GENERIC_ERROR)}let o="Link wallet request failed";throw a instanceof Error&&(o+=`: ${a.message}`),new auth.PassportError(o,auth.PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{t.addEvent("End");}}};var Z=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t.Subscribed="subscribed",t))(Z||{});
11
+ var R=t=>{if(!t.idToken)throw new auth.PassportError("User has been logged out",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);let r=auth.decodeJwtPayload(t.idToken).passport;if(!r?.imx_eth_address||!r?.imx_stark_address||!r?.imx_user_admin_address)throw new auth.PassportError("User has not been registered with StarkEx",auth.PassportErrorType.USER_NOT_REGISTERED_ERROR);return {...t,imx:{ethAddress:r.imx_eth_address,starkAddress:r.imx_stark_address,userAdminAddress:r.imx_user_admin_address}}};var I=async t=>auth.withPassportError(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(t);return xClient.createStarkSigner(e)},auth.PassportErrorType.WALLET_CONNECTION_ERROR);async function O({user:t,starkSigner:e,request:r,exchangesApi:i}){return auth.withPassportError(async()=>{let{ethAddress:a}=t.imx,s=r.amount,o=await i.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(r),amount:s,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=o.data,d=await e.signMessage(p),u={sender_stark_key:o.data.sender_stark_key||m,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:d},g={Authorization:`Bearer ${t.accessToken}`},c=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:u},{headers:g});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}},auth.PassportErrorType.EXCHANGE_TRANSFER_ERROR)}var D="ERC721";async function L({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return auth.withPassportError(async()=>{let{ethAddress:s}=e.imx,o=r.sell.type===D?"1":r.sell.amount,m=r.buy.type===D?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},d={user:s,amount_buy:m,token_buy:toolkit.convertToSignableToken(r.buy),amount_sell:o,token_sell:toolkit.convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},u=await i.getSignableOrder({getSignableOrderRequestV3:d},{headers:p});await a.evaluateTransaction(u.data.payload_hash);let{payload_hash:g}=u.data,c=await t.signMessage(g),h=u.data,E={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:c,amount_buy:h.amount_buy,amount_sell:h.amount_sell,asset_id_buy:h.asset_id_buy,asset_id_sell:h.asset_id_sell,expiration_timestamp:h.expiration_timestamp,nonce:h.nonce,stark_key:h.stark_key,vault_id_buy:h.vault_id_buy,vault_id_sell:h.vault_id_sell}};return {...(await i.createOrderV3(E,{headers:p})).data}},auth.PassportErrorType.CREATE_ORDER_ERROR)}async function M({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return auth.withPassportError(async()=>{let s={order_id:r.order_id},o={Authorization:`Bearer ${t.accessToken}`},m=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:s},{headers:o});await a.evaluateTransaction(m.data.payload_hash);let{payload_hash:p}=m.data,d=await e.signMessage(p),u=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:d}},{headers:o});return {order_id:u.data.order_id,status:u.data.status}},auth.PassportErrorType.CANCEL_ORDER_ERROR)}async function k({ethSigner:t,starkSigner:e,imxApiClients:r},i){return auth.withPassportError(async()=>{let[a,s]=await Promise.all([t.getAddress(),e.getAddress()]),o=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:s}}),{signable_message:m,payload_hash:p}=o.data,[d,u]=await Promise.all([toolkit.signRaw(m,t),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:d,ether_key:a,stark_signature:u,stark_key:s}})).data},auth.PassportErrorType.USER_REGISTRATION_ERROR)}async function N({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return auth.withPassportError(async()=>{let{ethAddress:s}=r.imx,o={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:s},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let{payload_hash:d}=p.data,u=await i.signMessage(d),{data:g}=p,c={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:u,order_id:t?.order_id,fee_info:g.fee_info,amount_buy:g.amount_buy,amount_sell:g.amount_sell,asset_id_buy:g.asset_id_buy,asset_id_sell:g.asset_id_sell,expiration_timestamp:g.expiration_timestamp,nonce:g.nonce,stark_key:g.stark_key,vault_id_buy:g.vault_id_buy,vault_id_sell:g.vault_id_sell}},{data:h}=await e.createTradeV3(c,{headers:m});return h},auth.PassportErrorType.CREATE_TRADE_ERROR)}var B="ERC721";async function W({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return auth.withPassportError(async()=>{let s=t.type===B?"1":t.amount,o={sender:i.imx.ethAddress,token:toolkit.convertToSignableToken(t),amount:s,receiver:t.receiver},m={Authorization:`Bearer ${i.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let d=p.data,{payload_hash:u}=d,g=await r.signMessage(u),c=await r.getAddress(),E={createTransferRequest:{sender_stark_key:d.sender_stark_key||c,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:g}},{data:P}=await e.createTransferV1(E,{headers:m});return {sent_signature:P.sent_signature,status:P.status?.toString(),time:P.time,transfer_id:P.transfer_id}},auth.PassportErrorType.TRANSFER_ERROR)}async function X({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return auth.withPassportError(async()=>{let{ethAddress:s}=t.imx,o=r.map(c=>({amount:"1",token:toolkit.convertToSignableToken({type:B,tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),m={Authorization:`Bearer ${t.accessToken}`},p=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:s,signable_requests:o}},{headers:m});await a.evaluateTransaction(p.data.signable_responses[0]?.payload_hash);let d=await Promise.all(p.data.signable_responses.map(async c=>{let h=await e.signMessage(c.payload_hash);return {sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:h}})),u={sender_stark_key:p.data.sender_stark_key,requests:d};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:u},{headers:m}))?.data.transfer_ids}},auth.PassportErrorType.TRANSFER_ERROR)}var v=t=>{if(typeof t=="object"&&t!==null&&"response"in t){let{response:e}=t;if(e&&typeof e=="object")return e}},x=t=>v(t)?.status;async function q(t){await wallet.retryWithDelay(async()=>{let e=await t.forceUserRefresh();if(!e)return Promise.reject(new Error("user wallet addresses not exist"));try{return R(e),e}catch{return Promise.reject(new Error("user wallet addresses not exist"))}});}async function S(t,e,r,i,a){return auth.withPassportError(async()=>{try{let s=await k({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await q(i),s}catch(s){if(x(s)===409)return await q(i),{tx_hash:""};throw s}},auth.PassportErrorType.USER_REGISTRATION_ERROR)}var y=async(t,e,r=!0,i=!0)=>{let a=metrics.trackFlow("passport",e,r);try{return await t(a)}catch(s){throw s instanceof Error?metrics.trackError("passport",e,s,{flowId:a.details.flowId}):a.addEvent("errored"),s}finally{i&&a.addEvent("End");}};var C=class{auth;immutableXClient;guardianClient;imxApiClients;magicTEESigner;imxGuardianClient;starkSigner;signerInitialisationError;constructor({auth:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:s,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=s,this.guardianClient=o,this.imxGuardianClient=m,this.#i(),i.on(auth.AuthEvents.LOGGED_OUT,this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await I(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.auth.getUser();if(!e||!this.starkSigner)throw new auth.PassportError("User has been logged out",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);return e}async#t(){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#e(){let[e,r]=await Promise.all([this.#r(),this.#t()]);return {user:R(e),starkSigner:r}}async transfer(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return W({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxTransfer")}async registerOffchain(){return y(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await S(this.magicTEESigner,r,e,this.auth,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return y(async()=>{try{let e=await this.#r();return !!R(e).imx}catch(e){if(e instanceof auth.PassportError&&e.type===auth.PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw e}},"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new auth.PassportError("Operation not supported",auth.PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async createOrder(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return L({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return M({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCancelOrder")}async createTrade(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return N({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.imxGuardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return y(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:i}=await this.#e();return X({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return y(async()=>{let{user:r,starkSigner:i}=await this.#e();return O({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new auth.PassportError("Operation not supported",auth.PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}prepareWithdrawal(e){throw new auth.PassportError("Operation not supported",auth.PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}completeWithdrawal(e,r){throw new auth.PassportError("Operation not supported",auth.PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async getAddress(){return y(async()=>{let e=await this.#r(),r=R(e);return Promise.resolve(r.imx.ethAddress)},"imxGetAddress")}};var _=class{auth;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;imxGuardianClient;constructor({auth:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:s,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=s,this.guardianClient=o,this.imxGuardianClient=m;}async getProvider(){let e=await this.auth.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.auth.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new auth.PassportError("Failed to initialise",auth.PassportErrorType.WALLET_CONNECTION_ERROR);return new C({auth:this.auth,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient,imxGuardianClient:this.imxGuardianClient})}};var V=(t,e,r)=>{let i=e.map(a=>!t[a]&&a).filter(a=>a).join(", ");if(i!==""){let a=r?`${r} - ${i} cannot be null`:`${i} cannot be null`;throw new auth.PassportError(a,auth.PassportErrorType.INVALID_CONFIGURATION)}},b=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:i,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:s,popupOverlayOptions:o,...m}){if(V(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=s||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)V(r,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=r.authenticationDomain,this.passportDomain=r.passportDomain,this.imxPublicApiDomain=r.imxPublicApiDomain,this.magicPublishableApiKey=r.magicPublishableApiKey,this.magicProviderId=r.magicProviderId,this.zkEvmRpcUrl=r.zkEvmRpcUrl,this.relayerUrl=r.relayerUrl,this.multiRollupConfig={indexer:generatedClients.createConfig({basePath:r.indexerMrBasePath}),orderBook:generatedClients.createConfig({basePath:r.orderBookMrBasePath}),passport:generatedClients.createConfig({basePath:r.passportMrBasePath})};else switch(e.environment){case config.Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=generatedClients.multiRollupConfig.getProduction();break}case config.Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=generatedClients.multiRollupConfig.getSandbox();break}}}};var le="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",T=class{auth;guardianApi;confirmationScreen;crossSdkBridgeEnabled;constructor({auth:e,guardianApi:r,confirmationScreen:i,crossSdkBridgeEnabled:a=!1}){this.auth=e,this.guardianApi=r,this.confirmationScreen=i,this.crossSdkBridgeEnabled=a;}async evaluateTransaction(e){let r=await this.auth.getUser();if(!r)throw new auth.PassportError("User has been logged out",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);let i=R(r),a={Authorization:`Bearer ${i.accessToken}`};try{if(!(await wallet.retryWithDelay(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:a}),{finallyFn:()=>{this.confirmationScreen.closeWindow();}})).data.id)throw new auth.PassportError("Transaction does not exist",auth.PassportErrorType.TRANSFER_ERROR);let m=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:a}),{confirmationRequired:p}=m.data;if(p){if(this.crossSdkBridgeEnabled)throw new auth.PassportError(le,auth.PassportErrorType.TRANSACTION_REJECTED);if(!(await this.confirmationScreen.requestConfirmation(e,i.imx.ethAddress,generatedClients.mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new auth.PassportError("Transaction rejected by user",auth.PassportErrorType.TRANSACTION_REJECTED)}else this.confirmationScreen.closeWindow();}catch(s){throw x(s)===403?new auth.PassportError("Service unavailable",auth.PassportErrorType.SERVICE_UNAVAILABLE_ERROR):s}}};var _e=t=>t.overrides?generatedClients.createConfig({basePath:t.overrides.imxPublicApiDomain}):t.baseConfig.environment===config.Environment.SANDBOX?generatedClients.imxApiConfig.getSandbox():generatedClients.imxApiConfig.getProduction(),be=t=>{if(t.overrides?.imxApiClients)return t.overrides.imxApiClients;let e=_e(t);return new generatedClients.ImxApiClients(e)},Te=t=>{let e=new b(t),r=new auth.Auth({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=r.getConfig(),a=new wallet.ConfirmationScreen(i),s=new wallet.WalletConfiguration({passportDomain:e.passportDomain,zkEvmRpcUrl:e.zkEvmRpcUrl,relayerUrl:e.relayerUrl,indexerMrBasePath:e.multiRollupConfig.indexer.basePath||e.passportDomain,jsonRpcReferrer:t.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:t.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled}),o=new generatedClients.MultiRollupApiClients(e.multiRollupConfig),m=t.overrides?t.overrides.immutableXClient:new xClient.IMXClient({baseConfig:t.baseConfig}),p=new wallet.GuardianClient({config:s,getUser:E=>E?r.forceUserRefresh():r.getUser(),guardianApi:o.guardianApi,passportDomain:e.passportDomain,clientId:e.oidcConfiguration.clientId}),d=new T({auth:r,guardianApi:o.guardianApi,confirmationScreen:a,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled||!1}),u=new generatedClients.MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),g=new wallet.MagicTEESigner(E=>E?r.forceUserRefresh():r.getUser(),u),c=be(t),h=new _({auth:r,immutableXClient:m,magicTEESigner:g,passportEventEmitter:r.eventEmitter,imxApiClients:c,guardianClient:p,imxGuardianClient:d});return {passportConfig:e,auth:r,passportImxProviderFactory:h,environment:t.baseConfig.environment,walletConfig:s}},w=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=Te(e);this.auth=r.auth,this.passportImxProviderFactory=r.passportImxProviderFactory,this.passportConfig=r.passportConfig,this.multiRollupApiClients=new generatedClients.MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=r.environment,metrics.setPassportClientId(e.clientId);}async connectImxSilent(){return y(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return y(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return y(async()=>{let r=this.passportConfig.overrides,i;return r?.zkEvmChainId?i={chainId:r.zkEvmChainId,name:r.zkEvmChainName||"Dev Chain",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:r.magicTeeBasePath||this.passportConfig.magicTeeBasePath}:this.environment===config.Environment.PRODUCTION?i={chainId:13371,name:"Immutable zkEVM",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath}:i={chainId:13473,name:"Immutable zkEVM Testnet",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath},await wallet.connectWallet({getUser:s=>s?this.auth.forceUserRefresh():this.auth.getUserOrLogin(),clientId:this.passportConfig.oidcConfiguration.clientId,chains:[i],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,feeTokenSymbol:"IMX",announceProvider:e?.announceProvider??!0})},"connectEvm",!1)}async login(e){let r=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,i=await this.auth.login(r);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return y(async()=>(await this.auth.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return (await this.auth.getUser())?.idToken}async getAccessToken(){return (await this.auth.getUser())?.accessToken}async loginWithPKCEFlow(e,r){return this.auth.loginWithPKCEFlow(e,r)}async loginWithPKCEFlowCallback(e,r){return (await this.auth.loginWithPKCEFlowCallback(e,r)).profile}async storeTokens(e){return (await this.auth.storeTokens(e)).profile}async getLogoutUrl(){return await this.auth.getLogoutUrl()}async logoutSilentCallback(e){return this.auth.logoutSilentCallback(e)}async getLinkedAddresses(){return y(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=a=>typeof a=="object"&&a!==null&&"code"in a&&"message"in a,i=metrics.trackFlow("passport","linkExternalWallet",!1);try{let a=await this.auth.getUser();if(!a)throw new auth.PassportError("User is not logged in",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);let s=auth.isUserZkEvm(a);if(!(()=>{try{return R(a),!0}catch(u){if(u instanceof auth.PassportError&&u.type===auth.PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw u}})()&&!s)throw new auth.PassportError("User has not been registered",auth.PassportErrorType.USER_NOT_REGISTERED_ERROR);let m={Authorization:`Bearer ${a.accessToken}`},p={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:p},{headers:m})).data}}catch(a){if(a instanceof Error?metrics.trackError("passport","linkExternalWallet",a):i.addEvent("errored"),a instanceof auth.PassportError)throw a;let s=v(a);if(s){if(s.data&&r(s.data)){let{code:m,message:p}=s.data;switch(m){case"ALREADY_LINKED":throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new auth.PassportError(p,auth.PassportErrorType.LINK_WALLET_GENERIC_ERROR)}}else if(s.status)throw new auth.PassportError(`Link wallet request failed with status code ${s.status}`,auth.PassportErrorType.LINK_WALLET_GENERIC_ERROR)}let o="Link wallet request failed";throw a instanceof Error&&(o+=`: ${a.message}`),new auth.PassportError(o,auth.PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{i.addEvent("End");}}};var $=(i=>(i.OptedIn="opted_in",i.Unsubscribed="unsubscribed",i.Subscribed="subscribed",i))($||{});
12
12
 
13
13
  Object.defineProperty(exports, "PassportError", {
14
14
  enumerable: true,
15
15
  get: function () { return auth.PassportError; }
16
16
  });
17
- Object.defineProperty(exports, "EvmChain", {
18
- enumerable: true,
19
- get: function () { return wallet.EvmChain; }
20
- });
21
17
  Object.defineProperty(exports, "JsonRpcError", {
22
18
  enumerable: true,
23
19
  get: function () { return wallet.JsonRpcError; }
@@ -34,5 +30,5 @@ Object.defineProperty(exports, "RpcErrorCode", {
34
30
  enumerable: true,
35
31
  get: function () { return wallet.RpcErrorCode; }
36
32
  });
37
- exports.MarketingConsentStatus = Z;
38
- exports.Passport = I;
33
+ exports.MarketingConsentStatus = $;
34
+ exports.Passport = w;
@@ -4,10 +4,10 @@ import { MultiRollupApiClients, MagicTeeApiClients, createConfig, multiRollupCon
4
4
  import { IMXClient, generateLegacyStarkPrivateKey, createStarkSigner } from '@imtbl/x-client';
5
5
  import { Environment } from '@imtbl/config';
6
6
  import { setPassportClientId, trackFlow, trackError } from '@imtbl/metrics';
7
- import { EvmChain, getChainConfig, ConfirmationScreen, WalletConfiguration, GuardianClient, MagicTEESigner, connectWallet, retryWithDelay } from '@imtbl/wallet';
8
- export { EvmChain, JsonRpcError, ProviderErrorCode, ProviderEvent, RpcErrorCode } from '@imtbl/wallet';
7
+ import { ConfirmationScreen, WalletConfiguration, GuardianClient, MagicTEESigner, connectWallet, retryWithDelay } from '@imtbl/wallet';
8
+ export { JsonRpcError, ProviderErrorCode, ProviderEvent, RpcErrorCode } from '@imtbl/wallet';
9
9
  import { convertToSignableToken, signRaw } from '@imtbl/toolkit';
10
10
 
11
- var E=i=>{if(!i.idToken)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);let r=decodeJwtPayload(i.idToken).passport;if(!r?.imx_eth_address||!r?.imx_stark_address||!r?.imx_user_admin_address)throw new PassportError("User has not been registered with StarkEx",PassportErrorType.USER_NOT_REGISTERED_ERROR);return {...i,imx:{ethAddress:r.imx_eth_address,starkAddress:r.imx_stark_address,userAdminAddress:r.imx_user_admin_address}}};var O=async i=>withPassportError(async()=>{let e=await generateLegacyStarkPrivateKey(i);return createStarkSigner(e)},PassportErrorType.WALLET_CONNECTION_ERROR);async function U({user:i,starkSigner:e,request:r,exchangesApi:t}){return withPassportError(async()=>{let{ethAddress:a}=i.imx,n=r.amount,o=await t.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:n,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=o.data,d=await e.signMessage(p),u={sender_stark_key:o.data.sender_stark_key||m,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:d},g={Authorization:`Bearer ${i.accessToken}`},c=await t.createExchangeTransfer({id:r.transactionID,createTransferRequest:u},{headers:g});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}},PassportErrorType.EXCHANGE_TRANSFER_ERROR)}var L="ERC721";async function M({starkSigner:i,user:e,request:r,ordersApi:t,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:n}=e.imx,o=r.sell.type===L?"1":r.sell.amount,m=r.buy.type===L?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},d={user:n,amount_buy:m,token_buy:convertToSignableToken(r.buy),amount_sell:o,token_sell:convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},u=await t.getSignableOrder({getSignableOrderRequestV3:d},{headers:p});await a.evaluateTransaction(u.data.payload_hash);let{payload_hash:g}=u.data,c=await i.signMessage(g),h=u.data,R={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:c,amount_buy:h.amount_buy,amount_sell:h.amount_sell,asset_id_buy:h.asset_id_buy,asset_id_sell:h.asset_id_sell,expiration_timestamp:h.expiration_timestamp,nonce:h.nonce,stark_key:h.stark_key,vault_id_buy:h.vault_id_buy,vault_id_sell:h.vault_id_sell}};return {...(await t.createOrderV3(R,{headers:p})).data}},PassportErrorType.CREATE_ORDER_ERROR)}async function N({user:i,starkSigner:e,request:r,ordersApi:t,guardianClient:a}){return withPassportError(async()=>{let n={order_id:r.order_id},o={Authorization:`Bearer ${i.accessToken}`},m=await t.getSignableCancelOrderV3({getSignableCancelOrderRequest:n},{headers:o});await a.evaluateTransaction(m.data.payload_hash);let{payload_hash:p}=m.data,d=await e.signMessage(p),u=await t.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:d}},{headers:o});return {order_id:u.data.order_id,status:u.data.status}},PassportErrorType.CANCEL_ORDER_ERROR)}async function k({ethSigner:i,starkSigner:e,imxApiClients:r},t){return withPassportError(async()=>{let[a,n]=await Promise.all([i.getAddress(),e.getAddress()]),o=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:m,payload_hash:p}=o.data,[d,u]=await Promise.all([signRaw(m,i),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${t}`,registerPassportUserRequest:{eth_signature:d,ether_key:a,stark_signature:u,stark_key:n}})).data},PassportErrorType.USER_REGISTRATION_ERROR)}async function G({request:i,tradesApi:e,user:r,starkSigner:t,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:n}=r.imx,o={expiration_timestamp:i.expiration_timestamp,fees:i.fees,order_id:i.order_id,user:n},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let{payload_hash:d}=p.data,u=await t.signMessage(d),{data:g}=p,c={createTradeRequest:{include_fees:!0,fees:i?.fees,stark_signature:u,order_id:i?.order_id,fee_info:g.fee_info,amount_buy:g.amount_buy,amount_sell:g.amount_sell,asset_id_buy:g.asset_id_buy,asset_id_sell:g.asset_id_sell,expiration_timestamp:g.expiration_timestamp,nonce:g.nonce,stark_key:g.stark_key,vault_id_buy:g.vault_id_buy,vault_id_sell:g.vault_id_sell}},{data:h}=await e.createTradeV3(c,{headers:m});return h},PassportErrorType.CREATE_TRADE_ERROR)}var W="ERC721";async function X({request:i,transfersApi:e,starkSigner:r,user:t,guardianClient:a}){return withPassportError(async()=>{let n=i.type===W?"1":i.amount,o={sender:t.imx.ethAddress,token:convertToSignableToken(i),amount:n,receiver:i.receiver},m={Authorization:`Bearer ${t.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let d=p.data,{payload_hash:u}=d,g=await r.signMessage(u),c=await r.getAddress(),R={createTransferRequest:{sender_stark_key:d.sender_stark_key||c,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:g}},{data:C}=await e.createTransferV1(R,{headers:m});return {sent_signature:C.sent_signature,status:C.status?.toString(),time:C.time,transfer_id:C.transfer_id}},PassportErrorType.TRANSFER_ERROR)}async function K({user:i,starkSigner:e,request:r,transfersApi:t,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:n}=i.imx,o=r.map(c=>({amount:"1",token:convertToSignableToken({type:W,tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),m={Authorization:`Bearer ${i.accessToken}`},p=await t.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:o}},{headers:m});await a.evaluateTransaction(p.data.signable_responses[0]?.payload_hash);let d=await Promise.all(p.data.signable_responses.map(async c=>{let h=await e.signMessage(c.payload_hash);return {sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:h}})),u={sender_stark_key:p.data.sender_stark_key,requests:d};return {transfer_ids:(await t.createTransfer({createTransferRequestV2:u},{headers:m}))?.data.transfer_ids}},PassportErrorType.TRANSFER_ERROR)}var v=i=>{if(typeof i=="object"&&i!==null&&"response"in i){let{response:e}=i;if(e&&typeof e=="object")return e}},P=i=>v(i)?.status;async function q(i){await retryWithDelay(async()=>{let e=await i.forceUserRefresh();if(!e)return Promise.reject(new Error("user wallet addresses not exist"));try{return E(e),e}catch{return Promise.reject(new Error("user wallet addresses not exist"))}});}async function S(i,e,r,t,a){return withPassportError(async()=>{try{let n=await k({ethSigner:i,starkSigner:e,imxApiClients:a},r.accessToken);return await q(t),n}catch(n){if(P(n)===409)return await q(t),{tx_hash:""};throw n}},PassportErrorType.USER_REGISTRATION_ERROR)}var y=async(i,e,r=!0,t=!0)=>{let a=trackFlow("passport",e,r);try{return await i(a)}catch(n){throw n instanceof Error?trackError("passport",e,n,{flowId:a.details.flowId}):a.addEvent("errored"),n}finally{t&&a.addEvent("End");}};var x=class{auth;immutableXClient;guardianClient;imxApiClients;magicTEESigner;imxGuardianClient;starkSigner;signerInitialisationError;constructor({auth:e,immutableXClient:r,passportEventEmitter:t,magicTEESigner:a,imxApiClients:n,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=n,this.guardianClient=o,this.imxGuardianClient=m,this.#i(),t.on(AuthEvents.LOGGED_OUT,this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await O(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.auth.getUser();if(!e||!this.starkSigner)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);return e}async#t(){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#e(){let[e,r]=await Promise.all([this.#r(),this.#t()]);return {user:E(e),starkSigner:r}}async transfer(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return X({request:e,user:r,starkSigner:t,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxTransfer")}async registerOffchain(){return y(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await S(this.magicTEESigner,r,e,this.auth,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return y(async()=>{try{let e=await this.#r();return !!E(e).imx}catch(e){if(e instanceof PassportError&&e.type===PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw e}},"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async createOrder(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return M({request:e,user:r,starkSigner:t,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return N({request:e,user:r,starkSigner:t,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCancelOrder")}async createTrade(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:t}=await this.#e();return G({request:e,user:r,starkSigner:t,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.imxGuardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return y(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:t}=await this.#e();return K({request:e,user:r,starkSigner:t,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return y(async()=>{let{user:r,starkSigner:t}=await this.#e();return U({request:e,user:r,starkSigner:t,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}prepareWithdrawal(e){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}completeWithdrawal(e,r){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async getAddress(){return y(async()=>{let e=await this.#r(),r=E(e);return Promise.resolve(r.imx.ethAddress)},"imxGetAddress")}};var _=class{auth;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;imxGuardianClient;constructor({auth:e,immutableXClient:r,magicTEESigner:t,passportEventEmitter:a,imxApiClients:n,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=t,this.passportEventEmitter=a,this.imxApiClients=n,this.guardianClient=o,this.imxGuardianClient=m;}async getProvider(){let e=await this.auth.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.auth.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new PassportError("Failed to initialise",PassportErrorType.WALLET_CONNECTION_ERROR);return new x({auth:this.auth,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient,imxGuardianClient:this.imxGuardianClient})}};var z=(i,e,r)=>{let t=e.map(a=>!i[a]&&a).filter(a=>a).join(", ");if(t!==""){let a=r?`${r} - ${t} cannot be null`:`${t} cannot be null`;throw new PassportError(a,PassportErrorType.INVALID_CONFIGURATION)}},b=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:t,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:n,popupOverlayOptions:o,...m}){if(z(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=t||!1,this.forceScwDeployBeforeMessageSignature=n||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)z(r,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=r.authenticationDomain,this.passportDomain=r.passportDomain,this.imxPublicApiDomain=r.imxPublicApiDomain,this.magicPublishableApiKey=r.magicPublishableApiKey,this.magicProviderId=r.magicProviderId,this.zkEvmRpcUrl=r.zkEvmRpcUrl,this.relayerUrl=r.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:r.indexerMrBasePath}),orderBook:createConfig({basePath:r.orderBookMrBasePath}),passport:createConfig({basePath:r.passportMrBasePath})};else switch(e.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getProduction();break}case Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var me="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",T=class{auth;guardianApi;confirmationScreen;crossSdkBridgeEnabled;constructor({auth:e,guardianApi:r,confirmationScreen:t,crossSdkBridgeEnabled:a=!1}){this.auth=e,this.guardianApi=r,this.confirmationScreen=t,this.crossSdkBridgeEnabled=a;}async evaluateTransaction(e){let r=await this.auth.getUser();if(!r)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);let t=E(r),a={Authorization:`Bearer ${t.accessToken}`};try{if(!(await retryWithDelay(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:a}),{finallyFn:()=>{this.confirmationScreen.closeWindow();}})).data.id)throw new PassportError("Transaction does not exist",PassportErrorType.TRANSFER_ERROR);let m=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:a}),{confirmationRequired:p}=m.data;if(p){if(this.crossSdkBridgeEnabled)throw new PassportError(me,PassportErrorType.TRANSACTION_REJECTED);if(!(await this.confirmationScreen.requestConfirmation(e,t.imx.ethAddress,mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new PassportError("Transaction rejected by user",PassportErrorType.TRANSACTION_REJECTED)}else this.confirmationScreen.closeWindow();}catch(n){throw P(n)===403?new PassportError("Service unavailable",PassportErrorType.SERVICE_UNAVAILABLE_ERROR):n}}};var Te=i=>i.overrides?createConfig({basePath:i.overrides.imxPublicApiDomain}):i.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),ke=i=>{if(i.overrides?.imxApiClients)return i.overrides.imxApiClients;let e=Te(i);return new ImxApiClients(e)},ve=i=>{let e=new b(i),r=new Auth({...i,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled,popupOverlayOptions:i.popupOverlayOptions,passportDomain:e.passportDomain}),t=r.getConfig(),a=new ConfirmationScreen(t),n=new WalletConfiguration({passportDomain:e.passportDomain,zkEvmRpcUrl:e.zkEvmRpcUrl,relayerUrl:e.relayerUrl,indexerMrBasePath:e.multiRollupConfig.indexer.basePath||e.passportDomain,jsonRpcReferrer:i.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:i.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled}),o=new MultiRollupApiClients(e.multiRollupConfig),m=i.overrides?i.overrides.immutableXClient:new IMXClient({baseConfig:i.baseConfig}),p=new GuardianClient({config:n,getUser:R=>R?r.forceUserRefresh():r.getUser(),guardianApi:o.guardianApi,passportDomain:e.passportDomain,clientId:e.oidcConfiguration.clientId}),d=new T({auth:r,guardianApi:o.guardianApi,confirmationScreen:a,crossSdkBridgeEnabled:i.crossSdkBridgeEnabled||!1}),u=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),g=new MagicTEESigner(R=>R?r.forceUserRefresh():r.getUser(),u),c=ke(i),h=new _({auth:r,immutableXClient:m,magicTEESigner:g,passportEventEmitter:r.eventEmitter,imxApiClients:c,guardianClient:p,imxGuardianClient:d});return {passportConfig:e,auth:r,passportImxProviderFactory:h,environment:i.baseConfig.environment,walletConfig:n}},I=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=ve(e);this.auth=r.auth,this.passportImxProviderFactory=r.passportImxProviderFactory,this.passportConfig=r.passportConfig,this.multiRollupApiClients=new MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=r.environment,setPassportClientId(e.clientId);}async connectImxSilent(){return y(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return y(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return y(async()=>{let r=e?.chain??EvmChain.ZKEVM;if(r!==EvmChain.ZKEVM)throw new Error(`Chain ${r} is not yet supported. Only ZKEVM is currently available.`);let t=this.buildChainConfig(r),a=t.feeTokenSymbol??"IMX";return await connectWallet({getUser:o=>o?this.auth.forceUserRefresh():this.auth.getUserOrLogin(),clientId:this.passportConfig.oidcConfiguration.clientId,chains:[t],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,feeTokenSymbol:a,announceProvider:e?.announceProvider??!0})},"connectEvm",!1)}buildChainConfig(e){let r=this.passportConfig.overrides;if(e===EvmChain.ZKEVM)return r?.zkEvmChainId?{chainId:r.zkEvmChainId,name:r.zkEvmChainName||"Dev Chain",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:r.magicTeeBasePath||this.passportConfig.magicTeeBasePath}:this.environment===Environment.PRODUCTION?{chainId:13371,name:"Immutable zkEVM",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath}:{chainId:13473,name:"Immutable zkEVM Testnet",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath};let t=getChainConfig(e,this.environment);return r?{...t,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||t.apiUrl,passportDomain:this.passportConfig.passportDomain}:{...t,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||t.apiUrl,passportDomain:this.passportConfig.passportDomain}}async login(e){let r=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,t=await this.auth.login(r);return t?t.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return y(async()=>(await this.auth.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return (await this.auth.getUser())?.idToken}async getAccessToken(){return (await this.auth.getUser())?.accessToken}async loginWithPKCEFlow(e,r){return this.auth.loginWithPKCEFlow(e,r)}async loginWithPKCEFlowCallback(e,r){return (await this.auth.loginWithPKCEFlowCallback(e,r)).profile}async storeTokens(e){return (await this.auth.storeTokens(e)).profile}async getLogoutUrl(){return await this.auth.getLogoutUrl()}async logoutSilentCallback(e){return this.auth.logoutSilentCallback(e)}async getLinkedAddresses(){return y(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=a=>typeof a=="object"&&a!==null&&"code"in a&&"message"in a,t=trackFlow("passport","linkExternalWallet",!1);try{let a=await this.auth.getUser();if(!a)throw new PassportError("User is not logged in",PassportErrorType.NOT_LOGGED_IN_ERROR);let n=isUserZkEvm(a);if(!(()=>{try{return E(a),!0}catch(u){if(u instanceof PassportError&&u.type===PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw u}})()&&!n)throw new PassportError("User has not been registered",PassportErrorType.USER_NOT_REGISTERED_ERROR);let m={Authorization:`Bearer ${a.accessToken}`},p={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:p},{headers:m})).data}}catch(a){if(a instanceof Error?trackError("passport","linkExternalWallet",a):t.addEvent("errored"),a instanceof PassportError)throw a;let n=v(a);if(n){if(n.data&&r(n.data)){let{code:m,message:p}=n.data;switch(m){case"ALREADY_LINKED":throw new PassportError(p,PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new PassportError(p,PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new PassportError(p,PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new PassportError(p,PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new PassportError(p,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}}else if(n.status)throw new PassportError(`Link wallet request failed with status code ${n.status}`,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}let o="Link wallet request failed";throw a instanceof Error&&(o+=`: ${a.message}`),new PassportError(o,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{t.addEvent("End");}}};var Z=(t=>(t.OptedIn="opted_in",t.Unsubscribed="unsubscribed",t.Subscribed="subscribed",t))(Z||{});
11
+ var R=t=>{if(!t.idToken)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);let r=decodeJwtPayload(t.idToken).passport;if(!r?.imx_eth_address||!r?.imx_stark_address||!r?.imx_user_admin_address)throw new PassportError("User has not been registered with StarkEx",PassportErrorType.USER_NOT_REGISTERED_ERROR);return {...t,imx:{ethAddress:r.imx_eth_address,starkAddress:r.imx_stark_address,userAdminAddress:r.imx_user_admin_address}}};var I=async t=>withPassportError(async()=>{let e=await generateLegacyStarkPrivateKey(t);return createStarkSigner(e)},PassportErrorType.WALLET_CONNECTION_ERROR);async function O({user:t,starkSigner:e,request:r,exchangesApi:i}){return withPassportError(async()=>{let{ethAddress:a}=t.imx,s=r.amount,o=await i.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:s,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=o.data,d=await e.signMessage(p),u={sender_stark_key:o.data.sender_stark_key||m,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:d},g={Authorization:`Bearer ${t.accessToken}`},c=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:u},{headers:g});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}},PassportErrorType.EXCHANGE_TRANSFER_ERROR)}var D="ERC721";async function L({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:s}=e.imx,o=r.sell.type===D?"1":r.sell.amount,m=r.buy.type===D?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},d={user:s,amount_buy:m,token_buy:convertToSignableToken(r.buy),amount_sell:o,token_sell:convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},u=await i.getSignableOrder({getSignableOrderRequestV3:d},{headers:p});await a.evaluateTransaction(u.data.payload_hash);let{payload_hash:g}=u.data,c=await t.signMessage(g),h=u.data,E={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:c,amount_buy:h.amount_buy,amount_sell:h.amount_sell,asset_id_buy:h.asset_id_buy,asset_id_sell:h.asset_id_sell,expiration_timestamp:h.expiration_timestamp,nonce:h.nonce,stark_key:h.stark_key,vault_id_buy:h.vault_id_buy,vault_id_sell:h.vault_id_sell}};return {...(await i.createOrderV3(E,{headers:p})).data}},PassportErrorType.CREATE_ORDER_ERROR)}async function M({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return withPassportError(async()=>{let s={order_id:r.order_id},o={Authorization:`Bearer ${t.accessToken}`},m=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:s},{headers:o});await a.evaluateTransaction(m.data.payload_hash);let{payload_hash:p}=m.data,d=await e.signMessage(p),u=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:d}},{headers:o});return {order_id:u.data.order_id,status:u.data.status}},PassportErrorType.CANCEL_ORDER_ERROR)}async function k({ethSigner:t,starkSigner:e,imxApiClients:r},i){return withPassportError(async()=>{let[a,s]=await Promise.all([t.getAddress(),e.getAddress()]),o=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:s}}),{signable_message:m,payload_hash:p}=o.data,[d,u]=await Promise.all([signRaw(m,t),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:d,ether_key:a,stark_signature:u,stark_key:s}})).data},PassportErrorType.USER_REGISTRATION_ERROR)}async function N({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:s}=r.imx,o={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:s},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let{payload_hash:d}=p.data,u=await i.signMessage(d),{data:g}=p,c={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:u,order_id:t?.order_id,fee_info:g.fee_info,amount_buy:g.amount_buy,amount_sell:g.amount_sell,asset_id_buy:g.asset_id_buy,asset_id_sell:g.asset_id_sell,expiration_timestamp:g.expiration_timestamp,nonce:g.nonce,stark_key:g.stark_key,vault_id_buy:g.vault_id_buy,vault_id_sell:g.vault_id_sell}},{data:h}=await e.createTradeV3(c,{headers:m});return h},PassportErrorType.CREATE_TRADE_ERROR)}var B="ERC721";async function W({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return withPassportError(async()=>{let s=t.type===B?"1":t.amount,o={sender:i.imx.ethAddress,token:convertToSignableToken(t),amount:s,receiver:t.receiver},m={Authorization:`Bearer ${i.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:m});await a.evaluateTransaction(p.data.payload_hash);let d=p.data,{payload_hash:u}=d,g=await r.signMessage(u),c=await r.getAddress(),E={createTransferRequest:{sender_stark_key:d.sender_stark_key||c,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:g}},{data:P}=await e.createTransferV1(E,{headers:m});return {sent_signature:P.sent_signature,status:P.status?.toString(),time:P.time,transfer_id:P.transfer_id}},PassportErrorType.TRANSFER_ERROR)}async function X({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return withPassportError(async()=>{let{ethAddress:s}=t.imx,o=r.map(c=>({amount:"1",token:convertToSignableToken({type:B,tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),m={Authorization:`Bearer ${t.accessToken}`},p=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:s,signable_requests:o}},{headers:m});await a.evaluateTransaction(p.data.signable_responses[0]?.payload_hash);let d=await Promise.all(p.data.signable_responses.map(async c=>{let h=await e.signMessage(c.payload_hash);return {sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:h}})),u={sender_stark_key:p.data.sender_stark_key,requests:d};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:u},{headers:m}))?.data.transfer_ids}},PassportErrorType.TRANSFER_ERROR)}var v=t=>{if(typeof t=="object"&&t!==null&&"response"in t){let{response:e}=t;if(e&&typeof e=="object")return e}},x=t=>v(t)?.status;async function q(t){await retryWithDelay(async()=>{let e=await t.forceUserRefresh();if(!e)return Promise.reject(new Error("user wallet addresses not exist"));try{return R(e),e}catch{return Promise.reject(new Error("user wallet addresses not exist"))}});}async function S(t,e,r,i,a){return withPassportError(async()=>{try{let s=await k({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await q(i),s}catch(s){if(x(s)===409)return await q(i),{tx_hash:""};throw s}},PassportErrorType.USER_REGISTRATION_ERROR)}var y=async(t,e,r=!0,i=!0)=>{let a=trackFlow("passport",e,r);try{return await t(a)}catch(s){throw s instanceof Error?trackError("passport",e,s,{flowId:a.details.flowId}):a.addEvent("errored"),s}finally{i&&a.addEvent("End");}};var C=class{auth;immutableXClient;guardianClient;imxApiClients;magicTEESigner;imxGuardianClient;starkSigner;signerInitialisationError;constructor({auth:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:s,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=s,this.guardianClient=o,this.imxGuardianClient=m,this.#i(),i.on(AuthEvents.LOGGED_OUT,this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await I(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.auth.getUser();if(!e||!this.starkSigner)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);return e}async#t(){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#e(){let[e,r]=await Promise.all([this.#r(),this.#t()]);return {user:R(e),starkSigner:r}}async transfer(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return W({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxTransfer")}async registerOffchain(){return y(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await S(this.magicTEESigner,r,e,this.auth,this.imxApiClients)},"imxRegisterOffchain")}async isRegisteredOffchain(){return y(async()=>{try{let e=await this.#r();return !!R(e).imx}catch(e){if(e instanceof PassportError&&e.type===PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw e}},"imxIsRegisteredOffchain")}isRegisteredOnchain(){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async createOrder(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return L({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCreateOrder")}async cancelOrder(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return M({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.imxGuardianClient})})(),"imxCancelOrder")}async createTrade(e){return y(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return N({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.imxGuardianClient})})(),"imxCreateTrade")}async batchNftTransfer(e){return y(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:i}=await this.#e();return X({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.imxGuardianClient})})(),"imxBatchNftTransfer")}async exchangeTransfer(e){return y(async()=>{let{user:r,starkSigner:i}=await this.#e();return O({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})},"imxExchangeTransfer")}deposit(e){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}prepareWithdrawal(e){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}completeWithdrawal(e,r){throw new PassportError("Operation not supported",PassportErrorType.OPERATION_NOT_SUPPORTED_ERROR)}async getAddress(){return y(async()=>{let e=await this.#r(),r=R(e);return Promise.resolve(r.imx.ethAddress)},"imxGetAddress")}};var _=class{auth;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;imxGuardianClient;constructor({auth:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:s,guardianClient:o,imxGuardianClient:m}){this.auth=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=s,this.guardianClient=o,this.imxGuardianClient=m;}async getProvider(){let e=await this.auth.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.auth.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new PassportError("Failed to initialise",PassportErrorType.WALLET_CONNECTION_ERROR);return new C({auth:this.auth,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient,imxGuardianClient:this.imxGuardianClient})}};var V=(t,e,r)=>{let i=e.map(a=>!t[a]&&a).filter(a=>a).join(", ");if(i!==""){let a=r?`${r} - ${i} cannot be null`:`${i} cannot be null`;throw new PassportError(a,PassportErrorType.INVALID_CONFIGURATION)}},b=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:i,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:s,popupOverlayOptions:o,...m}){if(V(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=s||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)V(r,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=r.authenticationDomain,this.passportDomain=r.passportDomain,this.imxPublicApiDomain=r.imxPublicApiDomain,this.magicPublishableApiKey=r.magicPublishableApiKey,this.magicProviderId=r.magicProviderId,this.zkEvmRpcUrl=r.zkEvmRpcUrl,this.relayerUrl=r.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:r.indexerMrBasePath}),orderBook:createConfig({basePath:r.orderBookMrBasePath}),passport:createConfig({basePath:r.passportMrBasePath})};else switch(e.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="https://rpc.immutable.com",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getProduction();break}case Environment.SANDBOX:default:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var le="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",T=class{auth;guardianApi;confirmationScreen;crossSdkBridgeEnabled;constructor({auth:e,guardianApi:r,confirmationScreen:i,crossSdkBridgeEnabled:a=!1}){this.auth=e,this.guardianApi=r,this.confirmationScreen=i,this.crossSdkBridgeEnabled=a;}async evaluateTransaction(e){let r=await this.auth.getUser();if(!r)throw new PassportError("User has been logged out",PassportErrorType.NOT_LOGGED_IN_ERROR);let i=R(r),a={Authorization:`Bearer ${i.accessToken}`};try{if(!(await retryWithDelay(async()=>this.guardianApi.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:a}),{finallyFn:()=>{this.confirmationScreen.closeWindow();}})).data.id)throw new PassportError("Transaction does not exist",PassportErrorType.TRANSFER_ERROR);let m=await this.guardianApi.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:a}),{confirmationRequired:p}=m.data;if(p){if(this.crossSdkBridgeEnabled)throw new PassportError(le,PassportErrorType.TRANSACTION_REJECTED);if(!(await this.confirmationScreen.requestConfirmation(e,i.imx.ethAddress,mr.TransactionApprovalRequestChainTypeEnum.Starkex)).confirmed)throw new PassportError("Transaction rejected by user",PassportErrorType.TRANSACTION_REJECTED)}else this.confirmationScreen.closeWindow();}catch(s){throw x(s)===403?new PassportError("Service unavailable",PassportErrorType.SERVICE_UNAVAILABLE_ERROR):s}}};var _e=t=>t.overrides?createConfig({basePath:t.overrides.imxPublicApiDomain}):t.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),be=t=>{if(t.overrides?.imxApiClients)return t.overrides.imxApiClients;let e=_e(t);return new ImxApiClients(e)},Te=t=>{let e=new b(t),r=new Auth({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=r.getConfig(),a=new ConfirmationScreen(i),s=new WalletConfiguration({passportDomain:e.passportDomain,zkEvmRpcUrl:e.zkEvmRpcUrl,relayerUrl:e.relayerUrl,indexerMrBasePath:e.multiRollupConfig.indexer.basePath||e.passportDomain,jsonRpcReferrer:t.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:t.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled}),o=new MultiRollupApiClients(e.multiRollupConfig),m=t.overrides?t.overrides.immutableXClient:new IMXClient({baseConfig:t.baseConfig}),p=new GuardianClient({config:s,getUser:E=>E?r.forceUserRefresh():r.getUser(),guardianApi:o.guardianApi,passportDomain:e.passportDomain,clientId:e.oidcConfiguration.clientId}),d=new T({auth:r,guardianApi:o.guardianApi,confirmationScreen:a,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled||!1}),u=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),g=new MagicTEESigner(E=>E?r.forceUserRefresh():r.getUser(),u),c=be(t),h=new _({auth:r,immutableXClient:m,magicTEESigner:g,passportEventEmitter:r.eventEmitter,imxApiClients:c,guardianClient:p,imxGuardianClient:d});return {passportConfig:e,auth:r,passportImxProviderFactory:h,environment:t.baseConfig.environment,walletConfig:s}},w=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=Te(e);this.auth=r.auth,this.passportImxProviderFactory=r.passportImxProviderFactory,this.passportConfig=r.passportConfig,this.multiRollupApiClients=new MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=r.environment,setPassportClientId(e.clientId);}async connectImxSilent(){return y(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return y(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return y(async()=>{let r=this.passportConfig.overrides,i;return r?.zkEvmChainId?i={chainId:r.zkEvmChainId,name:r.zkEvmChainName||"Dev Chain",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:r.magicTeeBasePath||this.passportConfig.magicTeeBasePath}:this.environment===Environment.PRODUCTION?i={chainId:13371,name:"Immutable zkEVM",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath}:i={chainId:13473,name:"Immutable zkEVM Testnet",rpcUrl:this.passportConfig.zkEvmRpcUrl,relayerUrl:this.passportConfig.relayerUrl,apiUrl:this.passportConfig.multiRollupConfig.indexer.basePath||this.passportConfig.passportDomain,passportDomain:this.passportConfig.passportDomain,magicPublishableApiKey:this.passportConfig.magicPublishableApiKey,magicProviderId:this.passportConfig.magicProviderId,magicTeeBasePath:this.passportConfig.magicTeeBasePath},await connectWallet({getUser:s=>s?this.auth.forceUserRefresh():this.auth.getUserOrLogin(),clientId:this.passportConfig.oidcConfiguration.clientId,chains:[i],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,feeTokenSymbol:"IMX",announceProvider:e?.announceProvider??!0})},"connectEvm",!1)}async login(e){let r=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,i=await this.auth.login(r);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return y(async()=>(await this.auth.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return (await this.auth.getUser())?.idToken}async getAccessToken(){return (await this.auth.getUser())?.accessToken}async loginWithPKCEFlow(e,r){return this.auth.loginWithPKCEFlow(e,r)}async loginWithPKCEFlowCallback(e,r){return (await this.auth.loginWithPKCEFlowCallback(e,r)).profile}async storeTokens(e){return (await this.auth.storeTokens(e)).profile}async getLogoutUrl(){return await this.auth.getLogoutUrl()}async logoutSilentCallback(e){return this.auth.logoutSilentCallback(e)}async getLinkedAddresses(){return y(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=a=>typeof a=="object"&&a!==null&&"code"in a&&"message"in a,i=trackFlow("passport","linkExternalWallet",!1);try{let a=await this.auth.getUser();if(!a)throw new PassportError("User is not logged in",PassportErrorType.NOT_LOGGED_IN_ERROR);let s=isUserZkEvm(a);if(!(()=>{try{return R(a),!0}catch(u){if(u instanceof PassportError&&u.type===PassportErrorType.USER_NOT_REGISTERED_ERROR)return !1;throw u}})()&&!s)throw new PassportError("User has not been registered",PassportErrorType.USER_NOT_REGISTERED_ERROR);let m={Authorization:`Bearer ${a.accessToken}`},p={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:p},{headers:m})).data}}catch(a){if(a instanceof Error?trackError("passport","linkExternalWallet",a):i.addEvent("errored"),a instanceof PassportError)throw a;let s=v(a);if(s){if(s.data&&r(s.data)){let{code:m,message:p}=s.data;switch(m){case"ALREADY_LINKED":throw new PassportError(p,PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new PassportError(p,PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new PassportError(p,PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new PassportError(p,PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new PassportError(p,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}}else if(s.status)throw new PassportError(`Link wallet request failed with status code ${s.status}`,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}let o="Link wallet request failed";throw a instanceof Error&&(o+=`: ${a.message}`),new PassportError(o,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{i.addEvent("End");}}};var $=(i=>(i.OptedIn="opted_in",i.Unsubscribed="unsubscribed",i.Subscribed="subscribed",i))($||{});
12
12
 
13
- export { Z as MarketingConsentStatus, I as Passport };
13
+ export { $ as MarketingConsentStatus, w as Passport };
@@ -2,8 +2,8 @@ import { IMXProvider } from '@imtbl/x-provider';
2
2
  import { Environment } from '@imtbl/config';
3
3
  import { Auth, UserProfile, DeviceTokenResponse } from '@imtbl/auth';
4
4
  import type { DirectLoginOptions } from '@imtbl/auth';
5
- import { WalletConfiguration } from '@imtbl/wallet';
6
- import type { Provider, LinkWalletParams, LinkedWallet } from '@imtbl/wallet';
5
+ import { ZkEvmProvider, WalletConfiguration } from '@imtbl/wallet';
6
+ import type { LinkWalletParams, LinkedWallet } from '@imtbl/wallet';
7
7
  import { PassportModuleConfiguration, ConnectEvmArguments, LoginArguments } from './types';
8
8
  import { PassportImxProviderFactory } from './starkEx';
9
9
  import { PassportConfiguration } from './config';
@@ -37,15 +37,9 @@ export declare class Passport {
37
37
  * Uses: Auth + Wallet packages
38
38
  * @param {Object} options - Configuration options
39
39
  * @param {boolean} options.announceProvider - Whether to announce the provider via EIP-6963 for wallet discovery (defaults to true)
40
- * @param {EvmChain} options.chain - The EVM chain to connect to (defaults to ZKEVM)
41
40
  * @returns {Promise<Provider>} The EVM provider instance
42
41
  */
43
- connectEvm(options?: ConnectEvmArguments): Promise<Provider>;
44
- /**
45
- * Build chain configuration based on selected chain and environment
46
- * @internal
47
- */
48
- private buildChainConfig;
42
+ connectEvm(options?: ConnectEvmArguments): Promise<ZkEvmProvider>;
49
43
  /**
50
44
  * Logs in the user (works for both zkEVM and IMX).
51
45
  * Uses: Auth class
@@ -4,4 +4,4 @@ export { ProviderEvent, JsonRpcError, ProviderErrorCode, RpcErrorCode, } from '@
4
4
  export type { RequestArguments, Provider, AccountsChangedEvent, TypedDataPayload, EIP6963ProviderInfo, EIP6963ProviderDetail, } from '@imtbl/wallet';
5
5
  export type { User, } from '@imtbl/auth';
6
6
  export type { LinkWalletParams, LinkedWallet, ConnectEvmArguments, LoginArguments, UserProfile, PassportOverrides, PassportModuleConfiguration, DeviceTokenResponse, DirectLoginOptions, DirectLoginMethod, ZkEvmProvider, } from './types';
7
- export { MarketingConsentStatus, EvmChain, } from './types';
7
+ export { MarketingConsentStatus, } from './types';
@@ -2,7 +2,6 @@ import { Environment, ModuleConfiguration } from '@imtbl/config';
2
2
  import { IMXClient } from '@imtbl/x-client';
3
3
  import { ImxApiClients } from '@imtbl/generated-clients';
4
4
  import { Flow } from '@imtbl/metrics';
5
- import { EvmChain } from '@imtbl/wallet';
6
5
  /**
7
6
  * Direct login method identifier
8
7
  * Known providers: 'google', 'apple', 'facebook'
@@ -11,7 +10,6 @@ import { EvmChain } from '@imtbl/wallet';
11
10
  export type DirectLoginMethod = string;
12
11
  export { AuthEvents } from '@imtbl/auth';
13
12
  export { WalletEvents } from '@imtbl/wallet';
14
- export { EvmChain };
15
13
  export type AccountsRequestedEvent = {
16
14
  environment: Environment;
17
15
  sendTransaction: (params: Array<any>, flow: Flow) => Promise<string>;
@@ -98,11 +96,6 @@ export type PKCEData = {
98
96
  export type { LinkWalletParams, LinkedWallet } from '@imtbl/wallet';
99
97
  export type ConnectEvmArguments = {
100
98
  announceProvider: boolean;
101
- /**
102
- * The EVM chain to connect to (defaults to ZKEVM)
103
- * @default EvmChain.ZKEVM
104
- */
105
- chain?: EvmChain;
106
99
  };
107
100
  export type { ZkEvmProvider } from '@imtbl/wallet';
108
101
  export type LoginArguments = {
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.12.7-alpha.0",
4
+ "version": "2.12.7-alpha.10",
5
5
  "author": "Immutable",
6
6
  "bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
7
7
  "dependencies": {
8
- "@imtbl/auth": "2.12.7-alpha.0",
9
- "@imtbl/wallet": "2.12.7-alpha.0",
10
- "@imtbl/config": "2.12.7-alpha.0",
11
- "@imtbl/generated-clients": "2.12.7-alpha.0",
12
- "@imtbl/metrics": "2.12.7-alpha.0",
13
- "@imtbl/toolkit": "2.12.7-alpha.0",
14
- "@imtbl/x-client": "2.12.7-alpha.0",
15
- "@imtbl/x-provider": "2.12.7-alpha.0",
8
+ "@imtbl/auth": "2.12.7-alpha.10",
9
+ "@imtbl/wallet": "2.12.7-alpha.10",
10
+ "@imtbl/config": "2.12.7-alpha.10",
11
+ "@imtbl/generated-clients": "2.12.7-alpha.10",
12
+ "@imtbl/metrics": "2.12.7-alpha.10",
13
+ "@imtbl/toolkit": "2.12.7-alpha.10",
14
+ "@imtbl/x-client": "2.12.7-alpha.10",
15
+ "@imtbl/x-provider": "2.12.7-alpha.10",
16
16
  "ethers": "^6.13.4",
17
17
  "localforage": "^1.10.0",
18
18
  "oidc-client-ts": "3.4.1"