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