require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../data-structures/http/HttpClient.cjs`);require(`../../data-structures/http/index.cjs`);const n=require(`../../externalABIs/index.cjs`),r=require(`../utils/create-provider.cjs`);require(`../utils/index.cjs`);let i=require(`ethers`);var a={[e.chainIds.base]:`base`,[e.chainIds.optimism]:`optimism`,[e.chainIds.arbMainnet]:`arbitrum`,[e.chainIds.polygon]:`polygon`,[e.chainIds.ethMainnet]:`eth`},o=async(e,o)=>{let s=`https://${a[e]}.blockscout.com/api?module=token&action=getTokenHolders&contractaddress=${o}&page=0&offset=10`,{result:c}=await t.httpClient.get(s),l=r.createJsonRpcProvider(e),u=new i.ethers.Contract(o,n.ERC20ABI,l);for(let{address:e}of c){let t=await u.balanceOf(e);if(BigInt(t)!==0n)return e}},s=async(e,n)=>{let r=`https://api.routescan.io/v2/network/mainnet/evm/${e}/etherscan/api?module=token&action=tokenholderlist&contractaddress=${n}&page=1&offset=10&apikey=YourApiKeyToken`,{result:i}=await t.httpClient.get(r);return i.at(0)?.TokenHolderAddress},c=async(e,t)=>{try{if(!(e in a))throw Error(`Chain is not supported by blockscout`);let n=await o(e,t);if(!n||!i.ethers.isAddress(n))throw Error(`Token holder not found in blockscout`);return n}catch{return await s(e,t)}};exports.getTokenHolder=c;