@avalabs/evm-module 0.7.3 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -7,42 +7,46 @@ var coreWalletsSdk = require('@avalabs/core-wallets-sdk');
7
7
  var ethers = require('ethers');
8
8
  var coreUtilsSdk = require('@avalabs/core-utils-sdk');
9
9
  var coreEtherscanSdk = require('@avalabs/core-etherscan-sdk');
10
- var wr = require('lodash.startcase');
10
+ var Vr = require('lodash.startcase');
11
11
  var zod = require('zod');
12
- var yt = require('@blockaid/client');
12
+ var bt = require('@blockaid/client');
13
+ var Rt = require('xss');
14
+ var xt = require('@openzeppelin/contracts/build/contracts/ERC20.json');
13
15
  var coreCoingeckoSdk = require('@avalabs/core-coingecko-sdk');
14
16
  var glacierSdk = require('@avalabs/glacier-sdk');
15
17
 
16
18
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
19
 
18
- var wr__default = /*#__PURE__*/_interopDefault(wr);
19
- var yt__default = /*#__PURE__*/_interopDefault(yt);
20
+ var Vr__default = /*#__PURE__*/_interopDefault(Vr);
21
+ var bt__default = /*#__PURE__*/_interopDefault(bt);
22
+ var Rt__default = /*#__PURE__*/_interopDefault(Rt);
23
+ var xt__default = /*#__PURE__*/_interopDefault(xt);
20
24
 
