@imtbl/passport 2.15.0-alpha.0 → 2.15.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +7 -5
- package/dist/node/index.cjs +5 -3
- package/dist/node/index.js +7 -5
- package/dist/types/Passport.d.ts +25 -4
- package/dist/types/config/config.d.ts +1 -0
- package/dist/types/errors/passportError.d.ts +1 -1
- package/dist/types/starkEx/getStarkSigner.d.ts +7 -0
- package/dist/types/starkEx/getStarkSigner.test.d.ts +1 -0
- package/dist/types/starkEx/imxGuardianClient.d.ts +18 -0
- package/dist/types/starkEx/index.d.ts +4 -0
- package/dist/types/starkEx/passportImxProvider.d.ts +48 -0
- package/dist/types/starkEx/passportImxProvider.test.d.ts +1 -0
- package/dist/types/starkEx/passportImxProviderFactory.d.ts +28 -0
- package/dist/types/starkEx/workflows/exchange.d.ts +11 -0
- package/dist/types/starkEx/workflows/index.d.ts +5 -0
- package/dist/types/starkEx/workflows/order.d.ts +21 -0
- package/dist/types/starkEx/workflows/registerOffchain.d.ts +4 -0
- package/dist/types/starkEx/workflows/registration.d.ts +8 -0
- package/dist/types/starkEx/workflows/registration.test.d.ts +1 -0
- package/dist/types/starkEx/workflows/trades.d.ts +13 -0
- package/dist/types/starkEx/workflows/transfer.d.ts +21 -0
- package/dist/types/types.d.ts +8 -0
- package/dist/types/utils/imxUser.d.ts +9 -0
- package/package.json +9 -7
package/dist/browser/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { PassportError, PassportErrorType, isUserZkEvm, Auth } from '@imtbl/auth';
|
|
1
|
+
import { PassportError, PassportErrorType, isUserZkEvm, decodeJwtPayload, Auth, AuthEvents, withPassportError } from '@imtbl/auth';
|
|
2
2
|
export { PassportError } from '@imtbl/auth';
|
|
3
|
-
import { MultiRollupApiClients, createConfig, multiRollupConfig } from '@imtbl/generated-clients';
|
|
3
|
+
import { MultiRollupApiClients, MagicTeeApiClients, createConfig, multiRollupConfig, mr, ImxApiClients, imxApiConfig } from '@imtbl/generated-clients';
|
|
4
|
+
import { IMXClient, generateLegacyStarkPrivateKey, createStarkSigner } from '@imtbl/x-client';
|
|
4
5
|
import { Environment } from '@imtbl/config';
|
|
5
6
|
import { setPassportClientId, trackFlow, trackError } from '@imtbl/metrics';
|
|
6
|
-
import { connectWallet } from '@imtbl/wallet';
|
|
7
|
+
import { ConfirmationScreen, WalletConfiguration, GuardianClient, MagicTEESigner, connectWallet, retryWithDelay } from '@imtbl/wallet';
|
|
7
8
|
export { JsonRpcError, ProviderErrorCode, ProviderEvent, RpcErrorCode } from '@imtbl/wallet';
|
|
9
|
+
import { convertToSignableToken, signRaw } from '@imtbl/toolkit';
|
|
8
10
|
|
|
9
|
-
var b=(o,e,t)=>{let i=e.map(r=>!o[r]&&r).filter(r=>r).join(", ");if(i!==""){let r=t?`${t} - ${i} cannot be null`:`${i} cannot be null`;throw new PassportError(r,PassportErrorType.INVALID_CONFIGURATION)}},d=class{authenticationDomain;passportDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:i,jsonRpcReferrer:r,forceScwDeployBeforeMessageSignature:s,popupOverlayOptions:l,...u}){if(b(u,["clientId","redirectUri"]),this.oidcConfiguration=u,this.baseConfig=e,this.overrides=t,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=s||!1,this.jsonRpcReferrer=r,this.popupOverlayOptions=l||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},t)b(t,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=t.authenticationDomain,this.passportDomain=t.passportDomain,this.magicPublishableApiKey=t.magicPublishableApiKey,this.magicProviderId=t.magicProviderId,this.zkEvmRpcUrl=t.zkEvmRpcUrl,this.relayerUrl=t.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:t.indexerMrBasePath}),orderBook:createConfig({basePath:t.orderBookMrBasePath}),passport:createConfig({basePath:t.passportMrBasePath})};else switch(e.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.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.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var g=async(o,e,t=!0,i=!0)=>{let r=trackFlow("passport",e,t);try{return await o(r)}catch(s){throw s instanceof Error?trackError("passport",e,s,{flowId:r.details.flowId}):r.addEvent("errored"),s}finally{i&&r.addEvent("End");}};var y=o=>{if(typeof o=="object"&&o!==null&&"response"in o){let{response:e}=o;if(e&&typeof e=="object")return e}};var T=o=>{let e=new d(o),t=new Auth({...o,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:o.crossSdkBridgeEnabled,popupOverlayOptions:o.popupOverlayOptions,passportDomain:e.passportDomain});return {passportConfig:e,auth:t,environment:o.baseConfig.environment}},f=class{auth;multiRollupApiClients;environment;passportConfig;constructor(e){let t=T(e);this.auth=t.auth,this.passportConfig=t.passportConfig,this.multiRollupApiClients=new MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=t.environment,setPassportClientId(e.clientId);}async connectEvm(e={announceProvider:!0}){return g(async()=>{let t=this.passportConfig.overrides,i;return t?.zkEvmChainId?i={chainId:t.zkEvmChainId,name:t.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:t.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,l)=>s?this.auth.forceUserRefresh():l?.silent?this.auth.getUser():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 t=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,i=await this.auth.login(t);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return g(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,t){return this.auth.loginWithPKCEFlow(e,t)}async loginWithPKCEFlowCallback(e,t){return (await this.auth.loginWithPKCEFlowCallback(e,t)).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 g(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let t={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:t})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let t=r=>typeof r=="object"&&r!==null&&"code"in r&&"message"in r,i=trackFlow("passport","linkExternalWallet",!1);try{let r=await this.auth.getUser();if(!r)throw new PassportError("User is not logged in",PassportErrorType.NOT_LOGGED_IN_ERROR);if(!isUserZkEvm(r))throw new PassportError("User has not been registered",PassportErrorType.USER_NOT_REGISTERED_ERROR);let s={Authorization:`Bearer ${r.accessToken}`},l={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:l},{headers:s})).data}}catch(r){if(r instanceof Error?trackError("passport","linkExternalWallet",r):i.addEvent("errored"),r instanceof PassportError)throw r;let s=y(r);if(s){if(s.data&&t(s.data)){let{code:u,message:m}=s.data;switch(u){case"ALREADY_LINKED":throw new PassportError(m,PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new PassportError(m,PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new PassportError(m,PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new PassportError(m,PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new PassportError(m,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 l="Link wallet request failed";throw r instanceof Error&&(l+=`: ${r.message}`),new PassportError(l,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{i.addEvent("End");}}};var C=(i=>(i.OptedIn="opted_in",i.Unsubscribed="unsubscribed",i.Subscribed="subscribed",i))(C||{});
|
|
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,o)=>s?this.auth.forceUserRefresh():o?.silent?this.auth.getUser():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||{});
|
|
10
12
|
|
|
11
|
-
export {
|
|
13
|
+
export { J as MarketingConsentStatus, O as Passport };
|
package/dist/node/index.cjs
CHANGED
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var auth = require('@imtbl/auth');
|
|
4
4
|
var generatedClients = require('@imtbl/generated-clients');
|
|
5
|
+
var xClient = require('@imtbl/x-client');
|
|
5
6
|
var config = require('@imtbl/config');
|
|
6
7
|
var metrics = require('@imtbl/metrics');
|
|
7
8
|
var wallet = require('@imtbl/wallet');
|
|
9
|
+
var toolkit = require('@imtbl/toolkit');
|
|
8
10
|
|
|
9
|
-
var P=(o,e,t)=>{let i=e.map(r=>!o[r]&&r).filter(r=>r).join(", ");if(i!==""){let r=t?`${t} - ${i} cannot be null`:`${i} cannot be null`;throw new auth.PassportError(r,auth.PassportErrorType.INVALID_CONFIGURATION)}},u=class{authenticationDomain;passportDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:i,jsonRpcReferrer:r,forceScwDeployBeforeMessageSignature:s,popupOverlayOptions:l,...p}){if(P(p,["clientId","redirectUri"]),this.oidcConfiguration=p,this.baseConfig=e,this.overrides=t,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=s||!1,this.jsonRpcReferrer=r,this.popupOverlayOptions=l||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},t)P(t,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=t.authenticationDomain,this.passportDomain=t.passportDomain,this.magicPublishableApiKey=t.magicPublishableApiKey,this.magicProviderId=t.magicProviderId,this.zkEvmRpcUrl=t.zkEvmRpcUrl,this.relayerUrl=t.relayerUrl,this.multiRollupConfig={indexer:generatedClients.createConfig({basePath:t.indexerMrBasePath}),orderBook:generatedClients.createConfig({basePath:t.orderBookMrBasePath}),passport:generatedClients.createConfig({basePath:t.passportMrBasePath})};else switch(e.environment){case config.Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.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.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=generatedClients.multiRollupConfig.getSandbox();break}}}};var m=async(o,e,t=!0,i=!0)=>{let r=metrics.trackFlow("passport",e,t);try{return await o(r)}catch(s){throw s instanceof Error?metrics.trackError("passport",e,s,{flowId:r.details.flowId}):r.addEvent("errored"),s}finally{i&&r.addEvent("End");}};var E=o=>{if(typeof o=="object"&&o!==null&&"response"in o){let{response:e}=o;if(e&&typeof e=="object")return e}};var U=o=>{let e=new u(o),t=new auth.Auth({...o,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:o.crossSdkBridgeEnabled,popupOverlayOptions:o.popupOverlayOptions,passportDomain:e.passportDomain});return {passportConfig:e,auth:t,environment:o.baseConfig.environment}},g=class{auth;multiRollupApiClients;environment;passportConfig;constructor(e){let t=U(e);this.auth=t.auth,this.passportConfig=t.passportConfig,this.multiRollupApiClients=new generatedClients.MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=t.environment,metrics.setPassportClientId(e.clientId);}async connectEvm(e={announceProvider:!0}){return m(async()=>{let t=this.passportConfig.overrides,i;return t?.zkEvmChainId?i={chainId:t.zkEvmChainId,name:t.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:t.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,l)=>s?this.auth.forceUserRefresh():l?.silent?this.auth.getUser():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 t=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,i=await this.auth.login(t);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return m(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,t){return this.auth.loginWithPKCEFlow(e,t)}async loginWithPKCEFlowCallback(e,t){return (await this.auth.loginWithPKCEFlowCallback(e,t)).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 m(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let t={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:t})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let t=r=>typeof r=="object"&&r!==null&&"code"in r&&"message"in r,i=metrics.trackFlow("passport","linkExternalWallet",!1);try{let r=await this.auth.getUser();if(!r)throw new auth.PassportError("User is not logged in",auth.PassportErrorType.NOT_LOGGED_IN_ERROR);if(!auth.isUserZkEvm(r))throw new auth.PassportError("User has not been registered",auth.PassportErrorType.USER_NOT_REGISTERED_ERROR);let s={Authorization:`Bearer ${r.accessToken}`},l={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:l},{headers:s})).data}}catch(r){if(r instanceof Error?metrics.trackError("passport","linkExternalWallet",r):i.addEvent("errored"),r instanceof auth.PassportError)throw r;let s=E(r);if(s){if(s.data&&t(s.data)){let{code:p,message:c}=s.data;switch(p){case"ALREADY_LINKED":throw new auth.PassportError(c,auth.PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new auth.PassportError(c,auth.PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new auth.PassportError(c,auth.PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new auth.PassportError(c,auth.PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new auth.PassportError(c,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 l="Link wallet request failed";throw r instanceof Error&&(l+=`: ${r.message}`),new auth.PassportError(l,auth.PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{i.addEvent("End");}}};var b=(i=>(i.OptedIn="opted_in",i.Unsubscribed="unsubscribed",i.Subscribed="subscribed",i))(b||{});
|
|
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,o)=>s?this.auth.forceUserRefresh():o?.silent?this.auth.getUser():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))($||{});
|
|
10
12
|
|
|
11
13
|
Object.defineProperty(exports, "PassportError", {
|
|
12
14
|
enumerable: true,
|
|
@@ -28,5 +30,5 @@ Object.defineProperty(exports, "RpcErrorCode", {
|
|
|
28
30
|
enumerable: true,
|
|
29
31
|
get: function () { return wallet.RpcErrorCode; }
|
|
30
32
|
});
|
|
31
|
-
exports.MarketingConsentStatus =
|
|
32
|
-
exports.Passport =
|
|
33
|
+
exports.MarketingConsentStatus = $;
|
|
34
|
+
exports.Passport = w;
|
package/dist/node/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { PassportError, PassportErrorType, isUserZkEvm, Auth } from '@imtbl/auth';
|
|
1
|
+
import { PassportError, PassportErrorType, isUserZkEvm, decodeJwtPayload, Auth, AuthEvents, withPassportError } from '@imtbl/auth';
|
|
2
2
|
export { PassportError } from '@imtbl/auth';
|
|
3
|
-
import { MultiRollupApiClients, createConfig, multiRollupConfig } from '@imtbl/generated-clients';
|
|
3
|
+
import { MultiRollupApiClients, MagicTeeApiClients, createConfig, multiRollupConfig, mr, ImxApiClients, imxApiConfig } from '@imtbl/generated-clients';
|
|
4
|
+
import { IMXClient, generateLegacyStarkPrivateKey, createStarkSigner } from '@imtbl/x-client';
|
|
4
5
|
import { Environment } from '@imtbl/config';
|
|
5
6
|
import { setPassportClientId, trackFlow, trackError } from '@imtbl/metrics';
|
|
6
|
-
import { connectWallet } from '@imtbl/wallet';
|
|
7
|
+
import { ConfirmationScreen, WalletConfiguration, GuardianClient, MagicTEESigner, connectWallet, retryWithDelay } from '@imtbl/wallet';
|
|
7
8
|
export { JsonRpcError, ProviderErrorCode, ProviderEvent, RpcErrorCode } from '@imtbl/wallet';
|
|
9
|
+
import { convertToSignableToken, signRaw } from '@imtbl/toolkit';
|
|
8
10
|
|
|
9
|
-
var P=(o,e,t)=>{let i=e.map(r=>!o[r]&&r).filter(r=>r).join(", ");if(i!==""){let r=t?`${t} - ${i} cannot be null`:`${i} cannot be null`;throw new PassportError(r,PassportErrorType.INVALID_CONFIGURATION)}},u=class{authenticationDomain;passportDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;jsonRpcReferrer;popupOverlayOptions;overrides;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:i,jsonRpcReferrer:r,forceScwDeployBeforeMessageSignature:s,popupOverlayOptions:l,...p}){if(P(p,["clientId","redirectUri"]),this.oidcConfiguration=p,this.baseConfig=e,this.overrides=t,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=s||!1,this.jsonRpcReferrer=r,this.popupOverlayOptions=l||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},t)P(t,["authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.authenticationDomain=t.authenticationDomain,this.passportDomain=t.passportDomain,this.magicPublishableApiKey=t.magicPublishableApiKey,this.magicProviderId=t.magicProviderId,this.zkEvmRpcUrl=t.zkEvmRpcUrl,this.relayerUrl=t.relayerUrl,this.multiRollupConfig={indexer:createConfig({basePath:t.indexerMrBasePath}),orderBook:createConfig({basePath:t.orderBookMrBasePath}),passport:createConfig({basePath:t.passportMrBasePath})};else switch(e.environment){case Environment.PRODUCTION:{this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="aa80b860-8869-4f13-9000-6a6ad3d20017",this.passportDomain="https://passport.immutable.com",this.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.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=multiRollupConfig.getSandbox();break}}}};var m=async(o,e,t=!0,i=!0)=>{let r=trackFlow("passport",e,t);try{return await o(r)}catch(s){throw s instanceof Error?trackError("passport",e,s,{flowId:r.details.flowId}):r.addEvent("errored"),s}finally{i&&r.addEvent("End");}};var E=o=>{if(typeof o=="object"&&o!==null&&"response"in o){let{response:e}=o;if(e&&typeof e=="object")return e}};var U=o=>{let e=new u(o),t=new Auth({...o,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:o.crossSdkBridgeEnabled,popupOverlayOptions:o.popupOverlayOptions,passportDomain:e.passportDomain});return {passportConfig:e,auth:t,environment:o.baseConfig.environment}},g=class{auth;multiRollupApiClients;environment;passportConfig;constructor(e){let t=U(e);this.auth=t.auth,this.passportConfig=t.passportConfig,this.multiRollupApiClients=new MultiRollupApiClients(this.passportConfig.multiRollupConfig),this.environment=t.environment,setPassportClientId(e.clientId);}async connectEvm(e={announceProvider:!0}){return m(async()=>{let t=this.passportConfig.overrides,i;return t?.zkEvmChainId?i={chainId:t.zkEvmChainId,name:t.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:t.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,l)=>s?this.auth.forceUserRefresh():l?.silent?this.auth.getUser():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 t=e?{useCachedSession:e.useCachedSession,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions}:void 0,i=await this.auth.login(t);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return m(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,t){return this.auth.loginWithPKCEFlow(e,t)}async loginWithPKCEFlowCallback(e,t){return (await this.auth.loginWithPKCEFlowCallback(e,t)).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 m(async()=>{let e=await this.auth.getUser();if(!e?.profile.sub)return [];let t={Authorization:`Bearer ${e.accessToken}`};return (await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:t})).data.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let t=r=>typeof r=="object"&&r!==null&&"code"in r&&"message"in r,i=trackFlow("passport","linkExternalWallet",!1);try{let r=await this.auth.getUser();if(!r)throw new PassportError("User is not logged in",PassportErrorType.NOT_LOGGED_IN_ERROR);if(!isUserZkEvm(r))throw new PassportError("User has not been registered",PassportErrorType.USER_NOT_REGISTERED_ERROR);let s={Authorization:`Bearer ${r.accessToken}`},l={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:l},{headers:s})).data}}catch(r){if(r instanceof Error?trackError("passport","linkExternalWallet",r):i.addEvent("errored"),r instanceof PassportError)throw r;let s=E(r);if(s){if(s.data&&t(s.data)){let{code:p,message:c}=s.data;switch(p){case"ALREADY_LINKED":throw new PassportError(c,PassportErrorType.LINK_WALLET_ALREADY_LINKED_ERROR);case"MAX_WALLETS_LINKED":throw new PassportError(c,PassportErrorType.LINK_WALLET_MAX_WALLETS_LINKED_ERROR);case"DUPLICATE_NONCE":throw new PassportError(c,PassportErrorType.LINK_WALLET_DUPLICATE_NONCE_ERROR);case"VALIDATION_ERROR":throw new PassportError(c,PassportErrorType.LINK_WALLET_VALIDATION_ERROR);default:throw new PassportError(c,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 l="Link wallet request failed";throw r instanceof Error&&(l+=`: ${r.message}`),new PassportError(l,PassportErrorType.LINK_WALLET_GENERIC_ERROR)}finally{i.addEvent("End");}}};var b=(i=>(i.OptedIn="opted_in",i.Unsubscribed="unsubscribed",i.Subscribed="subscribed",i))(b||{});
|
|
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,o)=>s?this.auth.forceUserRefresh():o?.silent?this.auth.getUser():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))($||{});
|
|
10
12
|
|
|
11
|
-
export {
|
|
13
|
+
export { $ as MarketingConsentStatus, w as Passport };
|
package/dist/types/Passport.d.ts
CHANGED
|
@@ -1,30 +1,48 @@
|
|
|
1
|
+
import { IMXProvider } from '@imtbl/x-provider';
|
|
1
2
|
import { Environment } from '@imtbl/config';
|
|
2
3
|
import { Auth, UserProfile, DeviceTokenResponse } from '@imtbl/auth';
|
|
3
4
|
import type { DirectLoginOptions } from '@imtbl/auth';
|
|
4
|
-
import { ZkEvmProvider } from '@imtbl/wallet';
|
|
5
|
+
import { ZkEvmProvider, WalletConfiguration } from '@imtbl/wallet';
|
|
5
6
|
import type { LinkWalletParams, LinkedWallet } from '@imtbl/wallet';
|
|
6
7
|
import { PassportModuleConfiguration, ConnectEvmArguments, LoginArguments } from './types';
|
|
8
|
+
import { PassportImxProviderFactory } from './starkEx';
|
|
7
9
|
import { PassportConfiguration } from './config';
|
|
8
10
|
export declare const buildPrivateVars: (passportModuleConfiguration: PassportModuleConfiguration) => {
|
|
9
11
|
passportConfig: PassportConfiguration;
|
|
10
12
|
auth: Auth;
|
|
13
|
+
passportImxProviderFactory: PassportImxProviderFactory;
|
|
11
14
|
environment: Environment;
|
|
15
|
+
walletConfig: WalletConfiguration;
|
|
12
16
|
};
|
|
13
17
|
export declare class Passport {
|
|
14
18
|
private readonly auth;
|
|
19
|
+
private readonly passportImxProviderFactory;
|
|
15
20
|
private readonly multiRollupApiClients;
|
|
16
21
|
private readonly environment;
|
|
17
22
|
private readonly passportConfig;
|
|
18
23
|
constructor(passportModuleConfiguration: PassportModuleConfiguration);
|
|
24
|
+
/**
|
|
25
|
+
* Attempts to connect to IMX silently without user interaction.
|
|
26
|
+
* @returns {Promise<IMXProvider | null>} A promise that resolves to an IMX provider if successful, or null if no cached session exists
|
|
27
|
+
* @deprecated The method `login` with an argument of `{ useCachedSession: true }` should be used in conjunction with `connectImx` instead
|
|
28
|
+
*/
|
|
29
|
+
connectImxSilent(): Promise<IMXProvider | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Connects to IMX, prompting user interaction if necessary.
|
|
32
|
+
* @returns {Promise<IMXProvider>} A promise that resolves to an IMX provider
|
|
33
|
+
*/
|
|
34
|
+
connectImx(): Promise<IMXProvider>;
|
|
19
35
|
/**
|
|
20
36
|
* Connects to EVM and optionally announces the provider.
|
|
37
|
+
* Uses: Auth + Wallet packages
|
|
21
38
|
* @param {Object} options - Configuration options
|
|
22
39
|
* @param {boolean} options.announceProvider - Whether to announce the provider via EIP-6963 for wallet discovery (defaults to true)
|
|
23
40
|
* @returns {Promise<Provider>} The EVM provider instance
|
|
24
41
|
*/
|
|
25
42
|
connectEvm(options?: ConnectEvmArguments): Promise<ZkEvmProvider>;
|
|
26
43
|
/**
|
|
27
|
-
* Logs in the user.
|
|
44
|
+
* Logs in the user (works for both zkEVM and IMX).
|
|
45
|
+
* Uses: Auth class
|
|
28
46
|
* @param {Object} [options] - Login options
|
|
29
47
|
* @param {boolean} [options.useCachedSession] - If true, attempts to use a cached session without user interaction.
|
|
30
48
|
* @param {boolean} [options.useSilentLogin] - If true, attempts silent authentication without user interaction.
|
|
@@ -41,16 +59,19 @@ export declare class Passport {
|
|
|
41
59
|
login(options?: LoginArguments): Promise<UserProfile | null>;
|
|
42
60
|
/**
|
|
43
61
|
* Handles the login callback from the authentication service.
|
|
62
|
+
* Uses: Auth class
|
|
44
63
|
* @returns {Promise<void>} A promise that resolves when the login callback is handled
|
|
45
64
|
*/
|
|
46
65
|
loginCallback(): Promise<void>;
|
|
47
66
|
/**
|
|
48
|
-
* Logs out the user.
|
|
67
|
+
* Logs out the user (works for both zkEVM and IMX).
|
|
68
|
+
* Uses: Auth class
|
|
49
69
|
* @returns {Promise<void>} A promise that resolves when the user is logged out
|
|
50
70
|
*/
|
|
51
71
|
logout(): Promise<void>;
|
|
52
72
|
/**
|
|
53
73
|
* Retrieves the current user's information.
|
|
74
|
+
* Uses: Auth class
|
|
54
75
|
* @returns {Promise<UserProfile | undefined>} A promise that resolves to the user profile if logged in, undefined otherwise
|
|
55
76
|
*/
|
|
56
77
|
getUserInfo(): Promise<UserProfile | undefined>;
|
|
@@ -108,7 +129,7 @@ export declare class Passport {
|
|
|
108
129
|
* @param {LinkWalletParams} params - Parameters for linking the wallet
|
|
109
130
|
* @returns {Promise<LinkedWallet>} A promise that resolves to the linked wallet information
|
|
110
131
|
* @throws {PassportError} If the user is not logged in (NOT_LOGGED_IN_ERROR)
|
|
111
|
-
* - If the user is not registered (USER_NOT_REGISTERED_ERROR)
|
|
132
|
+
* - If the user is not registered with StarkEx (USER_NOT_REGISTERED_ERROR)
|
|
112
133
|
* - If the wallet is already linked (LINK_WALLET_ALREADY_LINKED_ERROR)
|
|
113
134
|
* - If the maximum number of wallets are linked (LINK_WALLET_MAX_WALLETS_LINKED_ERROR)
|
|
114
135
|
* - Duplicate nonce used (LINK_WALLET_DUPLICATE_NONCE_ERROR)
|
|
@@ -4,6 +4,7 @@ import { OidcConfiguration, PassportModuleConfiguration, PopupOverlayOptions, Pa
|
|
|
4
4
|
export declare class PassportConfiguration {
|
|
5
5
|
readonly authenticationDomain: string;
|
|
6
6
|
readonly passportDomain: string;
|
|
7
|
+
readonly imxPublicApiDomain: string;
|
|
7
8
|
readonly magicPublishableApiKey: string;
|
|
8
9
|
readonly magicProviderId: string;
|
|
9
10
|
readonly magicTeeBasePath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { PassportError, PassportErrorType, } from '@imtbl/auth';
|
|
1
|
+
export { PassportError, PassportErrorType, withPassportError, isAPIError, } from '@imtbl/auth';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { StarkSigner } from '@imtbl/x-client';
|
|
2
|
+
type StarkMessageSigner = {
|
|
3
|
+
getAddress(): Promise<string>;
|
|
4
|
+
signMessage(message: string | Uint8Array): Promise<string>;
|
|
5
|
+
};
|
|
6
|
+
export declare const getStarkSigner: (signer: StarkMessageSigner) => Promise<StarkSigner>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Auth } from '@imtbl/auth';
|
|
2
|
+
import { mr as MultiRollup } from '@imtbl/generated-clients';
|
|
3
|
+
import { ConfirmationScreen } from '@imtbl/wallet';
|
|
4
|
+
type ImxGuardianClientParams = {
|
|
5
|
+
auth: Auth;
|
|
6
|
+
guardianApi: MultiRollup.GuardianApi;
|
|
7
|
+
confirmationScreen: ConfirmationScreen;
|
|
8
|
+
crossSdkBridgeEnabled?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare class ImxGuardianClient {
|
|
11
|
+
private readonly auth;
|
|
12
|
+
private readonly guardianApi;
|
|
13
|
+
private readonly confirmationScreen;
|
|
14
|
+
private readonly crossSdkBridgeEnabled;
|
|
15
|
+
constructor({ auth, guardianApi, confirmationScreen, crossSdkBridgeEnabled, }: ImxGuardianClientParams);
|
|
16
|
+
evaluateTransaction(payloadHash: string): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { AnyToken, IMXClient, NftTransferDetails, TokenAmount, UnsignedExchangeTransferRequest, UnsignedOrderRequest, UnsignedTransferRequest } from '@imtbl/x-client';
|
|
2
|
+
import { IMXProvider } from '@imtbl/x-provider';
|
|
3
|
+
import { imx, ImxApiClients } from '@imtbl/generated-clients';
|
|
4
|
+
import { TransactionResponse } from 'ethers';
|
|
5
|
+
import { Auth, AuthEventMap, TypedEventEmitter } from '@imtbl/auth';
|
|
6
|
+
import { GuardianClient, MagicTEESigner } from '@imtbl/wallet';
|
|
7
|
+
import { ImxGuardianClient } from './imxGuardianClient';
|
|
8
|
+
export interface PassportImxProviderOptions {
|
|
9
|
+
auth: Auth;
|
|
10
|
+
immutableXClient: IMXClient;
|
|
11
|
+
passportEventEmitter: TypedEventEmitter<AuthEventMap>;
|
|
12
|
+
magicTEESigner: MagicTEESigner;
|
|
13
|
+
imxApiClients: ImxApiClients;
|
|
14
|
+
guardianClient: GuardianClient;
|
|
15
|
+
imxGuardianClient: ImxGuardianClient;
|
|
16
|
+
}
|
|
17
|
+
export declare class PassportImxProvider implements IMXProvider {
|
|
18
|
+
#private;
|
|
19
|
+
protected readonly auth: Auth;
|
|
20
|
+
private readonly immutableXClient;
|
|
21
|
+
protected readonly guardianClient: GuardianClient;
|
|
22
|
+
protected readonly imxApiClients: ImxApiClients;
|
|
23
|
+
protected magicTEESigner: MagicTEESigner;
|
|
24
|
+
private readonly imxGuardianClient;
|
|
25
|
+
/**
|
|
26
|
+
* This property is set during initialisation and stores the signers in a promise.
|
|
27
|
+
* This property is not meant to be accessed directly, but through the
|
|
28
|
+
* `#getSigners` method.
|
|
29
|
+
* @see #getSigners
|
|
30
|
+
*/
|
|
31
|
+
private starkSigner;
|
|
32
|
+
private signerInitialisationError;
|
|
33
|
+
constructor({ auth, immutableXClient, passportEventEmitter, magicTEESigner, imxApiClients, guardianClient, imxGuardianClient, }: PassportImxProviderOptions);
|
|
34
|
+
private handleLogout;
|
|
35
|
+
transfer(request: UnsignedTransferRequest): Promise<imx.CreateTransferResponseV1>;
|
|
36
|
+
registerOffchain(): Promise<imx.RegisterUserResponse>;
|
|
37
|
+
isRegisteredOffchain(): Promise<boolean>;
|
|
38
|
+
isRegisteredOnchain(): Promise<boolean>;
|
|
39
|
+
createOrder(request: UnsignedOrderRequest): Promise<imx.CreateOrderResponse>;
|
|
40
|
+
cancelOrder(request: imx.GetSignableCancelOrderRequest): Promise<imx.CancelOrderResponse>;
|
|
41
|
+
createTrade(request: imx.GetSignableTradeRequest): Promise<imx.CreateTradeResponse>;
|
|
42
|
+
batchNftTransfer(request: NftTransferDetails[]): Promise<imx.CreateTransferResponse>;
|
|
43
|
+
exchangeTransfer(request: UnsignedExchangeTransferRequest): Promise<imx.CreateTransferResponseV1>;
|
|
44
|
+
deposit(deposit: TokenAmount): Promise<TransactionResponse>;
|
|
45
|
+
prepareWithdrawal(request: TokenAmount): Promise<imx.CreateWithdrawalResponse>;
|
|
46
|
+
completeWithdrawal(starkPublicKey: string, token: AnyToken): Promise<TransactionResponse>;
|
|
47
|
+
getAddress(): Promise<string>;
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { IMXClient } from '@imtbl/x-client';
|
|
2
|
+
import { IMXProvider } from '@imtbl/x-provider';
|
|
3
|
+
import { ImxApiClients } from '@imtbl/generated-clients';
|
|
4
|
+
import { Auth, AuthEventMap, TypedEventEmitter } from '@imtbl/auth';
|
|
5
|
+
import { GuardianClient, MagicTEESigner } from '@imtbl/wallet';
|
|
6
|
+
import { ImxGuardianClient } from './imxGuardianClient';
|
|
7
|
+
export type PassportImxProviderFactoryInput = {
|
|
8
|
+
auth: Auth;
|
|
9
|
+
immutableXClient: IMXClient;
|
|
10
|
+
magicTEESigner: MagicTEESigner;
|
|
11
|
+
passportEventEmitter: TypedEventEmitter<AuthEventMap>;
|
|
12
|
+
imxApiClients: ImxApiClients;
|
|
13
|
+
guardianClient: GuardianClient;
|
|
14
|
+
imxGuardianClient: ImxGuardianClient;
|
|
15
|
+
};
|
|
16
|
+
export declare class PassportImxProviderFactory {
|
|
17
|
+
private readonly auth;
|
|
18
|
+
private readonly immutableXClient;
|
|
19
|
+
private readonly magicTEESigner;
|
|
20
|
+
private readonly passportEventEmitter;
|
|
21
|
+
readonly imxApiClients: ImxApiClients;
|
|
22
|
+
private readonly guardianClient;
|
|
23
|
+
private readonly imxGuardianClient;
|
|
24
|
+
constructor({ auth, immutableXClient, magicTEESigner, passportEventEmitter, imxApiClients, guardianClient, imxGuardianClient, }: PassportImxProviderFactoryInput);
|
|
25
|
+
getProvider(): Promise<IMXProvider>;
|
|
26
|
+
getProviderSilent(): Promise<IMXProvider | null>;
|
|
27
|
+
private createProviderInstance;
|
|
28
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { imx } from '@imtbl/generated-clients';
|
|
2
|
+
import { StarkSigner, UnsignedExchangeTransferRequest } from '@imtbl/x-client';
|
|
3
|
+
import { UserImx } from '../../types';
|
|
4
|
+
type TransfersParams = {
|
|
5
|
+
user: UserImx;
|
|
6
|
+
starkSigner: StarkSigner;
|
|
7
|
+
request: UnsignedExchangeTransferRequest;
|
|
8
|
+
exchangesApi: imx.ExchangesApi;
|
|
9
|
+
};
|
|
10
|
+
export declare function exchangeTransfer({ user, starkSigner, request, exchangesApi, }: TransfersParams): Promise<imx.CreateTransferResponseV1>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { imx } from '@imtbl/generated-clients';
|
|
2
|
+
import { StarkSigner, UnsignedOrderRequest } from '@imtbl/x-client';
|
|
3
|
+
import { ImxGuardianClient } from '../imxGuardianClient';
|
|
4
|
+
import { UserImx } from '../../types';
|
|
5
|
+
type CancelOrderParams = {
|
|
6
|
+
request: imx.GetSignableCancelOrderRequest;
|
|
7
|
+
ordersApi: imx.OrdersApi;
|
|
8
|
+
user: UserImx;
|
|
9
|
+
starkSigner: StarkSigner;
|
|
10
|
+
guardianClient: ImxGuardianClient;
|
|
11
|
+
};
|
|
12
|
+
type CreateOrderParams = {
|
|
13
|
+
request: UnsignedOrderRequest;
|
|
14
|
+
ordersApi: imx.OrdersApi;
|
|
15
|
+
user: UserImx;
|
|
16
|
+
starkSigner: StarkSigner;
|
|
17
|
+
guardianClient: ImxGuardianClient;
|
|
18
|
+
};
|
|
19
|
+
export declare function createOrder({ starkSigner, user, request, ordersApi, guardianClient, }: CreateOrderParams): Promise<imx.CreateOrderResponse>;
|
|
20
|
+
export declare function cancelOrder({ user, starkSigner, request, ordersApi, guardianClient, }: CancelOrderParams): Promise<imx.CancelOrderResponse>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ImxApiClients, imx } from '@imtbl/generated-clients';
|
|
2
|
+
import { MessageSigner, StarkSigner } from '@imtbl/x-client';
|
|
3
|
+
import { Auth, User } from '@imtbl/auth';
|
|
4
|
+
export default function registerOffchain(userAdminKeySigner: MessageSigner, starkSigner: StarkSigner, unregisteredUser: User, auth: Auth, imxApiClients: ImxApiClients): Promise<imx.RegisterUserResponse>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MessageSigner, StarkSigner } from '@imtbl/x-client';
|
|
2
|
+
import { ImxApiClients, imx } from '@imtbl/generated-clients';
|
|
3
|
+
export type RegisterPassportParams = {
|
|
4
|
+
ethSigner: MessageSigner;
|
|
5
|
+
starkSigner: StarkSigner;
|
|
6
|
+
imxApiClients: ImxApiClients;
|
|
7
|
+
};
|
|
8
|
+
export default function registerPassport({ ethSigner, starkSigner, imxApiClients }: RegisterPassportParams, authorization: string): Promise<imx.RegisterUserResponse>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { imx } from '@imtbl/generated-clients';
|
|
2
|
+
import { StarkSigner } from '@imtbl/x-client';
|
|
3
|
+
import { ImxGuardianClient } from '../imxGuardianClient';
|
|
4
|
+
import { UserImx } from '../../types';
|
|
5
|
+
type CreateTradeParams = {
|
|
6
|
+
request: imx.GetSignableTradeRequest;
|
|
7
|
+
tradesApi: imx.TradesApi;
|
|
8
|
+
user: UserImx;
|
|
9
|
+
starkSigner: StarkSigner;
|
|
10
|
+
guardianClient: ImxGuardianClient;
|
|
11
|
+
};
|
|
12
|
+
export declare function createTrade({ request, tradesApi, user, starkSigner, guardianClient, }: CreateTradeParams): Promise<imx.CreateTradeResponse>;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { imx } from '@imtbl/generated-clients';
|
|
2
|
+
import { StarkSigner, NftTransferDetails, UnsignedTransferRequest } from '@imtbl/x-client';
|
|
3
|
+
import { ImxGuardianClient } from '../imxGuardianClient';
|
|
4
|
+
import { UserImx } from '../../types';
|
|
5
|
+
type TransferRequest = {
|
|
6
|
+
request: UnsignedTransferRequest;
|
|
7
|
+
user: UserImx;
|
|
8
|
+
starkSigner: StarkSigner;
|
|
9
|
+
transfersApi: imx.TransfersApi;
|
|
10
|
+
guardianClient: ImxGuardianClient;
|
|
11
|
+
};
|
|
12
|
+
type BatchTransfersParams = {
|
|
13
|
+
request: Array<NftTransferDetails>;
|
|
14
|
+
user: UserImx;
|
|
15
|
+
starkSigner: StarkSigner;
|
|
16
|
+
transfersApi: imx.TransfersApi;
|
|
17
|
+
guardianClient: ImxGuardianClient;
|
|
18
|
+
};
|
|
19
|
+
export declare function transfer({ request, transfersApi, starkSigner, user, guardianClient, }: TransferRequest): Promise<imx.CreateTransferResponseV1>;
|
|
20
|
+
export declare function batchNftTransfer({ user, starkSigner, request, transfersApi, guardianClient, }: BatchTransfersParams): Promise<imx.CreateTransferResponse>;
|
|
21
|
+
export {};
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Environment, ModuleConfiguration } from '@imtbl/config';
|
|
2
|
+
import { IMXClient } from '@imtbl/x-client';
|
|
3
|
+
import { ImxApiClients } from '@imtbl/generated-clients';
|
|
2
4
|
import { Flow } from '@imtbl/metrics';
|
|
3
5
|
/**
|
|
4
6
|
* Direct login method identifier
|
|
@@ -6,6 +8,8 @@ import { Flow } from '@imtbl/metrics';
|
|
|
6
8
|
* Additional providers may be supported server-side
|
|
7
9
|
*/
|
|
8
10
|
export type DirectLoginMethod = string;
|
|
11
|
+
export { AuthEvents } from '@imtbl/auth';
|
|
12
|
+
export { WalletEvents } from '@imtbl/wallet';
|
|
9
13
|
export type AccountsRequestedEvent = {
|
|
10
14
|
environment: Environment;
|
|
11
15
|
sendTransaction: (params: Array<any>, flow: Flow) => Promise<string>;
|
|
@@ -15,6 +19,7 @@ export type AccountsRequestedEvent = {
|
|
|
15
19
|
};
|
|
16
20
|
export type { User, UserProfile, DeviceTokenResponse, IdTokenPayload, } from '@imtbl/auth';
|
|
17
21
|
export { isUserZkEvm } from '@imtbl/auth';
|
|
22
|
+
export type { UserImx } from './utils/imxUser';
|
|
18
23
|
export interface OidcConfiguration {
|
|
19
24
|
clientId: string;
|
|
20
25
|
logoutRedirectUri?: string;
|
|
@@ -29,11 +34,14 @@ export interface PassportOverrides {
|
|
|
29
34
|
magicPublishableApiKey: string;
|
|
30
35
|
magicProviderId: string;
|
|
31
36
|
passportDomain: string;
|
|
37
|
+
imxPublicApiDomain: string;
|
|
38
|
+
immutableXClient: IMXClient;
|
|
32
39
|
zkEvmRpcUrl: string;
|
|
33
40
|
relayerUrl: string;
|
|
34
41
|
indexerMrBasePath: string;
|
|
35
42
|
orderBookMrBasePath: string;
|
|
36
43
|
passportMrBasePath: string;
|
|
44
|
+
imxApiClients?: ImxApiClients;
|
|
37
45
|
/**
|
|
38
46
|
* Custom chain ID for dev environments (optional)
|
|
39
47
|
* If provided, overrides the default chainId based on environment
|
package/package.json
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@imtbl/passport",
|
|
3
3
|
"description": "Passport module for Immutable SDK",
|
|
4
|
-
"version": "2.15.0-alpha.
|
|
4
|
+
"version": "2.15.0-alpha.1",
|
|
5
5
|
"author": "Immutable",
|
|
6
6
|
"bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@imtbl/auth": "2.15.0-alpha.
|
|
9
|
-
"@imtbl/wallet": "2.15.0-alpha.
|
|
10
|
-
"@imtbl/config": "2.15.0-alpha.
|
|
11
|
-
"@imtbl/generated-clients": "2.15.0-alpha.
|
|
12
|
-
"@imtbl/metrics": "2.15.0-alpha.
|
|
13
|
-
"@imtbl/toolkit": "2.15.0-alpha.
|
|
8
|
+
"@imtbl/auth": "2.15.0-alpha.1",
|
|
9
|
+
"@imtbl/wallet": "2.15.0-alpha.1",
|
|
10
|
+
"@imtbl/config": "2.15.0-alpha.1",
|
|
11
|
+
"@imtbl/generated-clients": "2.15.0-alpha.1",
|
|
12
|
+
"@imtbl/metrics": "2.15.0-alpha.1",
|
|
13
|
+
"@imtbl/toolkit": "2.15.0-alpha.1",
|
|
14
|
+
"@imtbl/x-client": "2.15.0-alpha.1",
|
|
15
|
+
"@imtbl/x-provider": "2.15.0-alpha.1",
|
|
14
16
|
"ethers": "^6.13.4",
|
|
15
17
|
"localforage": "^1.10.0",
|
|
16
18
|
"oidc-client-ts": "3.4.1"
|