@imtbl/x-provider 2.1.16-alpha.0 → 2.1.16-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,10 +3,11 @@ import { convertToSignableToken, signRaw, signMessage } from '@imtbl/toolkit';
3
3
  import { ImxConfiguration, Contracts, EncodingApi, MintsApi, signRegisterEthAddress } from '@imtbl/x-client';
4
4
  import { isAxiosError } from 'axios';
5
5
  import * as N from 'enc-utils';
6
- import { parseUnits, BrowserProvider, toUtf8Bytes } from 'ethers';
7
- import ft from '@metamask/detect-provider';
6
+ import { utils, providers } from 'ethers-v5';
7
+ import { track } from '@imtbl/metrics';
8
+ import Ct from '@metamask/detect-provider';
8
9
  import { Environment } from '@imtbl/config';
9
10
 
10
- function Ue(t,e){return t===e.ethConfiguration.chainID}async function l(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!Ue(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function Y({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.type==="ERC721"?"1":r.amount,o=await i.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:s,receiver:r.receiver}}),{signable_message:d,payload_hash:p}=o.data,g=await signRaw(d,t),E=await e.signMessage(p),f={sender_stark_key:o.data.sender_stark_key,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:E},c=await i.createTransferV1({createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:g});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function Q({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.map(c=>({amount:"1",token:convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let p=await signRaw(d,t),g=[];for(let c of o.data.signable_responses){let w=await e.signMessage(c.payload_hash),T={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:w};g.push(T);}let E={sender_stark_key:o.data.sender_stark_key,requests:g};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:E,xImxEthAddress:a,xImxEthSignature:p}))?.data.transfer_ids}}async function j({signers:t,request:e,config:r}){await l(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),i=e.sell.type==="ERC721"?"1":e.sell.amount,s=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:s,token_buy:convertToSignableToken(e.buy),amount_sell:i,token_sell:convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:p,payload_hash:g}=d.data,E=await signRaw(p,t.ethSigner),f=await t.starkSigner.signMessage(g),c=d.data,w={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:f,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:E};return {...(await a.createOrderV3(w)).data}}async function J({signers:t,request:e,config:r}){let n=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:i,payload_hash:s}=a.data,o=await signRaw(i,t.ethSigner),d=await t.starkSigner.signMessage(s),p=await t.ethSigner.getAddress(),g=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:p,xImxEthSignature:o});return {order_id:g.data.order_id,status:g.data.status}}async function ee(t,e){await l(t.ethSigner,e.immutableXConfig);let r=new imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),i=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:s,payload_hash:o}=i.data,d=await signRaw(s,t.ethSigner),p=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:p,stark_key:a}})).data}async function te(t,e){try{let n=await new imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function _(t,e,r){await l(e,r.immutableXConfig);let n=r.immutableXConfig,a=Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(i){if(i.reason==="USER_UNREGISTERED")return !1;throw i}}var h=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function re(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await l(r,t.config);let a=t.type==="ERC721"?"1":t.amount,i=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:convertToSignableToken(t),amount:a}}),{signable_message:s,payload_hash:o}=i.data,d=await n.signMessage(o),{ethAddress:p,ethSignature:g}=await signMessage(s,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:h(i.data.sender_stark_key),sender_vault_id:h(i.data.sender_vault_id),receiver_stark_key:h(i.data.receiver_stark_key),receiver_vault_id:h(i.data.receiver_vault_id),amount:a,asset_id:h(i.data.asset_id),expiration_timestamp:h(i.data.expiration_timestamp),nonce:h(i.data.nonce),stark_signature:d},xImxEthAddress:p,xImxEthSignature:g})).data}async function C(t,e,r,n){return (await new imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function v(t,e,r,n){return Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function ze(t,e,r){let n=await C("asset","ETH",r);return await v(t,e,n.asset_id,r)}async function Ke(t,e,r,n){let a=await C("asset","ERC20",n,{token_address:r});return await v(t,e,a.asset_id,n)}async function je(t,e,r,n,a,i){try{let s=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await C("mintable-asset","ERC721",i,{id:r.tokenId,token_address:r.tokenAddress,...s.data.blueprint&&{blueprint:s.data.blueprint}});return await v(t,e,o.asset_id,i)}catch(s){if(s.response?.status===404){let o=await C("asset","ERC721",i,{token_id:r.tokenId,token_address:r.tokenAddress});return await v(t,e,o.asset_id,i)}throw s}}async function x(t,e,r,n,a,i){switch(r.type){case"ETH":return await ze(t,e,i);case"ERC20":return await Ke(t,e,r.tokenAddress,i);case"ERC721":return await je(t,e,r,n,a,i);default:throw new Error("Unsupported token type")}}async function I(t,e,r,n,a){let i=new EncodingApi(a.apiConfiguration),s=new MintsApi(a.apiConfiguration),o=await x(t,e,n,i,s,a),d=await x(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}async function ae(t,e,r,n,a,i){let s=new EncodingApi(a.apiConfiguration),o=await x(t,e,n,s,i,a),d=await x(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}var ie="ERC20";async function D(t,e,r,n,a){let i=await t.getAddress(),s=await signRegisterEthAddress(e,i,r),d=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerAndWithdrawAll.populateTransaction(i,r,s,n);return t.sendTransaction(d)}async function q(t,e,r,n){let i=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).withdrawAll.populateTransaction(await t.getAddress(),e,r);return t.sendTransaction(i)}async function L(t,e,r,n){let i=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(i)}async function se({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await l(t,a.immutableXConfig);let{v3Balance:i,v4Balance:s}=await I(t,r,await t.getAddress(),{type:ie,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await C("asset",ie,a.immutableXConfig,{token_address:n.tokenAddress});if(i>0)return await _(r,t,a)?q(t,r,o.asset_type,a.immutableXConfig):D(t,e,r,o.asset_type,a.immutableXConfig);if(s>0)return L(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var A="ERC721";function ce(t){let{id:e}=t.data,r=t.data.blueprint||"";return N.sanitizeHex(N.utf8ToHex(`{${e}}:{${r}}`))}async function Ze(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await C("asset",A,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await signRegisterEthAddress(e,a,i),p=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerAndWithdrawNft.populateTransaction(a,i,o,s.asset_type,r.tokenId);return t.sendTransaction(p)}async function et(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await C("mintable-asset",A,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=ce(r),d=await signRegisterEthAddress(e,a,i),g=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(a,i,d,s.asset_type,o);return t.sendTransaction(g)}async function tt(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>et(e,r,{type:A,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return Ze(e,r,n,a);throw i})}async function rt(t,e,r,n){let a=await C("mintable-asset",A,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),i=ce(r),o=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(e,a.asset_type,i);return t.sendTransaction(o)}async function nt(t,e,r,n){let a=await C("asset",A,n,{token_id:r.tokenId,token_address:r.tokenAddress}),s=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(s)}async function oe(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>rt(e,r,{type:A,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return nt(e,r,n,a);throw i})}async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i){await l(t,a.immutableXConfig);let s=await t.getAddress(),{v3Balance:o,v4Balance:d}=await ae(t,r,s,{type:A,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,i);if(o>0)return await _(r,t,a)?oe(i,t,r,n,a.immutableXConfig):tt(i,t,e,n,a.immutableXConfig);if(d>0)return oe(i,t,s,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ue="ETH";async function ge({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await l(t,n.immutableXConfig);let{v3Balance:a,v4Balance:i}=await I(t,r,await t.getAddress(),{type:ue},n.immutableXConfig),s=await C("asset",ue,n.immutableXConfig);if(a>0)return await _(r,t,n)?q(t,r,s.asset_type,n.immutableXConfig):D(t,e,r,s.asset_type,n.immutableXConfig);if(i>0)return L(t,r,s.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function le({signers:t,withdrawal:e,config:r}){let n=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return re({signers:t,config:r.immutableXConfig,...e},n)}async function fe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let i=new imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return ge({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return se({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i)}}async function Ce({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TradesApi(n.immutableXConfig.apiConfiguration),s=await i.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=s.data,p=await signRaw(o,t),g=await e.signMessage(d);return (await i.createTradeV3({createTradeRequest:{amount_buy:s.data.amount_buy,amount_sell:s.data.amount_sell,asset_id_buy:s.data.asset_id_buy,asset_id_sell:s.data.asset_id_sell,expiration_timestamp:s.data.expiration_timestamp,fee_info:s.data.fee_info,fees:r.fees,include_fees:!0,nonce:s.data.nonce,order_id:r.order_id,stark_key:s.data.stark_key,vault_id_buy:s.data.vault_id_buy,vault_id_sell:s.data.vault_id_sell,stark_signature:g},xImxEthAddress:a,xImxEthSignature:p})).data}async function dt(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},i=parseUnits(e.amount,"wei"),s=r.immutableXConfig,o=new imx.DepositsApi(s.apiConfiguration),d=new imx.EncodingApi(s.apiConfiguration),p={user:n,token:{type:e.type,data:a},amount:i.toString()},g=await o.getSignableDeposit({getSignableDepositRequest:p}),f=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=g.data.stark_key,w=g.data.vault_id;return dt(t,i,f,c,w,s)}async function mt(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.coreContractAddress,t).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function _e({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,i=await t.getAddress(),s=new imx.TokensApi(n),o=new imx.DepositsApi(n),d=new imx.EncodingApi(n),p=await s.getToken({address:e.tokenAddress}),E={decimals:parseInt(p.data.decimals),token_address:e.tokenAddress},f=parseUnits(e.amount,0),w=await Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(a.coreContractAddress,f);await t.sendTransaction(w);let T={user:i,token:{type:e.type,data:E},amount:f.toString()},b=await o.getSignableDeposit({getSignableDepositRequest:T}),Xe=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,De=b.data.stark_key,qe=b.data.vault_id,Le=BigInt(b.data.amount);return mt(t,Le,Xe,De,qe,a)}async function ut(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Ae({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,i=new imx.DepositsApi(a.apiConfiguration),s=new imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},p={user:n,token:{type:e.type,data:o},amount:"1".toString()},g=await i.getSignableDeposit({getSignableDepositRequest:p}),f=(await s.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=g.data.stark_key,w=g.data.vault_id,T=Contracts.IERC721.connect(e.tokenAddress,t),b=a.ethConfiguration.coreContractAddress;return await T.isApprovedForAll(n,b)||await T.setApprovalForAll(b,!0),ut(t,e.tokenId,f,c,w,a)}async function be({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Re({signers:t,deposit:e,config:r});case"ERC20":return _e({signers:t,deposit:e,config:r});case"ERC721":return Ae({signers:t,deposit:e,config:r})}}async function ye({signers:t,request:e,config:r}){await l(t.ethSigner,r.immutableXConfig);let n=new imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),i=e.amount,s=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(e),amount:i,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=s.data,p=await signRaw(o,t.ethSigner),g=await t.starkSigner.signMessage(d),E={sender_stark_key:s.data.sender_stark_key,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:g},f=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:E,xImxEthAddress:a,xImxEthSignature:p});return {sent_signature:f?.data.sent_signature,status:f?.data.status?.toString(),time:f?.data.time,transfer_id:f?.data.transfer_id}}var P=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return te(e,this.config)}registerOffchain(){return ee(this.signers,this.config)}batchNftTransfer(e){return Q({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return J({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return fe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return j({signers:this.signers,request:e,config:this.config})}createTrade(e){return Ce({signers:this.signers,request:e,config:this.config})}deposit(e){return be({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return ye({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return _(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return le({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return Y({signers:this.signers,request:e,config:this.config})}};var Se={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ke(t){return !!t?.request}async function Pe(t,e){await t.request({method:Se.CONNECT}),e&&await t.request({method:Se.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var Et={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function ve({chainID:t}){let e=await ft();if(!ke(e))throw new Error(Et.PROVIDER_NOT_FOUND);return await Pe(e,t),new BrowserProvider(e)}var R="message";function y(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function S(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var M=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=i=>{S(this.iframe,i,"SIGN_MESSAGE_RESPONSE",s=>{window.removeEventListener(R,a),s.success||n(new Error(s.error?.message)),r(s.data.signedMessage);});};window.addEventListener(R,a),y(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{S(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",i=>{window.removeEventListener(R,n),i.success||r(new Error(i.error?.message)),e(i.data.yCoordinate);});};window.addEventListener(R,n),y(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var Ie="imx-wallet-app",_t={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},Tt="display: none;";function ht(){return document.querySelector(`iframe#${Ie}`)}async function At(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",Ie),r.setAttribute("src",_t[t]),r.setAttribute("style",Tt),document.body.appendChild(r),r.onload=()=>e(r);})}async function Oe(t){let e=ht();return e||await At(t)}var yt="Only sign this request if you\u2019ve initiated an action with Immutable X.",St="The L2 IMX Wallet connection has failed";async function Ne(t,e){let r=await t.getSigner(),n=await r.getAddress(),a=await r.signMessage(toUtf8Bytes(yt)),i=await Oe(e);return new Promise((s,o)=>{let d=p=>{S(i,p,"CONNECT_WALLET_RESPONSE",g=>{window.removeEventListener(R,d),g.success||o(new Error(St)),s(new M(g.data.starkPublicKey,i));});};window.addEventListener(R,d),y(i,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Me(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=i=>{S(e,i,"DISCONNECT_WALLET_RESPONSE",s=>{window.removeEventListener(R,a),!s.success&&s.error&&n(s.error),e.remove(),r();});};window.addEventListener(R,a),y(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var k=class extends Error{type;constructor(e,r){super(e),this.type=r;}},W=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new k(n,e.type)}};var V=class t extends P{static imxSigner;static async connect(e){return await W(async()=>{let r=await ve({chainID:e.immutableXConfig.ethConfiguration.chainID});return this.imxSigner=await Ne(r,e.baseConfig.environment),new t(e,await r.getSigner(),this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new k("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return W(async()=>{await Me(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new k("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return W(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var B=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
11
+ function Be(t,e){return t===e.ethConfiguration.chainID}async function l(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!Be(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function Y({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),s=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),i=r.type==="ERC721"?"1":r.amount,o=await s.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:i,receiver:r.receiver}}),{signable_message:d,payload_hash:p}=o.data,u=await signRaw(d,t),E=await e.signMessage(p),f={sender_stark_key:o.data.sender_stark_key,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:E},c=await s.createTransferV1({createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:u});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function Q({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),s=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),i=r.map(c=>({amount:"1",token:convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await s.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:i}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let p=await signRaw(d,t),u=[];for(let c of o.data.signable_responses){let _=await e.signMessage(c.payload_hash),T={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:_};u.push(T);}let E={sender_stark_key:o.data.sender_stark_key,requests:u};return {transfer_ids:(await s.createTransfer({createTransferRequestV2:E,xImxEthAddress:a,xImxEthSignature:p}))?.data.transfer_ids}}async function j({signers:t,request:e,config:r}){await l(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),s=e.sell.type==="ERC721"?"1":e.sell.amount,i=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:i,token_buy:convertToSignableToken(e.buy),amount_sell:s,token_sell:convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:p,payload_hash:u}=d.data,E=await signRaw(p,t.ethSigner),f=await t.starkSigner.signMessage(u),c=d.data,_={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:f,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:E};return {...(await a.createOrderV3(_)).data}}async function J({signers:t,request:e,config:r}){let n=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:s,payload_hash:i}=a.data,o=await signRaw(s,t.ethSigner),d=await t.starkSigner.signMessage(i),p=await t.ethSigner.getAddress(),u=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:p,xImxEthSignature:o});return {order_id:u.data.order_id,status:u.data.status}}async function ee(t,e){await l(t.ethSigner,e.immutableXConfig);let r=new imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),s=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:i,payload_hash:o}=s.data,d=await signRaw(i,t.ethSigner),p=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:p,stark_key:a}})).data}async function te(t,e){try{let n=await new imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function w(t,e,r){await l(e,r.immutableXConfig);let n=r.immutableXConfig,a=Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(s){if(s.reason==="USER_UNREGISTERED")return !1;throw s}}var h=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function re(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await l(r,t.config);let a=t.type==="ERC721"?"1":t.amount,s=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:convertToSignableToken(t),amount:a}}),{signable_message:i,payload_hash:o}=s.data,d=await n.signMessage(o),{ethAddress:p,ethSignature:u}=await signMessage(i,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:h(s.data.sender_stark_key),sender_vault_id:h(s.data.sender_vault_id),receiver_stark_key:h(s.data.receiver_stark_key),receiver_vault_id:h(s.data.receiver_vault_id),amount:a,asset_id:h(s.data.asset_id),expiration_timestamp:h(s.data.expiration_timestamp),nonce:h(s.data.nonce),stark_signature:d},xImxEthAddress:p,xImxEthSignature:u})).data}async function C(t,e,r,n){return (await new imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function x(t,e,r,n){return Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function Ke(t,e,r){let n=await C("asset","ETH",r);return await x(t,e,n.asset_id,r)}async function je(t,e,r,n){let a=await C("asset","ERC20",n,{token_address:r});return await x(t,e,a.asset_id,n)}async function Je(t,e,r,n,a,s){try{let i=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await C("mintable-asset","ERC721",s,{id:r.tokenId,token_address:r.tokenAddress,...i.data.blueprint&&{blueprint:i.data.blueprint}});return await x(t,e,o.asset_id,s)}catch(i){if(i.response?.status===404){let o=await C("asset","ERC721",s,{token_id:r.tokenId,token_address:r.tokenAddress});return await x(t,e,o.asset_id,s)}throw i}}async function P(t,e,r,n,a,s){switch(r.type){case"ETH":return await Ke(t,e,s);case"ERC20":return await je(t,e,r.tokenAddress,s);case"ERC721":return await Je(t,e,r,n,a,s);default:throw new Error("Unsupported token type")}}async function I(t,e,r,n,a){let s=new EncodingApi(a.apiConfiguration),i=new MintsApi(a.apiConfiguration),o=await P(t,e,n,s,i,a),d=await P(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}async function ae(t,e,r,n,a,s){let i=new EncodingApi(a.apiConfiguration),o=await P(t,e,n,i,s,a),d=await P(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}var se="ERC20";async function D(t,e,r,n,a){let s=await t.getAddress(),i=await signRegisterEthAddress(e,s,r),d=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).populateTransaction.registerAndWithdrawAll(s,r,i,n);return t.sendTransaction(d)}async function q(t,e,r,n){let s=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.withdrawAll(await t.getAddress(),e,r);return t.sendTransaction(s)}async function L(t,e,r,n){let s=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdraw(await t.getAddress(),r);return t.sendTransaction(s)}async function ie({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await l(t,a.immutableXConfig);let{v3Balance:s,v4Balance:i}=await I(t,r,await t.getAddress(),{type:se,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await C("asset",se,a.immutableXConfig,{token_address:n.tokenAddress});if(s.gt(0))return await w(r,t,a)?q(t,r,o.asset_type,a.immutableXConfig):D(t,e,r,o.asset_type,a.immutableXConfig);if(i.gt(0))return L(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var A="ERC721";function ce(t){let{id:e}=t.data,r=t.data.blueprint||"";return N.sanitizeHex(N.utf8ToHex(`{${e}}:{${r}}`))}async function et(t,e,r,n){let a=await t.getAddress(),s=await e.getAddress(),i=await C("asset",A,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await signRegisterEthAddress(e,a,s),p=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.registerAndWithdrawNft(a,s,o,i.asset_type,r.tokenId);return t.sendTransaction(p)}async function tt(t,e,r,n){let a=await t.getAddress(),s=await e.getAddress(),i=await C("mintable-asset",A,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=ce(r),d=await signRegisterEthAddress(e,a,s),u=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.registerWithdrawAndMint(a,s,d,i.asset_type,o);return t.sendTransaction(u)}async function rt(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(s=>tt(e,r,{type:A,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:s.data.blueprint}},a)).catch(s=>{if(s.response?.status===404)return et(e,r,n,a);throw s})}async function nt(t,e,r,n){let a=await C("mintable-asset",A,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),s=ce(r),o=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdrawAndMint(e,a.asset_type,s);return t.sendTransaction(o)}async function at(t,e,r,n){let a=await C("asset",A,n,{token_id:r.tokenId,token_address:r.tokenAddress}),i=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdrawNft(e,a.asset_type,r.tokenId);return t.sendTransaction(i)}async function oe(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(s=>nt(e,r,{type:A,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:s.data.blueprint}},a)).catch(s=>{if(s.response?.status===404)return at(e,r,n,a);throw s})}async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s){await l(t,a.immutableXConfig);let i=await t.getAddress(),{v3Balance:o,v4Balance:d}=await ae(t,r,i,{type:A,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,s);if(o.gt(0))return await w(r,t,a)?oe(s,t,r,n,a.immutableXConfig):rt(s,t,e,n,a.immutableXConfig);if(d.gt(0))return oe(s,t,i,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ge="ETH";async function ue({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await l(t,n.immutableXConfig);let{v3Balance:a,v4Balance:s}=await I(t,r,await t.getAddress(),{type:ge},n.immutableXConfig),i=await C("asset",ge,n.immutableXConfig);if(a.gt(0))return await w(r,t,n)?q(t,r,i.asset_type,n.immutableXConfig):D(t,e,r,i.asset_type,n.immutableXConfig);if(s.gt(0))return L(t,r,i.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function le({signers:t,withdrawal:e,config:r}){let n=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return re({signers:t,config:r.immutableXConfig,...e},n)}async function fe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let s=new imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return ue({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return ie({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s)}}async function Ce({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),s=new imx.TradesApi(n.immutableXConfig.apiConfiguration),i=await s.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=i.data,p=await signRaw(o,t),u=await e.signMessage(d);return (await s.createTradeV3({createTradeRequest:{amount_buy:i.data.amount_buy,amount_sell:i.data.amount_sell,asset_id_buy:i.data.asset_id_buy,asset_id_sell:i.data.asset_id_sell,expiration_timestamp:i.data.expiration_timestamp,fee_info:i.data.fee_info,fees:r.fees,include_fees:!0,nonce:i.data.nonce,order_id:r.order_id,stark_key:i.data.stark_key,vault_id_buy:i.data.vault_id_buy,vault_id_sell:i.data.vault_id_sell,stark_signature:u},xImxEthAddress:a,xImxEthSignature:p})).data}async function ct(t,e,r,n,a,s){let o=await Contracts.CoreV4.connect(s.ethConfiguration.coreContractAddress,t).populateTransaction["deposit(uint256,uint256,uint256)"](n,r,a);return t.sendTransaction({...o,value:e})}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},s=utils.parseUnits(e.amount,"wei"),i=r.immutableXConfig,o=new imx.DepositsApi(i.apiConfiguration),d=new imx.EncodingApi(i.apiConfiguration),p={user:n,token:{type:e.type,data:a},amount:s.toString()},u=await o.getSignableDeposit({getSignableDepositRequest:p}),f=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=u.data.stark_key,_=u.data.vault_id;return ct(t,s,f,c,_,i)}async function gt(t,e,r,n,a,s){let o=await Contracts.CoreV4.connect(s.coreContractAddress,t).populateTransaction.depositERC20(n,r,a,e);return t.sendTransaction(o)}async function we({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,s=await t.getAddress(),i=new imx.TokensApi(n),o=new imx.DepositsApi(n),d=new imx.EncodingApi(n),p=await i.getToken({address:e.tokenAddress}),E={decimals:parseInt(p.data.decimals),token_address:e.tokenAddress},f=utils.parseUnits(e.amount,0),_=await Contracts.IERC20.connect(e.tokenAddress,t).populateTransaction.approve(a.coreContractAddress,f);await t.sendTransaction(_);let T={user:s,token:{type:e.type,data:E},amount:f.toString()},b=await o.getSignableDeposit({getSignableDepositRequest:T}),De=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,qe=b.data.stark_key,Le=b.data.vault_id,Ue=BigInt(b.data.amount);return gt(t,Ue,De,qe,Le,a)}async function ut(t,e,r,n,a,s){let o=await Contracts.CoreV4.connect(s.ethConfiguration.coreContractAddress,t).populateTransaction.depositNft(n,r,a,e);return t.sendTransaction(o)}async function Ae({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,s=new imx.DepositsApi(a.apiConfiguration),i=new imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},p={user:n,token:{type:e.type,data:o},amount:"1".toString()},u=await s.getSignableDeposit({getSignableDepositRequest:p}),f=(await i.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=u.data.stark_key,_=u.data.vault_id,T=Contracts.IERC721.connect(e.tokenAddress,t),b=a.ethConfiguration.coreContractAddress;return await T.isApprovedForAll(n,b)||await T.setApprovalForAll(b,!0),ut(t,e.tokenId,f,c,_,a)}async function be({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Re({signers:t,deposit:e,config:r});case"ERC20":return we({signers:t,deposit:e,config:r});case"ERC721":return Ae({signers:t,deposit:e,config:r})}}async function ye({signers:t,request:e,config:r}){await l(t.ethSigner,r.immutableXConfig);let n=new imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),s=e.amount,i=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(e),amount:s,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=i.data,p=await signRaw(o,t.ethSigner),u=await t.starkSigner.signMessage(d),E={sender_stark_key:i.data.sender_stark_key,sender_vault_id:i.data.sender_vault_id,receiver_stark_key:i.data.receiver_stark_key,receiver_vault_id:i.data.receiver_vault_id,asset_id:i.data.asset_id,amount:i.data.amount,nonce:i.data.nonce,expiration_timestamp:i.data.expiration_timestamp,stark_signature:u},f=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:E,xImxEthAddress:a,xImxEthSignature:p});return {sent_signature:f?.data.sent_signature,status:f?.data.status?.toString(),time:f?.data.time,transfer_id:f?.data.transfer_id}}var v=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return te(e,this.config)}registerOffchain(){return ee(this.signers,this.config)}batchNftTransfer(e){return Q({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return J({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return fe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return j({signers:this.signers,request:e,config:this.config})}createTrade(e){return Ce({signers:this.signers,request:e,config:this.config})}deposit(e){return be({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return ye({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return w(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return le({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return Y({signers:this.signers,request:e,config:this.config})}};var Se={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ke(t){return !!t?.request}async function ve(t,e){await t.request({method:Se.CONNECT}),e&&await t.request({method:Se.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var Rt={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function xe({chainID:t}){let e=await Ct();if(!ke(e))throw new Error(Rt.PROVIDER_NOT_FOUND);return await ve(e,t),new providers.Web3Provider(e)}var R="message";function y(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function S(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var M=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=s=>{S(this.iframe,s,"SIGN_MESSAGE_RESPONSE",i=>{window.removeEventListener(R,a),i.success||n(new Error(i.error?.message)),r(i.data.signedMessage);});};window.addEventListener(R,a),y(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{S(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",s=>{window.removeEventListener(R,n),s.success||r(new Error(s.error?.message)),e(s.data.yCoordinate);});};window.addEventListener(R,n),y(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var Ie="imx-wallet-app",Tt={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},ht="display: none;";function At(){return document.querySelector(`iframe#${Ie}`)}async function bt(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",Ie),r.setAttribute("src",Tt[t]),r.setAttribute("style",ht),document.body.appendChild(r),r.onload=()=>e(r);})}async function Oe(t){let e=At();return e||await bt(t)}var yt="Only sign this request if you\u2019ve initiated an action with Immutable X.",St="The L2 IMX Wallet connection has failed";async function Ne(t,e){let r=t.getSigner(),n=await r.getAddress(),a=await r.signMessage(yt),s=await Oe(e);return new Promise((i,o)=>{let d=p=>{S(s,p,"CONNECT_WALLET_RESPONSE",u=>{window.removeEventListener(R,d),u.success||o(new Error(St)),i(new M(u.data.starkPublicKey,s));});};window.addEventListener(R,d),y(s,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Me(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=s=>{S(e,s,"DISCONNECT_WALLET_RESPONSE",i=>{window.removeEventListener(R,a),!i.success&&i.error&&n(i.error),e.remove(),r();});};window.addEventListener(R,a),y(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var k=class extends Error{type;constructor(e,r){super(e),this.type=r;}},W=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new k(n,e.type)}};var B=class t extends v{static imxSigner;static async connect(e){return await W(async()=>{let r=await xe({chainID:e.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Ne(r,e.baseConfig.environment);let n=await r.getSigner(),a=await n.getAddress();return track("xProvider","log",{address:a,param:"metaMaskProvider.getSigner().getAddress()",val:a}),track("xProvider","log",{address:a,param:"imxSigner.getAddress()",val:this.imxSigner.getAddress()}),new t(e,n,this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new k("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return W(async()=>{await Me(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new k("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return W(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var V=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
11
12
 
12
- export { P as GenericIMXProvider, V as MetaMaskIMXProvider, B as ProviderConfiguration };
13
+ export { v as GenericIMXProvider, B as MetaMaskIMXProvider, V as ProviderConfiguration };
@@ -5,8 +5,9 @@ var toolkit = require('@imtbl/toolkit');
5
5
  var xClient = require('@imtbl/x-client');
6
6
  var axios = require('axios');
7
7
  var I = require('enc-utils');
8
- var ethers = require('ethers');
9
- var pt = require('@metamask/detect-provider');
8
+ var ethersV5 = require('ethers-v5');
9
+ var metrics = require('@imtbl/metrics');
10
+ var lt = require('@metamask/detect-provider');
10
11
  var config = require('@imtbl/config');
11
12
 
12
13
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -30,9 +31,9 @@ function _interopNamespace(e) {
30
31
  }
31
32
 
32
33
  var I__namespace = /*#__PURE__*/_interopNamespace(I);
33
- var pt__default = /*#__PURE__*/_interopDefault(pt);
34
+ var lt__default = /*#__PURE__*/_interopDefault(lt);
34
35
 
35
- function qe(t,e){return t===e.ethConfiguration.chainID}async function g(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!qe(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function H({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new generatedClients.imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.type==="ERC721"?"1":r.amount,o=await i.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(r),amount:s,receiver:r.receiver}}),{signable_message:d,payload_hash:u}=o.data,m=await toolkit.signRaw(d,t),f=await e.signMessage(u),p={sender_stark_key:o.data.sender_stark_key,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:f},c=await i.createTransferV1({createTransferRequest:p,xImxEthAddress:a,xImxEthSignature:m});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function F({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new generatedClients.imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.map(c=>({amount:"1",token:toolkit.convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let u=await toolkit.signRaw(d,t),m=[];for(let c of o.data.signable_responses){let E=await e.signMessage(c.payload_hash),w={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:E};m.push(w);}let f={sender_stark_key:o.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:f,xImxEthAddress:a,xImxEthSignature:u}))?.data.transfer_ids}}async function z({signers:t,request:e,config:r}){await g(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new generatedClients.imx.OrdersApi(r.immutableXConfig.apiConfiguration),i=e.sell.type==="ERC721"?"1":e.sell.amount,s=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:s,token_buy:toolkit.convertToSignableToken(e.buy),amount_sell:i,token_sell:toolkit.convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:u,payload_hash:m}=d.data,f=await toolkit.signRaw(u,t.ethSigner),p=await t.starkSigner.signMessage(m),c=d.data,E={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:p,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:f};return {...(await a.createOrderV3(E)).data}}async function K({signers:t,request:e,config:r}){let n=new generatedClients.imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:i,payload_hash:s}=a.data,o=await toolkit.signRaw(i,t.ethSigner),d=await t.starkSigner.signMessage(s),u=await t.ethSigner.getAddress(),m=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:u,xImxEthSignature:o});return {order_id:m.data.order_id,status:m.data.status}}async function J(t,e){await g(t.ethSigner,e.immutableXConfig);let r=new generatedClients.imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),i=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:s,payload_hash:o}=i.data,d=await toolkit.signRaw(s,t.ethSigner),u=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:u,stark_key:a}})).data}async function Z(t,e){try{let n=await new generatedClients.imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(axios.isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function R(t,e,r){await g(e,r.immutableXConfig);let n=r.immutableXConfig,a=xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(i){if(i.reason==="USER_UNREGISTERED")return !1;throw i}}var _=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function ee(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await g(r,t.config);let a=t.type==="ERC721"?"1":t.amount,i=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:toolkit.convertToSignableToken(t),amount:a}}),{signable_message:s,payload_hash:o}=i.data,d=await n.signMessage(o),{ethAddress:u,ethSignature:m}=await toolkit.signMessage(s,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:_(i.data.sender_stark_key),sender_vault_id:_(i.data.sender_vault_id),receiver_stark_key:_(i.data.receiver_stark_key),receiver_vault_id:_(i.data.receiver_vault_id),amount:a,asset_id:_(i.data.asset_id),expiration_timestamp:_(i.data.expiration_timestamp),nonce:_(i.data.nonce),stark_signature:d},xImxEthAddress:u,xImxEthSignature:m})).data}async function l(t,e,r,n){return (await new generatedClients.imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function k(t,e,r,n){return xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function Qe(t,e,r){let n=await l("asset","ETH",r);return await k(t,e,n.asset_id,r)}async function $e(t,e,r,n){let a=await l("asset","ERC20",n,{token_address:r});return await k(t,e,a.asset_id,n)}async function ze(t,e,r,n,a,i){try{let s=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await l("mintable-asset","ERC721",i,{id:r.tokenId,token_address:r.tokenAddress,...s.data.blueprint&&{blueprint:s.data.blueprint}});return await k(t,e,o.asset_id,i)}catch(s){if(s.response?.status===404){let o=await l("asset","ERC721",i,{token_id:r.tokenId,token_address:r.tokenAddress});return await k(t,e,o.asset_id,i)}throw s}}async function P(t,e,r,n,a,i){switch(r.type){case"ETH":return await Qe(t,e,i);case"ERC20":return await $e(t,e,r.tokenAddress,i);case"ERC721":return await ze(t,e,r,n,a,i);default:throw new Error("Unsupported token type")}}async function v(t,e,r,n,a){let i=new xClient.EncodingApi(a.apiConfiguration),s=new xClient.MintsApi(a.apiConfiguration),o=await P(t,e,n,i,s,a),d=await P(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}async function re(t,e,r,n,a,i){let s=new xClient.EncodingApi(a.apiConfiguration),o=await P(t,e,n,s,i,a),d=await P(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}var ne="ERC20";async function W(t,e,r,n,a){let i=await t.getAddress(),s=await xClient.signRegisterEthAddress(e,i,r),d=await xClient.Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerAndWithdrawAll.populateTransaction(i,r,s,n);return t.sendTransaction(d)}async function X(t,e,r,n){let i=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).withdrawAll.populateTransaction(await t.getAddress(),e,r);return t.sendTransaction(i)}async function D(t,e,r,n){let i=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(i)}async function ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await g(t,a.immutableXConfig);let{v3Balance:i,v4Balance:s}=await v(t,r,await t.getAddress(),{type:ne,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await l("asset",ne,a.immutableXConfig,{token_address:n.tokenAddress});if(i>0)return await R(r,t,a)?X(t,r,o.asset_type,a.immutableXConfig):W(t,e,r,o.asset_type,a.immutableXConfig);if(s>0)return D(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var T="ERC721";function oe(t){let{id:e}=t.data,r=t.data.blueprint||"";return I__namespace.sanitizeHex(I__namespace.utf8ToHex(`{${e}}:{${r}}`))}async function je(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await xClient.signRegisterEthAddress(e,a,i),u=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerAndWithdrawNft.populateTransaction(a,i,o,s.asset_type,r.tokenId);return t.sendTransaction(u)}async function Je(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=oe(r),d=await xClient.signRegisterEthAddress(e,a,i),m=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(a,i,d,s.asset_type,o);return t.sendTransaction(m)}async function Ze(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>Je(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return je(e,r,n,a);throw i})}async function et(t,e,r,n){let a=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),i=oe(r),o=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(e,a.asset_type,i);return t.sendTransaction(o)}async function tt(t,e,r,n){let a=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),s=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(s)}async function ie(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>et(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return tt(e,r,n,a);throw i})}async function de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i){await g(t,a.immutableXConfig);let s=await t.getAddress(),{v3Balance:o,v4Balance:d}=await re(t,r,s,{type:T,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,i);if(o>0)return await R(r,t,a)?ie(i,t,r,n,a.immutableXConfig):Ze(i,t,e,n,a.immutableXConfig);if(d>0)return ie(i,t,s,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ce="ETH";async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await g(t,n.immutableXConfig);let{v3Balance:a,v4Balance:i}=await v(t,r,await t.getAddress(),{type:ce},n.immutableXConfig),s=await l("asset",ce,n.immutableXConfig);if(a>0)return await R(r,t,n)?X(t,r,s.asset_type,n.immutableXConfig):W(t,e,r,s.asset_type,n.immutableXConfig);if(i>0)return D(t,r,s.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function ge({signers:t,withdrawal:e,config:r}){let n=new generatedClients.imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ee({signers:t,config:r.immutableXConfig,...e},n)}async function pe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let i=new generatedClients.imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i)}}async function le({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new generatedClients.imx.TradesApi(n.immutableXConfig.apiConfiguration),s=await i.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=s.data,u=await toolkit.signRaw(o,t),m=await e.signMessage(d);return (await i.createTradeV3({createTradeRequest:{amount_buy:s.data.amount_buy,amount_sell:s.data.amount_sell,asset_id_buy:s.data.asset_id_buy,asset_id_sell:s.data.asset_id_sell,expiration_timestamp:s.data.expiration_timestamp,fee_info:s.data.fee_info,fees:r.fees,include_fees:!0,nonce:s.data.nonce,order_id:r.order_id,stark_key:s.data.stark_key,vault_id_buy:s.data.vault_id_buy,vault_id_sell:s.data.vault_id_sell,stark_signature:m},xImxEthAddress:a,xImxEthSignature:u})).data}async function st(t,e,r,n,a,i){let o=await xClient.Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function Ce({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},i=ethers.parseUnits(e.amount,"wei"),s=r.immutableXConfig,o=new generatedClients.imx.DepositsApi(s.apiConfiguration),d=new generatedClients.imx.EncodingApi(s.apiConfiguration),u={user:n,token:{type:e.type,data:a},amount:i.toString()},m=await o.getSignableDeposit({getSignableDepositRequest:u}),p=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id;return st(t,i,p,c,E,s)}async function dt(t,e,r,n,a,i){let o=await xClient.Contracts.CoreV4.connect(i.coreContractAddress,t).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,i=await t.getAddress(),s=new generatedClients.imx.TokensApi(n),o=new generatedClients.imx.DepositsApi(n),d=new generatedClients.imx.EncodingApi(n),u=await s.getToken({address:e.tokenAddress}),f={decimals:parseInt(u.data.decimals),token_address:e.tokenAddress},p=ethers.parseUnits(e.amount,0),E=await xClient.Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(a.coreContractAddress,p);await t.sendTransaction(E);let w={user:i,token:{type:e.type,data:f},amount:p.toString()},h=await o.getSignableDeposit({getSignableDepositRequest:w}),Me=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,We=h.data.stark_key,Xe=h.data.vault_id,De=BigInt(h.data.amount);return dt(t,De,Me,We,Xe,a)}async function ct(t,e,r,n,a,i){let o=await xClient.Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Te({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,i=new generatedClients.imx.DepositsApi(a.apiConfiguration),s=new generatedClients.imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},u={user:n,token:{type:e.type,data:o},amount:"1".toString()},m=await i.getSignableDeposit({getSignableDepositRequest:u}),p=(await s.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id,w=xClient.Contracts.IERC721.connect(e.tokenAddress,t),h=a.ethConfiguration.coreContractAddress;return await w.isApprovedForAll(n,h)||await w.setApprovalForAll(h,!0),ct(t,e.tokenId,p,c,E,a)}async function he({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Ce({signers:t,deposit:e,config:r});case"ERC20":return Re({signers:t,deposit:e,config:r});case"ERC721":return Te({signers:t,deposit:e,config:r})}}async function Ae({signers:t,request:e,config:r}){await g(t.ethSigner,r.immutableXConfig);let n=new generatedClients.imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),i=e.amount,s=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(e),amount:i,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=s.data,u=await toolkit.signRaw(o,t.ethSigner),m=await t.starkSigner.signMessage(d),f={sender_stark_key:s.data.sender_stark_key,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:m},p=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:u});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}}var S=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return Z(e,this.config)}registerOffchain(){return J(this.signers,this.config)}batchNftTransfer(e){return F({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return K({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return pe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return z({signers:this.signers,request:e,config:this.config})}createTrade(e){return le({signers:this.signers,request:e,config:this.config})}deposit(e){return he({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return Ae({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return R(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return ge({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return H({signers:this.signers,request:e,config:this.config})}};var be={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ye(t){return !!t?.request}async function Se(t,e){await t.request({method:be.CONNECT}),e&&await t.request({method:be.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var ft={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function ke({chainID:t}){let e=await pt__default.default();if(!ye(e))throw new Error(ft.PROVIDER_NOT_FOUND);return await Se(e,t),new ethers.BrowserProvider(e)}var C="message";function A(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function b(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var O=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=i=>{b(this.iframe,i,"SIGN_MESSAGE_RESPONSE",s=>{window.removeEventListener(C,a),s.success||n(new Error(s.error?.message)),r(s.data.signedMessage);});};window.addEventListener(C,a),A(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{b(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",i=>{window.removeEventListener(C,n),i.success||r(new Error(i.error?.message)),e(i.data.yCoordinate);});};window.addEventListener(C,n),A(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var ve="imx-wallet-app",Rt={[config.Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[config.Environment.PRODUCTION]:"https://wallets.immutable.com"},wt="display: none;";function _t(){return document.querySelector(`iframe#${ve}`)}async function Tt(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",ve),r.setAttribute("src",Rt[t]),r.setAttribute("style",wt),document.body.appendChild(r),r.onload=()=>e(r);})}async function xe(t){let e=_t();return e||await Tt(t)}var At="Only sign this request if you\u2019ve initiated an action with Immutable X.",bt="The L2 IMX Wallet connection has failed";async function Ie(t,e){let r=await t.getSigner(),n=await r.getAddress(),a=await r.signMessage(ethers.toUtf8Bytes(At)),i=await xe(e);return new Promise((s,o)=>{let d=u=>{b(i,u,"CONNECT_WALLET_RESPONSE",m=>{window.removeEventListener(C,d),m.success||o(new Error(bt)),s(new O(m.data.starkPublicKey,i));});};window.addEventListener(C,d),A(i,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Oe(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=i=>{b(e,i,"DISCONNECT_WALLET_RESPONSE",s=>{window.removeEventListener(C,a),!s.success&&s.error&&n(s.error),e.remove(),r();});};window.addEventListener(C,a),A(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var y=class extends Error{type;constructor(e,r){super(e),this.type=r;}},N=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new y(n,e.type)}};var L=class t extends S{static imxSigner;static async connect(e){return await N(async()=>{let r=await ke({chainID:e.immutableXConfig.ethConfiguration.chainID});return this.imxSigner=await Ie(r,e.baseConfig.environment),new t(e,await r.getSigner(),this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new y("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>{await Oe(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new y("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var U=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new xClient.ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
36
+ function Le(t,e){return t===e.ethConfiguration.chainID}async function u(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!Le(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function H({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await u(t,n.immutableXConfig);let a=await t.getAddress(),s=new generatedClients.imx.TransfersApi(n.immutableXConfig.apiConfiguration),i=r.type==="ERC721"?"1":r.amount,o=await s.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(r),amount:i,receiver:r.receiver}}),{signable_message:d,payload_hash:g}=o.data,m=await toolkit.signRaw(d,t),f=await e.signMessage(g),p={sender_stark_key:o.data.sender_stark_key,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:f},c=await s.createTransferV1({createTransferRequest:p,xImxEthAddress:a,xImxEthSignature:m});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function F({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await u(t,n.immutableXConfig);let a=await t.getAddress(),s=new generatedClients.imx.TransfersApi(n.immutableXConfig.apiConfiguration),i=r.map(c=>({amount:"1",token:toolkit.convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await s.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:i}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let g=await toolkit.signRaw(d,t),m=[];for(let c of o.data.signable_responses){let E=await e.signMessage(c.payload_hash),_={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:E};m.push(_);}let f={sender_stark_key:o.data.sender_stark_key,requests:m};return {transfer_ids:(await s.createTransfer({createTransferRequestV2:f,xImxEthAddress:a,xImxEthSignature:g}))?.data.transfer_ids}}async function z({signers:t,request:e,config:r}){await u(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new generatedClients.imx.OrdersApi(r.immutableXConfig.apiConfiguration),s=e.sell.type==="ERC721"?"1":e.sell.amount,i=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:i,token_buy:toolkit.convertToSignableToken(e.buy),amount_sell:s,token_sell:toolkit.convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:g,payload_hash:m}=d.data,f=await toolkit.signRaw(g,t.ethSigner),p=await t.starkSigner.signMessage(m),c=d.data,E={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:p,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:f};return {...(await a.createOrderV3(E)).data}}async function K({signers:t,request:e,config:r}){let n=new generatedClients.imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:s,payload_hash:i}=a.data,o=await toolkit.signRaw(s,t.ethSigner),d=await t.starkSigner.signMessage(i),g=await t.ethSigner.getAddress(),m=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:g,xImxEthSignature:o});return {order_id:m.data.order_id,status:m.data.status}}async function J(t,e){await u(t.ethSigner,e.immutableXConfig);let r=new generatedClients.imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),s=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:i,payload_hash:o}=s.data,d=await toolkit.signRaw(i,t.ethSigner),g=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:g,stark_key:a}})).data}async function Z(t,e){try{let n=await new generatedClients.imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(axios.isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function R(t,e,r){await u(e,r.immutableXConfig);let n=r.immutableXConfig,a=xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(s){if(s.reason==="USER_UNREGISTERED")return !1;throw s}}var w=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function ee(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await u(r,t.config);let a=t.type==="ERC721"?"1":t.amount,s=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:toolkit.convertToSignableToken(t),amount:a}}),{signable_message:i,payload_hash:o}=s.data,d=await n.signMessage(o),{ethAddress:g,ethSignature:m}=await toolkit.signMessage(i,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:w(s.data.sender_stark_key),sender_vault_id:w(s.data.sender_vault_id),receiver_stark_key:w(s.data.receiver_stark_key),receiver_vault_id:w(s.data.receiver_vault_id),amount:a,asset_id:w(s.data.asset_id),expiration_timestamp:w(s.data.expiration_timestamp),nonce:w(s.data.nonce),stark_signature:d},xImxEthAddress:g,xImxEthSignature:m})).data}async function l(t,e,r,n){return (await new generatedClients.imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function k(t,e,r,n){return xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function $e(t,e,r){let n=await l("asset","ETH",r);return await k(t,e,n.asset_id,r)}async function ze(t,e,r,n){let a=await l("asset","ERC20",n,{token_address:r});return await k(t,e,a.asset_id,n)}async function Ke(t,e,r,n,a,s){try{let i=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await l("mintable-asset","ERC721",s,{id:r.tokenId,token_address:r.tokenAddress,...i.data.blueprint&&{blueprint:i.data.blueprint}});return await k(t,e,o.asset_id,s)}catch(i){if(i.response?.status===404){let o=await l("asset","ERC721",s,{token_id:r.tokenId,token_address:r.tokenAddress});return await k(t,e,o.asset_id,s)}throw i}}async function v(t,e,r,n,a,s){switch(r.type){case"ETH":return await $e(t,e,s);case"ERC20":return await ze(t,e,r.tokenAddress,s);case"ERC721":return await Ke(t,e,r,n,a,s);default:throw new Error("Unsupported token type")}}async function x(t,e,r,n,a){let s=new xClient.EncodingApi(a.apiConfiguration),i=new xClient.MintsApi(a.apiConfiguration),o=await v(t,e,n,s,i,a),d=await v(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}async function re(t,e,r,n,a,s){let i=new xClient.EncodingApi(a.apiConfiguration),o=await v(t,e,n,i,s,a),d=await v(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}var ne="ERC20";async function W(t,e,r,n,a){let s=await t.getAddress(),i=await xClient.signRegisterEthAddress(e,s,r),d=await xClient.Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).populateTransaction.registerAndWithdrawAll(s,r,i,n);return t.sendTransaction(d)}async function X(t,e,r,n){let s=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.withdrawAll(await t.getAddress(),e,r);return t.sendTransaction(s)}async function D(t,e,r,n){let s=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdraw(await t.getAddress(),r);return t.sendTransaction(s)}async function ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await u(t,a.immutableXConfig);let{v3Balance:s,v4Balance:i}=await x(t,r,await t.getAddress(),{type:ne,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await l("asset",ne,a.immutableXConfig,{token_address:n.tokenAddress});if(s.gt(0))return await R(r,t,a)?X(t,r,o.asset_type,a.immutableXConfig):W(t,e,r,o.asset_type,a.immutableXConfig);if(i.gt(0))return D(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var T="ERC721";function oe(t){let{id:e}=t.data,r=t.data.blueprint||"";return I__namespace.sanitizeHex(I__namespace.utf8ToHex(`{${e}}:{${r}}`))}async function Je(t,e,r,n){let a=await t.getAddress(),s=await e.getAddress(),i=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await xClient.signRegisterEthAddress(e,a,s),g=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.registerAndWithdrawNft(a,s,o,i.asset_type,r.tokenId);return t.sendTransaction(g)}async function Ze(t,e,r,n){let a=await t.getAddress(),s=await e.getAddress(),i=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=oe(r),d=await xClient.signRegisterEthAddress(e,a,s),m=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.registerWithdrawAndMint(a,s,d,i.asset_type,o);return t.sendTransaction(m)}async function et(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(s=>Ze(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:s.data.blueprint}},a)).catch(s=>{if(s.response?.status===404)return Je(e,r,n,a);throw s})}async function tt(t,e,r,n){let a=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),s=oe(r),o=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdrawAndMint(e,a.asset_type,s);return t.sendTransaction(o)}async function rt(t,e,r,n){let a=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),i=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdrawNft(e,a.asset_type,r.tokenId);return t.sendTransaction(i)}async function se(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(s=>tt(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:s.data.blueprint}},a)).catch(s=>{if(s.response?.status===404)return rt(e,r,n,a);throw s})}async function de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s){await u(t,a.immutableXConfig);let i=await t.getAddress(),{v3Balance:o,v4Balance:d}=await re(t,r,i,{type:T,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,s);if(o.gt(0))return await R(r,t,a)?se(s,t,r,n,a.immutableXConfig):et(s,t,e,n,a.immutableXConfig);if(d.gt(0))return se(s,t,i,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ce="ETH";async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await u(t,n.immutableXConfig);let{v3Balance:a,v4Balance:s}=await x(t,r,await t.getAddress(),{type:ce},n.immutableXConfig),i=await l("asset",ce,n.immutableXConfig);if(a.gt(0))return await R(r,t,n)?X(t,r,i.asset_type,n.immutableXConfig):W(t,e,r,i.asset_type,n.immutableXConfig);if(s.gt(0))return D(t,r,i.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function ue({signers:t,withdrawal:e,config:r}){let n=new generatedClients.imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ee({signers:t,config:r.immutableXConfig,...e},n)}async function pe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let s=new generatedClients.imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s)}}async function le({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await u(t,n.immutableXConfig);let a=await t.getAddress(),s=new generatedClients.imx.TradesApi(n.immutableXConfig.apiConfiguration),i=await s.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=i.data,g=await toolkit.signRaw(o,t),m=await e.signMessage(d);return (await s.createTradeV3({createTradeRequest:{amount_buy:i.data.amount_buy,amount_sell:i.data.amount_sell,asset_id_buy:i.data.asset_id_buy,asset_id_sell:i.data.asset_id_sell,expiration_timestamp:i.data.expiration_timestamp,fee_info:i.data.fee_info,fees:r.fees,include_fees:!0,nonce:i.data.nonce,order_id:r.order_id,stark_key:i.data.stark_key,vault_id_buy:i.data.vault_id_buy,vault_id_sell:i.data.vault_id_sell,stark_signature:m},xImxEthAddress:a,xImxEthSignature:g})).data}async function ot(t,e,r,n,a,s){let o=await xClient.Contracts.CoreV4.connect(s.ethConfiguration.coreContractAddress,t).populateTransaction["deposit(uint256,uint256,uint256)"](n,r,a);return t.sendTransaction({...o,value:e})}async function Ce({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},s=ethersV5.utils.parseUnits(e.amount,"wei"),i=r.immutableXConfig,o=new generatedClients.imx.DepositsApi(i.apiConfiguration),d=new generatedClients.imx.EncodingApi(i.apiConfiguration),g={user:n,token:{type:e.type,data:a},amount:s.toString()},m=await o.getSignableDeposit({getSignableDepositRequest:g}),p=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id;return ot(t,s,p,c,E,i)}async function ct(t,e,r,n,a,s){let o=await xClient.Contracts.CoreV4.connect(s.coreContractAddress,t).populateTransaction.depositERC20(n,r,a,e);return t.sendTransaction(o)}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,s=await t.getAddress(),i=new generatedClients.imx.TokensApi(n),o=new generatedClients.imx.DepositsApi(n),d=new generatedClients.imx.EncodingApi(n),g=await i.getToken({address:e.tokenAddress}),f={decimals:parseInt(g.data.decimals),token_address:e.tokenAddress},p=ethersV5.utils.parseUnits(e.amount,0),E=await xClient.Contracts.IERC20.connect(e.tokenAddress,t).populateTransaction.approve(a.coreContractAddress,p);await t.sendTransaction(E);let _={user:s,token:{type:e.type,data:f},amount:p.toString()},h=await o.getSignableDeposit({getSignableDepositRequest:_}),We=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,Xe=h.data.stark_key,De=h.data.vault_id,qe=BigInt(h.data.amount);return ct(t,qe,We,Xe,De,a)}async function mt(t,e,r,n,a,s){let o=await xClient.Contracts.CoreV4.connect(s.ethConfiguration.coreContractAddress,t).populateTransaction.depositNft(n,r,a,e);return t.sendTransaction(o)}async function Te({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,s=new generatedClients.imx.DepositsApi(a.apiConfiguration),i=new generatedClients.imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},g={user:n,token:{type:e.type,data:o},amount:"1".toString()},m=await s.getSignableDeposit({getSignableDepositRequest:g}),p=(await i.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id,_=xClient.Contracts.IERC721.connect(e.tokenAddress,t),h=a.ethConfiguration.coreContractAddress;return await _.isApprovedForAll(n,h)||await _.setApprovalForAll(h,!0),mt(t,e.tokenId,p,c,E,a)}async function he({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Ce({signers:t,deposit:e,config:r});case"ERC20":return Re({signers:t,deposit:e,config:r});case"ERC721":return Te({signers:t,deposit:e,config:r})}}async function Ae({signers:t,request:e,config:r}){await u(t.ethSigner,r.immutableXConfig);let n=new generatedClients.imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),s=e.amount,i=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(e),amount:s,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=i.data,g=await toolkit.signRaw(o,t.ethSigner),m=await t.starkSigner.signMessage(d),f={sender_stark_key:i.data.sender_stark_key,sender_vault_id:i.data.sender_vault_id,receiver_stark_key:i.data.receiver_stark_key,receiver_vault_id:i.data.receiver_vault_id,asset_id:i.data.asset_id,amount:i.data.amount,nonce:i.data.nonce,expiration_timestamp:i.data.expiration_timestamp,stark_signature:m},p=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:g});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}}var S=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return Z(e,this.config)}registerOffchain(){return J(this.signers,this.config)}batchNftTransfer(e){return F({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return K({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return pe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return z({signers:this.signers,request:e,config:this.config})}createTrade(e){return le({signers:this.signers,request:e,config:this.config})}deposit(e){return he({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return Ae({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return R(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return ue({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return H({signers:this.signers,request:e,config:this.config})}};var be={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ye(t){return !!t?.request}async function Se(t,e){await t.request({method:be.CONNECT}),e&&await t.request({method:be.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var Ct={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function ke({chainID:t}){let e=await lt__default.default();if(!ye(e))throw new Error(Ct.PROVIDER_NOT_FOUND);return await Se(e,t),new ethersV5.providers.Web3Provider(e)}var C="message";function A(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function b(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var O=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=s=>{b(this.iframe,s,"SIGN_MESSAGE_RESPONSE",i=>{window.removeEventListener(C,a),i.success||n(new Error(i.error?.message)),r(i.data.signedMessage);});};window.addEventListener(C,a),A(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{b(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",s=>{window.removeEventListener(C,n),s.success||r(new Error(s.error?.message)),e(s.data.yCoordinate);});};window.addEventListener(C,n),A(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var xe="imx-wallet-app",_t={[config.Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[config.Environment.PRODUCTION]:"https://wallets.immutable.com"},wt="display: none;";function Tt(){return document.querySelector(`iframe#${xe}`)}async function ht(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",xe),r.setAttribute("src",_t[t]),r.setAttribute("style",wt),document.body.appendChild(r),r.onload=()=>e(r);})}async function Pe(t){let e=Tt();return e||await ht(t)}var At="Only sign this request if you\u2019ve initiated an action with Immutable X.",bt="The L2 IMX Wallet connection has failed";async function Ie(t,e){let r=t.getSigner(),n=await r.getAddress(),a=await r.signMessage(At),s=await Pe(e);return new Promise((i,o)=>{let d=g=>{b(s,g,"CONNECT_WALLET_RESPONSE",m=>{window.removeEventListener(C,d),m.success||o(new Error(bt)),i(new O(m.data.starkPublicKey,s));});};window.addEventListener(C,d),A(s,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Oe(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=s=>{b(e,s,"DISCONNECT_WALLET_RESPONSE",i=>{window.removeEventListener(C,a),!i.success&&i.error&&n(i.error),e.remove(),r();});};window.addEventListener(C,a),A(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var y=class extends Error{type;constructor(e,r){super(e),this.type=r;}},N=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new y(n,e.type)}};var L=class t extends S{static imxSigner;static async connect(e){return await N(async()=>{let r=await ke({chainID:e.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Ie(r,e.baseConfig.environment);let n=await r.getSigner(),a=await n.getAddress();return metrics.track("xProvider","log",{address:a,param:"metaMaskProvider.getSigner().getAddress()",val:a}),metrics.track("xProvider","log",{address:a,param:"imxSigner.getAddress()",val:this.imxSigner.getAddress()}),new t(e,n,this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new y("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>{await Oe(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new y("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var U=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new xClient.ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
36
37
 
37
38
  exports.GenericIMXProvider = S;
38
39
  exports.MetaMaskIMXProvider = L;
@@ -3,10 +3,11 @@ import { convertToSignableToken, signRaw, signMessage } from '@imtbl/toolkit';
3
3
  import { ImxConfiguration, Contracts, EncodingApi, MintsApi, signRegisterEthAddress } from '@imtbl/x-client';
4
4
  import { isAxiosError } from 'axios';
5
5
  import * as I from 'enc-utils';
6
- import { parseUnits, BrowserProvider, toUtf8Bytes } from 'ethers';
7
- import pt from '@metamask/detect-provider';
6
+ import { utils, providers } from 'ethers-v5';
7
+ import { track } from '@imtbl/metrics';
8
+ import lt from '@metamask/detect-provider';
8
9
  import { Environment } from '@imtbl/config';
9
10
 
10
- function qe(t,e){return t===e.ethConfiguration.chainID}async function g(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!qe(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function H({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.type==="ERC721"?"1":r.amount,o=await i.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:s,receiver:r.receiver}}),{signable_message:d,payload_hash:u}=o.data,m=await signRaw(d,t),f=await e.signMessage(u),p={sender_stark_key:o.data.sender_stark_key,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:f},c=await i.createTransferV1({createTransferRequest:p,xImxEthAddress:a,xImxEthSignature:m});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function F({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.map(c=>({amount:"1",token:convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let u=await signRaw(d,t),m=[];for(let c of o.data.signable_responses){let E=await e.signMessage(c.payload_hash),w={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:E};m.push(w);}let f={sender_stark_key:o.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:f,xImxEthAddress:a,xImxEthSignature:u}))?.data.transfer_ids}}async function z({signers:t,request:e,config:r}){await g(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),i=e.sell.type==="ERC721"?"1":e.sell.amount,s=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:s,token_buy:convertToSignableToken(e.buy),amount_sell:i,token_sell:convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:u,payload_hash:m}=d.data,f=await signRaw(u,t.ethSigner),p=await t.starkSigner.signMessage(m),c=d.data,E={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:p,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:f};return {...(await a.createOrderV3(E)).data}}async function K({signers:t,request:e,config:r}){let n=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:i,payload_hash:s}=a.data,o=await signRaw(i,t.ethSigner),d=await t.starkSigner.signMessage(s),u=await t.ethSigner.getAddress(),m=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:u,xImxEthSignature:o});return {order_id:m.data.order_id,status:m.data.status}}async function J(t,e){await g(t.ethSigner,e.immutableXConfig);let r=new imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),i=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:s,payload_hash:o}=i.data,d=await signRaw(s,t.ethSigner),u=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:u,stark_key:a}})).data}async function Z(t,e){try{let n=await new imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function R(t,e,r){await g(e,r.immutableXConfig);let n=r.immutableXConfig,a=Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(i){if(i.reason==="USER_UNREGISTERED")return !1;throw i}}var _=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function ee(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await g(r,t.config);let a=t.type==="ERC721"?"1":t.amount,i=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:convertToSignableToken(t),amount:a}}),{signable_message:s,payload_hash:o}=i.data,d=await n.signMessage(o),{ethAddress:u,ethSignature:m}=await signMessage(s,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:_(i.data.sender_stark_key),sender_vault_id:_(i.data.sender_vault_id),receiver_stark_key:_(i.data.receiver_stark_key),receiver_vault_id:_(i.data.receiver_vault_id),amount:a,asset_id:_(i.data.asset_id),expiration_timestamp:_(i.data.expiration_timestamp),nonce:_(i.data.nonce),stark_signature:d},xImxEthAddress:u,xImxEthSignature:m})).data}async function l(t,e,r,n){return (await new imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function k(t,e,r,n){return Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function Qe(t,e,r){let n=await l("asset","ETH",r);return await k(t,e,n.asset_id,r)}async function $e(t,e,r,n){let a=await l("asset","ERC20",n,{token_address:r});return await k(t,e,a.asset_id,n)}async function ze(t,e,r,n,a,i){try{let s=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await l("mintable-asset","ERC721",i,{id:r.tokenId,token_address:r.tokenAddress,...s.data.blueprint&&{blueprint:s.data.blueprint}});return await k(t,e,o.asset_id,i)}catch(s){if(s.response?.status===404){let o=await l("asset","ERC721",i,{token_id:r.tokenId,token_address:r.tokenAddress});return await k(t,e,o.asset_id,i)}throw s}}async function P(t,e,r,n,a,i){switch(r.type){case"ETH":return await Qe(t,e,i);case"ERC20":return await $e(t,e,r.tokenAddress,i);case"ERC721":return await ze(t,e,r,n,a,i);default:throw new Error("Unsupported token type")}}async function v(t,e,r,n,a){let i=new EncodingApi(a.apiConfiguration),s=new MintsApi(a.apiConfiguration),o=await P(t,e,n,i,s,a),d=await P(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}async function re(t,e,r,n,a,i){let s=new EncodingApi(a.apiConfiguration),o=await P(t,e,n,s,i,a),d=await P(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}var ne="ERC20";async function W(t,e,r,n,a){let i=await t.getAddress(),s=await signRegisterEthAddress(e,i,r),d=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerAndWithdrawAll.populateTransaction(i,r,s,n);return t.sendTransaction(d)}async function X(t,e,r,n){let i=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).withdrawAll.populateTransaction(await t.getAddress(),e,r);return t.sendTransaction(i)}async function D(t,e,r,n){let i=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(i)}async function ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await g(t,a.immutableXConfig);let{v3Balance:i,v4Balance:s}=await v(t,r,await t.getAddress(),{type:ne,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await l("asset",ne,a.immutableXConfig,{token_address:n.tokenAddress});if(i>0)return await R(r,t,a)?X(t,r,o.asset_type,a.immutableXConfig):W(t,e,r,o.asset_type,a.immutableXConfig);if(s>0)return D(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var T="ERC721";function oe(t){let{id:e}=t.data,r=t.data.blueprint||"";return I.sanitizeHex(I.utf8ToHex(`{${e}}:{${r}}`))}async function je(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await signRegisterEthAddress(e,a,i),u=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerAndWithdrawNft.populateTransaction(a,i,o,s.asset_type,r.tokenId);return t.sendTransaction(u)}async function Je(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=oe(r),d=await signRegisterEthAddress(e,a,i),m=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(a,i,d,s.asset_type,o);return t.sendTransaction(m)}async function Ze(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>Je(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return je(e,r,n,a);throw i})}async function et(t,e,r,n){let a=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),i=oe(r),o=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(e,a.asset_type,i);return t.sendTransaction(o)}async function tt(t,e,r,n){let a=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),s=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(s)}async function ie(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>et(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return tt(e,r,n,a);throw i})}async function de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i){await g(t,a.immutableXConfig);let s=await t.getAddress(),{v3Balance:o,v4Balance:d}=await re(t,r,s,{type:T,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,i);if(o>0)return await R(r,t,a)?ie(i,t,r,n,a.immutableXConfig):Ze(i,t,e,n,a.immutableXConfig);if(d>0)return ie(i,t,s,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ce="ETH";async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await g(t,n.immutableXConfig);let{v3Balance:a,v4Balance:i}=await v(t,r,await t.getAddress(),{type:ce},n.immutableXConfig),s=await l("asset",ce,n.immutableXConfig);if(a>0)return await R(r,t,n)?X(t,r,s.asset_type,n.immutableXConfig):W(t,e,r,s.asset_type,n.immutableXConfig);if(i>0)return D(t,r,s.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function ge({signers:t,withdrawal:e,config:r}){let n=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ee({signers:t,config:r.immutableXConfig,...e},n)}async function pe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let i=new imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i)}}async function le({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TradesApi(n.immutableXConfig.apiConfiguration),s=await i.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=s.data,u=await signRaw(o,t),m=await e.signMessage(d);return (await i.createTradeV3({createTradeRequest:{amount_buy:s.data.amount_buy,amount_sell:s.data.amount_sell,asset_id_buy:s.data.asset_id_buy,asset_id_sell:s.data.asset_id_sell,expiration_timestamp:s.data.expiration_timestamp,fee_info:s.data.fee_info,fees:r.fees,include_fees:!0,nonce:s.data.nonce,order_id:r.order_id,stark_key:s.data.stark_key,vault_id_buy:s.data.vault_id_buy,vault_id_sell:s.data.vault_id_sell,stark_signature:m},xImxEthAddress:a,xImxEthSignature:u})).data}async function st(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function Ce({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},i=parseUnits(e.amount,"wei"),s=r.immutableXConfig,o=new imx.DepositsApi(s.apiConfiguration),d=new imx.EncodingApi(s.apiConfiguration),u={user:n,token:{type:e.type,data:a},amount:i.toString()},m=await o.getSignableDeposit({getSignableDepositRequest:u}),p=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id;return st(t,i,p,c,E,s)}async function dt(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.coreContractAddress,t).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,i=await t.getAddress(),s=new imx.TokensApi(n),o=new imx.DepositsApi(n),d=new imx.EncodingApi(n),u=await s.getToken({address:e.tokenAddress}),f={decimals:parseInt(u.data.decimals),token_address:e.tokenAddress},p=parseUnits(e.amount,0),E=await Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(a.coreContractAddress,p);await t.sendTransaction(E);let w={user:i,token:{type:e.type,data:f},amount:p.toString()},h=await o.getSignableDeposit({getSignableDepositRequest:w}),Me=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,We=h.data.stark_key,Xe=h.data.vault_id,De=BigInt(h.data.amount);return dt(t,De,Me,We,Xe,a)}async function ct(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Te({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,i=new imx.DepositsApi(a.apiConfiguration),s=new imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},u={user:n,token:{type:e.type,data:o},amount:"1".toString()},m=await i.getSignableDeposit({getSignableDepositRequest:u}),p=(await s.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id,w=Contracts.IERC721.connect(e.tokenAddress,t),h=a.ethConfiguration.coreContractAddress;return await w.isApprovedForAll(n,h)||await w.setApprovalForAll(h,!0),ct(t,e.tokenId,p,c,E,a)}async function he({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Ce({signers:t,deposit:e,config:r});case"ERC20":return Re({signers:t,deposit:e,config:r});case"ERC721":return Te({signers:t,deposit:e,config:r})}}async function Ae({signers:t,request:e,config:r}){await g(t.ethSigner,r.immutableXConfig);let n=new imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),i=e.amount,s=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(e),amount:i,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=s.data,u=await signRaw(o,t.ethSigner),m=await t.starkSigner.signMessage(d),f={sender_stark_key:s.data.sender_stark_key,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:m},p=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:u});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}}var S=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return Z(e,this.config)}registerOffchain(){return J(this.signers,this.config)}batchNftTransfer(e){return F({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return K({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return pe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return z({signers:this.signers,request:e,config:this.config})}createTrade(e){return le({signers:this.signers,request:e,config:this.config})}deposit(e){return he({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return Ae({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return R(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return ge({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return H({signers:this.signers,request:e,config:this.config})}};var be={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ye(t){return !!t?.request}async function Se(t,e){await t.request({method:be.CONNECT}),e&&await t.request({method:be.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var ft={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function ke({chainID:t}){let e=await pt();if(!ye(e))throw new Error(ft.PROVIDER_NOT_FOUND);return await Se(e,t),new BrowserProvider(e)}var C="message";function A(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function b(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var O=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=i=>{b(this.iframe,i,"SIGN_MESSAGE_RESPONSE",s=>{window.removeEventListener(C,a),s.success||n(new Error(s.error?.message)),r(s.data.signedMessage);});};window.addEventListener(C,a),A(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{b(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",i=>{window.removeEventListener(C,n),i.success||r(new Error(i.error?.message)),e(i.data.yCoordinate);});};window.addEventListener(C,n),A(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var ve="imx-wallet-app",Rt={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},wt="display: none;";function _t(){return document.querySelector(`iframe#${ve}`)}async function Tt(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",ve),r.setAttribute("src",Rt[t]),r.setAttribute("style",wt),document.body.appendChild(r),r.onload=()=>e(r);})}async function xe(t){let e=_t();return e||await Tt(t)}var At="Only sign this request if you\u2019ve initiated an action with Immutable X.",bt="The L2 IMX Wallet connection has failed";async function Ie(t,e){let r=await t.getSigner(),n=await r.getAddress(),a=await r.signMessage(toUtf8Bytes(At)),i=await xe(e);return new Promise((s,o)=>{let d=u=>{b(i,u,"CONNECT_WALLET_RESPONSE",m=>{window.removeEventListener(C,d),m.success||o(new Error(bt)),s(new O(m.data.starkPublicKey,i));});};window.addEventListener(C,d),A(i,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Oe(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=i=>{b(e,i,"DISCONNECT_WALLET_RESPONSE",s=>{window.removeEventListener(C,a),!s.success&&s.error&&n(s.error),e.remove(),r();});};window.addEventListener(C,a),A(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var y=class extends Error{type;constructor(e,r){super(e),this.type=r;}},N=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new y(n,e.type)}};var L=class t extends S{static imxSigner;static async connect(e){return await N(async()=>{let r=await ke({chainID:e.immutableXConfig.ethConfiguration.chainID});return this.imxSigner=await Ie(r,e.baseConfig.environment),new t(e,await r.getSigner(),this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new y("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>{await Oe(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new y("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var U=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
11
+ function Le(t,e){return t===e.ethConfiguration.chainID}async function u(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!Le(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function H({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await u(t,n.immutableXConfig);let a=await t.getAddress(),s=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),i=r.type==="ERC721"?"1":r.amount,o=await s.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:i,receiver:r.receiver}}),{signable_message:d,payload_hash:g}=o.data,m=await signRaw(d,t),f=await e.signMessage(g),p={sender_stark_key:o.data.sender_stark_key,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:f},c=await s.createTransferV1({createTransferRequest:p,xImxEthAddress:a,xImxEthSignature:m});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function F({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await u(t,n.immutableXConfig);let a=await t.getAddress(),s=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),i=r.map(c=>({amount:"1",token:convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await s.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:i}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let g=await signRaw(d,t),m=[];for(let c of o.data.signable_responses){let E=await e.signMessage(c.payload_hash),_={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:E};m.push(_);}let f={sender_stark_key:o.data.sender_stark_key,requests:m};return {transfer_ids:(await s.createTransfer({createTransferRequestV2:f,xImxEthAddress:a,xImxEthSignature:g}))?.data.transfer_ids}}async function z({signers:t,request:e,config:r}){await u(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),s=e.sell.type==="ERC721"?"1":e.sell.amount,i=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:i,token_buy:convertToSignableToken(e.buy),amount_sell:s,token_sell:convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:g,payload_hash:m}=d.data,f=await signRaw(g,t.ethSigner),p=await t.starkSigner.signMessage(m),c=d.data,E={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:p,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:f};return {...(await a.createOrderV3(E)).data}}async function K({signers:t,request:e,config:r}){let n=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:s,payload_hash:i}=a.data,o=await signRaw(s,t.ethSigner),d=await t.starkSigner.signMessage(i),g=await t.ethSigner.getAddress(),m=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:g,xImxEthSignature:o});return {order_id:m.data.order_id,status:m.data.status}}async function J(t,e){await u(t.ethSigner,e.immutableXConfig);let r=new imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),s=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:i,payload_hash:o}=s.data,d=await signRaw(i,t.ethSigner),g=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:g,stark_key:a}})).data}async function Z(t,e){try{let n=await new imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function R(t,e,r){await u(e,r.immutableXConfig);let n=r.immutableXConfig,a=Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(s){if(s.reason==="USER_UNREGISTERED")return !1;throw s}}var w=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function ee(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await u(r,t.config);let a=t.type==="ERC721"?"1":t.amount,s=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:convertToSignableToken(t),amount:a}}),{signable_message:i,payload_hash:o}=s.data,d=await n.signMessage(o),{ethAddress:g,ethSignature:m}=await signMessage(i,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:w(s.data.sender_stark_key),sender_vault_id:w(s.data.sender_vault_id),receiver_stark_key:w(s.data.receiver_stark_key),receiver_vault_id:w(s.data.receiver_vault_id),amount:a,asset_id:w(s.data.asset_id),expiration_timestamp:w(s.data.expiration_timestamp),nonce:w(s.data.nonce),stark_signature:d},xImxEthAddress:g,xImxEthSignature:m})).data}async function l(t,e,r,n){return (await new imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function k(t,e,r,n){return Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function $e(t,e,r){let n=await l("asset","ETH",r);return await k(t,e,n.asset_id,r)}async function ze(t,e,r,n){let a=await l("asset","ERC20",n,{token_address:r});return await k(t,e,a.asset_id,n)}async function Ke(t,e,r,n,a,s){try{let i=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await l("mintable-asset","ERC721",s,{id:r.tokenId,token_address:r.tokenAddress,...i.data.blueprint&&{blueprint:i.data.blueprint}});return await k(t,e,o.asset_id,s)}catch(i){if(i.response?.status===404){let o=await l("asset","ERC721",s,{token_id:r.tokenId,token_address:r.tokenAddress});return await k(t,e,o.asset_id,s)}throw i}}async function v(t,e,r,n,a,s){switch(r.type){case"ETH":return await $e(t,e,s);case"ERC20":return await ze(t,e,r.tokenAddress,s);case"ERC721":return await Ke(t,e,r,n,a,s);default:throw new Error("Unsupported token type")}}async function x(t,e,r,n,a){let s=new EncodingApi(a.apiConfiguration),i=new MintsApi(a.apiConfiguration),o=await v(t,e,n,s,i,a),d=await v(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}async function re(t,e,r,n,a,s){let i=new EncodingApi(a.apiConfiguration),o=await v(t,e,n,i,s,a),d=await v(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}var ne="ERC20";async function W(t,e,r,n,a){let s=await t.getAddress(),i=await signRegisterEthAddress(e,s,r),d=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).populateTransaction.registerAndWithdrawAll(s,r,i,n);return t.sendTransaction(d)}async function X(t,e,r,n){let s=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.withdrawAll(await t.getAddress(),e,r);return t.sendTransaction(s)}async function D(t,e,r,n){let s=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdraw(await t.getAddress(),r);return t.sendTransaction(s)}async function ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await u(t,a.immutableXConfig);let{v3Balance:s,v4Balance:i}=await x(t,r,await t.getAddress(),{type:ne,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await l("asset",ne,a.immutableXConfig,{token_address:n.tokenAddress});if(s.gt(0))return await R(r,t,a)?X(t,r,o.asset_type,a.immutableXConfig):W(t,e,r,o.asset_type,a.immutableXConfig);if(i.gt(0))return D(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var T="ERC721";function oe(t){let{id:e}=t.data,r=t.data.blueprint||"";return I.sanitizeHex(I.utf8ToHex(`{${e}}:{${r}}`))}async function Je(t,e,r,n){let a=await t.getAddress(),s=await e.getAddress(),i=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await signRegisterEthAddress(e,a,s),g=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.registerAndWithdrawNft(a,s,o,i.asset_type,r.tokenId);return t.sendTransaction(g)}async function Ze(t,e,r,n){let a=await t.getAddress(),s=await e.getAddress(),i=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=oe(r),d=await signRegisterEthAddress(e,a,s),m=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).populateTransaction.registerWithdrawAndMint(a,s,d,i.asset_type,o);return t.sendTransaction(m)}async function et(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(s=>Ze(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:s.data.blueprint}},a)).catch(s=>{if(s.response?.status===404)return Je(e,r,n,a);throw s})}async function tt(t,e,r,n){let a=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),s=oe(r),o=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdrawAndMint(e,a.asset_type,s);return t.sendTransaction(o)}async function rt(t,e,r,n){let a=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),i=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).populateTransaction.withdrawNft(e,a.asset_type,r.tokenId);return t.sendTransaction(i)}async function se(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(s=>tt(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:s.data.blueprint}},a)).catch(s=>{if(s.response?.status===404)return rt(e,r,n,a);throw s})}async function de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s){await u(t,a.immutableXConfig);let i=await t.getAddress(),{v3Balance:o,v4Balance:d}=await re(t,r,i,{type:T,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,s);if(o.gt(0))return await R(r,t,a)?se(s,t,r,n,a.immutableXConfig):et(s,t,e,n,a.immutableXConfig);if(d.gt(0))return se(s,t,i,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ce="ETH";async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await u(t,n.immutableXConfig);let{v3Balance:a,v4Balance:s}=await x(t,r,await t.getAddress(),{type:ce},n.immutableXConfig),i=await l("asset",ce,n.immutableXConfig);if(a.gt(0))return await R(r,t,n)?X(t,r,i.asset_type,n.immutableXConfig):W(t,e,r,i.asset_type,n.immutableXConfig);if(s.gt(0))return D(t,r,i.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function ue({signers:t,withdrawal:e,config:r}){let n=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ee({signers:t,config:r.immutableXConfig,...e},n)}async function pe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let s=new imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s)}}async function le({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await u(t,n.immutableXConfig);let a=await t.getAddress(),s=new imx.TradesApi(n.immutableXConfig.apiConfiguration),i=await s.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=i.data,g=await signRaw(o,t),m=await e.signMessage(d);return (await s.createTradeV3({createTradeRequest:{amount_buy:i.data.amount_buy,amount_sell:i.data.amount_sell,asset_id_buy:i.data.asset_id_buy,asset_id_sell:i.data.asset_id_sell,expiration_timestamp:i.data.expiration_timestamp,fee_info:i.data.fee_info,fees:r.fees,include_fees:!0,nonce:i.data.nonce,order_id:r.order_id,stark_key:i.data.stark_key,vault_id_buy:i.data.vault_id_buy,vault_id_sell:i.data.vault_id_sell,stark_signature:m},xImxEthAddress:a,xImxEthSignature:g})).data}async function ot(t,e,r,n,a,s){let o=await Contracts.CoreV4.connect(s.ethConfiguration.coreContractAddress,t).populateTransaction["deposit(uint256,uint256,uint256)"](n,r,a);return t.sendTransaction({...o,value:e})}async function Ce({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},s=utils.parseUnits(e.amount,"wei"),i=r.immutableXConfig,o=new imx.DepositsApi(i.apiConfiguration),d=new imx.EncodingApi(i.apiConfiguration),g={user:n,token:{type:e.type,data:a},amount:s.toString()},m=await o.getSignableDeposit({getSignableDepositRequest:g}),p=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id;return ot(t,s,p,c,E,i)}async function ct(t,e,r,n,a,s){let o=await Contracts.CoreV4.connect(s.coreContractAddress,t).populateTransaction.depositERC20(n,r,a,e);return t.sendTransaction(o)}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,s=await t.getAddress(),i=new imx.TokensApi(n),o=new imx.DepositsApi(n),d=new imx.EncodingApi(n),g=await i.getToken({address:e.tokenAddress}),f={decimals:parseInt(g.data.decimals),token_address:e.tokenAddress},p=utils.parseUnits(e.amount,0),E=await Contracts.IERC20.connect(e.tokenAddress,t).populateTransaction.approve(a.coreContractAddress,p);await t.sendTransaction(E);let _={user:s,token:{type:e.type,data:f},amount:p.toString()},h=await o.getSignableDeposit({getSignableDepositRequest:_}),We=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,Xe=h.data.stark_key,De=h.data.vault_id,qe=BigInt(h.data.amount);return ct(t,qe,We,Xe,De,a)}async function mt(t,e,r,n,a,s){let o=await Contracts.CoreV4.connect(s.ethConfiguration.coreContractAddress,t).populateTransaction.depositNft(n,r,a,e);return t.sendTransaction(o)}async function Te({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,s=new imx.DepositsApi(a.apiConfiguration),i=new imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},g={user:n,token:{type:e.type,data:o},amount:"1".toString()},m=await s.getSignableDeposit({getSignableDepositRequest:g}),p=(await i.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id,_=Contracts.IERC721.connect(e.tokenAddress,t),h=a.ethConfiguration.coreContractAddress;return await _.isApprovedForAll(n,h)||await _.setApprovalForAll(h,!0),mt(t,e.tokenId,p,c,E,a)}async function he({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Ce({signers:t,deposit:e,config:r});case"ERC20":return Re({signers:t,deposit:e,config:r});case"ERC721":return Te({signers:t,deposit:e,config:r})}}async function Ae({signers:t,request:e,config:r}){await u(t.ethSigner,r.immutableXConfig);let n=new imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),s=e.amount,i=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(e),amount:s,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=i.data,g=await signRaw(o,t.ethSigner),m=await t.starkSigner.signMessage(d),f={sender_stark_key:i.data.sender_stark_key,sender_vault_id:i.data.sender_vault_id,receiver_stark_key:i.data.receiver_stark_key,receiver_vault_id:i.data.receiver_vault_id,asset_id:i.data.asset_id,amount:i.data.amount,nonce:i.data.nonce,expiration_timestamp:i.data.expiration_timestamp,stark_signature:m},p=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:g});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}}var S=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return Z(e,this.config)}registerOffchain(){return J(this.signers,this.config)}batchNftTransfer(e){return F({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return K({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return pe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return z({signers:this.signers,request:e,config:this.config})}createTrade(e){return le({signers:this.signers,request:e,config:this.config})}deposit(e){return he({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return Ae({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return R(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return ue({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return H({signers:this.signers,request:e,config:this.config})}};var be={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ye(t){return !!t?.request}async function Se(t,e){await t.request({method:be.CONNECT}),e&&await t.request({method:be.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var Ct={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function ke({chainID:t}){let e=await lt();if(!ye(e))throw new Error(Ct.PROVIDER_NOT_FOUND);return await Se(e,t),new providers.Web3Provider(e)}var C="message";function A(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function b(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var O=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=s=>{b(this.iframe,s,"SIGN_MESSAGE_RESPONSE",i=>{window.removeEventListener(C,a),i.success||n(new Error(i.error?.message)),r(i.data.signedMessage);});};window.addEventListener(C,a),A(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{b(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",s=>{window.removeEventListener(C,n),s.success||r(new Error(s.error?.message)),e(s.data.yCoordinate);});};window.addEventListener(C,n),A(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var xe="imx-wallet-app",_t={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},wt="display: none;";function Tt(){return document.querySelector(`iframe#${xe}`)}async function ht(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",xe),r.setAttribute("src",_t[t]),r.setAttribute("style",wt),document.body.appendChild(r),r.onload=()=>e(r);})}async function Pe(t){let e=Tt();return e||await ht(t)}var At="Only sign this request if you\u2019ve initiated an action with Immutable X.",bt="The L2 IMX Wallet connection has failed";async function Ie(t,e){let r=t.getSigner(),n=await r.getAddress(),a=await r.signMessage(At),s=await Pe(e);return new Promise((i,o)=>{let d=g=>{b(s,g,"CONNECT_WALLET_RESPONSE",m=>{window.removeEventListener(C,d),m.success||o(new Error(bt)),i(new O(m.data.starkPublicKey,s));});};window.addEventListener(C,d),A(s,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Oe(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=s=>{b(e,s,"DISCONNECT_WALLET_RESPONSE",i=>{window.removeEventListener(C,a),!i.success&&i.error&&n(i.error),e.remove(),r();});};window.addEventListener(C,a),A(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var y=class extends Error{type;constructor(e,r){super(e),this.type=r;}},N=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new y(n,e.type)}};var L=class t extends S{static imxSigner;static async connect(e){return await N(async()=>{let r=await ke({chainID:e.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Ie(r,e.baseConfig.environment);let n=await r.getSigner(),a=await n.getAddress();return track("xProvider","log",{address:a,param:"metaMaskProvider.getSigner().getAddress()",val:a}),track("xProvider","log",{address:a,param:"imxSigner.getAddress()",val:this.imxSigner.getAddress()}),new t(e,n,this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new y("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>{await Oe(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new y("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var U=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
11
12
 
12
13
  export { S as GenericIMXProvider, L as MetaMaskIMXProvider, U as ProviderConfiguration };
@@ -1,6 +1,5 @@
1
1
  import { imx } from '@imtbl/generated-clients';
2
- import { AnyToken, EthSigner, UnsignedOrderRequest, UnsignedExchangeTransferRequest, GetSignableCancelOrderRequest, GetSignableTradeRequest, CreateTradeResponse, NftTransferDetails, StarkSigner, TokenAmount, UnsignedTransferRequest } from '@imtbl/x-client';
3
- import { TransactionResponse } from 'ethers';
2
+ import { AnyToken, EthSigner, UnsignedOrderRequest, UnsignedExchangeTransferRequest, GetSignableCancelOrderRequest, GetSignableTradeRequest, CreateTradeResponse, NftTransferDetails, StarkSigner, TokenAmount, UnsignedTransferRequest, TransactionResponse } from '@imtbl/x-client';
4
3
  import { ProviderConfiguration } from './config';
5
4
  import { IMXProvider } from './imxProvider';
6
5
  export declare class GenericIMXProvider implements IMXProvider {
@@ -1,5 +1,5 @@
1
1
  import { Environment } from '@imtbl/config';
2
- import { BrowserProvider } from 'ethers';
2
+ import { providers } from 'ethers-v5';
3
3
  import { ImxSigner } from './ImxSigner';
4
- export declare function connect(l1Provider: BrowserProvider, env: Environment): Promise<ImxSigner>;
4
+ export declare function connect(l1Provider: providers.Web3Provider, env: Environment): Promise<ImxSigner>;
5
5
  export declare function disconnect(imxSigner: ImxSigner): Promise<void>;
@@ -1,6 +1,5 @@
1
1
  import { imx } from '@imtbl/generated-clients';
2
- import { AnyToken, UnsignedOrderRequest, UnsignedExchangeTransferRequest, GetSignableCancelOrderRequest, GetSignableTradeRequest, CreateTradeResponse, NftTransferDetails, TokenAmount, UnsignedTransferRequest } from '@imtbl/x-client';
3
- import { TransactionResponse } from 'ethers';
2
+ import { AnyToken, UnsignedOrderRequest, UnsignedExchangeTransferRequest, GetSignableCancelOrderRequest, GetSignableTradeRequest, CreateTradeResponse, NftTransferDetails, TokenAmount, UnsignedTransferRequest, TransactionResponse } from '@imtbl/x-client';
4
3
  export interface IMXProvider {
5
4
  /**
6
5
  * Get the Signer address
@@ -1,3 +1,3 @@
1
- import { BrowserProvider } from 'ethers';
1
+ import { providers } from 'ethers-v5';
2
2
  import { MetamaskConnectParams } from './types';
3
- export declare function connect({ chainID, }: MetamaskConnectParams): Promise<BrowserProvider>;
3
+ export declare function connect({ chainID, }: MetamaskConnectParams): Promise<providers.Web3Provider>;
@@ -1,12 +1,11 @@
1
- import { Eip1193Provider } from 'ethers';
1
+ import { providers } from 'ethers-v5';
2
2
  export declare const WALLET_ACTION: {
3
3
  SWITCH_CHAIN: string;
4
4
  CONNECT: string;
5
5
  };
6
- type ExternalProvider = Eip1193Provider;
7
- type RequestableProvider = ExternalProvider & {
8
- request: NonNullable<ExternalProvider['request']>;
6
+ type RequestableProvider = providers.ExternalProvider & {
7
+ request: NonNullable<providers.ExternalProvider['request']>;
9
8
  };
10
- export declare function isRequestableProvider(provider: ExternalProvider): provider is RequestableProvider;
9
+ export declare function isRequestableProvider(provider: providers.ExternalProvider): provider is RequestableProvider;
11
10
  export declare function connectProvider(provider: RequestableProvider, chainID: number | undefined): Promise<void>;
12
11
  export {};
@@ -1,5 +1,4 @@
1
- import { ERC20Amount } from '@imtbl/x-client';
2
- import { TransactionResponse } from 'ethers';
1
+ import { ERC20Amount, TransactionResponse } from '@imtbl/x-client';
3
2
  import { Signers } from '../types';
4
3
  import { ProviderConfiguration } from '../../config';
5
4
  type DepositERC20Params = {
@@ -1,5 +1,4 @@
1
- import { ERC721Token } from '@imtbl/x-client';
2
- import { TransactionResponse } from 'ethers';
1
+ import { ERC721Token, TransactionResponse } from '@imtbl/x-client';
3
2
  import { Signers } from '../types';
4
3
  import { ProviderConfiguration } from '../../config';
5
4
  type DepositERC721Params = {
@@ -1,5 +1,4 @@
1
1
  import { ETHAmount } from '@imtbl/x-client';
2
- import { TransactionResponse } from 'ethers';
3
2
  import { Signers } from '../types';
4
3
  import { ProviderConfiguration } from '../../config';
5
4
  type DepositEthParams = {
@@ -7,5 +6,5 @@ type DepositEthParams = {
7
6
  deposit: ETHAmount;
8
7
  config: ProviderConfiguration;
9
8
  };
10
- export declare function depositEth({ signers: { ethSigner }, deposit, config, }: DepositEthParams): Promise<TransactionResponse>;
9
+ export declare function depositEth({ signers: { ethSigner }, deposit, config, }: DepositEthParams): Promise<import("@ethersproject/abstract-provider").TransactionResponse>;
11
10
  export {};
@@ -6,5 +6,5 @@ type DepositParams = {
6
6
  deposit: TokenAmount;
7
7
  config: ProviderConfiguration;
8
8
  };
9
- export declare function deposit({ signers, deposit, config }: DepositParams): Promise<import("ethers").TransactionResponse>;
9
+ export declare function deposit({ signers, deposit, config }: DepositParams): Promise<import("@ethersproject/abstract-provider").TransactionResponse>;
10
10
  export {};
@@ -1,5 +1,5 @@
1
- import { ERC20Token, ImmutableXConfiguration, StarkSigner } from '@imtbl/x-client';
2
- import { Signer, TransactionResponse } from 'ethers';
1
+ import { ERC20Token, ImmutableXConfiguration, StarkSigner, TransactionResponse } from '@imtbl/x-client';
2
+ import { Signer } from 'ethers-v5';
3
3
  import { ProviderConfiguration } from '../../config';
4
4
  type CompleteERC20WithdrawalWorkflowParams = {
5
5
  ethSigner: Signer;
@@ -11,5 +11,5 @@ type CompleteERC20WithdrawalWorkflowParams = {
11
11
  export declare function executeRegisterAndWithdrawAllFungible(ethSigner: Signer, starkSigner: StarkSigner, starkPublicKey: string, assetType: string, config: ImmutableXConfiguration): Promise<TransactionResponse>;
12
12
  export declare function executeWithdrawAllFungible(ethSigner: Signer, starkPublicKey: string, assetType: string, config: ImmutableXConfiguration): Promise<TransactionResponse>;
13
13
  export declare function executeWithdrawFungible(ethSigner: Signer, starkPublicKey: string, assetType: string, config: ImmutableXConfiguration): Promise<TransactionResponse>;
14
- export declare function completeERC20WithdrawalAction({ ethSigner, starkSigner, starkPublicKey, token, config, }: CompleteERC20WithdrawalWorkflowParams): Promise<TransactionResponse>;
14
+ export declare function completeERC20WithdrawalAction({ ethSigner, starkSigner, starkPublicKey, token, config, }: CompleteERC20WithdrawalWorkflowParams): Promise<import("@ethersproject/abstract-provider").TransactionResponse>;
15
15
  export {};
@@ -1,5 +1,5 @@
1
1
  import { ERC721Token, MintsApi, StarkSigner } from '@imtbl/x-client';
2
- import { Signer, TransactionResponse } from 'ethers';
2
+ import { Signer } from 'ethers-v5';
3
3
  import { ProviderConfiguration } from '../../config';
4
4
  type CompleteERC721WithdrawalActionParams = {
5
5
  ethSigner: Signer;
@@ -8,5 +8,5 @@ type CompleteERC721WithdrawalActionParams = {
8
8
  token: ERC721Token;
9
9
  config: ProviderConfiguration;
10
10
  };
11
- export declare function completeERC721WithdrawalAction({ ethSigner, starkSigner, starkPublicKey, token, config, }: CompleteERC721WithdrawalActionParams, mintsApi: MintsApi): Promise<TransactionResponse>;
11
+ export declare function completeERC721WithdrawalAction({ ethSigner, starkSigner, starkPublicKey, token, config, }: CompleteERC721WithdrawalActionParams, mintsApi: MintsApi): Promise<import("@ethersproject/abstract-provider").TransactionResponse>;
12
12
  export {};
@@ -1,5 +1,5 @@
1
- import { StarkSigner } from '@imtbl/x-client';
2
- import { Signer, TransactionResponse } from 'ethers';
1
+ import { StarkSigner, TransactionResponse } from '@imtbl/x-client';
2
+ import { Signer } from 'ethers-v5';
3
3
  import { ProviderConfiguration } from '../../config';
4
4
  type CompleteEthWithdrawalActionParams = {
5
5
  ethSigner: Signer;
@@ -1,11 +1,11 @@
1
1
  import { AnyToken, EncodingApi, ImmutableXConfiguration, MintsApi } from '@imtbl/x-client';
2
- import { Signer } from 'ethers';
3
- export declare function getWithdrawalBalanceWorkflow(signer: Signer, ownerKey: string, token: AnyToken, encodingApi: EncodingApi, mintsApi: MintsApi, config: ImmutableXConfiguration): Promise<bigint>;
2
+ import { BigNumber, Signer } from 'ethers-v5';
3
+ export declare function getWithdrawalBalanceWorkflow(signer: Signer, ownerKey: string, token: AnyToken, encodingApi: EncodingApi, mintsApi: MintsApi, config: ImmutableXConfiguration): Promise<BigNumber>;
4
4
  export declare function getWithdrawalBalances(signer: Signer, starkPublicKey: string, ethAddress: string, token: AnyToken, config: ImmutableXConfiguration): Promise<{
5
- v3Balance: bigint;
6
- v4Balance: bigint;
5
+ v3Balance: BigNumber;
6
+ v4Balance: BigNumber;
7
7
  }>;
8
8
  export declare function getWithdrawalBalancesERC721(signer: Signer, starkPublicKey: string, ethAddress: string, token: AnyToken, config: ImmutableXConfiguration, mintsApi: MintsApi): Promise<{
9
- v3Balance: bigint;
10
- v4Balance: bigint;
9
+ v3Balance: BigNumber;
10
+ v4Balance: BigNumber;
11
11
  }>;
@@ -14,5 +14,5 @@ type PrepareWithdrawalParams = {
14
14
  config: ProviderConfiguration;
15
15
  };
16
16
  export declare function prepareWithdrawal({ signers, withdrawal, config, }: PrepareWithdrawalParams): Promise<imx.CreateWithdrawalResponse>;
17
- export declare function completeWithdrawal({ signers: { ethSigner, starkSigner }, starkPublicKey, token, config, }: CompleteWithdrawalParams): Promise<import("ethers").TransactionResponse>;
17
+ export declare function completeWithdrawal({ signers: { ethSigner, starkSigner }, starkPublicKey, token, config, }: CompleteWithdrawalParams): Promise<import("@ethersproject/abstract-provider").TransactionResponse>;
18
18
  export {};
package/package.json CHANGED
@@ -1,19 +1,21 @@
1
1
  {
2
2
  "name": "@imtbl/x-provider",
3
3
  "description": "Provider package for Immutable SDK",
4
- "version": "2.1.16-alpha.0",
4
+ "version": "2.1.16-alpha.2",
5
5
  "author": "Immutable",
6
6
  "bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
7
7
  "dependencies": {
8
- "@imtbl/config": "2.1.16-alpha.0",
9
- "@imtbl/generated-clients": "2.1.16-alpha.0",
10
- "@imtbl/toolkit": "2.1.16-alpha.0",
11
- "@imtbl/x-client": "2.1.16-alpha.0",
8
+ "@ethersproject/abstract-provider": "^5.8.0",
9
+ "@imtbl/config": "2.1.16-alpha.2",
10
+ "@imtbl/generated-clients": "2.1.16-alpha.2",
11
+ "@imtbl/metrics": "2.1.16-alpha.2",
12
+ "@imtbl/toolkit": "2.1.16-alpha.2",
13
+ "@imtbl/x-client": "2.1.16-alpha.2",
12
14
  "@magic-ext/oidc": "12.0.2",
13
15
  "@metamask/detect-provider": "^2.0.0",
14
16
  "axios": "^1.6.5",
15
17
  "enc-utils": "^3.0.0",
16
- "ethers": "^6.13.4",
18
+ "ethers-v5": "npm:ethers@5.7.2",
17
19
  "magic-sdk": "^29.0.2",
18
20
  "oidc-client-ts": "2.4.0"
19
21
  },