@avalabs/evm-module 0.7.3 → 0.8.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 +30 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +20 -18
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -5,31 +5,33 @@ import { JsonRpcBatchInternal, getEvmAddressFromPubKey, getAddressFromXPub } fro
|
|
|
5
5
|
import { Network, toUtf8String, isHexString, Interface, TypedDataEncoder, ethers } from 'ethers';
|
|
6
6
|
import { TokenUnit, numberToBN, balanceToDisplayValue, ipfsResolver } from '@avalabs/core-utils-sdk';
|
|
7
7
|
import { getNormalTxs, getErc20Txs } from '@avalabs/core-etherscan-sdk';
|
|
8
|
-
import
|
|
8
|
+
import Br from 'lodash.startcase';
|
|
9
9
|
import { z as z$1, object, string, record, number } from 'zod';
|
|
10
|
-
import
|
|
10
|
+
import kt from '@blockaid/client';
|
|
11
|
+
import It from 'xss';
|
|
12
|
+
import Rt from '@openzeppelin/contracts/build/contracts/ERC20.json';
|
|
11
13
|
import { getBasicCoingeckoHttp, VsCurrencyType, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
|
|
12
14
|
import { Glacier, Erc1155Token, Erc721Token } from '@avalabs/glacier-sdk';
|
|
13
15
|
|
|
14
|
-
async function fe({chainId:r,proxyApiUrl:e}){let t=await fetch(`${e}/tokens?evmChainId=${r}`);if(!t.ok)throw 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 JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},hr(n,gr),new 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.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 TokenUnit(r.value,e.decimals,e.symbol).toDisplay(),p=a?TransactionType.SEND: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: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 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?TransactionType.SEND: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: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 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 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?TransactionType.SWAP:p?TransactionType.SEND:y?TransactionType.RECEIVE:T?TransactionType.NFT_BUY:b?TransactionType.APPROVE:h?TransactionType.NFT_SEND:k?TransactionType.NFT_RECEIVE:f?TransactionType.TRANSFER:g?TransactionType.AIRDROP:E?TransactionType.UNWRAP:m?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function Ze(r){return r===TokenType.ERC721||r===TokenType.ERC1155}var xr=(r="")=>r.includes("(")?wr(r.split("(",1)[0]):r;var et=(r,{nativeTransaction:e,erc20Transfers:t,erc721Transfers:n},s)=>{let a=r===TransactionType.TRANSFER,o=r===TransactionType.SEND,i=r===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 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 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:TokenType.NATIVE});}return e?.forEach(o=>{let i=o.erc20Token.decimals,l=new 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: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: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: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=[TransactionType.SEND,TransactionType.RECEIVE,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=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42),data:z$1.string().optional(),value:z$1.string().startsWith("0x").optional(),gas:z$1.string().startsWith("0x").optional(),gasPrice:z$1.string().startsWith("0x").optional(),maxFeePerGas:z$1.string().startsWith("0x").optional(),maxPriorityFeePerGas:z$1.string().startsWith("0x").optional(),nonce:z$1.string().optional(),chainId:z$1.string().optional()}),Ur=z$1.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({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({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[AlertType.WARNING]:c.result_type==="Malicious"&&(a=W[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[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===TokenType.ERC20&&r.method===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=numberToBN(o.value,s.decimals);i=balanceToDisplayValue(c,s.decimals);}else isHexString(o.value)&&(i=parseInt(o.value,16).toString());else "type"in s&&s.type===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: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:TokenType.ERC1155,address:r.address,logoUri:r.logo_url,name:r.name,symbol:r.symbol}:r.type==="ERC721"?e={type:TokenType.ERC721,address:r.address,logoUri:r.logo_url,name:r.name,symbol:r.symbol}:r.type==="NONERC"&&(e={type: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[AlertType.WARNING]:l.result_type==="Malicious"&&(o=W[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[AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}},W={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[AlertType.DANGER]:{type: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 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"}}],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"}}],SimplePriceResponseSchema)}};var wt=getBasicCoingeckoHttp(),D,H,j=class{constructor({storage:e,proxyApiUrl:t}){c(this,D,void 0);c(this,H,void 0);a(this,"transformSimplePriceResponse",(e,t=[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});d(this,D,e),d(this,H,t);}async getSimplePrice({coinIds:e=[],currencies:t=[VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${De(e)}-${t.toString()}`:`${t.toString()}`}`;if(n=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 b(this,D)?.set?.(a,n),n}async getPricesByAddresses(e,t,n=VsCurrencyType.USD){let s,o=`getPricesWithMarketDataByAddresses-${`${De(e)}-${t}-${n}`}`;if(s=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 b(this,D)?.set?.(o,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:t,currency:n=VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?new oe(b(this,H)).simplePriceByContractAddresses({id:e,contract_addresses:t,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):simpleTokenPrice(wt,{assetPlatformId:e,tokenAddresses:t,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:t=[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(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 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=object({date:string(),usd:record(number())}),he=async()=>{try{return await $([en],xt)}catch{return await $([tn],xt)}};var Be=(r,e,t="horizontal")=>({label:r,alignment:t,type:DetailItemType.TEXT,value:e}),Ct=(r,e)=>({label:r,value:e,type:DetailItemType.LINK}),ke=(r,e)=>({label:r,type:DetailItemType.ADDRESS,value:e});var Ue=(r,e)=>({label:r,type:DetailItemType.DATA,value:e});var Ve=({name:r,version:e})=>{switch(r){case AppName.CORE_MOBILE_IOS:case AppName.CORE_MOBILE_ANDROID:case AppName.CORE_WEB:case AppName.CORE_EXTENSION:case AppName.EXPLORER:return {"x-application-name":r,"x-application-version":e};case 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.invalidParams({message:"Transaction params are invalid",data:{cause:o.error}})};let i=o.data[0];if(!i)return {error: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.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.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: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.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===TokenType.ERC20}var S,z,V,ce,ve=class{constructor({network:e,storage:t,proxyApiUrl:n,customTokens:s}){c(this,S,void 0);c(this,z,void 0);c(this,V,void 0);c(this,ce,void 0);d(this,S,e),d(this,z,t),d(this,V,n),d(this,ce,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:t,currency:n}){let s=w({chainId:e,chainName:b(this,S).chainName,rpcUrl:b(this,S).rpcUrl,multiContractAddress:b(this,S).utilityAddresses?.multicall}),a=b(this,S).pricingProviders?.coingecko.nativeTokenId,o=b(this,S).networkToken,i=new j({storage:b(this,z),proxyApiUrl: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$1=await s.getBalance(t),f=new TokenUnit(b$1,o.decimals,o.symbol),g=l!==void 0?f.mul(l):void 0;return {...o,coingeckoId:a??"",type:TokenType.NATIVE,balance:b$1,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:b(this,S).chainName,rpcUrl:b(this,S).rpcUrl,multiContractAddress:b(this,S).utilityAddresses?.multicall}),a=b(this,S).pricingProviders?.coingecko.assetPlatformId,o=b(this,S).pricingProviders?.coingecko.nativeTokenId,i=await fe({chainId:Number(e),proxyApiUrl:b(this,V)}),c=i.map(m=>m.address),l=[...i,...b(this,ce)].filter(Ee),p=async m=>{let ne=await new 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$1=new j({storage:b(this,z),proxyApiUrl:b(this,V)}),f=a&&await b$1.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 TokenUnit(k.balance,k.decimals,k.symbol),$e=ne!==void 0?We.mul(ne):void 0;E[k.address.toLowerCase()]={...k,type: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 Environment.PRODUCTION:return cn;case Environment.DEV:return ln}};var mn="https://ipfs.io";function Mt(r,e=mn){if(!r)return "";try{return 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);a(this,"message","Glacier is unhealthy. Try again later.");}},Ie=class{constructor({glacierApiUrl:e,headers:t}){a(this,"glacierSdk");a(this,"isGlacierHealthy",!0);a(this,"supportedChainIds",[]);a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new 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 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: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===Erc1155Token.ercType.ERC_1155?BigInt(o.balance):1,balanceDisplayValue:o.ercType===Erc1155Token.ercType.ERC_1155?o.balance:"1",type:o.ercType===Erc721Token.ercType.ERC_721?TokenType.ERC721:TokenType.ERC1155,metadata:{description:o.metadata.description,lastUpdatedTimestamp:o.metadata.metadataLastUpdatedTimestamp,properties:o.ercType===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: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 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:TokenType.ERC20}});var Me=r=>{let e="";e+=`Domain
|
|
15
|
-
`;for(let
|
|
16
|
+
async function he({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${t}`);return r.json()}var Ir=process.env.GLACIER_API_KEY,x=t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:s,pollingInterval:o=2e3}=t,a=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},Rr(n,Ir),new Network(r,e));return a.pollingInterval=o,a},Sr=["glacier-api.avax.network","proxy-api.avax.network"];function Rr(t,e){let r=new URL(t);if(e&&Sr.includes(r.hostname)){let n=r.searchParams;return n.set("token",e),r.search=n.toString(),r.toString()}return t}var Ae={LOW:1n,MEDIUM:4n,HIGH:6n},De=500000000n;async function qe({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n}){let s=x({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n}),{maxFeePerGas:o}=await s.getFeeData();if(!o)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let a=De*Ae.LOW,i=De*Ae.MEDIUM,c=De*Ae.HIGH;return {baseFee:o,low:{maxFeePerGas:o+a,maxPriorityFeePerGas:a},medium:{maxFeePerGas:o+i,maxPriorityFeePerGas:i},high:{maxFeePerGas:o+c,maxPriorityFeePerGas:c},isFixedFee:!1}}function W(t,e,r="tx"){return `${t}/${r}/${e}`}var Ke=({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 TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=o?TransactionType.SEND:TransactionType.RECEIVE,{from:m,to:k,gasPrice:f,gasUsed:h,hash:y}=t,E=W(n,y);return {isIncoming:!o,isOutgoing:o,isContractCall:wr(t),timestamp:a,hash:y,isSender:o,from:m,to:k,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:TokenType.NATIVE}],gasUsed:h,gasPrice:f,chainId:r.toString(),txType:p,explorerLink:E}};function wr(t){return t.input!=="0x"}function Ze({tx:t,address:e,explorerUrl:r,chainId:n}){let s=t.from.toLowerCase()===e.toLowerCase(),o=parseInt(t.timeStamp)*1e3,i=new TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:m,hash:k,tokenDecimal:f,tokenName:h,tokenSymbol:y}=t,E=s?TransactionType.SEND:TransactionType.RECEIVE,d=W(r,k);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:o,hash:k,isSender:s,from:c,to:l,tokens:[{decimal:f,name:h,symbol:y,type:TokenType.ERC20,amount:i}],gasUsed:m,gasPrice:p,chainId:n.toString(),txType:E,explorerLink:d}}var Qe=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 getNormalTxs(s,!t,{page:c,offset:a}):[]).map(y=>Ke({tx:y,chainId:n,networkToken:e,explorerUrl:r,address:s})),m=(l.includes("erc20")?await getErc20Txs(s,!t,void 0,{page:c,offset:a}):[]).map(y=>Ze({tx:y,address:s,explorerUrl:r,chainId:n})),k=m.map(y=>y.hash),f=p.filter(y=>!k.includes(y.hash)),h={queries:[],page:c+1};return p.length&&h.queries.push("normal"),m.length&&h.queries.push("erc20"),{transactions:[...f,...m],nextPageToken:h.queries.length?JSON.stringify(h):""}};var et=t=>t===1||t===5||t===4||t===11155111;var nt=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s,o)=>{let a=!e&&!r&&!n,i=Ur(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,k=i==="Market Buy Orders With Eth"||i==="Buy NFT",f=i==="Approve",h=i.toLowerCase().includes("transfer"),y=i.toLowerCase().includes("airdrop"),E=i.toLowerCase().includes("unwrap"),d=i==="Fill Order",T=!!o[0]&&rt(o[0].type)&&o[0].from?.address.toLowerCase()===c,I=!!o[0]&&rt(o[0].type)&&o[0].to?.address.toLowerCase()===c;return l?TransactionType.SWAP:p?TransactionType.SEND:m?TransactionType.RECEIVE:k?TransactionType.NFT_BUY:f?TransactionType.APPROVE:T?TransactionType.NFT_SEND:I?TransactionType.NFT_RECEIVE:h?TransactionType.TRANSFER:y?TransactionType.AIRDROP:E?TransactionType.UNWRAP:d?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function rt(t){return t===TokenType.ERC721||t===TokenType.ERC1155}var Ur=(t="")=>t.includes("(")?Br(t.split("(",1)[0]):t;var at=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},s)=>{let o=t===TransactionType.TRANSFER,a=t===TransactionType.SEND,i=t===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 ot(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Gr="https://ipfs.io";function $(t,e=Gr){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}async function Lr(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function st(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 Lr($(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var Mr="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function it(t,e="256"){let r=$(t);return `${Mr}/width=${e},fit/${r}`}var pt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},s)=>{let o=[];if(t.value!=="0"){let a=s.decimals,c=new 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:TokenType.NATIVE});}return e?.forEach(a=>{let i=a.erc20Token.decimals,l=new 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:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async a=>{let i=a.erc721Token,c=await lt(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:TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async a=>{let i=a.erc1155Token,c=await lt(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:TokenType.ERC1155});})),o},lt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?$(e):e;{let[r,n]=await ot(st(t));return n?"":r.image?it(r.image):""}};var mt=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],L=(a=>(a.TOTAL_SUPPLY="totalSupply",a.BALANCE_OF="balanceOf",a.TRANSFER="transfer",a.TRANSFER_FROM="transferFrom",a.APPROVE="approve",a.ALLOWANCE="allowance",a))(L||{});var dt=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:s})=>{let o=await pt(t,r),a=nt(t,s,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:m}=at(a,t,s),{blockTimestamp:k,txHash:f,gasPrice:h,gasUsed:y}=t.nativeTransaction,E=W(e,f);return {isContractCall:!mt.includes(a),isIncoming:c,isOutgoing:i,isSender:l,timestamp:k*1e3,hash:f,from:p,to:m,tokens:o,gasPrice:h,gasUsed:y,chainId:n.toString(),txType:a,explorerLink:E}};var ut=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=>dt({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 gt=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:s,nextPageToken:o,offset:a,glacierService:i})=>et(t)?Qe({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:o,offset:a}):i.isHealthy()?ut({networkToken:r,explorerUrl:n,chainId:t,address:s,nextPageToken:o,offset:a,glacierService:i}):{transactions:[],nextPageToken:""};var yt={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 Or=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42),data:z$1.string().optional(),value:z$1.string().startsWith("0x").optional(),gas:z$1.string().startsWith("0x").optional(),gasPrice:z$1.string().startsWith("0x").optional(),maxFeePerGas:z$1.string().startsWith("0x").optional(),maxPriorityFeePerGas:z$1.string().startsWith("0x").optional(),nonce:z$1.string().optional(),chainId:z$1.string().optional()}),Wr=z$1.array(Or).length(1),ft=t=>Wr.safeParse(t);var ht=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 Tt=async({from:t,provider:e})=>e.getTransactionCount(t);var Et="DUMMY_API_KEY",vt=async({proxyApiUrl:t,chainId:e,params:r,domain:n})=>new kt({baseURL:t+"/proxy/blockaid/",apiKey:Et}).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}}),bt=async({proxyApiUrl:t,chainId:e,accountAddress:r,data:n,domain:s})=>new kt({baseURL:t+"/proxy/blockaid/",apiKey:Et}).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 Pt=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,Rt.abi,r),s=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),o=It(s[0]),a=It(s[1]),i=parseInt(s[2]),c={type:TokenType.ERC20,name:o,chainId:e,symbol:a,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.Interface(Rt.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 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 Ct=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 vt({proxyApiUrl:s,chainId:n,params:r,domain:e});!p||p.result_type==="Error"||p.result_type==="Warning"?a=se[AlertType.WARNING]:p.result_type==="Malicious"&&(a=se[AlertType.DANGER]),m?.status==="Success"&&(l=!0,c=wt(t,m.account_summary.exposures),i=Nt(m.account_summary.assets_diffs));}catch(p){console.error("processTransactionSimulation error",p);}if(!l&&r.to){let p=await Pt(r,n,o);i=p.balanceChange,c=p.tokenApprovals;}return {alert:a,balanceChange:i,tokenApprovals:c,isSimulationSuccessful:l}},wt=(t,e)=>{let r=[];for(let s of e){let o=At(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===TokenType.ERC20&&t.method===RpcMethod.ETH_SEND_TRANSACTION,approvals:r}},Nt=t=>{let e=xt(t,"in"),r=xt(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},xt=(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?At(n):zr(n);if(!s)return;let o=r[e].map(a=>{let i;if("value"in a&&a.value)if("decimals"in s){let c=numberToBN(a.value,s.decimals);i=balanceToDisplayValue(c,s.decimals);}else isHexString(a.value)&&(i=parseInt(a.value,16).toString());else "type"in s&&s.type===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),At=t=>{let e;return t.type==="ERC20"?e={type: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:TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:TokenType.NONERC,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}),e},zr=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Dt=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:s,proxyApiUrl:o})=>{let a,i,c;try{let{validation:l,simulation:p}=await bt({proxyApiUrl:o,chainId:n,accountAddress:r,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?a=se[AlertType.WARNING]:l.result_type==="Malicious"&&(a=se[AlertType.DANGER]),p?.status==="Success"&&(c=wt(t,p.account_summary.exposures),i=Nt(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),a=se[AlertType.WARNING];}return {alert:a,balanceChange:i,tokenApprovals:c}},se={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[AlertType.DANGER]:{type: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 Interface(Rt.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Zr(n)?n:void 0}catch{return}};function Zr(t){return Object.values(L).includes(t)}var Ue=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=ie.exponential()})=>{let s=0,o=0,a;for(;o<r;){o>0&&await Qr(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 Qr(t){return new Promise(e=>setTimeout(e,t))}var Ve=t=>Ue({operation:e=>t(e>0),maxRetries:2,backoffPolicy:ie.constant(1),isSuccess:e=>e?.status?.error_code!==429});function _t(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function Ge(t){let e,r=0;for(e=0;e<t.length;e++){let n=_t(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"}}],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"}}],SimplePriceResponseSchema)}};var Bt=getBasicCoingeckoHttp(),U,Y,J=class{constructor({storage:e,proxyApiUrl:r}){c(this,U,void 0);c(this,Y,void 0);a(this,"transformSimplePriceResponse",(e,r=[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});d(this,U,e),d(this,Y,r);}async getSimplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD]}){let n,o=`getSimplePrice-${e?`${Ge(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=b(this,U)?.get?.(o),n)return n;try{n=await Ve(a=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:a}));}catch{n=void 0;}return b(this,U)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let s,a=`getPricesWithMarketDataByAddresses-${`${Ge(e)}-${r}-${n}`}`;if(s=b(this,U)?.get?.(a),s)return s;try{s=await Ve(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch{s=void 0;}return b(this,U)?.set?.(a,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?new ce(b(this,Y)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}):simpleTokenPrice(Bt,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[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(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 simplePrice(Bt,{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:o,lastUpdated:a,shouldThrow:c})}};U=new WeakMap,Y=new WeakMap;var pn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",mn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",Ut=object({date:string(),usd:record(number())}),Ee=async()=>{try{return await j([pn],Ut)}catch{return await j([mn],Ut)}};var Le=(t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),Vt=(t,e)=>({label:t,value:e,type:DetailItemType.LINK}),be=(t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e});var Me=(t,e)=>({label:t,type:DetailItemType.DATA,value:e});var Fe=({name:t,version:e})=>{switch(t){case AppName.CORE_MOBILE_IOS:case AppName.CORE_MOBILE_ANDROID:case AppName.CORE_WEB:case AppName.CORE_EXTENSION:case AppName.EXPLORER:return {"x-application-name":t,"x-application-version":e};case AppName.OTHER:return}};function Gt(t,e,r){return new ethers.Contract(t,Rt.abi).interface.encodeFunctionData("approve",[e,r])}var Ie=new Map,Lt=(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.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.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let k=c.tokenApprovals;gn(k),yn(i.data.data);let f=k.approvals[0];l.data.data=Gt(f.token.address,f.spenderAddress,o),p.tokenApprovals={approvals:[{...f,value:o}],isEditable:!0};}let m={signingData:l,displayData:p};return Ie.set(t,m),m},cleanup:()=>Ie.delete(t)});function gn(t){if(!t||!t.isEditable||t.approvals.length!==1)throw rpcErrors.invalidInput("Cannot edit the token approval for this request. Please start a new request instead.")}function yn(t){if((!t||t==="0x"?null:ke({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var Mt=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{dappInfo:s,params:o}=t,a=ft(o);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a.error}})};let i=a.data[0];if(!i)return {error: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 A=await ht({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+A.toString(16);}catch{return {error:rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let A=await Tt({from:i.from,provider:c});i.nonce=String(A);}catch{return {error:rpcErrors.internal("Unable to calculate nonce")}}let l=ke(i),{alert:p,balanceChange:m,tokenApprovals:k,isSimulationSuccessful:f}=await Ct({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=[Vt("Website",s),be("From",i.from),be("To",i.to)];l&&y.push(Le("Type",l)),i.data&&y.push(Me("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:k,isSimulationSuccessful:f},d={type:RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId??e.chainId}},{updateTx:T,cleanup:I}=Lt(t.requestId,d,E),N=await r.requestApproval({request:t,displayData:E,signingData:d,updateTx:T});if(I(),"error"in N)return {error:N.error};let oe;try{oe=await hn(c,N);}catch(A){return {error:rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:A}})}}return Tn({provider:c,txHash:oe,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId}),{result:oe}},hn=async(t,e)=>"txHash"in e?e.txHash:await t.send("eth_sendRawTransaction",[e.signedData]),Tn=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 Ft(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===TokenType.ERC20}var S,X,M,me,Pe=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:s}){c(this,S,void 0);c(this,X,void 0);c(this,M,void 0);c(this,me,void 0);d(this,S,e),d(this,X,r),d(this,M,n),d(this,me,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let s=x({chainId:e,chainName:b(this,S).chainName,rpcUrl:b(this,S).rpcUrl,multiContractAddress:b(this,S).utilityAddresses?.multicall}),o=b(this,S).pricingProviders?.coingecko.nativeTokenId,a=b(this,S).networkToken,i=new J({storage:b(this,X),proxyApiUrl:b(this,M)}),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,k=c?.[o??""]?.[n]?.change24??void 0,f=await s.getBalance(r),h=new TokenUnit(f,a.decimals,a.symbol),y=l!==void 0?h.mul(l):void 0;return {...a,coingeckoId:o??"",type:TokenType.NATIVE,balance:f,balanceDisplayValue:h.toDisplay(),balanceInCurrency:y?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:y?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:m,change24:k}}async listErc20Balances({chainId:e,address:r,currency:n}){let s=x({chainId:e,chainName:b(this,S).chainName,rpcUrl:b(this,S).rpcUrl,multiContractAddress:b(this,S).utilityAddresses?.multicall}),o=b(this,S).pricingProviders?.coingecko.assetPlatformId,a=b(this,S).pricingProviders?.coingecko.nativeTokenId,i=await he({chainId:Number(e),proxyApiUrl:b(this,M)}),c=i.map(d=>d.address),l=[...i,...b(this,me)].filter(Re),p=async d=>{let N=await new ethers.Contract(d.address,Rt.abi,s).balanceOf?.(r)||0n;return {...d,balance:N}},m=l.map(d=>z(p(d),d.address)),k=await K(m),f=new J({storage:b(this,X),proxyApiUrl:b(this,M)}),h=o&&await f.getPricesByAddresses(c,o,n)||{},y=Object.keys(k),E={};for(let d=0;d<y.length;d++){let T=y[d];if(T===void 0)continue;let I=k[T];if(I===void 0||"error"in I){E[T]={error:`rpcService:getTokenWithBalance failed: ${I?.error??"unknown error"}`};continue}let N=h?.[a??""]?.[n]?.price??void 0,oe=h?.[a??""]?.[n]?.marketCap??void 0,A=h?.[a??""]?.[n]?.vol24??void 0,kr=h?.[a??""]?.[n]?.change24??void 0,Ye=new TokenUnit(I.balance,I.decimals,I.symbol),Je=N!==void 0?Ye.mul(N):void 0;E[I.address.toLowerCase()]={...I,type:TokenType.ERC20,balance:I.balance,balanceDisplayValue:Ye.toDisplay(),balanceInCurrency:Je?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:Je?.toDisplay({fixedDp:2}),priceInCurrency:N,marketCap:oe,change24:kr,vol24:A};}return E}async listNftBalances(){return {}}};S=new WeakMap,X=new WeakMap,M=new WeakMap,me=new WeakMap;var $t=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 Ft(c,m=>m.isNetworkSupported(r.chainId)),p={};if(l){let m=[],k=[],f=[];t.forEach(d=>{m.push(z(l.getNativeBalance({address:d,currency:e.toUpperCase(),chainId:i}),d)),k.push(z(l.listErc20Balances({customTokens:s.filter(Re),currency:e.toUpperCase(),chainId:i,address:d,pageSize:100}),d)),f.push(z(l.listNftBalances({chainId:i,address:d}),d));});let h=await K(m),y=await K(k),E=await K(f);Object.keys(h).forEach(d=>{let T=h[d];if(!T||"error"in T){p[d]={error:`getNativeBalance failed: ${T?.error??"unknown error"}`};return}let I=T.symbol;p[d]={[I]:T};}),Object.keys(y).forEach(d=>{let T=y[d];!T||"error"in T&&typeof T.error!="string"?p[d]={...p[d],error:"listErc20Balances failed: unknown error"}:"error"in T&&typeof T.error=="string"?p[d]={...p[d],error:`listErc20Balances failed: ${T.error}`}:p[d]={...p[d],...T};}),Object.keys(E).forEach(d=>{let T=E[d];!T||"error"in T&&typeof T.error!="string"?p[d]={...p[d],error:"listNftBalances failed: unknown error"}:"error"in T&&typeof T.error=="string"?p[d]={...p[d],error:`listNftBalances failed: ${T.error}`}:p[d]={...p[d],...T};});}else t.forEach(m=>{p[m]={error:"unsupported network"};});return p};var bn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},In={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},jt=t=>{switch(t){case Environment.PRODUCTION:return bn;case Environment.DEV:return In}};var Rn="https://ipfs.io";function Yt(t,e=Rn){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}var Pn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Jt(t,e="256"){let r=Yt(t);return `${Pn}/width=${e},fit/${r}`}var _=class extends Error{constructor(){super(...arguments);a(this,"message","Glacier is unhealthy. Try again later.");}},xe=class{constructor({glacierApiUrl:e,headers:r}){a(this,"glacierSdk");a(this,"isGlacierHealthy",!0);a(this,"supportedChainIds",[]);a(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new 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 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: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:Jt(a.metadata.imageUri??""),name:a.metadata.name??"",symbol:a.metadata.symbol??"",tokenId:a.tokenId,tokenUri:a.tokenUri,collectionName:"Unkown",balance:a.ercType===Erc1155Token.ercType.ERC_1155?BigInt(a.balance):1,balanceDisplayValue:a.ercType===Erc1155Token.ercType.ERC_1155?a.balance:"1",type:a.ercType===Erc721Token.ercType.ERC_721?TokenType.ERC721:TokenType.ERC1155,metadata:{description:a.metadata.description,lastUpdatedTimestamp:a.metadata.metadataLastUpdatedTimestamp,properties:a.ercType===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(...Nn(i.erc20TokenBalances,Number(e))),a=i.nextPageToken;}while(a);return [...wn(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}}},wn=t=>t.map(e=>({...e,decimals:e.decimals??18,type:TokenType.ERC20,balance:0n,balanceInCurrency:0,balanceDisplayValue:"0",balanceCurrencyDisplayValue:"0",priceInCurrency:0,marketCap:0,change24:0,vol24:0})),Nn=(t,e)=>t.map(r=>{let n=new 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:TokenType.ERC20}});var Oe=t=>{let e="";e+=`Domain
|
|
17
|
+
`;for(let r in t.domain)e+=` ${r}: ${F(String(t.domain[r]))}
|
|
16
18
|
`;e+=`
|
|
17
19
|
Message
|
|
18
|
-
`;for(let
|
|
19
|
-
`;for(let n in
|
|
20
|
-
`,
|
|
21
|
-
`;})):e+=` ${n}: ${
|
|
22
|
-
`;}else Array.isArray(
|
|
23
|
-
`,
|
|
24
|
-
`;for(let
|
|
25
|
-
`,n[
|
|
26
|
-
`;})):e+=` ${
|
|
27
|
-
`;})):e+=` ${
|
|
28
|
-
`;return e},
|
|
29
|
-
`,e+=`${
|
|
20
|
+
`;for(let r in t.message)if(typeof t.message[r]=="object"&&!Array.isArray(t.message[r])){e+=` ${r}:
|
|
21
|
+
`;for(let n in t.message[r])Array.isArray(t.message[r][n])?(e+=` ${n}:
|
|
22
|
+
`,t.message[r][n].forEach((s,o)=>{e+=` ${o}: ${F(s)}
|
|
23
|
+
`;})):e+=` ${n}: ${F(String(t.message[r][n]))}
|
|
24
|
+
`;}else Array.isArray(t.message[r])?(e+=` ${r}:
|
|
25
|
+
`,t.message[r].forEach((n,s)=>{e+=` ${s}:
|
|
26
|
+
`;for(let o in n)Array.isArray(n[o])?(e+=` ${o}:
|
|
27
|
+
`,n[o].forEach((a,i)=>{e+=` ${i}: ${F(a)}
|
|
28
|
+
`;})):e+=` ${o}: ${F(String(n[o]))}
|
|
29
|
+
`;})):e+=` ${r}: ${F(String(t.message[r]))}
|
|
30
|
+
`;return e},Xt=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
31
|
+
`,e+=`${F(String(r.value))}
|
|
30
32
|
|
|
31
|
-
`;}),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=z$1.string().describe("message"),N=z$1.string().describe("address");var Ht=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([N,pe])});var jt=z$1.object({name:z$1.string(),type:z$1.string()}),K=z$1.object({types:z$1.object({EIP712Domain:z$1.array(jt)}).catchall(z$1.array(jt)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),Le=z$1.array(z$1.object({type:z$1.string(),name:z$1.string(),value:z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.object({}).passthrough(),z$1.array(z$1.unknown()),z$1.null()])})).nonempty(),Fe=K.or(Le),Yt=z$1.union([z$1.string().describe("data string"),K]),Jt=z$1.union([z$1.string().describe("data string"),Fe]),qt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([N,Jt])}),zt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([N,Jt])}),Kt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([N,Yt])}),Xt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([N,Yt])});var Zt=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([pe,N]),z$1.tuple([pe,N,z$1.string().optional().describe("password")])])});var Tn=z$1.discriminatedUnion("method",[Zt,Ht,qt,zt,Kt,Xt]).transform((r,e)=>{let{method:t,params:n}=r;switch(t){case RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:t};case RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:t};case RpcMethod.SIGN_TYPED_DATA:case 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:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}case RpcMethod.SIGN_TYPED_DATA_V3:case 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:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.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 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.invalidParams({message:"Params are invalid",data:{cause:s.error}})};let{method:a,data:o,address:i}=s.data,c;(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=tr(o));let l,p,y,T;if(c&&!c.isValid&&(T={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),a===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===RpcMethod.PERSONAL_SIGN)l={type:a,account:i,data:o},p=toUtf8String(o);else if(a===RpcMethod.SIGN_TYPED_DATA||a===RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:o},p=er(o)?Wt(o):Me(o);else if(a===RpcMethod.SIGN_TYPED_DATA_V3||a===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.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.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.internal(n)}}};var or=async({accountIndex:r,xpub:e,walletType:t})=>{switch(t){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,r)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${t}`)}};var Q,Re=class{constructor(e){this.baseUrl=e;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(b(this,Q).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,Q,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,Q)}};Q=new WeakMap;var x,Pe=class{constructor({proxyApiUrl:e}){c(this,x,void 0);d(this,x,new Re(`${e}/proxy/debank`));}async isNetworkSupported(e){return b(this,x).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:t,currency:n}){if(!isHexString(t))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+t);let a=(await b(this,x).getChainList()).find(E=>E.community_id===e)?.id;if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await b(this,x).getChainInfo({chainId:a});if(!o)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=o.native_token_id,c=await b(this,x).getTokenBalance({address:t,chainId:a,tokenId:i}),l=new TokenUnit(c.raw_amount,c.decimals,c.symbol),p=l.toDisplay(),T=(await he()).usd[n.toLowerCase()],b$1=T?T*c.price:void 0,f=b$1?l.mul(b$1).toDisplay({fixedDp:2}):void 0,g=b$1?l.mul(b$1).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c.name,symbol:c.symbol,decimals:c.decimals,type:TokenType.NATIVE,logoUri:c.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:g,balanceCurrencyDisplayValue:f,priceInCurrency:b$1}}async listErc20Balances({chainId:e,address:t,currency:n}){if(!isHexString(t))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let a=(await b(this,x).getChainList()).find(l=>l.community_id===e)?.id;if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await b(this,x).getChainInfo({chainId:a});if(!o)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=await 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 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:TokenType.ERC20};}return c}async listNftBalances(){return {}}};x=new WeakMap;var te,ue,U,re,lr=class{constructor({approvalController:e,environment:t,appInfo:n}){c(this,te,void 0);c(this,ue,void 0);c(this,U,void 0);c(this,re,void 0);let{glacierApiUrl:s,proxyApiUrl:a}=Vt(t);d(this,te,new Ie({glacierApiUrl:s,headers:Ve(n)})),d(this,ue,new Pe({proxyApiUrl:a})),d(this,U,a),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:b(this,U),customTokens:s,balanceServices:[b(this,te),b(this,ue)],storage:a})}getManifest(){let e=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:b(this,te)})}getTokens(e){let{chainId:t}=e;return fe({chainId:t,proxyApiUrl:b(this,U)})}async onRpcRequest(e,t){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return Nt({request:e,network:t,approvalController:b(this,re),proxyApiUrl:b(this,U)});case RpcMethod.PERSONAL_SIGN:case RpcMethod.ETH_SIGN:case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:return rr({request:e,network:t,approvalController:b(this,re),proxyApiUrl:b(this,U)});default:return Cn(e.method)?nr(e,t):{error: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);
|
|
33
|
+
`;}),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=z$1.string().describe("message"),w=z$1.string().describe("address");var Qt=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([w,ue])});var er=z$1.object({name:z$1.string(),type:z$1.string()}),Z=z$1.object({types:z$1.object({EIP712Domain:z$1.array(er)}).catchall(z$1.array(er)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),$e=z$1.array(z$1.object({type:z$1.string(),name:z$1.string(),value:z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.object({}).passthrough(),z$1.array(z$1.unknown()),z$1.null()])})).nonempty(),He=Z.or($e),tr=z$1.union([z$1.string().describe("data string"),Z]),rr=z$1.union([z$1.string().describe("data string"),He]),nr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([w,rr])}),ar=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([w,rr])}),or=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([w,tr])}),sr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([w,tr])});var ir=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([ue,w]),z$1.tuple([ue,w,z$1.string().optional().describe("password")])])});var _n=z$1.discriminatedUnion("method",[ir,Qt,nr,ar,or,sr]).transform((t,e)=>{let{method:r,params:n}=t;switch(r){case RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case RpcMethod.SIGN_TYPED_DATA:case 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:He.parse(a),address:s,method:r}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}case RpcMethod.SIGN_TYPED_DATA_V3:case 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:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function cr(t){return _n.safeParse(t)}var lr=t=>$e.safeParse(t).success,_i=t=>Z.safeParse(t).success;var pr=t=>{try{let{EIP712Domain:e,...r}=t.types;return TypedDataEncoder.getPayload(t.domain,r,t.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var mr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let s=cr({method:t.method,params:t.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:s.error}})};let{method:o,data:a,address:i}=s.data,c;(o===RpcMethod.SIGN_TYPED_DATA_V3||o===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=pr(a));let l,p,m,k;if(c&&!c.isValid&&(k={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),o===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===RpcMethod.PERSONAL_SIGN)l={type:o,account:i,data:a},p=toUtf8String(a);else if(o===RpcMethod.SIGN_TYPED_DATA||o===RpcMethod.SIGN_TYPED_DATA_V1)l={type:o,account:i,data:a},p=lr(a)?Xt(a):Oe(a);else if(o===RpcMethod.SIGN_TYPED_DATA_V3||o===RpcMethod.SIGN_TYPED_DATA_V4){l={type:o,account:i,data:a};let{types:E,primaryType:d,...T}=a;p=Oe(T);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let f=await Dt({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:f?.alert??k,balanceChange:f?.balanceChange,tokenApprovals:f?.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.internal("No signed data returned")}};var dr=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.internal(n)}}};var gr=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,t)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};var te,we=class{constructor(e){this.baseUrl=e;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(b(this,te).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,te,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,te)}};te=new WeakMap;var C,Ne=class{constructor({proxyApiUrl:e}){c(this,C,void 0);d(this,C,new we(`${e}/proxy/debank`));}async isNetworkSupported(e){return b(this,C).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let o=(await b(this,C).getChainList()).find(E=>E.community_id===e)?.id;if(!o)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await b(this,C).getChainInfo({chainId:o});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=a.native_token_id,c=await b(this,C).getTokenBalance({address:r,chainId:o,tokenId:i}),l=new TokenUnit(c.raw_amount,c.decimals,c.symbol),p=l.toDisplay(),k=(await Ee()).usd[n.toLowerCase()],f=k?k*c.price:void 0,h=f?l.mul(f).toDisplay({fixedDp:2}):void 0,y=f?l.mul(f).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c.name,symbol:c.symbol,decimals:c.decimals,type:TokenType.NATIVE,logoUri:c.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:y,balanceCurrencyDisplayValue:h,priceInCurrency:f}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let o=(await b(this,C).getChainList()).find(l=>l.community_id===e)?.id;if(!o)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await b(this,C).getChainInfo({chainId:o});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=await b(this,C).getTokensBalanceOnChain({chainId:o,address:r}),c={};for(let l of i){if(l.id===a.native_token_id)continue;let p=new TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),f=(await Ee()).usd[n.toLowerCase()],h=f?f*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:TokenType.ERC20};}return c}async listNftBalances(){return {}}};C=new WeakMap;var ne,fe,G,ae,Tr=class{constructor({approvalController:e,environment:r,appInfo:n}){c(this,ne,void 0);c(this,fe,void 0);c(this,G,void 0);c(this,ae,void 0);let{glacierApiUrl:s,proxyApiUrl:o}=jt(r);d(this,ne,new xe({glacierApiUrl:s,headers:Fe(n)})),d(this,fe,new Ne({proxyApiUrl:o})),d(this,G,o),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 gr({accountIndex:e,xpub:r,walletType:n})}getBalances({addresses:e,network:r,currency:n,customTokens:s,storage:o}){return $t({addresses:e,currency:n,network:r,proxyApiUrl:b(this,G),customTokens:s,balanceServices:[b(this,ne),b(this,fe)],storage:o})}getManifest(){let e=parseManifest(yt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:s,utilityAddresses:o}=e;return qe({chainId:r,chainName:n,rpcUrl:s,multiContractAddress:o?.multicall})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:s,offset:o}=e,{chainId:a,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return gt({chainId:a,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:s,offset:o,glacierService:b(this,ne)})}getTokens(e){let{chainId:r}=e;return he({chainId:r,proxyApiUrl:b(this,G)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return Mt({request:e,network:r,approvalController:b(this,ae),proxyApiUrl:b(this,G)});case RpcMethod.PERSONAL_SIGN:case RpcMethod.ETH_SIGN:case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:return mr({request:e,network:r,approvalController:b(this,ae),proxyApiUrl:b(this,G)});default:return $n(e.method)?dr(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ne=new WeakMap,fe=new WeakMap,G=new WeakMap,ae=new WeakMap;var $n=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
32
34
|
|
|
33
|
-
export {
|
|
35
|
+
export { L as ERC20TransactionType, Tr as EvmModule, mt as NonContractCallTypes, z as addIdToPromise, _i as isTypedData, lr as isTypedDataV1, K as settleAllIdPromises };
|
|
34
36
|
//# sourceMappingURL=out.js.map
|
|
35
37
|
//# sourceMappingURL=index.js.map
|