@avalabs/evm-module 0.11.14 → 0.12.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
@@ -22,7 +22,7 @@ var vt__default = /*#__PURE__*/_interopDefault(vt);
22
22
  var Pt__default = /*#__PURE__*/_interopDefault(Pt);
23
23
  var wt__default = /*#__PURE__*/_interopDefault(wt);
24
24
 
25
- async function Te({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 xr=process.env.GLACIER_API_KEY,w=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:s,pollingInterval:o=2e3}=t,a=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},Cr(n,xr),new ethers.Network(r,e));return a.pollingInterval=o,a},wr=["glacier-api.avax.network","proxy-api.avax.network"];function Cr(t,e){let r=new URL(t);if(e&&wr.includes(r.hostname)){let n=r.searchParams;return n.set("token",e),r.search=n.toString(),r.toString()}return t}var _e={LOW:1n,MEDIUM:4n,HIGH:6n},Be=500000000n;async function Xe({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:s,proxyApiUrl:o}){let a=await w({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!o)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");let i=await a.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 Nr(o,s),p=new coreUtilsSdk.TokenUnit(l,0,""),m=new coreUtilsSdk.TokenUnit(c,0,""),h=BigInt("1000000000"),u=m.mul(p).add(h).toSubUnit(),f=Be*_e.LOW,g=Be*_e.MEDIUM,E=Be*_e.HIGH;return {baseFee:u,low:{maxFeePerGas:u+f,maxPriorityFeePerGas:f},medium:{maxFeePerGas:u+g,maxPriorityFeePerGas:g},high:{maxFeePerGas:u+E,maxPriorityFeePerGas:E},isFixedFee:!1,displayDecimals:9}}async function Nr(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let s=await n.json();return s[e]??s.default}catch{return 1.5}}function $(t,e,r="tx"){return `${t}/${r}/${e}`}var Qe=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:s})=>{let o=t.from.toLowerCase()===s.toLowerCase(),a=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:m,to:h,gasPrice:u,gasUsed:f,hash:g}=t,E=$(n,g);return {isIncoming:!o,isOutgoing:o,isContractCall:_r(t),timestamp:a,hash:g,isSender:o,from:m,to:h,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:vmModuleTypes.TokenType.NATIVE}],gasUsed:f,gasPrice:u,chainId:r.toString(),txType:p,explorerLink:E}};function _r(t){return t.input!=="0x"}function tt({tx:t,address:e,explorerUrl:r,chainId:n}){let s=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:m,hash:h,tokenDecimal:u,tokenName:f,tokenSymbol:g}=t,E=s?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,b=$(r,h);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:o,hash:h,isSender:s,from:c,to:l,tokens:[{decimal:u,name:f,symbol:g,type:vmModuleTypes.TokenType.ERC20,amount:i}],gasUsed:m,gasPrice:p,chainId:n.toString(),txType:E,explorerLink:b}}var rt=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:s,nextPageToken:o,offset:a})=>{let i=o?JSON.parse(o):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await coreEtherscanSdk.getNormalTxs(s,!t,{page:c,offset:a}):[]).map(g=>Qe({tx:g,chainId:n,networkToken:e,explorerUrl:r,address:s})),m=(l.includes("erc20")?await coreEtherscanSdk.getErc20Txs(s,!t,void 0,{page:c,offset:a}):[]).map(g=>tt({tx:g,address:s,explorerUrl:r,chainId:n})),h=m.map(g=>g.hash),u=p.filter(g=>!h.includes(g.hash)),f={queries:[],page:c+1};return p.length&&f.queries.push("normal"),m.length&&f.queries.push("erc20"),{transactions:[...u,...m],nextPageToken:f.queries.length?JSON.stringify(f):""}};var nt=t=>t===1||t===5||t===4||t===11155111;var st=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s,o)=>{let a=!e&&!r&&!n,i=Fr(t.method?.methodName),c=s.toLowerCase(),l=i.toLowerCase().includes("swap"),p=a&&t.from.address.toLowerCase()===c,m=a&&t.to.address.toLowerCase()===c,h=i==="Market Buy Orders With Eth"||i==="Buy NFT",u=i==="Approve",f=i.toLowerCase().includes("transfer"),g=i.toLowerCase().includes("airdrop"),E=i.toLowerCase().includes("unwrap"),b=i==="Fill Order",T=!!o[0]&&ot(o[0].type)&&o[0].from?.address.toLowerCase()===c,k=!!o[0]&&ot(o[0].type)&&o[0].to?.address.toLowerCase()===c;return l?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:m?vmModuleTypes.TransactionType.RECEIVE:h?vmModuleTypes.TransactionType.NFT_BUY:u?vmModuleTypes.TransactionType.APPROVE:T?vmModuleTypes.TransactionType.NFT_SEND:k?vmModuleTypes.TransactionType.NFT_RECEIVE:f?vmModuleTypes.TransactionType.TRANSFER:g?vmModuleTypes.TransactionType.AIRDROP:E?vmModuleTypes.TransactionType.UNWRAP:b?vmModuleTypes.TransactionType.FILL_ORDER:vmModuleTypes.TransactionType.UNKNOWN};function ot(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Fr=(t="")=>t.includes("(")?Mr__default.default(t.split("(",1)[0]):t;var it=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},s)=>{let o=t===vmModuleTypes.TransactionType.TRANSFER,a=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=a||o&&c.toLowerCase()===s.toLowerCase(),m=i||o&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:p,isIncoming:m,isSender:c===s,from:c,to:l}};async function ct(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Or="https://ipfs.io";function H(t,e=Or){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function Wr(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function lt(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 Wr(H(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var $r="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function pt(t,e="256"){let r=H(t);return `${$r}/width=${e},fit/${r}`}var ut=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s)=>{let o=[];if(t.value!=="0"){let a=s.decimals,c=new coreUtilsSdk.TokenUnit(t.value,s.decimals,s.symbol).toDisplay();o.push({decimal:a.toString(),name:s.name,symbol:s.symbol,amount:c,from:t.from,to:t.to,type:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(a=>{let i=a.erc20Token.decimals,l=new coreUtilsSdk.TokenUnit(a.value,i,a.erc20Token.symbol).toDisplay();o.push({decimal:i.toString(),name:a.erc20Token.name,symbol:a.erc20Token.symbol,amount:l,from:a.from,to:a.to,imageUri:a.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async a=>{let i=a.erc721Token,c=await dt(i.tokenUri,i.metadata.imageUri);o.push({name:a.erc721Token.name,symbol:a.erc721Token.symbol,amount:"1",imageUri:c,from:a.from,to:a.to,collectableTokenId:a.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async a=>{let i=a.erc1155Token,c=await dt(i.tokenUri,i.metadata.imageUri);o.push({name:a.erc1155Token.metadata.name??"",symbol:a.erc1155Token.metadata.symbol??"",amount:a.value,imageUri:c,from:a.from,to:a.to,collectableTokenId:a.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),o},dt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?H(e):e;{let[r,n]=await ct(lt(t));return n?"":r.image?pt(r.image):""}};var gt=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],F=(a=>(a.TOTAL_SUPPLY="totalSupply",a.BALANCE_OF="balanceOf",a.TRANSFER="transfer",a.TRANSFER_FROM="transferFrom",a.APPROVE="approve",a.ALLOWANCE="allowance",a))(F||{});var yt=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:s})=>{let o=await ut(t,r),a=st(t,s,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:m}=it(a,t,s),{blockTimestamp:h,txHash:u,gasPrice:f,gasUsed:g}=t.nativeTransaction,E=$(e,u);return {isContractCall:!gt.includes(a),isIncoming:c,isOutgoing:i,isSender:l,timestamp:h*1e3,hash:u,from:p,to:m,tokens:o,gasPrice:f,gasUsed:g,chainId:n.toString(),txType:a,explorerLink:E}};var ft=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:s,offset:o,glacierService:a})=>{try{let i=await a.listTransactions({chainId:t.toString(),address:n,pageToken:s,pageSize:o});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>yt({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 ht=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:s,nextPageToken:o,offset:a,glacierService:i})=>nt(t)?rt({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:o,offset:a}):i.isHealthy()?ft({networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:o,offset:a,glacierService:i}):{transactions:[],nextPageToken:""};var Tt={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["eip155:*"],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"]}},manifestVersion:"0.0"};var jr=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())}),Yr=zod.z.array(jr).length(1),kt=t=>Yr.safeParse(t);var Et=async({transactionParams:{from:t,to:e,data:r,value:n},provider:s})=>{let o=await s.getTransactionCount(t);return Number(await s.estimateGas({from:t,to:e,nonce:o,data:r,value:n}))};var bt=async({from:t,provider:e})=>e.getTransactionCount(t);var Rt="DUMMY_API_KEY",It=async({proxyApiUrl:t,chainId:e,params:r,domain:n})=>new vt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:Rt}).evm.transaction.scan({account_address:r.from,chain:e.toString(),options:["validation","simulation"],data:{from:r.from,to:r.to,data:r.data,value:r.value,gas:r.gas,gas_price:r.gasPrice},metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}}),St=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:n,domain:s})=>new vt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:Rt}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:r,data:n,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var Ct=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,wt__default.default.abi,r),s=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),o=Pt__default.default(s[0]),a=Pt__default.default(s[1]),i=parseInt(s[2]),c={type:vmModuleTypes.TokenType.ERC20,name:o,chainId:e,symbol:a,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(wt__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 Ee(t){return t.type===vmModuleTypes.TokenType.ERC20}function Nt(t){return typeof t.to=="string"}var Dt=async({request:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:s,provider:o})=>{let a,i,c,l=!1;try{let{validation:p,simulation:m}=await It({proxyApiUrl:s,chainId:n,params:r,domain:e});!p||p.result_type==="Error"||p.result_type==="Warning"?a=ie[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(a=ie[vmModuleTypes.AlertType.DANGER]),m?.status==="Success"&&(l=!0,c=_t(t,m.account_summary.exposures),i=Bt(m.account_summary.assets_diffs));}catch(p){console.error("processTransactionSimulation error",p);}if(!l&&Nt(r)){let p=await Ct(r,n,o);i=p.balanceChange,c=p.tokenApprovals;}return {alert:a,balanceChange:i,tokenApprovals:c,isSimulationSuccessful:l}},_t=(t,e)=>{let r=[];for(let s of e){let o=Ut(s.asset);if(o)for(let[a,i]of Object.entries(s.spenders))if(i.exposure.length===0)r.push({token:o,spenderAddress:a,logoUri:o.logoUri});else for(let c of i.exposure)"raw_value"in c?r.push({token:o,spenderAddress:a,value:c.raw_value,usdPrice:c.usd_price,logoUri:o.logoUri}):r.push({token:o,spenderAddress:a,logoUri:c.logo_url,usdPrice:c.usd_price});}return r.length===0?void 0:{isEditable:r.length===1&&r[0]?.token.type===vmModuleTypes.TokenType.ERC20&&t.method===vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,approvals:r}},Bt=t=>{let e=At(t,"in"),r=At(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},At=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,s="address"in n?Ut(n):en(n);if(!s)return;let o=r[e].map(a=>{let i;if("value"in a&&a.value)if("decimals"in s){let c=coreUtilsSdk.numberToBN(a.value,s.decimals);i=coreUtilsSdk.balanceToDisplayValue(c,s.decimals);}else ethers.isHexString(a.value)&&(i=parseInt(a.value,16).toString());else "type"in s&&s.type===vmModuleTypes.TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:a.usd_price}:void 0}).filter(a=>a!==void 0);return {token:s,items:o}}).filter(r=>r!==void 0),Ut=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},en=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Vt=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:s,proxyApiUrl:o})=>{let a,i,c;try{let{validation:l,simulation:p}=await St({proxyApiUrl:o,chainId:n,accountAddress:r,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?a=ie[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(a=ie[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=_t(t,p.account_summary.exposures),i=Bt(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),a=ie[vmModuleTypes.AlertType.WARNING];}return {alert:a,balanceChange:i,tokenApprovals:c}},ie={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var be=t=>{if(t.data)try{let r=new ethers.Interface(wt__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&nn(n)?n:void 0}catch{return}};function nn(t){return Object.values(F).includes(t)}var Ge=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=ce.exponential()})=>{let s=0,o=0,a;for(;o<r;){o>0&&await an(s);try{let c=await t(o);if(e(c))return c}catch(c){a=c;}s=n(o),o++;}let i=a?`Max retry exceeded. ${a}`:"Max retry exceeded.";throw new Error(i)},ce=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function an(t){return new Promise(e=>setTimeout(e,t))}var Me=t=>Ge({operation:e=>t(e>0),maxRetries:2,backoffPolicy:ce.constant(1),isSuccess:e=>e?.status?.error_code!==429});function Gt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function Fe(t){let e,r=0;for(e=0;e<t.length;e++){let n=Gt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function Y(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 le=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return Y([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,s=new URLSearchParams(n);return Y([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${s}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.SimplePriceResponseSchema)}};var Mt=coreCoingeckoSdk.getBasicCoingeckoHttp(),V,q,J=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,V,void 0);chunkTKL4UUHE_cjs.c(this,q,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(s=>{let o=e[s];n[s]={},r.forEach(a=>{n[s]={[a]:{price:o?.[a],change24:o?.[`${a}_24h_change`],vol24:o?.[`${a}_24h_vol`],marketCap:o?.[`${a}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,V,e),chunkTKL4UUHE_cjs.d(this,q,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,o=`getSimplePrice-${e?`${Fe(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,V)?.get?.(o),n)return n;try{n=await Me(a=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:a}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,V)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let s,a=`getPricesWithMarketDataByAddresses-${`${Fe(e)}-${r}-${n}`}`;if(s=chunkTKL4UUHE_cjs.b(this,V)?.get?.(a),s)return s;try{s=await Me(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch{s=void 0;}return chunkTKL4UUHE_cjs.b(this,V)?.set?.(a,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?new le(chunkTKL4UUHE_cjs.b(this,q)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):coreCoingeckoSdk.simpleTokenPrice(Mt,{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:s=!1,change24:o=!1,lastUpdated:a=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new le(chunkTKL4UUHE_cjs.b(this,q)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:s,include_24hr_change:o,include_last_updated_at:a});return this.transformSimplePriceResponse(l,r)}return coreCoingeckoSdk.simplePrice(Mt,{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:o,lastUpdated:a,shouldThrow:c})}};V=new WeakMap,q=new WeakMap;var yn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",fn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",Ft=zod.object({date:zod.string(),usd:zod.record(zod.number())}),ve=async()=>{try{return await Y([yn],Ft)}catch{return await Y([fn],Ft)}};var Le=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Lt=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),Ie=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Oe=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var We=({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}};function Ot(t,e,r){return new ethers.ethers.Contract(t,wt__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var Se=new Map,Wt=(t,e,r)=>(Se.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s,approvalLimit:o})=>{let a=Se.get(t);if(!a)throw rpcErrors.rpcErrors.resourceNotFound();let{signingData:i,displayData:c}=a,l={...i,data:{...i.data,maxFeePerGas:n??i.data.maxFeePerGas,maxPriorityFeePerGas:s??i.data.maxPriorityFeePerGas}},p={...c};if(typeof o=="string"){if(!o.startsWith("0x"))throw rpcErrors.rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let h=c.tokenApprovals;kn(h),En(i.data.data);let u=h.approvals[0];l.data.data=Ot(u.token.address,u.spenderAddress,o),p.tokenApprovals={approvals:[{...u,value:o}],isEditable:!0};}let m={signingData:l,displayData:p};return Se.set(t,m),m},cleanup:()=>Se.delete(t)});function kn(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 En(t){if((!t||t==="0x"?null:be({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var $t=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{dappInfo:s,params:o}=t,a=kt(o);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a.error}})};let i=a.data[0];if(!i)return {error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a.error}})};let c=await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let A=await Et({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+A.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let A=await bt({from:i.from,provider:c});i.nonce=String(A);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let l=be(i),{alert:p,balanceChange:m,tokenApprovals:h,isSimulationSuccessful:u}=await Dt({request:t,proxyApiUrl:n,chainId:e.chainId,params:i,dAppUrl:t.dappInfo.url,provider:c}),f="Approve Transaction";l==="approve"&&(f="Token Spend Approval");let g=[Lt("Website",s),Ie("From",i.from)];i.to&&g.push(Ie("To",i.to)),l&&g.push(Le("Type",l)),i.data&&g.push(Oe("Data",i.data));let E={title:f,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:g}],networkFeeSelector:!0,alert:p,balanceChange:m,tokenApprovals:h,isSimulationSuccessful:u},b={type:vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId??e.chainId}},{updateTx:T,cleanup:k}=Wt(t.requestId,b,E),x=await r.requestApproval({request:t,displayData:E,signingData:b,updateTx:T});if(k(),"error"in x)return {error:x.error};let se;try{se=await vn(c,x);}catch(A){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:A}})}}return Rn({provider:c,txHash:se,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId}),{result:se}},vn=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]),Rn=async({provider:t,txHash:e,onTransactionConfirmed:r,onTransactionReverted:n,requestId:s})=>{try{(await t.waitForTransaction(e))?.status===1?r(e,s):n(e,s);}catch(o){console.error(o),n(e,s);}};async function Ht(t,e){let r=t.map(async(o,a)=>({index:a,result:await e(o)})),s=(await Promise.allSettled(r)).filter(o=>o.status==="fulfilled").map(o=>o).find(o=>o.value.result);return s?t[s.value.index]:void 0}function K(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function X(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let s=n.value;s.status==="fulfilled"?r[s.id]=s.value:r[s.id]={error:s.reason};}return r},{}))}var I,Z,L,de,xe=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:s}){chunkTKL4UUHE_cjs.c(this,I,void 0);chunkTKL4UUHE_cjs.c(this,Z,void 0);chunkTKL4UUHE_cjs.c(this,L,void 0);chunkTKL4UUHE_cjs.c(this,de,void 0);chunkTKL4UUHE_cjs.d(this,I,e),chunkTKL4UUHE_cjs.d(this,Z,r),chunkTKL4UUHE_cjs.d(this,L,n),chunkTKL4UUHE_cjs.d(this,de,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let s=await w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,I).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,I).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,I).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,I).pricingProviders?.coingecko.nativeTokenId,a=chunkTKL4UUHE_cjs.b(this,I).networkToken,i=new J({storage:chunkTKL4UUHE_cjs.b(this,Z),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),c=o?await i.getSimplePrice({coinIds:[o],currencies:[n]}):{},l=c?.[o??""]?.[n]?.price??void 0,p=c?.[o??""]?.[n]?.marketCap??void 0,m=c?.[o??""]?.[n]?.vol24??void 0,h=c?.[o??""]?.[n]?.change24??void 0,u=await s.getBalance(r),f=new coreUtilsSdk.TokenUnit(u,a.decimals,a.symbol),g=l!==void 0?f.mul(l):void 0;return {...a,coingeckoId:o??"",type:vmModuleTypes.TokenType.NATIVE,balance:u,balanceDisplayValue:f.toDisplay(),balanceInCurrency:g?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:g?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:m,change24:h}}async listErc20Balances({chainId:e,address:r,currency:n}){let s=await w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,I).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,I).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,I).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,I).pricingProviders?.coingecko.assetPlatformId,a=chunkTKL4UUHE_cjs.b(this,I).pricingProviders?.coingecko.nativeTokenId,i=await Te({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),c=i.map(b=>b.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,de)].filter(Ee),p=async b=>{let x=await new ethers.ethers.Contract(b.address,wt__default.default.abi,s).balanceOf?.(r)||0n;return {...b,balance:x}},m=l.map(b=>K(p(b),b.address)),h=await X(m),u=new J({storage:chunkTKL4UUHE_cjs.b(this,Z),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),f=o&&await u.getPricesByAddresses(c,o,n)||{},g=Object.keys(h),E={};for(let b=0;b<g.length;b++){let T=g[b];if(T===void 0)continue;let k=h[T];if(k===void 0||"error"in k){E[T]={error:`rpcService:getTokenWithBalance failed: ${k?.error??"unknown error"}`};continue}let x=f?.[a??""]?.[n]?.price??void 0,se=f?.[a??""]?.[n]?.marketCap??void 0,A=f?.[a??""]?.[n]?.vol24??void 0,Rr=f?.[a??""]?.[n]?.change24??void 0,Je=new coreUtilsSdk.TokenUnit(k.balance,k.decimals,k.symbol),ze=x!==void 0?Je.mul(x):void 0;E[k.address.toLowerCase()]={...k,type:vmModuleTypes.TokenType.ERC20,balance:k.balance,balanceDisplayValue:Je.toDisplay(),balanceInCurrency:ze?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:ze?.toDisplay({fixedDp:2}),priceInCurrency:x,marketCap:se,change24:Rr,vol24:A};}return E}async listNftBalances(){return {}}};I=new WeakMap,Z=new WeakMap,L=new WeakMap,de=new WeakMap;var qt=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:s=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.TokenType.ERC1155],customTokens:o=[],storage:a,balanceServices:i=[]})=>{let c=r.chainId,l=[...i,new xe({network:r,storage:a,proxyApiUrl:n,customTokens:o})],p=await Ht(l,h=>h.isNetworkSupported(r.chainId)),m={};if(p){let h=[],u=[],f=[];t.forEach(T=>{s.includes(vmModuleTypes.TokenType.NATIVE)&&h.push(K(p.getNativeBalance({address:T,currency:e.toUpperCase(),chainId:c}),T)),s.includes(vmModuleTypes.TokenType.ERC20)&&u.push(K(p.listErc20Balances({customTokens:o.filter(Ee),currency:e.toUpperCase(),chainId:c,address:T,pageSize:100}),T)),(s.includes(vmModuleTypes.TokenType.ERC721)||s.includes(vmModuleTypes.TokenType.ERC1155))&&f.push(K(p.listNftBalances({chainId:c,address:T}),T));});let g=await X(h),E=await X(u),b=await X(f);Object.keys(g).forEach(T=>{let k=g[T];if(!k||"error"in k){m[T]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let x=k.symbol;m[T]={[x]:k};}),Object.keys(E).forEach(T=>{let k=E[T];!k||"error"in k&&typeof k.error!="string"?m[T]={...m[T],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[T]={...m[T],error:`listErc20Balances failed: ${k.error}`}:m[T]={...m[T],...k};}),Object.keys(b).forEach(T=>{let k=b[T];!k||"error"in k&&typeof k.error!="string"?m[T]={...m[T],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[T]={...m[T],error:`listNftBalances failed: ${k.error}`}:m[T]={...m[T],...k};});}else t.forEach(h=>{m[h]={error:"unsupported network"};});return m};var Pn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},xn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},zt=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return Pn;case vmModuleTypes.Environment.DEV:return xn}};var Cn="https://ipfs.io";function Kt(t,e=Cn){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var Nn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Xt(t,e="256"){let r=Kt(t);return `${Nn}/width=${e},fit/${r}`}var _=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},we=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}),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),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(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:s}){try{let a=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new coreUtilsSdk.TokenUnit(a.balance,a.decimals,a.symbol),c=a.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:a.name,symbol:a.symbol,decimals:a.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:a.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:s??""}}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listErc721Balances({chainId:e,address:r}){let n,s=[];do try{let o=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...o.erc721TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}while(n);return s}async listErc1155Balances({chainId:e,address:r}){let n,s=[];do try{let o=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...o.erc1155TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}while(n);return s}async listNftBalances({chainId:e,address:r}){let s=(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.map(a=>[`${a.address}-${a.tokenId}`,{address:a.address,description:a.metadata.description??"",logoUri:a.metadata.imageUri??"",logoSmall:Xt(a.metadata.imageUri??""),name:a.metadata.name??"",symbol:a.metadata.symbol??"",tokenId:a.tokenId,tokenUri:a.tokenUri,collectionName:"Unkown",balance:a.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(a.balance):1,balanceDisplayValue:a.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?a.balance:"1",type:a.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:a.metadata.description,lastUpdatedTimestamp:a.metadata.metadataLastUpdatedTimestamp,properties:a.ercType===glacierSdk.Erc721Token.ercType.ERC_721?a.metadata.attributes:a.metadata.properties}}]));return Object.fromEntries(s)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:s}){try{let o=[],a;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:a});o.push(...Bn(i.erc20TokenBalances,Number(e))),a=i.nextPageToken;}while(a);return [..._n(s),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:s})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}},_n=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})),Bn=(t,e)=>t.map(r=>{let n=new coreUtilsSdk.TokenUnit(r.balance,r.decimals,r.symbol),s=n.toDisplay(),o=r.balanceValue?.value.toString(),a=r.price?.value,i=a!==void 0?n.mul(a).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:s,balanceInCurrency:i,priceInCurrency:a,type:vmModuleTypes.TokenType.ERC20}});var $e=t=>{let e="";e+=`Domain
25
+ async function Te({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 xr=process.env.GLACIER_API_KEY,w=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:s,pollingInterval:o=2e3}=t,a=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},Cr(n,xr),new ethers.Network(r,e));return a.pollingInterval=o,a},wr=["glacier-api.avax.network","proxy-api.avax.network"];function Cr(t,e){let r=new URL(t);if(e&&wr.includes(r.hostname)){let n=r.searchParams;return n.set("token",e),r.search=n.toString(),r.toString()}return t}var _e={LOW:1n,MEDIUM:4n,HIGH:6n},Be=500000000n;async function Xe({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:s,proxyApiUrl:o}){let a=await w({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!o)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");let i=await a.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 Nr(o,s),p=new coreUtilsSdk.TokenUnit(l,0,""),m=new coreUtilsSdk.TokenUnit(c,0,""),h=BigInt("1000000000"),u=m.mul(p).add(h).toSubUnit(),f=Be*_e.LOW,g=Be*_e.MEDIUM,E=Be*_e.HIGH;return {baseFee:u,low:{maxFeePerGas:u+f,maxPriorityFeePerGas:f},medium:{maxFeePerGas:u+g,maxPriorityFeePerGas:g},high:{maxFeePerGas:u+E,maxPriorityFeePerGas:E},isFixedFee:!1,displayDecimals:9}}async function Nr(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let s=await n.json();return s[e]??s.default}catch{return 1.5}}function $(t,e,r="tx"){return `${t}/${r}/${e}`}var Qe=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:s})=>{let o=t.from.toLowerCase()===s.toLowerCase(),a=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:m,to:h,gasPrice:u,gasUsed:f,hash:g}=t,E=$(n,g);return {isIncoming:!o,isOutgoing:o,isContractCall:_r(t),timestamp:a,hash:g,isSender:o,from:m,to:h,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:vmModuleTypes.TokenType.NATIVE}],gasUsed:f,gasPrice:u,chainId:r.toString(),txType:p,explorerLink:E}};function _r(t){return t.input!=="0x"}function tt({tx:t,address:e,explorerUrl:r,chainId:n}){let s=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:m,hash:h,tokenDecimal:u,tokenName:f,tokenSymbol:g}=t,E=s?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,b=$(r,h);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:o,hash:h,isSender:s,from:c,to:l,tokens:[{decimal:u,name:f,symbol:g,type:vmModuleTypes.TokenType.ERC20,amount:i}],gasUsed:m,gasPrice:p,chainId:n.toString(),txType:E,explorerLink:b}}var rt=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:s,nextPageToken:o,offset:a})=>{let i=o?JSON.parse(o):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await coreEtherscanSdk.getNormalTxs(s,!t,{page:c,offset:a}):[]).map(g=>Qe({tx:g,chainId:n,networkToken:e,explorerUrl:r,address:s})),m=(l.includes("erc20")?await coreEtherscanSdk.getErc20Txs(s,!t,void 0,{page:c,offset:a}):[]).map(g=>tt({tx:g,address:s,explorerUrl:r,chainId:n})),h=m.map(g=>g.hash),u=p.filter(g=>!h.includes(g.hash)),f={queries:[],page:c+1};return p.length&&f.queries.push("normal"),m.length&&f.queries.push("erc20"),{transactions:[...u,...m],nextPageToken:f.queries.length?JSON.stringify(f):""}};var nt=t=>t===1||t===5||t===4||t===11155111;var st=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s,o)=>{let a=!e&&!r&&!n,i=Fr(t.method?.methodName),c=s.toLowerCase(),l=i.toLowerCase().includes("swap"),p=a&&t.from.address.toLowerCase()===c,m=a&&t.to.address.toLowerCase()===c,h=i==="Market Buy Orders With Eth"||i==="Buy NFT",u=i==="Approve",f=i.toLowerCase().includes("transfer"),g=i.toLowerCase().includes("airdrop"),E=i.toLowerCase().includes("unwrap"),b=i==="Fill Order",T=!!o[0]&&ot(o[0].type)&&o[0].from?.address.toLowerCase()===c,k=!!o[0]&&ot(o[0].type)&&o[0].to?.address.toLowerCase()===c;return l?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:m?vmModuleTypes.TransactionType.RECEIVE:h?vmModuleTypes.TransactionType.NFT_BUY:u?vmModuleTypes.TransactionType.APPROVE:T?vmModuleTypes.TransactionType.NFT_SEND:k?vmModuleTypes.TransactionType.NFT_RECEIVE:f?vmModuleTypes.TransactionType.TRANSFER:g?vmModuleTypes.TransactionType.AIRDROP:E?vmModuleTypes.TransactionType.UNWRAP:b?vmModuleTypes.TransactionType.FILL_ORDER:vmModuleTypes.TransactionType.UNKNOWN};function ot(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Fr=(t="")=>t.includes("(")?Mr__default.default(t.split("(",1)[0]):t;var it=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},s)=>{let o=t===vmModuleTypes.TransactionType.TRANSFER,a=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=a||o&&c.toLowerCase()===s.toLowerCase(),m=i||o&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:p,isIncoming:m,isSender:c===s,from:c,to:l}};async function ct(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Or="https://ipfs.io";function H(t,e=Or){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function Wr(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function lt(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 Wr(H(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var $r="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function pt(t,e="256"){let r=H(t);return `${$r}/width=${e},fit/${r}`}var ut=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s)=>{let o=[];if(t.value!=="0"){let a=s.decimals,c=new coreUtilsSdk.TokenUnit(t.value,s.decimals,s.symbol).toDisplay();o.push({decimal:a.toString(),name:s.name,symbol:s.symbol,amount:c,from:t.from,to:t.to,type:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(a=>{let i=a.erc20Token.decimals,l=new coreUtilsSdk.TokenUnit(a.value,i,a.erc20Token.symbol).toDisplay();o.push({decimal:i.toString(),name:a.erc20Token.name,symbol:a.erc20Token.symbol,amount:l,from:a.from,to:a.to,imageUri:a.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async a=>{let i=a.erc721Token,c=await dt(i.tokenUri,i.metadata.imageUri);o.push({name:a.erc721Token.name,symbol:a.erc721Token.symbol,amount:"1",imageUri:c,from:a.from,to:a.to,collectableTokenId:a.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async a=>{let i=a.erc1155Token,c=await dt(i.tokenUri,i.metadata.imageUri);o.push({name:a.erc1155Token.metadata.name??"",symbol:a.erc1155Token.metadata.symbol??"",amount:a.value,imageUri:c,from:a.from,to:a.to,collectableTokenId:a.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),o},dt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?H(e):e;{let[r,n]=await ct(lt(t));return n?"":r.image?pt(r.image):""}};var gt=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],F=(a=>(a.TOTAL_SUPPLY="totalSupply",a.BALANCE_OF="balanceOf",a.TRANSFER="transfer",a.TRANSFER_FROM="transferFrom",a.APPROVE="approve",a.ALLOWANCE="allowance",a))(F||{});var yt=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:s})=>{let o=await ut(t,r),a=st(t,s,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:m}=it(a,t,s),{blockTimestamp:h,txHash:u,gasPrice:f,gasUsed:g}=t.nativeTransaction,E=$(e,u);return {isContractCall:!gt.includes(a),isIncoming:c,isOutgoing:i,isSender:l,timestamp:h*1e3,hash:u,from:p,to:m,tokens:o,gasPrice:f,gasUsed:g,chainId:n.toString(),txType:a,explorerLink:E}};var ft=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:s,offset:o,glacierService:a})=>{try{let i=await a.listTransactions({chainId:t.toString(),address:n,pageToken:s,pageSize:o});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>yt({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 ht=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:s,nextPageToken:o,offset:a,glacierService:i})=>nt(t)?rt({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:o,offset:a}):i.isHealthy()?ft({networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:o,offset:a,glacierService:i}):{transactions:[],nextPageToken:""};var Tt={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_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"]}},manifestVersion:"0.0"};var jr=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())}),Yr=zod.z.array(jr).length(1),kt=t=>Yr.safeParse(t);var Et=async({transactionParams:{from:t,to:e,data:r,value:n},provider:s})=>{let o=await s.getTransactionCount(t);return Number(await s.estimateGas({from:t,to:e,nonce:o,data:r,value:n}))};var bt=async({from:t,provider:e})=>e.getTransactionCount(t);var Rt="DUMMY_API_KEY",It=async({proxyApiUrl:t,chainId:e,params:r,domain:n})=>new vt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:Rt}).evm.transaction.scan({account_address:r.from,chain:e.toString(),options:["validation","simulation"],data:{from:r.from,to:r.to,data:r.data,value:r.value,gas:r.gas,gas_price:r.gasPrice},metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}}),St=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:n,domain:s})=>new vt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:Rt}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:r,data:n,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var Ct=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,wt__default.default.abi,r),s=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),o=Pt__default.default(s[0]),a=Pt__default.default(s[1]),i=parseInt(s[2]),c={type:vmModuleTypes.TokenType.ERC20,name:o,chainId:e,symbol:a,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(wt__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 Ee(t){return t.type===vmModuleTypes.TokenType.ERC20}function Nt(t){return typeof t.to=="string"}var Dt=async({request:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:s,provider:o})=>{let a,i,c,l=!1;try{let{validation:p,simulation:m}=await It({proxyApiUrl:s,chainId:n,params:r,domain:e});!p||p.result_type==="Error"||p.result_type==="Warning"?a=ie[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(a=ie[vmModuleTypes.AlertType.DANGER]),m?.status==="Success"&&(l=!0,c=_t(t,m.account_summary.exposures),i=Bt(m.account_summary.assets_diffs));}catch(p){console.error("processTransactionSimulation error",p);}if(!l&&Nt(r)){let p=await Ct(r,n,o);i=p.balanceChange,c=p.tokenApprovals;}return {alert:a,balanceChange:i,tokenApprovals:c,isSimulationSuccessful:l}},_t=(t,e)=>{let r=[];for(let s of e){let o=Ut(s.asset);if(o)for(let[a,i]of Object.entries(s.spenders))if(i.exposure.length===0)r.push({token:o,spenderAddress:a,logoUri:o.logoUri});else for(let c of i.exposure)"raw_value"in c?r.push({token:o,spenderAddress:a,value:c.raw_value,usdPrice:c.usd_price,logoUri:o.logoUri}):r.push({token:o,spenderAddress:a,logoUri:c.logo_url,usdPrice:c.usd_price});}return r.length===0?void 0:{isEditable:r.length===1&&r[0]?.token.type===vmModuleTypes.TokenType.ERC20&&t.method===vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,approvals:r}},Bt=t=>{let e=At(t,"in"),r=At(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},At=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,s="address"in n?Ut(n):en(n);if(!s)return;let o=r[e].map(a=>{let i;if("value"in a&&a.value)if("decimals"in s){let c=coreUtilsSdk.numberToBN(a.value,s.decimals);i=coreUtilsSdk.balanceToDisplayValue(c,s.decimals);}else ethers.isHexString(a.value)&&(i=parseInt(a.value,16).toString());else "type"in s&&s.type===vmModuleTypes.TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:a.usd_price}:void 0}).filter(a=>a!==void 0);return {token:s,items:o}}).filter(r=>r!==void 0),Ut=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},en=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Vt=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:s,proxyApiUrl:o})=>{let a,i,c;try{let{validation:l,simulation:p}=await St({proxyApiUrl:o,chainId:n,accountAddress:r,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?a=ie[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(a=ie[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=_t(t,p.account_summary.exposures),i=Bt(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),a=ie[vmModuleTypes.AlertType.WARNING];}return {alert:a,balanceChange:i,tokenApprovals:c}},ie={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var be=t=>{if(t.data)try{let r=new ethers.Interface(wt__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&nn(n)?n:void 0}catch{return}};function nn(t){return Object.values(F).includes(t)}var Ge=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=ce.exponential()})=>{let s=0,o=0,a;for(;o<r;){o>0&&await an(s);try{let c=await t(o);if(e(c))return c}catch(c){a=c;}s=n(o),o++;}let i=a?`Max retry exceeded. ${a}`:"Max retry exceeded.";throw new Error(i)},ce=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function an(t){return new Promise(e=>setTimeout(e,t))}var Me=t=>Ge({operation:e=>t(e>0),maxRetries:2,backoffPolicy:ce.constant(1),isSuccess:e=>e?.status?.error_code!==429});function Gt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function Fe(t){let e,r=0;for(e=0;e<t.length;e++){let n=Gt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function Y(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 le=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return Y([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,s=new URLSearchParams(n);return Y([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${s}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.SimplePriceResponseSchema)}};var Mt=coreCoingeckoSdk.getBasicCoingeckoHttp(),V,q,J=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,V,void 0);chunkTKL4UUHE_cjs.c(this,q,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(s=>{let o=e[s];n[s]={},r.forEach(a=>{n[s]={[a]:{price:o?.[a],change24:o?.[`${a}_24h_change`],vol24:o?.[`${a}_24h_vol`],marketCap:o?.[`${a}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,V,e),chunkTKL4UUHE_cjs.d(this,q,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,o=`getSimplePrice-${e?`${Fe(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,V)?.get?.(o),n)return n;try{n=await Me(a=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:a}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,V)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let s,a=`getPricesWithMarketDataByAddresses-${`${Fe(e)}-${r}-${n}`}`;if(s=chunkTKL4UUHE_cjs.b(this,V)?.get?.(a),s)return s;try{s=await Me(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch{s=void 0;}return chunkTKL4UUHE_cjs.b(this,V)?.set?.(a,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?new le(chunkTKL4UUHE_cjs.b(this,q)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):coreCoingeckoSdk.simpleTokenPrice(Mt,{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:s=!1,change24:o=!1,lastUpdated:a=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new le(chunkTKL4UUHE_cjs.b(this,q)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:s,include_24hr_change:o,include_last_updated_at:a});return this.transformSimplePriceResponse(l,r)}return coreCoingeckoSdk.simplePrice(Mt,{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:o,lastUpdated:a,shouldThrow:c})}};V=new WeakMap,q=new WeakMap;var yn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",fn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",Ft=zod.object({date:zod.string(),usd:zod.record(zod.number())}),ve=async()=>{try{return await Y([yn],Ft)}catch{return await Y([fn],Ft)}};var Le=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Lt=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),Ie=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Oe=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var We=({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}};function Ot(t,e,r){return new ethers.ethers.Contract(t,wt__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var Se=new Map,Wt=(t,e,r)=>(Se.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s,approvalLimit:o})=>{let a=Se.get(t);if(!a)throw rpcErrors.rpcErrors.resourceNotFound();let{signingData:i,displayData:c}=a,l={...i,data:{...i.data,maxFeePerGas:n??i.data.maxFeePerGas,maxPriorityFeePerGas:s??i.data.maxPriorityFeePerGas}},p={...c};if(typeof o=="string"){if(!o.startsWith("0x"))throw rpcErrors.rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let h=c.tokenApprovals;kn(h),En(i.data.data);let u=h.approvals[0];l.data.data=Ot(u.token.address,u.spenderAddress,o),p.tokenApprovals={approvals:[{...u,value:o}],isEditable:!0};}let m={signingData:l,displayData:p};return Se.set(t,m),m},cleanup:()=>Se.delete(t)});function kn(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 En(t){if((!t||t==="0x"?null:be({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var $t=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{dappInfo:s,params:o}=t,a=kt(o);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a.error}})};let i=a.data[0];if(!i)return {error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a.error}})};let c=await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let A=await Et({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+A.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let A=await bt({from:i.from,provider:c});i.nonce=String(A);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let l=be(i),{alert:p,balanceChange:m,tokenApprovals:h,isSimulationSuccessful:u}=await Dt({request:t,proxyApiUrl:n,chainId:e.chainId,params:i,dAppUrl:t.dappInfo.url,provider:c}),f="Approve Transaction";l==="approve"&&(f="Token Spend Approval");let g=[Lt("Website",s),Ie("From",i.from)];i.to&&g.push(Ie("To",i.to)),l&&g.push(Le("Type",l)),i.data&&g.push(Oe("Data",i.data));let E={title:f,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:g}],networkFeeSelector:!0,alert:p,balanceChange:m,tokenApprovals:h,isSimulationSuccessful:u},b={type:vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId??e.chainId}},{updateTx:T,cleanup:k}=Wt(t.requestId,b,E),x=await r.requestApproval({request:t,displayData:E,signingData:b,updateTx:T});if(k(),"error"in x)return {error:x.error};let se;try{se=await vn(c,x);}catch(A){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:A}})}}return Rn({provider:c,txHash:se,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId}),{result:se}},vn=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]),Rn=async({provider:t,txHash:e,onTransactionConfirmed:r,onTransactionReverted:n,requestId:s})=>{try{(await t.waitForTransaction(e))?.status===1?r(e,s):n(e,s);}catch(o){console.error(o),n(e,s);}};async function Ht(t,e){let r=t.map(async(o,a)=>({index:a,result:await e(o)})),s=(await Promise.allSettled(r)).filter(o=>o.status==="fulfilled").map(o=>o).find(o=>o.value.result);return s?t[s.value.index]:void 0}function K(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function X(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let s=n.value;s.status==="fulfilled"?r[s.id]=s.value:r[s.id]={error:s.reason};}return r},{}))}var I,Z,L,de,xe=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:s}){chunkTKL4UUHE_cjs.c(this,I,void 0);chunkTKL4UUHE_cjs.c(this,Z,void 0);chunkTKL4UUHE_cjs.c(this,L,void 0);chunkTKL4UUHE_cjs.c(this,de,void 0);chunkTKL4UUHE_cjs.d(this,I,e),chunkTKL4UUHE_cjs.d(this,Z,r),chunkTKL4UUHE_cjs.d(this,L,n),chunkTKL4UUHE_cjs.d(this,de,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let s=await w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,I).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,I).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,I).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,I).pricingProviders?.coingecko.nativeTokenId,a=chunkTKL4UUHE_cjs.b(this,I).networkToken,i=new J({storage:chunkTKL4UUHE_cjs.b(this,Z),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),c=o?await i.getSimplePrice({coinIds:[o],currencies:[n]}):{},l=c?.[o??""]?.[n]?.price??void 0,p=c?.[o??""]?.[n]?.marketCap??void 0,m=c?.[o??""]?.[n]?.vol24??void 0,h=c?.[o??""]?.[n]?.change24??void 0,u=await s.getBalance(r),f=new coreUtilsSdk.TokenUnit(u,a.decimals,a.symbol),g=l!==void 0?f.mul(l):void 0;return {...a,coingeckoId:o??"",type:vmModuleTypes.TokenType.NATIVE,balance:u,balanceDisplayValue:f.toDisplay(),balanceInCurrency:g?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:g?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:m,change24:h}}async listErc20Balances({chainId:e,address:r,currency:n}){let s=await w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,I).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,I).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,I).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,I).pricingProviders?.coingecko.assetPlatformId,a=chunkTKL4UUHE_cjs.b(this,I).pricingProviders?.coingecko.nativeTokenId,i=await Te({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),c=i.map(b=>b.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,de)].filter(Ee),p=async b=>{let x=await new ethers.ethers.Contract(b.address,wt__default.default.abi,s).balanceOf?.(r)||0n;return {...b,balance:x}},m=l.map(b=>K(p(b),b.address)),h=await X(m),u=new J({storage:chunkTKL4UUHE_cjs.b(this,Z),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),f=o&&await u.getPricesByAddresses(c,o,n)||{},g=Object.keys(h),E={};for(let b=0;b<g.length;b++){let T=g[b];if(T===void 0)continue;let k=h[T];if(k===void 0||"error"in k){E[T]={error:`rpcService:getTokenWithBalance failed: ${k?.error??"unknown error"}`};continue}let x=f?.[a??""]?.[n]?.price??void 0,se=f?.[a??""]?.[n]?.marketCap??void 0,A=f?.[a??""]?.[n]?.vol24??void 0,Rr=f?.[a??""]?.[n]?.change24??void 0,Je=new coreUtilsSdk.TokenUnit(k.balance,k.decimals,k.symbol),ze=x!==void 0?Je.mul(x):void 0;E[k.address.toLowerCase()]={...k,type:vmModuleTypes.TokenType.ERC20,balance:k.balance,balanceDisplayValue:Je.toDisplay(),balanceInCurrency:ze?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:ze?.toDisplay({fixedDp:2}),priceInCurrency:x,marketCap:se,change24:Rr,vol24:A};}return E}async listNftBalances(){return {}}};I=new WeakMap,Z=new WeakMap,L=new WeakMap,de=new WeakMap;var qt=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:s=[vmModuleTypes.TokenType.NATIVE,vmModuleTypes.TokenType.ERC20,vmModuleTypes.TokenType.ERC721,vmModuleTypes.TokenType.ERC1155],customTokens:o=[],storage:a,balanceServices:i=[]})=>{let c=r.chainId,l=[...i,new xe({network:r,storage:a,proxyApiUrl:n,customTokens:o})],p=await Ht(l,h=>h.isNetworkSupported(r.chainId)),m={};if(p){let h=[],u=[],f=[];t.forEach(T=>{s.includes(vmModuleTypes.TokenType.NATIVE)&&h.push(K(p.getNativeBalance({address:T,currency:e.toUpperCase(),chainId:c}),T)),s.includes(vmModuleTypes.TokenType.ERC20)&&u.push(K(p.listErc20Balances({customTokens:o.filter(Ee),currency:e.toUpperCase(),chainId:c,address:T,pageSize:100}),T)),(s.includes(vmModuleTypes.TokenType.ERC721)||s.includes(vmModuleTypes.TokenType.ERC1155))&&f.push(K(p.listNftBalances({chainId:c,address:T}),T));});let g=await X(h),E=await X(u),b=await X(f);Object.keys(g).forEach(T=>{let k=g[T];if(!k||"error"in k){m[T]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let x=k.symbol;m[T]={[x]:k};}),Object.keys(E).forEach(T=>{let k=E[T];!k||"error"in k&&typeof k.error!="string"?m[T]={...m[T],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[T]={...m[T],error:`listErc20Balances failed: ${k.error}`}:m[T]={...m[T],...k};}),Object.keys(b).forEach(T=>{let k=b[T];!k||"error"in k&&typeof k.error!="string"?m[T]={...m[T],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[T]={...m[T],error:`listNftBalances failed: ${k.error}`}:m[T]={...m[T],...k};});}else t.forEach(h=>{m[h]={error:"unsupported network"};});return m};var Pn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},xn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},zt=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return Pn;case vmModuleTypes.Environment.DEV:return xn}};var Cn="https://ipfs.io";function Kt(t,e=Cn){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var Nn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Xt(t,e="256"){let r=Kt(t);return `${Nn}/width=${e},fit/${r}`}var _=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},we=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}),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),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(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:s}){try{let a=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new coreUtilsSdk.TokenUnit(a.balance,a.decimals,a.symbol),c=a.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:a.name,symbol:a.symbol,decimals:a.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:a.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:s??""}}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listErc721Balances({chainId:e,address:r}){let n,s=[];do try{let o=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...o.erc721TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}while(n);return s}async listErc1155Balances({chainId:e,address:r}){let n,s=[];do try{let o=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...o.erc1155TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}while(n);return s}async listNftBalances({chainId:e,address:r}){let s=(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.map(a=>[`${a.address}-${a.tokenId}`,{address:a.address,description:a.metadata.description??"",logoUri:a.metadata.imageUri??"",logoSmall:Xt(a.metadata.imageUri??""),name:a.metadata.name??"",symbol:a.metadata.symbol??"",tokenId:a.tokenId,tokenUri:a.tokenUri,collectionName:"Unkown",balance:a.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(a.balance):1,balanceDisplayValue:a.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?a.balance:"1",type:a.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:a.metadata.description,lastUpdatedTimestamp:a.metadata.metadataLastUpdatedTimestamp,properties:a.ercType===glacierSdk.Erc721Token.ercType.ERC_721?a.metadata.attributes:a.metadata.properties}}]));return Object.fromEntries(s)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:s}){try{let o=[],a;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:a});o.push(...Bn(i.erc20TokenBalances,Number(e))),a=i.nextPageToken;}while(a);return [..._n(s),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:s})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}},_n=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})),Bn=(t,e)=>t.map(r=>{let n=new coreUtilsSdk.TokenUnit(r.balance,r.decimals,r.symbol),s=n.toDisplay(),o=r.balanceValue?.value.toString(),a=r.price?.value,i=a!==void 0?n.mul(a).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:s,balanceInCurrency:i,priceInCurrency:a,type:vmModuleTypes.TokenType.ERC20}});var $e=t=>{let e="";e+=`Domain
26
26
  `;for(let r in t.domain)e+=` ${r}: ${O(String(t.domain[r]))}
27
27
  `;e+=`
28
28
  Message