require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../data-structures/http/HttpClient.cjs`);require(`../../data-structures/http/index.cjs`);const r=require(`./addresses.cjs`),i=require(`../../externalABIs/index.cjs`),a=require(`./erc20tokenFunctions.cjs`),o=require(`../../error-handling/logger.cjs`),s=require(`./create-provider.cjs`),c=require(`../../externalABIs/swapAbi.cjs`),l=require(`./ipfs.cjs`);let u=require(`ethers`),d=require(`@solana/web3.js`),f=require(`@solana/spl-token`);var p=async(e,n,r)=>{try{let i=r.erc20TokenAddress,a,o=new u.ethers.Contract(r.erc20TokenAddress,c.ERC20ABI,e);a=i===t.zeroAddress?await e.getBalance(n):await o?.balanceOf(n);let s=a;return s<=0n?null:{token:r,balance:s}}catch{return null}},m=async(e,r)=>{let a=r.nftTokenType===t.TokenType.ERC721,o=new u.ethers.Contract(r.erc20TokenAddress,a?i.ERC721ABI:i.ERC1155ABI,e),{tokenIds:s}=r;if(!s?.length)return null;let c=await Promise.all(s.map(async e=>{try{let t=await o[a?`tokenURI`:`uri`](e),r=t.startsWith(`ipfs://`)?l.getFormattedIpfsUrl(t,!1):t,i=a?r:r.replace(`{id}`,e);if(i){let t=await n.httpClient.get(i);return t?.image?.startsWith(`ipfs://`)&&(t.image=l.getFormattedIpfsUrl(t.image,!1)),{image:t.image,tokenId:Number(e),name:t.name}}return{tokenId:Number(e)}}catch{return{tokenId:Number(e)}}}));return{token:r,balance:s?.length?BigInt(s.length):0n,nfts:c}},h=async(e,t,n)=>{let r=n??a.getErc20TokensForChain(e),i=s.createJsonRpcProvider(e);return(await Promise.all(r.map(async e=>a.isNFTToken(e)?m(i,e):p(i,t,e)))).filter(e=>e!==null)},g=async(e,n,r)=>{try{let i=s.createJsonRpcProvider(e),a=new u.ethers.Contract(r,c.ERC20ABI,i),o;return o=r===t.zeroAddress?await i.getBalance(n):await a?.balanceOf(n),o}catch{return o.Logger.error(`Failed to fetch public balance for address ${n}`),null}},_=async(t,n)=>{try{if(e.isSolanaLike(t)){if(!r.isValidSolanaPublicKey(n))return 0;let{fetchRpcUrl:i}=e.networkRegistry[t];return i?(await new d.Connection(i).getSignaturesForAddress(new d.PublicKey(n))).length:0}return r.isValidSolanaPublicKey(n)?0:await s.createJsonRpcProvider(t).getTransactionCount(n)}catch(e){return o.Logger.error(`Failed to fetch transaction count for address ${n} on chain ${t}`,e),0}},v=async(t,n,r)=>{let i=s.createCustomSolanaConnection(e.networkRegistry[t].fetchRpcUrl??``);return(await Promise.all(r.map(async e=>{if(a.isNFTToken(e))return{token:e,balance:1n,nfts:[{image:e.logoURI,tokenId:0,name:e.symbol}]};if(e.erc20TokenAddress===`11111111111111111111111111111111`)return{token:e,balance:BigInt(await i.getBalance(new d.PublicKey(n)))};let t=await(0,f.getAssociatedTokenAddress)(new d.PublicKey(e.erc20TokenAddress),new d.PublicKey(n),!0,e.is2022Program?f.TOKEN_2022_PROGRAM_ID:f.TOKEN_PROGRAM_ID);if(!await i.getAccountInfo(t))return{token:e,balance:0n};let r=await i.getTokenAccountBalance(t);return{token:e,balance:BigInt(r.value.amount)}}))).filter(e=>e.balance>0n)};exports.getPublicBalance=p,exports.getPublicBalanceByTokenAddress=g,exports.getPublicBalancesOfTokens=h,exports.getPublicTransactionCount=_,exports.getSolanaPublicBalances=v;