@imtbl/passport 2.10.7-alpha.3 → 2.10.7-alpha.4
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 -7
- package/dist/node/index.cjs +6 -6
- package/dist/node/index.js +7 -7
- package/dist/types/Passport.d.ts +52 -55
- package/dist/types/config/config.d.ts +3 -1
- package/dist/types/starkEx/passportImxProvider.d.ts +3 -4
- package/dist/types/starkEx/passportImxProviderFactory.d.ts +3 -4
- package/dist/types/types.d.ts +18 -24
- package/package.json +9 -9
package/dist/browser/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import te, { isAxiosError } from 'axios';
|
|
2
|
+
import { MultiRollupApiClients, MagicTeeApiClients, createConfig, multiRollupConfig, ImxApiClients, imxApiConfig } from '@imtbl/generated-clients';
|
|
3
3
|
import { IMXClient, generateLegacyStarkPrivateKey, createStarkSigner } from '@imtbl/x-client';
|
|
4
4
|
import { Environment } from '@imtbl/config';
|
|
5
|
-
import { setPassportClientId
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { setPassportClientId } from '@imtbl/metrics';
|
|
6
|
+
import { Auth, AuthEvents } from '@imtbl/auth';
|
|
7
|
+
import { connectWallet, getLinkedAddresses, linkExternalWallet, WalletConfiguration, GuardianClient, MagicTEESigner, retryWithDelay } from '@imtbl/wallet';
|
|
8
8
|
export { JsonRpcError, ProviderErrorCode, ProviderEvent, RpcErrorCode } from '@imtbl/wallet';
|
|
9
9
|
import { convertToSignableToken, signRaw } from '@imtbl/toolkit';
|
|
10
10
|
|
|
11
|
-
function N(t){throw new Error("Node.js process "+t+" is not supported by JSPM core outside of Node.js")}var y=[],A=!1,x,b=-1;function ue(){!A||!x||(A=!1,x.length?y=x.concat(y):b=-1,y.length&&q());}function q(){if(!A){var t=setTimeout(ue,0);A=!0;for(var e=y.length;e;){for(x=y,y=[];++b<e;)x&&x[b].run();b=-1,e=y.length;}x=null,A=!1,clearTimeout(t);}}function ce(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];y.push(new V(t,e)),y.length===1&&!A&&setTimeout(q,0);}function V(t,e){this.fun=t,this.array=e;}V.prototype.run=function(){this.fun.apply(null,this.array);};var pe="browser",ge="x64",fe="browser",Ee={PATH:"/usr/bin",LANG:navigator.language+".UTF-8",PWD:"/",HOME:"/home",TMP:"/tmp"},Re=["/usr/bin/node"],he=[],_e="v16.8.0",ve={},ye=function(t,e){console.warn((e?e+": ":"")+t);},Te=function(t){N("binding");},Pe=function(t){return 0},xe=function(){return "/"},Ae=function(t){},Ce={name:"node",sourceUrl:"",headersUrl:"",libUrl:""};function h(){}var Oe=h,be=[];function ke(t){N("_linkedBinding");}var Se={},Ie=!1,we={};function Le(t){N("dlopen");}function Ue(){return []}function Ne(){return []}var Me=h,De=h,M=function(){return {}},Ge=M,We=M,Ke=h,Be=h,Xe=h,qe={};function Ve(t,e){if(!t)throw new Error(e||"assertion error")}var Fe={inspector:!1,debug:!1,uv:!1,ipv6:!1,tls_alpn:!1,tls_sni:!1,tls_ocsp:!1,tls:!1,cached_builtins:!0},He=h,ze=h;function $e(){return !1}var Ze=h,je=h,Qe=h,Ye=h,Je=h,er=void 0,rr=void 0,tr=void 0,ir=h,ar=2,nr=1,sr="/bin/usr/node",or=9229,lr="node",mr=[],dr=h,T={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};T.now===void 0&&(w=Date.now(),T.timing&&T.timing.navigationStart&&(w=T.timing.navigationStart),T.now=()=>Date.now()-w);var w;function ur(){return T.now()/1e3}var L=1e9;function U(t){var e=Math.floor((Date.now()-T.now())*.001),r=T.now()*.001,i=Math.floor(r)+e,a=Math.floor(r%1*1e9);return t&&(i=i-t[0],a=a-t[1],a<0&&(i--,a+=L)),[i,a]}U.bigint=function(t){var e=U(t);return typeof BigInt>"u"?e[0]*L+e[1]:BigInt(e[0]*L)+BigInt(e[1])};var cr=10,pr={},gr=0;function P(){return g}var fr=P,Er=P,Rr=P,hr=P,_r=P,vr=h,yr=P,Tr=P;function Pr(t){return []}var g={version:_e,versions:ve,arch:ge,platform:fe,release:Ce,_rawDebug:Oe,moduleLoadList:be,binding:Te,_linkedBinding:ke,_events:pr,_eventsCount:gr,_maxListeners:cr,on:P,addListener:fr,once:Er,off:Rr,removeListener:hr,removeAllListeners:_r,emit:vr,prependListener:yr,prependOnceListener:Tr,listeners:Pr,domain:Se,_exiting:Ie,config:we,dlopen:Le,uptime:ur,_getActiveRequests:Ue,_getActiveHandles:Ne,reallyExit:Me,_kill:De,cpuUsage:M,resourceUsage:Ge,memoryUsage:We,kill:Ke,exit:Be,openStdin:Xe,allowedNodeEnvironmentFlags:qe,assert:Ve,features:Fe,_fatalExceptions:He,setUncaughtExceptionCaptureCallback:ze,hasUncaughtExceptionCaptureCallback:$e,emitWarning:ye,nextTick:ce,_tickCallback:Ze,_debugProcess:je,_debugEnd:Qe,_startProfilerIdleNotifier:Ye,_stopProfilerIdleNotifier:Je,stdout:er,stdin:tr,stderr:rr,abort:ir,umask:Pe,chdir:Ae,cwd:xe,env:Ee,title:pe,argv:Re,execArgv:he,pid:ar,ppid:nr,execPath:sr,debugPort:or,hrtime:U,argv0:lr,_preload_modules:mr,setSourceMapsEnabled:dr};function D(t){return "code"in t&&"message"in t}var l=class extends Error{type;constructor(e,r){super(e),this.type=r;}},_=async(t,e)=>{try{return await t()}catch(r){let i;throw r instanceof l&&r.type==="SERVICE_UNAVAILABLE_ERROR"?new l(r.message,r.type):(isAxiosError(r)&&r.response?.data&&D(r.response.data)?i=r.response.data.message:i=r.message,new l(i,e))}};var G=t=>!!t.imx,F=(r=>(r.OptedIn="opted_in",r.Unsubscribed="unsubscribed",r))(F||{});var H=async t=>_(async()=>{let e=await generateLegacyStarkPrivateKey(t);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function z({user:t,starkSigner:e,request:r,exchangesApi:i}){return _(async()=>{let{ethAddress:a}=t.imx,n=r.amount,o=await i.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:n,receiver:r.receiver}}),p=await e.getAddress(),{payload_hash:s}=o.data,m=await e.signMessage(s),f={sender_stark_key:o.data.sender_stark_key||p,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:m},d={Authorization:`Bearer ${t.accessToken}`},u=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:f},{headers:d});return {sent_signature:u?.data.sent_signature,status:u?.data.status?.toString(),time:u?.data.time,transfer_id:u?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var Z="ERC721";async function j({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return _(async()=>{let{ethAddress:n}=e.imx,o=r.sell.type===Z?"1":r.sell.amount,p=r.buy.type===Z?"1":r.buy.amount,s={Authorization:`Bearer ${e.accessToken}`},m={user:n,amount_buy:p,token_buy:convertToSignableToken(r.buy),amount_sell:o,token_sell:convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},f=await i.getSignableOrder({getSignableOrderRequestV3:m},{headers:s});await a.evaluateImxTransaction({payloadHash:f.data.payload_hash});let{payload_hash:d}=f.data,u=await t.signMessage(d),R=f.data,C={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:u,amount_buy:R.amount_buy,amount_sell:R.amount_sell,asset_id_buy:R.asset_id_buy,asset_id_sell:R.asset_id_sell,expiration_timestamp:R.expiration_timestamp,nonce:R.nonce,stark_key:R.stark_key,vault_id_buy:R.vault_id_buy,vault_id_sell:R.vault_id_sell}};return {...(await i.createOrderV3(C,{headers:s})).data}},"CREATE_ORDER_ERROR")}async function Q({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return _(async()=>{let n={order_id:r.order_id},o={Authorization:`Bearer ${t.accessToken}`},p=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:n},{headers:o});await a.evaluateImxTransaction({payloadHash:p.data.payload_hash});let{payload_hash:s}=p.data,m=await e.signMessage(s),f=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:m}},{headers:o});return {order_id:f.data.order_id,status:f.data.status}},"CANCEL_ORDER_ERROR")}async function W({ethSigner:t,starkSigner:e,imxApiClients:r},i){return _(async()=>{let[a,n]=await Promise.all([t.getAddress(),e.getAddress()]),o=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:p,payload_hash:s}=o.data,[m,f]=await Promise.all([signRaw(p,t),e.signMessage(s)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:m,ether_key:a,stark_signature:f,stark_key:n}})).data},"USER_REGISTRATION_ERROR")}async function Y({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return _(async()=>{let{ethAddress:n}=r.imx,o={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:n},p={Authorization:`Bearer ${r.accessToken}`},s=await e.getSignableTrade({getSignableTradeRequest:o},{headers:p});await a.evaluateImxTransaction({payloadHash:s.data.payload_hash});let{payload_hash:m}=s.data,f=await i.signMessage(m),{data:d}=s,u={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:f,order_id:t?.order_id,fee_info:d.fee_info,amount_buy:d.amount_buy,amount_sell:d.amount_sell,asset_id_buy:d.asset_id_buy,asset_id_sell:d.asset_id_sell,expiration_timestamp:d.expiration_timestamp,nonce:d.nonce,stark_key:d.stark_key,vault_id_buy:d.vault_id_buy,vault_id_sell:d.vault_id_sell}},{data:R}=await e.createTradeV3(u,{headers:p});return R},"CREATE_TRADE_ERROR")}var ee="ERC721";async function re({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return _(async()=>{let n=t.type===ee?"1":t.amount,o={sender:i.imx.ethAddress,token:convertToSignableToken(t),amount:n,receiver:t.receiver},p={Authorization:`Bearer ${i.accessToken}`},s=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:p});await a.evaluateImxTransaction({payloadHash:s.data.payload_hash});let m=s.data,{payload_hash:f}=m,d=await r.signMessage(f),u=await r.getAddress(),C={createTransferRequest:{sender_stark_key:m.sender_stark_key||u,sender_vault_id:m.sender_vault_id,receiver_stark_key:m.receiver_stark_key,receiver_vault_id:m.receiver_vault_id,asset_id:m.asset_id,amount:m.amount,nonce:m.nonce,expiration_timestamp:m.expiration_timestamp,stark_signature:d}},{data:O}=await e.createTransferV1(C,{headers:p});return {sent_signature:O.sent_signature,status:O.status?.toString(),time:O.time,transfer_id:O.transfer_id}},"TRANSFER_ERROR")}async function te({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return _(async()=>{let{ethAddress:n}=t.imx,o=r.map(u=>({amount:"1",token:convertToSignableToken({type:ee,tokenId:u.tokenId,tokenAddress:u.tokenAddress}),receiver:u.receiver})),p={Authorization:`Bearer ${t.accessToken}`},s=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:o}},{headers:p});await a.evaluateImxTransaction({payloadHash:s.data.signable_responses[0]?.payload_hash});let m=await Promise.all(s.data.signable_responses.map(async u=>{let R=await e.signMessage(u.payload_hash);return {sender_vault_id:u.sender_vault_id,receiver_stark_key:u.receiver_stark_key,receiver_vault_id:u.receiver_vault_id,asset_id:u.asset_id,amount:u.amount,nonce:u.nonce,expiration_timestamp:u.expiration_timestamp,stark_signature:R}})),f={sender_stark_key:s.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:f},{headers:p}))?.data.transfer_ids}},"TRANSFER_ERROR")}async function ie(t){await retryWithDelay(async()=>{let e=await t.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function K(t,e,r,i,a){return _(async()=>{try{let n=await W({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await ie(i),n}catch(n){if(Sr.isAxiosError(n)&&n.response?.status===409)return await ie(i),{tx_hash:""};throw n}},"USER_REGISTRATION_ERROR")}var c=async(t,e,r=!0,i)=>t();var k=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:n,guardianClient:o}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=n,this.guardianClient=o,this.#i(),i.on("loggedOut",this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await H(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.authManager.getUser();if(!e||!this.starkSigner)throw new l("User has been logged out","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()]);if(!G(e))throw new l("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:r}}async transfer(e){return c(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return re({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})())}async registerOffchain(){return c(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await K(this.magicTEESigner,r,e,this.authManager,this.imxApiClients)})}async isRegisteredOffchain(){return c(async()=>!!(await this.#r()).imx)}isRegisteredOnchain(){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return c(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return j({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})())}async cancelOrder(e){return c(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return Q({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})())}async createTrade(e){return c(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return Y({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})())}async batchNftTransfer(e){return c(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:i}=await this.#e();return te({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})())}async exchangeTransfer(e){return c(async()=>{let{user:r,starkSigner:i}=await this.#e();return z({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})})}deposit(e){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,r){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return c(async()=>{let e=await this.#r();if(!G(e))throw new l("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)})}};var S=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:n,guardianClient:o}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=n,this.guardianClient=o;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new l("Failed to initialise","WALLET_CONNECTION_ERROR");return new k({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var se=(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 l(a,"INVALID_CONFIGURATION")}},I=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:i,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:n,popupOverlayOptions:o,...p}){if(se(p,["clientId","redirectUri"]),this.oidcConfiguration=p,this.baseConfig=e,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=n||!1,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)se(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 Lr=(...t)=>{if(typeof g>"u")return;g?.env?.JEST_WORKER_ID===void 0&&console.warn(...t);},oe={warn:Lr};var it=t=>t.overrides?createConfig({basePath:t.overrides.imxPublicApiDomain}):t.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),at=t=>{if(t.overrides?.imxApiClients)return t.overrides.imxApiClients;let e=it(t);return new ImxApiClients(e)},nt=t=>{let e=new I(t),r=new AuthConfiguration({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=new EmbeddedLoginPrompt(r),a=new AuthManager(r,i),n=new ConfirmationScreen(r),o=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),p=new MagicTEESigner(a,o),s=new MultiRollupApiClients(e.multiRollupConfig),m=new WalletConfiguration({baseConfig:t.baseConfig,overrides:t.overrides,jsonRpcReferrer:t.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:t.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled}),f=new TypedEventEmitter,d=t.overrides?t.overrides.immutableXClient:new IMXClient({baseConfig:t.baseConfig}),u=new GuardianClient({confirmationScreen:n,config:m,authManager:a,guardianApi:s.guardianApi}),R=at(t),C=new S({authManager:a,immutableXClient:d,magicTEESigner:p,passportEventEmitter:f,imxApiClients:R,guardianClient:u});return {config:e,authManager:a,authConfig:r,walletConfig:m,magicTEESigner:p,confirmationScreen:n,embeddedLoginPrompt:i,immutableXClient:d,multiRollupApiClients:s,passportEventEmitter:f,passportImxProviderFactory:C,guardianClient:u}},X=class{authManager;walletConfig;confirmationScreen;embeddedLoginPrompt;immutableXClient;magicTEESigner;multiRollupApiClients;passportImxProviderFactory;passportEventEmitter;guardianClient;constructor(e){let r=nt(e);this.walletConfig=r.walletConfig,this.authManager=r.authManager,this.magicTEESigner=r.magicTEESigner,this.confirmationScreen=r.confirmationScreen,this.embeddedLoginPrompt=r.embeddedLoginPrompt,this.immutableXClient=r.immutableXClient,this.multiRollupApiClients=r.multiRollupApiClients,this.passportEventEmitter=r.passportEventEmitter,this.passportImxProviderFactory=r.passportImxProviderFactory,this.guardianClient=r.guardianClient,setPassportClientId(e.clientId),track("passport","initialise");}async connectImxSilent(){return c(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return c(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return c(async()=>{let r=null;try{r=await this.authManager.getUser();}catch{}let i=new ZkEvmProvider({passportEventEmitter:this.passportEventEmitter,authManager:this.authManager,config:this.walletConfig,multiRollupApiClients:this.multiRollupApiClients,guardianClient:this.guardianClient,ethSigner:this.magicTEESigner,user:r});return e?.announceProvider&&announceProvider({info:passportProviderInfo,provider:i}),i},"connectEvm",!1)}async login(e){return c(async()=>{let{useCachedSession:r=!1,useSilentLogin:i}=e||{},a=null;try{a=await this.authManager.getUser();}catch(n){if(n instanceof Error&&!n.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",n),r)throw n;oe.warn("Failed to retrieve a cached user session",n);}if(!a&&i)a=await this.authManager.forceUserRefresh();else if(!a&&!r){let n=e?.directLoginOptions?{directLoginMethod:e.directLoginOptions.directLoginMethod,email:e.directLoginOptions.email,marketingConsentStatus:e.directLoginOptions.marketingConsentStatus}:void 0;e?.useRedirectFlow?await this.authManager.loginWithRedirect(e?.anonymousId,n):a=await this.authManager.login(e?.anonymousId,n);}return a&&(identify({passportId:a.profile.sub}),this.passportEventEmitter.emit("loggedIn",a)),a?a.profile:null},"login",!1)}async loginCallback(){await c(()=>this.authManager.loginCallback(),"loginCallback",!1).then(e=>{e&&(identify({passportId:e.profile.sub}),this.passportEventEmitter.emit("loggedIn",e));});}async loginWithPKCEFlow(e,r){return c(async()=>await this.authManager.getPKCEAuthorizationUrl(e,r),"loginWithPKCEFlow",!1)}async loginWithPKCEFlowCallback(e,r){return c(async()=>{let i=await this.authManager.loginWithPKCEFlowCallback(e,r);return this.passportEventEmitter.emit("loggedIn",i),i.profile},"loginWithPKCEFlowCallback",!1)}async storeTokens(e){return c(async()=>{let r=await this.authManager.storeTokens(e);return this.passportEventEmitter.emit("loggedIn",r),r.profile},"storeTokens",!1)}async logout(){return c(async()=>{await this.authManager.logout(),this.passportEventEmitter.emit("loggedOut");},"logout",!1)}async getLogoutUrl(){return c(async()=>(await this.authManager.removeUser(),this.passportEventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0),"getLogoutUrl",!1)}async logoutSilentCallback(e){return c(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback",!1)}async getUserInfo(){return c(async()=>(await this.authManager.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return c(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return c(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1)}async getLinkedAddresses(){return c(async()=>{let e=await this.authManager.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`},{data:i}=await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r});return i.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=trackFlow("passport","linkExternalWallet"),i=await this.authManager.getUser();if(!i)throw new l("User is not logged in","NOT_LOGGED_IN_ERROR");let a=isUserImx(i),n=isUserZkEvm(i);if(!a&&!n)throw new l("User has not been registered","USER_NOT_REGISTERED_ERROR");let o={Authorization:`Bearer ${i.accessToken}`},p={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};try{return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:p},{headers:o})).data}}catch(s){if(s instanceof Error?trackError("passport","linkExternalWallet",s):r.addEvent("errored"),isAxiosError(s)&&s.response){if(s.response.data&&D(s.response.data)){let{code:f,message:d}=s.response.data;switch(f){case"ALREADY_LINKED":throw new l(d,"LINK_WALLET_ALREADY_LINKED_ERROR");case"MAX_WALLETS_LINKED":throw new l(d,"LINK_WALLET_MAX_WALLETS_LINKED_ERROR");case"DUPLICATE_NONCE":throw new l(d,"LINK_WALLET_DUPLICATE_NONCE_ERROR");case"VALIDATION_ERROR":throw new l(d,"LINK_WALLET_VALIDATION_ERROR");default:throw new l(d,"LINK_WALLET_GENERIC_ERROR")}}else if(s.response.status)throw new l(`Link wallet request failed with status code ${s.response.status}`,"LINK_WALLET_GENERIC_ERROR")}let m="Link wallet request failed";throw s instanceof Error&&(m+=`: ${s.message}`),new l(m,"LINK_WALLET_GENERIC_ERROR")}finally{r.addEvent("End");}}};
|
|
11
|
+
function j(t){return "code"in t&&"message"in t}var u=class extends Error{type;constructor(e,r){super(e),this.type=r;}},R=async(t,e)=>{try{return await t()}catch(r){let i;throw r instanceof u&&r.type==="SERVICE_UNAVAILABLE_ERROR"?new u(r.message,r.type):(isAxiosError(r)&&r.response?.data&&j(r.response.data)?i=r.response.data.message:i=r.message,new u(i,e))}};var S=async t=>R(async()=>{let e=await generateLegacyStarkPrivateKey(t);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");var A=t=>!!t.imx,I=(r=>(r.OptedIn="opted_in",r.Unsubscribed="unsubscribed",r))(I||{});async function w({user:t,starkSigner:e,request:r,exchangesApi:i}){return R(async()=>{let{ethAddress:a}=t.imx,n=r.amount,s=await i.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:n,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=s.data,l=await e.signMessage(p),c={sender_stark_key:s.data.sender_stark_key||m,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:l},d={Authorization:`Bearer ${t.accessToken}`},o=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:c},{headers:d});return {sent_signature:o?.data.sent_signature,status:o?.data.status?.toString(),time:o?.data.time,transfer_id:o?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var L="ERC721";async function D({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return R(async()=>{let{ethAddress:n}=e.imx,s=r.sell.type===L?"1":r.sell.amount,m=r.buy.type===L?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},l={user:n,amount_buy:m,token_buy:convertToSignableToken(r.buy),amount_sell:s,token_sell:convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},c=await i.getSignableOrder({getSignableOrderRequestV3:l},{headers:p});await a.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,o=await t.signMessage(d),f=c.data,T={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:o,amount_buy:f.amount_buy,amount_sell:f.amount_sell,asset_id_buy:f.asset_id_buy,asset_id_sell:f.asset_id_sell,expiration_timestamp:f.expiration_timestamp,nonce:f.nonce,stark_key:f.stark_key,vault_id_buy:f.vault_id_buy,vault_id_sell:f.vault_id_sell}};return {...(await i.createOrderV3(T,{headers:p})).data}},"CREATE_ORDER_ERROR")}async function N({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return R(async()=>{let n={order_id:r.order_id},s={Authorization:`Bearer ${t.accessToken}`},m=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:n},{headers:s});await a.evaluateImxTransaction({payloadHash:m.data.payload_hash});let{payload_hash:p}=m.data,l=await e.signMessage(p),c=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:l}},{headers:s});return {order_id:c.data.order_id,status:c.data.status}},"CANCEL_ORDER_ERROR")}async function O({ethSigner:t,starkSigner:e,imxApiClients:r},i){return R(async()=>{let[a,n]=await Promise.all([t.getAddress(),e.getAddress()]),s=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:m,payload_hash:p}=s.data,[l,c]=await Promise.all([signRaw(m,t),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:l,ether_key:a,stark_signature:c,stark_key:n}})).data},"USER_REGISTRATION_ERROR")}async function M({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return R(async()=>{let{ethAddress:n}=r.imx,s={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:n},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:s},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.payload_hash});let{payload_hash:l}=p.data,c=await i.signMessage(l),{data:d}=p,o={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:c,order_id:t?.order_id,fee_info:d.fee_info,amount_buy:d.amount_buy,amount_sell:d.amount_sell,asset_id_buy:d.asset_id_buy,asset_id_sell:d.asset_id_sell,expiration_timestamp:d.expiration_timestamp,nonce:d.nonce,stark_key:d.stark_key,vault_id_buy:d.vault_id_buy,vault_id_sell:d.vault_id_sell}},{data:f}=await e.createTradeV3(o,{headers:m});return f},"CREATE_TRADE_ERROR")}var G="ERC721";async function K({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return R(async()=>{let n=t.type===G?"1":t.amount,s={sender:i.imx.ethAddress,token:convertToSignableToken(t),amount:n,receiver:t.receiver},m={Authorization:`Bearer ${i.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.payload_hash});let l=p.data,{payload_hash:c}=l,d=await r.signMessage(c),o=await r.getAddress(),T={createTransferRequest:{sender_stark_key:l.sender_stark_key||o,sender_vault_id:l.sender_vault_id,receiver_stark_key:l.receiver_stark_key,receiver_vault_id:l.receiver_vault_id,asset_id:l.asset_id,amount:l.amount,nonce:l.nonce,expiration_timestamp:l.expiration_timestamp,stark_signature:d}},{data:y}=await e.createTransferV1(T,{headers:m});return {sent_signature:y.sent_signature,status:y.status?.toString(),time:y.time,transfer_id:y.transfer_id}},"TRANSFER_ERROR")}async function X({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return R(async()=>{let{ethAddress:n}=t.imx,s=r.map(o=>({amount:"1",token:convertToSignableToken({type:G,tokenId:o.tokenId,tokenAddress:o.tokenAddress}),receiver:o.receiver})),m={Authorization:`Bearer ${t.accessToken}`},p=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:s}},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.signable_responses[0]?.payload_hash});let l=await Promise.all(p.data.signable_responses.map(async o=>{let f=await e.signMessage(o.payload_hash);return {sender_vault_id:o.sender_vault_id,receiver_stark_key:o.receiver_stark_key,receiver_vault_id:o.receiver_vault_id,asset_id:o.asset_id,amount:o.amount,nonce:o.nonce,expiration_timestamp:o.expiration_timestamp,stark_signature:f}})),c={sender_stark_key:p.data.sender_stark_key,requests:l};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:c},{headers:m}))?.data.transfer_ids}},"TRANSFER_ERROR")}async function W(t){await retryWithDelay(async()=>{let e=await t.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function b(t,e,r,i,a){return R(async()=>{try{let n=await O({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await W(i),n}catch(n){if(te.isAxiosError(n)&&n.response?.status===409)return await W(i),{tx_hash:""};throw n}},"USER_REGISTRATION_ERROR")}var E=async(t,e,r=!0,i)=>t();var C=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:n,guardianClient:s}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=n,this.guardianClient=s,this.#i(),i.on(AuthEvents.LOGGED_OUT,this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await S(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.authManager.getUser();if(!e||!this.starkSigner)throw new u("User has been logged out","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()]);if(!A(e))throw new u("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:r}}async transfer(e){return E(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return K({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})())}async registerOffchain(){return E(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await b(this.magicTEESigner,r,e,this.authManager,this.imxApiClients)})}async isRegisteredOffchain(){return E(async()=>!!(await this.#r()).imx)}isRegisteredOnchain(){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return E(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return D({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})())}async cancelOrder(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.guardianClient})})())}async createTrade(e){return E(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return M({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})())}async batchNftTransfer(e){return E(()=>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.guardianClient})})())}async exchangeTransfer(e){return E(async()=>{let{user:r,starkSigner:i}=await this.#e();return w({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})})}deposit(e){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,r){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return E(async()=>{let e=await this.#r();if(!A(e))throw new u("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)})}};var P=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:n,guardianClient:s}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=n,this.guardianClient=s;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new u("Failed to initialise","WALLET_CONNECTION_ERROR");return new C({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var q=(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 u(a,"INVALID_CONFIGURATION")}},x=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:n,popupOverlayOptions:s,...m}){if(q(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=n||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=s||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)q(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 fe=t=>t.overrides?createConfig({basePath:t.overrides.imxPublicApiDomain}):t.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),Ee=t=>{if(t.overrides?.imxApiClients)return t.overrides.imxApiClients;let e=fe(t);return new ImxApiClients(e)},_e=t=>{let e=new x(t),r=new Auth({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=r.getAuthManager(),a=r.getConfig(),n=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}),s=new MultiRollupApiClients(e.multiRollupConfig),m=t.overrides?t.overrides.immutableXClient:new IMXClient({baseConfig:t.baseConfig}),p=new GuardianClient({config:n,authManager:i,guardianApi:s.guardianApi,authConfig:a}),l=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),c=new MagicTEESigner(i,l),d=Ee(t),o=new P({authManager:i,immutableXClient:m,magicTEESigner:c,passportEventEmitter:r.eventEmitter,imxApiClients:d,guardianClient:p});return {passportConfig:e,auth:r,passportImxProviderFactory:o,environment:t.baseConfig.environment,walletConfig:n}},v=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=_e(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 this.passportImxProviderFactory.getProviderSilent()}async connectImx(){return this.passportImxProviderFactory.getProvider()}async connectEvm(e={announceProvider:!0}){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({auth:this.auth,chains:[i],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,announceProvider:e?.announceProvider??!0})}async login(e){let r=e?{useCachedSession:e.useCachedSession,anonymousId:e.anonymousId,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions?{directLoginMethod:e.directLoginOptions.directLoginMethod,email:e.directLoginOptions.email,marketingConsentStatus:e.directLoginOptions.marketingConsentStatus}:void 0}:void 0,i=await this.auth.loginWithOptions(r);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return (await this.auth.getUser())?.profile}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 getLinkedAddresses(this.auth,this.multiRollupApiClients)}async linkExternalWallet(e){return linkExternalWallet(this.auth,this.multiRollupApiClients,e)}};
|
|
12
12
|
|
|
13
|
-
export {
|
|
13
|
+
export { I as MarketingConsentStatus, v as Passport, u as PassportError };
|
package/dist/node/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var ee = require('axios');
|
|
4
4
|
var generatedClients = require('@imtbl/generated-clients');
|
|
5
5
|
var xClient = require('@imtbl/x-client');
|
|
6
6
|
var config = require('@imtbl/config');
|
|
@@ -11,9 +11,9 @@ var toolkit = require('@imtbl/toolkit');
|
|
|
11
11
|
|
|
12
12
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var ee__default = /*#__PURE__*/_interopDefault(ee);
|
|
15
15
|
|
|
16
|
-
function A(t){return "code"in t&&"message"in t}var l=class extends Error{type;constructor(e,r){super(e),this.type=r;}},E=async(t,e)=>{try{return await t()}catch(r){let i;throw r instanceof l&&r.type==="SERVICE_UNAVAILABLE_ERROR"?new l(r.message,r.type):(re.isAxiosError(r)&&r.response?.data&&A(r.response.data)?i=r.response.data.message:i=r.message,new l(i,e))}};var C=t=>!!t.imx,b=(r=>(r.OptedIn="opted_in",r.Unsubscribed="unsubscribed",r))(b||{});var I=async t=>E(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(t);return xClient.createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function v({user:t,starkSigner:e,request:r,exchangesApi:i}){return E(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}}),u=await e.getAddress(),{payload_hash:n}=o.data,m=await e.signMessage(n),g={sender_stark_key:o.data.sender_stark_key||u,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:m},d={Authorization:`Bearer ${t.accessToken}`},p=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:g},{headers:d});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var L="ERC721";async function U({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return E(async()=>{let{ethAddress:s}=e.imx,o=r.sell.type===L?"1":r.sell.amount,u=r.buy.type===L?"1":r.buy.amount,n={Authorization:`Bearer ${e.accessToken}`},m={user:s,amount_buy:u,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},g=await i.getSignableOrder({getSignableOrderRequestV3:m},{headers:n});await a.evaluateImxTransaction({payloadHash:g.data.payload_hash});let{payload_hash:d}=g.data,p=await t.signMessage(d),R=g.data,f={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:p,amount_buy:R.amount_buy,amount_sell:R.amount_sell,asset_id_buy:R.asset_id_buy,asset_id_sell:R.asset_id_sell,expiration_timestamp:R.expiration_timestamp,nonce:R.nonce,stark_key:R.stark_key,vault_id_buy:R.vault_id_buy,vault_id_sell:R.vault_id_sell}};return {...(await i.createOrderV3(f,{headers:n})).data}},"CREATE_ORDER_ERROR")}async function N({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return E(async()=>{let s={order_id:r.order_id},o={Authorization:`Bearer ${t.accessToken}`},u=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:s},{headers:o});await a.evaluateImxTransaction({payloadHash:u.data.payload_hash});let{payload_hash:n}=u.data,m=await e.signMessage(n),g=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:m}},{headers:o});return {order_id:g.data.order_id,status:g.data.status}},"CANCEL_ORDER_ERROR")}async function O({ethSigner:t,starkSigner:e,imxApiClients:r},i){return E(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:u,payload_hash:n}=o.data,[m,g]=await Promise.all([toolkit.signRaw(u,t),e.signMessage(n)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:m,ether_key:a,stark_signature:g,stark_key:s}})).data},"USER_REGISTRATION_ERROR")}async function M({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return E(async()=>{let{ethAddress:s}=r.imx,o={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:s},u={Authorization:`Bearer ${r.accessToken}`},n=await e.getSignableTrade({getSignableTradeRequest:o},{headers:u});await a.evaluateImxTransaction({payloadHash:n.data.payload_hash});let{payload_hash:m}=n.data,g=await i.signMessage(m),{data:d}=n,p={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:g,order_id:t?.order_id,fee_info:d.fee_info,amount_buy:d.amount_buy,amount_sell:d.amount_sell,asset_id_buy:d.asset_id_buy,asset_id_sell:d.asset_id_sell,expiration_timestamp:d.expiration_timestamp,nonce:d.nonce,stark_key:d.stark_key,vault_id_buy:d.vault_id_buy,vault_id_sell:d.vault_id_sell}},{data:R}=await e.createTradeV3(p,{headers:u});return R},"CREATE_TRADE_ERROR")}var G="ERC721";async function W({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return E(async()=>{let s=t.type===G?"1":t.amount,o={sender:i.imx.ethAddress,token:toolkit.convertToSignableToken(t),amount:s,receiver:t.receiver},u={Authorization:`Bearer ${i.accessToken}`},n=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:u});await a.evaluateImxTransaction({payloadHash:n.data.payload_hash});let m=n.data,{payload_hash:g}=m,d=await r.signMessage(g),p=await r.getAddress(),f={createTransferRequest:{sender_stark_key:m.sender_stark_key||p,sender_vault_id:m.sender_vault_id,receiver_stark_key:m.receiver_stark_key,receiver_vault_id:m.receiver_vault_id,asset_id:m.asset_id,amount:m.amount,nonce:m.nonce,expiration_timestamp:m.expiration_timestamp,stark_signature:d}},{data:_}=await e.createTransferV1(f,{headers:u});return {sent_signature:_.sent_signature,status:_.status?.toString(),time:_.time,transfer_id:_.transfer_id}},"TRANSFER_ERROR")}async function K({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return E(async()=>{let{ethAddress:s}=t.imx,o=r.map(p=>({amount:"1",token:toolkit.convertToSignableToken({type:G,tokenId:p.tokenId,tokenAddress:p.tokenAddress}),receiver:p.receiver})),u={Authorization:`Bearer ${t.accessToken}`},n=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:s,signable_requests:o}},{headers:u});await a.evaluateImxTransaction({payloadHash:n.data.signable_responses[0]?.payload_hash});let m=await Promise.all(n.data.signable_responses.map(async p=>{let R=await e.signMessage(p.payload_hash);return {sender_vault_id:p.sender_vault_id,receiver_stark_key:p.receiver_stark_key,receiver_vault_id:p.receiver_vault_id,asset_id:p.asset_id,amount:p.amount,nonce:p.nonce,expiration_timestamp:p.expiration_timestamp,stark_signature:R}})),g={sender_stark_key:n.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:g},{headers:u}))?.data.transfer_ids}},"TRANSFER_ERROR")}async function X(t){await wallet.retryWithDelay(async()=>{let e=await t.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function x(t,e,r,i,a){return E(async()=>{try{let s=await O({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await X(i),s}catch(s){if(re__default.default.isAxiosError(s)&&s.response?.status===409)return await X(i),{tx_hash:""};throw s}},"USER_REGISTRATION_ERROR")}var c=async(t,e,r=!0,i)=>t();var y=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:s,guardianClient:o}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=s,this.guardianClient=o,this.#i(),i.on("loggedOut",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.authManager.getUser();if(!e||!this.starkSigner)throw new l("User has been logged out","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()]);if(!C(e))throw new l("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:r}}async transfer(e){return c(()=>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.guardianClient})})())}async registerOffchain(){return c(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await x(this.magicTEESigner,r,e,this.authManager,this.imxApiClients)})}async isRegisteredOffchain(){return c(async()=>!!(await this.#r()).imx)}isRegisteredOnchain(){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return c(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return U({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})())}async cancelOrder(e){return c(()=>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.guardianClient})})())}async createTrade(e){return c(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return M({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})())}async batchNftTransfer(e){return c(()=>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.guardianClient})})())}async exchangeTransfer(e){return c(async()=>{let{user:r,starkSigner:i}=await this.#e();return v({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})})}deposit(e){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,r){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return c(async()=>{let e=await this.#r();if(!C(e))throw new l("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)})}};var T=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:s,guardianClient:o}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=s,this.guardianClient=o;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new l("Failed to initialise","WALLET_CONNECTION_ERROR");return new y({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var q=(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 l(a,"INVALID_CONFIGURATION")}},P=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:i,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:s,popupOverlayOptions:o,...u}){if(q(u,["clientId","redirectUri"]),this.oidcConfiguration=u,this.baseConfig=e,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=s||!1,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)q(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 ae=(...t)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...t);},F={warn:ae};var Se=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=Se(t);return new generatedClients.ImxApiClients(e)},Ie=t=>{let e=new P(t),r=new auth.AuthConfiguration({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=new auth.EmbeddedLoginPrompt(r),a=new auth.AuthManager(r,i),s=new auth.ConfirmationScreen(r),o=new generatedClients.MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),u=new wallet.MagicTEESigner(a,o),n=new generatedClients.MultiRollupApiClients(e.multiRollupConfig),m=new wallet.WalletConfiguration({baseConfig:t.baseConfig,overrides:t.overrides,jsonRpcReferrer:t.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:t.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled}),g=new wallet.TypedEventEmitter,d=t.overrides?t.overrides.immutableXClient:new xClient.IMXClient({baseConfig:t.baseConfig}),p=new wallet.GuardianClient({confirmationScreen:s,config:m,authManager:a,guardianApi:n.guardianApi}),R=be(t),f=new T({authManager:a,immutableXClient:d,magicTEESigner:u,passportEventEmitter:g,imxApiClients:R,guardianClient:p});return {config:e,authManager:a,authConfig:r,walletConfig:m,magicTEESigner:u,confirmationScreen:s,embeddedLoginPrompt:i,immutableXClient:d,multiRollupApiClients:n,passportEventEmitter:g,passportImxProviderFactory:f,guardianClient:p}},S=class{authManager;walletConfig;confirmationScreen;embeddedLoginPrompt;immutableXClient;magicTEESigner;multiRollupApiClients;passportImxProviderFactory;passportEventEmitter;guardianClient;constructor(e){let r=Ie(e);this.walletConfig=r.walletConfig,this.authManager=r.authManager,this.magicTEESigner=r.magicTEESigner,this.confirmationScreen=r.confirmationScreen,this.embeddedLoginPrompt=r.embeddedLoginPrompt,this.immutableXClient=r.immutableXClient,this.multiRollupApiClients=r.multiRollupApiClients,this.passportEventEmitter=r.passportEventEmitter,this.passportImxProviderFactory=r.passportImxProviderFactory,this.guardianClient=r.guardianClient,metrics.setPassportClientId(e.clientId),metrics.track("passport","initialise");}async connectImxSilent(){return c(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return c(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return c(async()=>{let r=null;try{r=await this.authManager.getUser();}catch{}let i=new wallet.ZkEvmProvider({passportEventEmitter:this.passportEventEmitter,authManager:this.authManager,config:this.walletConfig,multiRollupApiClients:this.multiRollupApiClients,guardianClient:this.guardianClient,ethSigner:this.magicTEESigner,user:r});return e?.announceProvider&&wallet.announceProvider({info:wallet.passportProviderInfo,provider:i}),i},"connectEvm",!1)}async login(e){return c(async()=>{let{useCachedSession:r=!1,useSilentLogin:i}=e||{},a=null;try{a=await this.authManager.getUser();}catch(s){if(s instanceof Error&&!s.message.includes("Unknown or invalid refresh token")&&metrics.trackError("passport","login",s),r)throw s;F.warn("Failed to retrieve a cached user session",s);}if(!a&&i)a=await this.authManager.forceUserRefresh();else if(!a&&!r){let s=e?.directLoginOptions?{directLoginMethod:e.directLoginOptions.directLoginMethod,email:e.directLoginOptions.email,marketingConsentStatus:e.directLoginOptions.marketingConsentStatus}:void 0;e?.useRedirectFlow?await this.authManager.loginWithRedirect(e?.anonymousId,s):a=await this.authManager.login(e?.anonymousId,s);}return a&&(metrics.identify({passportId:a.profile.sub}),this.passportEventEmitter.emit("loggedIn",a)),a?a.profile:null},"login",!1)}async loginCallback(){await c(()=>this.authManager.loginCallback(),"loginCallback",!1).then(e=>{e&&(metrics.identify({passportId:e.profile.sub}),this.passportEventEmitter.emit("loggedIn",e));});}async loginWithPKCEFlow(e,r){return c(async()=>await this.authManager.getPKCEAuthorizationUrl(e,r),"loginWithPKCEFlow",!1)}async loginWithPKCEFlowCallback(e,r){return c(async()=>{let i=await this.authManager.loginWithPKCEFlowCallback(e,r);return this.passportEventEmitter.emit("loggedIn",i),i.profile},"loginWithPKCEFlowCallback",!1)}async storeTokens(e){return c(async()=>{let r=await this.authManager.storeTokens(e);return this.passportEventEmitter.emit("loggedIn",r),r.profile},"storeTokens",!1)}async logout(){return c(async()=>{await this.authManager.logout(),this.passportEventEmitter.emit("loggedOut");},"logout",!1)}async getLogoutUrl(){return c(async()=>(await this.authManager.removeUser(),this.passportEventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0),"getLogoutUrl",!1)}async logoutSilentCallback(e){return c(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback",!1)}async getUserInfo(){return c(async()=>(await this.authManager.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return c(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return c(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1)}async getLinkedAddresses(){return c(async()=>{let e=await this.authManager.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`},{data:i}=await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r});return i.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=metrics.trackFlow("passport","linkExternalWallet"),i=await this.authManager.getUser();if(!i)throw new l("User is not logged in","NOT_LOGGED_IN_ERROR");let a=auth.isUserImx(i),s=auth.isUserZkEvm(i);if(!a&&!s)throw new l("User has not been registered","USER_NOT_REGISTERED_ERROR");let o={Authorization:`Bearer ${i.accessToken}`},u={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};try{return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:u},{headers:o})).data}}catch(n){if(n instanceof Error?metrics.trackError("passport","linkExternalWallet",n):r.addEvent("errored"),re.isAxiosError(n)&&n.response){if(n.response.data&&A(n.response.data)){let{code:g,message:d}=n.response.data;switch(g){case"ALREADY_LINKED":throw new l(d,"LINK_WALLET_ALREADY_LINKED_ERROR");case"MAX_WALLETS_LINKED":throw new l(d,"LINK_WALLET_MAX_WALLETS_LINKED_ERROR");case"DUPLICATE_NONCE":throw new l(d,"LINK_WALLET_DUPLICATE_NONCE_ERROR");case"VALIDATION_ERROR":throw new l(d,"LINK_WALLET_VALIDATION_ERROR");default:throw new l(d,"LINK_WALLET_GENERIC_ERROR")}}else if(n.response.status)throw new l(`Link wallet request failed with status code ${n.response.status}`,"LINK_WALLET_GENERIC_ERROR")}let m="Link wallet request failed";throw n instanceof Error&&(m+=`: ${n.message}`),new l(m,"LINK_WALLET_GENERIC_ERROR")}finally{r.addEvent("End");}}};
|
|
16
|
+
function Z(t){return "code"in t&&"message"in t}var u=class extends Error{type;constructor(e,r){super(e),this.type=r;}},g=async(t,e)=>{try{return await t()}catch(r){let i;throw r instanceof u&&r.type==="SERVICE_UNAVAILABLE_ERROR"?new u(r.message,r.type):(ee.isAxiosError(r)&&r.response?.data&&Z(r.response.data)?i=r.response.data.message:i=r.message,new u(i,e))}};var k=async t=>g(async()=>{let e=await xClient.generateLegacyStarkPrivateKey(t);return xClient.createStarkSigner(e)},"WALLET_CONNECTION_ERROR");var x=t=>!!t.imx,v=(r=>(r.OptedIn="opted_in",r.Unsubscribed="unsubscribed",r))(v||{});async function S({user:t,starkSigner:e,request:r,exchangesApi:i}){return g(async()=>{let{ethAddress:a}=t.imx,n=r.amount,s=await i.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(r),amount:n,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=s.data,l=await e.signMessage(p),c={sender_stark_key:s.data.sender_stark_key||m,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:l},d={Authorization:`Bearer ${t.accessToken}`},o=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:c},{headers:d});return {sent_signature:o?.data.sent_signature,status:o?.data.status?.toString(),time:o?.data.time,transfer_id:o?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var w="ERC721";async function U({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return g(async()=>{let{ethAddress:n}=e.imx,s=r.sell.type===w?"1":r.sell.amount,m=r.buy.type===w?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},l={user:n,amount_buy:m,token_buy:toolkit.convertToSignableToken(r.buy),amount_sell:s,token_sell:toolkit.convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},c=await i.getSignableOrder({getSignableOrderRequestV3:l},{headers:p});await a.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,o=await t.signMessage(d),h=c.data,P={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:o,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(P,{headers:p})).data}},"CREATE_ORDER_ERROR")}async function L({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return g(async()=>{let n={order_id:r.order_id},s={Authorization:`Bearer ${t.accessToken}`},m=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:n},{headers:s});await a.evaluateImxTransaction({payloadHash:m.data.payload_hash});let{payload_hash:p}=m.data,l=await e.signMessage(p),c=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:l}},{headers:s});return {order_id:c.data.order_id,status:c.data.status}},"CANCEL_ORDER_ERROR")}async function T({ethSigner:t,starkSigner:e,imxApiClients:r},i){return g(async()=>{let[a,n]=await Promise.all([t.getAddress(),e.getAddress()]),s=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:m,payload_hash:p}=s.data,[l,c]=await Promise.all([toolkit.signRaw(m,t),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:l,ether_key:a,stark_signature:c,stark_key:n}})).data},"USER_REGISTRATION_ERROR")}async function D({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return g(async()=>{let{ethAddress:n}=r.imx,s={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:n},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:s},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.payload_hash});let{payload_hash:l}=p.data,c=await i.signMessage(l),{data:d}=p,o={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:c,order_id:t?.order_id,fee_info:d.fee_info,amount_buy:d.amount_buy,amount_sell:d.amount_sell,asset_id_buy:d.asset_id_buy,asset_id_sell:d.asset_id_sell,expiration_timestamp:d.expiration_timestamp,nonce:d.nonce,stark_key:d.stark_key,vault_id_buy:d.vault_id_buy,vault_id_sell:d.vault_id_sell}},{data:h}=await e.createTradeV3(o,{headers:m});return h},"CREATE_TRADE_ERROR")}var M="ERC721";async function B({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return g(async()=>{let n=t.type===M?"1":t.amount,s={sender:i.imx.ethAddress,token:toolkit.convertToSignableToken(t),amount:n,receiver:t.receiver},m={Authorization:`Bearer ${i.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.payload_hash});let l=p.data,{payload_hash:c}=l,d=await r.signMessage(c),o=await r.getAddress(),P={createTransferRequest:{sender_stark_key:l.sender_stark_key||o,sender_vault_id:l.sender_vault_id,receiver_stark_key:l.receiver_stark_key,receiver_vault_id:l.receiver_vault_id,asset_id:l.asset_id,amount:l.amount,nonce:l.nonce,expiration_timestamp:l.expiration_timestamp,stark_signature:d}},{data:E}=await e.createTransferV1(P,{headers:m});return {sent_signature:E.sent_signature,status:E.status?.toString(),time:E.time,transfer_id:E.transfer_id}},"TRANSFER_ERROR")}async function G({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return g(async()=>{let{ethAddress:n}=t.imx,s=r.map(o=>({amount:"1",token:toolkit.convertToSignableToken({type:M,tokenId:o.tokenId,tokenAddress:o.tokenAddress}),receiver:o.receiver})),m={Authorization:`Bearer ${t.accessToken}`},p=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:s}},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.signable_responses[0]?.payload_hash});let l=await Promise.all(p.data.signable_responses.map(async o=>{let h=await e.signMessage(o.payload_hash);return {sender_vault_id:o.sender_vault_id,receiver_stark_key:o.receiver_stark_key,receiver_vault_id:o.receiver_vault_id,asset_id:o.asset_id,amount:o.amount,nonce:o.nonce,expiration_timestamp:o.expiration_timestamp,stark_signature:h}})),c={sender_stark_key:p.data.sender_stark_key,requests:l};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:c},{headers:m}))?.data.transfer_ids}},"TRANSFER_ERROR")}async function K(t){await wallet.retryWithDelay(async()=>{let e=await t.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function A(t,e,r,i,a){return g(async()=>{try{let n=await T({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await K(i),n}catch(n){if(ee__default.default.isAxiosError(n)&&n.response?.status===409)return await K(i),{tx_hash:""};throw n}},"USER_REGISTRATION_ERROR")}var R=async(t,e,r=!0,i)=>t();var _=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:n,guardianClient:s}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=n,this.guardianClient=s,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 k(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.authManager.getUser();if(!e||!this.starkSigner)throw new u("User has been logged out","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()]);if(!x(e))throw new u("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:r}}async transfer(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return B({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})())}async registerOffchain(){return R(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await A(this.magicTEESigner,r,e,this.authManager,this.imxApiClients)})}async isRegisteredOffchain(){return R(async()=>!!(await this.#r()).imx)}isRegisteredOnchain(){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return U({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})())}async cancelOrder(e){return R(()=>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.guardianClient})})())}async createTrade(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return D({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})())}async batchNftTransfer(e){return R(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:i}=await this.#e();return G({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})())}async exchangeTransfer(e){return R(async()=>{let{user:r,starkSigner:i}=await this.#e();return S({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})})}deposit(e){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,r){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return R(async()=>{let e=await this.#r();if(!x(e))throw new u("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)})}};var y=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:n,guardianClient:s}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=n,this.guardianClient=s;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new u("Failed to initialise","WALLET_CONNECTION_ERROR");return new _({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var 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 u(a,"INVALID_CONFIGURATION")}},C=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:n,popupOverlayOptions:s,...m}){if(V(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=n||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=s||{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 he=t=>t.overrides?generatedClients.createConfig({basePath:t.overrides.imxPublicApiDomain}):t.baseConfig.environment===config.Environment.SANDBOX?generatedClients.imxApiConfig.getSandbox():generatedClients.imxApiConfig.getProduction(),Re=t=>{if(t.overrides?.imxApiClients)return t.overrides.imxApiClients;let e=he(t);return new generatedClients.ImxApiClients(e)},fe=t=>{let e=new C(t),r=new auth.Auth({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=r.getAuthManager(),a=r.getConfig(),n=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}),s=new generatedClients.MultiRollupApiClients(e.multiRollupConfig),m=t.overrides?t.overrides.immutableXClient:new xClient.IMXClient({baseConfig:t.baseConfig}),p=new wallet.GuardianClient({config:n,authManager:i,guardianApi:s.guardianApi,authConfig:a}),l=new generatedClients.MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),c=new wallet.MagicTEESigner(i,l),d=Re(t),o=new y({authManager:i,immutableXClient:m,magicTEESigner:c,passportEventEmitter:r.eventEmitter,imxApiClients:d,guardianClient:p});return {passportConfig:e,auth:r,passportImxProviderFactory:o,environment:t.baseConfig.environment,walletConfig:n}},b=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=fe(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 this.passportImxProviderFactory.getProviderSilent()}async connectImx(){return this.passportImxProviderFactory.getProvider()}async connectEvm(e={announceProvider:!0}){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({auth:this.auth,chains:[i],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,announceProvider:e?.announceProvider??!0})}async login(e){let r=e?{useCachedSession:e.useCachedSession,anonymousId:e.anonymousId,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions?{directLoginMethod:e.directLoginOptions.directLoginMethod,email:e.directLoginOptions.email,marketingConsentStatus:e.directLoginOptions.marketingConsentStatus}:void 0}:void 0,i=await this.auth.loginWithOptions(r);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return (await this.auth.getUser())?.profile}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 wallet.getLinkedAddresses(this.auth,this.multiRollupApiClients)}async linkExternalWallet(e){return wallet.linkExternalWallet(this.auth,this.multiRollupApiClients,e)}};
|
|
17
17
|
|
|
18
18
|
Object.defineProperty(exports, "JsonRpcError", {
|
|
19
19
|
enumerable: true,
|
|
@@ -31,6 +31,6 @@ Object.defineProperty(exports, "RpcErrorCode", {
|
|
|
31
31
|
enumerable: true,
|
|
32
32
|
get: function () { return wallet.RpcErrorCode; }
|
|
33
33
|
});
|
|
34
|
-
exports.MarketingConsentStatus =
|
|
35
|
-
exports.Passport =
|
|
36
|
-
exports.PassportError =
|
|
34
|
+
exports.MarketingConsentStatus = v;
|
|
35
|
+
exports.Passport = b;
|
|
36
|
+
exports.PassportError = u;
|
package/dist/node/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import ee, { isAxiosError } from 'axios';
|
|
2
|
+
import { MultiRollupApiClients, MagicTeeApiClients, createConfig, multiRollupConfig, ImxApiClients, imxApiConfig } from '@imtbl/generated-clients';
|
|
3
3
|
import { IMXClient, generateLegacyStarkPrivateKey, createStarkSigner } from '@imtbl/x-client';
|
|
4
4
|
import { Environment } from '@imtbl/config';
|
|
5
|
-
import { setPassportClientId
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { setPassportClientId } from '@imtbl/metrics';
|
|
6
|
+
import { Auth, AuthEvents } from '@imtbl/auth';
|
|
7
|
+
import { connectWallet, getLinkedAddresses, linkExternalWallet, WalletConfiguration, GuardianClient, MagicTEESigner, retryWithDelay } from '@imtbl/wallet';
|
|
8
8
|
export { JsonRpcError, ProviderErrorCode, ProviderEvent, RpcErrorCode } from '@imtbl/wallet';
|
|
9
9
|
import { convertToSignableToken, signRaw } from '@imtbl/toolkit';
|
|
10
10
|
|
|
11
|
-
function A(t){return "code"in t&&"message"in t}var l=class extends Error{type;constructor(e,r){super(e),this.type=r;}},E=async(t,e)=>{try{return await t()}catch(r){let i;throw r instanceof l&&r.type==="SERVICE_UNAVAILABLE_ERROR"?new l(r.message,r.type):(isAxiosError(r)&&r.response?.data&&A(r.response.data)?i=r.response.data.message:i=r.message,new l(i,e))}};var C=t=>!!t.imx,b=(r=>(r.OptedIn="opted_in",r.Unsubscribed="unsubscribed",r))(b||{});var I=async t=>E(async()=>{let e=await generateLegacyStarkPrivateKey(t);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");async function v({user:t,starkSigner:e,request:r,exchangesApi:i}){return E(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}}),u=await e.getAddress(),{payload_hash:n}=o.data,m=await e.signMessage(n),g={sender_stark_key:o.data.sender_stark_key||u,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:m},d={Authorization:`Bearer ${t.accessToken}`},p=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:g},{headers:d});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var L="ERC721";async function U({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return E(async()=>{let{ethAddress:s}=e.imx,o=r.sell.type===L?"1":r.sell.amount,u=r.buy.type===L?"1":r.buy.amount,n={Authorization:`Bearer ${e.accessToken}`},m={user:s,amount_buy:u,token_buy:convertToSignableToken(r.buy),amount_sell:o,token_sell:convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},g=await i.getSignableOrder({getSignableOrderRequestV3:m},{headers:n});await a.evaluateImxTransaction({payloadHash:g.data.payload_hash});let{payload_hash:d}=g.data,p=await t.signMessage(d),R=g.data,f={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:p,amount_buy:R.amount_buy,amount_sell:R.amount_sell,asset_id_buy:R.asset_id_buy,asset_id_sell:R.asset_id_sell,expiration_timestamp:R.expiration_timestamp,nonce:R.nonce,stark_key:R.stark_key,vault_id_buy:R.vault_id_buy,vault_id_sell:R.vault_id_sell}};return {...(await i.createOrderV3(f,{headers:n})).data}},"CREATE_ORDER_ERROR")}async function N({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return E(async()=>{let s={order_id:r.order_id},o={Authorization:`Bearer ${t.accessToken}`},u=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:s},{headers:o});await a.evaluateImxTransaction({payloadHash:u.data.payload_hash});let{payload_hash:n}=u.data,m=await e.signMessage(n),g=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:m}},{headers:o});return {order_id:g.data.order_id,status:g.data.status}},"CANCEL_ORDER_ERROR")}async function O({ethSigner:t,starkSigner:e,imxApiClients:r},i){return E(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:u,payload_hash:n}=o.data,[m,g]=await Promise.all([signRaw(u,t),e.signMessage(n)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:m,ether_key:a,stark_signature:g,stark_key:s}})).data},"USER_REGISTRATION_ERROR")}async function M({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return E(async()=>{let{ethAddress:s}=r.imx,o={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:s},u={Authorization:`Bearer ${r.accessToken}`},n=await e.getSignableTrade({getSignableTradeRequest:o},{headers:u});await a.evaluateImxTransaction({payloadHash:n.data.payload_hash});let{payload_hash:m}=n.data,g=await i.signMessage(m),{data:d}=n,p={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:g,order_id:t?.order_id,fee_info:d.fee_info,amount_buy:d.amount_buy,amount_sell:d.amount_sell,asset_id_buy:d.asset_id_buy,asset_id_sell:d.asset_id_sell,expiration_timestamp:d.expiration_timestamp,nonce:d.nonce,stark_key:d.stark_key,vault_id_buy:d.vault_id_buy,vault_id_sell:d.vault_id_sell}},{data:R}=await e.createTradeV3(p,{headers:u});return R},"CREATE_TRADE_ERROR")}var G="ERC721";async function W({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return E(async()=>{let s=t.type===G?"1":t.amount,o={sender:i.imx.ethAddress,token:convertToSignableToken(t),amount:s,receiver:t.receiver},u={Authorization:`Bearer ${i.accessToken}`},n=await e.getSignableTransferV1({getSignableTransferRequest:o},{headers:u});await a.evaluateImxTransaction({payloadHash:n.data.payload_hash});let m=n.data,{payload_hash:g}=m,d=await r.signMessage(g),p=await r.getAddress(),f={createTransferRequest:{sender_stark_key:m.sender_stark_key||p,sender_vault_id:m.sender_vault_id,receiver_stark_key:m.receiver_stark_key,receiver_vault_id:m.receiver_vault_id,asset_id:m.asset_id,amount:m.amount,nonce:m.nonce,expiration_timestamp:m.expiration_timestamp,stark_signature:d}},{data:_}=await e.createTransferV1(f,{headers:u});return {sent_signature:_.sent_signature,status:_.status?.toString(),time:_.time,transfer_id:_.transfer_id}},"TRANSFER_ERROR")}async function K({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return E(async()=>{let{ethAddress:s}=t.imx,o=r.map(p=>({amount:"1",token:convertToSignableToken({type:G,tokenId:p.tokenId,tokenAddress:p.tokenAddress}),receiver:p.receiver})),u={Authorization:`Bearer ${t.accessToken}`},n=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:s,signable_requests:o}},{headers:u});await a.evaluateImxTransaction({payloadHash:n.data.signable_responses[0]?.payload_hash});let m=await Promise.all(n.data.signable_responses.map(async p=>{let R=await e.signMessage(p.payload_hash);return {sender_vault_id:p.sender_vault_id,receiver_stark_key:p.receiver_stark_key,receiver_vault_id:p.receiver_vault_id,asset_id:p.asset_id,amount:p.amount,nonce:p.nonce,expiration_timestamp:p.expiration_timestamp,stark_signature:R}})),g={sender_stark_key:n.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:g},{headers:u}))?.data.transfer_ids}},"TRANSFER_ERROR")}async function X(t){await retryWithDelay(async()=>{let e=await t.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function x(t,e,r,i,a){return E(async()=>{try{let s=await O({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await X(i),s}catch(s){if(re.isAxiosError(s)&&s.response?.status===409)return await X(i),{tx_hash:""};throw s}},"USER_REGISTRATION_ERROR")}var c=async(t,e,r=!0,i)=>t();var y=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:s,guardianClient:o}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=s,this.guardianClient=o,this.#i(),i.on("loggedOut",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.authManager.getUser();if(!e||!this.starkSigner)throw new l("User has been logged out","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()]);if(!C(e))throw new l("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:r}}async transfer(e){return c(()=>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.guardianClient})})())}async registerOffchain(){return c(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await x(this.magicTEESigner,r,e,this.authManager,this.imxApiClients)})}async isRegisteredOffchain(){return c(async()=>!!(await this.#r()).imx)}isRegisteredOnchain(){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return c(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return U({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})())}async cancelOrder(e){return c(()=>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.guardianClient})})())}async createTrade(e){return c(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return M({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})())}async batchNftTransfer(e){return c(()=>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.guardianClient})})())}async exchangeTransfer(e){return c(async()=>{let{user:r,starkSigner:i}=await this.#e();return v({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})})}deposit(e){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,r){throw new l("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return c(async()=>{let e=await this.#r();if(!C(e))throw new l("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)})}};var T=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:s,guardianClient:o}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=s,this.guardianClient=o;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new l("Failed to initialise","WALLET_CONNECTION_ERROR");return new y({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var q=(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 l(a,"INVALID_CONFIGURATION")}},P=class{authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;magicTeeBasePath="https://tee.express.magiclabs.com";magicTeeTimeout=1e4;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;forceScwDeployBeforeMessageSignature;popupOverlayOptions;constructor({baseConfig:e,overrides:r,crossSdkBridgeEnabled:i,jsonRpcReferrer:a,forceScwDeployBeforeMessageSignature:s,popupOverlayOptions:o,...u}){if(q(u,["clientId","redirectUri"]),this.oidcConfiguration=u,this.baseConfig=e,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=s||!1,this.popupOverlayOptions=o||{disableGenericPopupOverlay:!1,disableBlockedPopupOverlay:!1,disableHeadlessLoginPromptOverlay:!1},r)q(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 ae=(...t)=>{if(typeof process>"u")return;process?.env?.JEST_WORKER_ID===void 0&&console.warn(...t);},F={warn:ae};var Se=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=Se(t);return new ImxApiClients(e)},Ie=t=>{let e=new P(t),r=new AuthConfiguration({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=new EmbeddedLoginPrompt(r),a=new AuthManager(r,i),s=new ConfirmationScreen(r),o=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),u=new MagicTEESigner(a,o),n=new MultiRollupApiClients(e.multiRollupConfig),m=new WalletConfiguration({baseConfig:t.baseConfig,overrides:t.overrides,jsonRpcReferrer:t.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:t.forceScwDeployBeforeMessageSignature,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled}),g=new TypedEventEmitter,d=t.overrides?t.overrides.immutableXClient:new IMXClient({baseConfig:t.baseConfig}),p=new GuardianClient({confirmationScreen:s,config:m,authManager:a,guardianApi:n.guardianApi}),R=be(t),f=new T({authManager:a,immutableXClient:d,magicTEESigner:u,passportEventEmitter:g,imxApiClients:R,guardianClient:p});return {config:e,authManager:a,authConfig:r,walletConfig:m,magicTEESigner:u,confirmationScreen:s,embeddedLoginPrompt:i,immutableXClient:d,multiRollupApiClients:n,passportEventEmitter:g,passportImxProviderFactory:f,guardianClient:p}},S=class{authManager;walletConfig;confirmationScreen;embeddedLoginPrompt;immutableXClient;magicTEESigner;multiRollupApiClients;passportImxProviderFactory;passportEventEmitter;guardianClient;constructor(e){let r=Ie(e);this.walletConfig=r.walletConfig,this.authManager=r.authManager,this.magicTEESigner=r.magicTEESigner,this.confirmationScreen=r.confirmationScreen,this.embeddedLoginPrompt=r.embeddedLoginPrompt,this.immutableXClient=r.immutableXClient,this.multiRollupApiClients=r.multiRollupApiClients,this.passportEventEmitter=r.passportEventEmitter,this.passportImxProviderFactory=r.passportImxProviderFactory,this.guardianClient=r.guardianClient,setPassportClientId(e.clientId),track("passport","initialise");}async connectImxSilent(){return c(()=>this.passportImxProviderFactory.getProviderSilent(),"connectImxSilent",!1)}async connectImx(){return c(()=>this.passportImxProviderFactory.getProvider(),"connectImx",!1)}async connectEvm(e={announceProvider:!0}){return c(async()=>{let r=null;try{r=await this.authManager.getUser();}catch{}let i=new ZkEvmProvider({passportEventEmitter:this.passportEventEmitter,authManager:this.authManager,config:this.walletConfig,multiRollupApiClients:this.multiRollupApiClients,guardianClient:this.guardianClient,ethSigner:this.magicTEESigner,user:r});return e?.announceProvider&&announceProvider({info:passportProviderInfo,provider:i}),i},"connectEvm",!1)}async login(e){return c(async()=>{let{useCachedSession:r=!1,useSilentLogin:i}=e||{},a=null;try{a=await this.authManager.getUser();}catch(s){if(s instanceof Error&&!s.message.includes("Unknown or invalid refresh token")&&trackError("passport","login",s),r)throw s;F.warn("Failed to retrieve a cached user session",s);}if(!a&&i)a=await this.authManager.forceUserRefresh();else if(!a&&!r){let s=e?.directLoginOptions?{directLoginMethod:e.directLoginOptions.directLoginMethod,email:e.directLoginOptions.email,marketingConsentStatus:e.directLoginOptions.marketingConsentStatus}:void 0;e?.useRedirectFlow?await this.authManager.loginWithRedirect(e?.anonymousId,s):a=await this.authManager.login(e?.anonymousId,s);}return a&&(identify({passportId:a.profile.sub}),this.passportEventEmitter.emit("loggedIn",a)),a?a.profile:null},"login",!1)}async loginCallback(){await c(()=>this.authManager.loginCallback(),"loginCallback",!1).then(e=>{e&&(identify({passportId:e.profile.sub}),this.passportEventEmitter.emit("loggedIn",e));});}async loginWithPKCEFlow(e,r){return c(async()=>await this.authManager.getPKCEAuthorizationUrl(e,r),"loginWithPKCEFlow",!1)}async loginWithPKCEFlowCallback(e,r){return c(async()=>{let i=await this.authManager.loginWithPKCEFlowCallback(e,r);return this.passportEventEmitter.emit("loggedIn",i),i.profile},"loginWithPKCEFlowCallback",!1)}async storeTokens(e){return c(async()=>{let r=await this.authManager.storeTokens(e);return this.passportEventEmitter.emit("loggedIn",r),r.profile},"storeTokens",!1)}async logout(){return c(async()=>{await this.authManager.logout(),this.passportEventEmitter.emit("loggedOut");},"logout",!1)}async getLogoutUrl(){return c(async()=>(await this.authManager.removeUser(),this.passportEventEmitter.emit("loggedOut"),await this.authManager.getLogoutUrl()||void 0),"getLogoutUrl",!1)}async logoutSilentCallback(e){return c(()=>this.authManager.logoutSilentCallback(e),"logoutSilentCallback",!1)}async getUserInfo(){return c(async()=>(await this.authManager.getUser())?.profile,"getUserInfo",!1)}async getIdToken(){return c(async()=>(await this.authManager.getUser())?.idToken,"getIdToken",!1)}async getAccessToken(){return c(async()=>(await this.authManager.getUser())?.accessToken,"getAccessToken",!1)}async getLinkedAddresses(){return c(async()=>{let e=await this.authManager.getUser();if(!e?.profile.sub)return [];let r={Authorization:`Bearer ${e.accessToken}`},{data:i}=await this.multiRollupApiClients.passportProfileApi.getUserInfo({headers:r});return i.linked_addresses},"getLinkedAddresses",!1)}async linkExternalWallet(e){let r=trackFlow("passport","linkExternalWallet"),i=await this.authManager.getUser();if(!i)throw new l("User is not logged in","NOT_LOGGED_IN_ERROR");let a=isUserImx(i),s=isUserZkEvm(i);if(!a&&!s)throw new l("User has not been registered","USER_NOT_REGISTERED_ERROR");let o={Authorization:`Bearer ${i.accessToken}`},u={type:e.type,wallet_address:e.walletAddress,signature:e.signature,nonce:e.nonce};try{return {...(await this.multiRollupApiClients.passportProfileApi.linkWalletV2({linkWalletV2Request:u},{headers:o})).data}}catch(n){if(n instanceof Error?trackError("passport","linkExternalWallet",n):r.addEvent("errored"),isAxiosError(n)&&n.response){if(n.response.data&&A(n.response.data)){let{code:g,message:d}=n.response.data;switch(g){case"ALREADY_LINKED":throw new l(d,"LINK_WALLET_ALREADY_LINKED_ERROR");case"MAX_WALLETS_LINKED":throw new l(d,"LINK_WALLET_MAX_WALLETS_LINKED_ERROR");case"DUPLICATE_NONCE":throw new l(d,"LINK_WALLET_DUPLICATE_NONCE_ERROR");case"VALIDATION_ERROR":throw new l(d,"LINK_WALLET_VALIDATION_ERROR");default:throw new l(d,"LINK_WALLET_GENERIC_ERROR")}}else if(n.response.status)throw new l(`Link wallet request failed with status code ${n.response.status}`,"LINK_WALLET_GENERIC_ERROR")}let m="Link wallet request failed";throw n instanceof Error&&(m+=`: ${n.message}`),new l(m,"LINK_WALLET_GENERIC_ERROR")}finally{r.addEvent("End");}}};
|
|
11
|
+
function Z(t){return "code"in t&&"message"in t}var u=class extends Error{type;constructor(e,r){super(e),this.type=r;}},g=async(t,e)=>{try{return await t()}catch(r){let i;throw r instanceof u&&r.type==="SERVICE_UNAVAILABLE_ERROR"?new u(r.message,r.type):(isAxiosError(r)&&r.response?.data&&Z(r.response.data)?i=r.response.data.message:i=r.message,new u(i,e))}};var k=async t=>g(async()=>{let e=await generateLegacyStarkPrivateKey(t);return createStarkSigner(e)},"WALLET_CONNECTION_ERROR");var x=t=>!!t.imx,v=(r=>(r.OptedIn="opted_in",r.Unsubscribed="unsubscribed",r))(v||{});async function S({user:t,starkSigner:e,request:r,exchangesApi:i}){return g(async()=>{let{ethAddress:a}=t.imx,n=r.amount,s=await i.getExchangeSignableTransfer({id:r.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:n,receiver:r.receiver}}),m=await e.getAddress(),{payload_hash:p}=s.data,l=await e.signMessage(p),c={sender_stark_key:s.data.sender_stark_key||m,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:l},d={Authorization:`Bearer ${t.accessToken}`},o=await i.createExchangeTransfer({id:r.transactionID,createTransferRequest:c},{headers:d});return {sent_signature:o?.data.sent_signature,status:o?.data.status?.toString(),time:o?.data.time,transfer_id:o?.data.transfer_id}},"EXCHANGE_TRANSFER_ERROR")}var w="ERC721";async function U({starkSigner:t,user:e,request:r,ordersApi:i,guardianClient:a}){return g(async()=>{let{ethAddress:n}=e.imx,s=r.sell.type===w?"1":r.sell.amount,m=r.buy.type===w?"1":r.buy.amount,p={Authorization:`Bearer ${e.accessToken}`},l={user:n,amount_buy:m,token_buy:convertToSignableToken(r.buy),amount_sell:s,token_sell:convertToSignableToken(r.sell),fees:r.fees,split_fees:!0,expiration_timestamp:r.expiration_timestamp},c=await i.getSignableOrder({getSignableOrderRequestV3:l},{headers:p});await a.evaluateImxTransaction({payloadHash:c.data.payload_hash});let{payload_hash:d}=c.data,o=await t.signMessage(d),h=c.data,P={createOrderRequest:{include_fees:!0,fees:r.fees,stark_signature:o,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(P,{headers:p})).data}},"CREATE_ORDER_ERROR")}async function L({user:t,starkSigner:e,request:r,ordersApi:i,guardianClient:a}){return g(async()=>{let n={order_id:r.order_id},s={Authorization:`Bearer ${t.accessToken}`},m=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:n},{headers:s});await a.evaluateImxTransaction({payloadHash:m.data.payload_hash});let{payload_hash:p}=m.data,l=await e.signMessage(p),c=await i.cancelOrderV3({id:r.order_id.toString(),cancelOrderRequest:{order_id:r.order_id,stark_signature:l}},{headers:s});return {order_id:c.data.order_id,status:c.data.status}},"CANCEL_ORDER_ERROR")}async function T({ethSigner:t,starkSigner:e,imxApiClients:r},i){return g(async()=>{let[a,n]=await Promise.all([t.getAddress(),e.getAddress()]),s=await r.usersApi.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:m,payload_hash:p}=s.data,[l,c]=await Promise.all([signRaw(m,t),e.signMessage(p)]);return (await r.usersApi.registerPassportUserV2({authorization:`Bearer ${i}`,registerPassportUserRequest:{eth_signature:l,ether_key:a,stark_signature:c,stark_key:n}})).data},"USER_REGISTRATION_ERROR")}async function D({request:t,tradesApi:e,user:r,starkSigner:i,guardianClient:a}){return g(async()=>{let{ethAddress:n}=r.imx,s={expiration_timestamp:t.expiration_timestamp,fees:t.fees,order_id:t.order_id,user:n},m={Authorization:`Bearer ${r.accessToken}`},p=await e.getSignableTrade({getSignableTradeRequest:s},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.payload_hash});let{payload_hash:l}=p.data,c=await i.signMessage(l),{data:d}=p,o={createTradeRequest:{include_fees:!0,fees:t?.fees,stark_signature:c,order_id:t?.order_id,fee_info:d.fee_info,amount_buy:d.amount_buy,amount_sell:d.amount_sell,asset_id_buy:d.asset_id_buy,asset_id_sell:d.asset_id_sell,expiration_timestamp:d.expiration_timestamp,nonce:d.nonce,stark_key:d.stark_key,vault_id_buy:d.vault_id_buy,vault_id_sell:d.vault_id_sell}},{data:h}=await e.createTradeV3(o,{headers:m});return h},"CREATE_TRADE_ERROR")}var M="ERC721";async function B({request:t,transfersApi:e,starkSigner:r,user:i,guardianClient:a}){return g(async()=>{let n=t.type===M?"1":t.amount,s={sender:i.imx.ethAddress,token:convertToSignableToken(t),amount:n,receiver:t.receiver},m={Authorization:`Bearer ${i.accessToken}`},p=await e.getSignableTransferV1({getSignableTransferRequest:s},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.payload_hash});let l=p.data,{payload_hash:c}=l,d=await r.signMessage(c),o=await r.getAddress(),P={createTransferRequest:{sender_stark_key:l.sender_stark_key||o,sender_vault_id:l.sender_vault_id,receiver_stark_key:l.receiver_stark_key,receiver_vault_id:l.receiver_vault_id,asset_id:l.asset_id,amount:l.amount,nonce:l.nonce,expiration_timestamp:l.expiration_timestamp,stark_signature:d}},{data:E}=await e.createTransferV1(P,{headers:m});return {sent_signature:E.sent_signature,status:E.status?.toString(),time:E.time,transfer_id:E.transfer_id}},"TRANSFER_ERROR")}async function G({user:t,starkSigner:e,request:r,transfersApi:i,guardianClient:a}){return g(async()=>{let{ethAddress:n}=t.imx,s=r.map(o=>({amount:"1",token:convertToSignableToken({type:M,tokenId:o.tokenId,tokenAddress:o.tokenAddress}),receiver:o.receiver})),m={Authorization:`Bearer ${t.accessToken}`},p=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:s}},{headers:m});await a.evaluateImxTransaction({payloadHash:p.data.signable_responses[0]?.payload_hash});let l=await Promise.all(p.data.signable_responses.map(async o=>{let h=await e.signMessage(o.payload_hash);return {sender_vault_id:o.sender_vault_id,receiver_stark_key:o.receiver_stark_key,receiver_vault_id:o.receiver_vault_id,asset_id:o.asset_id,amount:o.amount,nonce:o.nonce,expiration_timestamp:o.expiration_timestamp,stark_signature:h}})),c={sender_stark_key:p.data.sender_stark_key,requests:l};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:c},{headers:m}))?.data.transfer_ids}},"TRANSFER_ERROR")}async function K(t){await retryWithDelay(async()=>{let e=await t.forceUserRefresh();return e?.imx?e:Promise.reject(new Error("user wallet addresses not exist"))});}async function A(t,e,r,i,a){return g(async()=>{try{let n=await T({ethSigner:t,starkSigner:e,imxApiClients:a},r.accessToken);return await K(i),n}catch(n){if(ee.isAxiosError(n)&&n.response?.status===409)return await K(i),{tx_hash:""};throw n}},"USER_REGISTRATION_ERROR")}var R=async(t,e,r=!0,i)=>t();var _=class{authManager;immutableXClient;guardianClient;imxApiClients;magicTEESigner;starkSigner;signerInitialisationError;constructor({authManager:e,immutableXClient:r,passportEventEmitter:i,magicTEESigner:a,imxApiClients:n,guardianClient:s}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=a,this.imxApiClients=n,this.guardianClient=s,this.#i(),i.on(AuthEvents.LOGGED_OUT,this.handleLogout);}handleLogout=()=>{this.starkSigner=void 0;};#i(){this.starkSigner=new Promise(async e=>{try{e(await k(this.magicTEESigner));}catch(r){this.signerInitialisationError=r,e(void 0);}});}async#r(){let e=await this.authManager.getUser();if(!e||!this.starkSigner)throw new u("User has been logged out","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()]);if(!x(e))throw new u("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return {user:e,starkSigner:r}}async transfer(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return B({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})())}async registerOffchain(){return R(async()=>{let[e,r]=await Promise.all([this.#r(),this.#t()]);return await A(this.magicTEESigner,r,e,this.authManager,this.imxApiClients)})}async isRegisteredOffchain(){return R(async()=>!!(await this.#r()).imx)}isRegisteredOnchain(){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async createOrder(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return U({request:e,user:r,starkSigner:i,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})})())}async cancelOrder(e){return R(()=>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.guardianClient})})())}async createTrade(e){return R(()=>this.guardianClient.withDefaultConfirmationScreenTask(async()=>{let{user:r,starkSigner:i}=await this.#e();return D({request:e,user:r,starkSigner:i,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})})())}async batchNftTransfer(e){return R(()=>this.guardianClient.withConfirmationScreenTask({width:480,height:784})(async()=>{let{user:r,starkSigner:i}=await this.#e();return G({request:e,user:r,starkSigner:i,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})})())}async exchangeTransfer(e){return R(async()=>{let{user:r,starkSigner:i}=await this.#e();return S({request:e,user:r,starkSigner:i,exchangesApi:this.immutableXClient.exchangeApi})})}deposit(e){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}prepareWithdrawal(e){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}completeWithdrawal(e,r){throw new u("Operation not supported","OPERATION_NOT_SUPPORTED_ERROR")}async getAddress(){return R(async()=>{let e=await this.#r();if(!x(e))throw new u("User has not been registered with StarkEx","USER_NOT_REGISTERED_ERROR");return Promise.resolve(e.imx.ethAddress)})}};var y=class{authManager;immutableXClient;magicTEESigner;passportEventEmitter;imxApiClients;guardianClient;constructor({authManager:e,immutableXClient:r,magicTEESigner:i,passportEventEmitter:a,imxApiClients:n,guardianClient:s}){this.authManager=e,this.immutableXClient=r,this.magicTEESigner=i,this.passportEventEmitter=a,this.imxApiClients=n,this.guardianClient=s;}async getProvider(){let e=await this.authManager.getUserOrLogin();return this.createProviderInstance(e)}async getProviderSilent(){let e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async createProviderInstance(e){if(!e.idToken)throw new u("Failed to initialise","WALLET_CONNECTION_ERROR");return new _({authManager:this.authManager,immutableXClient:this.immutableXClient,passportEventEmitter:this.passportEventEmitter,magicTEESigner:this.magicTEESigner,imxApiClients:this.imxApiClients,guardianClient:this.guardianClient})}};var 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 u(a,"INVALID_CONFIGURATION")}},C=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:n,popupOverlayOptions:s,...m}){if(V(m,["clientId","redirectUri"]),this.oidcConfiguration=m,this.baseConfig=e,this.overrides=r,this.crossSdkBridgeEnabled=i||!1,this.forceScwDeployBeforeMessageSignature=n||!1,this.jsonRpcReferrer=a,this.popupOverlayOptions=s||{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 he=t=>t.overrides?createConfig({basePath:t.overrides.imxPublicApiDomain}):t.baseConfig.environment===Environment.SANDBOX?imxApiConfig.getSandbox():imxApiConfig.getProduction(),Re=t=>{if(t.overrides?.imxApiClients)return t.overrides.imxApiClients;let e=he(t);return new ImxApiClients(e)},fe=t=>{let e=new C(t),r=new Auth({...t,authenticationDomain:e.authenticationDomain,crossSdkBridgeEnabled:t.crossSdkBridgeEnabled,popupOverlayOptions:t.popupOverlayOptions,passportDomain:e.passportDomain}),i=r.getAuthManager(),a=r.getConfig(),n=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}),s=new MultiRollupApiClients(e.multiRollupConfig),m=t.overrides?t.overrides.immutableXClient:new IMXClient({baseConfig:t.baseConfig}),p=new GuardianClient({config:n,authManager:i,guardianApi:s.guardianApi,authConfig:a}),l=new MagicTeeApiClients({basePath:e.magicTeeBasePath,timeout:e.magicTeeTimeout,magicPublishableApiKey:e.magicPublishableApiKey,magicProviderId:e.magicProviderId}),c=new MagicTEESigner(i,l),d=Re(t),o=new y({authManager:i,immutableXClient:m,magicTEESigner:c,passportEventEmitter:r.eventEmitter,imxApiClients:d,guardianClient:p});return {passportConfig:e,auth:r,passportImxProviderFactory:o,environment:t.baseConfig.environment,walletConfig:n}},b=class{auth;passportImxProviderFactory;multiRollupApiClients;environment;passportConfig;constructor(e){let r=fe(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 this.passportImxProviderFactory.getProviderSilent()}async connectImx(){return this.passportImxProviderFactory.getProvider()}async connectEvm(e={announceProvider:!0}){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({auth:this.auth,chains:[i],crossSdkBridgeEnabled:this.passportConfig.crossSdkBridgeEnabled,jsonRpcReferrer:this.passportConfig.jsonRpcReferrer,forceScwDeployBeforeMessageSignature:this.passportConfig.forceScwDeployBeforeMessageSignature,passportEventEmitter:this.auth.eventEmitter,announceProvider:e?.announceProvider??!0})}async login(e){let r=e?{useCachedSession:e.useCachedSession,anonymousId:e.anonymousId,useSilentLogin:e.useSilentLogin,useRedirectFlow:e.useRedirectFlow,directLoginOptions:e.directLoginOptions?{directLoginMethod:e.directLoginOptions.directLoginMethod,email:e.directLoginOptions.email,marketingConsentStatus:e.directLoginOptions.marketingConsentStatus}:void 0}:void 0,i=await this.auth.loginWithOptions(r);return i?i.profile:null}async loginCallback(){await this.auth.loginCallback();}async logout(){await this.auth.logout();}async getUserInfo(){return (await this.auth.getUser())?.profile}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 getLinkedAddresses(this.auth,this.multiRollupApiClients)}async linkExternalWallet(e){return linkExternalWallet(this.auth,this.multiRollupApiClients,e)}};
|
|
12
12
|
|
|
13
|
-
export {
|
|
13
|
+
export { v as MarketingConsentStatus, b as Passport, u as PassportError };
|
package/dist/types/Passport.d.ts
CHANGED
|
@@ -1,36 +1,25 @@
|
|
|
1
1
|
import { IMXProvider } from '@imtbl/x-provider';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { ZkEvmProvider, WalletConfiguration
|
|
6
|
-
import {
|
|
2
|
+
import { Environment } from '@imtbl/config';
|
|
3
|
+
import { Auth, UserProfile, DeviceTokenResponse } from '@imtbl/auth';
|
|
4
|
+
import type { DirectLoginOptions } from '@imtbl/auth';
|
|
5
|
+
import { ZkEvmProvider, WalletConfiguration } from '@imtbl/wallet';
|
|
6
|
+
import type { LinkWalletParams, LinkedWallet } from '@imtbl/wallet';
|
|
7
|
+
import { PassportModuleConfiguration, ConnectEvmArguments, LoginArguments } from './types';
|
|
7
8
|
import { PassportImxProviderFactory } from './starkEx';
|
|
8
9
|
import { PassportConfiguration } from './config';
|
|
9
10
|
export declare const buildPrivateVars: (passportModuleConfiguration: PassportModuleConfiguration) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
authConfig: AuthConfiguration;
|
|
13
|
-
walletConfig: WalletConfiguration;
|
|
14
|
-
magicTEESigner: MagicTEESigner;
|
|
15
|
-
confirmationScreen: ConfirmationScreen;
|
|
16
|
-
embeddedLoginPrompt: EmbeddedLoginPrompt;
|
|
17
|
-
immutableXClient: IMXClient;
|
|
18
|
-
multiRollupApiClients: MultiRollupApiClients;
|
|
19
|
-
passportEventEmitter: TypedEventEmitter<PassportEventMap>;
|
|
11
|
+
passportConfig: PassportConfiguration;
|
|
12
|
+
auth: Auth;
|
|
20
13
|
passportImxProviderFactory: PassportImxProviderFactory;
|
|
21
|
-
|
|
14
|
+
environment: Environment;
|
|
15
|
+
walletConfig: WalletConfiguration;
|
|
22
16
|
};
|
|
23
17
|
export declare class Passport {
|
|
24
|
-
private readonly
|
|
25
|
-
private readonly walletConfig;
|
|
26
|
-
private readonly confirmationScreen;
|
|
27
|
-
private readonly embeddedLoginPrompt;
|
|
28
|
-
private readonly immutableXClient;
|
|
29
|
-
private readonly magicTEESigner;
|
|
30
|
-
private readonly multiRollupApiClients;
|
|
18
|
+
private readonly auth;
|
|
31
19
|
private readonly passportImxProviderFactory;
|
|
32
|
-
private readonly
|
|
33
|
-
private readonly
|
|
20
|
+
private readonly multiRollupApiClients;
|
|
21
|
+
private readonly environment;
|
|
22
|
+
private readonly passportConfig;
|
|
34
23
|
constructor(passportModuleConfiguration: PassportModuleConfiguration);
|
|
35
24
|
/**
|
|
36
25
|
* Attempts to connect to IMX silently without user interaction.
|
|
@@ -45,13 +34,15 @@ export declare class Passport {
|
|
|
45
34
|
connectImx(): Promise<IMXProvider>;
|
|
46
35
|
/**
|
|
47
36
|
* Connects to EVM and optionally announces the provider.
|
|
37
|
+
* Uses: Auth + Wallet packages
|
|
48
38
|
* @param {Object} options - Configuration options
|
|
49
39
|
* @param {boolean} options.announceProvider - Whether to announce the provider via EIP-6963 for wallet discovery (defaults to true)
|
|
50
40
|
* @returns {Promise<Provider>} The EVM provider instance
|
|
51
41
|
*/
|
|
52
42
|
connectEvm(options?: ConnectEvmArguments): Promise<ZkEvmProvider>;
|
|
53
43
|
/**
|
|
54
|
-
* Logs in the user.
|
|
44
|
+
* Logs in the user (works for both zkEVM and IMX).
|
|
45
|
+
* Uses: Auth class
|
|
55
46
|
* @param {Object} [options] - Login options
|
|
56
47
|
* @param {boolean} [options.useCachedSession] - If true, attempts to use a cached session without user interaction.
|
|
57
48
|
* @param {boolean} [options.useSilentLogin] - If true, attempts silent authentication without user interaction.
|
|
@@ -68,34 +59,55 @@ export declare class Passport {
|
|
|
68
59
|
login(options?: LoginArguments): Promise<UserProfile | null>;
|
|
69
60
|
/**
|
|
70
61
|
* Handles the login callback from the authentication service.
|
|
62
|
+
* Uses: Auth class
|
|
71
63
|
* @returns {Promise<void>} A promise that resolves when the login callback is handled
|
|
72
64
|
*/
|
|
73
65
|
loginCallback(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Logs out the user (works for both zkEVM and IMX).
|
|
68
|
+
* Uses: Auth class
|
|
69
|
+
* @returns {Promise<void>} A promise that resolves when the user is logged out
|
|
70
|
+
*/
|
|
71
|
+
logout(): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Retrieves the current user's information.
|
|
74
|
+
* Uses: Auth class
|
|
75
|
+
* @returns {Promise<UserProfile | undefined>} A promise that resolves to the user profile if logged in, undefined otherwise
|
|
76
|
+
*/
|
|
77
|
+
getUserInfo(): Promise<UserProfile | undefined>;
|
|
78
|
+
/**
|
|
79
|
+
* Retrieves the ID token.
|
|
80
|
+
* @returns {Promise<string | undefined>} A promise that resolves to the ID token if available, undefined otherwise
|
|
81
|
+
*/
|
|
82
|
+
getIdToken(): Promise<string | undefined>;
|
|
83
|
+
/**
|
|
84
|
+
* Retrieves the access token.
|
|
85
|
+
* @returns {Promise<string | undefined>} A promise that resolves to the access token if available, undefined otherwise
|
|
86
|
+
*/
|
|
87
|
+
getAccessToken(): Promise<string | undefined>;
|
|
74
88
|
/**
|
|
75
89
|
* Retrieves the PKCE authorization URL for the login flow.
|
|
90
|
+
* Uses: Auth class
|
|
76
91
|
* @param {DirectLoginOptions} [directLoginOptions] - Optional direct login options
|
|
77
92
|
* @param {string} [imPassportTraceId] - Optional trace ID
|
|
78
93
|
* @returns {Promise<string>} A promise that resolves to the authorization URL
|
|
79
94
|
*/
|
|
80
95
|
loginWithPKCEFlow(directLoginOptions?: DirectLoginOptions, imPassportTraceId?: string): Promise<string>;
|
|
81
96
|
/**
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
97
|
+
* Handles the PKCE login callback.
|
|
98
|
+
* Uses: Auth class
|
|
99
|
+
* @param {string} authorizationCode - The authorization code from the OAuth provider
|
|
100
|
+
* @param {string} state - The state parameter for CSRF protection
|
|
101
|
+
* @returns {Promise<UserProfile>} A promise that resolves to the user profile
|
|
102
|
+
*/
|
|
87
103
|
loginWithPKCEFlowCallback(authorizationCode: string, state: string): Promise<UserProfile>;
|
|
88
104
|
/**
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
105
|
+
* Stores the provided tokens and retrieves the user profile.
|
|
106
|
+
* Uses: Auth class
|
|
107
|
+
* @param {DeviceTokenResponse} tokenResponse - The token response from device flow
|
|
108
|
+
* @returns {Promise<UserProfile>} A promise that resolves to the user profile
|
|
109
|
+
*/
|
|
93
110
|
storeTokens(tokenResponse: DeviceTokenResponse): Promise<UserProfile>;
|
|
94
|
-
/**
|
|
95
|
-
* Logs out the user.
|
|
96
|
-
* @returns {Promise<void>} A promise that resolves when the user is logged out
|
|
97
|
-
*/
|
|
98
|
-
logout(): Promise<void>;
|
|
99
111
|
/**
|
|
100
112
|
* Retrieves the logout URL.
|
|
101
113
|
* @returns {Promise<string | undefined>} A promise that resolves to the logout URL, or undefined if not available
|
|
@@ -107,21 +119,6 @@ export declare class Passport {
|
|
|
107
119
|
* @returns {Promise<void>} A promise that resolves when the silent logout callback is handled
|
|
108
120
|
*/
|
|
109
121
|
logoutSilentCallback(url: string): Promise<void>;
|
|
110
|
-
/**
|
|
111
|
-
* Retrieves the current user's information.
|
|
112
|
-
* @returns {Promise<UserProfile | undefined>} A promise that resolves to the user profile if logged in, undefined otherwise
|
|
113
|
-
*/
|
|
114
|
-
getUserInfo(): Promise<UserProfile | undefined>;
|
|
115
|
-
/**
|
|
116
|
-
* Retrieves the ID token.
|
|
117
|
-
* @returns {Promise<string | undefined>} A promise that resolves to the ID token if available, undefined otherwise
|
|
118
|
-
*/
|
|
119
|
-
getIdToken(): Promise<string | undefined>;
|
|
120
|
-
/**
|
|
121
|
-
* Retrieves the access token.
|
|
122
|
-
* @returns {Promise<string | undefined>} A promise that resolves to the access token if available, undefined otherwise
|
|
123
|
-
*/
|
|
124
|
-
getAccessToken(): Promise<string | undefined>;
|
|
125
122
|
/**
|
|
126
123
|
* Retrieves the addresses linked to the current user's account.
|
|
127
124
|
* @returns {Promise<string[]>} A promise that resolves to an array of linked addresses
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ImmutableConfiguration } from '@imtbl/config';
|
|
2
2
|
import { MultiRollupAPIConfiguration } from '@imtbl/generated-clients';
|
|
3
|
-
import { OidcConfiguration, PassportModuleConfiguration, PopupOverlayOptions } from '../types';
|
|
3
|
+
import { OidcConfiguration, PassportModuleConfiguration, PopupOverlayOptions, PassportOverrides } from '../types';
|
|
4
4
|
export declare class PassportConfiguration {
|
|
5
5
|
readonly authenticationDomain: string;
|
|
6
6
|
readonly passportDomain: string;
|
|
@@ -16,6 +16,8 @@ export declare class PassportConfiguration {
|
|
|
16
16
|
readonly multiRollupConfig: MultiRollupAPIConfiguration;
|
|
17
17
|
readonly crossSdkBridgeEnabled: boolean;
|
|
18
18
|
readonly forceScwDeployBeforeMessageSignature: boolean;
|
|
19
|
+
readonly jsonRpcReferrer?: string;
|
|
19
20
|
readonly popupOverlayOptions: PopupOverlayOptions;
|
|
21
|
+
readonly overrides?: PassportOverrides;
|
|
20
22
|
constructor({ baseConfig, overrides, crossSdkBridgeEnabled, jsonRpcReferrer, forceScwDeployBeforeMessageSignature, popupOverlayOptions, ...oidcConfiguration }: PassportModuleConfiguration);
|
|
21
23
|
}
|
|
@@ -2,13 +2,12 @@ import { AnyToken, IMXClient, NftTransferDetails, TokenAmount, UnsignedExchangeT
|
|
|
2
2
|
import { IMXProvider } from '@imtbl/x-provider';
|
|
3
3
|
import { imx, ImxApiClients } from '@imtbl/generated-clients';
|
|
4
4
|
import { TransactionResponse } from 'ethers';
|
|
5
|
-
import { AuthManager } from '@imtbl/auth';
|
|
6
|
-
import { GuardianClient, MagicTEESigner
|
|
7
|
-
import { PassportEventMap } from '../types';
|
|
5
|
+
import { AuthManager, AuthEventMap, TypedEventEmitter } from '@imtbl/auth';
|
|
6
|
+
import { GuardianClient, MagicTEESigner } from '@imtbl/wallet';
|
|
8
7
|
export interface PassportImxProviderOptions {
|
|
9
8
|
authManager: AuthManager;
|
|
10
9
|
immutableXClient: IMXClient;
|
|
11
|
-
passportEventEmitter: TypedEventEmitter<
|
|
10
|
+
passportEventEmitter: TypedEventEmitter<AuthEventMap>;
|
|
12
11
|
magicTEESigner: MagicTEESigner;
|
|
13
12
|
imxApiClients: ImxApiClients;
|
|
14
13
|
guardianClient: GuardianClient;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { IMXClient } from '@imtbl/x-client';
|
|
2
2
|
import { IMXProvider } from '@imtbl/x-provider';
|
|
3
3
|
import { ImxApiClients } from '@imtbl/generated-clients';
|
|
4
|
-
import { AuthManager } from '@imtbl/auth';
|
|
5
|
-
import { GuardianClient, MagicTEESigner
|
|
6
|
-
import { PassportEventMap } from '../types';
|
|
4
|
+
import { AuthManager, AuthEventMap, TypedEventEmitter } from '@imtbl/auth';
|
|
5
|
+
import { GuardianClient, MagicTEESigner } from '@imtbl/wallet';
|
|
7
6
|
export type PassportImxProviderFactoryInput = {
|
|
8
7
|
authManager: AuthManager;
|
|
9
8
|
immutableXClient: IMXClient;
|
|
10
9
|
magicTEESigner: MagicTEESigner;
|
|
11
|
-
passportEventEmitter: TypedEventEmitter<
|
|
10
|
+
passportEventEmitter: TypedEventEmitter<AuthEventMap>;
|
|
12
11
|
imxApiClients: ImxApiClients;
|
|
13
12
|
guardianClient: GuardianClient;
|
|
14
13
|
};
|
package/dist/types/types.d.ts
CHANGED
|
@@ -8,11 +8,8 @@ import { Flow } from '@imtbl/metrics';
|
|
|
8
8
|
* Additional providers may be supported server-side
|
|
9
9
|
*/
|
|
10
10
|
export type DirectLoginMethod = string;
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
LOGGED_IN = "loggedIn",
|
|
14
|
-
ACCOUNTS_REQUESTED = "accountsRequested"
|
|
15
|
-
}
|
|
11
|
+
export { AuthEvents } from '@imtbl/auth';
|
|
12
|
+
export { WalletEvents } from '@imtbl/wallet';
|
|
16
13
|
export type AccountsRequestedEvent = {
|
|
17
14
|
environment: Environment;
|
|
18
15
|
sendTransaction: (params: Array<any>, flow: Flow) => Promise<string>;
|
|
@@ -20,11 +17,6 @@ export type AccountsRequestedEvent = {
|
|
|
20
17
|
passportClient: string;
|
|
21
18
|
flow?: Flow;
|
|
22
19
|
};
|
|
23
|
-
export interface PassportEventMap extends Record<string, any> {
|
|
24
|
-
[PassportEvents.LOGGED_OUT]: [];
|
|
25
|
-
[PassportEvents.LOGGED_IN]: [User];
|
|
26
|
-
[PassportEvents.ACCOUNTS_REQUESTED]: [AccountsRequestedEvent];
|
|
27
|
-
}
|
|
28
20
|
export type UserProfile = {
|
|
29
21
|
email?: string;
|
|
30
22
|
nickname?: string;
|
|
@@ -79,6 +71,21 @@ export interface PassportOverrides {
|
|
|
79
71
|
orderBookMrBasePath: string;
|
|
80
72
|
passportMrBasePath: string;
|
|
81
73
|
imxApiClients?: ImxApiClients;
|
|
74
|
+
/**
|
|
75
|
+
* Custom chain ID for dev environments (optional)
|
|
76
|
+
* If provided, overrides the default chainId based on environment
|
|
77
|
+
*/
|
|
78
|
+
zkEvmChainId?: number;
|
|
79
|
+
/**
|
|
80
|
+
* Custom chain name for dev environments (optional)
|
|
81
|
+
* Used when zkEvmChainId is provided
|
|
82
|
+
*/
|
|
83
|
+
zkEvmChainName?: string;
|
|
84
|
+
/**
|
|
85
|
+
* Magic TEE base path (optional, for dev/custom environments)
|
|
86
|
+
* Defaults to 'https://tee.express.magiclabs.com'
|
|
87
|
+
*/
|
|
88
|
+
magicTeeBasePath?: string;
|
|
82
89
|
}
|
|
83
90
|
export interface PopupOverlayOptions {
|
|
84
91
|
disableGenericPopupOverlay?: boolean;
|
|
@@ -139,20 +146,7 @@ export type PKCEData = {
|
|
|
139
146
|
state: string;
|
|
140
147
|
verifier: string;
|
|
141
148
|
};
|
|
142
|
-
export type LinkWalletParams
|
|
143
|
-
type: string;
|
|
144
|
-
walletAddress: string;
|
|
145
|
-
signature: string;
|
|
146
|
-
nonce: string;
|
|
147
|
-
};
|
|
148
|
-
export type LinkedWallet = {
|
|
149
|
-
address: string;
|
|
150
|
-
type: string;
|
|
151
|
-
created_at: string;
|
|
152
|
-
updated_at: string;
|
|
153
|
-
name?: string;
|
|
154
|
-
clientName: string;
|
|
155
|
-
};
|
|
149
|
+
export type { LinkWalletParams, LinkedWallet } from '@imtbl/wallet';
|
|
156
150
|
export type ConnectEvmArguments = {
|
|
157
151
|
announceProvider: boolean;
|
|
158
152
|
};
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@imtbl/passport",
|
|
3
3
|
"description": "Passport module for Immutable SDK",
|
|
4
|
-
"version": "2.10.7-alpha.
|
|
4
|
+
"version": "2.10.7-alpha.4",
|
|
5
5
|
"author": "Immutable",
|
|
6
6
|
"bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@0xsequence/abi": "^2.0.25",
|
|
9
9
|
"@0xsequence/core": "^2.0.25",
|
|
10
|
-
"@imtbl/auth": "2.10.7-alpha.
|
|
11
|
-
"@imtbl/wallet": "2.10.7-alpha.
|
|
12
|
-
"@imtbl/config": "2.10.7-alpha.
|
|
13
|
-
"@imtbl/generated-clients": "2.10.7-alpha.
|
|
14
|
-
"@imtbl/metrics": "2.10.7-alpha.
|
|
15
|
-
"@imtbl/toolkit": "2.10.7-alpha.
|
|
16
|
-
"@imtbl/x-client": "2.10.7-alpha.
|
|
17
|
-
"@imtbl/x-provider": "2.10.7-alpha.
|
|
10
|
+
"@imtbl/auth": "2.10.7-alpha.4",
|
|
11
|
+
"@imtbl/wallet": "2.10.7-alpha.4",
|
|
12
|
+
"@imtbl/config": "2.10.7-alpha.4",
|
|
13
|
+
"@imtbl/generated-clients": "2.10.7-alpha.4",
|
|
14
|
+
"@imtbl/metrics": "2.10.7-alpha.4",
|
|
15
|
+
"@imtbl/toolkit": "2.10.7-alpha.4",
|
|
16
|
+
"@imtbl/x-client": "2.10.7-alpha.4",
|
|
17
|
+
"@imtbl/x-provider": "2.10.7-alpha.4",
|
|
18
18
|
"axios": "^1.6.5",
|
|
19
19
|
"ethers": "^6.13.4"
|
|
20
20
|
},
|