@imtbl/x-provider 2.1.10-alpha.2 → 2.1.11-alpha.0

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,10 @@ 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 { parseUnits, BrowserProvider, toUtf8String, toUtf8Bytes } from 'ethers';
7
+ import Ct from '@metamask/detect-provider';
8
8
  import { Environment } from '@imtbl/config';
9
9
 
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;}}};
10
+ 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 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.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 $({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 Z({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 te(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 re(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 ne(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 v(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 v(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 v(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 v(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 v(t,e,o.asset_id,s)}throw i}}async function x(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 x(t,e,n,s,i,a),d=await x(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}async function se(t,e,r,n,a,s){let i=new EncodingApi(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}}var ie="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).registerAndWithdrawAll.populateTransaction(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).withdrawAll.populateTransaction(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).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(s)}async function oe({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:ie,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await C("asset",ie,a.immutableXConfig,{token_address:n.tokenAddress});if(s>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>0)return L(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var A="ERC721";function me(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).registerAndWithdrawNft.populateTransaction(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=me(r),d=await signRegisterEthAddress(e,a,s),u=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(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=me(r),o=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(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).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(i)}async function de(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 ge({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 se(t,r,i,{type:A,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,s);if(o>0)return await w(r,t,a)?de(s,t,r,n,a.immutableXConfig):rt(s,t,e,n,a.immutableXConfig);if(d>0)return de(s,t,i,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ue="ETH";async function pe({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:ue},n.immutableXConfig),i=await C("asset",ue,n.immutableXConfig);if(a>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>0)return L(t,r,i.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function fe({signers:t,withdrawal:e,config:r}){let n=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ne({signers:t,config:r.immutableXConfig,...e},n)}async function Ce({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 pe({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return oe({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return ge({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s)}}async function Ee({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)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function _e({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},s=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).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Te({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=parseUnits(e.amount,0),_=await Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(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).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function be({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 ye({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return _e({signers:t,deposit:e,config:r});case"ERC20":return Te({signers:t,deposit:e,config:r});case"ERC721":return be({signers:t,deposit:e,config:r})}}async function Se({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 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 re(e,this.config)}registerOffchain(){return te(this.signers,this.config)}batchNftTransfer(e){return $({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return Z({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return Ce({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 Ee({signers:this.signers,request:e,config:this.config})}deposit(e){return ye({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return Se({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 fe({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return Q({signers:this.signers,request:e,config:this.config})}};var ke={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function Pe(t){return !!t?.request}async function ve(t,e){await t.request({method:ke.CONNECT}),e&&await t.request({method:ke.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(!Pe(e))throw new Error(Rt.PROVIDER_NOT_FOUND);return await ve(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 console.log("signMessage.rawMessage",{rawMessage:e}),console.log("signMessage.toUtf8Bytes.toString()",{toUtf8Bytes:toUtf8Bytes(e).toString()}),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 Oe="imx-wallet-app",ht={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},At="display: none;";function bt(){return document.querySelector(`iframe#${Oe}`)}async function yt(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",Oe),r.setAttribute("src",ht[t]),r.setAttribute("style",At),document.body.appendChild(r),r.onload=()=>e(r);})}async function Ne(t){let e=bt();return e||await yt(t)}var B=new Uint8Array([79,110,108,121,32,115,105,103,110,32,116,104,105,115,32,114,101,113,117,101,115,116,32,105,102,32,121,111,117,226,128,153,118,101,32,105,110,105,116,105,97,116,101,100,32,97,110,32,97,99,116,105,111,110,32,119,105,116,104,32,73,109,109,117,116,97,98,108,101,32,88,46]),kt="The L2 IMX Wallet connection has failed";async function Me(t,e){let r=await t.getSigner(),n=await r.getAddress();console.log("DEFAULT_CONNECTION_BYTES.toString()",{bytes:B.toString()}),console.log("DEFAULT_CONNECTION_BYTES.toUtf8String()",{bytes:toUtf8String(B)});let a=await r.signMessage(B),s=await Ne(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(kt)),i(new M(u.data.starkPublicKey,s));});};window.addEventListener(R,d),y(s,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function We(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 V=class t extends P{static imxSigner;static async connect(e){return await W(async()=>{let r=await xe({chainID:e.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Me(r,e.baseConfig.environment);let n=await r.getSigner();return console.log("metaMaskProvider.getSigner().getAddress()",await n.getAddress()),console.log("imxSigner.getAddress()",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 We(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 G=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
11
 
12
- export { P as GenericIMXProvider, V as MetaMaskIMXProvider, B as ProviderConfiguration };
12
+ export { P as GenericIMXProvider, V as MetaMaskIMXProvider, G as ProviderConfiguration };
@@ -6,7 +6,7 @@ var xClient = require('@imtbl/x-client');
6
6
  var axios = require('axios');
7
7
  var I = require('enc-utils');
8
8
  var ethers = require('ethers');
9
- var pt = require('@metamask/detect-provider');
9
+ var lt = require('@metamask/detect-provider');
10
10
  var config = require('@imtbl/config');
11
11
 
12
12
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -30,10 +30,10 @@ function _interopNamespace(e) {
30
30
  }
31
31
 
32
32
  var I__namespace = /*#__PURE__*/_interopNamespace(I);
33
- var pt__default = /*#__PURE__*/_interopDefault(pt);
33
+ var lt__default = /*#__PURE__*/_interopDefault(lt);
34
34
 
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;}}};
35
+ 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 Y({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 K({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 j({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 Z(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 ee(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 te(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 P(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 v(t,e,r,n,a){let s=new xClient.EncodingApi(a.apiConfiguration),i=new xClient.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 ne(t,e,r,n,a,s){let i=new xClient.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 ae="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).registerAndWithdrawAll.populateTransaction(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).withdrawAll.populateTransaction(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).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(s)}async function se({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await u(t,a.immutableXConfig);let{v3Balance:s,v4Balance:i}=await v(t,r,await t.getAddress(),{type:ae,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await l("asset",ae,a.immutableXConfig,{token_address:n.tokenAddress});if(s>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>0)return D(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var T="ERC721";function de(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).registerAndWithdrawNft.populateTransaction(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=de(r),d=await xClient.signRegisterEthAddress(e,a,s),m=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(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=de(r),o=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(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).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(i)}async function ie(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 ce({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 ne(t,r,i,{type:T,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,s);if(o>0)return await R(r,t,a)?ie(s,t,r,n,a.immutableXConfig):et(s,t,e,n,a.immutableXConfig);if(d>0)return ie(s,t,i,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var me="ETH";async function ge({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await u(t,n.immutableXConfig);let{v3Balance:a,v4Balance:s}=await v(t,r,await t.getAddress(),{type:me},n.immutableXConfig),i=await l("asset",me,n.immutableXConfig);if(a>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>0)return D(t,r,i.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function pe({signers:t,withdrawal:e,config:r}){let n=new generatedClients.imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return te({signers:t,config:r.immutableXConfig,...e},n)}async function le({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 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 ce({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s)}}async function fe({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)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function Ee({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},s=ethers.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).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function _e({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=ethers.parseUnits(e.amount,0),E=await xClient.Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(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).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function he({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 Ae({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Ee({signers:t,deposit:e,config:r});case"ERC20":return _e({signers:t,deposit:e,config:r});case"ERC721":return he({signers:t,deposit:e,config:r})}}async function be({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 ee(e,this.config)}registerOffchain(){return Z(this.signers,this.config)}batchNftTransfer(e){return Y({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return j({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return le({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return K({signers:this.signers,request:e,config:this.config})}createTrade(e){return fe({signers:this.signers,request:e,config:this.config})}deposit(e){return Ae({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return be({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 pe({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return H({signers:this.signers,request:e,config:this.config})}};var ye={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function Se(t){return !!t?.request}async function ke(t,e){await t.request({method:ye.CONNECT}),e&&await t.request({method:ye.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var Ct={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function Pe({chainID:t}){let e=await lt__default.default();if(!Se(e))throw new Error(Ct.PROVIDER_NOT_FOUND);return await ke(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 console.log("signMessage.rawMessage",{rawMessage:e}),console.log("signMessage.toUtf8Bytes.toString()",{toUtf8Bytes:ethers.toUtf8Bytes(e).toString()}),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",wt={[config.Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[config.Environment.PRODUCTION]:"https://wallets.immutable.com"},Tt="display: none;";function ht(){return document.querySelector(`iframe#${xe}`)}async function At(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",xe),r.setAttribute("src",wt[t]),r.setAttribute("style",Tt),document.body.appendChild(r),r.onload=()=>e(r);})}async function Ie(t){let e=ht();return e||await At(t)}var L=new Uint8Array([79,110,108,121,32,115,105,103,110,32,116,104,105,115,32,114,101,113,117,101,115,116,32,105,102,32,121,111,117,226,128,153,118,101,32,105,110,105,116,105,97,116,101,100,32,97,110,32,97,99,116,105,111,110,32,119,105,116,104,32,73,109,109,117,116,97,98,108,101,32,88,46]),yt="The L2 IMX Wallet connection has failed";async function Oe(t,e){let r=await t.getSigner(),n=await r.getAddress();console.log("DEFAULT_CONNECTION_BYTES.toString()",{bytes:L.toString()}),console.log("DEFAULT_CONNECTION_BYTES.toUtf8String()",{bytes:ethers.toUtf8String(L)});let a=await r.signMessage(L),s=await Ie(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(yt)),i(new O(m.data.starkPublicKey,s));});};window.addEventListener(C,d),A(s,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Ne(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 U=class t extends S{static imxSigner;static async connect(e){return await N(async()=>{let r=await Pe({chainID:e.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Oe(r,e.baseConfig.environment);let n=await r.getSigner();return console.log("metaMaskProvider.getSigner().getAddress()",await n.getAddress()),console.log("imxSigner.getAddress()",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 Ne(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 B=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
36
 
37
37
  exports.GenericIMXProvider = S;
38
- exports.MetaMaskIMXProvider = L;
39
- exports.ProviderConfiguration = U;
38
+ exports.MetaMaskIMXProvider = U;
39
+ exports.ProviderConfiguration = B;
@@ -3,10 +3,10 @@ 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 { parseUnits, BrowserProvider, toUtf8String, toUtf8Bytes } from 'ethers';
7
+ import lt from '@metamask/detect-provider';
8
8
  import { Environment } from '@imtbl/config';
9
9
 
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;}}};
10
+ 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 Y({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 K({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 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),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 Z(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 ee(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 te(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 P(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 v(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 ne(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 ae="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).registerAndWithdrawAll.populateTransaction(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).withdrawAll.populateTransaction(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).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(s)}async function se({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await u(t,a.immutableXConfig);let{v3Balance:s,v4Balance:i}=await v(t,r,await t.getAddress(),{type:ae,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await l("asset",ae,a.immutableXConfig,{token_address:n.tokenAddress});if(s>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>0)return D(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var T="ERC721";function de(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).registerAndWithdrawNft.populateTransaction(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=de(r),d=await signRegisterEthAddress(e,a,s),m=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(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=de(r),o=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(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).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(i)}async function ie(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 ce({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 ne(t,r,i,{type:T,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,s);if(o>0)return await R(r,t,a)?ie(s,t,r,n,a.immutableXConfig):et(s,t,e,n,a.immutableXConfig);if(d>0)return ie(s,t,i,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var me="ETH";async function ge({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await u(t,n.immutableXConfig);let{v3Balance:a,v4Balance:s}=await v(t,r,await t.getAddress(),{type:me},n.immutableXConfig),i=await l("asset",me,n.immutableXConfig);if(a>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>0)return D(t,r,i.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function pe({signers:t,withdrawal:e,config:r}){let n=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return te({signers:t,config:r.immutableXConfig,...e},n)}async function le({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 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 ce({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},s)}}async function fe({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)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function Ee({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},s=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).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function _e({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=parseUnits(e.amount,0),E=await Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(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).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function he({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 Ae({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Ee({signers:t,deposit:e,config:r});case"ERC20":return _e({signers:t,deposit:e,config:r});case"ERC721":return he({signers:t,deposit:e,config:r})}}async function be({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 ee(e,this.config)}registerOffchain(){return Z(this.signers,this.config)}batchNftTransfer(e){return Y({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return j({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return le({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return K({signers:this.signers,request:e,config:this.config})}createTrade(e){return fe({signers:this.signers,request:e,config:this.config})}deposit(e){return Ae({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return be({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 pe({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return H({signers:this.signers,request:e,config:this.config})}};var ye={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function Se(t){return !!t?.request}async function ke(t,e){await t.request({method:ye.CONNECT}),e&&await t.request({method:ye.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var Ct={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function Pe({chainID:t}){let e=await lt();if(!Se(e))throw new Error(Ct.PROVIDER_NOT_FOUND);return await ke(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 console.log("signMessage.rawMessage",{rawMessage:e}),console.log("signMessage.toUtf8Bytes.toString()",{toUtf8Bytes:toUtf8Bytes(e).toString()}),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",wt={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},Tt="display: none;";function ht(){return document.querySelector(`iframe#${xe}`)}async function At(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",xe),r.setAttribute("src",wt[t]),r.setAttribute("style",Tt),document.body.appendChild(r),r.onload=()=>e(r);})}async function Ie(t){let e=ht();return e||await At(t)}var L=new Uint8Array([79,110,108,121,32,115,105,103,110,32,116,104,105,115,32,114,101,113,117,101,115,116,32,105,102,32,121,111,117,226,128,153,118,101,32,105,110,105,116,105,97,116,101,100,32,97,110,32,97,99,116,105,111,110,32,119,105,116,104,32,73,109,109,117,116,97,98,108,101,32,88,46]),yt="The L2 IMX Wallet connection has failed";async function Oe(t,e){let r=await t.getSigner(),n=await r.getAddress();console.log("DEFAULT_CONNECTION_BYTES.toString()",{bytes:L.toString()}),console.log("DEFAULT_CONNECTION_BYTES.toUtf8String()",{bytes:toUtf8String(L)});let a=await r.signMessage(L),s=await Ie(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(yt)),i(new O(m.data.starkPublicKey,s));});};window.addEventListener(C,d),A(s,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Ne(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 U=class t extends S{static imxSigner;static async connect(e){return await N(async()=>{let r=await Pe({chainID:e.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Oe(r,e.baseConfig.environment);let n=await r.getSigner();return console.log("metaMaskProvider.getSigner().getAddress()",await n.getAddress()),console.log("imxSigner.getAddress()",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 Ne(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 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
11
 
12
- export { S as GenericIMXProvider, L as MetaMaskIMXProvider, U as ProviderConfiguration };
12
+ export { S as GenericIMXProvider, U as MetaMaskIMXProvider, B as ProviderConfiguration };
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@imtbl/x-provider",
3
3
  "description": "Provider package for Immutable SDK",
4
- "version": "2.1.10-alpha.2",
4
+ "version": "2.1.11-alpha.0",
5
5
  "author": "Immutable",
6
6
  "bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
7
7
  "dependencies": {
8
- "@imtbl/config": "2.1.10-alpha.2",
9
- "@imtbl/generated-clients": "2.1.10-alpha.2",
10
- "@imtbl/toolkit": "2.1.10-alpha.2",
11
- "@imtbl/x-client": "2.1.10-alpha.2",
12
- "@magic-ext/oidc": "12.0.2",
8
+ "@imtbl/config": "2.1.11-alpha.0",
9
+ "@imtbl/generated-clients": "2.1.11-alpha.0",
10
+ "@imtbl/toolkit": "2.1.11-alpha.0",
11
+ "@imtbl/x-client": "2.1.11-alpha.0",
12
+ "@magic-ext/oidc": "12.0.0",
13
13
  "@metamask/detect-provider": "^2.0.0",
14
14
  "axios": "^1.6.5",
15
15
  "enc-utils": "^3.0.0",
16
16
  "ethers": "^6.13.4",
17
- "magic-sdk": "^29.0.2",
17
+ "magic-sdk": "^29.0.0",
18
18
  "oidc-client-ts": "2.4.0"
19
19
  },
20
20
  "devDependencies": {