21
- async function fe({chainId:r,proxyApiUrl:e}){let t=await fetch(`${e}/tokens?evmChainId=${r}`);if(!t.ok)throw rpcErrors.rpcErrors.internal(`Failed to fetch tokens for chainId ${r}`);return t.json()}var gr=process.env.GLACIER_API_KEY,w=r=>{let{chainId:e,chainName:t,rpcUrl:n,multiContractAddress:s,pollingInterval:a=2e3}=r,o=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},hr(n,gr),new ethers.Network(t,e));return o.pollingInterval=a,o},br=["glacier-api.avax.network","proxy-api.avax.network"];function hr(r,e){let t=new URL(r);if(e&&br.includes(t.hostname)){let n=t.searchParams;return n.set("token",e),t.search=n.toString(),t.toString()}return r}var we={LOW:1n,MEDIUM:4n,HIGH:6n},xe=500000000n;async function He({chainId:r,chainName:e,rpcUrl:t,multiContractAddress:n}){let s=w({chainId:r,chainName:e,rpcUrl:t,multiContractAddress:n}),{maxFeePerGas:a}=await s.getFeeData();if(!a)throw rpcErrors.rpcErrors.internal("Pre-EIP-1559 networks are not supported");let o=xe*we.LOW,i=xe*we.MEDIUM,c=xe*we.HIGH;return {baseFee:a,low:{maxFeePerGas:a+o,maxPriorityFeePerGas:o},medium:{maxFeePerGas:a+i,maxPriorityFeePerGas:i},high:{maxFeePerGas:a+c,maxPriorityFeePerGas:c},isFixedFee:!1}}function L(r,e,t="tx"){return `${r}/${t}/${e}`}var Ye=({tx:r,networkToken:e,chainId:t,explorerUrl:n,address:s})=>{let a=r.from.toLowerCase()===s.toLowerCase(),o=parseInt(r.timeStamp)*1e3,i=e.decimals,l=new coreUtilsSdk.TokenUnit(r.value,e.decimals,e.symbol).toDisplay(),p=a?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,{from:y,to:T,gasPrice:b,gasUsed:f,hash:g}=r,E=L(n,g);return {isIncoming:!a,isOutgoing:a,isContractCall:vr(r),timestamp:o,hash:g,isSender:a,from:y,to:T,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:vmModuleTypes.TokenType.NATIVE}],gasUsed:f,gasPrice:b,chainId:t.toString(),txType:p,explorerLink:E}};function vr(r){return r.input!=="0x"}function qe({tx:r,address:e,explorerUrl:t,chainId:n}){let s=r.from.toLowerCase()===e.toLowerCase(),a=parseInt(r.timeStamp)*1e3,i=new coreUtilsSdk.TokenUnit(r.value,Number(r.tokenDecimal),r.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:y,hash:T,tokenDecimal:b,tokenName:f,tokenSymbol:g}=r,E=s?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,m=L(t,T);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:a,hash:T,isSender:s,from:c,to:l,tokens:[{decimal:b,name:f,symbol:g,type:vmModuleTypes.TokenType.ERC20,amount:i}],gasUsed:y,gasPrice:p,chainId:n.toString(),txType:E,explorerLink:m}}var ze=async({isTestnet:r,networkToken:e,explorerUrl:t,chainId:n,address:s,nextPageToken:a,offset:o})=>{let i=a?JSON.parse(a):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await coreEtherscanSdk.getNormalTxs(s,!r,{page:c,offset:o}):[]).map(g=>Ye({tx:g,chainId:n,networkToken:e,explorerUrl:t,address:s})),y=(l.includes("erc20")?await coreEtherscanSdk.getErc20Txs(s,!r,void 0,{page:c,offset:o}):[]).map(g=>qe({tx:g,address:s,explorerUrl:t,chainId:n})),T=y.map(g=>g.hash),b=p.filter(g=>!T.includes(g.hash)),f={queries:[],page:c+1};return p.length&&f.queries.push("normal"),y.length&&f.queries.push("erc20"),{transactions:[...b,...y],nextPageToken:f.queries.length?JSON.stringify(f):""}};var Ke=r=>r===1||r===5||r===4||r===11155111;var Qe=({nativeTransaction:r,erc20Transfers:e,erc721Transfers:t,erc1155Transfers:n},s,a)=>{let o=!e&&!t&&!n,i=xr(r.method?.methodName),c=s.toLowerCase(),l=i.toLowerCase().includes("swap"),p=o&&r.from.address.toLowerCase()===c,y=o&&r.to.address.toLowerCase()===c,T=i==="Market Buy Orders With Eth"||i==="Buy NFT",b=i==="Approve",f=i.toLowerCase().includes("transfer"),g=i.toLowerCase().includes("airdrop"),E=i.toLowerCase().includes("unwrap"),m=i==="Fill Order",h=!!a[0]&&Ze(a[0].type)&&a[0].from?.address.toLowerCase()===c,k=!!a[0]&&Ze(a[0].type)&&a[0].to?.address.toLowerCase()===c;return l?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:y?vmModuleTypes.TransactionType.RECEIVE:T?vmModuleTypes.TransactionType.NFT_BUY:b?vmModuleTypes.TransactionType.APPROVE:h?vmModuleTypes.TransactionType.NFT_SEND:k?vmModuleTypes.TransactionType.NFT_RECEIVE:f?vmModuleTypes.TransactionType.TRANSFER:g?vmModuleTypes.TransactionType.AIRDROP:E?vmModuleTypes.TransactionType.UNWRAP:m?vmModuleTypes.TransactionType.FILL_ORDER:vmModuleTypes.TransactionType.UNKNOWN};function Ze(r){return r===vmModuleTypes.TokenType.ERC721||r===vmModuleTypes.TokenType.ERC1155}var xr=(r="")=>r.includes("(")?wr__default.default(r.split("(",1)[0]):r;var et=(r,{nativeTransaction:e,erc20Transfers:t,erc721Transfers:n},s)=>{let a=r===vmModuleTypes.TransactionType.TRANSFER,o=r===vmModuleTypes.TransactionType.SEND,i=r===vmModuleTypes.TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;a&&t&&t[0]&&(c=t[0].from.address,l=t[0].to.address),a&&n&&n[0]&&(c=n[0].from.address,l=n[0].to.address);let p=o||a&&c.toLowerCase()===s.toLowerCase(),y=i||a&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:p,isIncoming:y,isSender:c===s,from:c,to:l}};async function tt(r){try{return r.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Nr="https://ipfs.io";function F(r,e=Nr){if(!r)return "";try{return coreUtilsSdk.ipfsResolver(r,e)}catch{return r}}async function Ar(r,e=5e3){let t=new AbortController;return setTimeout(()=>t.abort(),e),fetch(r,{signal:t.signal})}async function rt(r){let e={};if(r)if(r.startsWith("data:application/json;base64,")){let t=r.substring(29);try{let n=Buffer.from(t,"base64").toString();e=JSON.parse(n);}catch{e={};}}else e=await Ar(F(r)).then(t=>t.json()).catch(()=>({}));else return {};return e}var _r="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function nt(r,e="256"){let t=F(r);return `${_r}/width=${e},fit/${t}`}var st=async({nativeTransaction:r,erc20Transfers:e,erc721Transfers:t,erc1155Transfers:n},s)=>{let a=[];if(r.value!=="0"){let o=s.decimals,c=new coreUtilsSdk.TokenUnit(r.value,s.decimals,s.symbol).toDisplay();a.push({decimal:o.toString(),name:s.name,symbol:s.symbol,amount:c,from:r.from,to:r.to,type:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(o=>{let i=o.erc20Token.decimals,l=new coreUtilsSdk.TokenUnit(o.value,i,o.erc20Token.symbol).toDisplay();a.push({decimal:i.toString(),name:o.erc20Token.name,symbol:o.erc20Token.symbol,amount:l,from:o.from,to:o.to,imageUri:o.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),t&&await Promise.allSettled(t.map(async o=>{let i=o.erc721Token,c=await ot(i.tokenUri,i.metadata.imageUri);a.push({name:o.erc721Token.name,symbol:o.erc721Token.symbol,amount:"1",imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async o=>{let i=o.erc1155Token,c=await ot(i.tokenUri,i.metadata.imageUri);a.push({name:o.erc1155Token.metadata.name??"",symbol:o.erc1155Token.metadata.symbol??"",amount:o.value,imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),a},ot=async(r,e)=>{if(e)return e.startsWith("ipfs://")?F(e):e;{let[t,n]=await tt(rt(r));return n?"":t.image?nt(t.image):""}};var it=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],ge=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(ge||{});var ct=async({transactions:r,explorerUrl:e,networkToken:t,chainId:n,address:s})=>{let a=await st(r,t),o=Qe(r,s,a),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:y}=et(o,r,s),{blockTimestamp:T,txHash:b,gasPrice:f,gasUsed:g}=r.nativeTransaction,E=L(e,b);return {isContractCall:!it.includes(o),isIncoming:c,isOutgoing:i,isSender:l,timestamp:T*1e3,hash:b,from:p,to:y,tokens:a,gasPrice:f,gasUsed:g,chainId:n.toString(),txType:o,explorerLink:E}};var lt=async({chainId:r,explorerUrl:e,networkToken:t,address:n,nextPageToken:s,offset:a,glacierService:o})=>{try{let i=await o.listTransactions({chainId:r.toString(),address:n,pageToken:s,pageSize:a});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>ct({transactions:p,explorerUrl:e,networkToken:t,chainId:r,address:n}).then(y=>y)))).filter(p=>p.tokens.find(y=>Number(y.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var pt=async({chainId:r,isTestnet:e,networkToken:t,explorerUrl:n,address:s,nextPageToken:a,offset:o,glacierService:i})=>Ke(r)?ze({isTestnet:e,networkToken:t,explorerUrl:n,chainId:r,address:s,nextPageToken:a,offset:o}):i.isHealthy()?lt({networkToken:t,explorerUrl:n,chainId:r,address:s,nextPageToken:a,offset:o,glacierService:i}):{transactions:[],nextPageToken:""};var mt={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["eip155:*"],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"]}},manifestVersion:"0.0"};var Br=zod.z.object({from:zod.z.string().length(42),to:zod.z.string().length(42),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()}),Ur=zod.z.array(Br).length(1),dt=r=>Ur.safeParse(r);var ut=async({transactionParams:{from:r,to:e,data:t,value:n},provider:s})=>{let a=await s.getTransactionCount(r);return Number(await s.estimateGas({from:r,to:e,nonce:a,data:t,value:n}))};var ft=async({from:r,provider:e})=>e.getTransactionCount(r);var gt="DUMMY_API_KEY",bt=async({proxyApiUrl:r,chainId:e,params:t,domain:n})=>new yt__default.default({baseURL:r+"/proxy/blockaid/",apiKey:gt}).evm.transaction.scan({account_address:t.from,chain:e.toString(),options:["validation","simulation"],data:{from:t.from,to:t.to,data:t.data,value:t.value,gas:t.gas,gas_price:t.gasPrice},metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}}),ht=async({proxyApiUrl:r,chainId:e,accountAddress:t,data:n,domain:s})=>new yt__default.default({baseURL:r+"/proxy/blockaid/",apiKey:gt}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:t,data:n,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var kt=async({request:r,dAppUrl:e,params:t,chainId:n,proxyApiUrl:s})=>{let a,o,i;try{let{validation:c,simulation:l}=await bt({proxyApiUrl:s,chainId:n,params:t,domain:e});!c||c.result_type==="Error"||c.result_type==="Warning"?a=W[vmModuleTypes.AlertType.WARNING]:c.result_type==="Malicious"&&(a=W[vmModuleTypes.AlertType.DANGER]),l?.status==="Success"&&(i=Et(r,l.account_summary.exposures),o=vt(l.account_summary.assets_diffs));}catch(c){console.error("processTransactionSimulation error",c),a=W[vmModuleTypes.AlertType.WARNING];}return {alert:a,balanceChange:o,tokenApprovals:i}},Et=(r,e)=>{let t=[];for(let s of e){let a=It(s.asset);if(a)for(let[o,i]of Object.entries(s.spenders))if(i.exposure.length===0)t.push({token:a,spenderAddress:o,logoUri:a.logoUri});else for(let c of i.exposure)"raw_value"in c?t.push({token:a,spenderAddress:o,value:c.raw_value,usdPrice:c.usd_price,logoUri:a.logoUri}):t.push({token:a,spenderAddress:o,logoUri:c.logo_url,usdPrice:c.usd_price});}return t.length===0?void 0:{isEditable:t.length===1&&t[0]?.token.type===vmModuleTypes.TokenType.ERC20&&r.method===vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,approvals:t}},vt=r=>{let e=Tt(r,"in"),t=Tt(r,"out");if(!(e.length===0&&t.length===0))return {ins:e,outs:t}},Tt=(r,e)=>r.filter(t=>t[e].length>0).sort((t,n)=>t[e].length-n[e].length).map(t=>{let n=t.asset,s="address"in n?It(n):Fr(n);if(!s)return;let a=t[e].map(o=>{let i;if("value"in o&&o.value)if("decimals"in s){let c=coreUtilsSdk.numberToBN(o.value,s.decimals);i=coreUtilsSdk.balanceToDisplayValue(c,s.decimals);}else ethers.isHexString(o.value)&&(i=parseInt(o.value,16).toString());else "type"in s&&s.type===vmModuleTypes.TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:o.usd_price}:void 0}).filter(o=>o!==void 0);return {token:s,items:a}}).filter(t=>t!==void 0),It=r=>{let e;return r.type==="ERC20"?e={type:vmModuleTypes.TokenType.ERC20,address:r.address,decimals:r.decimals,name:r.name??r.symbol??"",symbol:r.symbol??"",logoUri:r.logo_url}:r.type==="ERC1155"?e={type:vmModuleTypes.TokenType.ERC1155,address:r.address,logoUri:r.logo_url,name:r.name,symbol:r.symbol}:r.type==="ERC721"?e={type:vmModuleTypes.TokenType.ERC721,address:r.address,logoUri:r.logo_url,name:r.name,symbol:r.symbol}:r.type==="NONERC"&&(e={type:vmModuleTypes.TokenType.NONERC,address:r.address,logoUri:r.logo_url,name:r.name,symbol:r.symbol}),e},Fr=r=>({name:r.name??"",symbol:r.symbol??"",decimals:r.decimals,description:"",logoUri:r.logo_url}),St=async({request:r,dAppUrl:e,accountAddress:t,chainId:n,data:s,proxyApiUrl:a})=>{let o,i,c;try{let{validation:l,simulation:p}=await ht({proxyApiUrl:a,chainId:n,accountAddress:t,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?o=W[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(o=W[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=Et(r,p.account_summary.exposures),i=vt(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=W[vmModuleTypes.AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}},W={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var be={_format:"hh-sol-artifact-1",contractName:"ERC20",sourceName:"contracts/token/ERC20/ERC20.sol",abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],bytecode:"0x60806040523480156200001157600080fd5b5060405162000aed38038062000aed8339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000281565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b6020821081036200027b57634e487b7160e01b600052602260045260246000fd5b50919050565b61085c80620002916000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",deployedBytecode:"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",linkReferences:{},deployedLinkReferences:{}};var Rt=r=>{if(r.data)try{let t=new ethers.Interface(be.abi).parseTransaction({data:r.data,value:r.value}),n=t?.name??t?.fragment?.name;return n&&$r(n)?n:void 0}catch{return}};function $r(r){return Object.values(ge).includes(r)}var Ae=async({operation:r,isSuccess:e,maxRetries:t=10,backoffPolicy:n=ae.exponential()})=>{let s=0,a=0,o;for(;a<t;){a>0&&await Hr(s);try{let c=await r(a);if(e(c))return c}catch(c){o=c;}s=n(a),a++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},ae=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return t=>e*1e3}static constantMs(e){return t=>e}};function Hr(r){return new Promise(e=>setTimeout(e,r))}var _e=r=>Ae({operation:e=>r(e>0),maxRetries:2,backoffPolicy:ae.constant(1),isSuccess:e=>e?.status?.error_code!==429});function Pt(r){let e,t=0;for(e=0;e<r.length;e++)t+=r.charCodeAt(e)*(e+1);return t}function De(r){let e,t=0;for(e=0;e<r.length;e++){let n=Pt(r[e]??"");t=t+65027/n;}return (""+t).slice(0,16)}async function $(r,e){let t=await fetch(...r);if(!t.ok)throw new Error(`Request failed with status ${t.status}`);let n=await t.json();return e.parse(n)}var oe=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let t=new URLSearchParams(e);return $([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${t}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:t,...n}=e,s=new URLSearchParams(n);return $([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${t}?${s}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.SimplePriceResponseSchema)}};var wt=coreCoingeckoSdk.getBasicCoingeckoHttp(),D,H,j=class{constructor({storage:e,proxyApiUrl:t}){chunkTKL4UUHE_cjs.c(this,D,void 0);chunkTKL4UUHE_cjs.c(this,H,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,t=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(s=>{let a=e[s];n[s]={},t.forEach(o=>{n[s]={[o]:{price:a?.[o],change24:a?.[`${o}_24h_change`],vol24:a?.[`${o}_24h_vol`],marketCap:a?.[`${o}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,D,e),chunkTKL4UUHE_cjs.d(this,H,t);}async getSimplePrice({coinIds:e=[],currencies:t=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${De(e)}-${t.toString()}`:`${t.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,D)?.get?.(a),n)return n;try{n=await _e(o=>this.simplePrice({coinIds:e,currencies:t,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,D)?.set?.(a,n),n}async getPricesByAddresses(e,t,n=coreCoingeckoSdk.VsCurrencyType.USD){let s,o=`getPricesWithMarketDataByAddresses-${`${De(e)}-${t}-${n}`}`;if(s=chunkTKL4UUHE_cjs.b(this,D)?.get?.(o),s)return s;try{s=await _e(i=>this.fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch{s=void 0;}return chunkTKL4UUHE_cjs.b(this,D)?.set?.(o,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:t,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?new oe(chunkTKL4UUHE_cjs.b(this,H)).simplePriceByContractAddresses({id:e,contract_addresses:t,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):coreCoingeckoSdk.simpleTokenPrice(wt,{assetPlatformId:e,tokenAddresses:t,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:t=[coreCoingeckoSdk.VsCurrencyType.USD],marketCap:n=!1,vol24:s=!1,change24:a=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new oe(chunkTKL4UUHE_cjs.b(this,H)).simplePrice({ids:e,vs_currencies:t,include_market_cap:n,include_24hr_vol:s,include_24hr_change:a,include_last_updated_at:o});return this.transformSimplePriceResponse(l,t)}return coreCoingeckoSdk.simplePrice(wt,{coinIds:e,currencies:t,marketCap:n,vol24:s,change24:a,lastUpdated:o,shouldThrow:c})}};D=new WeakMap,H=new WeakMap;var en="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",tn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",xt=zod.object({date:zod.string(),usd:zod.record(zod.number())}),he=async()=>{try{return await $([en],xt)}catch{return await $([tn],xt)}};var Be=(r,e,t="horizontal")=>({label:r,alignment:t,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Ct=(r,e)=>({label:r,value:e,type:vmModuleTypes.DetailItemType.LINK}),ke=(r,e)=>({label:r,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Ue=(r,e)=>({label:r,type:vmModuleTypes.DetailItemType.DATA,value:e});var Ve=({name:r,version:e})=>{switch(r){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":r,"x-application-version":e};case vmModuleTypes.AppName.OTHER:return}};var Nt=async({request:r,network:e,approvalController:t,proxyApiUrl:n})=>{let{dappInfo:s,params:a}=r,o=dt(a);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o.error}})};let i=o.data[0];if(!i)return {error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o.error}})};let c=w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let k=await ut({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+k.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let k=await ft({from:i.from,provider:c});i.nonce=String(k);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let l=Rt(i),{alert:p,balanceChange:y,tokenApprovals:T}=await kt({request:r,proxyApiUrl:n,chainId:e.chainId,params:i,dAppUrl:r.dappInfo.url}),b="Approve Transaction";l==="approve"&&(b="Token Spend Approval");let f=[Ct("Website",s),ke("From",i.from),ke("To",i.to)];l&&f.push(Be("Type",l)),i.data&&f.push(Ue("Data",i.data));let g={title:b,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:f}],networkFeeSelector:!0,alert:p,balanceChange:y,tokenApprovals:T},E={type:vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId}},m=await t.requestApproval({request:r,displayData:g,signingData:E});if("error"in m)return {error:m.error};let h;try{h=await nn(c,m);}catch(k){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:k}})}}return an({provider:c,txHash:h,onTransactionConfirmed:t.onTransactionConfirmed,onTransactionReverted:t.onTransactionReverted,requestId:r.requestId}),{result:h}},nn=async(r,e)=>"txHash"in e?e.txHash:await r.send("eth_sendRawTransaction",[e.signedData]),an=async({provider:r,txHash:e,onTransactionConfirmed:t,onTransactionReverted:n,requestId:s})=>{try{(await r.waitForTransaction(e))?.status===1?t(e,s):n(e,s);}catch(a){console.error(a),n(e,s);}};async function At(r,e){let t=r.map(async(a,o)=>({index:o,result:await e(a)})),s=(await Promise.allSettled(t)).filter(a=>a.status==="fulfilled").map(a=>a).find(a=>a.value.result);return s?r[s.value.index]:void 0}function J(r,e){return r.then(t=>({id:e,status:"fulfilled",value:t})).catch(t=>({id:e,status:"rejected",reason:t}))}async function q(r){return await Promise.allSettled(r).then(e=>e.reduce((t,n)=>{if(n.status==="fulfilled"){let s=n.value;s.status==="fulfilled"?t[s.id]=s.value:t[s.id]={error:s.reason};}return t},{}))}function Ee(r){return r.type===vmModuleTypes.TokenType.ERC20}var S,z,V,ce,ve=class{constructor({network:e,storage:t,proxyApiUrl:n,customTokens:s}){chunkTKL4UUHE_cjs.c(this,S,void 0);chunkTKL4UUHE_cjs.c(this,z,void 0);chunkTKL4UUHE_cjs.c(this,V,void 0);chunkTKL4UUHE_cjs.c(this,ce,void 0);chunkTKL4UUHE_cjs.d(this,S,e),chunkTKL4UUHE_cjs.d(this,z,t),chunkTKL4UUHE_cjs.d(this,V,n),chunkTKL4UUHE_cjs.d(this,ce,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:t,currency:n}){let s=w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,S).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,S).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,S).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,S).pricingProviders?.coingecko.nativeTokenId,o=chunkTKL4UUHE_cjs.b(this,S).networkToken,i=new j({storage:chunkTKL4UUHE_cjs.b(this,z),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,V)}),c=a?await i.getSimplePrice({coinIds:[a],currencies:[n]}):{},l=c?.[a??""]?.[n]?.price??void 0,p=c?.[a??""]?.[n]?.marketCap??void 0,y=c?.[a??""]?.[n]?.vol24??void 0,T=c?.[a??""]?.[n]?.change24??void 0,b=await s.getBalance(t),f=new coreUtilsSdk.TokenUnit(b,o.decimals,o.symbol),g=l!==void 0?f.mul(l):void 0;return {...o,coingeckoId:a??"",type:vmModuleTypes.TokenType.NATIVE,balance:b,balanceDisplayValue:f.toDisplay(),balanceInCurrency:g?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:g?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:y,change24:T}}async listErc20Balances({chainId:e,address:t,currency:n}){let s=w({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,S).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,S).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,S).utilityAddresses?.multicall}),a=chunkTKL4UUHE_cjs.b(this,S).pricingProviders?.coingecko.assetPlatformId,o=chunkTKL4UUHE_cjs.b(this,S).pricingProviders?.coingecko.nativeTokenId,i=await fe({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,V)}),c=i.map(m=>m.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,ce)].filter(Ee),p=async m=>{let ne=await new ethers.ethers.Contract(m.address,be.abi,s).balanceOf?.(t)||0n;return {...m,balance:ne}},y=l.map(m=>J(p(m),m.address)),T=await q(y),b=new j({storage:chunkTKL4UUHE_cjs.b(this,z),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,V)}),f=a&&await b.getPricesByAddresses(c,a,n)||{},g=Object.keys(T),E={};for(let m=0;m<g.length;m++){let h=g[m];if(h===void 0)continue;let k=T[h];if(k===void 0||"error"in k){E[h]={error:`rpcService:getTokenWithBalance failed: ${k?.error??"unknown error"}`};continue}let ne=f?.[o??""]?.[n]?.price??void 0,pr=f?.[o??""]?.[n]?.marketCap??void 0,mr=f?.[o??""]?.[n]?.vol24??void 0,dr=f?.[o??""]?.[n]?.change24??void 0,We=new coreUtilsSdk.TokenUnit(k.balance,k.decimals,k.symbol),$e=ne!==void 0?We.mul(ne):void 0;E[k.address.toLowerCase()]={...k,type:vmModuleTypes.TokenType.ERC20,balance:k.balance,balanceDisplayValue:We.toDisplay(),balanceInCurrency:$e?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:$e?.toDisplay({fixedDp:2}),priceInCurrency:ne,marketCap:pr,change24:dr,vol24:mr};}return E}async listNftBalances(){return {}}};S=new WeakMap,z=new WeakMap,V=new WeakMap,ce=new WeakMap;var Bt=async({addresses:r,currency:e,network:t,proxyApiUrl:n,customTokens:s=[],storage:a,balanceServices:o=[]})=>{let i=t.chainId,c=[...o,new ve({network:t,storage:a,proxyApiUrl:n,customTokens:s})],l=await At(c,y=>y.isNetworkSupported(t.chainId)),p={};if(l){let y=[],T=[],b=[];r.forEach(m=>{y.push(J(l.getNativeBalance({address:m,currency:e.toUpperCase(),chainId:i}),m)),T.push(J(l.listErc20Balances({customTokens:s.filter(Ee),currency:e.toUpperCase(),chainId:i,address:m,pageSize:100}),m)),b.push(J(l.listNftBalances({chainId:i,address:m}),m));});let f=await q(y),g=await q(T),E=await q(b);Object.keys(f).forEach(m=>{let h=f[m];if(!h||"error"in h){p[m]={error:`getNativeBalance failed: ${h?.error??"unknown error"}`};return}let k=h.symbol;p[m]={[k]:h};}),Object.keys(g).forEach(m=>{let h=g[m];!h||"error"in h&&typeof h.error!="string"?p[m]={...p[m],error:"listErc20Balances failed: unknown error"}:"error"in h&&typeof h.error=="string"?p[m]={...p[m],error:`listErc20Balances failed: ${h.error}`}:p[m]={...p[m],...h};}),Object.keys(E).forEach(m=>{let h=E[m];!h||"error"in h&&typeof h.error!="string"?p[m]={...p[m],error:"listNftBalances failed: unknown error"}:"error"in h&&typeof h.error=="string"?p[m]={...p[m],error:`listNftBalances failed: ${h.error}`}:p[m]={...p[m],...h};});}else r.forEach(y=>{p[y]={error:"unsupported network"};});return p};var cn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},ln={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Vt=r=>{switch(r){case vmModuleTypes.Environment.PRODUCTION:return cn;case vmModuleTypes.Environment.DEV:return ln}};var mn="https://ipfs.io";function Mt(r,e=mn){if(!r)return "";try{return coreUtilsSdk.ipfsResolver(r,e)}catch{return r}}var dn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Gt(r,e="256"){let t=Mt(r);return `${dn}/width=${e},fit/${t}`}var A=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},Ie=class{constructor({glacierApiUrl:e,headers:t}){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:t}),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(t=>t.chainId),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:t,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:t,tokenId:n});}catch(s){throw s instanceof A&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:t,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:t,tokenId:n})}catch(s){throw s instanceof A&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:t,currency:n,coingeckoId:s}){try{let o=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:t,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new coreUtilsSdk.TokenUnit(o.balance,o.decimals,o.symbol),c=o.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:o.name,symbol:o.symbol,decimals:o.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:o.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:s??""}}catch(a){throw a instanceof A&&this.setGlacierToUnhealthy(),a}}async listErc721Balances({chainId:e,address:t}){let n,s=[];do try{let a=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:t,pageSize:100,pageToken:n});s.push(...a.erc721TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof A&&this.setGlacierToUnhealthy(),a}while(n);return s}async listErc1155Balances({chainId:e,address:t}){let n,s=[];do try{let a=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:t,pageSize:100,pageToken:n});s.push(...a.erc1155TokenBalances),n=a.nextPageToken;}catch(a){throw a instanceof A&&this.setGlacierToUnhealthy(),a}while(n);return s}async listNftBalances({chainId:e,address:t}){let s=(await Promise.allSettled([this.listErc721Balances({chainId:e.toString(),address:t}),this.listErc1155Balances({chainId:e.toString(),address:t})])).filter(a=>a.status==="fulfilled").flatMap(a=>a.value.map(o=>[`${o.address}-${o.tokenId}`,{address:o.address,description:o.metadata.description??"",logoUri:o.metadata.imageUri??"",logoSmall:Gt(o.metadata.imageUri??""),name:o.metadata.name??"",symbol:o.metadata.symbol??"",tokenId:o.tokenId,tokenUri:o.tokenUri,collectionName:"Unkown",balance:o.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(o.balance):1,balanceDisplayValue:o.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?o.balance:"1",type:o.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:o.metadata.description,lastUpdatedTimestamp:o.metadata.metadataLastUpdatedTimestamp,properties:o.ercType===glacierSdk.Erc721Token.ercType.ERC_721?o.metadata.attributes:o.metadata.properties}}]));return Object.fromEntries(s)}async listErc20Balances({chainId:e,address:t,currency:n,customTokens:s}){try{let a=[],o;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:t,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:o});a.push(...gn(i.erc20TokenBalances,Number(e))),o=i.nextPageToken;}while(o);return [...yn(s),...a].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(a){throw a instanceof A&&this.setGlacierToUnhealthy(),a}}async listTransactions({chainId:e,address:t,pageToken:n,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:t,pageToken:n,pageSize:s})}catch(a){throw a instanceof A&&this.setGlacierToUnhealthy(),a}}},yn=r=>r.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})),gn=(r,e)=>r.map(t=>{let n=new coreUtilsSdk.TokenUnit(t.balance,t.decimals,t.symbol),s=n.toDisplay(),a=t.balanceValue?.value.toString(),o=t.price?.value,i=o!==void 0?n.mul(o).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:t.address,name:t.name,symbol:t.symbol,decimals:t.decimals,logoUri:t.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:a,balanceDisplayValue:s,balanceInCurrency:i,priceInCurrency:o,type:vmModuleTypes.TokenType.ERC20}});var Me=r=>{let e="";e+=`Domain
22
- `;for(let t in r.domain)e+=` ${t}: ${M(String(r.domain[t]))}
25
+ async function he({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 Rr=process.env.GLACIER_API_KEY,x=t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:s,pollingInterval:o=2e3}=t,a=new coreWalletsSdk.JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},xr(n,Rr),new ethers.Network(r,e));return a.pollingInterval=o,a},Pr=["glacier-api.avax.network","proxy-api.avax.network"];function xr(t,e){let r=new URL(t);if(e&&Pr.includes(r.hostname)){let n=r.searchParams;return n.set("token",e),r.search=n.toString(),r.toString()}return t}var De={LOW:1n,MEDIUM:4n,HIGH:6n},_e=500000000n;async function Ke({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:s,proxyApiUrl:o}){let a=x({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!o)throw rpcErrors.rpcErrors.internal("Proxy API URL is needed");let i=await a.getBlock("latest",!1);if(!i)throw rpcErrors.rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await wr(o,s),p=new coreUtilsSdk.TokenUnit(l,0,""),m=new coreUtilsSdk.TokenUnit(c,0,""),T=BigInt("1000000000"),g=m.mul(p).add(T).toSubUnit(),h=_e*De.LOW,y=_e*De.MEDIUM,E=_e*De.HIGH;return {baseFee:g,low:{maxFeePerGas:g+h,maxPriorityFeePerGas:h},medium:{maxFeePerGas:g+y,maxPriorityFeePerGas:y},high:{maxFeePerGas:g+E,maxPriorityFeePerGas:E},isFixedFee:!1,displayDecimals:9}}async function wr(t,e){if(!e)return 1.5;try{let n=await fetch(t);if(!n.ok)throw new Error(n.statusText);let s=await n.json();return s[e]??s.default}catch{return 1.5}}function W(t,e,r="tx"){return `${t}/${r}/${e}`}var Ze=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:s})=>{let o=t.from.toLowerCase()===s.toLowerCase(),a=parseInt(t.timeStamp)*1e3,i=e.decimals,l=new coreUtilsSdk.TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=o?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,{from:m,to:T,gasPrice:g,gasUsed:h,hash:y}=t,E=W(n,y);return {isIncoming:!o,isOutgoing:o,isContractCall:Nr(t),timestamp:a,hash:y,isSender:o,from:m,to:T,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:vmModuleTypes.TokenType.NATIVE}],gasUsed:h,gasPrice:g,chainId:r.toString(),txType:p,explorerLink:E}};function Nr(t){return t.input!=="0x"}function et({tx:t,address:e,explorerUrl:r,chainId:n}){let s=t.from.toLowerCase()===e.toLowerCase(),o=parseInt(t.timeStamp)*1e3,i=new coreUtilsSdk.TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:m,hash:T,tokenDecimal:g,tokenName:h,tokenSymbol:y}=t,E=s?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,d=W(r,T);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:o,hash:T,isSender:s,from:c,to:l,tokens:[{decimal:g,name:h,symbol:y,type:vmModuleTypes.TokenType.ERC20,amount:i}],gasUsed:m,gasPrice:p,chainId:n.toString(),txType:E,explorerLink:d}}var tt=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:s,nextPageToken:o,offset:a})=>{let i=o?JSON.parse(o):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await coreEtherscanSdk.getNormalTxs(s,!t,{page:c,offset:a}):[]).map(y=>Ze({tx:y,chainId:n,networkToken:e,explorerUrl:r,address:s})),m=(l.includes("erc20")?await coreEtherscanSdk.getErc20Txs(s,!t,void 0,{page:c,offset:a}):[]).map(y=>et({tx:y,address:s,explorerUrl:r,chainId:n})),T=m.map(y=>y.hash),g=p.filter(y=>!T.includes(y.hash)),h={queries:[],page:c+1};return p.length&&h.queries.push("normal"),m.length&&h.queries.push("erc20"),{transactions:[...g,...m],nextPageToken:h.queries.length?JSON.stringify(h):""}};var rt=t=>t===1||t===5||t===4||t===11155111;var ot=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s,o)=>{let a=!e&&!r&&!n,i=Gr(t.method?.methodName),c=s.toLowerCase(),l=i.toLowerCase().includes("swap"),p=a&&t.from.address.toLowerCase()===c,m=a&&t.to.address.toLowerCase()===c,T=i==="Market Buy Orders With Eth"||i==="Buy NFT",g=i==="Approve",h=i.toLowerCase().includes("transfer"),y=i.toLowerCase().includes("airdrop"),E=i.toLowerCase().includes("unwrap"),d=i==="Fill Order",k=!!o[0]&&at(o[0].type)&&o[0].from?.address.toLowerCase()===c,I=!!o[0]&&at(o[0].type)&&o[0].to?.address.toLowerCase()===c;return l?vmModuleTypes.TransactionType.SWAP:p?vmModuleTypes.TransactionType.SEND:m?vmModuleTypes.TransactionType.RECEIVE:T?vmModuleTypes.TransactionType.NFT_BUY:g?vmModuleTypes.TransactionType.APPROVE:k?vmModuleTypes.TransactionType.NFT_SEND:I?vmModuleTypes.TransactionType.NFT_RECEIVE:h?vmModuleTypes.TransactionType.TRANSFER:y?vmModuleTypes.TransactionType.AIRDROP:E?vmModuleTypes.TransactionType.UNWRAP:d?vmModuleTypes.TransactionType.FILL_ORDER:vmModuleTypes.TransactionType.UNKNOWN};function at(t){return t===vmModuleTypes.TokenType.ERC721||t===vmModuleTypes.TokenType.ERC1155}var Gr=(t="")=>t.includes("(")?Vr__default.default(t.split("(",1)[0]):t;var st=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},s)=>{let o=t===vmModuleTypes.TransactionType.TRANSFER,a=t===vmModuleTypes.TransactionType.SEND,i=t===vmModuleTypes.TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;o&&r&&r[0]&&(c=r[0].from.address,l=r[0].to.address),o&&n&&n[0]&&(c=n[0].from.address,l=n[0].to.address);let p=a||o&&c.toLowerCase()===s.toLowerCase(),m=i||o&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:p,isIncoming:m,isSender:c===s,from:c,to:l}};async function it(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Lr="https://ipfs.io";function $(t,e=Lr){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}async function Fr(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function ct(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 Fr($(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var Or="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function lt(t,e="256"){let r=$(t);return `${Or}/width=${e},fit/${r}`}var dt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s)=>{let o=[];if(t.value!=="0"){let a=s.decimals,c=new coreUtilsSdk.TokenUnit(t.value,s.decimals,s.symbol).toDisplay();o.push({decimal:a.toString(),name:s.name,symbol:s.symbol,amount:c,from:t.from,to:t.to,type:vmModuleTypes.TokenType.NATIVE});}return e?.forEach(a=>{let i=a.erc20Token.decimals,l=new coreUtilsSdk.TokenUnit(a.value,i,a.erc20Token.symbol).toDisplay();o.push({decimal:i.toString(),name:a.erc20Token.name,symbol:a.erc20Token.symbol,amount:l,from:a.from,to:a.to,imageUri:a.erc20Token.logoUri,type:vmModuleTypes.TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async a=>{let i=a.erc721Token,c=await mt(i.tokenUri,i.metadata.imageUri);o.push({name:a.erc721Token.name,symbol:a.erc721Token.symbol,amount:"1",imageUri:c,from:a.from,to:a.to,collectableTokenId:a.erc721Token.tokenId,type:vmModuleTypes.TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async a=>{let i=a.erc1155Token,c=await mt(i.tokenUri,i.metadata.imageUri);o.push({name:a.erc1155Token.metadata.name??"",symbol:a.erc1155Token.metadata.symbol??"",amount:a.value,imageUri:c,from:a.from,to:a.to,collectableTokenId:a.erc1155Token.tokenId,type:vmModuleTypes.TokenType.ERC1155});})),o},mt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?$(e):e;{let[r,n]=await it(ct(t));return n?"":r.image?lt(r.image):""}};var ut=[vmModuleTypes.TransactionType.SEND,vmModuleTypes.TransactionType.RECEIVE,vmModuleTypes.TransactionType.TRANSFER],M=(a=>(a.TOTAL_SUPPLY="totalSupply",a.BALANCE_OF="balanceOf",a.TRANSFER="transfer",a.TRANSFER_FROM="transferFrom",a.APPROVE="approve",a.ALLOWANCE="allowance",a))(M||{});var gt=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:s})=>{let o=await dt(t,r),a=ot(t,s,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:m}=st(a,t,s),{blockTimestamp:T,txHash:g,gasPrice:h,gasUsed:y}=t.nativeTransaction,E=W(e,g);return {isContractCall:!ut.includes(a),isIncoming:c,isOutgoing:i,isSender:l,timestamp:T*1e3,hash:g,from:p,to:m,tokens:o,gasPrice:h,gasUsed:y,chainId:n.toString(),txType:a,explorerLink:E}};var yt=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:s,offset:o,glacierService:a})=>{try{let i=await a.listTransactions({chainId:t.toString(),address:n,pageToken:s,pageSize:o});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>gt({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(m=>m)))).filter(p=>p.tokens.find(m=>Number(m.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var ft=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:s,nextPageToken:o,offset:a,glacierService:i})=>rt(t)?tt({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:o,offset:a}):i.isHealthy()?yt({networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:o,offset:a,glacierService:i}):{transactions:[],nextPageToken:""};var ht={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["eip155:*"],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"]}},manifestVersion:"0.0"};var $r=zod.z.object({from:zod.z.string().length(42),to:zod.z.string().length(42),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()}),Hr=zod.z.array($r).length(1),Tt=t=>Hr.safeParse(t);var kt=async({transactionParams:{from:t,to:e,data:r,value:n},provider:s})=>{let o=await s.getTransactionCount(t);return Number(await s.estimateGas({from:t,to:e,nonce:o,data:r,value:n}))};var Et=async({from:t,provider:e})=>e.getTransactionCount(t);var vt="DUMMY_API_KEY",It=async({proxyApiUrl:t,chainId:e,params:r,domain:n})=>new bt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:vt}).evm.transaction.scan({account_address:r.from,chain:e.toString(),options:["validation","simulation"],data:{from:r.from,to:r.to,data:r.data,value:r.value,gas:r.gas,gas_price:r.gasPrice},metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}}),St=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:n,domain:s})=>new bt__default.default({baseURL:t+"/proxy/blockaid/",apiKey:vt}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:r,data:n,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var wt=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.ethers.Contract(t.to,xt__default.default.abi,r),s=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),o=Rt__default.default(s[0]),a=Rt__default.default(s[1]),i=parseInt(s[2]),c={type:vmModuleTypes.TokenType.ERC20,name:o,chainId:e,symbol:a,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.ethers.Interface(xt__default.default.abi),p=l.getFunction(t.data.slice(0,10)),m=l.decodeFunctionData(t.data.slice(0,10),t.data);if(p?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new coreUtilsSdk.TokenUnit(m.amount,c.decimals,c.symbol).toDisplay(),usdPrice:void 0}],token:c}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:c,spenderAddress:m.spender,value:m.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};var At=async({request:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:s,provider:o})=>{let a,i,c,l=!1;try{let{validation:p,simulation:m}=await It({proxyApiUrl:s,chainId:n,params:r,domain:e});!p||p.result_type==="Error"||p.result_type==="Warning"?a=se[vmModuleTypes.AlertType.WARNING]:p.result_type==="Malicious"&&(a=se[vmModuleTypes.AlertType.DANGER]),m?.status==="Success"&&(l=!0,c=Nt(t,m.account_summary.exposures),i=Dt(m.account_summary.assets_diffs));}catch(p){console.error("processTransactionSimulation error",p);}if(!l&&r.to){let p=await wt(r,n,o);i=p.balanceChange,c=p.tokenApprovals;}return {alert:a,balanceChange:i,tokenApprovals:c,isSimulationSuccessful:l}},Nt=(t,e)=>{let r=[];for(let s of e){let o=_t(s.asset);if(o)for(let[a,i]of Object.entries(s.spenders))if(i.exposure.length===0)r.push({token:o,spenderAddress:a,logoUri:o.logoUri});else for(let c of i.exposure)"raw_value"in c?r.push({token:o,spenderAddress:a,value:c.raw_value,usdPrice:c.usd_price,logoUri:o.logoUri}):r.push({token:o,spenderAddress:a,logoUri:c.logo_url,usdPrice:c.usd_price});}return r.length===0?void 0:{isEditable:r.length===1&&r[0]?.token.type===vmModuleTypes.TokenType.ERC20&&t.method===vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,approvals:r}},Dt=t=>{let e=Ct(t,"in"),r=Ct(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},Ct=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,s="address"in n?_t(n):Xr(n);if(!s)return;let o=r[e].map(a=>{let i;if("value"in a&&a.value)if("decimals"in s){let c=coreUtilsSdk.numberToBN(a.value,s.decimals);i=coreUtilsSdk.balanceToDisplayValue(c,s.decimals);}else ethers.isHexString(a.value)&&(i=parseInt(a.value,16).toString());else "type"in s&&s.type===vmModuleTypes.TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:a.usd_price}:void 0}).filter(a=>a!==void 0);return {token:s,items:o}}).filter(r=>r!==void 0),_t=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},Xr=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Bt=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:s,proxyApiUrl:o})=>{let a,i,c;try{let{validation:l,simulation:p}=await St({proxyApiUrl:o,chainId:n,accountAddress:r,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?a=se[vmModuleTypes.AlertType.WARNING]:l.result_type==="Malicious"&&(a=se[vmModuleTypes.AlertType.DANGER]),p?.status==="Success"&&(c=Nt(t,p.account_summary.exposures),i=Dt(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),a=se[vmModuleTypes.AlertType.WARNING];}return {alert:a,balanceChange:i,tokenApprovals:c}},se={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var ke=t=>{if(t.data)try{let r=new ethers.Interface(xt__default.default.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&en(n)?n:void 0}catch{return}};function en(t){return Object.values(M).includes(t)}var Ve=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=ie.exponential()})=>{let s=0,o=0,a;for(;o<r;){o>0&&await tn(s);try{let c=await t(o);if(e(c))return c}catch(c){a=c;}s=n(o),o++;}let i=a?`Max retry exceeded. ${a}`:"Max retry exceeded.";throw new Error(i)},ie=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function tn(t){return new Promise(e=>setTimeout(e,t))}var Ge=t=>Ve({operation:e=>t(e>0),maxRetries:2,backoffPolicy:ie.constant(1),isSuccess:e=>e?.status?.error_code!==429});function Ut(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function Me(t){let e,r=0;for(e=0;e<t.length;e++){let n=Ut(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function j(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 ce=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return j([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,s=new URLSearchParams(n);return j([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${s}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.SimplePriceResponseSchema)}};var Vt=coreCoingeckoSdk.getBasicCoingeckoHttp(),V,Y,J=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,V,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(s=>{let o=e[s];n[s]={},r.forEach(a=>{n[s]={[a]:{price:o?.[a],change24:o?.[`${a}_24h_change`],vol24:o?.[`${a}_24h_vol`],marketCap:o?.[`${a}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,V,e),chunkTKL4UUHE_cjs.d(this,Y,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,o=`getSimplePrice-${e?`${Me(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,V)?.get?.(o),n)return n;try{n=await Ge(a=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:a}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,V)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let s,a=`getPricesWithMarketDataByAddresses-${`${Me(e)}-${r}-${n}`}`;if(s=chunkTKL4UUHE_cjs.b(this,V)?.get?.(a),s)return s;try{s=await Ge(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch{s=void 0;}return chunkTKL4UUHE_cjs.b(this,V)?.set?.(a,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?new ce(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}):coreCoingeckoSdk.simpleTokenPrice(Vt,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD],marketCap:n=!1,vol24:s=!1,change24:o=!1,lastUpdated:a=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new ce(chunkTKL4UUHE_cjs.b(this,Y)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:s,include_24hr_change:o,include_last_updated_at:a});return this.transformSimplePriceResponse(l,r)}return coreCoingeckoSdk.simplePrice(Vt,{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:o,lastUpdated:a,shouldThrow:c})}};V=new WeakMap,Y=new WeakMap;var dn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",un="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",Gt=zod.object({date:zod.string(),usd:zod.record(zod.number())}),Ee=async()=>{try{return await j([dn],Gt)}catch{return await j([un],Gt)}};var Le=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e}),Mt=(t,e)=>({label:t,value:e,type:vmModuleTypes.DetailItemType.LINK}),ve=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var Fe=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var Oe=({name:t,version:e})=>{switch(t){case vmModuleTypes.AppName.CORE_MOBILE_IOS:case vmModuleTypes.AppName.CORE_MOBILE_ANDROID:case vmModuleTypes.AppName.CORE_WEB:case vmModuleTypes.AppName.CORE_EXTENSION:case vmModuleTypes.AppName.EXPLORER:return {"x-application-name":t,"x-application-version":e};case vmModuleTypes.AppName.OTHER:return}};function Lt(t,e,r){return new ethers.ethers.Contract(t,xt__default.default.abi).interface.encodeFunctionData("approve",[e,r])}var Ie=new Map,Ft=(t,e,r)=>(Ie.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s,approvalLimit:o})=>{let a=Ie.get(t);if(!a)throw rpcErrors.rpcErrors.resourceNotFound();let{signingData:i,displayData:c}=a,l={...i,data:{...i.data,maxFeePerGas:n??i.data.maxFeePerGas,maxPriorityFeePerGas:s??i.data.maxPriorityFeePerGas}},p={...c};if(typeof o=="string"){if(!o.startsWith("0x"))throw rpcErrors.rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let T=c.tokenApprovals;fn(T),hn(i.data.data);let g=T.approvals[0];l.data.data=Lt(g.token.address,g.spenderAddress,o),p.tokenApprovals={approvals:[{...g,value:o}],isEditable:!0};}let m={signingData:l,displayData:p};return Ie.set(t,m),m},cleanup:()=>Ie.delete(t)});function fn(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 hn(t){if((!t||t==="0x"?null:ke({data:t??void 0}))!=="approve")throw rpcErrors.rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var Ot=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{dappInfo:s,params:o}=t,a=Tt(o);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a.error}})};let i=a.data[0];if(!i)return {error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a.error}})};let c=x({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let N=await kt({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+N.toString(16);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let N=await Et({from:i.from,provider:c});i.nonce=String(N);}catch{return {error:rpcErrors.rpcErrors.internal("Unable to calculate nonce")}}let l=ke(i),{alert:p,balanceChange:m,tokenApprovals:T,isSimulationSuccessful:g}=await At({request:t,proxyApiUrl:n,chainId:e.chainId,params:i,dAppUrl:t.dappInfo.url,provider:c}),h="Approve Transaction";l==="approve"&&(h="Token Spend Approval");let y=[Mt("Website",s),ve("From",i.from),ve("To",i.to)];l&&y.push(Le("Type",l)),i.data&&y.push(Fe("Data",i.data));let E={title:h,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:y}],networkFeeSelector:!0,alert:p,balanceChange:m,tokenApprovals:T,isSimulationSuccessful:g},d={type:vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId??e.chainId}},{updateTx:k,cleanup:I}=Ft(t.requestId,d,E),A=await r.requestApproval({request:t,displayData:E,signingData:d,updateTx:k});if(I(),"error"in A)return {error:A.error};let oe;try{oe=await kn(c,A);}catch(N){return {error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:N}})}}return En({provider:c,txHash:oe,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId}),{result:oe}},kn=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]),En=async({provider:t,txHash:e,onTransactionConfirmed:r,onTransactionReverted:n,requestId:s})=>{try{(await t.waitForTransaction(e))?.status===1?r(e,s):n(e,s);}catch(o){console.error(o),n(e,s);}};async function Wt(t,e){let r=t.map(async(o,a)=>({index:a,result:await e(o)})),s=(await Promise.allSettled(r)).filter(o=>o.status==="fulfilled").map(o=>o).find(o=>o.value.result);return s?t[s.value.index]:void 0}function z(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function K(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let s=n.value;s.status==="fulfilled"?r[s.id]=s.value:r[s.id]={error:s.reason};}return r},{}))}function Re(t){return t.type===vmModuleTypes.TokenType.ERC20}var S,X,L,me,Pe=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:s}){chunkTKL4UUHE_cjs.c(this,S,void 0);chunkTKL4UUHE_cjs.c(this,X,void 0);chunkTKL4UUHE_cjs.c(this,L,void 0);chunkTKL4UUHE_cjs.c(this,me,void 0);chunkTKL4UUHE_cjs.d(this,S,e),chunkTKL4UUHE_cjs.d(this,X,r),chunkTKL4UUHE_cjs.d(this,L,n),chunkTKL4UUHE_cjs.d(this,me,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let s=x({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,S).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,S).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,S).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,S).pricingProviders?.coingecko.nativeTokenId,a=chunkTKL4UUHE_cjs.b(this,S).networkToken,i=new J({storage:chunkTKL4UUHE_cjs.b(this,X),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),c=o?await i.getSimplePrice({coinIds:[o],currencies:[n]}):{},l=c?.[o??""]?.[n]?.price??void 0,p=c?.[o??""]?.[n]?.marketCap??void 0,m=c?.[o??""]?.[n]?.vol24??void 0,T=c?.[o??""]?.[n]?.change24??void 0,g=await s.getBalance(r),h=new coreUtilsSdk.TokenUnit(g,a.decimals,a.symbol),y=l!==void 0?h.mul(l):void 0;return {...a,coingeckoId:o??"",type:vmModuleTypes.TokenType.NATIVE,balance:g,balanceDisplayValue:h.toDisplay(),balanceInCurrency:y?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:y?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:m,change24:T}}async listErc20Balances({chainId:e,address:r,currency:n}){let s=x({chainId:e,chainName:chunkTKL4UUHE_cjs.b(this,S).chainName,rpcUrl:chunkTKL4UUHE_cjs.b(this,S).rpcUrl,multiContractAddress:chunkTKL4UUHE_cjs.b(this,S).utilityAddresses?.multicall}),o=chunkTKL4UUHE_cjs.b(this,S).pricingProviders?.coingecko.assetPlatformId,a=chunkTKL4UUHE_cjs.b(this,S).pricingProviders?.coingecko.nativeTokenId,i=await he({chainId:Number(e),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),c=i.map(d=>d.address),l=[...i,...chunkTKL4UUHE_cjs.b(this,me)].filter(Re),p=async d=>{let A=await new ethers.ethers.Contract(d.address,xt__default.default.abi,s).balanceOf?.(r)||0n;return {...d,balance:A}},m=l.map(d=>z(p(d),d.address)),T=await K(m),g=new J({storage:chunkTKL4UUHE_cjs.b(this,X),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,L)}),h=o&&await g.getPricesByAddresses(c,o,n)||{},y=Object.keys(T),E={};for(let d=0;d<y.length;d++){let k=y[d];if(k===void 0)continue;let I=T[k];if(I===void 0||"error"in I){E[k]={error:`rpcService:getTokenWithBalance failed: ${I?.error??"unknown error"}`};continue}let A=h?.[a??""]?.[n]?.price??void 0,oe=h?.[a??""]?.[n]?.marketCap??void 0,N=h?.[a??""]?.[n]?.vol24??void 0,br=h?.[a??""]?.[n]?.change24??void 0,Je=new coreUtilsSdk.TokenUnit(I.balance,I.decimals,I.symbol),qe=A!==void 0?Je.mul(A):void 0;E[I.address.toLowerCase()]={...I,type:vmModuleTypes.TokenType.ERC20,balance:I.balance,balanceDisplayValue:Je.toDisplay(),balanceInCurrency:qe?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:qe?.toDisplay({fixedDp:2}),priceInCurrency:A,marketCap:oe,change24:br,vol24:N};}return E}async listNftBalances(){return {}}};S=new WeakMap,X=new WeakMap,L=new WeakMap,me=new WeakMap;var jt=async({addresses:t,currency:e,network:r,proxyApiUrl:n,customTokens:s=[],storage:o,balanceServices:a=[]})=>{let i=r.chainId,c=[...a,new Pe({network:r,storage:o,proxyApiUrl:n,customTokens:s})],l=await Wt(c,m=>m.isNetworkSupported(r.chainId)),p={};if(l){let m=[],T=[],g=[];t.forEach(d=>{m.push(z(l.getNativeBalance({address:d,currency:e.toUpperCase(),chainId:i}),d)),T.push(z(l.listErc20Balances({customTokens:s.filter(Re),currency:e.toUpperCase(),chainId:i,address:d,pageSize:100}),d)),g.push(z(l.listNftBalances({chainId:i,address:d}),d));});let h=await K(m),y=await K(T),E=await K(g);Object.keys(h).forEach(d=>{let k=h[d];if(!k||"error"in k){p[d]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let I=k.symbol;p[d]={[I]:k};}),Object.keys(y).forEach(d=>{let k=y[d];!k||"error"in k&&typeof k.error!="string"?p[d]={...p[d],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?p[d]={...p[d],error:`listErc20Balances failed: ${k.error}`}:p[d]={...p[d],...k};}),Object.keys(E).forEach(d=>{let k=E[d];!k||"error"in k&&typeof k.error!="string"?p[d]={...p[d],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?p[d]={...p[d],error:`listNftBalances failed: ${k.error}`}:p[d]={...p[d],...k};});}else t.forEach(m=>{p[m]={error:"unsupported network"};});return p};var Sn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Rn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Jt=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return Sn;case vmModuleTypes.Environment.DEV:return Rn}};var xn="https://ipfs.io";function qt(t,e=xn){if(!t)return "";try{return coreUtilsSdk.ipfsResolver(t,e)}catch{return t}}var wn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function zt(t,e="256"){let r=qt(t);return `${wn}/width=${e},fit/${r}`}var _=class extends Error{constructor(){super(...arguments);chunkTKL4UUHE_cjs.a(this,"message","Glacier is unhealthy. Try again later.");}},xe=class{constructor({glacierApiUrl:e,headers:r}){chunkTKL4UUHE_cjs.a(this,"glacierSdk");chunkTKL4UUHE_cjs.a(this,"isGlacierHealthy",!0);chunkTKL4UUHE_cjs.a(this,"supportedChainIds",[]);chunkTKL4UUHE_cjs.a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new glacierSdk.Glacier({BASE:e,HEADERS:r}),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(n=>n===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(r=>r.chainId),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:s}){try{let a=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new coreUtilsSdk.TokenUnit(a.balance,a.decimals,a.symbol),c=a.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:a.name,symbol:a.symbol,decimals:a.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:a.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:s??""}}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listErc721Balances({chainId:e,address:r}){let n,s=[];do try{let o=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...o.erc721TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}while(n);return s}async listErc1155Balances({chainId:e,address:r}){let n,s=[];do try{let o=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});s.push(...o.erc1155TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}while(n);return s}async listNftBalances({chainId:e,address:r}){let s=(await Promise.allSettled([this.listErc721Balances({chainId:e.toString(),address:r}),this.listErc1155Balances({chainId:e.toString(),address:r})])).filter(o=>o.status==="fulfilled").flatMap(o=>o.value.map(a=>[`${a.address}-${a.tokenId}`,{address:a.address,description:a.metadata.description??"",logoUri:a.metadata.imageUri??"",logoSmall:zt(a.metadata.imageUri??""),name:a.metadata.name??"",symbol:a.metadata.symbol??"",tokenId:a.tokenId,tokenUri:a.tokenUri,collectionName:"Unkown",balance:a.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?BigInt(a.balance):1,balanceDisplayValue:a.ercType===glacierSdk.Erc1155Token.ercType.ERC_1155?a.balance:"1",type:a.ercType===glacierSdk.Erc721Token.ercType.ERC_721?vmModuleTypes.TokenType.ERC721:vmModuleTypes.TokenType.ERC1155,metadata:{description:a.metadata.description,lastUpdatedTimestamp:a.metadata.metadataLastUpdatedTimestamp,properties:a.ercType===glacierSdk.Erc721Token.ercType.ERC_721?a.metadata.attributes:a.metadata.properties}}]));return Object.fromEntries(s)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:s}){try{let o=[],a;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:a});o.push(...Dn(i.erc20TokenBalances,Number(e))),a=i.nextPageToken;}while(a);return [...Nn(s),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:r,pageToken:n,pageSize:s})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}},Nn=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})),Dn=(t,e)=>t.map(r=>{let n=new coreUtilsSdk.TokenUnit(r.balance,r.decimals,r.symbol),s=n.toDisplay(),o=r.balanceValue?.value.toString(),a=r.price?.value,i=a!==void 0?n.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:o,balanceDisplayValue:s,balanceInCurrency:i,priceInCurrency:a,type:vmModuleTypes.TokenType.ERC20}});var We=t=>{let e="";e+=`Domain
26
+ `;for(let r in t.domain)e+=` ${r}: ${F(String(t.domain[r]))}
23
27
  `;e+=`
24
28
  Message
25
- `;for(let t in r.message)if(typeof r.message[t]=="object"&&!Array.isArray(r.message[t])){e+=` ${t}:
26
- `;for(let n in r.message[t])Array.isArray(r.message[t][n])?(e+=` ${n}:
27
- `,r.message[t][n].forEach((s,a)=>{e+=` ${a}: ${M(s)}
28
- `;})):e+=` ${n}: ${M(String(r.message[t][n]))}
29
- `;}else Array.isArray(r.message[t])?(e+=` ${t}:
30
- `,r.message[t].forEach((n,s)=>{e+=` ${s}:
31
- `;for(let a in n)Array.isArray(n[a])?(e+=` ${a}:
32
- `,n[a].forEach((o,i)=>{e+=` ${i}: ${M(o)}
33
- `;})):e+=` ${a}: ${M(String(n[a]))}
34
- `;})):e+=` ${t}: ${M(String(r.message[t]))}
35
- `;return e},Wt=r=>{let e="";return r.forEach(t=>{e+=`${t.name}:
36
- `,e+=`${M(String(t.value))}
29
+ `;for(let r in t.message)if(typeof t.message[r]=="object"&&!Array.isArray(t.message[r])){e+=` ${r}:
30
+ `;for(let n in t.message[r])Array.isArray(t.message[r][n])?(e+=` ${n}:
31
+ `,t.message[r][n].forEach((s,o)=>{e+=` ${o}: ${F(s)}
32
+ `;})):e+=` ${n}: ${F(String(t.message[r][n]))}
33
+ `;}else Array.isArray(t.message[r])?(e+=` ${r}:
34
+ `,t.message[r].forEach((n,s)=>{e+=` ${s}:
35
+ `;for(let o in n)Array.isArray(n[o])?(e+=` ${o}:
36
+ `,n[o].forEach((a,i)=>{e+=` ${i}: ${F(a)}
37
+ `;})):e+=` ${o}: ${F(String(n[o]))}
38
+ `;})):e+=` ${r}: ${F(String(t.message[r]))}
39
+ `;return e},Qt=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
40
+ `,e+=`${F(String(r.value))}
37
41
 
38
- `;}),e},M=r=>{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 r.split("").map(t=>e[t]||t).join("")};var pe=zod.z.string().describe("message"),N=zod.z.string().describe("address");var Ht=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([N,pe])});var jt=zod.z.object({name:zod.z.string(),type:zod.z.string()}),K=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(jt)}).catchall(zod.z.array(jt)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),Le=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(),Fe=K.or(Le),Yt=zod.z.union([zod.z.string().describe("data string"),K]),Jt=zod.z.union([zod.z.string().describe("data string"),Fe]),qt=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([N,Jt])}),zt=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([N,Jt])}),Kt=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([N,Yt])}),Xt=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([N,Yt])});var Zt=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([pe,N]),zod.z.tuple([pe,N,zod.z.string().optional().describe("password")])])});var Tn=zod.z.discriminatedUnion("method",[Zt,Ht,qt,zt,Kt,Xt]).transform((r,e)=>{let{method:t,params:n}=r;switch(t){case vmModuleTypes.RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:t};case vmModuleTypes.RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:t};case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA:case vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1:{let s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:t};try{let o=JSON.parse(a);return {data:Fe.parse(o),address:s,method:t}}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 s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:t};try{let o=JSON.parse(a);return {data:K.parse(o),address:s,method:t}}catch{return e.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}}});function Qt(r){return Tn.safeParse(r)}var er=r=>Le.safeParse(r).success,ri=r=>K.safeParse(r).success;var tr=r=>{try{let{EIP712Domain:e,...t}=r.types;return ethers.TypedDataEncoder.getPayload(r.domain,t,r.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var rr=async({request:r,network:e,approvalController:t,proxyApiUrl:n})=>{let s=Qt({method:r.method,params:r.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.rpcErrors.invalidParams({message:"Params are invalid",data:{cause:s.error}})};let{method:a,data:o,address:i}=s.data,c;(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(c=tr(o));let l,p,y,T;if(c&&!c.isValid&&(T={type:vmModuleTypes.AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),a===vmModuleTypes.RpcMethod.ETH_SIGN)l={type:a,account:i,data:o},p=o,y="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(a===vmModuleTypes.RpcMethod.PERSONAL_SIGN)l={type:a,account:i,data:o},p=ethers.toUtf8String(o);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:o},p=er(o)?Wt(o):Me(o);else if(a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||a===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4){l={type:a,account:i,data:o};let{types:E,primaryType:m,...h}=o;p=Me(h);}if(!l||!p)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let b=await St({request:r,proxyApiUrl:n,accountAddress:i,chainId:e.chainId,data:{method:a,params:r.params},dAppUrl:r.dappInfo.url}),f={title:"Sign Message",dAppInfo:{name:r.dappInfo.name,action:`${r.dappInfo.name} requests you to sign the following message`,logoUri:r.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[p]}],disclaimer:y,alert:b?.alert??T,balanceChange:b?.balanceChange,tokenApprovals:b?.tokenApprovals},g=await t.requestApproval({request:r,displayData:f,signingData:l});return "error"in g?{error:g.error}:"signedData"in g?{result:g.signedData}:{error:rpcErrors.rpcErrors.internal("No signed data returned")}};var nr=async(r,e)=>{try{return {result:await w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3}).send(r.method,r.params)}}catch(t){let n=t.info?.error?.message||t.error?.message||t.message;return {error:rpcErrors.rpcErrors.internal(n)}}};var or=async({accountIndex:r,xpub:e,walletType:t})=>{switch(t){case vmModuleTypes.WalletType.Mnemonic:case vmModuleTypes.WalletType.Ledger:case vmModuleTypes.WalletType.Keystone:return {[vmModuleTypes.NetworkVMType.EVM]:coreWalletsSdk.getAddressFromXPub(e,r)};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: ${t}`)}};var Q,Re=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.c(this,Q,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(s=>s.community_id).some(s=>s===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:t,tokenId:n}){let s=await fetch(`${this.baseUrl}/v1/user/token?id=${t}&chain_id=${e}&token_id=${n}`);if(s.ok)return await s.json();throw new Error(`${s.status}:${s.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:t}){let n=await fetch(`${this.baseUrl}/v1/user/all_token_list?id=${t}&chain_ids=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:t}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${t}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(chunkTKL4UUHE_cjs.b(this,Q).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,Q,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.b(this,Q)}};Q=new WeakMap;var x,Pe=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,x,void 0);chunkTKL4UUHE_cjs.d(this,x,new Re(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,x).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:t,currency:n}){if(!ethers.isHexString(t))throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid address: "+t);let a=(await chunkTKL4UUHE_cjs.b(this,x).getChainList()).find(E=>E.community_id===e)?.id;if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await chunkTKL4UUHE_cjs.b(this,x).getChainInfo({chainId:a});if(!o)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=o.native_token_id,c=await chunkTKL4UUHE_cjs.b(this,x).getTokenBalance({address:t,chainId:a,tokenId:i}),l=new coreUtilsSdk.TokenUnit(c.raw_amount,c.decimals,c.symbol),p=l.toDisplay(),T=(await he()).usd[n.toLowerCase()],b=T?T*c.price:void 0,f=b?l.mul(b).toDisplay({fixedDp:2}):void 0,g=b?l.mul(b).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c.name,symbol:c.symbol,decimals:c.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:c.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:g,balanceCurrencyDisplayValue:f,priceInCurrency:b}}async listErc20Balances({chainId:e,address:t,currency:n}){if(!ethers.isHexString(t))throw rpcErrors.rpcErrors.invalidParams("listErc20Balances: not valid address");let a=(await chunkTKL4UUHE_cjs.b(this,x).getChainList()).find(l=>l.community_id===e)?.id;if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await chunkTKL4UUHE_cjs.b(this,x).getChainInfo({chainId:a});if(!o)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=await chunkTKL4UUHE_cjs.b(this,x).getTokensBalanceOnChain({chainId:a,address:t}),c={};for(let l of i){if(l.id===o.native_token_id)continue;let p=new coreUtilsSdk.TokenUnit(l.raw_amount,l.decimals,l.symbol),y=p.toDisplay(),b=(await he()).usd[n.toLowerCase()],f=b?b*l.price:void 0,g=f?p.mul(f).toDisplay({fixedDp:2}):void 0,E=f?p.mul(f).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:o.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:g,balanceDisplayValue:y,balanceInCurrency:E,priceInCurrency:f,type:vmModuleTypes.TokenType.ERC20};}return c}async listNftBalances(){return {}}};x=new WeakMap;var te,ue,U,re,lr=class{constructor({approvalController:e,environment:t,appInfo:n}){chunkTKL4UUHE_cjs.c(this,te,void 0);chunkTKL4UUHE_cjs.c(this,ue,void 0);chunkTKL4UUHE_cjs.c(this,U,void 0);chunkTKL4UUHE_cjs.c(this,re,void 0);let{glacierApiUrl:s,proxyApiUrl:a}=Vt(t);chunkTKL4UUHE_cjs.d(this,te,new Ie({glacierApiUrl:s,headers:Ve(n)})),chunkTKL4UUHE_cjs.d(this,ue,new Pe({proxyApiUrl:a})),chunkTKL4UUHE_cjs.d(this,U,a),chunkTKL4UUHE_cjs.d(this,re,e);}getProvider(e){return w({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:t,walletType:n}){return or({accountIndex:e,xpub:t,walletType:n})}getBalances({addresses:e,network:t,currency:n,customTokens:s,storage:a}){return Bt({addresses:e,currency:n,network:t,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,U),customTokens:s,balanceServices:[chunkTKL4UUHE_cjs.b(this,te),chunkTKL4UUHE_cjs.b(this,ue)],storage:a})}getManifest(){let e=vmModuleTypes.parseManifest(mt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:t,chainName:n,rpcUrl:s,utilityAddresses:a}=e;return He({chainId:t,chainName:n,rpcUrl:s,multiContractAddress:a?.multicall})}getTransactionHistory(e){let{network:t,address:n,nextPageToken:s,offset:a}=e,{chainId:o,isTestnet:i,networkToken:c,explorerUrl:l=""}=t;return pt({chainId:o,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:s,offset:a,glacierService:chunkTKL4UUHE_cjs.b(this,te)})}getTokens(e){let{chainId:t}=e;return fe({chainId:t,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,U)})}async onRpcRequest(e,t){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return Nt({request:e,network:t,approvalController:chunkTKL4UUHE_cjs.b(this,re),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,U)});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 rr({request:e,network:t,approvalController:chunkTKL4UUHE_cjs.b(this,re),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,U)});default:return Cn(e.method)?nr(e,t):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};te=new WeakMap,ue=new WeakMap,U=new WeakMap,re=new WeakMap;var Cn=r=>r.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(r);
42
+ `;}),e},F=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 ue=zod.z.string().describe("message"),C=zod.z.string().describe("address");var tr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.ETH_SIGN),params:zod.z.tuple([C,ue])});var rr=zod.z.object({name:zod.z.string(),type:zod.z.string()}),Z=zod.z.object({types:zod.z.object({EIP712Domain:zod.z.array(rr)}).catchall(zod.z.array(rr)),primaryType:zod.z.string(),domain:zod.z.record(zod.z.any()),message:zod.z.record(zod.z.any())}),He=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(),je=Z.or(He),nr=zod.z.union([zod.z.string().describe("data string"),Z]),ar=zod.z.union([zod.z.string().describe("data string"),je]),or=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA),params:zod.z.tuple([C,ar])}),sr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1),params:zod.z.tuple([C,ar])}),ir=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3),params:zod.z.tuple([C,nr])}),cr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4),params:zod.z.tuple([C,nr])});var lr=zod.z.object({method:zod.z.literal(vmModuleTypes.RpcMethod.PERSONAL_SIGN),params:zod.z.union([zod.z.tuple([ue,C]),zod.z.tuple([ue,C,zod.z.string().optional().describe("password")])])});var Un=zod.z.discriminatedUnion("method",[lr,tr,or,sr,ir,cr]).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 s=n[0],o=n[1];if(typeof o!="string")return {data:o,address:s,method:r};try{let a=JSON.parse(o);return {data:je.parse(a),address:s,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 s=n[0],o=n[1];if(typeof o!="string")return {data:o,address:s,method:r};try{let a=JSON.parse(o);return {data:Z.parse(a),address:s,method:r}}catch{return e.addIssue({code:zod.z.ZodIssueCode.custom,message:"param is not a valid json"}),zod.z.NEVER}}}});function pr(t){return Un.safeParse(t)}var mr=t=>He.safeParse(t).success,Vi=t=>Z.safeParse(t).success;var dr=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 ur=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let s=pr({method:t.method,params:t.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.rpcErrors.invalidParams({message:"Params are invalid",data:{cause:s.error}})};let{method:o,data:a,address:i}=s.data,c;(o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4)&&(c=dr(a));let l,p,m,T;if(c&&!c.isValid&&(T={type:vmModuleTypes.AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),o===vmModuleTypes.RpcMethod.ETH_SIGN)l={type:o,account:i,data:a},p=a,m="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(o===vmModuleTypes.RpcMethod.PERSONAL_SIGN)l={type:o,account:i,data:a},p=ethers.toUtf8String(a);else if(o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA||o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V1)l={type:o,account:i,data:a},p=mr(a)?Qt(a):We(a);else if(o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V3||o===vmModuleTypes.RpcMethod.SIGN_TYPED_DATA_V4){l={type:o,account:i,data:a};let{types:E,primaryType:d,...k}=a;p=We(k);}if(!l||!p)return {success:!1,error:rpcErrors.rpcErrors.internal("Unable to generate signing data")};let g=await Bt({request:t,proxyApiUrl:n,accountAddress:i,chainId:e.chainId,data:{method:o,params:t.params},dAppUrl:t.dappInfo.url}),h={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} requests you 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:[p]}],disclaimer:m,alert:g?.alert??T,balanceChange:g?.balanceChange,tokenApprovals:g?.tokenApprovals},y=await r.requestApproval({request:t,displayData:h,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.rpcErrors.internal("No signed data returned")}};var gr=async(t,e)=>{try{return {result:await x({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 fr=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 te,Ce=class{constructor(e){this.baseUrl=e;chunkTKL4UUHE_cjs.c(this,te,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(s=>s.community_id).some(s=>s===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let s=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(s.ok)return await s.json();throw new Error(`${s.status}:${s.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/all_token_list?id=${r}&chain_ids=${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,te).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)chunkTKL4UUHE_cjs.d(this,te,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return chunkTKL4UUHE_cjs.b(this,te)}};te=new WeakMap;var w,Ae=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,w,void 0);chunkTKL4UUHE_cjs.d(this,w,new Ce(`${e}/proxy/debank`));}async isNetworkSupported(e){return chunkTKL4UUHE_cjs.b(this,w).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let o=(await chunkTKL4UUHE_cjs.b(this,w).getChainList()).find(E=>E.community_id===e)?.id;if(!o)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await chunkTKL4UUHE_cjs.b(this,w).getChainInfo({chainId:o});if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=a.native_token_id,c=await chunkTKL4UUHE_cjs.b(this,w).getTokenBalance({address:r,chainId:o,tokenId:i}),l=new coreUtilsSdk.TokenUnit(c.raw_amount,c.decimals,c.symbol),p=l.toDisplay(),T=(await Ee()).usd[n.toLowerCase()],g=T?T*c.price:void 0,h=g?l.mul(g).toDisplay({fixedDp:2}):void 0,y=g?l.mul(g).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c.name,symbol:c.symbol,decimals:c.decimals,type:vmModuleTypes.TokenType.NATIVE,logoUri:c.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:y,balanceCurrencyDisplayValue:h,priceInCurrency:g}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!ethers.isHexString(r))throw rpcErrors.rpcErrors.invalidParams("listErc20Balances: not valid address");let o=(await chunkTKL4UUHE_cjs.b(this,w).getChainList()).find(l=>l.community_id===e)?.id;if(!o)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await chunkTKL4UUHE_cjs.b(this,w).getChainInfo({chainId:o});if(!a)throw rpcErrors.rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=await chunkTKL4UUHE_cjs.b(this,w).getTokensBalanceOnChain({chainId:o,address:r}),c={};for(let l of i){if(l.id===a.native_token_id)continue;let p=new coreUtilsSdk.TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),g=(await Ee()).usd[n.toLowerCase()],h=g?g*l.price:void 0,y=h?p.mul(h).toDisplay({fixedDp:2}):void 0,E=h?p.mul(h).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:a.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:y,balanceDisplayValue:m,balanceInCurrency:E,priceInCurrency:h,type:vmModuleTypes.TokenType.ERC20};}return c}async listNftBalances(){return {}}};w=new WeakMap;var ne,fe,B,ae,Er=class{constructor({approvalController:e,environment:r,appInfo:n}){chunkTKL4UUHE_cjs.c(this,ne,void 0);chunkTKL4UUHE_cjs.c(this,fe,void 0);chunkTKL4UUHE_cjs.c(this,B,void 0);chunkTKL4UUHE_cjs.c(this,ae,void 0);let{glacierApiUrl:s,proxyApiUrl:o}=Jt(r);chunkTKL4UUHE_cjs.d(this,ne,new xe({glacierApiUrl:s,headers:Oe(n)})),chunkTKL4UUHE_cjs.d(this,fe,new Ae({proxyApiUrl:o})),chunkTKL4UUHE_cjs.d(this,B,o),chunkTKL4UUHE_cjs.d(this,ae,e);}getProvider(e){return x({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return fr({accountIndex:e,xpub:r,walletType:n})}getBalances({addresses:e,network:r,currency:n,customTokens:s,storage:o}){return jt({addresses:e,currency:n,network:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B),customTokens:s,balanceServices:[chunkTKL4UUHE_cjs.b(this,ne),chunkTKL4UUHE_cjs.b(this,fe)],storage:o})}getManifest(){let e=vmModuleTypes.parseManifest(ht);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:s,utilityAddresses:o,caipId:a}=e;return Ke({chainId:r,chainName:n,rpcUrl:s,multiContractAddress:o?.multicall,caipId:a,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:s,offset:o}=e,{chainId:a,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return ft({chainId:a,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:s,offset:o,glacierService:chunkTKL4UUHE_cjs.b(this,ne)})}getTokens(e){let{chainId:r}=e;return he({chainId:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.ETH_SEND_TRANSACTION:return Ot({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,ae),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)});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 ur({request:e,network:r,approvalController:chunkTKL4UUHE_cjs.b(this,ae),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,B)});default:return jn(e.method)?gr(e,r):{error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ne=new WeakMap,fe=new WeakMap,B=new WeakMap,ae=new WeakMap;var jn=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
39
43
 
40
- exports.ERC20TransactionType = ge;
41
- exports.EvmModule = lr;
42
- exports.NonContractCallTypes = it;
43
- exports.addIdToPromise = J;
44
- exports.isTypedData = ri;
45
- exports.isTypedDataV1 = er;
46
- exports.settleAllIdPromises = q;
44
+ exports.ERC20TransactionType = M;
45
+ exports.EvmModule = Er;
46
+ exports.NonContractCallTypes = ut;
47
+ exports.addIdToPromise = z;
48
+ exports.isTypedData = Vi;
49
+ exports.isTypedDataV1 = mr;
50
+ exports.settleAllIdPromises = K;
47
51
  //# sourceMappingURL=out.js.map
48
52
  //# sourceMappingURL=index.cjs.map