@avalabs/evm-module 3.0.0 → 3.0.1
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 +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -23,7 +23,7 @@ var lr__default = /*#__PURE__*/_interopDefault(lr);
|
|
|
23
23
|
var ro__default = /*#__PURE__*/_interopDefault(ro);
|
|
24
24
|
var ir__default = /*#__PURE__*/_interopDefault(ir);
|
|
25
25
|
|
|
26
|
-
async function Be({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 he=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=V.exponential()})=>{let a=0,o=0,s;for(;o<r;){o>0&&await dn(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)},V=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 dn(t){return new Promise(e=>setTimeout(e,t))}var it=t=>he({operation:e=>t(e>0),maxRetries:2,backoffPolicy:V.constant(1),isSuccess:e=>e?.status?.error_code!==429});function xt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ct(t){let e,r=0;for(e=0;e<t.length;e++){let n=xt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function _(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 Te=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return _([`${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 _([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var un=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())})),Ne=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return _([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],un)}};var At=coreCoingeckoSdk.getBasicCoingeckoHttp(),M,Y,H=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,M,void 0);chunkTKL4UUHE_cjs.c(this,Y,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,M,e),chunkTKL4UUHE_cjs.d(this,Y,r);}async getWatchlistDataForToken({tokenDetails:e,currency:r=coreCoingeckoSdk.VsCurrencyType.USD}){let a=(await new Ne(chunkTKL4UUHE_cjs.b(this,Y)).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?`${ct(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,M)?.get?.(o),n)return n;try{n=await it(s=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,M)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let a,s=`getPricesWithMarketDataByAddresses-${`${ct(e)}-${r}-${n}`}`;if(a=chunkTKL4UUHE_cjs.b(this,M)?.get?.(s),a)return a;try{a=await it(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return chunkTKL4UUHE_cjs.b(this,M)?.set?.(s,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let o=await new Te(chunkTKL4UUHE_cjs.b(this,Y)).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(At,{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 Te(chunkTKL4UUHE_cjs.b(this,Y)).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(At,{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:o,lastUpdated:s,shouldThrow:c})}};M=new WeakMap,Y=new WeakMap;var vn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",bn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",wt=zod.object({date:zod.string(),usd:zod.record(zod.number())}),_e=async()=>{try{return await _([vn],wt)}catch{return await _([bn],wt)}};var lt=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Ue=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),te=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Ge=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.NETWORK,value:e});var pt=({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 Ct=process.env.GLACIER_API_KEY;var ke=()=>Ct;var Rn={rltoken:ke()},Ee=class extends glacierSdk.FetchHttpRequest{constructor(e){super(e);}request(e){let r={...Rn,...e.query||{}},n={...e,query:Object.keys(r).length>0?r:void 0};return super.request(n)}};var w=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:o=2e3}=t,s=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:a},An(n),new ethers.Network(r,e));return s.pollingInterval=o,s},In=["glacier-api.avax.network","proxy-api.avax.network"];function An(t){let e=new URL(t),r=ke();if(r&&In.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}var dt={LOW:1n,MEDIUM:4n,HIGH:6n},ut=500000000n,wn=t=>t===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||t===coreChainsSdk.ChainId.AVALANCHE_MAINNET_ID;async function _t({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:o}){let s=await w({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!o)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");if(wn(t))try{let E=await Cn(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 Bn(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=ut*dt.LOW,h=ut*dt.MEDIUM,v=ut*dt.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 Cn(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 Bn(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 Ut=({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:Dn(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 Dn(t){return t.input!=="0x"}function Ft({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}=t,v=a?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,E=$(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}],gasUsed:d,gasPrice:p,chainId:n.toString(),txType:v,explorerLink:E}}var Lt=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=>Ut({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=>Ft({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 Vt=t=>t===1||t===5||t===4||t===11155111;var $t=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,o)=>{let s=!e&&!r&&!n,i=Mn(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",B=!!o[0]&&Ht(o[0].type)&&o[0].from?.address.toLowerCase()===c,g=!!o[0]&&Ht(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:B?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 Ht(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Mn=(t="")=>t.includes("(")?Vn__default.default(t.split("(",1)[0]):t;var Ot=(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 Wt(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var $n="https://ipfs.io";function ne(t,e=$n){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function On(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function qt(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 On(ne(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var Wn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function jt(t,e="256"){let r=ne(t);return `${Wn}/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(),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 Yt(i.tokenUri,i.metadata.imageUri);o.push({name:s.erc721Token.name,symbol:s.erc721Token.symbol,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 Yt(i.tokenUri,i.metadata.imageUri);o.push({name:s.erc1155Token.metadata.name??"",symbol:s.erc1155Token.metadata.symbol??"",amount:s.value,imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),o},Yt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?ne(e):e;{let[r,n]=await Wt(qt(t));return n?"":r.image?jt(r.image):""}};var Kt=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],z=(s=>(s.TOTAL_SUPPLY="totalSupply",s.BALANCE_OF="balanceOf",s.TRANSFER="transfer",s.TRANSFER_FROM="transferFrom",s.APPROVE="approve",s.ALLOWANCE="allowance",s))(z||{});var Xt=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let o=await zt(t,r),s=$t(t,a,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:d}=Ot(s,t,a),{blockTimestamp:m,txHash:u,gasPrice:y,gasUsed:h}=t.nativeTransaction,v=$(e,u);return {isContractCall:!Kt.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 Zt=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=>Xt({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 Qt=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:a,nextPageToken:o,offset:s,glacierService:i})=>Vt(t)?Lt({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:o,offset:s}):i.isHealthy()?Zt({networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:o,offset:s,glacierService:i}):{transactions:[],nextPageToken:""};var er={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 Le=async({from:t,provider:e})=>e.getTransactionCount(t);var Ve=t=>{if(t.data)try{let r=new ethers.Interface(lr__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Yn(n)?n:void 0}catch{return}};function Yn(t){return Object.values(z).includes(t)}function tr(t,e,r){return new ethers.ethers.Contract(t,lr__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var Me=new Map,rr=(t,e,r)=>(Me.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:o,gasLimit:s})=>{let i=Me.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;Xn(u),Zn(c.data.data);let y=u.approvals[0];p.data.data=tr(y.token.address,y.spenderAddress,o),d.tokenApprovals={approvals:[{...y,value:o}],isEditable:!0};}let m={signingData:p,displayData:d};return Me.set(t,m),m},cleanup:()=>Me.delete(t)});function Xn(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 Zn(t){if((!t||t==="0x"?null:Ve({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var nr=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 $e=(t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:o,alert:s})=>{let{dappInfo:i}=t,c=Ve(r),l="Do you approve this transaction?";c==="approve"&&(l="Do you approve this spend limit?");let p=[Ue("Website",i),te("Account",r.from)];r.to&&p.push(te("Contract",r.to)),p.push(Ge("Network",{name:e.chainName,logoUri:e.logoUri}));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 ar=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}})},or=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}}),sr=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 pr=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,lr__default.default.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),o=ir__default.default(a[0]),s=ir__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(lr__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 K(t){return !("type"in t)}function Oe(t){return t.type===vmModuleTypes.TokenType.ERC20}function mr(t){return typeof t.to=="string"}function dr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function na(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function aa(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function gt(t){return na(t)?t.ins.length===0&&t.outs.length===0:aa(t)?t.approvals.length===0:!1}var O={[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 has been flagged as malicious, I understand the risk.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var fr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:o})=>{let s;try{s=await or({chainId:n,params:r,domain:e,blockaid:o});}catch(i){console.error("simulateTransaction error",i);}return ht({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:s})},ht=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=O[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(o=O[vmModuleTypes.AlertType.DANGER]),d?.status==="Success"&&(c=!0,i=yr(t,d.account_summary),s=gr(d.account_summary.assets_diffs)),m?.status==="Success"&&(l=Number(m.estimate));}if(!c&&mr(e)){let p=await pr(e,r,n);s=p.balanceChange,i=p.tokenApprovals;}return {alert:o,balanceChange:s,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},pa=t=>t.trace_type==="ExposureTrace",ma=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,da=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>pa(r)?{[ma(r.spender,r.asset.address)]:r}:e,{}),yr=(t,e)=>{let{traces:r}=e,n=da(r),a=Object.entries(n).map(([s,i])=>{let c=hr(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}},gr=t=>{let e=ur(t,"in"),r=ur(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},ur=(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?hr(n):ua(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),hr=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},ua=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Tr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:o})=>{let s,i,c;try{let{validation:l,simulation:p}=await sr({chainId:n,accountAddress:r,data:a,domain:e,blockaid:o});!l||l.result_type==="Error"||l.result_type==="Warning"?s=O[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(s=O[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=yr(t.method,p.account_summary),i=gr(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),s=O[vmModuleTypes.AlertType.WARNING];}return {alert:s,balanceChange:i,tokenApprovals:c}};var oe=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 ya=zod.z.tuple([oe]),kr=t=>ya.safeParse(t);var qe=async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:o,request:s})=>{try{n({txHash:r,request:s});let c=(await he({operation:async()=>e.getTransactionReceipt(r),isSuccess:p=>!!p,backoffPolicy:V.linearThenExponential(4,1e3),maxRetries:20}))?.status===1,l=$(t,r);if(c)return a({txHash:r,explorerLink:l,request:s}),!0}catch(i){console.error(i);}return o({txHash:r,request:s}),!1};var je=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]);var Er=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:o,error:s,success:i}=kr(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 w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!c.gas||Number(c.gas)<0)try{let E=await nr({transactionParams:{from:c.from,to:c.to,data:c.data,value:c.value,accessList:c.accessList},provider:l});c.gas="0x"+E.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!c.nonce)try{let E=await Le({from:c.from,provider:l});c.nonce=String(E);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let p=await fr({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l,blockaid:n}),{displayData:d,signingData:m}=$e(t,e,c,p),{updateTx:u,cleanup:y}=rr(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;try{v=await je(l,h);}catch(E){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:E}})}}return qe({explorerUrl:e.explorerUrl??"",provider:l,txHash:v,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:v}};async function vr(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 se(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function ie(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 A,ce,X,be,Ye=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:a}){chunkTKL4UUHE_cjs.c(this,A,void 0);chunkTKL4UUHE_cjs.c(this,ce,void 0);chunkTKL4UUHE_cjs.c(this,X,void 0);chunkTKL4UUHE_cjs.c(this,be,void 0);chunkTKL4UUHE_cjs.d(this,A,e),chunkTKL4UUHE_cjs.d(this,ce,r),chunkTKL4UUHE_cjs.d(this,X,n),chunkTKL4UUHE_cjs.d(this,be,a);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,A).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,A).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,A).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.nativeTokenId,s=chunkTKL4UUHE_cjs.b(this,A).networkToken,i=new H({storage:chunkTKL4UUHE_cjs.b(this,ce),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,X)}),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 w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,A).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,A).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,A).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.assetPlatformId,s=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.nativeTokenId,i=await Be({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,X)}),c=i.map(E=>E.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,be)].filter(Oe),p=async E=>{let k=await new ethers.ethers.Contract(E.address,lr__default.default.abi,a).balanceOf?.(r)||0n;return {...E,balance:k}},d=l.map(E=>se(p(E),E.address)),m=await ie(d),u=new H({storage:chunkTKL4UUHE_cjs.b(this,ce),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,X)}),y=o&&await u.getPricesByAddresses(c,o,n)||{},h=Object.keys(m),v={};for(let E=0;E<h.length;E++){let B=h[E];if(B===void 0)continue;let g=m[B];if(g===void 0||"error"in g){v[B]={error:`rpcService:getTokenWithBalance failed: ${g?.error??"unknown error"}`};continue}let k=y?.[s??""]?.[n]?.price??void 0,N=y?.[s??""]?.[n]?.marketCap??void 0,x=y?.[s??""]?.[n]?.vol24??void 0,st=y?.[s??""]?.[n]?.change24??void 0,Ce=new coreUtilsSdk.TokenUnit(g.balance,g.decimals,g.symbol),ye=k!==void 0?Ce.mul(k):void 0;v[g.address.toLowerCase()]={...g,type:vmModuleTypes.TokenType.ERC20,balance:g.balance,balanceDisplayValue:Ce.toDisplay(),balanceInCurrency:ye?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:ye?.toDisplay({fixedDp:2}),priceInCurrency:k,marketCap:N,change24:st,vol24:x,reputation:null};}return v}async listNftBalances(){return {}}};A=new WeakMap,ce=new WeakMap,X=new WeakMap,be=new WeakMap;var Rr=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 vr(p,u=>u.isNetworkSupported(r.chainId)),m={};if(d){let u=[],y=[],h=[];t.forEach(g=>{a.includes(vmModuleTypes.TokenType.NATIVE)&&u.push(se(d.getNativeBalance({address:g,currency:e.toUpperCase(),chainId:l}).then(async k=>{if(k.symbol==="AVAX"){let N=await c.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...k,priceInCurrency:N.priceInCurrency,marketCap:N.marketCap,vol24:N.vol24,change24:N.change24}}return k}),g)),a.includes(vmModuleTypes.TokenType.ERC20)&&y.push(se(d.listErc20Balances({customTokens:o.filter(Oe),currency:e.toUpperCase(),chainId:l,address:g,pageSize:100}),g)),(a.includes(vmModuleTypes.TokenType.ERC721)||a.includes(vmModuleTypes.TokenType.ERC1155))&&h.push(se(d.listNftBalances({chainId:l,address:g}),g));});let v=await ie(u),E=await ie(y),B=await ie(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 N=k.symbol;m[g]={[N]: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(B).forEach(g=>{let k=B[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 Ta={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},ka={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},xr=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return Ta;case vmModuleTypes.Environment.DEV:return ka}};var Ir="DUMMY_API_KEY";var va="https://ipfs.io";function Ar(t,e=va){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var ba="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function ze(t,e="256"){let r=Ar(t);return `${ba}/width=${e},fit/${r}`}var G=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},xa=[coreChainsSdk.ChainId.ETHEREUM_HOMESTEAD],Ke=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},Ee),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=>!xa.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 G&&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 G&&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 G&&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 G&&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 G&&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:ze(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(...Aa(i.erc20TokenBalances,Number(e))),s=i.nextPageToken;}while(s);return [...Ia(a),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(o){throw o instanceof G&&this.setGlacierToUnhealthy(),o}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:a}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:a})}catch(o){throw o instanceof G&&this.setGlacierToUnhealthy(),o}}},Ia=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})),Aa=(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 kt=t=>{let e="";e+=`Domain
|
|
26
|
+
async function Be({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 he=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=V.exponential()})=>{let a=0,o=0,s;for(;o<r;){o>0&&await dn(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)},V=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 dn(t){return new Promise(e=>setTimeout(e,t))}var it=t=>he({operation:e=>t(e>0),maxRetries:2,backoffPolicy:V.constant(1),isSuccess:e=>e?.status?.error_code!==429});function xt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ct(t){let e,r=0;for(e=0;e<t.length;e++){let n=xt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function _(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 Te=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return _([`${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 _([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var un=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())})),Ne=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return _([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],un)}};var At=coreCoingeckoSdk.getBasicCoingeckoHttp(),M,Y,H=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,M,void 0);chunkTKL4UUHE_cjs.c(this,Y,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,M,e),chunkTKL4UUHE_cjs.d(this,Y,r);}async getWatchlistDataForToken({tokenDetails:e,currency:r=coreCoingeckoSdk.VsCurrencyType.USD}){let a=(await new Ne(chunkTKL4UUHE_cjs.b(this,Y)).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?`${ct(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,M)?.get?.(o),n)return n;try{n=await it(s=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,M)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let a,s=`getPricesWithMarketDataByAddresses-${`${ct(e)}-${r}-${n}`}`;if(a=chunkTKL4UUHE_cjs.b(this,M)?.get?.(s),a)return a;try{a=await it(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return chunkTKL4UUHE_cjs.b(this,M)?.set?.(s,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let o=await new Te(chunkTKL4UUHE_cjs.b(this,Y)).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(At,{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 Te(chunkTKL4UUHE_cjs.b(this,Y)).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(At,{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:o,lastUpdated:s,shouldThrow:c})}};M=new WeakMap,Y=new WeakMap;var vn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",bn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",wt=zod.object({date:zod.string(),usd:zod.record(zod.number())}),_e=async()=>{try{return await _([vn],wt)}catch{return await _([bn],wt)}};var lt=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Ue=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),te=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Ge=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.NETWORK,value:e});var pt=({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 Ct=process.env.GLACIER_API_KEY;var ke=()=>Ct;var Rn={rltoken:ke()},Ee=class extends glacierSdk.FetchHttpRequest{constructor(e){super(e);}request(e){let r={...Rn,...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},An(n),new ethers.Network(r,e));return s.pollingInterval=o,s},In=["glacier-api.avax.network","proxy-api.avax.network"];function An(t){let e=new URL(t),r=ke();if(r&&In.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}var dt={LOW:1n,MEDIUM:4n,HIGH:6n},ut=500000000n,wn=t=>t===coreChainsSdk.ChainId.AVALANCHE_TESTNET_ID||t===coreChainsSdk.ChainId.AVALANCHE_MAINNET_ID;async function _t({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(wn(t))try{let E=await Cn(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 Bn(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=ut*dt.LOW,h=ut*dt.MEDIUM,v=ut*dt.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 Cn(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 Bn(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 Ut=({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:Dn(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 Dn(t){return t.input!=="0x"}function Ft({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,w=$(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:w}}var Lt=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=>Ut({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=>Ft({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 Vt=t=>t===1||t===5||t===4||t===11155111;var $t=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,o)=>{let s=!e&&!r&&!n,i=Mn(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",w=!!o[0]&&Ht(o[0].type)&&o[0].from?.address.toLowerCase()===c,g=!!o[0]&&Ht(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:w?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 Ht(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Mn=(t="")=>t.includes("(")?Vn__default.default(t.split("(",1)[0]):t;var Ot=(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 Wt(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var $n="https://ipfs.io";function ne(t,e=$n){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function On(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function qt(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 On(ne(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var Wn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function jt(t,e="256"){let r=ne(t);return `${Wn}/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 Yt(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 Yt(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},Yt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?ne(e):e;{let[r,n]=await Wt(qt(t));return n?"":r.image?jt(r.image):""}};var Kt=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],z=(s=>(s.TOTAL_SUPPLY="totalSupply",s.BALANCE_OF="balanceOf",s.TRANSFER="transfer",s.TRANSFER_FROM="transferFrom",s.APPROVE="approve",s.ALLOWANCE="allowance",s))(z||{});var Xt=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let o=await zt(t,r),s=$t(t,a,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:d}=Ot(s,t,a),{blockTimestamp:m,txHash:u,gasPrice:y,gasUsed:h}=t.nativeTransaction,v=$(e,u);return {isContractCall:!Kt.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 Zt=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=>Xt({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 Qt=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:a,nextPageToken:o,offset:s,glacierService:i})=>Vt(t)?Lt({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:o,offset:s}):i.isHealthy()?Zt({networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:o,offset:s,glacierService:i}):{transactions:[],nextPageToken:""};var er={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 Le=async({from:t,provider:e})=>e.getTransactionCount(t);var Ve=t=>{if(t.data)try{let r=new ethers.Interface(lr__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Yn(n)?n:void 0}catch{return}};function Yn(t){return Object.values(z).includes(t)}function tr(t,e,r){return new ethers.ethers.Contract(t,lr__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var Me=new Map,rr=(t,e,r)=>(Me.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:o,gasLimit:s})=>{let i=Me.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;Xn(u),Zn(c.data.data);let y=u.approvals[0];p.data.data=tr(y.token.address,y.spenderAddress,o),d.tokenApprovals={approvals:[{...y,value:o}],isEditable:!0};}let m={signingData:p,displayData:d};return Me.set(t,m),m},cleanup:()=>Me.delete(t)});function Xn(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 Zn(t){if((!t||t==="0x"?null:Ve({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var nr=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 $e=(t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:o,alert:s})=>{let{dappInfo:i}=t,c=Ve(r),l="Do you approve this transaction?";c==="approve"&&(l="Do you approve this spend limit?");let p=[Ue("Website",i),te("Account",r.from)];r.to&&p.push(te("Contract",r.to)),p.push(Ge("Network",{name:e.chainName,logoUri:e.logoUri}));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 ar=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}})},or=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}}),sr=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 pr=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,lr__default.default.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),o=ir__default.default(a[0]),s=ir__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(lr__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 K(t){return !("type"in t)}function Oe(t){return t.type===vmModuleTypes.TokenType.ERC20}function mr(t){return typeof t.to=="string"}function dr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function na(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function aa(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function gt(t){return na(t)?t.ins.length===0&&t.outs.length===0:aa(t)?t.approvals.length===0:!1}var O={[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 has been flagged as malicious, I understand the risk.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var fr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:o})=>{let s;try{s=await or({chainId:n,params:r,domain:e,blockaid:o});}catch(i){console.error("simulateTransaction error",i);}return ht({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:s})},ht=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=O[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(o=O[vmModuleTypes.AlertType.DANGER]),d?.status==="Success"&&(c=!0,i=yr(t,d.account_summary),s=gr(d.account_summary.assets_diffs)),m?.status==="Success"&&(l=Number(m.estimate));}if(!c&&mr(e)){let p=await pr(e,r,n);s=p.balanceChange,i=p.tokenApprovals;}return {alert:o,balanceChange:s,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},pa=t=>t.trace_type==="ExposureTrace",ma=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,da=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>pa(r)?{[ma(r.spender,r.asset.address)]:r}:e,{}),yr=(t,e)=>{let{traces:r}=e,n=da(r),a=Object.entries(n).map(([s,i])=>{let c=hr(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}},gr=t=>{let e=ur(t,"in"),r=ur(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},ur=(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?hr(n):ua(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),hr=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},ua=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Tr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:o})=>{let s,i,c;try{let{validation:l,simulation:p}=await sr({chainId:n,accountAddress:r,data:a,domain:e,blockaid:o});!l||l.result_type==="Error"||l.result_type==="Warning"?s=O[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(s=O[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=yr(t.method,p.account_summary),i=gr(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),s=O[vmModuleTypes.AlertType.WARNING];}return {alert:s,balanceChange:i,tokenApprovals:c}};var oe=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 ya=zod.z.tuple([oe]),kr=t=>ya.safeParse(t);var qe=async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:o,request:s})=>{try{n({txHash:r,request:s});let c=(await he({operation:async()=>e.getTransactionReceipt(r),isSuccess:p=>!!p,backoffPolicy:V.linearThenExponential(4,1e3),maxRetries:20}))?.status===1,l=$(t,r);if(c)return a({txHash:r,explorerLink:l,request:s}),!0}catch(i){console.error(i);}return o({txHash:r,request:s}),!1};var je=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]);var Er=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:o,error:s,success:i}=kr(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 E=await nr({transactionParams:{from:c.from,to:c.to,data:c.data,value:c.value,accessList:c.accessList},provider:l});c.gas="0x"+E.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!c.nonce)try{let E=await Le({from:c.from,provider:l});c.nonce=String(E);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let p=await fr({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l,blockaid:n}),{displayData:d,signingData:m}=$e(t,e,c,p),{updateTx:u,cleanup:y}=rr(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;try{v=await je(l,h);}catch(E){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:E}})}}return qe({explorerUrl:e.explorerUrl??"",provider:l,txHash:v,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:v}};async function vr(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 se(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function ie(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 A,ce,X,be,Ye=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:a}){chunkTKL4UUHE_cjs.c(this,A,void 0);chunkTKL4UUHE_cjs.c(this,ce,void 0);chunkTKL4UUHE_cjs.c(this,X,void 0);chunkTKL4UUHE_cjs.c(this,be,void 0);chunkTKL4UUHE_cjs.d(this,A,e),chunkTKL4UUHE_cjs.d(this,ce,r),chunkTKL4UUHE_cjs.d(this,X,n),chunkTKL4UUHE_cjs.d(this,be,a);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await C({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,A).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,A).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,A).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.nativeTokenId,s=chunkTKL4UUHE_cjs.b(this,A).networkToken,i=new H({storage:chunkTKL4UUHE_cjs.b(this,ce),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,X)}),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,A).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,A).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,A).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.assetPlatformId,s=chunkTKL4UUHE_cjs.b(this,A).pricingProviders?.coingecko.nativeTokenId,i=await Be({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,X)}),c=i.map(E=>E.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,be)].filter(Oe),p=async E=>{let k=await new ethers.ethers.Contract(E.address,lr__default.default.abi,a).balanceOf?.(r)||0n;return {...E,balance:k}},d=l.map(E=>se(p(E),E.address)),m=await ie(d),u=new H({storage:chunkTKL4UUHE_cjs.b(this,ce),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,X)}),y=o&&await u.getPricesByAddresses(c,o,n)||{},h=Object.keys(m),v={};for(let E=0;E<h.length;E++){let w=h[E];if(w===void 0)continue;let g=m[w];if(g===void 0||"error"in g){v[w]={error:`rpcService:getTokenWithBalance failed: ${g?.error??"unknown error"}`};continue}let k=y?.[s??""]?.[n]?.price??void 0,N=y?.[s??""]?.[n]?.marketCap??void 0,x=y?.[s??""]?.[n]?.vol24??void 0,st=y?.[s??""]?.[n]?.change24??void 0,Ce=new coreUtilsSdk.TokenUnit(g.balance,g.decimals,g.symbol),ye=k!==void 0?Ce.mul(k):void 0;v[g.address.toLowerCase()]={...g,type:vmModuleTypes.TokenType.ERC20,balance:g.balance,balanceDisplayValue:Ce.toDisplay(),balanceInCurrency:ye?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:ye?.toDisplay({fixedDp:2}),priceInCurrency:k,marketCap:N,change24:st,vol24:x,reputation:null};}return v}async listNftBalances(){return {}}};A=new WeakMap,ce=new WeakMap,X=new WeakMap,be=new WeakMap;var Rr=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 vr(p,u=>u.isNetworkSupported(r.chainId)),m={};if(d){let u=[],y=[],h=[];t.forEach(g=>{a.includes(vmModuleTypes.TokenType.NATIVE)&&u.push(se(d.getNativeBalance({address:g,currency:e.toUpperCase(),chainId:l}).then(async k=>{if(k.symbol==="AVAX"){let N=await c.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...k,priceInCurrency:N.priceInCurrency,marketCap:N.marketCap,vol24:N.vol24,change24:N.change24}}return k}),g)),a.includes(vmModuleTypes.TokenType.ERC20)&&y.push(se(d.listErc20Balances({customTokens:o.filter(Oe),currency:e.toUpperCase(),chainId:l,address:g,pageSize:100}),g)),(a.includes(vmModuleTypes.TokenType.ERC721)||a.includes(vmModuleTypes.TokenType.ERC1155))&&h.push(se(d.listNftBalances({chainId:l,address:g}),g));});let v=await ie(u),E=await ie(y),w=await ie(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 N=k.symbol;m[g]={[N]: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(w).forEach(g=>{let k=w[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 Ta={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},ka={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},xr=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return Ta;case vmModuleTypes.Environment.DEV:return ka}};var Ir="DUMMY_API_KEY";var va="https://ipfs.io";function Ar(t,e=va){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var ba="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function ze(t,e="256"){let r=Ar(t);return `${ba}/width=${e},fit/${r}`}var G=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},xa=[coreChainsSdk.ChainId.ETHEREUM_HOMESTEAD],Ke=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},Ee),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=>!xa.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 G&&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 G&&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 G&&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 G&&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 G&&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:ze(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(...Aa(i.erc20TokenBalances,Number(e))),s=i.nextPageToken;}while(s);return [...Ia(a),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(o){throw o instanceof G&&this.setGlacierToUnhealthy(),o}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:a}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:a})}catch(o){throw o instanceof G&&this.setGlacierToUnhealthy(),o}}},Ia=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})),Aa=(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 kt=t=>{let e="";e+=`Domain
|
|
27
27
|
`;for(let r in t.domain)e+=` ${r}: ${Z(String(t.domain[r]))}
|
|
28
28
|
`;e+=`
|
|
29
29
|
Message
|
|
@@ -40,7 +40,7 @@ Message
|
|
|
40
40
|
`;return e},Br=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
41
41
|
`,e+=`${Z(String(r.value))}
|
|
42
42
|
|
|
43
|
-
`;}),e},Z=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 Re=zod.z.string().describe("message"),D=zod.z.string().describe("address");var _r=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([D,Re])});var Dr=zod.z.object({name:zod.z.string(),type:zod.z.string()}),le=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(Dr)}).catchall(zod.z.array(Dr)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),vt=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(),bt=le.or(vt),Ur=zod.z.union([zod.z.string().describe("data string"),le]),Gr=zod.z.union([zod.z.string().describe("data string"),bt]),Fr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([D,Gr])}),Lr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([D,Gr])}),Vr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([D,Ur])}),Mr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([D,Ur])});var Hr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([Re,D]),zod.z.tuple([Re,D,zod.z.string().optional().describe("password")])])});var Ba=zod.z.discriminatedUnion("method",[Hr,_r,Fr,Lr,Vr,Mr]).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:bt.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:le.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 $r(t){return Ba.safeParse(t)}var Or=t=>vt.safeParse(t).success,Nl=t=>le.safeParse(t).success;var Wr=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 qr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=$r({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=Wr(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=Or(s)?Br(s):kt(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=kt(E);}if(!l||!p)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let m=await Tr({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:[lt("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 jr=async(t,e)=>{try{return {result:await(await w({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 Yr=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 Ze=({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 Zr=async t=>{let{secretId:e,approvalController:r}=t,n=zr(t)?Ze(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[vmModuleTypes.NetworkVMType.EVM]:ethers.computeAddress(`0x${a}`)}};var de,Qe=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.c(this,de,[]);}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,de).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,de,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.b(this,de)}async getNftList({address:e,chainId:r}){return _([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],Wa)}};de=new WeakMap;var $a=zod.z.object({id:zod.z.union([zod.z.custom(ethers.isHexString),zod.z.string()]),chain:zod.z.string(),name:zod.z.string()}),Oa=$a.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()})),Wa=zod.z.array(Oa);var U,ue,tt,nt,en,rt=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,ue);chunkTKL4UUHE_cjs.c(this,nt);chunkTKL4UUHE_cjs.c(this,U,void 0);chunkTKL4UUHE_cjs.d(this,U,new Qe(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,U).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,ue,tt).call(this,e),s=a.native_token_id,i=await chunkTKL4UUHE_cjs.b(this,U).getTokenBalance({address:r,chainId:o,tokenId:s}),c=new coreUtilsSdk.TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),d=(await _e()).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,ue,tt).call(this,e),s=await chunkTKL4UUHE_cjs.b(this,U).getTokensBalanceOnChain({chainId:o,address:r}),i=await _e(),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,ue,tt).call(this,e),a=await chunkTKL4UUHE_cjs.b(this,U).getNftList({chainId:n,address:r});return chunkTKL4UUHE_cjs.e(this,nt,en).call(this,a,e)}};U=new WeakMap,ue=new WeakSet,tt=async function(e){let n=(await chunkTKL4UUHE_cjs.b(this,U).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,U).getChainInfo({chainId:n});if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},nt=new WeakSet,en=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:ze(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 Ja=zod.z.tuple([oe,oe]).rest(oe).refine(t=>St(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>St(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>za(t,"nonce")||Ya(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'});function Ya(t,e){return !St(t,e)}function za(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function St(t,e){return new Set(t.map(n=>n[e])).size===1}var tn=t=>Ja.safeParse(t);var rn=async(t,e)=>{if(t[0].nonce)return;let r=await Le({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))};var at=new Map,nn=(t,e,r)=>(at.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},o)=>{let s=at.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 at.set(t,l),l},cleanup:()=>at.delete(t)});var on=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:o,blockaid:s})=>{let i;try{i=await ar({chainId:n,params:r,domain:e,withGasEstimation:o,blockaid:s});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:O[vmModuleTypes.AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,y)=>{let h=r[y],v=await ht({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=Xa(c),d=Qa(c),m=Za(c);return {isSimulationSuccessful:l,alert:p,balanceChange:d,tokenApprovals:m,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},Xa=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)},Za=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 eo(e,t),gt(e)?void 0:e},Qa=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let o=an(r.ins,a);o?o.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let o=an(r.outs,a);o?o.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return gt(e)?void 0:e},an=(t,e)=>t.find(r=>K(r.token)&&K(e.token)?r.token.symbol===e.token.symbol:!K(r.token)&&!K(e.token)?r.token.address===e.token.address:!1),eo=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(o=>!K(o.token)&&!K(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 sn=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:o,success:s,error:i}=tn(a);if(!s)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let c=await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await rn(o,c);}catch(x){return console.error("Unable to calculate nonce",x),{error:rpcErrors.rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:x}})}}let l=o.every(x=>Number(x.gas)>0),{alert:p,balanceChange:d,isSimulationSuccessful:m,tokenApprovals:u,scans:y}=await on({rpcMethod:t.method,chainId:e.chainId,params:o,dAppUrl:t.dappInfo.url,provider:c,populateMissingGas:!l,blockaid:n});if(!y.every(({transaction:x})=>Number(x.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 v={title:"Do you approve these transactions?",details:[{title:"Transaction Details",items:[Ue("Website",t.dappInfo),te("Account",o[0].from),Ge("Network",{name:e.chainName,logoUri:e.logoUri})]}],isSimulationSuccessful:m,balanceChange:d,alert:p,tokenApprovals:u,networkFeeSelector:!0},E=y.map(x=>$e(t,e,x.transaction,x)),{cleanup:B,updateTx:g}=nn(t.requestId,E,v),k=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:g});if(B(),"error"in k)return {error:k.error};if(k.result.length!==o.length)return {error:rpcErrors.rpcErrors.internal({message:`Invalid number of signatures. Expected ${o.length}, got ${k.result.length}`})};let N=[];for(let[x,st]of k.result.entries()){let Ce=x===k.result.length-1,ye=await je(c,st),pn=qe({explorerUrl:e.explorerUrl??"",provider:c,txHash:ye,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t});if(!Ce&&!await pn)return {error:rpcErrors.rpcErrors.internal({message:`Transaction ${x+1} failed! Batch execution stopped`})};N.push(ye);}return {result:N}};var fe,we,J,F,Q,ln=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){chunkTKL4UUHE_cjs.c(this,fe,void 0);chunkTKL4UUHE_cjs.c(this,we,void 0);chunkTKL4UUHE_cjs.c(this,J,void 0);chunkTKL4UUHE_cjs.c(this,F,void 0);chunkTKL4UUHE_cjs.c(this,Q,void 0);let{glacierApiUrl:o,proxyApiUrl:s}=xr(r);chunkTKL4UUHE_cjs.d(this,fe,new Ke({glacierApiUrl:o,headers:pt(n)})),chunkTKL4UUHE_cjs.d(this,we,new rt({proxyApiUrl:s})),chunkTKL4UUHE_cjs.d(this,J,s),chunkTKL4UUHE_cjs.d(this,F,e),chunkTKL4UUHE_cjs.d(this,Q,new ro__default.default({baseURL:s+"/proxy/blockaid/",apiKey:Ir,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Yr({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return Ze(e)}deriveAddress(e){return Zr({...e,approvalController:chunkTKL4UUHE_cjs.b(this,F)})}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 Rr({addresses:e,currency:n,network:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J),customTokens:a,balanceServices:[chunkTKL4UUHE_cjs.b(this,fe),chunkTKL4UUHE_cjs.b(this,we)],storage:o,tokenTypes:s,tokenService:i})}getManifest(){let e=vmModuleTypes.parseManifest(er);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:o,caipId:s}=e;return _t({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 Qt({chainId:s,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:a,offset:o,glacierService:chunkTKL4UUHE_cjs.b(this,fe)})}getTokens(e){let{chainId:r}=e;return Be({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return Er({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),blockaid:chunkTKL4UUHE_cjs.b(this,Q)});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return dr(chunkTKL4UUHE_cjs.b(this,F))?sn({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),blockaid:chunkTKL4UUHE_cjs.b(this,Q)}):{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 qr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),blockaid:chunkTKL4UUHE_cjs.b(this,Q)});default:return no(e.method)?jr(e,r):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};fe=new WeakMap,we=new WeakMap,J=new WeakMap,F=new WeakMap,Q=new WeakMap;var no=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
43
|
+
`;}),e},Z=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 Re=zod.z.string().describe("message"),D=zod.z.string().describe("address");var _r=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([D,Re])});var Dr=zod.z.object({name:zod.z.string(),type:zod.z.string()}),le=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(Dr)}).catchall(zod.z.array(Dr)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),vt=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(),bt=le.or(vt),Ur=zod.z.union([zod.z.string().describe("data string"),le]),Gr=zod.z.union([zod.z.string().describe("data string"),bt]),Fr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([D,Gr])}),Lr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([D,Gr])}),Vr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([D,Ur])}),Mr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([D,Ur])});var Hr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([Re,D]),zod.z.tuple([Re,D,zod.z.string().optional().describe("password")])])});var Ba=zod.z.discriminatedUnion("method",[Hr,_r,Fr,Lr,Vr,Mr]).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:bt.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:le.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 $r(t){return Ba.safeParse(t)}var Or=t=>vt.safeParse(t).success,Nl=t=>le.safeParse(t).success;var Wr=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 qr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=$r({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=Wr(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=Or(s)?Br(s):kt(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=kt(E);}if(!l||!p)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let m=await Tr({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:[lt("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 jr=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 Yr=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 Ze=({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 Zr=async t=>{let{secretId:e,approvalController:r}=t,n=zr(t)?Ze(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[vmModuleTypes.NetworkVMType.EVM]:ethers.computeAddress(`0x${a}`)}};var de,Qe=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.c(this,de,[]);}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,de).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,de,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.b(this,de)}async getNftList({address:e,chainId:r}){return _([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],Wa)}};de=new WeakMap;var $a=zod.z.object({id:zod.z.union([zod.z.custom(ethers.isHexString),zod.z.string()]),chain:zod.z.string(),name:zod.z.string()}),Oa=$a.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()})),Wa=zod.z.array(Oa);var U,ue,tt,nt,en,rt=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,ue);chunkTKL4UUHE_cjs.c(this,nt);chunkTKL4UUHE_cjs.c(this,U,void 0);chunkTKL4UUHE_cjs.d(this,U,new Qe(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,U).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,ue,tt).call(this,e),s=a.native_token_id,i=await chunkTKL4UUHE_cjs.b(this,U).getTokenBalance({address:r,chainId:o,tokenId:s}),c=new coreUtilsSdk.TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),d=(await _e()).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,ue,tt).call(this,e),s=await chunkTKL4UUHE_cjs.b(this,U).getTokensBalanceOnChain({chainId:o,address:r}),i=await _e(),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,ue,tt).call(this,e),a=await chunkTKL4UUHE_cjs.b(this,U).getNftList({chainId:n,address:r});return chunkTKL4UUHE_cjs.e(this,nt,en).call(this,a,e)}};U=new WeakMap,ue=new WeakSet,tt=async function(e){let n=(await chunkTKL4UUHE_cjs.b(this,U).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,U).getChainInfo({chainId:n});if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},nt=new WeakSet,en=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:ze(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 Ja=zod.z.tuple([oe,oe]).rest(oe).refine(t=>St(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>St(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>za(t,"nonce")||Ya(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'});function Ya(t,e){return !St(t,e)}function za(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function St(t,e){return new Set(t.map(n=>n[e])).size===1}var tn=t=>Ja.safeParse(t);var rn=async(t,e)=>{if(t[0].nonce)return;let r=await Le({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))};var at=new Map,nn=(t,e,r)=>(at.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},o)=>{let s=at.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 at.set(t,l),l},cleanup:()=>at.delete(t)});var on=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:o,blockaid:s})=>{let i;try{i=await ar({chainId:n,params:r,domain:e,withGasEstimation:o,blockaid:s});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:O[vmModuleTypes.AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,y)=>{let h=r[y],v=await ht({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=Xa(c),d=Qa(c),m=Za(c);return {isSimulationSuccessful:l,alert:p,balanceChange:d,tokenApprovals:m,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},Xa=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)},Za=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 eo(e,t),gt(e)?void 0:e},Qa=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let o=an(r.ins,a);o?o.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let o=an(r.outs,a);o?o.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return gt(e)?void 0:e},an=(t,e)=>t.find(r=>K(r.token)&&K(e.token)?r.token.symbol===e.token.symbol:!K(r.token)&&!K(e.token)?r.token.address===e.token.address:!1),eo=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(o=>!K(o.token)&&!K(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 sn=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:o,success:s,error:i}=tn(a);if(!s)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let c=await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await rn(o,c);}catch(x){return console.error("Unable to calculate nonce",x),{error:rpcErrors.rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:x}})}}let l=o.every(x=>Number(x.gas)>0),{alert:p,balanceChange:d,isSimulationSuccessful:m,tokenApprovals:u,scans:y}=await on({rpcMethod:t.method,chainId:e.chainId,params:o,dAppUrl:t.dappInfo.url,provider:c,populateMissingGas:!l,blockaid:n});if(!y.every(({transaction:x})=>Number(x.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 v={title:"Do you approve these transactions?",details:[{title:"Transaction Details",items:[Ue("Website",t.dappInfo),te("Account",o[0].from),Ge("Network",{name:e.chainName,logoUri:e.logoUri})]}],isSimulationSuccessful:m,balanceChange:d,alert:p,tokenApprovals:u,networkFeeSelector:!0},E=y.map(x=>$e(t,e,x.transaction,x)),{cleanup:w,updateTx:g}=nn(t.requestId,E,v),k=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:g});if(w(),"error"in k)return {error:k.error};if(k.result.length!==o.length)return {error:rpcErrors.rpcErrors.internal({message:`Invalid number of signatures. Expected ${o.length}, got ${k.result.length}`})};let N=[];for(let[x,st]of k.result.entries()){let Ce=x===k.result.length-1,ye=await je(c,st),pn=qe({explorerUrl:e.explorerUrl??"",provider:c,txHash:ye,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t});if(!Ce&&!await pn)return {error:rpcErrors.rpcErrors.internal({message:`Transaction ${x+1} failed! Batch execution stopped`})};N.push(ye);}return {result:N}};var fe,we,J,F,Q,ln=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){chunkTKL4UUHE_cjs.c(this,fe,void 0);chunkTKL4UUHE_cjs.c(this,we,void 0);chunkTKL4UUHE_cjs.c(this,J,void 0);chunkTKL4UUHE_cjs.c(this,F,void 0);chunkTKL4UUHE_cjs.c(this,Q,void 0);let{glacierApiUrl:o,proxyApiUrl:s}=xr(r);chunkTKL4UUHE_cjs.d(this,fe,new Ke({glacierApiUrl:o,headers:pt(n)})),chunkTKL4UUHE_cjs.d(this,we,new rt({proxyApiUrl:s})),chunkTKL4UUHE_cjs.d(this,J,s),chunkTKL4UUHE_cjs.d(this,F,e),chunkTKL4UUHE_cjs.d(this,Q,new ro__default.default({baseURL:s+"/proxy/blockaid/",apiKey:Ir,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 Yr({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return Ze(e)}deriveAddress(e){return Zr({...e,approvalController:chunkTKL4UUHE_cjs.b(this,F)})}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 Rr({addresses:e,currency:n,network:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J),customTokens:a,balanceServices:[chunkTKL4UUHE_cjs.b(this,fe),chunkTKL4UUHE_cjs.b(this,we)],storage:o,tokenTypes:s,tokenService:i})}getManifest(){let e=vmModuleTypes.parseManifest(er);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:o,caipId:s}=e;return _t({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 Qt({chainId:s,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:a,offset:o,glacierService:chunkTKL4UUHE_cjs.b(this,fe)})}getTokens(e){let{chainId:r}=e;return Be({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,J)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return Er({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),blockaid:chunkTKL4UUHE_cjs.b(this,Q)});case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION_BATCH:return dr(chunkTKL4UUHE_cjs.b(this,F))?sn({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),blockaid:chunkTKL4UUHE_cjs.b(this,Q)}):{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 qr({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,F),blockaid:chunkTKL4UUHE_cjs.b(this,Q)});default:return no(e.method)?jr(e,r):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};fe=new WeakMap,we=new WeakMap,J=new WeakMap,F=new WeakMap,Q=new WeakMap;var no=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
44
44
|
|
|
45
45
|
exports.ERC20TransactionType = z;
|
|
46
46
|
exports.EvmModule = ln;
|