@avalabs/evm-module 3.7.1 → 3.7.2

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