@avalabs/evm-module 3.3.1 → 3.5.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 +28 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +55 -60
- package/dist/index.d.ts +55 -60
- package/dist/index.js +21 -22
- package/dist/index.js.map +1 -1
- package/package.json +9 -10
package/dist/index.js
CHANGED
|
@@ -1,38 +1,37 @@
|
|
|
1
1
|
import { c, d, b, a, e } from './chunk-7VP42LRT.js';
|
|
2
|
-
import { TransactionType, AlertType, RpcMethod, parseManifest, AppName,
|
|
2
|
+
import { TransactionType, AlertType, RpcMethod, parseManifest, AppName, Environment, NetworkVMType, WalletType, TokenType, RawSimplePriceResponseSchema, DetailItemType } from '@avalabs/vm-module-types';
|
|
3
|
+
import Ro from '@blockaid/client';
|
|
4
|
+
import { VsCurrencyType, getBasicCoingeckoHttp, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
|
|
5
|
+
import { z as z$1, object, string, record, number } from 'zod';
|
|
6
|
+
import { NftTokenMetadataStatus, Glacier, Erc721Token, Erc1155Token, FetchHttpRequest, CancelablePromise, ApiError } from '@avalabs/glacier-sdk';
|
|
3
7
|
import { rpcErrors } from '@metamask/rpc-errors';
|
|
8
|
+
import { isHexString, computeAddress, Network, toUtf8String, MaxUint256, TypedDataEncoder, Interface, ethers } from 'ethers';
|
|
4
9
|
import { JsonRpcBatchInternal, getEvmAddressFromPubKey, getAddressFromXPub } from '@avalabs/core-wallets-sdk';
|
|
5
|
-
import
|
|
6
|
-
import { z, object, string, record, number } from 'zod';
|
|
7
|
-
import { Glacier, Erc721Token, Erc1155Token, NftTokenMetadataStatus, FetchHttpRequest } from '@avalabs/glacier-sdk';
|
|
8
|
-
import { isHexString, Network, toUtf8String, computeAddress, MaxUint256, TypedDataEncoder, Interface, ethers } from 'ethers';
|
|
10
|
+
import hr from '@openzeppelin/contracts/build/contracts/ERC20.json';
|
|
9
11
|
import { TokenUnit, numberToBN, balanceToDisplayValue, ipfsResolver } from '@avalabs/core-utils-sdk';
|
|
12
|
+
import fr from 'xss';
|
|
10
13
|
import { ChainId } from '@avalabs/core-chains-sdk';
|
|
11
|
-
import
|
|
12
|
-
import jn from 'lodash.startcase';
|
|
13
|
-
import ur from '@openzeppelin/contracts/build/contracts/ERC20.json';
|
|
14
|
-
import lo from '@blockaid/client';
|
|
15
|
-
import mr from 'xss';
|
|
14
|
+
import ro from 'lodash.startcase';
|
|
16
15
|
|
|
17
|
-
async function _e({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 Y=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=D.exponential()})=>{let a=0,s=0,o;for(;s<r;){s>0&&await hn(a);try{let c=await t(s);if(e(c))return c}catch(c){o=c;}a=n(s),s++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},D=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}static linearThenExponential(e,r){return n=>{if(n<e)return (n+1)*r;let a=n-e+1,s=e*r,o=2*r*(Math.pow(2,a)-1);return s+o}}};function hn(t){return new Promise(e=>setTimeout(e,t))}var lt=t=>Y({operation:e=>t(e>0),maxRetries:2,backoffPolicy:D.constant(1),isSuccess:e=>e?.status?.error_code!==429});function Ct(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function pt(t){let e,r=0;for(e=0;e<t.length;e++){let n=Ct(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function N(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 ke=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return N([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return N([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema)}};var Tn=z.array(z.object({internalId:z.string(),id:z.string(),symbol:z.string(),name:z.string(),image:z.string().optional().nullable(),current_price:z.number().optional().nullable(),price_change_percentage_24h:z.number().optional().nullable(),market_cap:z.number().optional().nullable(),total_volume:z.number().optional().nullable(),platforms:z.record(z.string(),z.string())})),De=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return N([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Tn)}};var Nt=getBasicCoingeckoHttp(),O,K,H=class{constructor({storage:e,proxyApiUrl:r}){c(this,O,void 0);c(this,K,void 0);a(this,"transformSimplePriceResponse",(e,r=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let s=e[a];n[a]={},r.forEach(o=>{n[a]={[o]:{price:s?.[o],change24:s?.[`${o}_24h_change`],vol24:s?.[`${o}_24h_vol`],marketCap:s?.[`${o}_market_cap`]}};});}),n});d(this,O,e),d(this,K,r);}async getWatchlistDataForToken({tokenDetails:e,currency:r=VsCurrencyType.USD}){let a=(await new De(b(this,K)).watchlistToken({tokens:e.symbol,currency:r})).filter(s=>e.isNative?s.internalId===`NATIVE-${e.symbol.toLowerCase()}`:s.platforms[e.caip2Id]===e.address)[0];return a?{priceInCurrency:a.current_price??0,change24:a.price_change_percentage_24h??0,marketCap:a.market_cap??0,vol24:a.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD]}){let n,s=`getSimplePrice-${e?`${pt(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=b(this,O)?.get?.(s),n)return n;try{n=await lt(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return b(this,O)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let a,o=`getPricesWithMarketDataByAddresses-${`${pt(e)}-${r}-${n}`}`;if(a=b(this,O)?.get?.(o),a)return a;try{a=await lt(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return b(this,O)?.set?.(o,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let s=await new ke(b(this,K)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(s,[n])}return simpleTokenPrice(Nt,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:n=!1,vol24:a=!1,change24:s=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new ke(b(this,K)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:s,include_last_updated_at:o});return this.transformSimplePriceResponse(l,r)}return simplePrice(Nt,{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:s,lastUpdated:o,shouldThrow:c})}};O=new WeakMap,K=new WeakMap;var Sn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",In="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",_t=object({date:string(),usd:record(number())}),Ue=async()=>{try{return await N([Sn],_t)}catch{return await N([In],_t)}};var mt=(t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),Fe=(t,e)=>({label:t,value:e,type:DetailItemType.LINK}),ne=(t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e});var Le=(t,e)=>({label:t,type:DetailItemType.NETWORK,value:e});var dt=({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}};var Dt=process.env.GLACIER_API_KEY;var Ee=()=>Dt;var wn={rltoken:Ee()},ve=class extends FetchHttpRequest{constructor(e){super(e);}request(e){let r={...wn,...e.query||{}},n={...e,query:Object.keys(r).length>0?r:void 0};return super.request(n)}};var C=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:s=2e3}=t,o=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:a},_n(n),new Network(r,e));return o.pollingInterval=s,o},Nn=["glacier-api.avax.network","proxy-api.avax.network"];function _n(t){let e=new URL(t),r=Ee();if(r&&Nn.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}var ft={LOW:1n,MEDIUM:4n,HIGH:6n},yt=500000000n,Dn=t=>t===ChainId.AVALANCHE_TESTNET_ID||t===ChainId.AVALANCHE_MAINNET_ID;async function Ft({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:s}){let o=await C({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!s)throw rpcErrors.internal("Proxy API URL is needed");if(Dn(t))try{let E=await Un(o);return {...E,baseFee:E.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}let i=await o.getBlock("latest",!1);if(!i)throw rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await Gn(s,a),p=new TokenUnit(l,0,""),d=new TokenUnit(c,0,""),m=BigInt("1000000000"),u=d.mul(p).add(m).toSubUnit(),y=yt*ft.LOW,h=yt*ft.MEDIUM,v=yt*ft.HIGH;return {baseFee:u,low:{maxFeePerGas:u+y,maxPriorityFeePerGas:y},medium:{maxFeePerGas:u+h,maxPriorityFeePerGas:h},high:{maxFeePerGas:u+v,maxPriorityFeePerGas:v},isFixedFee:!1,displayDecimals:9}}async function Un(t){let e=await t.send("eth_suggestPriceOptions",[]);return {low:{maxFeePerGas:BigInt(e.slow.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.slow.maxPriorityFeePerGas)},medium:{maxFeePerGas:BigInt(e.normal.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.normal.maxPriorityFeePerGas)},high:{maxFeePerGas:BigInt(e.fast.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.fast.maxPriorityFeePerGas)}}}async function Gn(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let a=await n.json();return a[e]??a.default}catch{return 1.5}}function $(t,e,r="tx"){return `${t}/${r}/${e}`}var Vt=({tx:t,networkToken:e,chainId:r,explorerUrl:n,address:a})=>{let s=t.from.toLowerCase()===a.toLowerCase(),o=parseInt(t.timeStamp)*1e3,i=e.decimals,l=new TokenUnit(t.value,e.decimals,e.symbol).toDisplay(),p=Lt(t)&&On(t)?TransactionType.APPROVE:s?TransactionType.SEND:TransactionType.RECEIVE,{from:d,to:m,gasPrice:u,gasUsed:y,hash:h}=t,v=$(n,h);return {isIncoming:!s,isOutgoing:s,isContractCall:Lt(t),timestamp:o,hash:h,isSender:s,from:d,to:m,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:TokenType.NATIVE}],gasUsed:y,gasPrice:u,chainId:r.toString(),txType:p,explorerLink:v}};function Lt(t){return t.input!=="0x"}var Vn="0x095ea7b3",Mn="0x39509351";function On(t){let e=t.input?.slice(0,10)?.toLowerCase();return e===Vn||e===Mn}function Ot({tx:t,address:e,explorerUrl:r,chainId:n}){let a=t.from.toLowerCase()===e.toLowerCase(),s=parseInt(t.timeStamp)*1e3,i=new TokenUnit(t.value,Number(t.tokenDecimal),t.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:d,hash:m,tokenDecimal:u,tokenName:y,tokenSymbol:h,contractAddress:v}=t,E=a?TransactionType.SEND:TransactionType.RECEIVE,P=$(r,m);return {isIncoming:!a,isOutgoing:a,isContractCall:!1,timestamp:s,hash:m,isSender:a,from:c,to:l,tokens:[{decimal:u,name:y,symbol:h,type:TokenType.ERC20,amount:i,address:v}],gasUsed:d,gasPrice:p,chainId:n.toString(),txType:E,explorerLink:P}}var Ht=async({isTestnet:t,networkToken:e,explorerUrl:r,chainId:n,address:a,nextPageToken:s,offset:o})=>{let i=s?JSON.parse(s):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await getNormalTxs(a,!t,{page:c,offset:o}):[]).map(h=>Vt({tx:h,chainId:n,networkToken:e,explorerUrl:r,address:a})),d=(l.includes("erc20")?await getErc20Txs(a,!t,void 0,{page:c,offset:o}):[]).map(h=>Ot({tx:h,address:a,explorerUrl:r,chainId:n})),m=d.map(h=>h.hash),u=p.filter(h=>!m.includes(h.hash)),y={queries:[],page:c+1};return p.length&&y.queries.push("normal"),d.length&&y.queries.push("erc20"),{transactions:[...u,...d],nextPageToken:y.queries.length?JSON.stringify(y):""}};var $t=t=>t===1||t===5||t===4||t===11155111;var jt=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,s)=>{let o=!e&&!r&&!n,i=zn(t.method?.methodName),c=a.toLowerCase(),l=i.toLowerCase().includes("swap"),p=o&&t.from.address.toLowerCase()===c,d=o&&t.to.address.toLowerCase()===c,m=i==="Market Buy Orders With Eth"||i==="Buy NFT",u=i==="Approve",y=i.toLowerCase().includes("transfer"),h=i.toLowerCase().includes("airdrop"),v=i.toLowerCase().includes("unwrap"),E=i==="Fill Order",P=!!s[0]&&qt(s[0].type)&&s[0].from?.address.toLowerCase()===c,g=!!s[0]&&qt(s[0].type)&&s[0].to?.address.toLowerCase()===c;return l?TransactionType.SWAP:p?TransactionType.SEND:d?TransactionType.RECEIVE:m?TransactionType.NFT_BUY:u?TransactionType.APPROVE:P?TransactionType.NFT_SEND:g?TransactionType.NFT_RECEIVE:y?TransactionType.TRANSFER:h?TransactionType.AIRDROP:v?TransactionType.UNWRAP:E?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function qt(t){return t===TokenType.ERC721||t===TokenType.ERC1155}var zn=(t="")=>t.includes("(")?jn(t.split("(",1)[0]):t;var zt=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},a)=>{let s=t===TransactionType.TRANSFER,o=t===TransactionType.SEND,i=t===TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;s&&r&&r[0]&&(c=r[0].from.address,l=r[0].to.address),s&&n&&n[0]&&(c=n[0].from.address,l=n[0].to.address);let p=o||s&&c.toLowerCase()===a.toLowerCase(),d=i||s&&l.toLowerCase()===a.toLowerCase();return {isOutgoing:p,isIncoming:d,isSender:c===a,from:c,to:l}};async function Jt(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Yn="https://ipfs.io";function oe(t,e=Yn){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}async function Kn(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function Yt(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 Kn(oe(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var Xn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Kt(t,e="256"){let r=oe(t);return `${Xn}/width=${e},fit/${r}`}var Qt=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a)=>{let s=[];if(t.value!=="0"){let o=a.decimals,c=new TokenUnit(t.value,a.decimals,a.symbol).toDisplay();s.push({decimal:o.toString(),name:a.name,symbol:a.symbol,amount:c,from:t.from,to:t.to,type:TokenType.NATIVE});}return e?.forEach(o=>{let i=o.erc20Token.decimals,l=new TokenUnit(o.value,i,o.erc20Token.symbol).toDisplay();s.push({decimal:i.toString(),address:o.erc20Token.address,name:o.erc20Token.name,symbol:o.erc20Token.symbol,amount:l,from:o.from,to:o.to,imageUri:o.erc20Token.logoUri,type:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async o=>{let i=o.erc721Token,c=await Zt(i.tokenUri,i.metadata.imageUri);s.push({name:o.erc721Token.name,symbol:o.erc721Token.symbol,address:o.erc721Token.address,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 Zt(i.tokenUri,i.metadata.imageUri);s.push({name:o.erc1155Token.metadata.name??"",symbol:o.erc1155Token.metadata.symbol??"",address:o.erc1155Token.address,amount:o.value,imageUri:c,from:o.from,to:o.to,collectableTokenId:o.erc1155Token.tokenId,type:TokenType.ERC1155});})),s},Zt=async(t,e)=>{if(e)return e.startsWith("ipfs://")?oe(e):e;{let[r,n]=await Jt(Yt(t));return n?"":r.image?Kt(r.image):""}};var er=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],X=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(X||{});var tr=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let s=await Qt(t,r),o=jt(t,a,s),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:d}=zt(o,t,a),{blockTimestamp:m,txHash:u,gasPrice:y,gasUsed:h}=t.nativeTransaction,v=$(e,u);return {isContractCall:!er.includes(o),isIncoming:c,isOutgoing:i,isSender:l,timestamp:m*1e3,hash:u,from:p,to:d,tokens:s,gasPrice:y,gasUsed:h,chainId:n.toString(),txType:o,explorerLink:v}};var rr=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:a,offset:s,glacierService:o})=>{try{let i=await o.listTransactions({chainId:t.toString(),address:n,pageToken:a,pageSize:s});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>tr({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(d=>d)))).filter(p=>p.tokens.find(d=>Number(d.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var nr=async({chainId:t,isTestnet:e,networkToken:r,explorerUrl:n,address:a,nextPageToken:s,offset:o,glacierService:i})=>$t(t)?Ht({isTestnet:e,networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:s,offset:o}):i.isHealthy()?rr({networkToken:r,explorerUrl:n,chainId:t,address:a,nextPageToken:s,offset:o,glacierService:i}):{transactions:[],nextPageToken:""};var ar={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_sendTransactionBatch","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"],nonRestrictedMethods:["eth_requestAccounts","eth_decrypt","eth_getEncryptionPublicKey","eth_subscribe","eth_unsubscribe","eth_blockNumber","eth_call","eth_chainId","eth_coinbase","eth_estimateGas","eth_feeHistory","eth_gasPrice","eth_getBalance","eth_getBlockByHash","eth_getBlockByNumber","eth_getBlockTransactionCountByHash","eth_getBlockTransactionCountByNumber","eth_getCode","eth_getFilterChanges","eth_getFilterLogs","eth_getLogs","eth_getProof","eth_getStorageAt","eth_getTransactionByBlockHashAndIndex","eth_getTransactionByBlockNumberAndIndex","eth_getTransactionByHash","eth_getTransactionCount","eth_getTransactionReceipt","eth_getUncleCountByBlockHash","eth_getUncleCountByBlockNumber","eth_newBlockFilter","eth_newFilter","eth_newPendingTransactionFilter","eth_syncing","eth_uninstallFilter","net_version","net_peerCount","net_listening","web3_sha3","web3_clientVersion"]}},manifestVersion:"0.1"};var Me=async({from:t,provider:e})=>e.getTransactionCount(t);var Oe=t=>{if(t.data)try{let r=new Interface(ur.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&ta(n)?n:void 0}catch{return}};function ta(t){return Object.values(X).includes(t)}function or(t,e,r){return new ethers.Contract(t,ur.abi).interface.encodeFunctionData("approve",[e,r])}var He=new Map,sr=(t,e,r)=>(He.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:s,gasLimit:o})=>{let i=He.get(t);if(!i)throw rpcErrors.resourceNotFound();let{signingData:c,displayData:l}=i,p={...c,data:{...c.data,gasLimit:o??c.data.gasLimit,maxFeePerGas:n??c.data.maxFeePerGas,maxPriorityFeePerGas:a??c.data.maxPriorityFeePerGas}},d={...l};if(typeof s=="string"){if(!s.startsWith("0x"))throw rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let u=l.tokenApprovals;aa(u),oa(c.data.data);let y=u.approvals[0];p.data.data=or(y.token.address,y.spenderAddress,s),d.tokenApprovals={approvals:[{...y,value:s}],isEditable:!0};}let m={signingData:p,displayData:d};return He.set(t,m),m},cleanup:()=>He.delete(t)});function aa(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 oa(t){if((!t||t==="0x"?null:Oe({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var ir=async({transactionParams:{from:t,to:e,data:r,value:n,accessList:a},provider:s})=>{let o=await s.getTransactionCount(t);return Number(await s.estimateGas({from:t,to:e,nonce:o,data:r,value:n,accessList:a}))};var We=(t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:s,alert:o})=>{let{dappInfo:i}=t,c=Oe(r),l="Do you approve this transaction?";c==="approve"&&(l="Do you approve this spend limit?");let p=[ne("Account",r.from),Le("Network",{name:e.chainName,logoUri:e.logoUri}),Fe("Website",i)];r.to&&p.push(ne("Contract",r.to));let d={title:l,details:[{title:"Transaction Details",items:p}],networkFeeSelector:!0,alert:o,balanceChange:a,tokenApprovals:s,isSimulationSuccessful:n},m={type:RpcMethod.ETH_SEND_TRANSACTION,account:r.from,data:{type:2,nonce:Number(r.nonce),gasLimit:Number(r.gas),maxFeePerGas:r.maxFeePerGas,maxPriorityFeePerGas:r.maxPriorityFeePerGas,to:r.to,from:r.from,data:r.data,value:r.value,chainId:r.chainId??e.chainId,accessList:r.accessList}};return {displayData:d,signingData:m}};var cr=async({chainId:t,params:e,domain:r,withGasEstimation:n,blockaid:a})=>{let s=["validation","simulation"];return n&&s.push("gas_estimation"),a.evm.transactionBulk.scan({chain:t.toString(),options:s,data:e,metadata:r&&r.length>0?{domain:r}:{non_dapp:!0}})},lr=async({chainId:t,params:e,domain:r,blockaid:n})=>n.evm.transaction.scan({account_address:e.from,chain:t.toString(),options:["validation","simulation"],data:{from:e.from,to:e.to,data:e.data,value:e.value,gas:e.gas,gas_price:e.gasPrice},metadata:r&&r.length>0?{domain:r}:{non_dapp:!0}}),pr=async({chainId:t,accountAddress:e,data:r,domain:n,blockaid:a})=>a.evm.jsonRpc.scan({chain:t.toString(),options:["validation","simulation"],account_address:e,data:r,metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}});var fr=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,ur.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),s=mr(a[0]),o=mr(a[1]),i=parseInt(a[2]),c={type:TokenType.ERC20,name:s,chainId:e,symbol:o,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.Interface(ur.abi),p=l.getFunction(t.data.slice(0,10)),d=l.decodeFunctionData(t.data.slice(0,10),t.data);if(p?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new TokenUnit(d.amount,c.decimals,c.symbol).toDisplay(),usdPrice:void 0}],token:c}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:c,spenderAddress:d.spender,value:d.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};function Z(t){return !("type"in t)}function qe(t){return t.type===TokenType.ERC20}function yr(t){return typeof t.to=="string"}function gr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function pa(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function ma(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function kt(t){return pa(t)?t.ins.length===0&&t.outs.length===0:ma(t)?t.approvals.length===0:!1}var W={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious transaction",description:"Use caution, this transaction might be malicious."}},[AlertType.DANGER]:{type:AlertType.DANGER,details:{title:"Scam transaction",description:"This transaction has been flagged as malicious, I understand the risk.",body:["This transaction is malicious","do not proceed"],actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var Tr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:s})=>{let o;try{o=await lr({chainId:n,params:r,domain:e,blockaid:s});}catch(i){console.error("simulateTransaction error",i);}return Et({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:o})},Et=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:a})=>{let s,o,i,c=!1,l;if(a){let{validation:p,simulation:d,gas_estimation:m}=a;!p||p.result_type==="Error"||p.result_type==="Warning"?s=W[AlertType.WARNING]:p.result_type==="Malicious"&&(s=W[AlertType.DANGER]),d?.status==="Success"&&(c=!0,i=kr(t,d.account_summary),o=Er(d.account_summary.assets_diffs)),m?.status==="Success"&&(l=Number(m.estimate));}if(!c&&yr(e)){let p=await fr(e,r,n);o=p.balanceChange,i=p.tokenApprovals;}return {alert:s,balanceChange:o,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},ha=t=>t.trace_type==="ExposureTrace",Ta=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,ka=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>ha(r)?{[Ta(r.spender,r.asset.address)]:r}:e,{}),kr=(t,e)=>{let{traces:r}=e,n=ka(r),a=Object.entries(n).map(([o,i])=>{let c=vr(i.asset);if(!c)return;let l={token:c,spenderAddress:i.spender,logoUri:c.logoUri};if(i.type==="ERC20ExposureTrace"){let{exposed:{raw_value:p,value:d,usd_price:m}}=i;if(!d||d<=0)return;l.value=p,l.usdPrice=`${m}`;}if(i.type==="ERC721ExposureTrace")if(!i.exposed)l.value=`0x${MaxUint256.toString(16)}`;else {let{usd_price:p,amount:d}=i.exposed;l.value=`${d}`,l.usdPrice=`${p}`;}return l}).filter(Boolean);return a.length===0?void 0:{isEditable:a.length===1&&a[0]?.token.type===TokenType.ERC20&&t===RpcMethod.ETH_SEND_TRANSACTION,approvals:a}},Er=t=>{let e=hr(t,"in"),r=hr(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},hr=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,a="address"in n?vr(n):Ea(n);if(!a)return;let s=r[e].map(o=>{let i;if("value"in o&&o.value)if("decimals"in a){let d=numberToBN(o.value,a.decimals);i=balanceToDisplayValue(d,a.decimals);}else isHexString(o.value)&&(i=parseInt(o.value,16).toString());else "type"in a&&a.type===TokenType.ERC721&&(i="1");if(!i)return;let c="logo_url"in o?o.logo_url:void 0,l="token_id"in o?o.token_id:void 0;return {displayValue:i,usdPrice:o.usd_price,...c!==void 0&&{logoUri:c},...l!==void 0&&{tokenId:l}}}).filter(o=>o!==void 0);return {token:a,items:s}}).filter(r=>r!==void 0),vr=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},Ea=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),br=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:s})=>{let o,i,c;try{let{validation:l,simulation:p}=await pr({chainId:n,accountAddress:r,data:a,domain:e,blockaid:s});!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=kr(t.method,p.account_summary),i=Er(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=W[AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}};var ie=z.object({from:z.string().length(42),to:z.string().length(42).optional(),data:z.string().optional(),value:z.string().startsWith("0x").optional(),gas:z.string().startsWith("0x").optional(),gasPrice:z.string().startsWith("0x").optional(),maxFeePerGas:z.string().startsWith("0x").optional(),maxPriorityFeePerGas:z.string().startsWith("0x").optional(),nonce:z.string().optional(),chainId:z.string().optional().or(z.number().optional()),accessList:z.array(z.object({address:z.string().startsWith("0x"),storageKeys:z.array(z.string())})).optional()});var ba=z.tuple([ie]),Pr=t=>ba.safeParse(t);var Pe=async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:s,request:o})=>{try{let i=$(t,r);if(n({txHash:r,request:o,explorerLink:i}),(await Y({operation:async()=>e.getTransactionReceipt(r),isSuccess:p=>!!p,backoffPolicy:D.linearThenExponential(15,750),maxRetries:20}))?.status===1)return a({txHash:r,explorerLink:i,request:o}),!0}catch(i){console.error(i);}return s({txHash:r,request:o}),!1};var ze=async(t,e,r)=>{if("txHash"in e)return e.txHash;let n=()=>t.send("eth_sendRawTransaction",[e.signedData]);return r?.shouldRetry?Y({operation:()=>n(),isSuccess:()=>!0,maxRetries:6,backoffPolicy:D.linearThenExponential(4,1e3)}):n()};var Rr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,error:o,success:i}=Pr(a);if(!i)return console.error("invalid params",o),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:o}})};let[c]=s,l=await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!c.gas||Number(c.gas)<0)try{let P=await ir({transactionParams:{from:c.from,to:c.to,data:c.data,value:c.value,accessList:c.accessList},provider:l});c.gas="0x"+P.toString(16);}catch{return {error:rpcErrors.internal("Unable to calculate gas limit")}}if(!c.nonce)try{let P=await Me({from:c.from,provider:l});c.nonce=String(P);}catch{return {error:rpcErrors.internal("Unable to calculate nonce")}}let p=await Tr({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l,blockaid:n}),{displayData:d,signingData:m}=We(t,e,c,p),{updateTx:u,cleanup:y}=sr(t.requestId,m,d),h=await r.requestApproval({request:t,displayData:d,signingData:m,updateTx:u});if(y(),"error"in h)return {error:h.error};let v,E=t.context?.shouldRetry===!0;try{v=await ze(l,h,{shouldRetry:E});}catch(P){return {error:rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:P}})}}return Pe({explorerUrl:e.explorerUrl??"",provider:l,txHash:v,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:v}};async function xr(t,e){let r=t.map(async(s,o)=>({index:o,result:await e(s)})),a=(await Promise.allSettled(r)).filter(s=>s.status==="fulfilled").map(s=>s).find(s=>s.value.result);return a?t[a.value.index]:void 0}function ce(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function le(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let a=n.value;a.status==="fulfilled"?r[a.id]=a.value:r[a.id]={error:a.reason};}return r},{}))}var w,pe,Q,Re,Ye=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:a}){c(this,w,void 0);c(this,pe,void 0);c(this,Q,void 0);c(this,Re,void 0);d(this,w,e),d(this,pe,r),d(this,Q,n),d(this,Re,a);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await C({chainId:e,chainName:b(this,w).chainName,rpcUrl:b(this,w).rpcUrl,multiContractAddress:b(this,w).utilityAddresses?.multicall}),s=b(this,w).pricingProviders?.coingecko.nativeTokenId,o=b(this,w).networkToken,i=new H({storage:b(this,pe),proxyApiUrl:b(this,Q)}),c=s?await i.getSimplePrice({coinIds:[s],currencies:[n]}):{},l=c?.[s??""]?.[n]?.price??void 0,p=c?.[s??""]?.[n]?.marketCap??void 0,d=c?.[s??""]?.[n]?.vol24??void 0,m=c?.[s??""]?.[n]?.change24??void 0,u=await a.getBalance(r),y=new TokenUnit(u,o.decimals,o.symbol),h=l!==void 0?y.mul(l):void 0;return {...o,coingeckoId:s??"",type:TokenType.NATIVE,balance:u,balanceDisplayValue:y.toDisplay(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:d,change24:m}}async listErc20Balances({chainId:e,address:r,currency:n}){let a=await C({chainId:e,chainName:b(this,w).chainName,rpcUrl:b(this,w).rpcUrl,multiContractAddress:b(this,w).utilityAddresses?.multicall}),s=b(this,w).pricingProviders?.coingecko.assetPlatformId,o=b(this,w).pricingProviders?.coingecko.nativeTokenId,i=await _e({chainId:Number(e),proxyApiUrl:b(this,Q)}),c=i.map(E=>E.address),l=[...i,...b(this,Re)].filter(qe),p=async E=>{let k=await new ethers.Contract(E.address,ur.abi,a).balanceOf?.(r)||0n;return {...E,balance:k}},d=l.map(E=>ce(p(E),E.address)),m=await le(d),u=new H({storage:b(this,pe),proxyApiUrl:b(this,Q)}),y=s&&await u.getPricesByAddresses(c,s,n)||{},h=Object.keys(m),v={};for(let E=0;E<h.length;E++){let P=h[E];if(P===void 0)continue;let g=m[P];if(g===void 0||"error"in g){v[P]={error:`rpcService:getTokenWithBalance failed: ${g?.error??"unknown error"}`};continue}let k=y?.[o??""]?.[n]?.price??void 0,_=y?.[o??""]?.[n]?.marketCap??void 0,it=y?.[o??""]?.[n]?.vol24??void 0,V=y?.[o??""]?.[n]?.change24??void 0,he=new TokenUnit(g.balance,g.decimals,g.symbol),I=k!==void 0?he.mul(k):void 0;v[g.address.toLowerCase()]={...g,type:TokenType.ERC20,balance:g.balance,balanceDisplayValue:he.toDisplay(),balanceInCurrency:I?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:I?.toDisplay({fixedDp:2}),priceInCurrency:k,marketCap:_,change24:V,vol24:it,reputation:null};}return v}async listNftBalances(){return {}}};w=new WeakMap,pe=new WeakMap,Q=new WeakMap,Re=new WeakMap;var Ar=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:a=[TokenType.NATIVE,TokenType.ERC20,TokenType.ERC721,TokenType.ERC1155],customTokens:s=[],storage:o,balanceServices:i=[],tokenService:c})=>{let l=r.chainId,p=[...i,new Ye({network:r,storage:o,proxyApiUrl:n,customTokens:s})],d=await xr(p,u=>u.isNetworkSupported(r.chainId)),m={};if(d){let u=[],y=[],h=[];t.forEach(g=>{a.includes(TokenType.NATIVE)&&u.push(ce(d.getNativeBalance({address:g,currency:e.toUpperCase(),chainId:l}).then(async k=>{if(k.symbol==="AVAX"){let _=await c.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...k,priceInCurrency:_.priceInCurrency,marketCap:_.marketCap,vol24:_.vol24,change24:_.change24}}return k}),g)),a.includes(TokenType.ERC20)&&y.push(ce(d.listErc20Balances({customTokens:s.filter(qe),currency:e.toUpperCase(),chainId:l,address:g,pageSize:100}),g)),(a.includes(TokenType.ERC721)||a.includes(TokenType.ERC1155))&&h.push(ce(d.listNftBalances({chainId:l,address:g}),g));});let v=await le(u),E=await le(y),P=await le(h);Object.keys(v).forEach(g=>{let k=v[g];if(!k||"error"in k){m[g]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let _=k.symbol;m[g]={[_]:k};}),Object.keys(E).forEach(g=>{let k=E[g];!k||"error"in k&&typeof k.error!="string"?m[g]={...m[g],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[g]={...m[g],error:`listErc20Balances failed: ${k.error}`}:m[g]={...m[g],...k};}),Object.keys(P).forEach(g=>{let k=P[g];!k||"error"in k&&typeof k.error!="string"?m[g]={...m[g],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?m[g]={...m[g],error:`listNftBalances failed: ${k.error}`}:m[g]={...m[g],...k};});}else t.forEach(u=>{m[u]={error:"unsupported network"};});return m};var xa={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Sa={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Cr=t=>{switch(t){case Environment.PRODUCTION:return xa;case Environment.DEV:return Sa}};var Br="DUMMY_API_KEY";var Aa="https://ipfs.io";function Nr(t,e=Aa){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}var wa="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Ke(t,e="256"){let r=Nr(t);return `${wa}/width=${e},fit/${r}`}var F=class extends Error{constructor(){super(...arguments);a(this,"message","Glacier is unhealthy. Try again later.");}},_a=[ChainId.ETHEREUM_HOMESTEAD],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},ve),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(n=>n===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(r=>r.chainId).filter(r=>!_a.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(a){throw a instanceof F&&this.setGlacierToUnhealthy(),a}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(a){throw a instanceof F&&this.setGlacierToUnhealthy(),a}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:a}){try{let o=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,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:a??""}}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}}async listErc721Balances({chainId:e,address:r}){let n,a=[];do try{let s=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});a.push(...s.erc721TokenBalances),n=s.nextPageToken;}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}while(n);return a}async listErc1155Balances({chainId:e,address:r}){let n,a=[];do try{let s=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});a.push(...s.erc1155TokenBalances),n=s.nextPageToken;}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}while(n);return a}async listNftBalances({chainId:e,address:r}){let a=(await Promise.allSettled([this.listErc721Balances({chainId:e.toString(),address:r}),this.listErc1155Balances({chainId:e.toString(),address:r})])).filter(s=>s.status==="fulfilled").flatMap(s=>s.value.filter(o=>o.ercType===Erc721Token.ercType.ERC_721||BigInt(o.balance)>0n).map(o=>[`${o.address}-${o.tokenId}`,{address:o.address,description:o.metadata.description??"",logoUri:o.metadata.imageUri??"",logoSmall:Ke(o.metadata.imageUri??""),name:o.metadata.name??"",symbol:o.metadata.symbol??"",tokenId:o.tokenId,tokenUri:o.tokenUri,chainId:e,collectionName:"Unknown",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:{indexStatus:o.metadata.indexStatus,description:o.metadata.description,lastUpdatedTimestamp:o.metadata.metadataLastUpdatedTimestamp,properties:o.ercType===Erc721Token.ercType.ERC_721?o.metadata.attributes:o.metadata.properties}}]));return Object.fromEntries(a)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:a}){try{let s=[],o;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:o});s.push(...Ua(i.erc20TokenBalances,Number(e))),o=i.nextPageToken;}while(o);return [...Da(a),...s].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:a}){try{return this.glacierSdk.evmTransactions.listTransactionsV2({chainId:e,address:r,pageToken:n,pageSize:a,filterSpamTokens:!0})}catch(s){throw s instanceof F&&this.setGlacierToUnhealthy(),s}}},Da=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,reputation:null})),Ua=(t,e)=>t.map(r=>{let n=new TokenUnit(r.balance,r.decimals,r.symbol),a=n.toDisplay(),s=r.balanceValue?.value.toString(),o=r.price?.value,i=o!==void 0?n.mul(o).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:s,balanceDisplayValue:a,balanceInCurrency:i,priceInCurrency:o,reputation:r.tokenReputation,type:TokenType.ERC20}});var bt=t=>{let e="";e+=`Domain
|
|
18
|
-
`;for(let r in t.domain)e+=` ${r}: ${
|
|
16
|
+
function Wt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function Et(t){let e,r=0;for(e=0;e<t.length;e++){let n=Wt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}var ee=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=B.exponential()})=>{let a=0,o=0,s;for(;o<r;){o>0&&await An(a);try{let c=await t(o);if(e(c))return c}catch(c){s=c;}a=n(o),o++;}let i=s?`Max retry exceeded. ${s}`:"Max retry exceeded.";throw new Error(i)},B=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}static linearThenExponential(e,r){return n=>{if(n<e)return (n+1)*r;let a=n-e+1,o=e*r,s=2*r*(Math.pow(2,a)-1);return o+s}}};function An(t){return new Promise(e=>setTimeout(e,t))}var Pt=t=>ee({operation:e=>t(e>0),maxRetries:2,backoffPolicy:B.constant(1),isSuccess:e=>e?.status?.error_code!==429});async function U(t,e,r=fetch){let n=await r(...t);if(!n.ok)throw new Error(`Request failed with status ${n.status}`);let a=await n.json();return e.parse(a)}var Ce=class{constructor(e,r){this.proxyApiUrl=e;this.fetchFn=r;}simplePrice(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}};var Cn=z$1.array(z$1.object({internalId:z$1.string(),id:z$1.string(),symbol:z$1.string(),name:z$1.string(),image:z$1.string().optional().nullable(),current_price:z$1.number().optional().nullable(),price_change_percentage_24h:z$1.number().optional().nullable(),market_cap:z$1.number().optional().nullable(),total_volume:z$1.number().optional().nullable(),platforms:z$1.record(z$1.string(),z$1.string())})),He=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Cn)}};var q,te,re,me,z=class{constructor({storage:e,proxyApiUrl:r,fetch:n}){c(this,q,void 0);c(this,te,void 0);c(this,re,void 0);c(this,me,void 0);a(this,"transformSimplePriceResponse",(e,r=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let o=e[a];n[a]={},r.forEach(s=>{n[a]={[s]:{price:o?.[s],change24:o?.[`${s}_24h_change`],vol24:o?.[`${s}_24h_vol`],marketCap:o?.[`${s}_market_cap`]}};});}),n});d(this,q,e),d(this,te,r),d(this,re,n??globalThis.fetch),d(this,me,getBasicCoingeckoHttp(void 0,b(this,re)));}async getWatchlistDataForToken({tokenDetails:e,currency:r=VsCurrencyType.USD}){let n=(await new He(b(this,te)).watchlistToken({tokens:e.symbol,currency:r})).filter(o=>e.isNative?o.internalId===`NATIVE-${e.symbol.toLowerCase()}`:o.platforms[e.caip2Id]===e.address),[a]=n;return a?{priceInCurrency:a.current_price??0,change24:a.price_change_percentage_24h??0,marketCap:a.market_cap??0,vol24:a.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD]}){let n,o=`getSimplePrice-${e?`${Et(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=b(this,q)?.get?.(o),n)return n;try{n=await Pt(s=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:s}));}catch{n=void 0;}return b(this,q)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let a,s=`getPricesWithMarketDataByAddresses-${`${Et(e)}-${r}-${n}`}`;if(a=b(this,q)?.get?.(s),a)return a;try{a=await Pt(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return b(this,q)?.set?.(s,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let o=await new Ce(b(this,te),b(this,re)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[n])}return simpleTokenPrice(b(this,me),{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:n=!1,vol24:a=!1,change24:o=!1,lastUpdated:s=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new Ce(b(this,te),b(this,re)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:o,include_last_updated_at:s});return this.transformSimplePriceResponse(l,r)}return simplePrice(b(this,me),{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:o,lastUpdated:s,shouldThrow:c})}};q=new WeakMap,te=new WeakMap,re=new WeakMap,me=new WeakMap;var Gn="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",jt=object({date:string(),usd:record(number())}),je=async()=>{try{return await U([Gn],jt)}catch{return await U([Mn],jt)}};var Rt=(t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),ze=(t,e)=>({label:t,value:e,type:DetailItemType.LINK}),de=(t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e});var Ye=(t,e)=>({label:t,type:DetailItemType.NETWORK,value:e});var St=({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}};var qt=process.env.GLACIER_API_KEY;var we=()=>qt;var On={rltoken:we()},ne,Ke,Je,Yt,Xe,Kt,_e=class extends FetchHttpRequest{constructor(r){super(r);c(this,Je);c(this,Xe);c(this,ne,3);c(this,Ke,B.exponential());}request(r){let n={...On,...r.query||{}},a={...r,query:Object.keys(n).length>0?n:void 0},o=()=>super.request(a);return b(this,ne)>0?e(this,Xe,Kt).call(this,o):e(this,Je,Yt).call(this,o)}};ne=new WeakMap,Ke=new WeakMap,Je=new WeakSet,Yt=function(r){let n=r();return new CancelablePromise((a,o,s)=>{s(()=>n.cancel()),n.then(i=>{d(this,ne,0),a(i);}).catch(i=>{if(i instanceof ApiError){let c=i.status===429,l=i.status>=500&&i.status<600;d(this,ne,b(this,ne)+Number(c||l));}o(i);});})},Xe=new WeakSet,Kt=function(r){let n=b(this,Ke).call(this,b(this,ne));return new CancelablePromise((a,o,s)=>{let i=setTimeout(()=>{let c=r();s(()=>{c.cancel(),clearTimeout(i);}),c.then(a).catch(o);},n);})};var F=(t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}});var Jt={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider/index.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:[],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_sendTransactionBatch","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"],nonRestrictedMethods:["eth_requestAccounts","eth_decrypt","eth_getEncryptionPublicKey","eth_subscribe","eth_unsubscribe","eth_blockNumber","eth_call","eth_chainId","eth_coinbase","eth_estimateGas","eth_feeHistory","eth_gasPrice","eth_getBalance","eth_getBlockByHash","eth_getBlockByNumber","eth_getBlockTransactionCountByHash","eth_getBlockTransactionCountByNumber","eth_getCode","eth_getFilterChanges","eth_getFilterLogs","eth_getLogs","eth_getProof","eth_getStorageAt","eth_getTransactionByBlockHashAndIndex","eth_getTransactionByBlockNumberAndIndex","eth_getTransactionByHash","eth_getTransactionCount","eth_getTransactionReceipt","eth_getUncleCountByBlockHash","eth_getUncleCountByBlockNumber","eth_newBlockFilter","eth_newFilter","eth_newPendingTransactionFilter","eth_syncing","eth_uninstallFilter","net_version","net_peerCount","net_listening","web3_sha3","web3_clientVersion"]}},manifestVersion:"0.1"};var Xt="DUMMY_API_KEY";var Wn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Hn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Qt=t=>{switch(t){case Environment.PRODUCTION:return Wn;case Environment.DEV:return Hn}};var Ze=({accountIndex:t,derivationPathType:e})=>{if(t<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");switch(e){case"bip44":return {[NetworkVMType.EVM]:`m/44'/60'/0'/0/${t}`};case"ledger_live":return {[NetworkVMType.EVM]:`m/44'/60'/${t}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${e}`)}};var rr=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var nr=async t=>{let{secretId:e,approvalController:r}=t,n=rr(t)?Ze(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[NetworkVMType.EVM]:computeAddress(`0x${a}`)}};var N=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:o=2e3}=t,s=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:a},Jn(n),new Network(r,e));return s.pollingInterval=o,s},Kn=["glacier-api.avax.network","proxy-api.avax.network"];function Jn(t){let e=new URL(t),r=we();if(r&&Kn.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}var fe=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42).optional(),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().or(z$1.number().optional()),accessList:z$1.array(z$1.object({address:z$1.string().startsWith("0x"),storageKeys:z$1.array(z$1.string())})).optional()});var ar=z$1.tuple([fe,fe]).rest(fe).refine(t=>It(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>It(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>ea(t,"nonce")||Qn(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'}),Xn=z$1.object({skipIntermediateTxs:z$1.boolean().optional()}),Zn=z$1.union([ar,z$1.object({transactions:ar,options:Xn.optional()})]);function Qn(t,e){return !It(t,e)}function ea(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function It(t,e){return new Set(t.map(n=>n[e])).size===1}var or=t=>{let e=Zn.safeParse(t);return e.success?Array.isArray(e.data)?{success:!0,data:{transactions:e.data,options:{}}}:{success:!0,data:{transactions:e.data.transactions,options:e.data.options??{}}}:e};var Qe=async({from:t,provider:e})=>e.getTransactionCount(t);var sr=async(t,e)=>{if(t[0].nonce)return;let r=await Qe({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))};var ir=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],ae=(s=>(s.TOTAL_SUPPLY="totalSupply",s.BALANCE_OF="balanceOf",s.TRANSFER="transfer",s.TRANSFER_FROM="transferFrom",s.APPROVE="approve",s.ALLOWANCE="allowance",s))(ae||{});var et=t=>{if(t.data)try{let r=new Interface(hr.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&na(n)?n:void 0}catch{return}};function na(t){return Object.values(ae).includes(t)}var tt=(t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:o,alert:s})=>{let{dappInfo:i}=t,c=et(r),l="Do you approve this transaction?";c==="approve"&&(l="Do you approve this spend limit?");let p=[de("Account",r.from),Ye("Network",{name:e.chainName,logoUri:e.logoUri}),ze("Website",i)];r.to&&p.push(de("Contract",r.to));let u={title:l,details:[{title:"Transaction Details",items:p}],networkFeeSelector:!0,alert:s,balanceChange:a,tokenApprovals:o,isSimulationSuccessful:n},f={type:RpcMethod.ETH_SEND_TRANSACTION,account:r.from,data:{type:2,nonce:Number(r.nonce),gasLimit:Number(r.gas),maxFeePerGas:r.maxFeePerGas,maxPriorityFeePerGas:r.maxPriorityFeePerGas,to:r.to,from:r.from,data:r.data,value:r.value,chainId:r.chainId??e.chainId,accessList:r.accessList}};return {displayData:u,signingData:f}};var rt=async(t,e,r)=>{if("txHash"in e)return e.txHash;let n=()=>t.send("eth_sendRawTransaction",[e.signedData]);return r?.shouldRetry?ee({operation:()=>n(),isSuccess:()=>!0,maxRetries:6,backoffPolicy:B.linearThenExponential(4,1e3)}):n()};function ye(t,e,r="tx"){return `${t}/${r}/${e}`}var Be=async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:o,request:s})=>{try{let i=ye(t,r);if(n({txHash:r,request:s,explorerLink:i}),(await ee({operation:async()=>e.getTransactionReceipt(r),isSuccess:p=>!!p,backoffPolicy:B.linearThenExponential(15,750),maxRetries:20}))?.status===1)return a({txHash:r,explorerLink:i,request:s}),!0}catch(i){console.error(i);}return o({txHash:r,request:s}),!1};var nt=new Map,cr=(t,e,r)=>(nt.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},o)=>{let s=nt.get(t);if(!s)throw rpcErrors.resourceNotFound();let{signingRequests:i}=s,l={signingRequests:i.map((p,u)=>{if(o===void 0||o===u){let{signingData:f}=p;return {signingData:{...f,data:{...f.data,maxFeePerGas:n??f.data.maxFeePerGas,maxPriorityFeePerGas:a??f.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return nt.set(t,l),l},cleanup:()=>nt.delete(t)});function oe(t){return !("type"in t)}function at(t){return t.type===TokenType.ERC20}function lr(t){return typeof t.to=="string"}function pr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function ia(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function ca(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function At(t){return ia(t)?t.ins.length===0&&t.outs.length===0:ca(t)?t.approvals.length===0:!1}var mr=async({chainId:t,params:e,domain:r,withGasEstimation:n,blockaid:a})=>{let o=["validation","simulation"];return n&&o.push("gas_estimation"),a.evm.transactionBulk.scan({chain:t.toString(),options:o,data:e,metadata:r&&r.length>0?{domain:r}:{non_dapp:!0}})},dr=async({chainId:t,params:e,domain:r,blockaid:n})=>n.evm.transaction.scan({account_address:e.from,chain:t.toString(),options:["validation","simulation"],data:{from:e.from,to:e.to,data:e.data,value:e.value,gas:e.gas,gas_price:e.gasPrice},metadata:r&&r.length>0?{domain:r}:{non_dapp:!0}}),ur=async({chainId:t,accountAddress:e,data:r,domain:n,blockaid:a})=>a.evm.jsonRpc.scan({chain:t.toString(),options:["validation","simulation"],account_address:e,data:r,metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}});var gr=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,hr.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),o=fr(a[0]),s=fr(a[1]),i=parseInt(a[2]),c={type:TokenType.ERC20,name:o,chainId:e,symbol:s,decimals:i,address:t.to,contractType:"ERC-20"},l=new ethers.Interface(hr.abi),p=l.getFunction(t.data.slice(0,10)),u=l.decodeFunctionData(t.data.slice(0,10),t.data);if(p?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new TokenUnit(u.amount,c.decimals,c.symbol).toDisplay(),usdPrice:void 0}],token:c}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:c,spenderAddress:u.spender,value:u.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};var Y={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious transaction",description:"Use caution, this transaction might be malicious."}},[AlertType.DANGER]:{type:AlertType.DANGER,details:{title:"Scam transaction",description:"This transaction has been flagged as malicious, I understand the risk.",body:["This transaction is malicious","do not proceed"],actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var kr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:o})=>{let s;try{s=await dr({chainId:n,params:r,domain:e,blockaid:o});}catch(i){console.error("simulateTransaction error",i);}return Ct({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:s})},Ct=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:a})=>{let o,s,i,c=!1,l;if(a){let{validation:p,simulation:u,gas_estimation:f}=a;!p||p.result_type==="Error"||p.result_type==="Warning"?o=Y[AlertType.WARNING]:p.result_type==="Malicious"&&(o=Y[AlertType.DANGER]),u?.status==="Success"&&(c=!0,i=vr(t,u.account_summary),s=br(u.account_summary.assets_diffs)),f?.status==="Success"&&(l=Number(f.estimate));}if(!c&&lr(e)){let p=await gr(e,r,n);s=p.balanceChange,i=p.tokenApprovals;}return {alert:o,balanceChange:s,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},ha=t=>t.trace_type==="ExposureTrace",ga=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,Ta=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>ha(r)?{[ga(r.spender,r.asset.address)]:r}:e,{}),vr=(t,e)=>{let{traces:r}=e,n=Ta(r),a=Object.entries(n).map(([s,i])=>{let c=Er(i.asset);if(!c)return;let l={token:c,spenderAddress:i.spender,logoUri:c.logoUri};if(i.type==="ERC20ExposureTrace"){let{exposed:{raw_value:p,value:u,usd_price:f}}=i;if(!u||u<=0)return;l.value=p,l.usdPrice=`${f}`;}if(i.type==="ERC721ExposureTrace")if(!i.exposed)l.value=`0x${MaxUint256.toString(16)}`;else {let{usd_price:p,amount:u}=i.exposed;l.value=`${u}`,l.usdPrice=`${p}`;}return l}).filter(Boolean);return a.length===0?void 0:{isEditable:a.length===1&&a[0]?.token.type===TokenType.ERC20&&t===RpcMethod.ETH_SEND_TRANSACTION,approvals:a}},br=t=>{let e=Tr(t,"in"),r=Tr(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},Tr=(t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,a="address"in n?Er(n):ka(n);if(!a)return;let o=r[e].map(s=>{let i;if("value"in s&&s.value)if("decimals"in a){let u=numberToBN(s.value,a.decimals);i=balanceToDisplayValue(u,a.decimals);}else isHexString(s.value)&&(i=parseInt(s.value,16).toString());else "type"in a&&a.type===TokenType.ERC721&&(i="1");if(!i)return;let c="logo_url"in s?s.logo_url:void 0,l="token_id"in s?s.token_id:void 0;return {displayValue:i,usdPrice:s.usd_price,...c!==void 0&&{logoUri:c},...l!==void 0&&{tokenId:l}}}).filter(s=>s!==void 0);return {token:a,items:o}}).filter(r=>r!==void 0),Er=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},ka=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Pr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:o})=>{let s,i,c;try{let{validation:l,simulation:p}=await ur({chainId:n,accountAddress:r,data:a,domain:e,blockaid:o});!l||l.result_type==="Error"||l.result_type==="Warning"?s=Y[AlertType.WARNING]:l.result_type==="Malicious"&&(s=Y[AlertType.DANGER]),p?.status==="Success"&&(c=vr(t.method,p.account_summary),i=br(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),s=Y[AlertType.WARNING];}return {alert:s,balanceChange:i,tokenApprovals:c}};var Sr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:o,blockaid:s})=>{let i;try{i=await mr({chainId:n,params:r,domain:e,withGasEstimation:o,blockaid:s});}catch(d){return console.error("simulateTransactionBatch error",d),{isSimulationSuccessful:!1,alert:Y[AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(d,y)=>{let v=r[y],P=await Ct({chainId:n,params:r[y],provider:a,rpcMethod:t,simulationResult:d});return o&&!v.gas&&P.estimatedGasLimit&&(v.gas=`0x${P.estimatedGasLimit.toString(16)}`),{transaction:v,...P}})),l=c.every(d=>d.isSimulationSuccessful),p=va(c),u=Ea(c),f=ba(c);return {isSimulationSuccessful:l,alert:p,balanceChange:u,tokenApprovals:f,scans:c.map(d=>(d.tokenApprovals&&(d.tokenApprovals.isEditable=!1),d))}},va=t=>{let e={[AlertType.INFO]:0,[AlertType.WARNING]:1,[AlertType.DANGER]:2};return t.reduce((r,{alert:n})=>n&&(!r||e[n.type]>e[r.type])?n:r,void 0)},ba=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(a=>{let o=r.approvals.find(s=>a.token.address===s.token.address&&a.spenderAddress===s.spenderAddress);if(!o){r.approvals.push({...a});return}o.value=a.value,o.usdPrice=a.usdPrice;}),r),{approvals:[],isEditable:!1});return Pa(e,t),At(e)?void 0:e},Ea=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let o=Rr(r.ins,a);o?o.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let o=Rr(r.outs,a);o?o.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return At(e)?void 0:e},Rr=(t,e)=>t.find(r=>oe(r.token)&&oe(e.token)?r.token.symbol===e.token.symbol:!oe(r.token)&&!oe(e.token)?r.token.address===e.token.address:!1),Pa=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(o=>!oe(o.token)&&!oe(r.token)&&o.token.address===r.token.address)))if(!n.tokenApprovals)t.approvals=t.approvals.filter(o=>o.spenderAddress!==r.spenderAddress&&r.token.address!==o.token.address);else {let o=n.tokenApprovals.approvals.find(s=>s.spenderAddress===r.spenderAddress&&s.token.address===r.token.address);if(!o)continue;r.usdPrice=o.usdPrice,r.value=o.value;}};var Ir=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:o,success:s,error:i}=or(a);if(!s)return console.error("invalid params",i),{error:rpcErrors.invalidParams(F("Transaction params are invalid",i))};let{transactions:c,options:l={}}=o,{skipIntermediateTxs:p=!1}=l,u=await N({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await sr(c,u);}catch(C){return console.error("Unable to calculate nonce",C),{error:rpcErrors.internal(F("Unable to calculate nonce",C))}}let f=c.every(C=>Number(C.gas)>0),{alert:d,balanceChange:y,isSimulationSuccessful:v,tokenApprovals:P,scans:b}=await Sr({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:u,populateMissingGas:!f,blockaid:n});if(!b.every(({transaction:C})=>Number(C.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let I={title:"Do you approve these transactions?",details:[{title:"Transaction Details",items:[de("Account",c[0].from),Ye("Network",{name:e.chainName,logoUri:e.logoUri}),ze("Website",t.dappInfo)]}],isSimulationSuccessful:v,balanceChange:y,alert:d,tokenApprovals:P,networkFeeSelector:!0},g=b.map(C=>tt(t,e,C.transaction,C)),{cleanup:k,updateTx:G}=cr(t.requestId,g,I),W=await r.requestBatchApproval({request:t,signingRequests:g,displayData:I,updateTx:G});if(k(),"error"in W)return {error:W.error};if(W.result.length!==c.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${c.length}, got ${W.result.length}`})};let Ae=[];for(let[C,xn]of W.result.entries()){let $t=C===W.result.length-1,bt=await rt(u,xn);if($t&&Be({explorerUrl:e.explorerUrl??"",provider:u,txHash:bt,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),!$t&&!p&&!await Be({explorerUrl:e.explorerUrl??"",provider:u,txHash:bt,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}))return {error:rpcErrors.internal({message:`Transaction ${C+1} failed! Batch execution stopped`})};Ae.push(bt);}return {result:Ae}};function xr(t,e,r){return new ethers.Contract(t,hr.abi).interface.encodeFunctionData("approve",[e,r])}var it=new Map,Ar=(t,e,r)=>(it.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:o,gasLimit:s})=>{let i=it.get(t);if(!i)throw rpcErrors.resourceNotFound();let{signingData:c,displayData:l}=i,p={...c,data:{...c.data,gasLimit:s??c.data.gasLimit,maxFeePerGas:n??c.data.maxFeePerGas,maxPriorityFeePerGas:a??c.data.maxPriorityFeePerGas}},u={...l};if(typeof o=="string"){if(!o.startsWith("0x"))throw rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let d=l.tokenApprovals;Ia(d),xa(c.data.data);let y=d.approvals[0];p.data.data=xr(y.token.address,y.spenderAddress,o),u.tokenApprovals={approvals:[{...y,value:o}],isEditable:!0};}let f={signingData:p,displayData:u};return it.set(t,f),f},cleanup:()=>it.delete(t)});function Ia(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 xa(t){if((!t||t==="0x"?null:et({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var Cr=async({transactionParams:{from:t,to:e,data:r,value:n,accessList:a},provider:o})=>{let s=await o.getTransactionCount(t);return Number(await o.estimateGas({from:t,to:e,nonce:s,data:r,value:n,accessList:a}))};var Ca=z$1.tuple([fe]),wr=t=>Ca.safeParse(t);var _r=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:o,error:s,success:i}=wr(a);if(!i)return console.error("invalid params",s),{error:rpcErrors.invalidParams(F("Transaction params are invalid",s))};let[c]=o,l=await N({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!c.gas||Number(c.gas)<0)try{let S=await Cr({transactionParams:{from:c.from,to:c.to,data:c.data,value:c.value,accessList:c.accessList},provider:l});c.gas="0x"+S.toString(16);}catch(S){return {error:rpcErrors.internal(F("Unable to calculate gas limit",S))}}if(!c.nonce)try{let S=await Qe({from:c.from,provider:l});c.nonce=String(S);}catch(S){return {error:rpcErrors.internal(F("Unable to calculate nonce",S))}}let p=await kr({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l,blockaid:n}),{displayData:u,signingData:f}=tt(t,e,c,p),{updateTx:d,cleanup:y}=Ar(t.requestId,f,u),v=await r.requestApproval({request:t,displayData:u,signingData:f,updateTx:d});if(y(),"error"in v)return {error:v.error};let P,b=t.context?.shouldRetry===!0;try{P=await rt(l,v,{shouldRetry:b});}catch(S){return {error:rpcErrors.internal(F("Unable to get transaction hash",S))}}return Be({explorerUrl:e.explorerUrl??"",provider:l,txHash:P,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:P}};var wt=t=>{let e="";e+=`Domain
|
|
17
|
+
`;for(let r in t.domain)e+=` ${r}: ${se(String(t.domain[r]))}
|
|
19
18
|
`;e+=`
|
|
20
19
|
Message
|
|
21
20
|
`;for(let r in t.message)if(typeof t.message[r]=="object"&&!Array.isArray(t.message[r])){e+=` ${r}:
|
|
22
21
|
`;for(let n in t.message[r])Array.isArray(t.message[r][n])?(e+=` ${n}:
|
|
23
|
-
`,t.message[r][n].forEach((a,
|
|
24
|
-
`;})):e+=` ${n}: ${
|
|
22
|
+
`,t.message[r][n].forEach((a,o)=>{e+=` ${o}: ${se(a)}
|
|
23
|
+
`;})):e+=` ${n}: ${se(String(t.message[r][n]))}
|
|
25
24
|
`;}else Array.isArray(t.message[r])?(e+=` ${r}:
|
|
26
25
|
`,t.message[r].forEach((n,a)=>{e+=` ${a}:
|
|
27
|
-
`;for(let
|
|
28
|
-
`,n[
|
|
29
|
-
`;})):e+=` ${
|
|
30
|
-
`;})):e+=` ${r}: ${
|
|
31
|
-
`;return e},
|
|
32
|
-
`,e+=`${
|
|
26
|
+
`;for(let o in n)Array.isArray(n[o])?(e+=` ${o}:
|
|
27
|
+
`,n[o].forEach((s,i)=>{e+=` ${i}: ${se(s)}
|
|
28
|
+
`;})):e+=` ${o}: ${se(String(n[o]))}
|
|
29
|
+
`;})):e+=` ${r}: ${se(String(t.message[r]))}
|
|
30
|
+
`;return e},Nr=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
31
|
+
`,e+=`${se(String(r.value))}
|
|
33
32
|
|
|
34
|
-
`;}),e},ee=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 Se=z.string().describe("message"),U=z.string().describe("address");var Fr=z.object({method:z.literal(RpcMethod.ETH_SIGN),params:z.tuple([U,Se])});var Lr=z.object({name:z.string(),type:z.string()}),me=z.object({types:z.object({EIP712Domain:z.array(Lr)}).catchall(z.array(Lr)),primaryType:z.string(),domain:z.record(z.any()),message:z.record(z.any())}),Rt=z.array(z.object({type:z.string(),name:z.string(),value:z.union([z.string(),z.number(),z.boolean(),z.object({}).passthrough(),z.array(z.unknown()),z.null()])})).nonempty(),xt=me.or(Rt),Vr=z.union([z.string().describe("data string"),me]),Mr=z.union([z.string().describe("data string"),xt]),Or=z.object({method:z.literal(RpcMethod.SIGN_TYPED_DATA),params:z.tuple([U,Mr])}),Hr=z.object({method:z.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z.tuple([U,Mr])}),$r=z.object({method:z.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z.tuple([U,Vr])}),Wr=z.object({method:z.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z.tuple([U,Vr])});var qr=z.object({method:z.literal(RpcMethod.PERSONAL_SIGN),params:z.union([z.tuple([Se,U]),z.tuple([Se,U,z.string().optional().describe("password")])])});var La=z.discriminatedUnion("method",[qr,Fr,Or,Hr,$r,Wr]).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 a=n[0],s=n[1];if(typeof s!="string")return {data:s,address:a,method:r};try{let o=JSON.parse(s);return {data:xt.parse(o),address:a,method:r}}catch{return e.addIssue({code:z.ZodIssueCode.custom,message:"param is not a valid json"}),z.NEVER}}case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:{let a=n[0],s=n[1];if(typeof s!="string")return {data:s,address:a,method:r};try{let o=JSON.parse(s);return {data:me.parse(o),address:a,method:r}}catch{return e.addIssue({code:z.ZodIssueCode.custom,message:"param is not a valid json"}),z.NEVER}}}});function jr(t){return La.safeParse(t)}var zr=t=>Rt.safeParse(t).success,Ml=t=>me.safeParse(t).success;var Jr=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 Yr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=jr({method:t.method,params:t.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:a.error}})};let{method:s,data:o,address:i}=a.data,c;(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Jr(o));let l,p,d;if(c&&!c.isValid&&(d={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:c.error.toString()}}),s===RpcMethod.ETH_SIGN)l={type:s,account:i,data:o},p=o;else if(s===RpcMethod.PERSONAL_SIGN)l={type:s,account:i,data:o},p=toUtf8String(o);else if(s===RpcMethod.SIGN_TYPED_DATA||s===RpcMethod.SIGN_TYPED_DATA_V1)l={type:s,account:i,data:o},p=zr(o)?Ur(o):bt(o);else if(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4){l={type:s,account:i,data:o};let{types:h,primaryType:v,...E}=o;p=bt(E);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let m=await br({request:t,accountAddress:i,chainId:e.chainId,data:{method:s,params:t.params},dAppUrl:t.dappInfo.url,blockaid:n}),u={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} is requesting to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[mt("Message",p,"vertical")]}],alert:m?.alert??d,balanceChange:m?.balanceChange,tokenApprovals:m?.tokenApprovals},y=await r.requestApproval({request:t,displayData:u,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Kr=async(t,e)=>{try{return {result:await(await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})).send(t.method,t.params)}}catch(r){let n=r.info?.error?.message||r.error?.message||r.message;return {error:rpcErrors.internal(n)}}};var Zr=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 Qr=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var Qe=({accountIndex:t,derivationPathType:e})=>{if(t<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");switch(e){case"bip44":return {[NetworkVMType.EVM]:`m/44'/60'/0'/0/${t}`};case"ledger_live":return {[NetworkVMType.EVM]:`m/44'/60'/${t}'/0/0`};default:throw rpcErrors.invalidParams(`Unsupported derivation path type: ${e}`)}};var rn=async t=>{let{secretId:e,approvalController:r}=t,n=Qr(t)?Qe(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[NetworkVMType.EVM]:computeAddress(`0x${a}`)}};var fe,et=class{constructor(e){this.baseUrl=e;c(this,fe,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(a=>a.community_id).some(a=>a===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let a=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(a.ok)return await a.json();throw new Error(`${a.status}:${a.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(b(this,fe).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,fe,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,fe)}async getNftList({address:e,chainId:r}){return N([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],Xa)}};fe=new WeakMap;var Ya=z.object({id:z.union([z.custom(isHexString),z.string()]),chain:z.string(),name:z.string()}),Ka=Ya.merge(z.object({contract_id:z.string(),description:z.string().nullable(),content_type:z.string().nullable(),content:z.string(),thumbnail_url:z.string(),total_supply:z.number(),detail_url:z.string(),collection_id:z.string(),is_core:z.boolean(),inner_id:z.string(),collection_name:z.string(),contract_name:z.string(),amount:z.number(),usd_price:z.number().optional(),is_erc721:z.boolean().optional(),is_erc1155:z.boolean().optional()})),Xa=z.array(Ka);var G,ye,rt,at,an,nt=class{constructor({proxyApiUrl:e}){c(this,ye);c(this,at);c(this,G,void 0);d(this,G,new et(`${e}/proxy/debank`));}async isNetworkSupported(e){return b(this,G).isNetworkSupported(e)}async getNativeBalance({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:s}=await e(this,ye,rt).call(this,e$1),o=a.native_token_id,i=await b(this,G).getTokenBalance({address:r,chainId:s,tokenId:o}),c=new TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),d=(await Ue()).usd[n.toLowerCase()],m=d?d*i.price:void 0,u=m?c.mul(m).toDisplay({fixedDp:2}):void 0,y=m?c.mul(m).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:y,balanceCurrencyDisplayValue:u,priceInCurrency:m}}async listErc20Balances({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:s}=await e(this,ye,rt).call(this,e$1),o=await b(this,G).getTokensBalanceOnChain({chainId:s,address:r}),i=await Ue(),c={};for(let l of o){if(l.id===a.native_token_id||l.is_core===!1)continue;let p=new TokenUnit(l.raw_amount,l.decimals,l.symbol),d=p.toDisplay(),m=i.usd[n.toLowerCase()],u=m?m*l.price:void 0,y=u?p.mul(u).toDisplay({fixedDp:2}):void 0,h=u?p.mul(u).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:a.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:y,balanceDisplayValue:d,balanceInCurrency:h,priceInCurrency:u,type:TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e$1,address:r}){if(!isHexString(r))throw rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await e(this,ye,rt).call(this,e$1),a=await b(this,G).getNftList({chainId:n,address:r});return e(this,at,an).call(this,a,e$1)}};G=new WeakMap,ye=new WeakSet,rt=async function(e){let n=(await b(this,G).getChainList()).find(s=>s.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await b(this,G).getChainInfo({chainId:n});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},at=new WeakSet,an=function(e,r){return e.reduce((n,a)=>({...n,[`${a.contract_id}-${a.id}`]:{chainId:r,address:a.contract_id,description:a.description??"",logoUri:a.thumbnail_url,logoSmall:Ke(a.content),name:a.name,symbol:"",tokenId:`${a.inner_id}`,tokenUri:a.detail_url,collectionName:a.collection_name,balance:BigInt(a.amount),balanceDisplayValue:`${a.amount}`,type:a.is_erc721?TokenType.ERC721:TokenType.ERC1155,metadata:{indexStatus:NftTokenMetadataStatus.UNINDEXED,description:a.description??"",properties:""}}}),{})};var on=z.tuple([ie,ie]).rest(ie).refine(t=>At(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>At(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>ro(t,"nonce")||to(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'}),Qa=z.object({skipIntermediateTxs:z.boolean().optional()}),eo=z.union([on,z.object({transactions:on,options:Qa.optional()})]);function to(t,e){return !At(t,e)}function ro(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function At(t,e){return new Set(t.map(n=>n[e])).size===1}var sn=t=>{let e=eo.safeParse(t);return e.success?Array.isArray(e.data)?{success:!0,data:{transactions:e.data,options:{}}}:{success:!0,data:{transactions:e.data.transactions,options:e.data.options??{}}}:e};var cn=async(t,e)=>{if(t[0].nonce)return;let r=await Me({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))};var ot=new Map,ln=(t,e,r)=>(ot.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},s)=>{let o=ot.get(t);if(!o)throw rpcErrors.resourceNotFound();let{signingRequests:i}=o,l={signingRequests:i.map((p,d)=>{if(s===void 0||s===d){let{signingData:m}=p;return {signingData:{...m,data:{...m.data,maxFeePerGas:n??m.data.maxFeePerGas,maxPriorityFeePerGas:a??m.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return ot.set(t,l),l},cleanup:()=>ot.delete(t)});var mn=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:s,blockaid:o})=>{let i;try{i=await cr({chainId:n,params:r,domain:e,withGasEstimation:s,blockaid:o});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:W[AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,y)=>{let h=r[y],v=await Et({chainId:n,params:r[y],provider:a,rpcMethod:t,simulationResult:u});return s&&!h.gas&&v.estimatedGasLimit&&(h.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:h,...v}})),l=c.every(u=>u.isSimulationSuccessful),p=ao(c),d=so(c),m=oo(c);return {isSimulationSuccessful:l,alert:p,balanceChange:d,tokenApprovals:m,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},ao=t=>{let e={[AlertType.INFO]:0,[AlertType.WARNING]:1,[AlertType.DANGER]:2};return t.reduce((r,{alert:n})=>n&&(!r||e[n.type]>e[r.type])?n:r,void 0)},oo=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(a=>{let s=r.approvals.find(o=>a.token.address===o.token.address&&a.spenderAddress===o.spenderAddress);if(!s){r.approvals.push({...a});return}s.value=a.value,s.usdPrice=a.usdPrice;}),r),{approvals:[],isEditable:!1});return io(e,t),kt(e)?void 0:e},so=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let s=pn(r.ins,a);s?s.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let s=pn(r.outs,a);s?s.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return kt(e)?void 0:e},pn=(t,e)=>t.find(r=>Z(r.token)&&Z(e.token)?r.token.symbol===e.token.symbol:!Z(r.token)&&!Z(e.token)?r.token.address===e.token.address:!1),io=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(s=>!Z(s.token)&&!Z(r.token)&&s.token.address===r.token.address)))if(!n.tokenApprovals)t.approvals=t.approvals.filter(s=>s.spenderAddress!==r.spenderAddress&&r.token.address!==s.token.address);else {let s=n.tokenApprovals.approvals.find(o=>o.spenderAddress===r.spenderAddress&&o.token.address===r.token.address);if(!s)continue;r.usdPrice=s.usdPrice,r.value=s.value;}};var dn=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,success:o,error:i}=sn(a);if(!o)return console.error("invalid params",i),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let{transactions:c,options:l={}}=s,{skipIntermediateTxs:p=!1}=l,d=await C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await cn(c,d);}catch(I){return console.error("Unable to calculate nonce",I),{error:rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:I}})}}let m=c.every(I=>Number(I.gas)>0),{alert:u,balanceChange:y,isSimulationSuccessful:h,tokenApprovals:v,scans:E}=await mn({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:d,populateMissingGas:!m,blockaid:n});if(!E.every(({transaction:I})=>Number(I.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let g={title:"Do you approve these transactions?",details:[{title:"Transaction Details",items:[ne("Account",c[0].from),Le("Network",{name:e.chainName,logoUri:e.logoUri}),Fe("Website",t.dappInfo)]}],isSimulationSuccessful:h,balanceChange:y,alert:u,tokenApprovals:v,networkFeeSelector:!0},k=E.map(I=>We(t,e,I.transaction,I)),{cleanup:_,updateTx:it}=ln(t.requestId,k,g),V=await r.requestBatchApproval({request:t,signingRequests:k,displayData:g,updateTx:it});if(_(),"error"in V)return {error:V.error};if(V.result.length!==c.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${c.length}, got ${V.result.length}`})};let he=[];for(let[I,yn]of V.result.entries()){let wt=I===V.result.length-1,ct=await ze(d,yn);if(wt&&Pe({explorerUrl:e.explorerUrl??"",provider:d,txHash:ct,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),!wt&&!p&&!await Pe({explorerUrl:e.explorerUrl??"",provider:d,txHash:ct,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}))return {error:rpcErrors.internal({message:`Transaction ${I+1} failed! Batch execution stopped`})};he.push(ct);}return {result:he}};var ge,Ne,J,L,te,fn=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){c(this,ge,void 0);c(this,Ne,void 0);c(this,J,void 0);c(this,L,void 0);c(this,te,void 0);let{glacierApiUrl:s,proxyApiUrl:o}=Cr(r);d(this,ge,new Xe({glacierApiUrl:s,headers:dt(n)})),d(this,Ne,new nt({proxyApiUrl:o})),d(this,J,o),d(this,L,e),d(this,te,new lo({baseURL:o+"/proxy/blockaid/",apiKey:Br,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return C({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Zr({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return Qe(e)}deriveAddress(e){return rn({...e,approvalController:b(this,L)})}getBalances({addresses:e,network:r,currency:n,customTokens:a,storage:s,tokenTypes:o}){let i=new H({storage:s,proxyApiUrl:b(this,J)});return Ar({addresses:e,currency:n,network:r,proxyApiUrl:b(this,J),customTokens:a,balanceServices:[b(this,ge),b(this,Ne)],storage:s,tokenTypes:o,tokenService:i})}getManifest(){let e=parseManifest(ar);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:s,caipId:o}=e;return Ft({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:s?.multicall,caipId:o,proxyApiUrl:b(this,J)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:a,offset:s}=e,{chainId:o,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return nr({chainId:o,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:a,offset:s,glacierService:b(this,ge)})}getTokens(e){let{chainId:r}=e;return _e({chainId:r,proxyApiUrl:b(this,J)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return Rr({request:e,network:r,approvalController:b(this,L),blockaid:b(this,te)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return gr(b(this,L))?dn({request:e,network:r,approvalController:b(this,L),blockaid:b(this,te)}):{error:rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};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 Yr({request:e,network:r,approvalController:b(this,L),blockaid:b(this,te)});default:return po(e.method)?Kr(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ge=new WeakMap,Ne=new WeakMap,J=new WeakMap,L=new WeakMap,te=new WeakMap;var po=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
33
|
+
`;}),e},se=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 Fe=z$1.string().describe("message"),M=z$1.string().describe("address");var Dr=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([M,Fe])});var Ur=z$1.object({name:z$1.string(),type:z$1.string()}),ge=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Ur)}).catchall(z$1.array(Ur)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),Nt=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(),Bt=ge.or(Nt),Fr=z$1.union([z$1.string().describe("data string"),ge]),Gr=z$1.union([z$1.string().describe("data string"),Bt]),Mr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([M,Gr])}),Lr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([M,Gr])}),Vr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([M,Fr])}),Or=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([M,Fr])});var $r=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([Fe,M]),z$1.tuple([Fe,M,z$1.string().optional().describe("password")])])});var Na=z$1.discriminatedUnion("method",[$r,Dr,Mr,Lr,Vr,Or]).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 a=n[0],o=n[1];if(typeof o!="string")return {data:o,address:a,method:r};try{let s=JSON.parse(o);return {data:Bt.parse(s),address:a,method:r}}catch{return e.addIssue({code: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 a=n[0],o=n[1];if(typeof o!="string")return {data:o,address:a,method:r};try{let s=JSON.parse(o);return {data:ge.parse(s),address:a,method:r}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function Wr(t){return Na.safeParse(t)}var Hr=t=>Nt.safeParse(t).success,al=t=>ge.safeParse(t).success;var jr=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 qr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=Wr({method:t.method,params:t.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.invalidParams(F("Params are invalid",a.error))};let{method:o,data:s,address:i}=a.data,c;(o===RpcMethod.SIGN_TYPED_DATA_V3||o===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=jr(s));let l,p,u;if(c&&!c.isValid&&(u={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:c.error.toString()}}),o===RpcMethod.ETH_SIGN)l={type:o,account:i,data:s},p=s;else if(o===RpcMethod.PERSONAL_SIGN)l={type:o,account:i,data:s},p=toUtf8String(s);else if(o===RpcMethod.SIGN_TYPED_DATA||o===RpcMethod.SIGN_TYPED_DATA_V1)l={type:o,account:i,data:s},p=Hr(s)?Nr(s):wt(s);else if(o===RpcMethod.SIGN_TYPED_DATA_V3||o===RpcMethod.SIGN_TYPED_DATA_V4){l={type:o,account:i,data:s};let{types:v,primaryType:P,...b}=s;p=wt(b);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let f=await Pr({request:t,accountAddress:i,chainId:e.chainId,data:{method:o,params:t.params},dAppUrl:t.dappInfo.url,blockaid:n}),d={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} is requesting to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[Rt("Message",p,"vertical")]}],alert:f?.alert??u,balanceChange:f?.balanceChange,tokenApprovals:f?.tokenApprovals},y=await r.requestApproval({request:t,displayData:d,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.internal("No signed data returned")}};var zr=async(t,e)=>{try{return {result:await(await N({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 Kr=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}`)}};function ve(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function be(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let a=n.value;a.status==="fulfilled"?r[a.id]=a.value:r[a.id]={error:a.reason};}return r},{}))}async function mt({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 _,Ee,ie,Le,Pe,dt=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:a,fetch:o}){c(this,_,void 0);c(this,Ee,void 0);c(this,ie,void 0);c(this,Le,void 0);c(this,Pe,void 0);d(this,_,e),d(this,Ee,r),d(this,ie,n),d(this,Le,a),d(this,Pe,o);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await N({chainId:e,chainName:b(this,_).chainName,rpcUrl:b(this,_).rpcUrl,multiContractAddress:b(this,_).utilityAddresses?.multicall}),o=b(this,_).pricingProviders?.coingecko.nativeTokenId,s=b(this,_).networkToken,i=new z({storage:b(this,Ee),proxyApiUrl:b(this,ie),fetch:b(this,Pe)}),c=o?await i.getSimplePrice({coinIds:[o],currencies:[n]}):{},l=c?.[o??""]?.[n]?.price??void 0,p=c?.[o??""]?.[n]?.marketCap??void 0,u=c?.[o??""]?.[n]?.vol24??void 0,f=c?.[o??""]?.[n]?.change24??void 0,d=await a.getBalance(r),y=new TokenUnit(d,s.decimals,s.symbol),v=l!==void 0?y.mul(l):void 0;return {...s,coingeckoId:o??"",type:TokenType.NATIVE,balance:d,balanceDisplayValue:y.toDisplay(),balanceInCurrency:v?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:v?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:u,change24:f}}async listErc20Balances({chainId:e,address:r,currency:n}){let a=await N({chainId:e,chainName:b(this,_).chainName,rpcUrl:b(this,_).rpcUrl,multiContractAddress:b(this,_).utilityAddresses?.multicall}),o=b(this,_).pricingProviders?.coingecko.assetPlatformId,s=b(this,_).pricingProviders?.coingecko.nativeTokenId,i=await mt({chainId:Number(e),proxyApiUrl:b(this,ie)}),c=i.map(b=>b.address),l=[...i,...b(this,Le)].filter(at),p=async b=>{let g=await new ethers.Contract(b.address,hr.abi,a).balanceOf?.(r)||0n;return {...b,balance:g}},u=l.map(b=>ve(p(b),b.address)),f=await be(u),d=new z({storage:b(this,Ee),proxyApiUrl:b(this,ie),fetch:b(this,Pe)}),y=o&&await d.getPricesByAddresses(c,o,n)||{},v=Object.keys(f),P={};for(let b=0;b<v.length;b++){let S=v[b];if(S===void 0)continue;let I=f[S];if(I===void 0||"error"in I){P[S]={error:`rpcService:getTokenWithBalance failed: ${I?.error??"unknown error"}`};continue}let g=y?.[s??""]?.[n]?.price??void 0,k=y?.[s??""]?.[n]?.marketCap??void 0,G=y?.[s??""]?.[n]?.vol24??void 0,W=y?.[s??""]?.[n]?.change24??void 0,Ae=new TokenUnit(I.balance,I.decimals,I.symbol),C=g!==void 0?Ae.mul(g):void 0;P[I.address.toLowerCase()]={...I,type:TokenType.ERC20,balance:I.balance,balanceDisplayValue:Ae.toDisplay(),balanceInCurrency:C?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:C?.toDisplay({fixedDp:2}),priceInCurrency:g,marketCap:k,change24:W,vol24:G,reputation:null};}return P}async listNftBalances(){return {}}};_=new WeakMap,Ee=new WeakMap,ie=new WeakMap,Le=new WeakMap,Pe=new WeakMap;async function Zr(t,e){let r=t.map(async(o,s)=>({index:s,result:await e(o)})),a=(await Promise.allSettled(r)).filter(o=>o.status==="fulfilled").map(o=>o).find(o=>o.value.result);return a?t[a.value.index]:void 0}var Qr=async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:a=[TokenType.NATIVE,TokenType.ERC20,TokenType.ERC721,TokenType.ERC1155],customTokens:o=[],storage:s,balanceServices:i=[],tokenService:c,fetch:l})=>{let p=r.chainId,u=[...i,new dt({network:r,storage:s,proxyApiUrl:n,customTokens:o,fetch:l})],f=await Zr(u,y=>y.isNetworkSupported(r.chainId)),d={};if(f){let y=[],v=[],P=[];t.forEach(g=>{a.includes(TokenType.NATIVE)&&y.push(ve(f.getNativeBalance({address:g,currency:e.toUpperCase(),chainId:p}).then(async k=>{if(k.symbol==="AVAX"){let G=await c.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...k,priceInCurrency:G.priceInCurrency,marketCap:G.marketCap,vol24:G.vol24,change24:G.change24}}return k}),g)),a.includes(TokenType.ERC20)&&v.push(ve(f.listErc20Balances({customTokens:o.filter(at),currency:e.toUpperCase(),chainId:p,address:g,pageSize:100}),g)),(a.includes(TokenType.ERC721)||a.includes(TokenType.ERC1155))&&P.push(ve(f.listNftBalances({chainId:p,address:g}),g));});let b=await be(y),S=await be(v),I=await be(P);Object.keys(b).forEach(g=>{let k=b[g];if(!k||"error"in k){d[g]={error:`getNativeBalance failed: ${k?.error??"unknown error"}`};return}let G=k.symbol;d[g]={[G]:k};}),Object.keys(S).forEach(g=>{let k=S[g];!k||"error"in k&&typeof k.error!="string"?d[g]={...d[g],error:"listErc20Balances failed: unknown error"}:"error"in k&&typeof k.error=="string"?d[g]={...d[g],error:`listErc20Balances failed: ${k.error}`}:d[g]={...d[g],...k};}),Object.keys(I).forEach(g=>{let k=I[g];!k||"error"in k&&typeof k.error!="string"?d[g]={...d[g],error:"listNftBalances failed: unknown error"}:"error"in k&&typeof k.error=="string"?d[g]={...d[g],error:`listNftBalances failed: ${k.error}`}:d[g]={...d[g],...k};});}else t.forEach(y=>{d[y]={error:"unsupported network"};});return d};var Ft={LOW:1n,MEDIUM:4n,HIGH:6n},Gt=500000000n,Wa=t=>t===ChainId.AVALANCHE_TESTNET_ID||t===ChainId.AVALANCHE_MAINNET_ID;async function rn({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:o}){let s=await N({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!o)throw rpcErrors.internal("Proxy API URL is needed");if(Wa(t))try{let b=await Ha(s);return {...b,baseFee:b.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}let i=await s.getBlock("latest",!1);if(!i)throw rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await ja(o,a),p=new TokenUnit(l,0,""),u=new TokenUnit(c,0,""),f=BigInt("1000000000"),d=u.mul(p).add(f).toSubUnit(),y=Gt*Ft.LOW,v=Gt*Ft.MEDIUM,P=Gt*Ft.HIGH;return {baseFee:d,low:{maxFeePerGas:d+y,maxPriorityFeePerGas:y},medium:{maxFeePerGas:d+v,maxPriorityFeePerGas:v},high:{maxFeePerGas:d+P,maxPriorityFeePerGas:P},isFixedFee:!1,displayDecimals:9}}async function Ha(t){let e=await t.send("eth_suggestPriceOptions",[]);return {low:{maxFeePerGas:BigInt(e.slow.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.slow.maxPriorityFeePerGas)},medium:{maxFeePerGas:BigInt(e.normal.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.normal.maxPriorityFeePerGas)},high:{maxFeePerGas:BigInt(e.fast.maxFeePerGas),maxPriorityFeePerGas:BigInt(e.fast.maxPriorityFeePerGas)}}}async function ja(t,e){if(!e)return 1.5;try{let n=await fetch(`${t}/gas/multiplier`);if(!n.ok)throw new Error(n.statusText);let a=await n.json();return a[e]??a.default}catch{return 1.5}}function nn({tx:t,networkToken:e,explorerUrl:r,chainId:n,address:a}){let o=t.from_address.toLowerCase()===a.toLowerCase(),s=new Date(t.block_timestamp).getTime(),i=Ya(t.category),c=!qa.has(t.category),l=Ka(t,e,a),p=ye(r,t.hash);return {isContractCall:c,isIncoming:!o,isOutgoing:o,isSender:o,timestamp:s,hash:t.hash,from:t.from_address,to:t.to_address??"",tokens:l,gasPrice:t.gas_price,gasUsed:t.receipt_gas_used,chainId:n.toString(),txType:i,method:t.method_label??void 0,explorerLink:p}}var qa=new Set(["send","receive","token send","token receive"]),za={send:TransactionType.SEND,receive:TransactionType.RECEIVE,"token send":TransactionType.SEND,"token receive":TransactionType.RECEIVE,"nft send":TransactionType.NFT_SEND,"nft receive":TransactionType.NFT_RECEIVE,"token swap":TransactionType.SWAP,"nft purchase":TransactionType.NFT_BUY,"nft sale":TransactionType.NFT_SEND,airdrop:TransactionType.AIRDROP,mint:TransactionType.NFT_BUY,burn:TransactionType.UNKNOWN,deposit:TransactionType.UNKNOWN,withdraw:TransactionType.UNKNOWN,borrow:TransactionType.UNKNOWN,"contract interaction":TransactionType.UNKNOWN};function Ya(t){return za[t]??TransactionType.UNKNOWN}function X(t){if(!(t==null||t===""))return {address:t}}function Ka(t,e,r){let n=[];for(let a of t.native_transfers)n.push(Ja(a,e));for(let a of t.erc20_transfers)n.push(Xa(a));for(let a of t.nft_transfers)n.push(Za(a));return n.length===0&&n.push(Qa(t,e,r)),n}function Ja(t,e){let r=new TokenUnit(t.value,e.decimals,e.symbol);return {decimal:e.decimals.toString(),name:e.name,symbol:t.token_symbol||e.symbol,amount:r.toDisplay(),from:X(t.from_address),to:X(t.to_address),type:TokenType.NATIVE}}function Xa(t){let e=Number(t.token_decimals),r=new TokenUnit(t.value,e,t.token_symbol);return {decimal:t.token_decimals,name:t.token_name,symbol:t.token_symbol,amount:r.toDisplay(),from:X(t.from_address),to:X(t.to_address),type:TokenType.ERC20,address:t.address}}function Za(t){let e=t.contract_type==="ERC1155"?TokenType.ERC1155:TokenType.ERC721;return {name:"",symbol:"",amount:t.amount,collectableTokenId:t.token_id,from:X(t.from_address),to:X(t.to_address),type:e,address:t.token_address}}function Qa(t,e,r){let n=new TokenUnit(t.value,e.decimals,e.symbol),o=t.from_address.toLowerCase()===r.toLowerCase()?`-${n.toDisplay()}`:n.toDisplay();return {decimal:e.decimals.toString(),name:e.name,symbol:e.symbol,amount:o,from:X(t.from_address),to:X(t.to_address),type:TokenType.NATIVE}}var eo="https://proxy-api.avax.network/proxy/moralis-evm";async function an({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:o}){try{let s=`0x${t.toString(16)}`,i=new URLSearchParams({chain:s,limit:(o??25).toString()});a&&i.set("cursor",a);let c=`${eo}/wallets/${n}/history?${i.toString()}`,l=await fetch(c);if(!l.ok)return {transactions:[],nextPageToken:""};let p=await l.json();return Array.isArray(p.result)?{transactions:p.result.filter(f=>f.receipt_status==="1").map(f=>nn({tx:f,networkToken:e,explorerUrl:r,chainId:t,address:n})),nextPageToken:p.cursor??""}:{transactions:[],nextPageToken:""}}catch{return {transactions:[],nextPageToken:""}}}var to=new Set([1,4,5,11155111,8453,42161,10]);function on(t){return to.has(t)}var ln=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,o)=>{let s=!e&&!r&&!n,i=no(t.method?.methodName),c=a.toLowerCase(),l=i.toLowerCase().includes("swap"),p=s&&t.from.address.toLowerCase()===c,u=s&&t.to.address.toLowerCase()===c,f=i==="Market Buy Orders With Eth"||i==="Buy NFT",d=i==="Approve",y=i.toLowerCase().includes("transfer"),v=i.toLowerCase().includes("airdrop"),P=i.toLowerCase().includes("unwrap"),b=i==="Fill Order",S=!!o[0]&&cn(o[0].type)&&o[0].from?.address.toLowerCase()===c,I=!!o[0]&&cn(o[0].type)&&o[0].to?.address.toLowerCase()===c;return l?TransactionType.SWAP:p?TransactionType.SEND:u?TransactionType.RECEIVE:f?TransactionType.NFT_BUY:d?TransactionType.APPROVE:S?TransactionType.NFT_SEND:I?TransactionType.NFT_RECEIVE:y?TransactionType.TRANSFER:v?TransactionType.AIRDROP:P?TransactionType.UNWRAP:b?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function cn(t){return t===TokenType.ERC721||t===TokenType.ERC1155}var no=(t="")=>t.includes("(")?ro(t.split("(",1)[0]):t;var pn=(t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},a)=>{let o=t===TransactionType.TRANSFER,s=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=s||o&&c.toLowerCase()===a.toLowerCase(),u=i||o&&l.toLowerCase()===a.toLowerCase();return {isOutgoing:p,isIncoming:u,isSender:c===a,from:c,to:l}};async function mn(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var oo="https://ipfs.io";function Re(t,e=oo){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}async function so(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function dn(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 so(Re(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var io="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function un(t,e="256"){let r=Re(t);return `${io}/width=${e},fit/${r}`}var hn=async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a)=>{let o=[];if(t.value!=="0"){let s=a.decimals,c=new TokenUnit(t.value,a.decimals,a.symbol).toDisplay();o.push({decimal:s.toString(),name:a.name,symbol:a.symbol,amount:c,from:t.from,to:t.to,type:TokenType.NATIVE});}return e?.forEach(s=>{let i=s.erc20Token.decimals,l=new TokenUnit(s.value,i,s.erc20Token.symbol).toDisplay();o.push({decimal:i.toString(),address:s.erc20Token.address,name:s.erc20Token.name,symbol:s.erc20Token.symbol,amount:l,from:s.from,to:s.to,imageUri:s.erc20Token.logoUri,type:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async s=>{let i=s.erc721Token,c=await yn(i.tokenUri,i.metadata.imageUri);o.push({name:s.erc721Token.name,symbol:s.erc721Token.symbol,address:s.erc721Token.address,amount:"1",imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc721Token.tokenId,type:TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async s=>{let i=s.erc1155Token,c=await yn(i.tokenUri,i.metadata.imageUri);o.push({name:s.erc1155Token.metadata.name??"",symbol:s.erc1155Token.metadata.symbol??"",address:s.erc1155Token.address,amount:s.value,imageUri:c,from:s.from,to:s.to,collectableTokenId:s.erc1155Token.tokenId,type:TokenType.ERC1155});})),o},yn=async(t,e)=>{if(e)return e.startsWith("ipfs://")?Re(e):e;{let[r,n]=await mn(dn(t));return n?"":r.image?un(r.image):""}};var gn=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let o=await hn(t,r),s=ln(t,a,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:u}=pn(s,t,a),{blockTimestamp:f,txHash:d,gasPrice:y,gasUsed:v}=t.nativeTransaction,P=ye(e,d);return {isContractCall:!ir.includes(s),isIncoming:c,isOutgoing:i,isSender:l,timestamp:f*1e3,hash:d,from:p,to:u,tokens:o,gasPrice:y,gasUsed:v,chainId:n.toString(),txType:s,explorerLink:P}};var Tn=async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:a,offset:o,glacierService:s})=>{try{let i=await s.listTransactions({chainId:t.toString(),address:n,pageToken:a,pageSize:o});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>gn({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(u=>u)))).filter(p=>p.tokens.find(u=>Number(u.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var kn=async({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:o,glacierService:s})=>on(t)?an({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:o}):s.isHealthy()?Tn({networkToken:e,explorerUrl:r,chainId:t,address:n,nextPageToken:a,offset:o,glacierService:s}):{transactions:[],nextPageToken:""};var lo="https://ipfs.io";function vn(t,e=lo){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}var po="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function ft(t,e="256"){let r=vn(t);return `${po}/width=${e},fit/${r}`}var Se,V,yt=class{constructor(e,r){this.baseUrl=e;c(this,Se,[]);c(this,V,void 0);d(this,V,r??fetch);}async isNetworkSupported(e){return (await this.getChainList()).some(n=>n.community_id===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let a=await b(this,V).call(this,`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(a.ok)return await a.json();throw new Error(`${a.status}:${a.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await b(this,V).call(this,`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await(b(this,V)??globalThis.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,Se).length===0){let e=await b(this,V).call(this,`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,Se,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,Se)}async getNftList({address:e,chainId:r}){return U([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],yo,b(this,V))}};Se=new WeakMap,V=new WeakMap;var uo=z$1.object({id:z$1.union([z$1.custom(isHexString),z$1.string()]),chain:z$1.string(),name:z$1.string()}),fo=uo.merge(z$1.object({contract_id:z$1.string(),description:z$1.string().nullable(),content_type:z$1.string().nullable(),content:z$1.string(),thumbnail_url:z$1.string(),total_supply:z$1.number(),detail_url:z$1.string(),collection_id:z$1.string(),is_core:z$1.boolean(),inner_id:z$1.string(),collection_name:z$1.string(),contract_name:z$1.string(),amount:z$1.number(),usd_price:z$1.number().optional(),is_erc721:z$1.boolean().optional(),is_erc1155:z$1.boolean().optional()})),yo=z$1.array(fo);var L,Ie,gt,kt,En,Tt=class{constructor({proxyApiUrl:e,fetch:r}){c(this,Ie);c(this,kt);c(this,L,void 0);d(this,L,new yt(`${e}/proxy/debank`,r));}async isNetworkSupported(e){return b(this,L).isNetworkSupported(e)}async getNativeBalance({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:o}=await e(this,Ie,gt).call(this,e$1),s=a.native_token_id,i=await b(this,L).getTokenBalance({address:r,chainId:o,tokenId:s}),c=new TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),u=(await je()).usd[n.toLowerCase()],f=u?u*i.price:void 0,d=f?c.mul(f).toDisplay({fixedDp:2}):void 0,y=f?c.mul(f).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:y,balanceCurrencyDisplayValue:d,priceInCurrency:f}}async listErc20Balances({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:o}=await e(this,Ie,gt).call(this,e$1),s=await b(this,L).getTokensBalanceOnChain({chainId:o,address:r}),i=await je(),c={};for(let l of s){if(l.id===a.native_token_id||l.is_core===!1)continue;let p=new TokenUnit(l.raw_amount,l.decimals,l.symbol),u=p.toDisplay(),f=i.usd[n.toLowerCase()],d=f?f*l.price:void 0,y=d?p.mul(d).toDisplay({fixedDp:2}):void 0,v=d?p.mul(d).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:u,balanceInCurrency:v,priceInCurrency:d,type:TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e$1,address:r}){if(!isHexString(r))throw rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await e(this,Ie,gt).call(this,e$1),a=await b(this,L).getNftList({chainId:n,address:r});return e(this,kt,En).call(this,a,e$1)}};L=new WeakMap,Ie=new WeakSet,gt=async function(e){let n=(await b(this,L).getChainList()).find(o=>o.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await b(this,L).getChainInfo({chainId:n});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},kt=new WeakSet,En=function(e,r){return e.reduce((n,a)=>({...n,[`${a.contract_id}-${a.id}`]:{chainId:r,address:a.contract_id,description:a.description??"",logoUri:a.thumbnail_url,logoSmall:ft(a.content),name:a.name,symbol:"",tokenId:`${a.inner_id}`,tokenUri:a.detail_url,collectionName:a.collection_name,balance:BigInt(a.amount),balanceDisplayValue:`${a.amount}`,type:a.is_erc721?TokenType.ERC721:TokenType.ERC1155,metadata:{indexStatus:NftTokenMetadataStatus.UNINDEXED,description:a.description??"",properties:""}}}),{})};var O=class extends Error{constructor(){super(...arguments);a(this,"message","Glacier is unhealthy. Try again later.");}},vo=[ChainId.ETHEREUM_HOMESTEAD],vt=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},_e),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(n=>n===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(r=>r.chainId).filter(r=>!vo.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(a){throw a instanceof O&&this.setGlacierToUnhealthy(),a}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(a){throw a instanceof O&&this.setGlacierToUnhealthy(),a}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:a}){try{let s=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new TokenUnit(s.balance,s.decimals,s.symbol),c=s.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:s.name,symbol:s.symbol,decimals:s.decimals,type:TokenType.NATIVE,logoUri:s.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:a??""}}catch(o){throw o instanceof O&&this.setGlacierToUnhealthy(),o}}async listErc721Balances({chainId:e,address:r}){let n,a=[];do try{let o=await this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:r,pageSize:100,pageToken:n});a.push(...o.erc721TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof O&&this.setGlacierToUnhealthy(),o}while(n);return a}async listErc1155Balances({chainId:e,address:r}){let n,a=[];do try{let o=await this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:r,pageSize:100,pageToken:n});a.push(...o.erc1155TokenBalances),n=o.nextPageToken;}catch(o){throw o instanceof O&&this.setGlacierToUnhealthy(),o}while(n);return a}async listNftBalances({chainId:e,address:r}){let a=(await Promise.allSettled([this.listErc721Balances({chainId:e.toString(),address:r}),this.listErc1155Balances({chainId:e.toString(),address:r})])).filter(o=>o.status==="fulfilled").flatMap(o=>o.value.filter(s=>s.ercType===Erc721Token.ercType.ERC_721||BigInt(s.balance)>0n).map(s=>[`${s.address}-${s.tokenId}`,{address:s.address,description:s.metadata.description??"",logoUri:s.metadata.imageUri??"",logoSmall:ft(s.metadata.imageUri??""),name:s.metadata.name??"",symbol:s.metadata.symbol??"",tokenId:s.tokenId,tokenUri:s.tokenUri,chainId:e,collectionName:"Unknown",balance:s.ercType===Erc1155Token.ercType.ERC_1155?BigInt(s.balance):1,balanceDisplayValue:s.ercType===Erc1155Token.ercType.ERC_1155?s.balance:"1",type:s.ercType===Erc721Token.ercType.ERC_721?TokenType.ERC721:TokenType.ERC1155,metadata:{indexStatus:s.metadata.indexStatus,description:s.metadata.description,lastUpdatedTimestamp:s.metadata.metadataLastUpdatedTimestamp,properties:s.ercType===Erc721Token.ercType.ERC_721?s.metadata.attributes:s.metadata.properties}}]));return Object.fromEntries(a)}async listErc20Balances({chainId:e,address:r,currency:n,customTokens:a}){try{let o=[],s;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:s});o.push(...Eo(i.erc20TokenBalances,Number(e))),s=i.nextPageToken;}while(s);return [...bo(a),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(o){throw o instanceof O&&this.setGlacierToUnhealthy(),o}}async listTransactions({chainId:e,address:r,pageToken:n,pageSize:a}){try{return this.glacierSdk.evmTransactions.listTransactionsV2({chainId:e,address:r,pageToken:n,pageSize:a,filterSpamTokens:!0})}catch(o){throw o instanceof O&&this.setGlacierToUnhealthy(),o}}},bo=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,reputation:null})),Eo=(t,e)=>t.map(r=>{let n=new TokenUnit(r.balance,r.decimals,r.symbol),a=n.toDisplay(),o=r.balanceValue?.value.toString(),s=r.price?.value,i=s!==void 0?n.mul(s).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:r.address,name:r.name,symbol:r.symbol,decimals:r.decimals,logoUri:r.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:o,balanceDisplayValue:a,balanceInCurrency:i,priceInCurrency:s,reputation:r.tokenReputation,type:TokenType.ERC20}});var xe,We,Q,$,ce,le,In=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){c(this,xe,void 0);c(this,We,void 0);c(this,Q,void 0);c(this,$,void 0);c(this,ce,void 0);c(this,le,void 0);let{glacierApiUrl:o,proxyApiUrl:s}=Qt(r);d(this,le,a),d(this,xe,new vt({glacierApiUrl:o,headers:St(n)})),d(this,We,new Tt({proxyApiUrl:s,fetch:b(this,le)?.fetch})),d(this,Q,s),d(this,$,e),d(this,ce,new Ro({baseURL:s+"/proxy/blockaid/",apiKey:Xt,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return N({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Kr({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return Ze(e)}deriveAddress(e){return nr({...e,approvalController:b(this,$)})}getBalances({addresses:e,network:r,currency:n,customTokens:a,storage:o,tokenTypes:s}){let i=new z({storage:o,proxyApiUrl:b(this,Q),fetch:b(this,le)?.fetch});return Qr({addresses:e,currency:n,network:r,proxyApiUrl:b(this,Q),customTokens:a,balanceServices:[b(this,xe),b(this,We)],storage:o,tokenTypes:s,tokenService:i,fetch:b(this,le)?.fetch})}getManifest(){let e=parseManifest(Jt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:o,caipId:s}=e;return rn({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:o?.multicall,caipId:s,proxyApiUrl:b(this,Q)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:a,offset:o}=e,{chainId:s,networkToken:i,explorerUrl:c=""}=r;return kn({chainId:s,networkToken:i,explorerUrl:c,address:n,nextPageToken:a,offset:o,glacierService:b(this,xe)})}getTokens(e){let{chainId:r}=e;return mt({chainId:r,proxyApiUrl:b(this,Q)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return _r({request:e,network:r,approvalController:b(this,$),blockaid:b(this,ce)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return pr(b(this,$))?Ir({request:e,network:r,approvalController:b(this,$),blockaid:b(this,ce)}):{error:rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};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 qr({request:e,network:r,approvalController:b(this,$),blockaid:b(this,ce)});default:return So(e.method)?zr(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};xe=new WeakMap,We=new WeakMap,Q=new WeakMap,$=new WeakMap,ce=new WeakMap,le=new WeakMap;var So=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
35
34
|
|
|
36
|
-
export {
|
|
35
|
+
export { ae as ERC20TransactionType, In as EvmModule, ir as NonContractCallTypes, ve as addIdToPromise, al as isTypedData, Hr as isTypedDataV1, be as settleAllIdPromises };
|
|
37
36
|
//# sourceMappingURL=out.js.map
|
|
38
37
|
//# sourceMappingURL=index.js.map
|