@avalabs/evm-module 3.6.2 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
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, parseManifest, AppName, Environment, NetworkVMType, WalletType, TokenType, RawSimplePriceResponseSchema, DetailItemType } from '@avalabs/vm-module-types';
|
|
3
|
-
import
|
|
3
|
+
import Co 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
|
-
import { isHexString, computeAddress, Network, toUtf8String, MaxUint256, TypedDataEncoder, Interface, ethers } from 'ethers';
|
|
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
10
|
import Tr from '@openzeppelin/contracts/build/contracts/ERC20.json';
|
|
11
11
|
import { TokenUnit, numberToBN, balanceToDisplayValue, ipfsResolver } from '@avalabs/core-utils-sdk';
|
|
12
12
|
import hr from 'xss';
|
|
13
13
|
import { ChainId } from '@avalabs/core-chains-sdk';
|
|
14
|
-
import
|
|
14
|
+
import Ya from 'lodash.startcase';
|
|
15
15
|
|
|
16
|
-
function jt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function St(t){let e,r=0;for(e=0;e<t.length;e++){let n=jt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}var ee=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=D.exponential()})=>{let a=0,s=0,o;for(;s<r;){s>0&&await wn(a);try{let c=await t(s);if(e(c))return c}catch(c){o=c;}a=n(s),s++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},D=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}static linearThenExponential(e,r){return n=>{if(n<e)return (n+1)*r;let a=n-e+1,s=e*r,o=2*r*(Math.pow(2,a)-1);return s+o}}};function wn(t){return new Promise(e=>setTimeout(e,t))}var xt=t=>ee({operation:e=>t(e>0),maxRetries:2,backoffPolicy:D.constant(1),isSuccess:e=>e?.status?.error_code!==429});async function U(t,e,r=fetch){let n=await r(...t);if(!n.ok)throw new Error(`Request failed with status ${n.status}`);let a=await n.json();return e.parse(a)}var Ce=class{constructor(e,r){this.proxyApiUrl=e;this.fetchFn=r;}simplePrice(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}};var Nn=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())})),qe=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Nn)}};var q,te,re,me,z=class{constructor({storage:e,proxyApiUrl:r,fetch:n}){c(this,q,void 0);c(this,te,void 0);c(this,re,void 0);c(this,me,void 0);a(this,"transformSimplePriceResponse",(e,r=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let 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,q,e),d(this,te,r),d(this,re,n??globalThis.fetch),d(this,me,getBasicCoingeckoHttp(void 0,b(this,re)));}async getWatchlistDataForToken({tokenDetails:e,currency:r=VsCurrencyType.USD}){let n=(await new qe(b(this,te)).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?`${St(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=b(this,q)?.get?.(s),n)return n;try{n=await xt(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return b(this,q)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let a,o=`getPricesWithMarketDataByAddresses-${`${St(e)}-${r}-${n}`}`;if(a=b(this,q)?.get?.(o),a)return a;try{a=await xt(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return b(this,q)?.set?.(o,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let s=await new Ce(b(this,te),b(this,re)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(s,[n])}return simpleTokenPrice(b(this,me),{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:n=!1,vol24:a=!1,change24:s=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new Ce(b(this,te),b(this,re)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:s,include_last_updated_at:o});return this.transformSimplePriceResponse(l,r)}return simplePrice(b(this,me),{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:s,lastUpdated:o,shouldThrow:c})}};q=new WeakMap,te=new WeakMap,re=new WeakMap,me=new WeakMap;var Ln="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Vn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",zt=object({date:string(),usd:record(number())}),ze=async()=>{try{return await U([Ln],zt)}catch{return await U([Vn],zt)}};var It=(t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),Ye=(t,e)=>({label:t,value:e,type:DetailItemType.LINK}),de=(t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e});var Je=(t,e)=>({label:t,type:DetailItemType.NETWORK,value:e});var At=({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 Kt=process.env.GLACIER_API_KEY;var we=()=>Kt;var Wn={rltoken:we()},ne,Xe,Ze,Jt,Qe,Xt,Ne=class extends FetchHttpRequest{constructor(r){super(r);c(this,Ze);c(this,Qe);c(this,ne,0);c(this,Xe,D.exponential());}request(r){let n={...Wn,...r.query||{}},a={...r,query:Object.keys(n).length>0?n:void 0},s=()=>super.request(a);return b(this,ne)>0?e(this,Qe,Xt).call(this,s):e(this,Ze,Jt).call(this,s)}};ne=new WeakMap,Xe=new WeakMap,Ze=new WeakSet,Jt=function(r){let n=r();return new CancelablePromise((a,s,o)=>{o(()=>n.cancel()),n.then(i=>{d(this,ne,0),a(i);}).catch(i=>{if(i instanceof ApiError){let c=i.status===429,l=i.status>=500&&i.status<600;d(this,ne,b(this,ne)+Number(c||l));}s(i);});})},Qe=new WeakSet,Xt=function(r){let n=b(this,Xe).call(this,b(this,ne));return new CancelablePromise((a,s,o)=>{let i=setTimeout(()=>{let c=r();o(()=>{c.cancel(),clearTimeout(i);}),c.then(a).catch(s);},n);})};var F=(t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}});var Zt={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 Qt="DUMMY_API_KEY";var jn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},qn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},tr=t=>{switch(t){case Environment.PRODUCTION:return jn;case Environment.DEV:return qn}};var et=({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 ar=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var or=async t=>{let{secretId:e,approvalController:r}=t,n=ar(t)?et(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[NetworkVMType.EVM]:computeAddress(`0x${a}`)}};var B=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:s=2e3}=t,o=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:a},Zn(n),new Network(r,e));return o.pollingInterval=s,o},Xn=["glacier-api.avax.network","proxy-api.avax.network"];function Zn(t){let e=new URL(t),r=we();if(r&&Xn.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}var fe=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42).optional(),data:z$1.string().optional(),value:z$1.string().startsWith("0x").optional(),gas:z$1.string().startsWith("0x").optional(),gasPrice:z$1.string().startsWith("0x").optional(),maxFeePerGas:z$1.string().startsWith("0x").optional(),maxPriorityFeePerGas:z$1.string().startsWith("0x").optional(),nonce:z$1.string().optional(),chainId:z$1.string().optional().or(z$1.number().optional()),accessList:z$1.array(z$1.object({address:z$1.string().startsWith("0x"),storageKeys:z$1.array(z$1.string())})).optional()});var sr=z$1.tuple([fe,fe]).rest(fe).refine(t=>Ct(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>Ct(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>ra(t,"nonce")||ta(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'}),Qn=z$1.object({skipIntermediateTxs:z$1.boolean().optional()}),ea=z$1.union([sr,z$1.object({transactions:sr,options:Qn.optional()})]);function ta(t,e){return !Ct(t,e)}function ra(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function Ct(t,e){return new Set(t.map(n=>n[e])).size===1}var ir=t=>{let e=ea.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 tt=async({from:t,provider:e})=>e.getTransactionCount(t);var cr=async(t,e)=>{if(t[0].nonce)return;let r=await tt({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))};var lr=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER,TransactionType.NFT_SEND,TransactionType.NFT_RECEIVE],ae=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(ae||{});var rt=t=>{if(t.data)try{let r=new Interface(Tr.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&oa(n)?n:void 0}catch{return}};function oa(t){return Object.values(ae).includes(t)}var nt=(t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:s,alert:o})=>{let{dappInfo:i}=t,c=rt(r),l="Do you approve this transaction?";c==="approve"&&(l="Do you approve this spend limit?");let p=[de("Account",r.from),Je("Network",{name:e.chainName,logoUri:e.logoUri}),Ye("Website",i)];r.to&&p.push(de("Contract",r.to));let u={title:l,details:[{title:"Transaction Details",items:p}],networkFeeSelector:!0,alert:o,balanceChange:a,tokenApprovals:s,isSimulationSuccessful:n},f={type:RpcMethod.ETH_SEND_TRANSACTION,account:r.from,data:{type:2,nonce:Number(r.nonce),gasLimit:Number(r.gas),maxFeePerGas:r.maxFeePerGas,maxPriorityFeePerGas:r.maxPriorityFeePerGas,to:r.to,from:r.from,data:r.data,value:r.value,chainId:r.chainId??e.chainId,accessList:r.accessList}};return {displayData:u,signingData:f}};var at=async(t,e,r)=>{if("txHash"in e)return e.txHash;let n=()=>t.send("eth_sendRawTransaction",[e.signedData]);return r?.shouldRetry?ee({operation:()=>n(),isSuccess:()=>!0,maxRetries:6,backoffPolicy:D.linearThenExponential(4,1e3)}):n()};function ye(t,e,r="tx"){return `${t}/${r}/${e}`}var De=async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:s,request:o})=>{try{let i=ye(t,r);if(n({txHash:r,request:o,explorerLink:i}),(await ee({operation:async()=>e.getTransactionReceipt(r),isSuccess:p=>!!p,backoffPolicy:D.linearThenExponential(15,750),maxRetries:20}))?.status===1)return a({txHash:r,explorerLink:i,request:o}),!0}catch(i){console.error(i);}return s({txHash:r,request:o}),!1};var ot=new Map,pr=(t,e,r)=>(ot.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},s)=>{let o=ot.get(t);if(!o)throw rpcErrors.resourceNotFound();let{signingRequests:i}=o,l={signingRequests:i.map((p,u)=>{if(s===void 0||s===u){let{signingData:f}=p;return {signingData:{...f,data:{...f.data,maxFeePerGas:n??f.data.maxFeePerGas,maxPriorityFeePerGas:a??f.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return ot.set(t,l),l},cleanup:()=>ot.delete(t)});function oe(t){return !("type"in t)}function st(t){return t.type===TokenType.ERC20}function mr(t){return typeof t.to=="string"}function dr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function la(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function pa(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function wt(t){return la(t)?t.ins.length===0&&t.outs.length===0:pa(t)?t.approvals.length===0:!1}var ur=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}})},fr=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}}),yr=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 kr=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,Tr.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),s=hr(a[0]),o=hr(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(Tr.abi),p=l.getFunction(t.data.slice(0,10)),u=l.decodeFunctionData(t.data.slice(0,10),t.data);if(p?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new TokenUnit(u.amount,c.decimals,c.symbol).toDisplay(),usdPrice:void 0}],token:c}],ins:[]}};if(p?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:c,spenderAddress:u.spender,value:u.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}};var 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 br=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:s})=>{let o;try{o=await fr({chainId:n,params:r,domain:e,blockaid:s});}catch(i){console.error("simulateTransaction error",i);}return Nt({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:o})},Nt=async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:a})=>{let s,o,i,c=!1,l;if(a){let{validation:p,simulation:u,gas_estimation:f}=a;!p||p.result_type==="Error"||p.result_type==="Warning"?s=K[AlertType.WARNING]:p.result_type==="Malicious"&&(s=K[AlertType.DANGER]),u?.status==="Success"&&(c=!0,i=Er(t,u.account_summary),o=Pr(u.account_summary.assets_diffs)),f?.status==="Success"&&(l=Number(f.estimate));}if(!c&&mr(e)){let p=await kr(e,r,n);o=p.balanceChange,i=p.tokenApprovals;}return {alert:s,balanceChange:o,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},Ta=t=>t.trace_type==="ExposureTrace",ka=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,va=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>Ta(r)?{[ka(r.spender,r.asset.address)]:r}:e,{}),Er=(t,e)=>{let{traces:r}=e,n=va(r),a=Object.entries(n).map(([o,i])=>{let c=Rr(i.asset);if(!c)return;let l={token:c,spenderAddress:i.spender,logoUri:c.logoUri};if(i.type==="ERC20ExposureTrace"){let{exposed:{raw_value:p,value:u,usd_price:f}}=i;if(!u||u<=0)return;l.value=p,l.usdPrice=`${f}`;}if(i.type==="ERC721ExposureTrace")if(!i.exposed)l.value=`0x${MaxUint256.toString(16)}`;else {let{usd_price:p,amount:u}=i.exposed;l.value=`${u}`,l.usdPrice=`${p}`;}return l}).filter(Boolean);return a.length===0?void 0:{isEditable:a.length===1&&a[0]?.token.type===TokenType.ERC20&&t===RpcMethod.ETH_SEND_TRANSACTION,approvals:a}},Pr=t=>{let e=vr(t,"in"),r=vr(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},vr=(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?Rr(n):ba(n);if(!a)return;let s=r[e].map(o=>{let i;if("value"in o&&o.value)if("decimals"in a){let u=numberToBN(o.value,a.decimals);i=balanceToDisplayValue(u,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),Rr=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},ba=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Sr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:s})=>{let o,i,c;try{let{validation:l,simulation:p}=await yr({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=Er(t.method,p.account_summary),i=Pr(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=K[AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}};var Ir=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:s,blockaid:o})=>{let i;try{i=await ur({chainId:n,params:r,domain:e,withGasEstimation:s,blockaid:o});}catch(d){return console.error("simulateTransactionBatch error",d),{isSimulationSuccessful:!1,alert:K[AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(d,y)=>{let b=r[y],R=await Nt({chainId:n,params:r[y],provider:a,rpcMethod:t,simulationResult:d});return s&&!b.gas&&R.estimatedGasLimit&&(b.gas=`0x${R.estimatedGasLimit.toString(16)}`),{transaction:b,...R}})),l=c.every(d=>d.isSimulationSuccessful),p=Ea(c),u=Ra(c),f=Pa(c);return {isSimulationSuccessful:l,alert:p,balanceChange:u,tokenApprovals:f,scans:c.map(d=>(d.tokenApprovals&&(d.tokenApprovals.isEditable=!1),d))}},Ea=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)},Pa=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 Sa(e,t),wt(e)?void 0:e},Ra=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let s=xr(r.ins,a);s?s.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let s=xr(r.outs,a);s?s.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return wt(e)?void 0:e},xr=(t,e)=>t.find(r=>oe(r.token)&&oe(e.token)?r.token.symbol===e.token.symbol:!oe(r.token)&&!oe(e.token)?r.token.address===e.token.address:!1),Sa=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(s=>!oe(s.token)&&!oe(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 Ar=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,success:o,error:i}=ir(a);if(!o)return console.error("invalid params",i),{error:rpcErrors.invalidParams(F("Transaction params are invalid",i))};let{transactions:c,options:l={}}=s,{skipIntermediateTxs:p=!1}=l,u=await B({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await cr(c,u);}catch(w){return console.error("Unable to calculate nonce",w),{error:rpcErrors.internal(F("Unable to calculate nonce",w))}}let f=c.every(w=>Number(w.gas)>0),{alert:d,balanceChange:y,isSimulationSuccessful:b,tokenApprovals:R,scans:E}=await Ir({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:u,populateMissingGas:!f,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:[de("Account",c[0].from),Je("Network",{name:e.chainName,logoUri:e.logoUri}),Ye("Website",t.dappInfo)]}],isSimulationSuccessful:b,balanceChange:y,alert:d,tokenApprovals:R,networkFeeSelector:!0},g=E.map(w=>nt(t,e,w.transaction,w)),{cleanup:v,updateTx:G}=pr(t.requestId,g,I),W=await r.requestBatchApproval({request:t,signingRequests:g,displayData:I,updateTx:G});if(v(),"error"in W)return {error:W.error};if(W.result.length!==c.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${c.length}, got ${W.result.length}`})};let Ae=[];for(let[w,Cn]of W.result.entries()){let Ht=w===W.result.length-1,Rt=await at(u,Cn);if(Ht&&De({explorerUrl:e.explorerUrl??"",provider:u,txHash:Rt,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),!Ht&&!p&&!await De({explorerUrl:e.explorerUrl??"",provider:u,txHash:Rt,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}))return {error:rpcErrors.internal({message:`Transaction ${w+1} failed! Batch execution stopped`})};Ae.push(Rt);}return {result:Ae}};function Cr(t,e,r){return new ethers.Contract(t,Tr.abi).interface.encodeFunctionData("approve",[e,r])}var lt=new Map,wr=(t,e,r)=>(lt.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:s,gasLimit:o})=>{let i=lt.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}},u={...l};if(typeof s=="string"){if(!s.startsWith("0x"))throw rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let d=l.tokenApprovals;Aa(d),Ca(c.data.data);let y=d.approvals[0];p.data.data=Cr(y.token.address,y.spenderAddress,s),u.tokenApprovals={approvals:[{...y,value:s}],isEditable:!0};}let f={signingData:p,displayData:u};return lt.set(t,f),f},cleanup:()=>lt.delete(t)});function Aa(t){if(!t||!t.isEditable||t.approvals.length!==1)throw rpcErrors.invalidInput("Cannot edit the token approval for this request. Please start a new request instead.")}function Ca(t){if((!t||t==="0x"?null:rt({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var Nr=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 Na=z$1.tuple([fe]),_r=t=>Na.safeParse(t);var Br=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,error:o,success:i}=_r(a);if(!i)return console.error("invalid params",o),{error:rpcErrors.invalidParams(F("Transaction params are invalid",o))};let[c]=s,l=await B({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!c.gas||Number(c.gas)<0)try{let T=await Nr({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(F("Unable to calculate gas limit",T))}}if(!c.nonce)try{let T=await tt({from:c.from,provider:l});c.nonce=String(T);}catch(T){return {error:rpcErrors.internal(F("Unable to calculate nonce",T))}}let p=await br({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l,blockaid:n}),{displayData:u,signingData:f}=nt(t,e,c,p),{updateTx:d,cleanup:y}=wr(t.requestId,f,u),b=await r.requestApproval({request:t,displayData:u,signingData:f,updateTx:d});if(y(),"error"in b)return {error:b.error};let R,E=t.context?.shouldRetry===!0;try{R=await at(l,b,{shouldRetry:E});}catch(T){return {error:rpcErrors.internal(F("Unable to get transaction hash",T))}}return De({explorerUrl:e.explorerUrl??"",provider:l,txHash:R,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:R}};var _t=t=>{let e="";e+=`Domain
|
|
16
|
+
function qt(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function St(t){let e,r=0;for(e=0;e<t.length;e++){let n=qt(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}var ee=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=D.exponential()})=>{let a=0,s=0,o;for(;s<r;){s>0&&await Nn(a);try{let c=await t(s);if(e(c))return c}catch(c){o=c;}a=n(s),s++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},D=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}static linearThenExponential(e,r){return n=>{if(n<e)return (n+1)*r;let a=n-e+1,s=e*r,o=2*r*(Math.pow(2,a)-1);return s+o}}};function Nn(t){return new Promise(e=>setTimeout(e,t))}var xt=t=>ee({operation:e=>t(e>0),maxRetries:2,backoffPolicy:D.constant(1),isSuccess:e=>e?.status?.error_code!==429});async function U(t,e,r=fetch){let n=await r(...t);if(!n.ok)throw new Error(`Request failed with status ${n.status}`);let a=await n.json();return e.parse(a)}var Ce=class{constructor(e,r){this.proxyApiUrl=e;this.fetchFn=r;}simplePrice(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}};var wn=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())})),je=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],wn)}};var j,te,re,me,z=class{constructor({storage:e,proxyApiUrl:r,fetch:n}){c(this,j,void 0);c(this,te,void 0);c(this,re,void 0);c(this,me,void 0);a(this,"transformSimplePriceResponse",(e,r=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let 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,j,e),d(this,te,r),d(this,re,n??globalThis.fetch),d(this,me,getBasicCoingeckoHttp(void 0,b(this,re)));}async getWatchlistDataForToken({tokenDetails:e,currency:r=VsCurrencyType.USD}){let n=(await new je(b(this,te)).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?`${St(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=b(this,j)?.get?.(s),n)return n;try{n=await xt(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return b(this,j)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let a,o=`getPricesWithMarketDataByAddresses-${`${St(e)}-${r}-${n}`}`;if(a=b(this,j)?.get?.(o),a)return a;try{a=await xt(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return b(this,j)?.set?.(o,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let s=await new Ce(b(this,te),b(this,re)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(s,[n])}return simpleTokenPrice(b(this,me),{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:n=!1,vol24:a=!1,change24:s=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await new Ce(b(this,te),b(this,re)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:s,include_last_updated_at:o});return this.transformSimplePriceResponse(l,r)}return simplePrice(b(this,me),{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:s,lastUpdated:o,shouldThrow:c})}};j=new WeakMap,te=new WeakMap,re=new WeakMap,me=new WeakMap;var Ln="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Vn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",zt=object({date:string(),usd:record(number())}),ze=async()=>{try{return await U([Ln],zt)}catch{return await U([Vn],zt)}};var It=(t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),Ye=(t,e)=>({label:t,value:e,type:DetailItemType.LINK}),de=(t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e});var Je=(t,e)=>({label:t,type:DetailItemType.NETWORK,value:e});var At=({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 Kt=process.env.GLACIER_API_KEY;var Ne=()=>Kt;var $n={rltoken:Ne()},ne,Xe,Ze,Jt,Qe,Xt,we=class extends FetchHttpRequest{constructor(r){super(r);c(this,Ze);c(this,Qe);c(this,ne,0);c(this,Xe,D.exponential());}request(r){let n={...$n,...r.query||{}},a={...r,query:Object.keys(n).length>0?n:void 0},s=()=>super.request(a);return b(this,ne)>0?e(this,Qe,Xt).call(this,s):e(this,Ze,Jt).call(this,s)}};ne=new WeakMap,Xe=new WeakMap,Ze=new WeakSet,Jt=function(r){let n=r();return new CancelablePromise((a,s,o)=>{o(()=>n.cancel()),n.then(i=>{d(this,ne,0),a(i);}).catch(i=>{if(i instanceof ApiError){let c=i.status===429,l=i.status>=500&&i.status<600;d(this,ne,b(this,ne)+Number(c||l));}s(i);});})},Qe=new WeakSet,Xt=function(r){let n=b(this,Xe).call(this,b(this,ne));return new CancelablePromise((a,s,o)=>{let i=setTimeout(()=>{let c=r();o(()=>{c.cancel(),clearTimeout(i);}),c.then(a).catch(s);},n);})};var F=(t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}});var Zt={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 Qt="DUMMY_API_KEY";var qn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},jn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},tr=t=>{switch(t){case Environment.PRODUCTION:return qn;case Environment.DEV:return jn}};var et=({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 ar=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var or=async t=>{let{secretId:e,approvalController:r}=t,n=ar(t)?et(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[NetworkVMType.EVM]:computeAddress(`0x${a}`)}};var B=async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:s=2e3,customRpcHeaders:o}=t,i=Qn(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},Zn=["glacier-api.avax.network","proxy-api.avax.network"];function Qn(t){let e=new URL(t),r=Ne();if(r&&Zn.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}var fe=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42).optional(),data:z$1.string().optional(),value:z$1.string().startsWith("0x").optional(),gas:z$1.string().startsWith("0x").optional(),gasPrice:z$1.string().startsWith("0x").optional(),maxFeePerGas:z$1.string().startsWith("0x").optional(),maxPriorityFeePerGas:z$1.string().startsWith("0x").optional(),nonce:z$1.string().optional(),chainId:z$1.string().optional().or(z$1.number().optional()),accessList:z$1.array(z$1.object({address:z$1.string().startsWith("0x"),storageKeys:z$1.array(z$1.string())})).optional()});var sr=z$1.tuple([fe,fe]).rest(fe).refine(t=>Ct(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>Ct(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>na(t,"nonce")||ra(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'}),ea=z$1.object({skipIntermediateTxs:z$1.boolean().optional()}),ta=z$1.union([sr,z$1.object({transactions:sr,options:ea.optional()})]);function ra(t,e){return !Ct(t,e)}function na(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function Ct(t,e){return new Set(t.map(n=>n[e])).size===1}var ir=t=>{let e=ta.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 tt=async({from:t,provider:e})=>e.getTransactionCount(t);var cr=async(t,e)=>{if(t[0].nonce)return;let r=await tt({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))};var lr=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER,TransactionType.NFT_SEND,TransactionType.NFT_RECEIVE],ae=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(ae||{});var rt=t=>{if(t.data)try{let r=new Interface(Tr.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&sa(n)?n:void 0}catch{return}};function sa(t){return Object.values(ae).includes(t)}var nt=(t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:s,alert:o})=>{let{dappInfo:i}=t,c=rt(r),l="Do you approve this transaction?";c==="approve"&&(l="Do you approve this spend limit?");let p=[de("Account",r.from),Je("Network",{name:e.chainName,logoUri:e.logoUri}),Ye("Website",i)];r.to&&p.push(de("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 at=async(t,e,r)=>{if("txHash"in e)return e.txHash;let n=()=>t.send("eth_sendRawTransaction",[e.signedData]);return r?.shouldRetry?ee({operation:()=>n(),isSuccess:()=>!0,maxRetries:6,backoffPolicy:D.linearThenExponential(4,1e3)}):n()};function ye(t,e,r="tx"){return `${t}/${r}/${e}`}var De=async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:s,request:o})=>{try{let i=ye(t,r);if(n({txHash:r,request:o,explorerLink:i}),(await ee({operation:async()=>e.getTransactionReceipt(r),isSuccess:p=>!!p,backoffPolicy:D.linearThenExponential(15,750),maxRetries:20}))?.status===1)return a({txHash:r,explorerLink:i,request:o}),!0}catch(i){console.error(i);}return s({txHash:r,request:o}),!1};var ot=new Map,pr=(t,e,r)=>(ot.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},s)=>{let o=ot.get(t);if(!o)throw rpcErrors.resourceNotFound();let{signingRequests:i}=o,l={signingRequests:i.map((p,d)=>{if(s===void 0||s===d){let{signingData: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 ot.set(t,l),l},cleanup:()=>ot.delete(t)});function oe(t){return !("type"in t)}function st(t){return t.type===TokenType.ERC20}function mr(t){return typeof t.to=="string"}function dr(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}function pa(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}function ma(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}function Nt(t){return pa(t)?t.ins.length===0&&t.outs.length===0:ma(t)?t.approvals.length===0:!1}var ur=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}})},fr=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}}),yr=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 kr=async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,Tr.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),s=hr(a[0]),o=hr(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(Tr.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 br=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:s})=>{let o;try{o=await fr({chainId:n,params:r,domain:e,blockaid:s});}catch(i){console.error("simulateTransaction error",i);}return wt({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:o})},wt=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=Er(t,d.account_summary),o=Rr(d.account_summary.assets_diffs)),u?.status==="Success"&&(l=Number(u.estimate));}if(!c&&mr(e)){let p=await kr(e,r,n);o=p.balanceChange,i=p.tokenApprovals;}return {alert:s,balanceChange:o,tokenApprovals:i,isSimulationSuccessful:c,estimatedGasLimit:l}},ka=t=>t.trace_type==="ExposureTrace",va=(t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,ba=t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>ka(r)?{[va(r.spender,r.asset.address)]:r}:e,{}),Er=(t,e)=>{let{traces:r}=e,n=ba(r),a=Object.entries(n).map(([o,i])=>{let c=Pr(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}},Rr=t=>{let e=vr(t,"in"),r=vr(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},vr=(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?Pr(n):Ea(n);if(!a)return;let s=r[e].map(o=>{let i;if("value"in o&&o.value)if("decimals"in a){let d=numberToBN(o.value,a.decimals);i=balanceToDisplayValue(d,a.decimals);}else isHexString(o.value)&&(i=parseInt(o.value,16).toString());else "type"in a&&a.type===TokenType.ERC721&&(i="1");if(!i)return;let c="logo_url"in o?o.logo_url:void 0,l="token_id"in o?o.token_id:void 0;return {displayValue:i,usdPrice:o.usd_price,...c!==void 0&&{logoUri:c},...l!==void 0&&{tokenId:l}}}).filter(o=>o!==void 0);return {token:a,items:s}}).filter(r=>r!==void 0),Pr=t=>{let e;return t.type==="ERC20"?e={type:TokenType.ERC20,address:t.address,decimals:t.decimals,name:t.name??t.symbol??"",symbol:t.symbol??"",logoUri:t.logo_url}:t.type==="ERC1155"?e={type:TokenType.ERC1155,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="ERC721"?e={type:TokenType.ERC721,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}:t.type==="NONERC"&&(e={type:TokenType.NONERC,address:t.address,logoUri:t.logo_url,name:t.name,symbol:t.symbol}),e},Ea=t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),Sr=async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:s})=>{let o,i,c;try{let{validation:l,simulation:p}=await yr({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=Er(t.method,p.account_summary),i=Rr(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=K[AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}};var Ir=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:s,blockaid:o})=>{let i;try{i=await ur({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 b=r[y],P=await wt({chainId:n,params:r[y],provider:a,rpcMethod:t,simulationResult:f});return s&&!b.gas&&P.estimatedGasLimit&&(b.gas=`0x${P.estimatedGasLimit.toString(16)}`),{transaction:b,...P}})),l=c.every(f=>f.isSimulationSuccessful),p=Ra(c),d=Sa(c),u=Pa(c);return {isSimulationSuccessful:l,alert:p,balanceChange:d,tokenApprovals:u,scans:c.map(f=>(f.tokenApprovals&&(f.tokenApprovals.isEditable=!1),f))}},Ra=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)},Pa=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 xa(e,t),Nt(e)?void 0:e},Sa=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let s=xr(r.ins,a);s?s.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let s=xr(r.outs,a);s?s.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return Nt(e)?void 0:e},xr=(t,e)=>t.find(r=>oe(r.token)&&oe(e.token)?r.token.symbol===e.token.symbol:!oe(r.token)&&!oe(e.token)?r.token.address===e.token.address:!1),xa=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(s=>!oe(s.token)&&!oe(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 Ar=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,success:o,error:i}=ir(a);if(!o)return console.error("invalid params",i),{error:rpcErrors.invalidParams(F("Transaction params are invalid",i))};let{transactions:c,options:l={}}=s,{skipIntermediateTxs:p=!1}=l,d=await B({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3,customRpcHeaders:e.customRpcHeaders});try{await cr(c,d);}catch(w){return console.error("Unable to calculate nonce",w),{error:rpcErrors.internal(F("Unable to calculate nonce",w))}}let u=c.every(w=>Number(w.gas)>0),{alert:f,balanceChange:y,isSimulationSuccessful:b,tokenApprovals:P,scans:E}=await Ir({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:[de("Account",c[0].from),Je("Network",{name:e.chainName,logoUri:e.logoUri}),Ye("Website",t.dappInfo)]}],isSimulationSuccessful:b,balanceChange:y,alert:f,tokenApprovals:P,networkFeeSelector:!0},g=E.map(w=>nt(t,e,w.transaction,w)),{cleanup:v,updateTx:G}=pr(t.requestId,g,I),$=await r.requestBatchApproval({request:t,signingRequests:g,displayData:I,updateTx:G});if(v(),"error"in $)return {error:$.error};if($.result.length!==c.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${c.length}, got ${$.result.length}`})};let Ae=[];for(let[w,Cn]of $.result.entries()){let Wt=w===$.result.length-1,Pt=await at(d,Cn);if(Wt&&De({explorerUrl:e.explorerUrl??"",provider:d,txHash:Pt,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),!Wt&&!p&&!await De({explorerUrl:e.explorerUrl??"",provider:d,txHash:Pt,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}))return {error:rpcErrors.internal({message:`Transaction ${w+1} failed! Batch execution stopped`})};Ae.push(Pt);}return {result:Ae}};function Cr(t,e,r){return new ethers.Contract(t,Tr.abi).interface.encodeFunctionData("approve",[e,r])}var lt=new Map,Nr=(t,e,r)=>(lt.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:s,gasLimit:o})=>{let i=lt.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;Ca(f),Na(c.data.data);let y=f.approvals[0];p.data.data=Cr(y.token.address,y.spenderAddress,s),d.tokenApprovals={approvals:[{...y,value:s}],isEditable:!0};}let u={signingData:p,displayData:d};return lt.set(t,u),u},cleanup:()=>lt.delete(t)});function Ca(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 Na(t){if((!t||t==="0x"?null:rt({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}var wr=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 _a=z$1.tuple([fe]),_r=t=>_a.safeParse(t);var Br=async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,error:o,success:i}=_r(a);if(!i)return console.error("invalid params",o),{error:rpcErrors.invalidParams(F("Transaction params are invalid",o))};let[c]=s,l=await B({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 wr({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(F("Unable to calculate gas limit",T))}}if(!c.nonce)try{let T=await tt({from:c.from,provider:l});c.nonce=String(T);}catch(T){return {error:rpcErrors.internal(F("Unable to calculate nonce",T))}}let p=await br({rpcMethod:t.method,chainId:e.chainId,params:c,dAppUrl:t.dappInfo.url,provider:l,blockaid:n}),{displayData:d,signingData:u}=nt(t,e,c,p),{updateTx:f,cleanup:y}=Nr(t.requestId,u,d),b=await r.requestApproval({request:t,displayData:d,signingData:u,updateTx:f});if(y(),"error"in b)return {error:b.error};let P,E=t.context?.shouldRetry===!0;try{P=await at(l,b,{shouldRetry:E});}catch(T){return {error:rpcErrors.internal(F("Unable to get transaction hash",T))}}return De({explorerUrl:e.explorerUrl??"",provider:l,txHash:P,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:P}};var _t=t=>{let e="";e+=`Domain
|
|
17
17
|
`;for(let r in t.domain)e+=` ${r}: ${se(String(t.domain[r]))}
|
|
18
18
|
`;e+=`
|
|
19
19
|
Message
|
|
@@ -30,8 +30,8 @@ Message
|
|
|
30
30
|
`;return e},Dr=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
31
31
|
`,e+=`${se(String(r.value))}
|
|
32
32
|
|
|
33
|
-
`;}),e},se=t=>{let e={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return t.split("").map(r=>e[r]||r).join("")};var Ge=z$1.string().describe("message"),M=z$1.string().describe("address");var Fr=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([M,Ge])});var Gr=z$1.object({name:z$1.string(),type:z$1.string()}),ge=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Gr)}).catchall(z$1.array(Gr)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),Dt=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(),Ut=ge.or(Dt),Mr=z$1.union([z$1.string().describe("data string"),ge]),Lr=z$1.union([z$1.string().describe("data string"),Ut]),Vr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([M,Lr])}),Or=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([M,Lr])}),$r=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([M,Mr])}),Wr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([M,Mr])});var Hr=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([Ge,M]),z$1.tuple([Ge,M,z$1.string().optional().describe("password")])])});var Da=z$1.discriminatedUnion("method",[Hr,Fr,Vr,Or,$r,Wr]).transform((t,e)=>{let{method:r,params:n}=t;switch(r){case RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:{let a=n[0],s=n[1];if(typeof s!="string")return {data:s,address:a,method:r};try{let o=JSON.parse(s);return {data:Ut.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:ge.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 jr(t){return Da.safeParse(t)}var qr=t=>Dt.safeParse(t).success,cl=t=>ge.safeParse(t).success;var zr=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 Kr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=jr({method:t.method,params:t.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.invalidParams(F("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=zr(o));let l,p,u;if(c&&!c.isValid&&(u={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:c.error.toString()}}),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=qr(o)?Dr(o):_t(o);else if(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4){l={type:s,account:i,data:o};let{types:b,primaryType:R,...E}=o;p=_t(E);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let f=await Sr({request:t,accountAddress:i,chainId:e.chainId,data:{method:s,params:t.params},dAppUrl:t.dappInfo.url,blockaid:n}),d={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} is requesting to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[It("Message",p,"vertical")]}],alert:f?.alert??u,balanceChange:f?.balanceChange,tokenApprovals:f?.tokenApprovals},y=await r.requestApproval({request:t,displayData:d,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Yr=async(t,e)=>{try{return {result:await(await B({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})).send(t.method,t.params)}}catch(r){let n=r.info?.error?.message||r.error?.message||r.message;return {error:rpcErrors.internal(n)}}};var Xr=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,t)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};function ve(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function be(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let a=n.value;a.status==="fulfilled"?r[a.id]=a.value:r[a.id]={error:a.reason};}return r},{}))}async function ut({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${t}`);return r.json()}var _,Ee,ie,Ve,Pe,ft=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:a,fetch:s}){c(this,_,void 0);c(this,Ee,void 0);c(this,ie,void 0);c(this,Ve,void 0);c(this,Pe,void 0);d(this,_,e),d(this,Ee,r),d(this,ie,n),d(this,Ve,a),d(this,Pe,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await B({chainId:e,chainName:b(this,_).chainName,rpcUrl:b(this,_).rpcUrl,multiContractAddress:b(this,_).utilityAddresses?.multicall}),s=b(this,_).pricingProviders?.coingecko.nativeTokenId,o=b(this,_).networkToken,i=new z({storage:b(this,Ee),proxyApiUrl:b(this,ie),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,u=c?.[s??""]?.[n]?.vol24??void 0,f=c?.[s??""]?.[n]?.change24??void 0,d=await a.getBalance(r),y=new TokenUnit(d,o.decimals,o.symbol),b$1=l!==void 0?y.mul(l):void 0;return {...o,coingeckoId:s??"",type:TokenType.NATIVE,balance:d,balanceDisplayValue:y.toDisplay(),balanceInCurrency:b$1?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:b$1?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:u,change24:f}}async listErc20Balances({chainId:e,address:r,currency:n}){let a=await B({chainId:e,chainName:b(this,_).chainName,rpcUrl:b(this,_).rpcUrl,multiContractAddress:b(this,_).utilityAddresses?.multicall}),s=b(this,_).pricingProviders?.coingecko.assetPlatformId,o=b(this,_).pricingProviders?.coingecko.nativeTokenId,i=await ut({chainId:Number(e),proxyApiUrl:b(this,ie)}),c=i.map(E=>E.address),l=[...i,...b(this,Ve)].filter(st),p=async E=>{let g=await new ethers.Contract(E.address,Tr.abi,a).balanceOf?.(r)||0n;return {...E,balance:g}},u=l.map(E=>ve(p(E),E.address)),f=await be(u),d=new z({storage:b(this,Ee),proxyApiUrl:b(this,ie),fetch:b(this,Pe)}),y=s&&await d.getPricesByAddresses(c,s,n)||{},b$1=Object.keys(f),R={};for(let E=0;E<b$1.length;E++){let T=b$1[E];if(T===void 0)continue;let I=f[T];if(I===void 0||"error"in I){R[T]={error:`rpcService:getTokenWithBalance failed: ${I?.error??"unknown error"}`};continue}let g=y?.[o??""]?.[n]?.price??void 0,v=y?.[o??""]?.[n]?.marketCap??void 0,G=y?.[o??""]?.[n]?.vol24??void 0,W=y?.[o??""]?.[n]?.change24??void 0,Ae=new TokenUnit(I.balance,I.decimals,I.symbol),w=g!==void 0?Ae.mul(g):void 0;R[I.address.toLowerCase()]={...I,type:TokenType.ERC20,balance:I.balance,balanceDisplayValue:Ae.toDisplay(),balanceInCurrency:w?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:w?.toDisplay({fixedDp:2}),priceInCurrency:g,marketCap:v,change24:W,vol24:G,reputation:null};}return R}async listNftBalances(){return {}}};_=new WeakMap,Ee=new WeakMap,ie=new WeakMap,Ve=new WeakMap,Pe=new WeakMap;async function en(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 tn=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,u=[...i,new ft({network:r,storage:o,proxyApiUrl:n,customTokens:s,fetch:l})],f=await en(u,y=>y.isNetworkSupported(r.chainId)),d={};if(f){let y=[],b=[],R=[];t.forEach(g=>{a.includes(TokenType.NATIVE)&&y.push(ve(f.getNativeBalance({address:g,currency:e.toUpperCase(),chainId:p}).then(async v=>{if(v.symbol==="AVAX"){let G=await c.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...v,priceInCurrency:G.priceInCurrency,marketCap:G.marketCap,vol24:G.vol24,change24:G.change24}}return v}),g)),a.includes(TokenType.ERC20)&&b.push(ve(f.listErc20Balances({customTokens:s.filter(st),currency:e.toUpperCase(),chainId:p,address:g,pageSize:100}),g)),(a.includes(TokenType.ERC721)||a.includes(TokenType.ERC1155))&&R.push(ve(f.listNftBalances({chainId:p,address:g}),g));});let E=await be(y),T=await be(b),I=await be(R);Object.keys(E).forEach(g=>{let v=E[g];if(!v||"error"in v){d[g]={error:`getNativeBalance failed: ${v?.error??"unknown error"}`};return}let G=v.symbol;d[g]={[G]:v};}),Object.keys(T).forEach(g=>{let v=T[g];!v||"error"in v&&typeof v.error!="string"?d[g]={...d[g],error:"listErc20Balances failed: unknown error"}:"error"in v&&typeof v.error=="string"?d[g]={...d[g],error:`listErc20Balances failed: ${v.error}`}:d[g]={...d[g],...v};}),Object.keys(I).forEach(g=>{let v=I[g];!v||"error"in v&&typeof v.error!="string"?d[g]={...d[g],error:"listNftBalances failed: unknown error"}:"error"in v&&typeof v.error=="string"?d[g]={...d[g],error:`listNftBalances failed: ${v.error}`}:d[g]={...d[g],...v};});}else t.forEach(y=>{d[y]={error:"unsupported network"};});return d};var Mt={LOW:1n,MEDIUM:4n,HIGH:6n},Lt=500000000n,ja=t=>t===ChainId.AVALANCHE_TESTNET_ID||t===ChainId.AVALANCHE_MAINNET_ID;async function an({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:s}){let o=await B({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n});if(!s)throw rpcErrors.internal("Proxy API URL is needed");if(ja(t))try{let E=await qa(o);return {...E,baseFee:E.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}let i=await o.getBlock("latest",!1);if(!i)throw rpcErrors.internal("There is no block");let c=i.baseFeePerGas;if(!c)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let l=await za(s,a),p=new TokenUnit(l,0,""),u=new TokenUnit(c,0,""),f=BigInt("1000000000"),d=u.mul(p).add(f).toSubUnit(),y=Lt*Mt.LOW,b=Lt*Mt.MEDIUM,R=Lt*Mt.HIGH;return {baseFee:d,low:{maxFeePerGas:d+y,maxPriorityFeePerGas:y},medium:{maxFeePerGas:d+b,maxPriorityFeePerGas:b},high:{maxFeePerGas:d+R,maxPriorityFeePerGas:R},isFixedFee:!1,displayDecimals:9}}async function qa(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 sn(t){return t===TokenType.ERC721||t===TokenType.ERC1155}function Vt(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=>sn(p.type)&&p.to?.address?.toLowerCase()===s),i=a.some(p=>sn(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 cn=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,s)=>{let o=!e&&!r&&!n,i=Ya(t.method?.methodName),c=a.toLowerCase(),l=i.toLowerCase().includes("swap"),p=o&&t.from.address.toLowerCase()===c,u=o&&t.to.address.toLowerCase()===c,f=i==="Market Buy Orders With Eth"||i==="Buy NFT",d=i==="Approve",y=i.toLowerCase().includes("transfer"),b=i.toLowerCase().includes("airdrop"),R=i.toLowerCase().includes("unwrap"),E=i==="Fill Order",T;l?T=TransactionType.SWAP:p?T=TransactionType.SEND:u?T=TransactionType.RECEIVE:f?T=TransactionType.NFT_BUY:d?T=TransactionType.APPROVE:y?T=TransactionType.TRANSFER:b?T=TransactionType.AIRDROP:R?T=TransactionType.UNWRAP:E?T=TransactionType.FILL_ORDER:T=TransactionType.UNKNOWN;let I=t.from.address.toLowerCase()===c;return Vt({txType:T,isSender:I,walletAddress:a,tokens:s})},Ya=(t="")=>t.includes("(")?Ka(t.split("(",1)[0]):t;function ln({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=Za(t.category),c=!Ja.has(t.category),l=to(t,e,a),p=ye(r,t.hash);return i=Vt({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 Ja=new Set(["send","receive","token send","token receive"]),Xa={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 Za(t){return Xa[t]??TransactionType.UNKNOWN}function X(t){if(!(t==null||t===""))return {address:t}}function yt(t){return t?.trim()??""}function Qa(t){let e=t.trim().toLowerCase();return !e.startsWith("0x")||e.length<12?t.trim():`${e.slice(0,6)}\u2026${e.slice(-4)}`}function eo(t){let e=yt(t.token_symbol);if(e!=="")return e;let r=yt(t.token_name);return r!==""?r:Qa(t.address)}function to(t,e,r){let n=[],a=t.native_transfers.map(o=>ro(o,e)),s=t.erc20_transfers.map(o=>no(o));n.push(...a,...s);for(let o of t.nft_transfers)n.push(ao(o));return n.length===0&&n.push(oo(t,e,r)),n}function ro(t,e){let r=yt(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:X(t.from_address),to:X(t.to_address),type:TokenType.NATIVE}}function no(t){let e=Number(t.token_decimals),r=eo(t),n=new TokenUnit(t.value,e,r),a=yt(t.token_name)||r;return {decimal:t.token_decimals,name:a,symbol:r,amount:n.toDisplay(),from:X(t.from_address),to:X(t.to_address),type:TokenType.ERC20,address:t.address}}function ao(t){let e=t.contract_type==="ERC1155"?TokenType.ERC1155:TokenType.ERC721;return {name:"",symbol:"",amount:t.amount,collectableTokenId:t.token_id,from:X(t.from_address),to:X(t.to_address),type:e,address:t.token_address}}function oo(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:X(t.from_address),to:X(t.to_address),type:TokenType.NATIVE}}var so="https://proxy-api.avax.network/proxy/moralis-evm";async function pn({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=`${so}/wallets/${n}/history?${i.toString()}`,l=await fetch(c);if(!l.ok)return {transactions:[],nextPageToken:""};let p=await l.json();return Array.isArray(p.result)?{transactions:p.result.filter(f=>f.receipt_status==="1").map(f=>ln({tx:f,networkToken:e,explorerUrl:r,chainId:t,address:n})),nextPageToken:p.cursor??""}:{transactions:[],nextPageToken:""}}catch{return {transactions:[],nextPageToken:""}}}var io=new Set([1,4,5,11155111,8453,42161,10]);function mn(t){return io.has(t)}var dn=(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(),u=i||s&&l.toLowerCase()===a.toLowerCase();return {isOutgoing:p,isIncoming:u,isSender:c===a,from:c,to:l}};async function un(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var lo="https://ipfs.io";function Re(t,e=lo){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}async function po(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function fn(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 po(Re(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var mo="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function yn(t,e="256"){let r=Re(t);return `${mo}/width=${e},fit/${r}`}var Tn=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 gn(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 gn(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},gn=async(t,e)=>{if(e)return e.startsWith("ipfs://")?Re(e):e;{let[r,n]=await un(fn(t));return n?"":r.image?yn(r.image):""}};var kn=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let s=await Tn(t,r),o=cn(t,a,s),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:u}=dn(o,t,a),{blockTimestamp:f,txHash:d,gasPrice:y,gasUsed:b}=t.nativeTransaction,R=ye(e,d);return {isContractCall:!lr.includes(o),isIncoming:c,isOutgoing:i,isSender:l,timestamp:f*1e3,hash:d,from:p,to:u,tokens:s,gasPrice:y,gasUsed:b,chainId:n.toString(),txType:o,explorerLink:R}};var vn=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=>kn({transactions:p,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(u=>u)))).filter(p=>p.tokens.find(u=>Number(u.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var bn=async({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s,glacierService:o})=>mn(t)?pn({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s}):o.isHealthy()?vn({networkToken:e,explorerUrl:r,chainId:t,address:n,nextPageToken:a,offset:s,glacierService:o}):{transactions:[],nextPageToken:""};var fo="https://ipfs.io";function En(t,e=fo){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}var yo="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function gt(t,e="256"){let r=En(t);return `${yo}/width=${e},fit/${r}`}var Se,V,Tt=class{constructor(e,r){this.baseUrl=e;c(this,Se,[]);c(this,V,void 0);d(this,V,r??fetch);}async isNetworkSupported(e){return (await this.getChainList()).some(n=>n.community_id===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let a=await b(this,V).call(this,`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(a.ok)return await a.json();throw new Error(`${a.status}:${a.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await b(this,V).call(this,`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await(b(this,V)??globalThis.fetch)(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(b(this,Se).length===0){let e=await b(this,V).call(this,`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,Se,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,Se)}async getNftList({address:e,chainId:r}){return U([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],ko,b(this,V))}};Se=new WeakMap,V=new WeakMap;var go=z$1.object({id:z$1.union([z$1.custom(isHexString),z$1.string()]),chain:z$1.string(),name:z$1.string()}),To=go.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()})),ko=z$1.array(To);var L,xe,vt,Et,Rn,bt=class{constructor({proxyApiUrl:e,fetch:r}){c(this,xe);c(this,Et);c(this,L,void 0);d(this,L,new Tt(`${e}/proxy/debank`,r));}async isNetworkSupported(e){return b(this,L).isNetworkSupported(e)}async getNativeBalance({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:s}=await e(this,xe,vt).call(this,e$1),o=a.native_token_id,i=await b(this,L).getTokenBalance({address:r,chainId:s,tokenId:o}),c=new TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),u=(await ze()).usd[n.toLowerCase()],f=u?u*i.price:void 0,d=f?c.mul(f).toDisplay({fixedDp:2}):void 0,y=f?c.mul(f).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:y,balanceCurrencyDisplayValue:d,priceInCurrency:f}}async listErc20Balances({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:s}=await e(this,xe,vt).call(this,e$1),o=await b(this,L).getTokensBalanceOnChain({chainId:s,address:r}),i=await ze(),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),u=p.toDisplay(),f=i.usd[n.toLowerCase()],d=f?f*l.price:void 0,y=d?p.mul(d).toDisplay({fixedDp:2}):void 0,b=d?p.mul(d).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:a.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:y,balanceDisplayValue:u,balanceInCurrency:b,priceInCurrency:d,type:TokenType.ERC20,reputation:null};}return c}async listNftBalances({chainId:e$1,address:r}){if(!isHexString(r))throw rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await e(this,xe,vt).call(this,e$1),a=await b(this,L).getNftList({chainId:n,address:r});return e(this,Et,Rn).call(this,a,e$1)}};L=new WeakMap,xe=new WeakSet,vt=async function(e){let n=(await b(this,L).getChainList()).find(s=>s.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await b(this,L).getChainInfo({chainId:n});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},Et=new WeakSet,Rn=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:gt(a.content),name:a.name,symbol:"",tokenId:`${a.inner_id}`,tokenUri:a.detail_url,collectionName:a.collection_name,balance:BigInt(a.amount),balanceDisplayValue:`${a.amount}`,type:a.is_erc721?TokenType.ERC721:TokenType.ERC1155,metadata:{indexStatus:NftTokenMetadataStatus.UNINDEXED,description:a.description??"",properties:""}}}),{})};var O=class extends Error{constructor(){super(...arguments);a(this,"message","Glacier is unhealthy. Try again later.");}},Ro=[ChainId.ETHEREUM_HOMESTEAD],Pt=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},Ne),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=>!Ro.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(a){throw a instanceof O&&this.setGlacierToUnhealthy(),a}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(a){throw a instanceof O&&this.setGlacierToUnhealthy(),a}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:a}){try{let 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 O&&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 O&&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 O&&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:gt(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(...xo(i.erc20TokenBalances,Number(e))),o=i.nextPageToken;}while(o);return [...So(a),...s].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(s){throw s instanceof O&&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 O&&this.setGlacierToUnhealthy(),s}}},So=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})),xo=(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 Ie,je,Q,$,ce,le,An=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){c(this,Ie,void 0);c(this,je,void 0);c(this,Q,void 0);c(this,$,void 0);c(this,ce,void 0);c(this,le,void 0);let{glacierApiUrl:s,proxyApiUrl:o}=tr(r);d(this,le,a),d(this,Ie,new Pt({glacierApiUrl:s,headers:At(n)})),d(this,je,new bt({proxyApiUrl:o,fetch:b(this,le)?.fetch})),d(this,Q,o),d(this,$,e),d(this,ce,new Ao({baseURL:o+"/proxy/blockaid/",apiKey:Qt,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return B({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Xr({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return et(e)}deriveAddress(e){return or({...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,Q),fetch:b(this,le)?.fetch});return tn({addresses:e,currency:n,network:r,proxyApiUrl:b(this,Q),customTokens:a,balanceServices:[b(this,Ie),b(this,je)],storage:s,tokenTypes:o,tokenService:i,fetch:b(this,le)?.fetch})}getManifest(){let e=parseManifest(Zt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:s,caipId:o}=e;return an({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:s?.multicall,caipId:o,proxyApiUrl:b(this,Q)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:a,offset:s}=e,{chainId:o,networkToken:i,explorerUrl:c=""}=r;return bn({chainId:o,networkToken:i,explorerUrl:c,address:n,nextPageToken:a,offset:s,glacierService:b(this,Ie)})}getTokens(e){let{chainId:r}=e;return ut({chainId:r,proxyApiUrl:b(this,Q)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return Br({request:e,network:r,approvalController:b(this,$),blockaid:b(this,ce)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return dr(b(this,$))?Ar({request:e,network:r,approvalController:b(this,$),blockaid:b(this,ce)}):{error:rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};case RpcMethod.PERSONAL_SIGN:case RpcMethod.ETH_SIGN:case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:return Kr({request:e,network:r,approvalController:b(this,$),blockaid:b(this,ce)});default:return Co(e.method)?Yr(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};Ie=new WeakMap,je=new WeakMap,Q=new WeakMap,$=new WeakMap,ce=new WeakMap,le=new WeakMap;var Co=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
33
|
+
`;}),e},se=t=>{let e={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return t.split("").map(r=>e[r]||r).join("")};var Ge=z$1.string().describe("message"),M=z$1.string().describe("address");var Fr=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([M,Ge])});var Gr=z$1.object({name:z$1.string(),type:z$1.string()}),ge=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Gr)}).catchall(z$1.array(Gr)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),Dt=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(),Ut=ge.or(Dt),Mr=z$1.union([z$1.string().describe("data string"),ge]),Lr=z$1.union([z$1.string().describe("data string"),Ut]),Vr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([M,Lr])}),Or=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([M,Lr])}),Hr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([M,Mr])}),$r=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([M,Mr])});var Wr=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([Ge,M]),z$1.tuple([Ge,M,z$1.string().optional().describe("password")])])});var Ua=z$1.discriminatedUnion("method",[Wr,Fr,Vr,Or,Hr,$r]).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:Ut.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:ge.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 qr(t){return Ua.safeParse(t)}var jr=t=>Dt.safeParse(t).success,ll=t=>ge.safeParse(t).success;var zr=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 Kr=async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=qr({method:t.method,params:t.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.invalidParams(F("Params are invalid",a.error))};let{method:s,data:o,address:i}=a.data,c;(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=zr(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=jr(o)?Dr(o):_t(o);else if(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4){l={type:s,account:i,data:o};let{types:b,primaryType:P,...E}=o;p=_t(E);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let u=await Sr({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:[It("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 Yr=async(t,e)=>{try{return {result:await(await B({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 Xr=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,t)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};function ve(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}async function be(t){return await Promise.allSettled(t).then(e=>e.reduce((r,n)=>{if(n.status==="fulfilled"){let a=n.value;a.status==="fulfilled"?r[a.id]=a.value:r[a.id]={error:a.reason};}return r},{}))}async function ut({chainId:t,proxyApiUrl:e}){let r=await fetch(`${e}/tokens?evmChainId=${t}`);if(!r.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${t}`);return r.json()}var N,Ee,ie,Ve,Re,ft=class{constructor({network:e,storage:r,proxyApiUrl:n,customTokens:a,fetch:s}){c(this,N,void 0);c(this,Ee,void 0);c(this,ie,void 0);c(this,Ve,void 0);c(this,Re,void 0);d(this,N,e),d(this,Ee,r),d(this,ie,n),d(this,Ve,a),d(this,Re,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await B({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,Ee),proxyApiUrl:b(this,ie),fetch:b(this,Re)}),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),b$1=l!==void 0?y.mul(l):void 0;return {...o,coingeckoId:s??"",type:TokenType.NATIVE,balance:f,balanceDisplayValue:y.toDisplay(),balanceInCurrency:b$1?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:b$1?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:d,change24:u}}async listErc20Balances({chainId:e,address:r,currency:n}){let a=await B({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 ut({chainId:Number(e),proxyApiUrl:b(this,ie)}),c=i.map(E=>E.address),l=[...i,...b(this,Ve)].filter(st),p=async E=>{let g=await new ethers.Contract(E.address,Tr.abi,a).balanceOf?.(r)||0n;return {...E,balance:g}},d=l.map(E=>ve(p(E),E.address)),u=await be(d),f=new z({storage:b(this,Ee),proxyApiUrl:b(this,ie),fetch:b(this,Re)}),y=s&&await f.getPricesByAddresses(c,s,n)||{},b$1=Object.keys(u),P={};for(let E=0;E<b$1.length;E++){let T=b$1[E];if(T===void 0)continue;let I=u[T];if(I===void 0||"error"in I){P[T]={error:`rpcService:getTokenWithBalance failed: ${I?.error??"unknown error"}`};continue}let g=y?.[o??""]?.[n]?.price??void 0,v=y?.[o??""]?.[n]?.marketCap??void 0,G=y?.[o??""]?.[n]?.vol24??void 0,$=y?.[o??""]?.[n]?.change24??void 0,Ae=new TokenUnit(I.balance,I.decimals,I.symbol),w=g!==void 0?Ae.mul(g):void 0;P[I.address.toLowerCase()]={...I,type:TokenType.ERC20,balance:I.balance,balanceDisplayValue:Ae.toDisplay(),balanceInCurrency:w?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:w?.toDisplay({fixedDp:2}),priceInCurrency:g,marketCap:v,change24:$,vol24:G,reputation:null};}return P}async listNftBalances(){return {}}};N=new WeakMap,Ee=new WeakMap,ie=new WeakMap,Ve=new WeakMap,Re=new WeakMap;async function en(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 tn=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 ft({network:r,storage:o,proxyApiUrl:n,customTokens:s,fetch:l})],u=await en(d,y=>y.isNetworkSupported(r.chainId)),f={};if(u){let y=[],b=[],P=[];t.forEach(g=>{a.includes(TokenType.NATIVE)&&y.push(ve(u.getNativeBalance({address:g,currency:e.toUpperCase(),chainId:p}).then(async v=>{if(v.symbol==="AVAX"){let G=await c.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...v,priceInCurrency:G.priceInCurrency,marketCap:G.marketCap,vol24:G.vol24,change24:G.change24}}return v}),g)),a.includes(TokenType.ERC20)&&b.push(ve(u.listErc20Balances({customTokens:s.filter(st),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 be(y),T=await be(b),I=await be(P);Object.keys(E).forEach(g=>{let v=E[g];if(!v||"error"in v){f[g]={error:`getNativeBalance failed: ${v?.error??"unknown error"}`};return}let G=v.symbol;f[g]={[G]:v};}),Object.keys(T).forEach(g=>{let v=T[g];!v||"error"in v&&typeof v.error!="string"?f[g]={...f[g],error:"listErc20Balances failed: unknown error"}:"error"in v&&typeof v.error=="string"?f[g]={...f[g],error:`listErc20Balances failed: ${v.error}`}:f[g]={...f[g],...v};}),Object.keys(I).forEach(g=>{let v=I[g];!v||"error"in v&&typeof v.error!="string"?f[g]={...f[g],error:"listNftBalances failed: unknown error"}:"error"in v&&typeof v.error=="string"?f[g]={...f[g],error:`listNftBalances failed: ${v.error}`}:f[g]={...f[g],...v};});}else t.forEach(y=>{f[y]={error:"unsupported network"};});return f};var Mt={LOW:1n,MEDIUM:4n,HIGH:6n},Lt=500000000n,ja=t=>t===ChainId.AVALANCHE_TESTNET_ID||t===ChainId.AVALANCHE_MAINNET_ID;async function an({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:s,customRpcHeaders:o}){let i=await B({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 za(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 Ka(s,a),d=new TokenUnit(p,0,""),u=new TokenUnit(l,0,""),f=BigInt("1000000000"),y=u.mul(d).add(f).toSubUnit(),b=Lt*Mt.LOW,P=Lt*Mt.MEDIUM,E=Lt*Mt.HIGH;return {baseFee:y,low:{maxFeePerGas:y+b,maxPriorityFeePerGas:b},medium:{maxFeePerGas:y+P,maxPriorityFeePerGas:P},high:{maxFeePerGas:y+E,maxPriorityFeePerGas:E},isFixedFee:!1,displayDecimals:9}}async function za(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 Ka(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 sn(t){return t===TokenType.ERC721||t===TokenType.ERC1155}function Vt(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=>sn(p.type)&&p.to?.address?.toLowerCase()===s),i=a.some(p=>sn(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 cn=({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,s)=>{let o=!e&&!r&&!n,i=Ja(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"),b=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:b?T=TransactionType.AIRDROP:P?T=TransactionType.UNWRAP:E?T=TransactionType.FILL_ORDER:T=TransactionType.UNKNOWN;let I=t.from.address.toLowerCase()===c;return Vt({txType:T,isSender:I,walletAddress:a,tokens:s})},Ja=(t="")=>t.includes("(")?Ya(t.split("(",1)[0]):t;function ln({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=Qa(t.category),c=!Xa.has(t.category),l=ro(t,e,a),p=ye(r,t.hash);return i=Vt({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 Xa=new Set(["send","receive","token send","token receive"]),Za={send:TransactionType.SEND,receive:TransactionType.RECEIVE,"token send":TransactionType.SEND,"token receive":TransactionType.RECEIVE,"nft send":TransactionType.NFT_SEND,"nft receive":TransactionType.NFT_RECEIVE,"token swap":TransactionType.SWAP,"nft purchase":TransactionType.NFT_BUY,"nft sale":TransactionType.NFT_SEND,airdrop:TransactionType.AIRDROP,mint:TransactionType.NFT_BUY,burn:TransactionType.UNKNOWN,deposit:TransactionType.UNKNOWN,withdraw:TransactionType.UNKNOWN,borrow:TransactionType.UNKNOWN,"contract interaction":TransactionType.UNKNOWN};function Qa(t){return Za[t]??TransactionType.UNKNOWN}function X(t){if(!(t==null||t===""))return {address:t}}function yt(t){return t?.trim()??""}function eo(t){let e=t.trim().toLowerCase();return !e.startsWith("0x")||e.length<12?t.trim():`${e.slice(0,6)}\u2026${e.slice(-4)}`}function to(t){let e=yt(t.token_symbol);if(e!=="")return e;let r=yt(t.token_name);return r!==""?r:eo(t.address)}function ro(t,e,r){let n=[],a=t.native_transfers.map(o=>no(o,e)),s=t.erc20_transfers.map(o=>ao(o));n.push(...a,...s);for(let o of t.nft_transfers)n.push(oo(o));return n.length===0&&n.push(so(t,e,r)),n}function no(t,e){let r=yt(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:X(t.from_address),to:X(t.to_address),type:TokenType.NATIVE}}function ao(t){let e=Number(t.token_decimals),r=to(t),n=new TokenUnit(t.value,e,r),a=yt(t.token_name)||r;return {decimal:t.token_decimals,name:a,symbol:r,amount:n.toDisplay(),from:X(t.from_address),to:X(t.to_address),type:TokenType.ERC20,address:t.address}}function oo(t){let e=t.contract_type==="ERC1155"?TokenType.ERC1155:TokenType.ERC721;return {name:"",symbol:"",amount:t.amount,collectableTokenId:t.token_id,from:X(t.from_address),to:X(t.to_address),type:e,address:t.token_address}}function so(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:X(t.from_address),to:X(t.to_address),type:TokenType.NATIVE}}var io="https://proxy-api.avax.network/proxy/moralis-evm";async function pn({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=`${io}/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=>ln({tx:u,networkToken:e,explorerUrl:r,chainId:t,address:n})),nextPageToken:p.cursor??""}:{transactions:[],nextPageToken:""}}catch{return {transactions:[],nextPageToken:""}}}var co=new Set([1,4,5,11155111,8453,42161,10]);function mn(t){return co.has(t)}var dn=(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 un(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var po="https://ipfs.io";function Pe(t,e=po){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}async function mo(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}async function fn(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 mo(Pe(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}var uo="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function yn(t,e="256"){let r=Pe(t);return `${uo}/width=${e},fit/${r}`}var Tn=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 gn(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 gn(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},gn=async(t,e)=>{if(e)return e.startsWith("ipfs://")?Pe(e):e;{let[r,n]=await un(fn(t));return n?"":r.image?yn(r.image):""}};var kn=async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let s=await Tn(t,r),o=cn(t,a,s),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:d}=dn(o,t,a),{blockTimestamp:u,txHash:f,gasPrice:y,gasUsed:b}=t.nativeTransaction,P=ye(e,f);return {isContractCall:!lr.includes(o),isIncoming:c,isOutgoing:i,isSender:l,timestamp:u*1e3,hash:f,from:p,to:d,tokens:s,gasPrice:y,gasUsed:b,chainId:n.toString(),txType:o,explorerLink:P}};var vn=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=>kn({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 bn=async({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s,glacierService:o})=>mn(t)?pn({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s}):o.isHealthy()?vn({networkToken:e,explorerUrl:r,chainId:t,address:n,nextPageToken:a,offset:s,glacierService:o}):{transactions:[],nextPageToken:""};var yo="https://ipfs.io";function En(t,e=yo){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}var ho="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function gt(t,e="256"){let r=En(t);return `${ho}/width=${e},fit/${r}`}var Se,V,Tt=class{constructor(e,r){this.baseUrl=e;c(this,Se,[]);c(this,V,void 0);d(this,V,r??fetch);}async isNetworkSupported(e){return (await this.getChainList()).some(n=>n.community_id===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let a=await b(this,V).call(this,`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(a.ok)return await a.json();throw new Error(`${a.status}:${a.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await b(this,V).call(this,`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await(b(this,V)??globalThis.fetch)(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(b(this,Se).length===0){let e=await b(this,V).call(this,`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,Se,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,Se)}async getNftList({address:e,chainId:r}){return U([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],vo,b(this,V))}};Se=new WeakMap,V=new WeakMap;var To=z$1.object({id:z$1.union([z$1.custom(isHexString),z$1.string()]),chain:z$1.string(),name:z$1.string()}),ko=To.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()})),vo=z$1.array(ko);var L,xe,vt,Et,Pn,bt=class{constructor({proxyApiUrl:e,fetch:r}){c(this,xe);c(this,Et);c(this,L,void 0);d(this,L,new Tt(`${e}/proxy/debank`,r));}async isNetworkSupported(e){return b(this,L).isNetworkSupported(e)}async getNativeBalance({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:s}=await e(this,xe,vt).call(this,e$1),o=a.native_token_id,i=await b(this,L).getTokenBalance({address:r,chainId:s,tokenId:o}),c=new TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),d=(await ze()).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,vt).call(this,e$1),o=await b(this,L).getTokensBalanceOnChain({chainId:s,address:r}),i=await ze(),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,b=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:b,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,vt).call(this,e$1),a=await b(this,L).getNftList({chainId:n,address:r});return e(this,Et,Pn).call(this,a,e$1)}};L=new WeakMap,xe=new WeakSet,vt=async function(e){let n=(await b(this,L).getChainList()).find(s=>s.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await b(this,L).getChainInfo({chainId:n});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},Et=new WeakSet,Pn=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:gt(a.content),name:a.name,symbol:"",tokenId:`${a.inner_id}`,tokenUri:a.detail_url,collectionName:a.collection_name,balance:BigInt(a.amount),balanceDisplayValue:`${a.amount}`,type:a.is_erc721?TokenType.ERC721:TokenType.ERC1155,metadata:{indexStatus:NftTokenMetadataStatus.UNINDEXED,description:a.description??"",properties:""}}}),{})};var O=class extends Error{constructor(){super(...arguments);a(this,"message","Glacier is unhealthy. Try again later.");}},So=[ChainId.ETHEREUM_HOMESTEAD],Rt=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},we),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=>!So.includes(Number(r))),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:r,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:r,tokenId:n});}catch(a){throw a instanceof O&&this.setGlacierToUnhealthy(),a}}async getTokenDetails({address:e,chainId:r,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:r,tokenId:n})}catch(a){throw a instanceof O&&this.setGlacierToUnhealthy(),a}}async getNativeBalance({chainId:e,address:r,currency:n,coingeckoId:a}){try{let 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 O&&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 O&&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 O&&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:gt(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(...Io(i.erc20TokenBalances,Number(e))),o=i.nextPageToken;}while(o);return [...xo(a),...s].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(s){throw s instanceof O&&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 O&&this.setGlacierToUnhealthy(),s}}},xo=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})),Io=(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 Ie,qe,Q,H,ce,le,An=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){c(this,Ie,void 0);c(this,qe,void 0);c(this,Q,void 0);c(this,H,void 0);c(this,ce,void 0);c(this,le,void 0);let{glacierApiUrl:s,proxyApiUrl:o}=tr(r);d(this,le,a),d(this,Ie,new Rt({glacierApiUrl:s,headers:At(n)})),d(this,qe,new bt({proxyApiUrl:o,fetch:b(this,le)?.fetch})),d(this,Q,o),d(this,H,e),d(this,ce,new Co({baseURL:o+"/proxy/blockaid/",apiKey:Qt,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return B({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 Xr({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return et(e)}deriveAddress(e){return or({...e,approvalController:b(this,H)})}getBalances({addresses:e,network:r,currency:n,customTokens:a,storage:s,tokenTypes:o}){let i=new z({storage:s,proxyApiUrl:b(this,Q),fetch:b(this,le)?.fetch});return tn({addresses:e,currency:n,network:r,proxyApiUrl:b(this,Q),customTokens:a,balanceServices:[b(this,Ie),b(this,qe)],storage:s,tokenTypes:o,tokenService:i,fetch:b(this,le)?.fetch})}getManifest(){let e=parseManifest(Zt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:s,caipId:o,customRpcHeaders:i}=e;return an({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:s?.multicall,caipId:o,proxyApiUrl:b(this,Q),customRpcHeaders:i})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:a,offset:s}=e,{chainId:o,networkToken:i,explorerUrl:c=""}=r;return bn({chainId:o,networkToken:i,explorerUrl:c,address:n,nextPageToken:a,offset:s,glacierService:b(this,Ie)})}getTokens(e){let{chainId:r}=e;return ut({chainId:r,proxyApiUrl:b(this,Q)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return Br({request:e,network:r,approvalController:b(this,H),blockaid:b(this,ce)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return dr(b(this,H))?Ar({request:e,network:r,approvalController:b(this,H),blockaid:b(this,ce)}):{error:rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};case RpcMethod.PERSONAL_SIGN:case RpcMethod.ETH_SIGN:case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:return Kr({request:e,network:r,approvalController:b(this,H),blockaid:b(this,ce)});default:return No(e.method)?Yr(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};Ie=new WeakMap,qe=new WeakMap,Q=new WeakMap,H=new WeakMap,ce=new WeakMap,le=new WeakMap;var No=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
34
34
|
|
|
35
|
-
export { ae as ERC20TransactionType, An as EvmModule, lr as NonContractCallTypes, ve as addIdToPromise,
|
|
35
|
+
export { ae as ERC20TransactionType, An as EvmModule, lr as NonContractCallTypes, ve as addIdToPromise, ll as isTypedData, jr as isTypedDataV1, be as settleAllIdPromises };
|
|
36
36
|
//# sourceMappingURL=out.js.map
|
|
37
37
|
//# sourceMappingURL=index.js.map
|