@avalabs/evm-module 3.1.4 → 3.3.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.
package/dist/index.cjs CHANGED
@@ -23,24 +23,24 @@ var dr__default = /*#__PURE__*/_interopDefault(dr);
23
23
  var so__default = /*#__PURE__*/_interopDefault(so);
24
24
  var pr__default = /*#__PURE__*/_interopDefault(pr);
25
25
 
26
- async function _e({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.rpcErrors.internal(`Failed to fetch tokens for chainId ${t}`);return r.json()}var Y=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=D.exponential()})=>{let a=0,o=0,s;for(;o<r;){o>0&&await gn(a);try{let c=await t(o);if(e(c))return c}catch(c){s=c;}a=n(o),o++;}let i=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(i)},D=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}static linearThenExponential(e,r){return n=>{if(n<e)return (n+1)*r;let a=n-e+1,o=e*r,s=2*r*(Math.pow(2,a)-1);return o+s}}};function gn(t){return new Promise(e=>setTimeout(e,t))}var lt=t=>Y({operation:e=>t(e>0),maxRetries:2,backoffPolicy:D.constant(1),isSuccess:e=>e?.status?.error_code!==429});function wt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function pt(t){let e,r=0;for(e=0;e<t.length;e++){let n=wt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function N(t,e){let r=await fetch(...t);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let n=await r.json();return e.parse(n)}var ke=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return N([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return N([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var hn=zod.z.array(zod.z.object({internalId:zod.z.string(),id:zod.z.string(),symbol:zod.z.string(),name:zod.z.string(),image:zod.z.string().optional().nullable(),current_price:zod.z.number().optional().nullable(),price_change_percentage_24h:zod.z.number().optional().nullable(),market_cap:zod.z.number().optional().nullable(),total_volume:zod.z.number().optional().nullable(),platforms:zod.z.record(zod.z.string(),zod.z.string())})),De=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return N([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],hn)}};var Bt=coreCoingeckoSdk.getBasicCoingeckoHttp(),O,K,H=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,O,void 0);chunkTKL4UUHE_cjs.c(this,K,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let o=e[a];n[a]={},r.forEach(s=>{n[a]={[s]:{price:o?.[s],change24:o?.[`${s}_24h_change`],vol24:o?.[`${s}_24h_vol`],marketCap:o?.[`${s}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,O,e),chunkTKL4UUHE_cjs.d(this,K,r);}async getWatchlistDataForToken({tokenDetails:e,currency:r=coreCoingeckoSdk.VsCurrencyType.USD}){let a=(await new De(chunkTKL4UUHE_cjs.b(this,K)).watchlistToken({tokens:e.symbol,currency:r})).filter(o=>e.isNative?o.internalId===`NATIVE-${e.symbol.toLowerCase()}`:o.platforms[e.caip2Id]===e.address)[0];return a?{priceInCurrency:a.current_price??0,change24:a.price_change_percentage_24h??0,marketCap:a.market_cap??0,vol24:a.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,o=`getSimplePrice-${e?`${pt(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,O)?.get?.(o),n)return n;try{n=await lt(s=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,O)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let a,s=`getPricesWithMarketDataByAddresses-${`${pt(e)}-${r}-${n}`}`;if(a=chunkTKL4UUHE_cjs.b(this,O)?.get?.(s),a)return a;try{a=await lt(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return chunkTKL4UUHE_cjs.b(this,O)?.set?.(s,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let o=await new ke(chunkTKL4UUHE_cjs.b(this,K)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[n])}return coreCoingeckoSdk.simpleTokenPrice(Bt,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD],marketCap:n=!1,vol24:a=!1,change24:o=!1,lastUpdated:s=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new ke(chunkTKL4UUHE_cjs.b(this,K)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:o,include_last_updated_at:s});return this.transformSimplePriceResponse(l,r)}return coreCoingeckoSdk.simplePrice(Bt,{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:o,lastUpdated:s,shouldThrow:c})}};O=new WeakMap,K=new WeakMap;var xn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Sn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",Nt=zod.object({date:zod.string(),usd:zod.record(zod.number())}),Ue=async()=>{try{return await N([xn],Nt)}catch{return await N([Sn],Nt)}};var mt=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Fe=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),ne=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Le=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.NETWORK,value:e});var dt=({name:t,version:e})=>{switch(t){case vmModuleTypes.AppName.CORE_MOBILE_IOS:case vmModuleTypes.AppName.CORE_MOBILE_ANDROID:case vmModuleTypes.AppName.CORE_WEB:case vmModuleTypes.AppName.CORE_EXTENSION:case vmModuleTypes.AppName.EXPLORER:return {"x-application-name":t,"x-application-version":e};case vmModuleTypes.AppName.OTHER:return}};var _t=process.env.GLACIER_API_KEY;var Ee=()=>_t;var An={rltoken:Ee()},ve=class extends glacierSdk.FetchHttpRequest{constructor(e){super(e);}request(e){let r={...An,...e.query||{}},n={...e,query:Object.keys(r).length>0?r:void 0};return super.request(n)}};var C=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:o=2e3}=t,s=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:a},Nn(n),new ethers.Network(r,e));return s.pollingInterval=o,s},Bn=["glacier-api.avax.network","proxy-api.avax.network"];function Nn(t){let e=new URL(t),r=Ee();if(r&&Bn.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}var ft={LOW:1n,MEDIUM:4n,HIGH:6n},yt=500000000n,_n=t=>t===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||t===coreChainsSdk.ChainId.AVALANCHE_MAINNET_ID;async function Gt({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:o}){let s=await C({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!o)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");if(_n(t))try{let E=await Dn(s);return {...E,baseFee:E.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}let i=await s.getBlock("latest",!1);if(!i)throw rpcErrors.rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await Un(o,a),p=new coreUtilsSdk.TokenUnit(l,0,""),d=new coreUtilsSdk.TokenUnit(c,0,""),m=BigInt("1000000000"),u=d.mul(p).add(m).toSubUnit(),y=yt*ft.LOW,h=yt*ft.MEDIUM,v=yt*ft.HIGH;return {baseFee:u,low:{maxFeePerGas:u+y,maxPriorityFeePerGas:y},medium:{maxFeePerGas:u+h,maxPriorityFeePerGas:h},high:{maxFeePerGas:u+v,maxPriorityFeePerGas:v},isFixedFee:!1,displayDecimals:9}}async function Dn(t){let e=await t.send("eth_suggestPriceOptions",[]);return {low:{maxFeePerGas:BigInt(e.slow.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.slow.maxPriorityFeePerGas)},medium:{maxFeePerGas:BigInt(e.normal.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.normal.maxPriorityFeePerGas)},high:{maxFeePerGas:BigInt(e.fast.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.fast.maxPriorityFeePerGas)}}}async function Un(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let a=await n.json();return a[e]??a.default}catch{return 1.5}}function $(t,e,r="tx"){return `${t}/${r}/${e}`}var Lt=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:a})=>{let o=t.from.toLowerCase()===a.toLowerCase(),s=parseInt(t.timeStamp)*1e3,i=e.decimals,l=new coreUtilsSdk.TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=o?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,{from:d,to:m,gasPrice:u,gasUsed:y,hash:h}=t,v=$(n,h);return {isIncoming:!o,isOutgoing:o,isContractCall:Ln(t),timestamp:s,hash:h,isSender:o,from:d,to:m,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:vmModuleTypes.TokenType.NATIVE}],gasUsed:y,gasPrice:u,chainId:r.toString(),txType:p,explorerLink:v}};function Ln(t){return t.input!=="0x"}function Mt({tx:t,address:e,explorerUrl:r,chainId:n}){let a=t.from.toLowerCase()===e.toLowerCase(),o=parseInt(t.timeStamp)*1e3,i=new coreUtilsSdk.TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:d,hash:m,tokenDecimal:u,tokenName:y,tokenSymbol:h,contractAddress:v}=t,E=a?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,P=$(r,m);return {isIncoming:!a,isOutgoing:a,isContractCall:!1,timestamp:o,hash:m,isSender:a,from:c,to:l,tokens:[{decimal:u,name:y,symbol:h,type:vmModuleTypes.TokenType.ERC20,amount:i,address:v}],gasUsed:d,gasPrice:p,chainId:n.toString(),txType:E,explorerLink:P}}var Ot=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:a,nextPageToken:o,offset:s})=>{let i=o?JSON.parse(o):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await coreEtherscanSdk.getNormalTxs(a,!t,{page:c,offset:s}):[]).map(h=>Lt({tx:h,chainId:n,networkToken:e,explorerUrl:r,address:a})),d=(l.includes("erc20")?await coreEtherscanSdk.getErc20Txs(a,!t,void 0,{page:c,offset:s}):[]).map(h=>Mt({tx:h,address:a,explorerUrl:r,chainId:n})),m=d.map(h=>h.hash),u=p.filter(h=>!m.includes(h.hash)),y={queries:[],page:c+1};return p.length&&y.queries.push("normal"),d.length&&y.queries.push("erc20"),{transactions:[...u,...d],nextPageToken:y.queries.length?JSON.stringify(y):""}};var Ht=t=>t===1||t===5||t===4||t===11155111;var qt=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,o)=>{let s=!e&&!r&&!n,i=Wn(t.method?.methodName),c=a.toLowerCase(),l=i.toLowerCase().includes("swap"),p=s&&t.from.address.toLowerCase()===c,d=s&&t.to.address.toLowerCase()===c,m=i==="Market Buy Orders With Eth"||i==="Buy NFT",u=i==="Approve",y=i.toLowerCase().includes("transfer"),h=i.toLowerCase().includes("airdrop"),v=i.toLowerCase().includes("unwrap"),E=i==="Fill Order",P=!!o[0]&&Wt(o[0].type)&&o[0].from?.address.toLowerCase()===c,g=!!o[0]&&Wt(o[0].type)&&o[0].to?.address.toLowerCase()===c;return l?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:d?vmModuleTypes.TransactionType.RECEIVE:m?vmModuleTypes.TransactionType.NFT_BUY:u?vmModuleTypes.TransactionType.APPROVE:P?vmModuleTypes.TransactionType.NFT_SEND:g?vmModuleTypes.TransactionType.NFT_RECEIVE:y?vmModuleTypes.TransactionType.TRANSFER:h?vmModuleTypes.TransactionType.AIRDROP:v?vmModuleTypes.TransactionType.UNWRAP:E?vmModuleTypes.TransactionType.FILL_ORDER:vmModuleTypes.TransactionType.UNKNOWN};function Wt(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Wn=(t="")=>t.includes("(")?$n__default.default(t.split("(",1)[0]):t;var jt=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},a)=>{let o=t===vmModuleTypes.TransactionType.TRANSFER,s=t===vmModuleTypes.TransactionType.SEND,i=t===vmModuleTypes.TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;o&&r&&r[0]&&(c=r[0].from.address,l=r[0].to.address),o&&n&&n[0]&&(c=n[0].from.address,l=n[0].to.address);let p=s||o&&c.toLowerCase()===a.toLowerCase(),d=i||o&&l.toLowerCase()===a.toLowerCase();return {isOutgoing:p,isIncoming:d,isSender:c===a,from:c,to:l}};async function zt(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var jn="https://ipfs.io";function oe(t,e=jn){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function zn(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function Jt(t){let e={};if(t)if(t.startsWith("data:application/json;base64,")){let r=t.substring(29);try{let n=Buffer.from(r,"base64").toString();e=JSON.parse(n);}catch{e={};}}else e=await zn(oe(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var Jn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Yt(t,e="256"){let r=oe(t);return `${Jn}/width=${e},fit/${r}`}var Zt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a)=>{let o=[];if(t.value!=="0"){let s=a.decimals,c=new coreUtilsSdk.TokenUnit(t.value,a.decimals,a.symbol).toDisplay();o.push({decimal:s.toString(),name:a.name,symbol:a.symbol,amount:c,from:t.from,to:t.to,type:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(s=>{let i=s.erc20Token.decimals,l=new coreUtilsSdk.TokenUnit(s.value,i,s.erc20Token.symbol).toDisplay();o.push({decimal:i.toString(),address:s.erc20Token.address,name:s.erc20Token.name,symbol:s.erc20Token.symbol,amount:l,from:s.from,to:s.to,imageUri:s.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async s=>{let i=s.erc721Token,c=await Xt(i.tokenUri,i.metadata.imageUri);o.push({name:s.erc721Token.name,symbol:s.erc721Token.symbol,address:s.erc721Token.address,amount:"1",imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async s=>{let i=s.erc1155Token,c=await Xt(i.tokenUri,i.metadata.imageUri);o.push({name:s.erc1155Token.metadata.name??"",symbol:s.erc1155Token.metadata.symbol??"",address:s.erc1155Token.address,amount:s.value,imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),o},Xt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?oe(e):e;{let[r,n]=await zt(Jt(t));return n?"":r.image?Yt(r.image):""}};var Qt=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],X=(s=>(s.TOTAL_SUPPLY="totalSupply",s.BALANCE_OF="balanceOf",s.TRANSFER="transfer",s.TRANSFER_FROM="transferFrom",s.APPROVE="approve",s.ALLOWANCE="allowance",s))(X||{});var er=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let o=await Zt(t,r),s=qt(t,a,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:d}=jt(s,t,a),{blockTimestamp:m,txHash:u,gasPrice:y,gasUsed:h}=t.nativeTransaction,v=$(e,u);return {isContractCall:!Qt.includes(s),isIncoming:c,isOutgoing:i,isSender:l,timestamp:m*1e3,hash:u,from:p,to:d,tokens:o,gasPrice:y,gasUsed:h,chainId:n.toString(),txType:s,explorerLink:v}};var tr=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:a,offset:o,glacierService:s})=>{try{let i=await s.listTransactions({chainId:t.toString(),address:n,pageToken:a,pageSize:o});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>er({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(d=>d)))).filter(p=>p.tokens.find(d=>Number(d.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var rr=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:a,nextPageToken:o,offset:s,glacierService:i})=>Ht(t)?Ot({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:o,offset:s}):i.isHealthy()?tr({networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:o,offset:s,glacierService:i}):{transactions:[],nextPageToken:""};var nr={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_sendTransactionBatch","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"],nonRestrictedMethods:["eth_requestAccounts","eth_decrypt","eth_getEncryptionPublicKey","eth_subscribe","eth_unsubscribe","eth_blockNumber","eth_call","eth_chainId","eth_coinbase","eth_estimateGas","eth_feeHistory","eth_gasPrice","eth_getBalance","eth_getBlockByHash","eth_getBlockByNumber","eth_getBlockTransactionCountByHash","eth_getBlockTransactionCountByNumber","eth_getCode","eth_getFilterChanges","eth_getFilterLogs","eth_getLogs","eth_getProof","eth_getStorageAt","eth_getTransactionByBlockHashAndIndex","eth_getTransactionByBlockNumberAndIndex","eth_getTransactionByHash","eth_getTransactionCount","eth_getTransactionReceipt","eth_getUncleCountByBlockHash","eth_getUncleCountByBlockNumber","eth_newBlockFilter","eth_newFilter","eth_newPendingTransactionFilter","eth_syncing","eth_uninstallFilter","net_version","net_peerCount","net_listening","web3_sha3","web3_clientVersion"]}},manifestVersion:"0.1"};var Me=async({from:t,provider:e})=>e.getTransactionCount(t);var Oe=t=>{if(t.data)try{let r=new ethers.Interface(dr__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Zn(n)?n:void 0}catch{return}};function Zn(t){return Object.values(X).includes(t)}function ar(t,e,r){return new ethers.ethers.Contract(t,dr__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var He=new Map,or=(t,e,r)=>(He.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:o,gasLimit:s})=>{let i=He.get(t);if(!i)throw rpcErrors.rpcErrors.resourceNotFound();let{signingData:c,displayData:l}=i,p={...c,data:{...c.data,gasLimit:s??c.data.gasLimit,maxFeePerGas:n??c.data.maxFeePerGas,maxPriorityFeePerGas:a??c.data.maxPriorityFeePerGas}},d={...l};if(typeof o=="string"){if(!o.startsWith("0x"))throw rpcErrors.rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let u=l.tokenApprovals;ta(u),ra(c.data.data);let y=u.approvals[0];p.data.data=ar(y.token.address,y.spenderAddress,o),d.tokenApprovals={approvals:[{...y,value:o}],isEditable:!0};}let m={signingData:p,displayData:d};return He.set(t,m),m},cleanup:()=>He.delete(t)});function ta(t){if(!t||!t.isEditable||t.approvals.length!==1)throw rpcErrors.rpcErrors.invalidInput("Cannot edit the token approval for this request. Please start a new request instead.")}function ra(t){if((!t||t==="0x"?null:Oe({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var sr=async({transactionParams:{from:t,to:e,data:r,value:n,accessList:a},provider:o})=>{let s=await o.getTransactionCount(t);return Number(await o.estimateGas({from:t,to:e,nonce:s,data:r,value:n,accessList:a}))};var We=(t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:o,alert:s})=>{let{dappInfo:i}=t,c=Oe(r),l="Do you approve this transaction?";c==="approve"&&(l="Do you approve this spend limit?");let p=[ne("Account",r.from),Le("Network",{name:e.chainName,logoUri:e.logoUri}),Fe("Website",i)];r.to&&p.push(ne("Contract",r.to));let d={title:l,details:[{title:"Transaction Details",items:p}],networkFeeSelector:!0,alert:s,balanceChange:a,tokenApprovals:o,isSimulationSuccessful:n},m={type:vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,account:r.from,data:{type:2,nonce:Number(r.nonce),gasLimit:Number(r.gas),maxFeePerGas:r.maxFeePerGas,maxPriorityFeePerGas:r.maxPriorityFeePerGas,to:r.to,from:r.from,data:r.data,value:r.value,chainId:r.chainId??e.chainId,accessList:r.accessList}};return {displayData:d,signingData:m}};var ir=async({chainId:t,params:e,domain:r,withGasEstimation:n,blockaid:a})=>{let o=["validation","simulation"];return n&&o.push("gas_estimation"),a.evm.transactionBulk.scan({chain:t.toString(),options:o,data:e,metadata:r&&r.length>0?{domain:r}:{non_dapp:!0}})},cr=async({chainId:t,params:e,domain:r,blockaid:n})=>n.evm.transaction.scan({account_address:e.from,chain:t.toString(),options:["validation","simulation"],data:{from:e.from,to:e.to,data:e.data,value:e.value,gas:e.gas,gas_price:e.gasPrice},metadata:r&&r.length>0?{domain:r}:{non_dapp:!0}}),lr=async({chainId:t,accountAddress:e,data:r,domain:n,blockaid:a})=>a.evm.jsonRpc.scan({chain:t.toString(),options:["validation","simulation"],account_address:e,data:r,metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}});var ur=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,dr__default.default.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),o=pr__default.default(a[0]),s=pr__default.default(a[1]),i=parseInt(a[2]),c={type:vmModuleTypes.TokenType.ERC20,name:o,chainId:e,symbol:s,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(dr__default.default.abi),p=l.getFunction(t.data.slice(0,10)),d=l.decodeFunctionData(t.data.slice(0,10),t.data);if(p?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new coreUtilsSdk.TokenUnit(d.amount,c.decimals,c.symbol).toDisplay(),usdPrice:void 0}],token:c}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:c,spenderAddress:d.spender,value:d.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};function Z(t){return !("type"in t)}function qe(t){return t.type===vmModuleTypes.TokenType.ERC20}function fr(t){return typeof t.to=="string"}function yr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function ia(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function ca(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function Tt(t){return ia(t)?t.ins.length===0&&t.outs.length===0:ca(t)?t.approvals.length===0:!1}var W={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious transaction",description:"Use caution, this transaction might be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.AlertType.DANGER,details:{title:"Scam transaction",description:"This transaction has been flagged as malicious, I understand the risk.",body:["This transaction is malicious","do not proceed"],actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var hr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:o})=>{let s;try{s=await cr({chainId:n,params:r,domain:e,blockaid:o});}catch(i){console.error("simulateTransaction error",i);}return kt({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:s})},kt=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:a})=>{let o,s,i,c=!1,l;if(a){let{validation:p,simulation:d,gas_estimation:m}=a;!p||p.result_type==="Error"||p.result_type==="Warning"?o=W[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(o=W[vmModuleTypes.AlertType.DANGER]),d?.status==="Success"&&(c=!0,i=Tr(t,d.account_summary),s=kr(d.account_summary.assets_diffs)),m?.status==="Success"&&(l=Number(m.estimate));}if(!c&&fr(e)){let p=await ur(e,r,n);s=p.balanceChange,i=p.tokenApprovals;}return {alert:o,balanceChange:s,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},fa=t=>t.trace_type==="ExposureTrace",ya=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,ga=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>fa(r)?{[ya(r.spender,r.asset.address)]:r}:e,{}),Tr=(t,e)=>{let{traces:r}=e,n=ga(r),a=Object.entries(n).map(([s,i])=>{let c=Er(i.asset);if(!c)return;let l={token:c,spenderAddress:i.spender,logoUri:c.logoUri};if(i.type==="ERC20ExposureTrace"){let{exposed:{raw_value:p,usd_price:d}}=i;l.value=p,l.usdPrice=`${d}`;}if(i.type==="ERC721ExposureTrace")if(!i.exposed)l.value=`0x${ethers.MaxUint256.toString(16)}`;else {let{usd_price:p,amount:d}=i.exposed;l.value=`${d}`,l.usdPrice=`${p}`;}return l}).filter(Boolean);return a.length===0?void 0:{isEditable:a.length===1&&a[0]?.token.type===vmModuleTypes.TokenType.ERC20&&t===vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,approvals:a}},kr=t=>{let e=gr(t,"in"),r=gr(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},gr=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,a="address"in n?Er(n):ha(n);if(!a)return;let o=r[e].map(s=>{let i;if("value"in s&&s.value)if("decimals"in a){let c=coreUtilsSdk.numberToBN(s.value,a.decimals);i=coreUtilsSdk.balanceToDisplayValue(c,a.decimals);}else ethers.isHexString(s.value)&&(i=parseInt(s.value,16).toString());else "type"in a&&a.type===vmModuleTypes.TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:s.usd_price}:void 0}).filter(s=>s!==void 0);return {token:a,items:o}}).filter(r=>r!==void 0),Er=t=>{let e;return t.type==="ERC20"?e={type:vmModuleTypes.TokenType.ERC20,address:t.address,decimals:t.decimals,name:t.name??t.symbol??"",symbol:t.symbol??"",logoUri:t.logo_url}:t.type==="ERC1155"?e={type:vmModuleTypes.TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:vmModuleTypes.TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:vmModuleTypes.TokenType.NONERC,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}),e},ha=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),vr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:o})=>{let s,i,c;try{let{validation:l,simulation:p}=await lr({chainId:n,accountAddress:r,data:a,domain:e,blockaid:o});!l||l.result_type==="Error"||l.result_type==="Warning"?s=W[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(s=W[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=Tr(t.method,p.account_summary),i=kr(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),s=W[vmModuleTypes.AlertType.WARNING];}return {alert:s,balanceChange:i,tokenApprovals:c}};var ie=zod.z.object({from:zod.z.string().length(42),to:zod.z.string().length(42).optional(),data:zod.z.string().optional(),value:zod.z.string().startsWith("0x").optional(),gas:zod.z.string().startsWith("0x").optional(),gasPrice:zod.z.string().startsWith("0x").optional(),maxFeePerGas:zod.z.string().startsWith("0x").optional(),maxPriorityFeePerGas:zod.z.string().startsWith("0x").optional(),nonce:zod.z.string().optional(),chainId:zod.z.string().optional().or(zod.z.number().optional()),accessList:zod.z.array(zod.z.object({address:zod.z.string().startsWith("0x"),storageKeys:zod.z.array(zod.z.string())})).optional()});var ka=zod.z.tuple([ie]),br=t=>ka.safeParse(t);var Pe=async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:o,request:s})=>{try{let i=$(t,r);if(n({txHash:r,request:s,explorerLink:i}),(await Y({operation:async()=>e.getTransactionReceipt(r),isSuccess:p=>!!p,backoffPolicy:D.linearThenExponential(15,750),maxRetries:20}))?.status===1)return a({txHash:r,explorerLink:i,request:s}),!0}catch(i){console.error(i);}return o({txHash:r,request:s}),!1};var ze=async(t,e,r)=>{if("txHash"in e)return e.txHash;let n=()=>t.send("eth_sendRawTransaction",[e.signedData]);return r?.shouldRetry?Y({operation:()=>n(),isSuccess:()=>!0,maxRetries:6,backoffPolicy:D.linearThenExponential(4,1e3)}):n()};var Pr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:o,error:s,success:i}=br(a);if(!i)return console.error("invalid params",s),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s}})};let[c]=o,l=await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!c.gas||Number(c.gas)<0)try{let P=await sr({transactionParams:{from:c.from,to:c.to,data:c.data,value:c.value,accessList:c.accessList},provider:l});c.gas="0x"+P.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!c.nonce)try{let P=await Me({from:c.from,provider:l});c.nonce=String(P);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let p=await hr({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l,blockaid:n}),{displayData:d,signingData:m}=We(t,e,c,p),{updateTx:u,cleanup:y}=or(t.requestId,m,d),h=await r.requestApproval({request:t,displayData:d,signingData:m,updateTx:u});if(y(),"error"in h)return {error:h.error};let v,E=t.context?.shouldRetry===!0;try{v=await ze(l,h,{shouldRetry:E});}catch(P){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:P}})}}return Pe({explorerUrl:e.explorerUrl??"",provider:l,txHash:v,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:v}};async function Rr(t,e){let r=t.map(async(o,s)=>({index:s,result:await e(o)})),a=(await Promise.allSettled(r)).filter(o=>o.status==="fulfilled").map(o=>o).find(o=>o.value.result);return a?t[a.value.index]:void 0}function ce(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function le(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let a=n.value;a.status==="fulfilled"?r[a.id]=a.value:r[a.id]={error:a.reason};}return r},{}))}var w,pe,Q,Re,Ye=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:a}){chunkTKL4UUHE_cjs.c(this,w,void 0);chunkTKL4UUHE_cjs.c(this,pe,void 0);chunkTKL4UUHE_cjs.c(this,Q,void 0);chunkTKL4UUHE_cjs.c(this,Re,void 0);chunkTKL4UUHE_cjs.d(this,w,e),chunkTKL4UUHE_cjs.d(this,pe,r),chunkTKL4UUHE_cjs.d(this,Q,n),chunkTKL4UUHE_cjs.d(this,Re,a);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await C({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,w).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,w).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,w).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,w).pricingProviders?.coingecko.nativeTokenId,s=chunkTKL4UUHE_cjs.b(this,w).networkToken,i=new H({storage:chunkTKL4UUHE_cjs.b(this,pe),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,Q)}),c=o?await i.getSimplePrice({coinIds:[o],currencies:[n]}):{},l=c?.[o??""]?.[n]?.price??void 0,p=c?.[o??""]?.[n]?.marketCap??void 0,d=c?.[o??""]?.[n]?.vol24??void 0,m=c?.[o??""]?.[n]?.change24??void 0,u=await a.getBalance(r),y=new coreUtilsSdk.TokenUnit(u,s.decimals,s.symbol),h=l!==void 0?y.mul(l):void 0;return {...s,coingeckoId:o??"",type:vmModuleTypes.TokenType.NATIVE,balance:u,balanceDisplayValue:y.toDisplay(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:d,change24:m}}async listErc20Balances({chainId:e,address:r,currency:n}){let a=await C({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,w).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,w).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,w).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,w).pricingProviders?.coingecko.assetPlatformId,s=chunkTKL4UUHE_cjs.b(this,w).pricingProviders?.coingecko.nativeTokenId,i=await _e({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,Q)}),c=i.map(E=>E.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,Re)].filter(qe),p=async E=>{let k=await new ethers.ethers.Contract(E.address,dr__default.default.abi,a).balanceOf?.(r)||0n;return {...E,balance:k}},d=l.map(E=>ce(p(E),E.address)),m=await le(d),u=new H({storage:chunkTKL4UUHE_cjs.b(this,pe),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,Q)}),y=o&&await u.getPricesByAddresses(c,o,n)||{},h=Object.keys(m),v={};for(let E=0;E<h.length;E++){let P=h[E];if(P===void 0)continue;let g=m[P];if(g===void 0||"error"in g){v[P]={error:`rpcService:getTokenWithBalance failed: ${g?.error??"unknown error"}`};continue}let k=y?.[s??""]?.[n]?.price??void 0,_=y?.[s??""]?.[n]?.marketCap??void 0,it=y?.[s??""]?.[n]?.vol24??void 0,V=y?.[s??""]?.[n]?.change24??void 0,he=new coreUtilsSdk.TokenUnit(g.balance,g.decimals,g.symbol),I=k!==void 0?he.mul(k):void 0;v[g.address.toLowerCase()]={...g,type:vmModuleTypes.TokenType.ERC20,balance:g.balance,balanceDisplayValue:he.toDisplay(),balanceInCurrency:I?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:I?.toDisplay({fixedDp:2}),priceInCurrency:k,marketCap:_,change24:V,vol24:it,reputation:null};}return v}async listNftBalances(){return {}}};w=new WeakMap,pe=new WeakMap,Q=new WeakMap,Re=new WeakMap;var Ir=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:a=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.TokenType.ERC1155],customTokens:o=[],storage:s,balanceServices:i=[],tokenService:c})=>{let l=r.chainId,p=[...i,new Ye({network:r,storage:s,proxyApiUrl:n,customTokens:o})],d=await Rr(p,u=>u.isNetworkSupported(r.chainId)),m={};if(d){let u=[],y=[],h=[];t.forEach(g=>{a.includes(vmModuleTypes.TokenType.NATIVE)&&u.push(ce(d.getNativeBalance({address:g,currency:e.toUpperCase(),chainId:l}).then(async k=>{if(k.symbol==="AVAX"){let _=await c.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...k,priceInCurrency:_.priceInCurrency,marketCap:_.marketCap,vol24:_.vol24,change24:_.change24}}return k}),g)),a.includes(vmModuleTypes.TokenType.ERC20)&&y.push(ce(d.listErc20Balances({customTokens:o.filter(qe),currency:e.toUpperCase(),chainId:l,address:g,pageSize:100}),g)),(a.includes(vmModuleTypes.TokenType.ERC721)||a.includes(vmModuleTypes.TokenType.ERC1155))&&h.push(ce(d.listNftBalances({chainId:l,address:g}),g));});let v=await le(u),E=await le(y),P=await le(h);Object.keys(v).forEach(g=>{let k=v[g];if(!k||"error"in k){m[g]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let _=k.symbol;m[g]={[_]:k};}),Object.keys(E).forEach(g=>{let k=E[g];!k||"error"in k&&typeof k.error!="string"?m[g]={...m[g],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[g]={...m[g],error:`listErc20Balances failed: ${k.error}`}:m[g]={...m[g],...k};}),Object.keys(P).forEach(g=>{let k=P[g];!k||"error"in k&&typeof k.error!="string"?m[g]={...m[g],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[g]={...m[g],error:`listNftBalances failed: ${k.error}`}:m[g]={...m[g],...k};});}else t.forEach(u=>{m[u]={error:"unsupported network"};});return m};var ba={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Pa={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},wr=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return ba;case vmModuleTypes.Environment.DEV:return Pa}};var Cr="DUMMY_API_KEY";var xa="https://ipfs.io";function Br(t,e=xa){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var Sa="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Ke(t,e="256"){let r=Br(t);return `${Sa}/width=${e},fit/${r}`}var F=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},Ca=[coreChainsSdk.ChainId.ETHEREUM_HOMESTEAD],Xe=class{constructor({glacierApiUrl:e,headers:r}){chunkTKL4UUHE_cjs.a(this,"glacierSdk");chunkTKL4UUHE_cjs.a(this,"isGlacierHealthy",!0);chunkTKL4UUHE_cjs.a(this,"supportedChainIds",[]);chunkTKL4UUHE_cjs.a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new glacierSdk.Glacier({BASE:e,HEADERS:r},ve),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(n=>n===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(r=>r.chainId).filter(r=>!Ca.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(a){throw a instanceof F&&this.setGlacierToUnhealthy(),a}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(a){throw a instanceof F&&this.setGlacierToUnhealthy(),a}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:a}){try{let s=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new coreUtilsSdk.TokenUnit(s.balance,s.decimals,s.symbol),c=s.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:s.name,symbol:s.symbol,decimals:s.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:s.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:a??""}}catch(o){throw o instanceof F&&this.setGlacierToUnhealthy(),o}}async listErc721Balances({chainId:e,address:r}){let n,a=[];do try{let o=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});a.push(...o.erc721TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof F&&this.setGlacierToUnhealthy(),o}while(n);return a}async listErc1155Balances({chainId:e,address:r}){let n,a=[];do try{let o=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});a.push(...o.erc1155TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof F&&this.setGlacierToUnhealthy(),o}while(n);return a}async listNftBalances({chainId:e,address:r}){let a=(await Promise.allSettled([this.listErc721Balances({chainId:e.toString(),address:r}),this.listErc1155Balances({chainId:e.toString(),address:r})])).filter(o=>o.status==="fulfilled").flatMap(o=>o.value.filter(s=>s.ercType===glacierSdk.Erc721Token.ercType.ERC_721||BigInt(s.balance)>0n).map(s=>[`${s.address}-${s.tokenId}`,{address:s.address,description:s.metadata.description??"",logoUri:s.metadata.imageUri??"",logoSmall:Ke(s.metadata.imageUri??""),name:s.metadata.name??"",symbol:s.metadata.symbol??"",tokenId:s.tokenId,tokenUri:s.tokenUri,chainId:e,collectionName:"Unknown",balance:s.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(s.balance):1,balanceDisplayValue:s.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?s.balance:"1",type:s.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{indexStatus:s.metadata.indexStatus,description:s.metadata.description,lastUpdatedTimestamp:s.metadata.metadataLastUpdatedTimestamp,properties:s.ercType===glacierSdk.Erc721Token.ercType.ERC_721?s.metadata.attributes:s.metadata.properties}}]));return Object.fromEntries(a)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:a}){try{let o=[],s;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:s});o.push(...Na(i.erc20TokenBalances,Number(e))),s=i.nextPageToken;}while(s);return [...Ba(a),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(o){throw o instanceof F&&this.setGlacierToUnhealthy(),o}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:a}){try{return this.glacierSdk.evmTransactions.listTransactionsV2({chainId:e,address:r,pageToken:n,pageSize:a,filterSpamTokens:!0})}catch(o){throw o instanceof F&&this.setGlacierToUnhealthy(),o}}},Ba=t=>t.map(e=>({...e,decimals:e.decimals??18,type:vmModuleTypes.TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0,reputation:null})),Na=(t,e)=>t.map(r=>{let n=new coreUtilsSdk.TokenUnit(r.balance,r.decimals,r.symbol),a=n.toDisplay(),o=r.balanceValue?.value.toString(),s=r.price?.value,i=s!==void 0?n.mul(s).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:o,balanceDisplayValue:a,balanceInCurrency:i,priceInCurrency:s,reputation:r.tokenReputation,type:vmModuleTypes.TokenType.ERC20}});var vt=t=>{let e="";e+=`Domain
26
+ async function _e({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.rpcErrors.internal(`Failed to fetch tokens for chainId ${t}`);return r.json()}var Y=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=D.exponential()})=>{let a=0,s=0,o;for(;s<r;){s>0&&await gn(a);try{let c=await t(s);if(e(c))return c}catch(c){o=c;}a=n(s),s++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},D=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}static linearThenExponential(e,r){return n=>{if(n<e)return (n+1)*r;let a=n-e+1,s=e*r,o=2*r*(Math.pow(2,a)-1);return s+o}}};function gn(t){return new Promise(e=>setTimeout(e,t))}var lt=t=>Y({operation:e=>t(e>0),maxRetries:2,backoffPolicy:D.constant(1),isSuccess:e=>e?.status?.error_code!==429});function wt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function pt(t){let e,r=0;for(e=0;e<t.length;e++){let n=wt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function N(t,e){let r=await fetch(...t);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let n=await r.json();return e.parse(n)}var ke=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return N([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return N([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var hn=zod.z.array(zod.z.object({internalId:zod.z.string(),id:zod.z.string(),symbol:zod.z.string(),name:zod.z.string(),image:zod.z.string().optional().nullable(),current_price:zod.z.number().optional().nullable(),price_change_percentage_24h:zod.z.number().optional().nullable(),market_cap:zod.z.number().optional().nullable(),total_volume:zod.z.number().optional().nullable(),platforms:zod.z.record(zod.z.string(),zod.z.string())})),De=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return N([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],hn)}};var Bt=coreCoingeckoSdk.getBasicCoingeckoHttp(),O,K,H=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,O,void 0);chunkTKL4UUHE_cjs.c(this,K,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let s=e[a];n[a]={},r.forEach(o=>{n[a]={[o]:{price:s?.[o],change24:s?.[`${o}_24h_change`],vol24:s?.[`${o}_24h_vol`],marketCap:s?.[`${o}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,O,e),chunkTKL4UUHE_cjs.d(this,K,r);}async getWatchlistDataForToken({tokenDetails:e,currency:r=coreCoingeckoSdk.VsCurrencyType.USD}){let a=(await new De(chunkTKL4UUHE_cjs.b(this,K)).watchlistToken({tokens:e.symbol,currency:r})).filter(s=>e.isNative?s.internalId===`NATIVE-${e.symbol.toLowerCase()}`:s.platforms[e.caip2Id]===e.address)[0];return a?{priceInCurrency:a.current_price??0,change24:a.price_change_percentage_24h??0,marketCap:a.market_cap??0,vol24:a.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,s=`getSimplePrice-${e?`${pt(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,O)?.get?.(s),n)return n;try{n=await lt(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,O)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let a,o=`getPricesWithMarketDataByAddresses-${`${pt(e)}-${r}-${n}`}`;if(a=chunkTKL4UUHE_cjs.b(this,O)?.get?.(o),a)return a;try{a=await lt(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return chunkTKL4UUHE_cjs.b(this,O)?.set?.(o,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let s=await new ke(chunkTKL4UUHE_cjs.b(this,K)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(s,[n])}return coreCoingeckoSdk.simpleTokenPrice(Bt,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD],marketCap:n=!1,vol24:a=!1,change24:s=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new ke(chunkTKL4UUHE_cjs.b(this,K)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:s,include_last_updated_at:o});return this.transformSimplePriceResponse(l,r)}return coreCoingeckoSdk.simplePrice(Bt,{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:s,lastUpdated:o,shouldThrow:c})}};O=new WeakMap,K=new WeakMap;var xn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Sn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",Nt=zod.object({date:zod.string(),usd:zod.record(zod.number())}),Ue=async()=>{try{return await N([xn],Nt)}catch{return await N([Sn],Nt)}};var mt=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Fe=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),ne=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Le=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.NETWORK,value:e});var dt=({name:t,version:e})=>{switch(t){case vmModuleTypes.AppName.CORE_MOBILE_IOS:case vmModuleTypes.AppName.CORE_MOBILE_ANDROID:case vmModuleTypes.AppName.CORE_WEB:case vmModuleTypes.AppName.CORE_EXTENSION:case vmModuleTypes.AppName.EXPLORER:return {"x-application-name":t,"x-application-version":e};case vmModuleTypes.AppName.OTHER:return}};var _t=process.env.GLACIER_API_KEY;var Ee=()=>_t;var An={rltoken:Ee()},ve=class extends glacierSdk.FetchHttpRequest{constructor(e){super(e);}request(e){let r={...An,...e.query||{}},n={...e,query:Object.keys(r).length>0?r:void 0};return super.request(n)}};var C=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:s=2e3}=t,o=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:a},Nn(n),new ethers.Network(r,e));return o.pollingInterval=s,o},Bn=["glacier-api.avax.network","proxy-api.avax.network"];function Nn(t){let e=new URL(t),r=Ee();if(r&&Bn.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}var ft={LOW:1n,MEDIUM:4n,HIGH:6n},yt=500000000n,_n=t=>t===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||t===coreChainsSdk.ChainId.AVALANCHE_MAINNET_ID;async function Gt({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:s}){let o=await C({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!s)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");if(_n(t))try{let E=await Dn(o);return {...E,baseFee:E.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}let i=await o.getBlock("latest",!1);if(!i)throw rpcErrors.rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await Un(s,a),p=new coreUtilsSdk.TokenUnit(l,0,""),m=new coreUtilsSdk.TokenUnit(c,0,""),d=BigInt("1000000000"),u=m.mul(p).add(d).toSubUnit(),y=yt*ft.LOW,h=yt*ft.MEDIUM,v=yt*ft.HIGH;return {baseFee:u,low:{maxFeePerGas:u+y,maxPriorityFeePerGas:y},medium:{maxFeePerGas:u+h,maxPriorityFeePerGas:h},high:{maxFeePerGas:u+v,maxPriorityFeePerGas:v},isFixedFee:!1,displayDecimals:9}}async function Dn(t){let e=await t.send("eth_suggestPriceOptions",[]);return {low:{maxFeePerGas:BigInt(e.slow.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.slow.maxPriorityFeePerGas)},medium:{maxFeePerGas:BigInt(e.normal.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.normal.maxPriorityFeePerGas)},high:{maxFeePerGas:BigInt(e.fast.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.fast.maxPriorityFeePerGas)}}}async function Un(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let a=await n.json();return a[e]??a.default}catch{return 1.5}}function $(t,e,r="tx"){return `${t}/${r}/${e}`}var Lt=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:a})=>{let s=t.from.toLowerCase()===a.toLowerCase(),o=parseInt(t.timeStamp)*1e3,i=e.decimals,l=new coreUtilsSdk.TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=s?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,{from:m,to:d,gasPrice:u,gasUsed:y,hash:h}=t,v=$(n,h);return {isIncoming:!s,isOutgoing:s,isContractCall:Ln(t),timestamp:o,hash:h,isSender:s,from:m,to:d,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:vmModuleTypes.TokenType.NATIVE}],gasUsed:y,gasPrice:u,chainId:r.toString(),txType:p,explorerLink:v}};function Ln(t){return t.input!=="0x"}function Mt({tx:t,address:e,explorerUrl:r,chainId:n}){let a=t.from.toLowerCase()===e.toLowerCase(),s=parseInt(t.timeStamp)*1e3,i=new coreUtilsSdk.TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:m,hash:d,tokenDecimal:u,tokenName:y,tokenSymbol:h,contractAddress:v}=t,E=a?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,P=$(r,d);return {isIncoming:!a,isOutgoing:a,isContractCall:!1,timestamp:s,hash:d,isSender:a,from:c,to:l,tokens:[{decimal:u,name:y,symbol:h,type:vmModuleTypes.TokenType.ERC20,amount:i,address:v}],gasUsed:m,gasPrice:p,chainId:n.toString(),txType:E,explorerLink:P}}var Ot=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:a,nextPageToken:s,offset:o})=>{let i=s?JSON.parse(s):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await coreEtherscanSdk.getNormalTxs(a,!t,{page:c,offset:o}):[]).map(h=>Lt({tx:h,chainId:n,networkToken:e,explorerUrl:r,address:a})),m=(l.includes("erc20")?await coreEtherscanSdk.getErc20Txs(a,!t,void 0,{page:c,offset:o}):[]).map(h=>Mt({tx:h,address:a,explorerUrl:r,chainId:n})),d=m.map(h=>h.hash),u=p.filter(h=>!d.includes(h.hash)),y={queries:[],page:c+1};return p.length&&y.queries.push("normal"),m.length&&y.queries.push("erc20"),{transactions:[...u,...m],nextPageToken:y.queries.length?JSON.stringify(y):""}};var Ht=t=>t===1||t===5||t===4||t===11155111;var qt=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,s)=>{let o=!e&&!r&&!n,i=Wn(t.method?.methodName),c=a.toLowerCase(),l=i.toLowerCase().includes("swap"),p=o&&t.from.address.toLowerCase()===c,m=o&&t.to.address.toLowerCase()===c,d=i==="Market Buy Orders With Eth"||i==="Buy NFT",u=i==="Approve",y=i.toLowerCase().includes("transfer"),h=i.toLowerCase().includes("airdrop"),v=i.toLowerCase().includes("unwrap"),E=i==="Fill Order",P=!!s[0]&&Wt(s[0].type)&&s[0].from?.address.toLowerCase()===c,g=!!s[0]&&Wt(s[0].type)&&s[0].to?.address.toLowerCase()===c;return l?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:m?vmModuleTypes.TransactionType.RECEIVE:d?vmModuleTypes.TransactionType.NFT_BUY:u?vmModuleTypes.TransactionType.APPROVE:P?vmModuleTypes.TransactionType.NFT_SEND:g?vmModuleTypes.TransactionType.NFT_RECEIVE:y?vmModuleTypes.TransactionType.TRANSFER:h?vmModuleTypes.TransactionType.AIRDROP:v?vmModuleTypes.TransactionType.UNWRAP:E?vmModuleTypes.TransactionType.FILL_ORDER:vmModuleTypes.TransactionType.UNKNOWN};function Wt(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Wn=(t="")=>t.includes("(")?$n__default.default(t.split("(",1)[0]):t;var jt=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},a)=>{let s=t===vmModuleTypes.TransactionType.TRANSFER,o=t===vmModuleTypes.TransactionType.SEND,i=t===vmModuleTypes.TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;s&&r&&r[0]&&(c=r[0].from.address,l=r[0].to.address),s&&n&&n[0]&&(c=n[0].from.address,l=n[0].to.address);let p=o||s&&c.toLowerCase()===a.toLowerCase(),m=i||s&&l.toLowerCase()===a.toLowerCase();return {isOutgoing:p,isIncoming:m,isSender:c===a,from:c,to:l}};async function zt(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var jn="https://ipfs.io";function oe(t,e=jn){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function zn(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function Jt(t){let e={};if(t)if(t.startsWith("data:application/json;base64,")){let r=t.substring(29);try{let n=Buffer.from(r,"base64").toString();e=JSON.parse(n);}catch{e={};}}else e=await zn(oe(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var Jn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Yt(t,e="256"){let r=oe(t);return `${Jn}/width=${e},fit/${r}`}var Zt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a)=>{let s=[];if(t.value!=="0"){let o=a.decimals,c=new coreUtilsSdk.TokenUnit(t.value,a.decimals,a.symbol).toDisplay();s.push({decimal:o.toString(),name:a.name,symbol:a.symbol,amount:c,from:t.from,to:t.to,type:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(o=>{let i=o.erc20Token.decimals,l=new coreUtilsSdk.TokenUnit(o.value,i,o.erc20Token.symbol).toDisplay();s.push({decimal:i.toString(),address:o.erc20Token.address,name:o.erc20Token.name,symbol:o.erc20Token.symbol,amount:l,from:o.from,to:o.to,imageUri:o.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async o=>{let i=o.erc721Token,c=await Xt(i.tokenUri,i.metadata.imageUri);s.push({name:o.erc721Token.name,symbol:o.erc721Token.symbol,address:o.erc721Token.address,amount:"1",imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async o=>{let i=o.erc1155Token,c=await Xt(i.tokenUri,i.metadata.imageUri);s.push({name:o.erc1155Token.metadata.name??"",symbol:o.erc1155Token.metadata.symbol??"",address:o.erc1155Token.address,amount:o.value,imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),s},Xt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?oe(e):e;{let[r,n]=await zt(Jt(t));return n?"":r.image?Yt(r.image):""}};var Qt=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],X=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(X||{});var er=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let s=await Zt(t,r),o=qt(t,a,s),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:m}=jt(o,t,a),{blockTimestamp:d,txHash:u,gasPrice:y,gasUsed:h}=t.nativeTransaction,v=$(e,u);return {isContractCall:!Qt.includes(o),isIncoming:c,isOutgoing:i,isSender:l,timestamp:d*1e3,hash:u,from:p,to:m,tokens:s,gasPrice:y,gasUsed:h,chainId:n.toString(),txType:o,explorerLink:v}};var tr=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:a,offset:s,glacierService:o})=>{try{let i=await o.listTransactions({chainId:t.toString(),address:n,pageToken:a,pageSize:s});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>er({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(m=>m)))).filter(p=>p.tokens.find(m=>Number(m.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var rr=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:a,nextPageToken:s,offset:o,glacierService:i})=>Ht(t)?Ot({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:s,offset:o}):i.isHealthy()?tr({networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:s,offset:o,glacierService:i}):{transactions:[],nextPageToken:""};var nr={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_sendTransactionBatch","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"],nonRestrictedMethods:["eth_requestAccounts","eth_decrypt","eth_getEncryptionPublicKey","eth_subscribe","eth_unsubscribe","eth_blockNumber","eth_call","eth_chainId","eth_coinbase","eth_estimateGas","eth_feeHistory","eth_gasPrice","eth_getBalance","eth_getBlockByHash","eth_getBlockByNumber","eth_getBlockTransactionCountByHash","eth_getBlockTransactionCountByNumber","eth_getCode","eth_getFilterChanges","eth_getFilterLogs","eth_getLogs","eth_getProof","eth_getStorageAt","eth_getTransactionByBlockHashAndIndex","eth_getTransactionByBlockNumberAndIndex","eth_getTransactionByHash","eth_getTransactionCount","eth_getTransactionReceipt","eth_getUncleCountByBlockHash","eth_getUncleCountByBlockNumber","eth_newBlockFilter","eth_newFilter","eth_newPendingTransactionFilter","eth_syncing","eth_uninstallFilter","net_version","net_peerCount","net_listening","web3_sha3","web3_clientVersion"]}},manifestVersion:"0.1"};var Me=async({from:t,provider:e})=>e.getTransactionCount(t);var Oe=t=>{if(t.data)try{let r=new ethers.Interface(dr__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Zn(n)?n:void 0}catch{return}};function Zn(t){return Object.values(X).includes(t)}function ar(t,e,r){return new ethers.ethers.Contract(t,dr__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var He=new Map,or=(t,e,r)=>(He.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:s,gasLimit:o})=>{let i=He.get(t);if(!i)throw rpcErrors.rpcErrors.resourceNotFound();let{signingData:c,displayData:l}=i,p={...c,data:{...c.data,gasLimit:o??c.data.gasLimit,maxFeePerGas:n??c.data.maxFeePerGas,maxPriorityFeePerGas:a??c.data.maxPriorityFeePerGas}},m={...l};if(typeof s=="string"){if(!s.startsWith("0x"))throw rpcErrors.rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let u=l.tokenApprovals;ta(u),ra(c.data.data);let y=u.approvals[0];p.data.data=ar(y.token.address,y.spenderAddress,s),m.tokenApprovals={approvals:[{...y,value:s}],isEditable:!0};}let d={signingData:p,displayData:m};return He.set(t,d),d},cleanup:()=>He.delete(t)});function ta(t){if(!t||!t.isEditable||t.approvals.length!==1)throw rpcErrors.rpcErrors.invalidInput("Cannot edit the token approval for this request. Please start a new request instead.")}function ra(t){if((!t||t==="0x"?null:Oe({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var sr=async({transactionParams:{from:t,to:e,data:r,value:n,accessList:a},provider:s})=>{let o=await s.getTransactionCount(t);return Number(await s.estimateGas({from:t,to:e,nonce:o,data:r,value:n,accessList:a}))};var We=(t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:s,alert:o})=>{let{dappInfo:i}=t,c=Oe(r),l="Do you approve this transaction?";c==="approve"&&(l="Do you approve this spend limit?");let p=[ne("Account",r.from),Le("Network",{name:e.chainName,logoUri:e.logoUri}),Fe("Website",i)];r.to&&p.push(ne("Contract",r.to));let m={title:l,details:[{title:"Transaction Details",items:p}],networkFeeSelector:!0,alert:o,balanceChange:a,tokenApprovals:s,isSimulationSuccessful:n},d={type:vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,account:r.from,data:{type:2,nonce:Number(r.nonce),gasLimit:Number(r.gas),maxFeePerGas:r.maxFeePerGas,maxPriorityFeePerGas:r.maxPriorityFeePerGas,to:r.to,from:r.from,data:r.data,value:r.value,chainId:r.chainId??e.chainId,accessList:r.accessList}};return {displayData:m,signingData:d}};var ir=async({chainId:t,params:e,domain:r,withGasEstimation:n,blockaid:a})=>{let s=["validation","simulation"];return n&&s.push("gas_estimation"),a.evm.transactionBulk.scan({chain:t.toString(),options:s,data:e,metadata:r&&r.length>0?{domain:r}:{non_dapp:!0}})},cr=async({chainId:t,params:e,domain:r,blockaid:n})=>n.evm.transaction.scan({account_address:e.from,chain:t.toString(),options:["validation","simulation"],data:{from:e.from,to:e.to,data:e.data,value:e.value,gas:e.gas,gas_price:e.gasPrice},metadata:r&&r.length>0?{domain:r}:{non_dapp:!0}}),lr=async({chainId:t,accountAddress:e,data:r,domain:n,blockaid:a})=>a.evm.jsonRpc.scan({chain:t.toString(),options:["validation","simulation"],account_address:e,data:r,metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}});var ur=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,dr__default.default.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),s=pr__default.default(a[0]),o=pr__default.default(a[1]),i=parseInt(a[2]),c={type:vmModuleTypes.TokenType.ERC20,name:s,chainId:e,symbol:o,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(dr__default.default.abi),p=l.getFunction(t.data.slice(0,10)),m=l.decodeFunctionData(t.data.slice(0,10),t.data);if(p?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new coreUtilsSdk.TokenUnit(m.amount,c.decimals,c.symbol).toDisplay(),usdPrice:void 0}],token:c}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:c,spenderAddress:m.spender,value:m.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};function Z(t){return !("type"in t)}function qe(t){return t.type===vmModuleTypes.TokenType.ERC20}function fr(t){return typeof t.to=="string"}function yr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function ia(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function ca(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function Tt(t){return ia(t)?t.ins.length===0&&t.outs.length===0:ca(t)?t.approvals.length===0:!1}var W={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious transaction",description:"Use caution, this transaction might be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.AlertType.DANGER,details:{title:"Scam transaction",description:"This transaction has been flagged as malicious, I understand the risk.",body:["This transaction is malicious","do not proceed"],actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var hr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:s})=>{let o;try{o=await cr({chainId:n,params:r,domain:e,blockaid:s});}catch(i){console.error("simulateTransaction error",i);}return kt({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:o})},kt=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:a})=>{let s,o,i,c=!1,l;if(a){let{validation:p,simulation:m,gas_estimation:d}=a;!p||p.result_type==="Error"||p.result_type==="Warning"?s=W[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(s=W[vmModuleTypes.AlertType.DANGER]),m?.status==="Success"&&(c=!0,i=Tr(t,m.account_summary),o=kr(m.account_summary.assets_diffs)),d?.status==="Success"&&(l=Number(d.estimate));}if(!c&&fr(e)){let p=await ur(e,r,n);o=p.balanceChange,i=p.tokenApprovals;}return {alert:s,balanceChange:o,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},fa=t=>t.trace_type==="ExposureTrace",ya=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,ga=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>fa(r)?{[ya(r.spender,r.asset.address)]:r}:e,{}),Tr=(t,e)=>{let{traces:r}=e,n=ga(r),a=Object.entries(n).map(([o,i])=>{let c=Er(i.asset);if(!c)return;let l={token:c,spenderAddress:i.spender,logoUri:c.logoUri};if(i.type==="ERC20ExposureTrace"){let{exposed:{raw_value:p,usd_price:m}}=i;l.value=p,l.usdPrice=`${m}`;}if(i.type==="ERC721ExposureTrace")if(!i.exposed)l.value=`0x${ethers.MaxUint256.toString(16)}`;else {let{usd_price:p,amount:m}=i.exposed;l.value=`${m}`,l.usdPrice=`${p}`;}return l}).filter(Boolean);return a.length===0?void 0:{isEditable:a.length===1&&a[0]?.token.type===vmModuleTypes.TokenType.ERC20&&t===vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,approvals:a}},kr=t=>{let e=gr(t,"in"),r=gr(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},gr=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,a="address"in n?Er(n):ha(n);if(!a)return;let s=r[e].map(o=>{let i;if("value"in o&&o.value)if("decimals"in a){let m=coreUtilsSdk.numberToBN(o.value,a.decimals);i=coreUtilsSdk.balanceToDisplayValue(m,a.decimals);}else ethers.isHexString(o.value)&&(i=parseInt(o.value,16).toString());else "type"in a&&a.type===vmModuleTypes.TokenType.ERC721&&(i="1");if(!i)return;let c="logo_url"in o?o.logo_url:void 0,l="token_id"in o?o.token_id:void 0;return {displayValue:i,usdPrice:o.usd_price,...c!==void 0&&{logoUri:c},...l!==void 0&&{tokenId:l}}}).filter(o=>o!==void 0);return {token:a,items:s}}).filter(r=>r!==void 0),Er=t=>{let e;return t.type==="ERC20"?e={type:vmModuleTypes.TokenType.ERC20,address:t.address,decimals:t.decimals,name:t.name??t.symbol??"",symbol:t.symbol??"",logoUri:t.logo_url}:t.type==="ERC1155"?e={type:vmModuleTypes.TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:vmModuleTypes.TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:vmModuleTypes.TokenType.NONERC,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}),e},ha=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),vr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:s})=>{let o,i,c;try{let{validation:l,simulation:p}=await lr({chainId:n,accountAddress:r,data:a,domain:e,blockaid:s});!l||l.result_type==="Error"||l.result_type==="Warning"?o=W[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(o=W[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=Tr(t.method,p.account_summary),i=kr(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=W[vmModuleTypes.AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}};var ie=zod.z.object({from:zod.z.string().length(42),to:zod.z.string().length(42).optional(),data:zod.z.string().optional(),value:zod.z.string().startsWith("0x").optional(),gas:zod.z.string().startsWith("0x").optional(),gasPrice:zod.z.string().startsWith("0x").optional(),maxFeePerGas:zod.z.string().startsWith("0x").optional(),maxPriorityFeePerGas:zod.z.string().startsWith("0x").optional(),nonce:zod.z.string().optional(),chainId:zod.z.string().optional().or(zod.z.number().optional()),accessList:zod.z.array(zod.z.object({address:zod.z.string().startsWith("0x"),storageKeys:zod.z.array(zod.z.string())})).optional()});var ka=zod.z.tuple([ie]),br=t=>ka.safeParse(t);var Pe=async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:s,request:o})=>{try{let i=$(t,r);if(n({txHash:r,request:o,explorerLink:i}),(await Y({operation:async()=>e.getTransactionReceipt(r),isSuccess:p=>!!p,backoffPolicy:D.linearThenExponential(15,750),maxRetries:20}))?.status===1)return a({txHash:r,explorerLink:i,request:o}),!0}catch(i){console.error(i);}return s({txHash:r,request:o}),!1};var ze=async(t,e,r)=>{if("txHash"in e)return e.txHash;let n=()=>t.send("eth_sendRawTransaction",[e.signedData]);return r?.shouldRetry?Y({operation:()=>n(),isSuccess:()=>!0,maxRetries:6,backoffPolicy:D.linearThenExponential(4,1e3)}):n()};var Pr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,error:o,success:i}=br(a);if(!i)return console.error("invalid params",o),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o}})};let[c]=s,l=await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!c.gas||Number(c.gas)<0)try{let P=await sr({transactionParams:{from:c.from,to:c.to,data:c.data,value:c.value,accessList:c.accessList},provider:l});c.gas="0x"+P.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!c.nonce)try{let P=await Me({from:c.from,provider:l});c.nonce=String(P);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let p=await hr({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l,blockaid:n}),{displayData:m,signingData:d}=We(t,e,c,p),{updateTx:u,cleanup:y}=or(t.requestId,d,m),h=await r.requestApproval({request:t,displayData:m,signingData:d,updateTx:u});if(y(),"error"in h)return {error:h.error};let v,E=t.context?.shouldRetry===!0;try{v=await ze(l,h,{shouldRetry:E});}catch(P){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:P}})}}return Pe({explorerUrl:e.explorerUrl??"",provider:l,txHash:v,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:v}};async function Rr(t,e){let r=t.map(async(s,o)=>({index:o,result:await e(s)})),a=(await Promise.allSettled(r)).filter(s=>s.status==="fulfilled").map(s=>s).find(s=>s.value.result);return a?t[a.value.index]:void 0}function ce(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function le(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let a=n.value;a.status==="fulfilled"?r[a.id]=a.value:r[a.id]={error:a.reason};}return r},{}))}var w,pe,Q,Re,Ye=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:a}){chunkTKL4UUHE_cjs.c(this,w,void 0);chunkTKL4UUHE_cjs.c(this,pe,void 0);chunkTKL4UUHE_cjs.c(this,Q,void 0);chunkTKL4UUHE_cjs.c(this,Re,void 0);chunkTKL4UUHE_cjs.d(this,w,e),chunkTKL4UUHE_cjs.d(this,pe,r),chunkTKL4UUHE_cjs.d(this,Q,n),chunkTKL4UUHE_cjs.d(this,Re,a);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await C({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,w).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,w).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,w).utilityAddresses?.multicall}),s=chunkTKL4UUHE_cjs.b(this,w).pricingProviders?.coingecko.nativeTokenId,o=chunkTKL4UUHE_cjs.b(this,w).networkToken,i=new H({storage:chunkTKL4UUHE_cjs.b(this,pe),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,Q)}),c=s?await i.getSimplePrice({coinIds:[s],currencies:[n]}):{},l=c?.[s??""]?.[n]?.price??void 0,p=c?.[s??""]?.[n]?.marketCap??void 0,m=c?.[s??""]?.[n]?.vol24??void 0,d=c?.[s??""]?.[n]?.change24??void 0,u=await a.getBalance(r),y=new coreUtilsSdk.TokenUnit(u,o.decimals,o.symbol),h=l!==void 0?y.mul(l):void 0;return {...o,coingeckoId:s??"",type:vmModuleTypes.TokenType.NATIVE,balance:u,balanceDisplayValue:y.toDisplay(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:m,change24:d}}async listErc20Balances({chainId:e,address:r,currency:n}){let a=await C({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,w).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,w).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,w).utilityAddresses?.multicall}),s=chunkTKL4UUHE_cjs.b(this,w).pricingProviders?.coingecko.assetPlatformId,o=chunkTKL4UUHE_cjs.b(this,w).pricingProviders?.coingecko.nativeTokenId,i=await _e({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,Q)}),c=i.map(E=>E.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,Re)].filter(qe),p=async E=>{let k=await new ethers.ethers.Contract(E.address,dr__default.default.abi,a).balanceOf?.(r)||0n;return {...E,balance:k}},m=l.map(E=>ce(p(E),E.address)),d=await le(m),u=new H({storage:chunkTKL4UUHE_cjs.b(this,pe),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,Q)}),y=s&&await u.getPricesByAddresses(c,s,n)||{},h=Object.keys(d),v={};for(let E=0;E<h.length;E++){let P=h[E];if(P===void 0)continue;let g=d[P];if(g===void 0||"error"in g){v[P]={error:`rpcService:getTokenWithBalance failed: ${g?.error??"unknown error"}`};continue}let k=y?.[o??""]?.[n]?.price??void 0,_=y?.[o??""]?.[n]?.marketCap??void 0,it=y?.[o??""]?.[n]?.vol24??void 0,V=y?.[o??""]?.[n]?.change24??void 0,he=new coreUtilsSdk.TokenUnit(g.balance,g.decimals,g.symbol),I=k!==void 0?he.mul(k):void 0;v[g.address.toLowerCase()]={...g,type:vmModuleTypes.TokenType.ERC20,balance:g.balance,balanceDisplayValue:he.toDisplay(),balanceInCurrency:I?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:I?.toDisplay({fixedDp:2}),priceInCurrency:k,marketCap:_,change24:V,vol24:it,reputation:null};}return v}async listNftBalances(){return {}}};w=new WeakMap,pe=new WeakMap,Q=new WeakMap,Re=new WeakMap;var Ir=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:a=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.TokenType.ERC1155],customTokens:s=[],storage:o,balanceServices:i=[],tokenService:c})=>{let l=r.chainId,p=[...i,new Ye({network:r,storage:o,proxyApiUrl:n,customTokens:s})],m=await Rr(p,u=>u.isNetworkSupported(r.chainId)),d={};if(m){let u=[],y=[],h=[];t.forEach(g=>{a.includes(vmModuleTypes.TokenType.NATIVE)&&u.push(ce(m.getNativeBalance({address:g,currency:e.toUpperCase(),chainId:l}).then(async k=>{if(k.symbol==="AVAX"){let _=await c.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...k,priceInCurrency:_.priceInCurrency,marketCap:_.marketCap,vol24:_.vol24,change24:_.change24}}return k}),g)),a.includes(vmModuleTypes.TokenType.ERC20)&&y.push(ce(m.listErc20Balances({customTokens:s.filter(qe),currency:e.toUpperCase(),chainId:l,address:g,pageSize:100}),g)),(a.includes(vmModuleTypes.TokenType.ERC721)||a.includes(vmModuleTypes.TokenType.ERC1155))&&h.push(ce(m.listNftBalances({chainId:l,address:g}),g));});let v=await le(u),E=await le(y),P=await le(h);Object.keys(v).forEach(g=>{let k=v[g];if(!k||"error"in k){d[g]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let _=k.symbol;d[g]={[_]:k};}),Object.keys(E).forEach(g=>{let k=E[g];!k||"error"in k&&typeof k.error!="string"?d[g]={...d[g],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?d[g]={...d[g],error:`listErc20Balances failed: ${k.error}`}:d[g]={...d[g],...k};}),Object.keys(P).forEach(g=>{let k=P[g];!k||"error"in k&&typeof k.error!="string"?d[g]={...d[g],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?d[g]={...d[g],error:`listNftBalances failed: ${k.error}`}:d[g]={...d[g],...k};});}else t.forEach(u=>{d[u]={error:"unsupported network"};});return d};var ba={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Pa={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},wr=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return ba;case vmModuleTypes.Environment.DEV:return Pa}};var Cr="DUMMY_API_KEY";var xa="https://ipfs.io";function Br(t,e=xa){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var Sa="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Ke(t,e="256"){let r=Br(t);return `${Sa}/width=${e},fit/${r}`}var F=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},Ca=[coreChainsSdk.ChainId.ETHEREUM_HOMESTEAD],Xe=class{constructor({glacierApiUrl:e,headers:r}){chunkTKL4UUHE_cjs.a(this,"glacierSdk");chunkTKL4UUHE_cjs.a(this,"isGlacierHealthy",!0);chunkTKL4UUHE_cjs.a(this,"supportedChainIds",[]);chunkTKL4UUHE_cjs.a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new glacierSdk.Glacier({BASE:e,HEADERS:r},ve),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(n=>n===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(r=>r.chainId).filter(r=>!Ca.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(a){throw a instanceof F&&this.setGlacierToUnhealthy(),a}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(a){throw a instanceof F&&this.setGlacierToUnhealthy(),a}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:a}){try{let o=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new coreUtilsSdk.TokenUnit(o.balance,o.decimals,o.symbol),c=o.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:o.name,symbol:o.symbol,decimals:o.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:o.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:a??""}}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}}async listErc721Balances({chainId:e,address:r}){let n,a=[];do try{let s=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});a.push(...s.erc721TokenBalances),n=s.nextPageToken;}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}while(n);return a}async listErc1155Balances({chainId:e,address:r}){let n,a=[];do try{let s=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});a.push(...s.erc1155TokenBalances),n=s.nextPageToken;}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}while(n);return a}async listNftBalances({chainId:e,address:r}){let a=(await Promise.allSettled([this.listErc721Balances({chainId:e.toString(),address:r}),this.listErc1155Balances({chainId:e.toString(),address:r})])).filter(s=>s.status==="fulfilled").flatMap(s=>s.value.filter(o=>o.ercType===glacierSdk.Erc721Token.ercType.ERC_721||BigInt(o.balance)>0n).map(o=>[`${o.address}-${o.tokenId}`,{address:o.address,description:o.metadata.description??"",logoUri:o.metadata.imageUri??"",logoSmall:Ke(o.metadata.imageUri??""),name:o.metadata.name??"",symbol:o.metadata.symbol??"",tokenId:o.tokenId,tokenUri:o.tokenUri,chainId:e,collectionName:"Unknown",balance:o.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(o.balance):1,balanceDisplayValue:o.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?o.balance:"1",type:o.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{indexStatus:o.metadata.indexStatus,description:o.metadata.description,lastUpdatedTimestamp:o.metadata.metadataLastUpdatedTimestamp,properties:o.ercType===glacierSdk.Erc721Token.ercType.ERC_721?o.metadata.attributes:o.metadata.properties}}]));return Object.fromEntries(a)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:a}){try{let s=[],o;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:o});s.push(...Na(i.erc20TokenBalances,Number(e))),o=i.nextPageToken;}while(o);return [...Ba(a),...s].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:a}){try{return this.glacierSdk.evmTransactions.listTransactionsV2({chainId:e,address:r,pageToken:n,pageSize:a,filterSpamTokens:!0})}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}}},Ba=t=>t.map(e=>({...e,decimals:e.decimals??18,type:vmModuleTypes.TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0,reputation:null})),Na=(t,e)=>t.map(r=>{let n=new coreUtilsSdk.TokenUnit(r.balance,r.decimals,r.symbol),a=n.toDisplay(),s=r.balanceValue?.value.toString(),o=r.price?.value,i=o!==void 0?n.mul(o).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:s,balanceDisplayValue:a,balanceInCurrency:i,priceInCurrency:o,reputation:r.tokenReputation,type:vmModuleTypes.TokenType.ERC20}});var vt=t=>{let e="";e+=`Domain
27
27
  `;for(let r in t.domain)e+=` ${r}: ${ee(String(t.domain[r]))}
28
28
  `;e+=`
29
29
  Message
30
30
  `;for(let r in t.message)if(typeof t.message[r]=="object"&&!Array.isArray(t.message[r])){e+=` ${r}:
31
31
  `;for(let n in t.message[r])Array.isArray(t.message[r][n])?(e+=` ${n}:
32
- `,t.message[r][n].forEach((a,o)=>{e+=` ${o}: ${ee(a)}
32
+ `,t.message[r][n].forEach((a,s)=>{e+=` ${s}: ${ee(a)}
33
33
  `;})):e+=` ${n}: ${ee(String(t.message[r][n]))}
34
34
  `;}else Array.isArray(t.message[r])?(e+=` ${r}:
35
35
  `,t.message[r].forEach((n,a)=>{e+=` ${a}:
36
- `;for(let o in n)Array.isArray(n[o])?(e+=` ${o}:
37
- `,n[o].forEach((s,i)=>{e+=` ${i}: ${ee(s)}
38
- `;})):e+=` ${o}: ${ee(String(n[o]))}
36
+ `;for(let s in n)Array.isArray(n[s])?(e+=` ${s}:
37
+ `,n[s].forEach((o,i)=>{e+=` ${i}: ${ee(o)}
38
+ `;})):e+=` ${s}: ${ee(String(n[s]))}
39
39
  `;})):e+=` ${r}: ${ee(String(t.message[r]))}
40
40
  `;return e},Dr=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
41
41
  `,e+=`${ee(String(r.value))}
42
42
 
43
- `;}),e},ee=t=>{let e={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return t.split("").map(r=>e[r]||r).join("")};var Se=zod.z.string().describe("message"),U=zod.z.string().describe("address");var Gr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([U,Se])});var Fr=zod.z.object({name:zod.z.string(),type:zod.z.string()}),me=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(Fr)}).catchall(zod.z.array(Fr)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),Pt=zod.z.array(zod.z.object({type:zod.z.string(),name:zod.z.string(),value:zod.z.union([zod.z.string(),zod.z.number(),zod.z.boolean(),zod.z.object({}).passthrough(),zod.z.array(zod.z.unknown()),zod.z.null()])})).nonempty(),Rt=me.or(Pt),Lr=zod.z.union([zod.z.string().describe("data string"),me]),Vr=zod.z.union([zod.z.string().describe("data string"),Rt]),Mr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([U,Vr])}),Or=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([U,Vr])}),Hr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([U,Lr])}),$r=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([U,Lr])});var Wr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([Se,U]),zod.z.tuple([Se,U,zod.z.string().optional().describe("password")])])});var Ua=zod.z.discriminatedUnion("method",[Wr,Gr,Mr,Or,Hr,$r]).transform((t,e)=>{let{method:r,params:n}=t;switch(r){case vmModuleTypes.RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case vmModuleTypes.RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:{let a=n[0],o=n[1];if(typeof o!="string")return {data:o,address:a,method:r};try{let s=JSON.parse(o);return {data:Rt.parse(s),address:a,method:r}}catch{return e.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:{let a=n[0],o=n[1];if(typeof o!="string")return {data:o,address:a,method:r};try{let s=JSON.parse(o);return {data:me.parse(s),address:a,method:r}}catch{return e.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}}});function qr(t){return Ua.safeParse(t)}var jr=t=>Pt.safeParse(t).success,Fl=t=>me.safeParse(t).success;var zr=t=>{try{let{EIP712Domain:e,...r}=t.types;return ethers.TypedDataEncoder.getPayload(t.domain,r,t.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Jr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=qr({method:t.method,params:t.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.rpcErrors.invalidParams({message:"Params are invalid",data:{cause:a.error}})};let{method:o,data:s,address:i}=a.data,c;(o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(c=zr(s));let l,p,d;if(c&&!c.isValid&&(d={type:vmModuleTypes.AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:c.error.toString()}}),o===vmModuleTypes.RpcMethod.ETH_SIGN)l={type:o,account:i,data:s},p=s;else if(o===vmModuleTypes.RpcMethod.PERSONAL_SIGN)l={type:o,account:i,data:s},p=ethers.toUtf8String(s);else if(o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)l={type:o,account:i,data:s},p=jr(s)?Dr(s):vt(s);else if(o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4){l={type:o,account:i,data:s};let{types:h,primaryType:v,...E}=s;p=vt(E);}if(!l||!p)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let m=await vr({request:t,accountAddress:i,chainId:e.chainId,data:{method:o,params:t.params},dAppUrl:t.dappInfo.url,blockaid:n}),u={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} is requesting to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[mt("Message",p,"vertical")]}],alert:m?.alert??d,balanceChange:m?.balanceChange,tokenApprovals:m?.tokenApprovals},y=await r.requestApproval({request:t,displayData:u,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.rpcErrors.internal("No signed data returned")}};var Yr=async(t,e)=>{try{return {result:await(await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})).send(t.method,t.params)}}catch(r){let n=r.info?.error?.message||r.error?.message||r.message;return {error:rpcErrors.rpcErrors.internal(n)}}};var Xr=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case vmModuleTypes.WalletType.Mnemonic:case vmModuleTypes.WalletType.Ledger:case vmModuleTypes.WalletType.Keystone:return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getAddressFromXPub(e,t)};case vmModuleTypes.WalletType.LedgerLive:case vmModuleTypes.WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getEvmAddressFromPubKey(n)}}default:throw rpcErrors.rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};var Zr=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var Qe=({accountIndex:t,derivationPathType:e})=>{if(t<0)throw rpcErrors.rpcErrors.invalidParams("Account index must be a non-negative integer");switch(e){case"bip44":return {[vmModuleTypes.NetworkVMType.EVM]:`m/44'/60'/0'/0/${t}`};case"ledger_live":return {[vmModuleTypes.NetworkVMType.EVM]:`m/44'/60'/${t}'/0/0`};default:throw rpcErrors.rpcErrors.invalidParams(`Unsupported derivation path type: ${e}`)}};var tn=async t=>{let{secretId:e,approvalController:r}=t,n=Zr(t)?Qe(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[vmModuleTypes.NetworkVMType.EVM]:ethers.computeAddress(`0x${a}`)}};var fe,et=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.c(this,fe,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(a=>a.community_id).some(a=>a===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let a=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(a.ok)return await a.json();throw new Error(`${a.status}:${a.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(chunkTKL4UUHE_cjs.b(this,fe).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,fe,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.b(this,fe)}async getNftList({address:e,chainId:r}){return N([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],Ja)}};fe=new WeakMap;var ja=zod.z.object({id:zod.z.union([zod.z.custom(ethers.isHexString),zod.z.string()]),chain:zod.z.string(),name:zod.z.string()}),za=ja.merge(zod.z.object({contract_id:zod.z.string(),description:zod.z.string().nullable(),content_type:zod.z.string().nullable(),content:zod.z.string(),thumbnail_url:zod.z.string(),total_supply:zod.z.number(),detail_url:zod.z.string(),collection_id:zod.z.string(),is_core:zod.z.boolean(),inner_id:zod.z.string(),collection_name:zod.z.string(),contract_name:zod.z.string(),amount:zod.z.number(),usd_price:zod.z.number().optional(),is_erc721:zod.z.boolean().optional(),is_erc1155:zod.z.boolean().optional()})),Ja=zod.z.array(za);var G,ye,rt,at,nn,nt=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,ye);chunkTKL4UUHE_cjs.c(this,at);chunkTKL4UUHE_cjs.c(this,G,void 0);chunkTKL4UUHE_cjs.d(this,G,new et(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,G).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:o}=await chunkTKL4UUHE_cjs.e(this,ye,rt).call(this,e),s=a.native_token_id,i=await chunkTKL4UUHE_cjs.b(this,G).getTokenBalance({address:r,chainId:o,tokenId:s}),c=new coreUtilsSdk.TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),d=(await Ue()).usd[n.toLowerCase()],m=d?d*i.price:void 0,u=m?c.mul(m).toDisplay({fixedDp:2}):void 0,y=m?c.mul(m).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:y,balanceCurrencyDisplayValue:u,priceInCurrency:m}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:o}=await chunkTKL4UUHE_cjs.e(this,ye,rt).call(this,e),s=await chunkTKL4UUHE_cjs.b(this,G).getTokensBalanceOnChain({chainId:o,address:r}),i=await Ue(),c={};for(let l of s){if(l.id===a.native_token_id||l.is_core===!1)continue;let p=new coreUtilsSdk.TokenUnit(l.raw_amount,l.decimals,l.symbol),d=p.toDisplay(),m=i.usd[n.toLowerCase()],u=m?m*l.price:void 0,y=u?p.mul(u).toDisplay({fixedDp:2}):void 0,h=u?p.mul(u).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:a.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:y,balanceDisplayValue:d,balanceInCurrency:h,priceInCurrency:u,type:vmModuleTypes.TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e,address:r}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await chunkTKL4UUHE_cjs.e(this,ye,rt).call(this,e),a=await chunkTKL4UUHE_cjs.b(this,G).getNftList({chainId:n,address:r});return chunkTKL4UUHE_cjs.e(this,at,nn).call(this,a,e)}};G=new WeakMap,ye=new WeakSet,rt=async function(e){let n=(await chunkTKL4UUHE_cjs.b(this,G).getChainList()).find(o=>o.community_id===e)?.id;if(!n)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await chunkTKL4UUHE_cjs.b(this,G).getChainInfo({chainId:n});if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},at=new WeakSet,nn=function(e,r){return e.reduce((n,a)=>({...n,[`${a.contract_id}-${a.id}`]:{chainId:r,address:a.contract_id,description:a.description??"",logoUri:a.thumbnail_url,logoSmall:Ke(a.content),name:a.name,symbol:"",tokenId:`${a.inner_id}`,tokenUri:a.detail_url,collectionName:a.collection_name,balance:BigInt(a.amount),balanceDisplayValue:`${a.amount}`,type:a.is_erc721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{indexStatus:glacierSdk.NftTokenMetadataStatus.UNINDEXED,description:a.description??"",properties:""}}}),{})};var an=zod.z.tuple([ie,ie]).rest(ie).refine(t=>It(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>It(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>Qa(t,"nonce")||Za(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'}),Ka=zod.z.object({skipIntermediateTxs:zod.z.boolean().optional()}),Xa=zod.z.union([an,zod.z.object({transactions:an,options:Ka.optional()})]);function Za(t,e){return !It(t,e)}function Qa(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function It(t,e){return new Set(t.map(n=>n[e])).size===1}var on=t=>{let e=Xa.safeParse(t);return e.success?Array.isArray(e.data)?{success:!0,data:{transactions:e.data,options:{}}}:{success:!0,data:{transactions:e.data.transactions,options:e.data.options??{}}}:e};var sn=async(t,e)=>{if(t[0].nonce)return;let r=await Me({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))};var ot=new Map,cn=(t,e,r)=>(ot.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},o)=>{let s=ot.get(t);if(!s)throw rpcErrors.rpcErrors.resourceNotFound();let{signingRequests:i}=s,l={signingRequests:i.map((p,d)=>{if(o===void 0||o===d){let{signingData:m}=p;return {signingData:{...m,data:{...m.data,maxFeePerGas:n??m.data.maxFeePerGas,maxPriorityFeePerGas:a??m.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return ot.set(t,l),l},cleanup:()=>ot.delete(t)});var pn=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:o,blockaid:s})=>{let i;try{i=await ir({chainId:n,params:r,domain:e,withGasEstimation:o,blockaid:s});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:W[vmModuleTypes.AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,y)=>{let h=r[y],v=await kt({chainId:n,params:r[y],provider:a,rpcMethod:t,simulationResult:u});return o&&!h.gas&&v.estimatedGasLimit&&(h.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:h,...v}})),l=c.every(u=>u.isSimulationSuccessful),p=to(c),d=no(c),m=ro(c);return {isSimulationSuccessful:l,alert:p,balanceChange:d,tokenApprovals:m,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},to=t=>{let e={[vmModuleTypes.AlertType.INFO]:0,[vmModuleTypes.AlertType.WARNING]:1,[vmModuleTypes.AlertType.DANGER]:2};return t.reduce((r,{alert:n})=>n&&(!r||e[n.type]>e[r.type])?n:r,void 0)},ro=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(a=>{let o=r.approvals.find(s=>a.token.address===s.token.address&&a.spenderAddress===s.spenderAddress);if(!o){r.approvals.push({...a});return}o.value=a.value,o.usdPrice=a.usdPrice;}),r),{approvals:[],isEditable:!1});return ao(e,t),Tt(e)?void 0:e},no=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let o=ln(r.ins,a);o?o.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let o=ln(r.outs,a);o?o.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return Tt(e)?void 0:e},ln=(t,e)=>t.find(r=>Z(r.token)&&Z(e.token)?r.token.symbol===e.token.symbol:!Z(r.token)&&!Z(e.token)?r.token.address===e.token.address:!1),ao=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(o=>!Z(o.token)&&!Z(r.token)&&o.token.address===r.token.address)))if(!n.tokenApprovals)t.approvals=t.approvals.filter(o=>o.spenderAddress!==r.spenderAddress&&r.token.address!==o.token.address);else {let o=n.tokenApprovals.approvals.find(s=>s.spenderAddress===r.spenderAddress&&s.token.address===r.token.address);if(!o)continue;r.usdPrice=o.usdPrice,r.value=o.value;}};var mn=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:o,success:s,error:i}=on(a);if(!s)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let{transactions:c,options:l={}}=o,{skipIntermediateTxs:p=!1}=l,d=await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await sn(c,d);}catch(I){return console.error("Unable to calculate nonce",I),{error:rpcErrors.rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:I}})}}let m=c.every(I=>Number(I.gas)>0),{alert:u,balanceChange:y,isSimulationSuccessful:h,tokenApprovals:v,scans:E}=await pn({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:d,populateMissingGas:!m,blockaid:n});if(!E.every(({transaction:I})=>Number(I.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let g={title:"Do you approve these transactions?",details:[{title:"Transaction Details",items:[ne("Account",c[0].from),Le("Network",{name:e.chainName,logoUri:e.logoUri}),Fe("Website",t.dappInfo)]}],isSimulationSuccessful:h,balanceChange:y,alert:u,tokenApprovals:v,networkFeeSelector:!0},k=E.map(I=>We(t,e,I.transaction,I)),{cleanup:_,updateTx:it}=cn(t.requestId,k,g),V=await r.requestBatchApproval({request:t,signingRequests:k,displayData:g,updateTx:it});if(_(),"error"in V)return {error:V.error};if(V.result.length!==c.length)return {error:rpcErrors.rpcErrors.internal({message:`Invalid number of signatures. Expected ${c.length}, got ${V.result.length}`})};let he=[];for(let[I,fn]of V.result.entries()){let At=I===V.result.length-1,ct=await ze(d,fn);if(At&&Pe({explorerUrl:e.explorerUrl??"",provider:d,txHash:ct,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),!At&&!p&&!await Pe({explorerUrl:e.explorerUrl??"",provider:d,txHash:ct,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}))return {error:rpcErrors.rpcErrors.internal({message:`Transaction ${I+1} failed! Batch execution stopped`})};he.push(ct);}return {result:he}};var ge,Ne,J,L,te,un=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){chunkTKL4UUHE_cjs.c(this,ge,void 0);chunkTKL4UUHE_cjs.c(this,Ne,void 0);chunkTKL4UUHE_cjs.c(this,J,void 0);chunkTKL4UUHE_cjs.c(this,L,void 0);chunkTKL4UUHE_cjs.c(this,te,void 0);let{glacierApiUrl:o,proxyApiUrl:s}=wr(r);chunkTKL4UUHE_cjs.d(this,ge,new Xe({glacierApiUrl:o,headers:dt(n)})),chunkTKL4UUHE_cjs.d(this,Ne,new nt({proxyApiUrl:s})),chunkTKL4UUHE_cjs.d(this,J,s),chunkTKL4UUHE_cjs.d(this,L,e),chunkTKL4UUHE_cjs.d(this,te,new so__default.default({baseURL:s+"/proxy/blockaid/",apiKey:Cr,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Xr({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return Qe(e)}deriveAddress(e){return tn({...e,approvalController:chunkTKL4UUHE_cjs.b(this,L)})}getBalances({addresses:e,network:r,currency:n,customTokens:a,storage:o,tokenTypes:s}){let i=new H({storage:o,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J)});return Ir({addresses:e,currency:n,network:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J),customTokens:a,balanceServices:[chunkTKL4UUHE_cjs.b(this,ge),chunkTKL4UUHE_cjs.b(this,Ne)],storage:o,tokenTypes:s,tokenService:i})}getManifest(){let e=vmModuleTypes.parseManifest(nr);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:o,caipId:s}=e;return Gt({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:o?.multicall,caipId:s,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:a,offset:o}=e,{chainId:s,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return rr({chainId:s,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:a,offset:o,glacierService:chunkTKL4UUHE_cjs.b(this,ge)})}getTokens(e){let{chainId:r}=e;return _e({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return Pr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),blockaid:chunkTKL4UUHE_cjs.b(this,te)});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return yr(chunkTKL4UUHE_cjs.b(this,L))?mn({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),blockaid:chunkTKL4UUHE_cjs.b(this,te)}):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};case vmModuleTypes.RpcMethod.PERSONAL_SIGN:case vmModuleTypes.RpcMethod.ETH_SIGN:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:return Jr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),blockaid:chunkTKL4UUHE_cjs.b(this,te)});default:return io(e.method)?Yr(e,r):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ge=new WeakMap,Ne=new WeakMap,J=new WeakMap,L=new WeakMap,te=new WeakMap;var io=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
43
+ `;}),e},ee=t=>{let e={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return t.split("").map(r=>e[r]||r).join("")};var Se=zod.z.string().describe("message"),U=zod.z.string().describe("address");var Gr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([U,Se])});var Fr=zod.z.object({name:zod.z.string(),type:zod.z.string()}),me=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(Fr)}).catchall(zod.z.array(Fr)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),Pt=zod.z.array(zod.z.object({type:zod.z.string(),name:zod.z.string(),value:zod.z.union([zod.z.string(),zod.z.number(),zod.z.boolean(),zod.z.object({}).passthrough(),zod.z.array(zod.z.unknown()),zod.z.null()])})).nonempty(),Rt=me.or(Pt),Lr=zod.z.union([zod.z.string().describe("data string"),me]),Vr=zod.z.union([zod.z.string().describe("data string"),Rt]),Mr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([U,Vr])}),Or=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([U,Vr])}),Hr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([U,Lr])}),$r=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([U,Lr])});var Wr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([Se,U]),zod.z.tuple([Se,U,zod.z.string().optional().describe("password")])])});var Ua=zod.z.discriminatedUnion("method",[Wr,Gr,Mr,Or,Hr,$r]).transform((t,e)=>{let{method:r,params:n}=t;switch(r){case vmModuleTypes.RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case vmModuleTypes.RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:{let a=n[0],s=n[1];if(typeof s!="string")return {data:s,address:a,method:r};try{let o=JSON.parse(s);return {data:Rt.parse(o),address:a,method:r}}catch{return e.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:{let a=n[0],s=n[1];if(typeof s!="string")return {data:s,address:a,method:r};try{let o=JSON.parse(s);return {data:me.parse(o),address:a,method:r}}catch{return e.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}}});function qr(t){return Ua.safeParse(t)}var jr=t=>Pt.safeParse(t).success,Fl=t=>me.safeParse(t).success;var zr=t=>{try{let{EIP712Domain:e,...r}=t.types;return ethers.TypedDataEncoder.getPayload(t.domain,r,t.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Jr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=qr({method:t.method,params:t.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.rpcErrors.invalidParams({message:"Params are invalid",data:{cause:a.error}})};let{method:s,data:o,address:i}=a.data,c;(s===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||s===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(c=zr(o));let l,p,m;if(c&&!c.isValid&&(m={type:vmModuleTypes.AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:c.error.toString()}}),s===vmModuleTypes.RpcMethod.ETH_SIGN)l={type:s,account:i,data:o},p=o;else if(s===vmModuleTypes.RpcMethod.PERSONAL_SIGN)l={type:s,account:i,data:o},p=ethers.toUtf8String(o);else if(s===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||s===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)l={type:s,account:i,data:o},p=jr(o)?Dr(o):vt(o);else if(s===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||s===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4){l={type:s,account:i,data:o};let{types:h,primaryType:v,...E}=o;p=vt(E);}if(!l||!p)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let d=await vr({request:t,accountAddress:i,chainId:e.chainId,data:{method:s,params:t.params},dAppUrl:t.dappInfo.url,blockaid:n}),u={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} is requesting to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[mt("Message",p,"vertical")]}],alert:d?.alert??m,balanceChange:d?.balanceChange,tokenApprovals:d?.tokenApprovals},y=await r.requestApproval({request:t,displayData:u,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.rpcErrors.internal("No signed data returned")}};var Yr=async(t,e)=>{try{return {result:await(await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})).send(t.method,t.params)}}catch(r){let n=r.info?.error?.message||r.error?.message||r.message;return {error:rpcErrors.rpcErrors.internal(n)}}};var Xr=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case vmModuleTypes.WalletType.Mnemonic:case vmModuleTypes.WalletType.Ledger:case vmModuleTypes.WalletType.Keystone:return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getAddressFromXPub(e,t)};case vmModuleTypes.WalletType.LedgerLive:case vmModuleTypes.WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getEvmAddressFromPubKey(n)}}default:throw rpcErrors.rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};var Zr=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var Qe=({accountIndex:t,derivationPathType:e})=>{if(t<0)throw rpcErrors.rpcErrors.invalidParams("Account index must be a non-negative integer");switch(e){case"bip44":return {[vmModuleTypes.NetworkVMType.EVM]:`m/44'/60'/0'/0/${t}`};case"ledger_live":return {[vmModuleTypes.NetworkVMType.EVM]:`m/44'/60'/${t}'/0/0`};default:throw rpcErrors.rpcErrors.invalidParams(`Unsupported derivation path type: ${e}`)}};var tn=async t=>{let{secretId:e,approvalController:r}=t,n=Zr(t)?Qe(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[vmModuleTypes.NetworkVMType.EVM]:ethers.computeAddress(`0x${a}`)}};var fe,et=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.c(this,fe,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(a=>a.community_id).some(a=>a===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let a=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(a.ok)return await a.json();throw new Error(`${a.status}:${a.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(chunkTKL4UUHE_cjs.b(this,fe).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,fe,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.b(this,fe)}async getNftList({address:e,chainId:r}){return N([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],Ja)}};fe=new WeakMap;var ja=zod.z.object({id:zod.z.union([zod.z.custom(ethers.isHexString),zod.z.string()]),chain:zod.z.string(),name:zod.z.string()}),za=ja.merge(zod.z.object({contract_id:zod.z.string(),description:zod.z.string().nullable(),content_type:zod.z.string().nullable(),content:zod.z.string(),thumbnail_url:zod.z.string(),total_supply:zod.z.number(),detail_url:zod.z.string(),collection_id:zod.z.string(),is_core:zod.z.boolean(),inner_id:zod.z.string(),collection_name:zod.z.string(),contract_name:zod.z.string(),amount:zod.z.number(),usd_price:zod.z.number().optional(),is_erc721:zod.z.boolean().optional(),is_erc1155:zod.z.boolean().optional()})),Ja=zod.z.array(za);var G,ye,rt,at,nn,nt=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,ye);chunkTKL4UUHE_cjs.c(this,at);chunkTKL4UUHE_cjs.c(this,G,void 0);chunkTKL4UUHE_cjs.d(this,G,new et(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,G).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:s}=await chunkTKL4UUHE_cjs.e(this,ye,rt).call(this,e),o=a.native_token_id,i=await chunkTKL4UUHE_cjs.b(this,G).getTokenBalance({address:r,chainId:s,tokenId:o}),c=new coreUtilsSdk.TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),m=(await Ue()).usd[n.toLowerCase()],d=m?m*i.price:void 0,u=d?c.mul(d).toDisplay({fixedDp:2}):void 0,y=d?c.mul(d).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:y,balanceCurrencyDisplayValue:u,priceInCurrency:d}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:s}=await chunkTKL4UUHE_cjs.e(this,ye,rt).call(this,e),o=await chunkTKL4UUHE_cjs.b(this,G).getTokensBalanceOnChain({chainId:s,address:r}),i=await Ue(),c={};for(let l of o){if(l.id===a.native_token_id||l.is_core===!1)continue;let p=new coreUtilsSdk.TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),d=i.usd[n.toLowerCase()],u=d?d*l.price:void 0,y=u?p.mul(u).toDisplay({fixedDp:2}):void 0,h=u?p.mul(u).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:a.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:y,balanceDisplayValue:m,balanceInCurrency:h,priceInCurrency:u,type:vmModuleTypes.TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e,address:r}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await chunkTKL4UUHE_cjs.e(this,ye,rt).call(this,e),a=await chunkTKL4UUHE_cjs.b(this,G).getNftList({chainId:n,address:r});return chunkTKL4UUHE_cjs.e(this,at,nn).call(this,a,e)}};G=new WeakMap,ye=new WeakSet,rt=async function(e){let n=(await chunkTKL4UUHE_cjs.b(this,G).getChainList()).find(s=>s.community_id===e)?.id;if(!n)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await chunkTKL4UUHE_cjs.b(this,G).getChainInfo({chainId:n});if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},at=new WeakSet,nn=function(e,r){return e.reduce((n,a)=>({...n,[`${a.contract_id}-${a.id}`]:{chainId:r,address:a.contract_id,description:a.description??"",logoUri:a.thumbnail_url,logoSmall:Ke(a.content),name:a.name,symbol:"",tokenId:`${a.inner_id}`,tokenUri:a.detail_url,collectionName:a.collection_name,balance:BigInt(a.amount),balanceDisplayValue:`${a.amount}`,type:a.is_erc721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{indexStatus:glacierSdk.NftTokenMetadataStatus.UNINDEXED,description:a.description??"",properties:""}}}),{})};var an=zod.z.tuple([ie,ie]).rest(ie).refine(t=>It(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>It(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>Qa(t,"nonce")||Za(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'}),Ka=zod.z.object({skipIntermediateTxs:zod.z.boolean().optional()}),Xa=zod.z.union([an,zod.z.object({transactions:an,options:Ka.optional()})]);function Za(t,e){return !It(t,e)}function Qa(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function It(t,e){return new Set(t.map(n=>n[e])).size===1}var on=t=>{let e=Xa.safeParse(t);return e.success?Array.isArray(e.data)?{success:!0,data:{transactions:e.data,options:{}}}:{success:!0,data:{transactions:e.data.transactions,options:e.data.options??{}}}:e};var sn=async(t,e)=>{if(t[0].nonce)return;let r=await Me({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))};var ot=new Map,cn=(t,e,r)=>(ot.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},s)=>{let o=ot.get(t);if(!o)throw rpcErrors.rpcErrors.resourceNotFound();let{signingRequests:i}=o,l={signingRequests:i.map((p,m)=>{if(s===void 0||s===m){let{signingData:d}=p;return {signingData:{...d,data:{...d.data,maxFeePerGas:n??d.data.maxFeePerGas,maxPriorityFeePerGas:a??d.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return ot.set(t,l),l},cleanup:()=>ot.delete(t)});var pn=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:s,blockaid:o})=>{let i;try{i=await ir({chainId:n,params:r,domain:e,withGasEstimation:s,blockaid:o});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:W[vmModuleTypes.AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,y)=>{let h=r[y],v=await kt({chainId:n,params:r[y],provider:a,rpcMethod:t,simulationResult:u});return s&&!h.gas&&v.estimatedGasLimit&&(h.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:h,...v}})),l=c.every(u=>u.isSimulationSuccessful),p=to(c),m=no(c),d=ro(c);return {isSimulationSuccessful:l,alert:p,balanceChange:m,tokenApprovals:d,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},to=t=>{let e={[vmModuleTypes.AlertType.INFO]:0,[vmModuleTypes.AlertType.WARNING]:1,[vmModuleTypes.AlertType.DANGER]:2};return t.reduce((r,{alert:n})=>n&&(!r||e[n.type]>e[r.type])?n:r,void 0)},ro=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(a=>{let s=r.approvals.find(o=>a.token.address===o.token.address&&a.spenderAddress===o.spenderAddress);if(!s){r.approvals.push({...a});return}s.value=a.value,s.usdPrice=a.usdPrice;}),r),{approvals:[],isEditable:!1});return ao(e,t),Tt(e)?void 0:e},no=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let s=ln(r.ins,a);s?s.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let s=ln(r.outs,a);s?s.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return Tt(e)?void 0:e},ln=(t,e)=>t.find(r=>Z(r.token)&&Z(e.token)?r.token.symbol===e.token.symbol:!Z(r.token)&&!Z(e.token)?r.token.address===e.token.address:!1),ao=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(s=>!Z(s.token)&&!Z(r.token)&&s.token.address===r.token.address)))if(!n.tokenApprovals)t.approvals=t.approvals.filter(s=>s.spenderAddress!==r.spenderAddress&&r.token.address!==s.token.address);else {let s=n.tokenApprovals.approvals.find(o=>o.spenderAddress===r.spenderAddress&&o.token.address===r.token.address);if(!s)continue;r.usdPrice=s.usdPrice,r.value=s.value;}};var mn=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,success:o,error:i}=on(a);if(!o)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let{transactions:c,options:l={}}=s,{skipIntermediateTxs:p=!1}=l,m=await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await sn(c,m);}catch(I){return console.error("Unable to calculate nonce",I),{error:rpcErrors.rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:I}})}}let d=c.every(I=>Number(I.gas)>0),{alert:u,balanceChange:y,isSimulationSuccessful:h,tokenApprovals:v,scans:E}=await pn({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:m,populateMissingGas:!d,blockaid:n});if(!E.every(({transaction:I})=>Number(I.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let g={title:"Do you approve these transactions?",details:[{title:"Transaction Details",items:[ne("Account",c[0].from),Le("Network",{name:e.chainName,logoUri:e.logoUri}),Fe("Website",t.dappInfo)]}],isSimulationSuccessful:h,balanceChange:y,alert:u,tokenApprovals:v,networkFeeSelector:!0},k=E.map(I=>We(t,e,I.transaction,I)),{cleanup:_,updateTx:it}=cn(t.requestId,k,g),V=await r.requestBatchApproval({request:t,signingRequests:k,displayData:g,updateTx:it});if(_(),"error"in V)return {error:V.error};if(V.result.length!==c.length)return {error:rpcErrors.rpcErrors.internal({message:`Invalid number of signatures. Expected ${c.length}, got ${V.result.length}`})};let he=[];for(let[I,fn]of V.result.entries()){let At=I===V.result.length-1,ct=await ze(m,fn);if(At&&Pe({explorerUrl:e.explorerUrl??"",provider:m,txHash:ct,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),!At&&!p&&!await Pe({explorerUrl:e.explorerUrl??"",provider:m,txHash:ct,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}))return {error:rpcErrors.rpcErrors.internal({message:`Transaction ${I+1} failed! Batch execution stopped`})};he.push(ct);}return {result:he}};var ge,Ne,J,L,te,un=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){chunkTKL4UUHE_cjs.c(this,ge,void 0);chunkTKL4UUHE_cjs.c(this,Ne,void 0);chunkTKL4UUHE_cjs.c(this,J,void 0);chunkTKL4UUHE_cjs.c(this,L,void 0);chunkTKL4UUHE_cjs.c(this,te,void 0);let{glacierApiUrl:s,proxyApiUrl:o}=wr(r);chunkTKL4UUHE_cjs.d(this,ge,new Xe({glacierApiUrl:s,headers:dt(n)})),chunkTKL4UUHE_cjs.d(this,Ne,new nt({proxyApiUrl:o})),chunkTKL4UUHE_cjs.d(this,J,o),chunkTKL4UUHE_cjs.d(this,L,e),chunkTKL4UUHE_cjs.d(this,te,new so__default.default({baseURL:o+"/proxy/blockaid/",apiKey:Cr,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Xr({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return Qe(e)}deriveAddress(e){return tn({...e,approvalController:chunkTKL4UUHE_cjs.b(this,L)})}getBalances({addresses:e,network:r,currency:n,customTokens:a,storage:s,tokenTypes:o}){let i=new H({storage:s,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J)});return Ir({addresses:e,currency:n,network:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J),customTokens:a,balanceServices:[chunkTKL4UUHE_cjs.b(this,ge),chunkTKL4UUHE_cjs.b(this,Ne)],storage:s,tokenTypes:o,tokenService:i})}getManifest(){let e=vmModuleTypes.parseManifest(nr);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:s,caipId:o}=e;return Gt({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:s?.multicall,caipId:o,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:a,offset:s}=e,{chainId:o,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return rr({chainId:o,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:a,offset:s,glacierService:chunkTKL4UUHE_cjs.b(this,ge)})}getTokens(e){let{chainId:r}=e;return _e({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return Pr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),blockaid:chunkTKL4UUHE_cjs.b(this,te)});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return yr(chunkTKL4UUHE_cjs.b(this,L))?mn({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),blockaid:chunkTKL4UUHE_cjs.b(this,te)}):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};case vmModuleTypes.RpcMethod.PERSONAL_SIGN:case vmModuleTypes.RpcMethod.ETH_SIGN:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4:return Jr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,L),blockaid:chunkTKL4UUHE_cjs.b(this,te)});default:return io(e.method)?Yr(e,r):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ge=new WeakMap,Ne=new WeakMap,J=new WeakMap,L=new WeakMap,te=new WeakMap;var io=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
44
44
 
45
45
  exports.ERC20TransactionType = X;
46
46
  exports.EvmModule = un;