@avalabs/evm-module 3.8.0 → 3.9.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 +15 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _metamask_rpc_errors from '@metamask/rpc-errors';
|
|
2
2
|
import * as _avalabs_vm_module_types from '@avalabs/vm-module-types';
|
|
3
|
-
import { Module, ConstructorParams, Network, GetAddressParams, GetAddressResponse, BuildDerivationPathParams, DeriveAddressParams, DeriveAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, NetworkFeeParam, NetworkFees, GetTransactionHistory, RpcRequest, TransactionType, TypedDataV1, TypedData, MessageTypes, Error } from '@avalabs/vm-module-types';
|
|
3
|
+
import { Module, ConstructorParams, Network, GetAddressParams, GetAddressResponse, BuildDerivationPathParams, DeriveAddressParams, DeriveAddressResponse, DeriveAddressesParams, DeriveAddressesResponse, GetBalancesParams, GetBalancesResponse, Manifest, NetworkFeeParam, NetworkFees, GetTransactionHistory, RpcRequest, TransactionType, TypedDataV1, TypedData, MessageTypes, Error } from '@avalabs/vm-module-types';
|
|
4
4
|
import { JsonRpcBatchInternal } from '@avalabs/core-wallets-sdk';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
|
|
@@ -11,6 +11,7 @@ declare class EvmModule implements Module {
|
|
|
11
11
|
getAddress({ accountIndex, xpub, walletType }: GetAddressParams): Promise<GetAddressResponse>;
|
|
12
12
|
buildDerivationPath(params: BuildDerivationPathParams): Pick<Partial<Record<_avalabs_vm_module_types.NetworkVMType, string>>, _avalabs_vm_module_types.NetworkVMType.EVM>;
|
|
13
13
|
deriveAddress(params: DeriveAddressParams): Promise<DeriveAddressResponse>;
|
|
14
|
+
deriveAddresses(params: DeriveAddressesParams): Promise<DeriveAddressesResponse>;
|
|
14
15
|
getBalances({ addresses, network, currency, customTokens, storage, tokenTypes, }: GetBalancesParams): Promise<GetBalancesResponse>;
|
|
15
16
|
getManifest(): Manifest | undefined;
|
|
16
17
|
getNetworkFee(network: NetworkFeeParam): Promise<NetworkFees>;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _metamask_rpc_errors from '@metamask/rpc-errors';
|
|
2
2
|
import * as _avalabs_vm_module_types from '@avalabs/vm-module-types';
|
|
3
|
-
import { Module, ConstructorParams, Network, GetAddressParams, GetAddressResponse, BuildDerivationPathParams, DeriveAddressParams, DeriveAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, NetworkFeeParam, NetworkFees, GetTransactionHistory, RpcRequest, TransactionType, TypedDataV1, TypedData, MessageTypes, Error } from '@avalabs/vm-module-types';
|
|
3
|
+
import { Module, ConstructorParams, Network, GetAddressParams, GetAddressResponse, BuildDerivationPathParams, DeriveAddressParams, DeriveAddressResponse, DeriveAddressesParams, DeriveAddressesResponse, GetBalancesParams, GetBalancesResponse, Manifest, NetworkFeeParam, NetworkFees, GetTransactionHistory, RpcRequest, TransactionType, TypedDataV1, TypedData, MessageTypes, Error } from '@avalabs/vm-module-types';
|
|
4
4
|
import { JsonRpcBatchInternal } from '@avalabs/core-wallets-sdk';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
|
|
@@ -11,6 +11,7 @@ declare class EvmModule implements Module {
|
|
|
11
11
|
getAddress({ accountIndex, xpub, walletType }: GetAddressParams): Promise<GetAddressResponse>;
|
|
12
12
|
buildDerivationPath(params: BuildDerivationPathParams): Pick<Partial<Record<_avalabs_vm_module_types.NetworkVMType, string>>, _avalabs_vm_module_types.NetworkVMType.EVM>;
|
|
13
13
|
deriveAddress(params: DeriveAddressParams): Promise<DeriveAddressResponse>;
|
|
14
|
+
deriveAddresses(params: DeriveAddressesParams): Promise<DeriveAddressesResponse>;
|
|
14
15
|
getBalances({ addresses, network, currency, customTokens, storage, tokenTypes, }: GetBalancesParams): Promise<GetBalancesResponse>;
|
|
15
16
|
getManifest(): Manifest | undefined;
|
|
16
17
|
getNetworkFee(network: NetworkFeeParam): Promise<NetworkFees>;
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import { a, e, c, d, b, f } from './chunk-F6EK5R7B.js';
|
|
2
2
|
import { DetailItemType, AppName, Environment, NetworkVMType, TransactionType, RpcMethod, TokenType, AlertType, WalletType, RawSimplePriceResponseSchema, parseManifest } from '@avalabs/vm-module-types';
|
|
3
|
-
import
|
|
3
|
+
import ts 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 { CancelablePromise, ApiError, NftTokenMetadataStatus, FetchHttpRequest, Glacier, Erc721Token, Erc1155Token } from '@avalabs/glacier-sdk';
|
|
7
7
|
import { rpcErrors } from '@metamask/rpc-errors';
|
|
8
8
|
import { computeAddress, FetchRequest, Network, Interface, ethers, MaxUint256, isHexString, TypedDataEncoder, toUtf8String } from 'ethers';
|
|
9
|
+
import { init, deriveAddressesForEvm } from '@avalabs/crypto-sdk';
|
|
9
10
|
import { JsonRpcBatchInternal, getEvmAddressFromPubKey, getAddressFromXPub } from '@avalabs/core-wallets-sdk';
|
|
10
11
|
import Br from '@openzeppelin/contracts/build/contracts/ERC20.json';
|
|
11
12
|
import { TokenUnit, numberToBN, balanceToDisplayValue, ipfsResolver } from '@avalabs/core-utils-sdk';
|
|
12
|
-
import
|
|
13
|
+
import _r from 'xss';
|
|
13
14
|
import { ChainId } from '@avalabs/core-chains-sdk';
|
|
14
|
-
import
|
|
15
|
+
import Eo from 'lodash.startcase';
|
|
15
16
|
|
|
16
|
-
function sr(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}a(sr,"charsum");function Nt(t){let e,r=0;for(e=0;e<t.length;e++){let n=sr(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}a(Nt,"arrayHash");var re=a(async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=G.exponential()})=>{let a=0,s=0,o;for(;s<r;){s>0&&await Yn(a);try{let l=await t(s);if(e(l))return l}catch(l){o=l;}a=n(s),s++;}let c=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(c)},"retry"),Ct=class Ct{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}}};a(Ct,"RetryBackoffPolicy");var G=Ct;function Yn(t){return new Promise(e=>setTimeout(e,t))}a(Yn,"delay");var wt=a(t=>re({operation:e=>t(e>0),maxRetries:2,backoffPolicy:G.constant(1),isSuccess:e=>e?.status?.error_code!==429}),"coingeckoRetry");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)}a(U,"fetchAndVerify");var _t=class _t{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)}};a(_t,"CoingeckoProxyClient");var _e=_t;var zn=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())})),Bt=class Bt{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"}}],zn)}};a(Bt,"WatchlistProxyClient");var Je=Bt;var z,ne,ae,fe,Dt=class Dt{constructor({storage:e$1,proxyApiUrl:r,fetch:n}){d(this,z,void 0);d(this,ne,void 0);d(this,ae,void 0);d(this,fe,void 0);b(this,"transformSimplePriceResponse",a((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},"transformSimplePriceResponse"));e(this,z,e$1),e(this,ne,r),e(this,ae,n??globalThis.fetch),e(this,fe,getBasicCoingeckoHttp(void 0,c(this,ae)));}async getWatchlistDataForToken({tokenDetails:e,currency:r=VsCurrencyType.USD}){let n=(await new Je(c(this,ne)).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?`${Nt(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=c(this,z)?.get?.(s),n)return n;try{n=await wt(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return c(this,z)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let a,o=`getPricesWithMarketDataByAddresses-${`${Nt(e)}-${r}-${n}`}`;if(a=c(this,z)?.get?.(o),a)return a;try{a=await wt(c=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:c}));}catch(c){console.error(c),a=void 0;}return c(this,z)?.set?.(o,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let s=await new _e(c(this,ne),c(this,ae)).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(c(this,fe),{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:c$1=!1,shouldThrow:l=!0}){if(c$1){let p=await new _e(c(this,ne),c(this,ae)).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(p,r)}return simplePrice(c(this,fe),{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:s,lastUpdated:o,shouldThrow:l})}};z=new WeakMap,ne=new WeakMap,ae=new WeakMap,fe=new WeakMap,a(Dt,"TokenService");var K=Dt;var ra="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",na="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",cr=object({date:string(),usd:record(number())}),Xe=a(async()=>{try{return await U([ra],cr)}catch{return await U([na],cr)}},"getExchangeRates");var Ut=a((t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),"textItem"),Qe=a((t,e)=>({label:t,value:e,type:DetailItemType.LINK}),"linkItem"),ye=a((t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e}),"addressItem");var et=a((t,e)=>({label:t,type:DetailItemType.NETWORK,value:e}),"networkItem");var Ft=a(({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}},"getCoreHeaders");var lr=process.env.GLACIER_API_KEY;var Be=a(()=>lr,"getGlacierApiKey");var sa={rltoken:Be()},oe,tt,rt,mr,nt,dr,Gt=class Gt extends FetchHttpRequest{constructor(r){super(r);d(this,rt);d(this,nt);d(this,oe,0);d(this,tt,G.exponential());}request(r){let n={...sa,...r.query||{}},a$1={...r,query:Object.keys(n).length>0?n:void 0},s=a(()=>super.request(a$1),"getRequest");return c(this,oe)>0?f(this,nt,dr).call(this,s):f(this,rt,mr).call(this,s)}};oe=new WeakMap,tt=new WeakMap,rt=new WeakSet,mr=a(function(r){let n=r();return new CancelablePromise((a,s,o)=>{o(()=>n.cancel()),n.then(c=>{e(this,oe,0),a(c);}).catch(c$1=>{if(c$1 instanceof ApiError){let l=c$1.status===429,p=c$1.status>=500&&c$1.status<600;e(this,oe,c(this,oe)+Number(l||p));}s(c$1);});})},"#request"),nt=new WeakSet,dr=a(function(r){let n=c(this,tt).call(this,c(this,oe));return new CancelablePromise((a,s,o)=>{let c=setTimeout(()=>{let l=r();o(()=>{l.cancel(),clearTimeout(c);}),l.then(a).catch(s);},n);})},"#postponeRequest"),a(Gt,"GlacierFetchHttpRequest");var De=Gt;var L=a((t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}}),"rpcErrorOpts");var ur={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 fr="DUMMY_API_KEY";var ca={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},la={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},hr=a(t=>{switch(t){case Environment.PRODUCTION:return ca;case Environment.DEV:return la}},"getEnv");var at=a(({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}`)}},"buildDerivationPath");var kr=a(t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string","hasDerivationDetails");var br=a(async t=>{let{secretId:e,approvalController:r}=t,n=kr(t)?at(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[NetworkVMType.EVM]:computeAddress(`0x${a}`)}},"deriveAddress");var F=a(async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:s=2e3,customRpcHeaders:o}=t,c=ha(n),l=c;if(o){let m=new FetchRequest(c);for(let[u,f]of Object.entries(o))m.setHeader(u,f);l=m;}let p=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:a},l,new Network(r,e));return p.pollingInterval=s,p},"getProvider"),ya=["glacier-api.avax.network","proxy-api.avax.network"];function ha(t){let e=new URL(t),r=Be();if(r&&ya.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}a(ha,"addGlacierAPIKeyIfNeeded");var ge=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 vr=z$1.tuple([ge,ge]).rest(ge).refine(t=>Lt(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>Lt(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>ba(t,"nonce")||ka(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'}),ga=z$1.object({skipIntermediateTxs:z$1.boolean().optional()}),Ta=z$1.union([vr,z$1.object({transactions:vr,options:ga.optional()})]);function ka(t,e){return !Lt(t,e)}a(ka,"areAllDifferentByProp");function ba(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}a(ba,"areAllEmptyByProp");function Lt(t,e){return new Set(t.map(n=>n[e])).size===1}a(Lt,"areAllEqualByProp");var Er=a(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},"parseRequestParams");var ot=a(async({from:t,provider:e})=>e.getTransactionCount(t),"getNonce");var Rr=a(async(t,e)=>{if(t[0].nonce)return;let r=await ot({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))},"ensureProperNonces");var Pr=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER,TransactionType.NFT_SEND,TransactionType.NFT_RECEIVE],se=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(se||{});var st=a(t=>{if(t.data)try{let r=new Interface(Br.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Ra(n)?n:void 0}catch{return}},"parseERC20TransactionType");function Ra(t){return Object.values(se).includes(t)}a(Ra,"isERC20TransactionType");var it=a((t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:s,alert:o})=>{let{dappInfo:c}=t,l=st(r),p="Do you approve this transaction?";l==="approve"&&(p="Do you approve this spend limit?");let m=[ye("Account",r.from),et("Network",{name:e.chainName,logoUri:e.logoUri}),Qe("Website",c)];r.to&&m.push(ye("Contract",r.to));let u={title:p,details:[{title:"Transaction Details",items:m}],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}},"buildTxApprovalRequest");var ct=a(async(t,e,r)=>{if("txHash"in e)return e.txHash;let n=a(()=>t.send("eth_sendRawTransaction",[e.signedData]),"broadcast");return r?.shouldRetry?re({operation:()=>n(),isSuccess:()=>!0,maxRetries:6,backoffPolicy:G.linearThenExponential(4,1e3)}):n()},"getTxHash");function Te(t,e,r="tx"){return `${t}/${r}/${e}`}a(Te,"getExplorerAddressByNetwork");var Ge=a(async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:s,request:o})=>{try{let c=Te(t,r);if(n({txHash:r,request:o,explorerLink:c}),(await re({operation:async()=>e.getTransactionReceipt(r),isSuccess:m=>!!m,backoffPolicy:G.linearThenExponential(15,750),maxRetries:20}))?.status===1)return a({txHash:r,explorerLink:c,request:o}),!0}catch(c){console.error(c);}return s({txHash:r,request:o}),!1},"waitForTransactionReceipt");var lt=new Map,Sr=a((t,e,r)=>(lt.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},s)=>{let o=lt.get(t);if(!o)throw rpcErrors.resourceNotFound();let{signingRequests:c}=o,p={signingRequests:c.map((m,u)=>{if(s===void 0||s===u){let{signingData:f}=m;return {signingData:{...f,data:{...f.data,maxFeePerGas:n??f.data.maxFeePerGas,maxPriorityFeePerGas:a??f.data.maxPriorityFeePerGas}},displayData:m.displayData}}return m}),displayData:r};return lt.set(t,p),p},cleanup:()=>lt.delete(t)}),"getTxBatchUpdater");function ie(t){return !("type"in t)}a(ie,"isNetworkToken");function pt(t){return t.type===TokenType.ERC20}a(pt,"isERC20Token");function xr(t){return typeof t.to=="string"}a(xr,"hasToField");function Ir(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}a(Ir,"supportsBatchApprovals");function Ia(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}a(Ia,"isBalanceChange");function Aa(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}a(Aa,"isTokenApprovals");function Mt(t){return Ia(t)?t.ins.length===0&&t.outs.length===0:Aa(t)?t.approvals.length===0:!1}a(Mt,"isEmpty");var Ar=a(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}})},"scanTransactionBatch"),Nr=a(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}}),"scanTransaction"),Cr=a(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}}),"scanJsonRpc");var Dr=a(async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,Br.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),s=wr(a[0]),o=wr(a[1]),c=parseInt(a[2]),l={type:TokenType.ERC20,name:s,chainId:e,symbol:o,decimals:c,address:t.to,contractType:"ERC-20"},p=new ethers.Interface(Br.abi),m=p.getFunction(t.data.slice(0,10)),u=p.decodeFunctionData(t.data.slice(0,10),t.data);if(m?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new TokenUnit(u.amount,l.decimals,l.symbol).toDisplay(),usdPrice:void 0}],token:l}],ins:[]}};if(m?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:l,spenderAddress:u.spender,value:u.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}},"parseWithErc20Abi");var J={[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 Fr=a(async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:s})=>{let o;try{o=await Nr({chainId:n,params:r,domain:e,blockaid:s});}catch(c){console.error("simulateTransaction error",c);}return Vt({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:o})},"simulateTransaction"),Vt=a(async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:a})=>{let s,o,c,l=!1,p;if(a){let{validation:m,simulation:u,gas_estimation:f}=a;!m||m.result_type==="Error"||m.result_type==="Warning"?s=J[AlertType.WARNING]:m.result_type==="Malicious"&&(s=J[AlertType.DANGER]),u?.status==="Success"&&(l=!0,c=Gr(t,u.account_summary),o=Lr(u.account_summary.assets_diffs)),f?.status==="Success"&&(p=Number(f.estimate));}if(!l&&xr(e)){let m=await Dr(e,r,n);o=m.balanceChange,c=m.tokenApprovals;}return {alert:s,balanceChange:o,tokenApprovals:c,isSimulationSuccessful:l,estimatedGasLimit:p}},"processTransactionSimulation"),Fa=a(t=>t.trace_type==="ExposureTrace","isExposureTrace"),Ga=a((t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,"normalizeAddresses"),La=a(t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>Fa(r)?{[Ga(r.spender,r.asset.address)]:r}:e,{}),"mapExposureTracesToSpenderAsset"),Gr=a((t,e)=>{let{traces:r}=e,n=La(r),a=Object.entries(n).map(([o,c])=>{let l=Mr(c.asset);if(!l)return;let p={token:l,spenderAddress:c.spender,logoUri:l.logoUri};if(c.type==="ERC20ExposureTrace"){let{exposed:{raw_value:m,value:u,usd_price:f}}=c;if(!u||u<=0)return;p.value=m,p.usdPrice=`${f}`;}if(c.type==="ERC721ExposureTrace")if(!c.exposed)p.value=`0x${MaxUint256.toString(16)}`;else {let{usd_price:m,amount:u}=c.exposed;p.value=`${u}`,p.usdPrice=`${m}`;}return p}).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}},"processTokenApprovals"),Lr=a(t=>{let e=Ur(t,"in"),r=Ur(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},"processBalanceChange"),Ur=a((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?Mr(n):Ma(n);if(!a)return;let s=r[e].map(o=>{let c;if("value"in o&&o.value)if("decimals"in a){let u=numberToBN(o.value,a.decimals);c=balanceToDisplayValue(u,a.decimals);}else isHexString(o.value)&&(c=parseInt(o.value,16).toString());else "type"in a&&a.type===TokenType.ERC721&&(c="1");if(!c)return;let l="logo_url"in o?o.logo_url:void 0,p="token_id"in o?o.token_id:void 0;return {displayValue:c,usdPrice:o.usd_price,...l!==void 0&&{logoUri:l},...p!==void 0&&{tokenId:p}}}).filter(o=>o!==void 0);return {token:a,items:s}}).filter(r=>r!==void 0),"processAssetDiffs"),Mr=a(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},"convertAssetToNetworkContractToken"),Ma=a(t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),"convertNativeAssetToToken"),Vr=a(async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:s})=>{let o,c,l;try{let{validation:p,simulation:m}=await Cr({chainId:n,accountAddress:r,data:a,domain:e,blockaid:s});!p||p.result_type==="Error"||p.result_type==="Warning"?o=J[AlertType.WARNING]:p.result_type==="Malicious"&&(o=J[AlertType.DANGER]),m?.status==="Success"&&(l=Gr(t.method,m.account_summary),c=Lr(m.account_summary.assets_diffs));}catch(p){console.error("processJsonRpcSimulation error",p),o=J[AlertType.WARNING];}return {alert:o,balanceChange:c,tokenApprovals:l}},"processJsonRpcSimulation");var Hr=a(async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:s,blockaid:o})=>{let c;try{c=await Ar({chainId:n,params:r,domain:e,withGasEstimation:s,blockaid:o});}catch(y){return console.error("simulateTransactionBatch error",y),{isSimulationSuccessful:!1,alert:J[AlertType.WARNING],scans:[]}}let l=await Promise.all(c.map(async(y,h)=>{let E=r[h],S=await Vt({chainId:n,params:r[h],provider:a,rpcMethod:t,simulationResult:y});return s&&!E.gas&&S.estimatedGasLimit&&(E.gas=`0x${S.estimatedGasLimit.toString(16)}`),{transaction:E,...S}})),p=l.every(y=>y.isSimulationSuccessful),m=Va(l),u=Ha(l),f=Oa(l);return {isSimulationSuccessful:p,alert:m,balanceChange:u,tokenApprovals:f,scans:l.map(y=>(y.tokenApprovals&&(y.tokenApprovals.isEditable=!1),y))}},"simulateTransactionBatch"),Va=a(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)},"getHighestAlert"),Oa=a(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 $a(e,t),Mt(e)?void 0:e},"aggregateTokenApprovals"),Ha=a(t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let s=Or(r.ins,a);s?s.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let s=Or(r.outs,a);s?s.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return Mt(e)?void 0:e},"aggregateBalanceChange"),Or=a((t,e)=>t.find(r=>ie(r.token)&&ie(e.token)?r.token.symbol===e.token.symbol:!ie(r.token)&&!ie(e.token)?r.token.address===e.token.address:!1),"findTokenDiff"),$a=a((t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(s=>!ie(s.token)&&!ie(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;}},"clearSpentApprovals");var $r=a(async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,success:o,error:c}=Er(a);if(!o)return console.error("invalid params",c),{error:rpcErrors.invalidParams(L("Transaction params are invalid",c))};let{transactions:l,options:p={}}=s,{skipIntermediateTxs:m=!1}=p,u=await F({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3,customRpcHeaders:e.customRpcHeaders});try{await Rr(l,u);}catch(_){return console.error("Unable to calculate nonce",_),{error:rpcErrors.internal(L("Unable to calculate nonce",_))}}let f=l.every(_=>Number(_.gas)>0),{alert:y,balanceChange:h,isSimulationSuccessful:E,tokenApprovals:S,scans:R}=await Hr({rpcMethod:t.method,chainId:e.chainId,params:l,dAppUrl:t.dappInfo.url,provider:u,populateMissingGas:!f,blockaid:n});if(!R.every(({transaction:_})=>Number(_.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let A={title:"Do you approve these transactions?",details:[{title:"Transaction Details",items:[ye("Account",l[0].from),et("Network",{name:e.chainName,logoUri:e.logoUri}),Qe("Website",t.dappInfo)]}],isSimulationSuccessful:E,balanceChange:h,alert:y,tokenApprovals:S,networkFeeSelector:!0},k=R.map(_=>it(t,e,_.transaction,_)),{cleanup:v,updateTx:M}=Sr(t.requestId,k,A),j=await r.requestBatchApproval({request:t,signingRequests:k,displayData:A,updateTx:M});if(v(),"error"in j)return {error:j.error};if(j.result.length!==l.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${l.length}, got ${j.result.length}`})};let we=[];for(let[_,qn]of j.result.entries()){let or=_===j.result.length-1,At=await ct(u,qn);if(or&&Ge({explorerUrl:e.explorerUrl??"",provider:u,txHash:At,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),!or&&!m&&!await Ge({explorerUrl:e.explorerUrl??"",provider:u,txHash:At,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}))return {error:rpcErrors.internal({message:`Transaction ${_+1} failed! Batch execution stopped`})};we.push(At);}return {result:we}},"ethSendTransactionBatch");function Wr(t,e,r){return new ethers.Contract(t,Br.abi).interface.encodeFunctionData("approve",[e,r])}a(Wr,"encodeApprovalLimit");var ut=new Map,jr=a((t,e,r)=>(ut.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:s,gasLimit:o})=>{let c=ut.get(t);if(!c)throw rpcErrors.resourceNotFound();let{signingData:l,displayData:p}=c,m={...l,data:{...l.data,gasLimit:o??l.data.gasLimit,maxFeePerGas:n??l.data.maxFeePerGas,maxPriorityFeePerGas:a??l.data.maxPriorityFeePerGas}},u={...p};if(typeof s=="string"){if(!s.startsWith("0x"))throw rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let y=p.tokenApprovals;qa(y),Ya(l.data.data);let h=y.approvals[0];m.data.data=Wr(h.token.address,h.spenderAddress,s),u.tokenApprovals={approvals:[{...h,value:s}],isEditable:!0};}let f={signingData:m,displayData:u};return ut.set(t,f),f},cleanup:()=>ut.delete(t)}),"getTxUpdater");function qa(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.")}a(qa,"ensureTokenApprovalCanBeEdited");function Ya(t){if((!t||t==="0x"?null:st({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}a(Ya,"ensureApproveWasCalled");var qr=a(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}))},"estimateGasLimit");var Ka=z$1.tuple([ge]),Yr=a(t=>Ka.safeParse(t),"parseRequestParams");var zr=a(async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,error:o,success:c}=Yr(a);if(!c)return console.error("invalid params",o),{error:rpcErrors.invalidParams(L("Transaction params are invalid",o))};let[l]=s,p=await F({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3,customRpcHeaders:e.customRpcHeaders});if(!l.gas||Number(l.gas)<0)try{let T=await qr({transactionParams:{from:l.from,to:l.to,data:l.data,value:l.value,accessList:l.accessList},provider:p});l.gas="0x"+T.toString(16);}catch(T){return {error:rpcErrors.internal(L("Unable to calculate gas limit",T))}}if(!l.nonce)try{let T=await ot({from:l.from,provider:p});l.nonce=String(T);}catch(T){return {error:rpcErrors.internal(L("Unable to calculate nonce",T))}}let m=await Fr({rpcMethod:t.method,chainId:e.chainId,params:l,dAppUrl:t.dappInfo.url,provider:p,blockaid:n}),{displayData:u,signingData:f}=it(t,e,l,m),{updateTx:y,cleanup:h}=jr(t.requestId,f,u),E=await r.requestApproval({request:t,displayData:u,signingData:f,updateTx:y});if(h(),"error"in E)return {error:E.error};let S,R=t.context?.shouldRetry===!0;try{S=await ct(p,E,{shouldRetry:R});}catch(T){return {error:rpcErrors.internal(L("Unable to get transaction hash",T))}}return Ge({explorerUrl:e.explorerUrl??"",provider:p,txHash:S,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:S}},"ethSendTransaction");var Ot=a(t=>{let e="";e+=`Domain
|
|
17
|
+
function sr(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}a(sr,"charsum");function Ct(t){let e,r=0;for(e=0;e<t.length;e++){let n=sr(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}a(Ct,"arrayHash");var re=a(async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=G.exponential()})=>{let a=0,s=0,o;for(;s<r;){s>0&&await zn(a);try{let l=await t(s);if(e(l))return l}catch(l){o=l;}a=n(s),s++;}let c=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(c)},"retry"),Nt=class Nt{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}}};a(Nt,"RetryBackoffPolicy");var G=Nt;function zn(t){return new Promise(e=>setTimeout(e,t))}a(zn,"delay");var wt=a(t=>re({operation:e=>t(e>0),maxRetries:2,backoffPolicy:G.constant(1),isSuccess:e=>e?.status?.error_code!==429}),"coingeckoRetry");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)}a(U,"fetchAndVerify");var _t=class _t{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)}};a(_t,"CoingeckoProxyClient");var De=_t;var Kn=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())})),Dt=class Dt{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"}}],Kn)}};a(Dt,"WatchlistProxyClient");var Xe=Dt;var z,ne,ae,fe,Bt=class Bt{constructor({storage:e$1,proxyApiUrl:r,fetch:n}){d(this,z,void 0);d(this,ne,void 0);d(this,ae,void 0);d(this,fe,void 0);b(this,"transformSimplePriceResponse",a((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},"transformSimplePriceResponse"));e(this,z,e$1),e(this,ne,r),e(this,ae,n??globalThis.fetch),e(this,fe,getBasicCoingeckoHttp(void 0,c(this,ae)));}async getWatchlistDataForToken({tokenDetails:e,currency:r=VsCurrencyType.USD}){let n=(await new Xe(c(this,ne)).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?`${Ct(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=c(this,z)?.get?.(s),n)return n;try{n=await wt(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return c(this,z)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let a,o=`getPricesWithMarketDataByAddresses-${`${Ct(e)}-${r}-${n}`}`;if(a=c(this,z)?.get?.(o),a)return a;try{a=await wt(c=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:c}));}catch(c){console.error(c),a=void 0;}return c(this,z)?.set?.(o,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let s=await new De(c(this,ne),c(this,ae)).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(c(this,fe),{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:c$1=!1,shouldThrow:l=!0}){if(c$1){let p=await new De(c(this,ne),c(this,ae)).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(p,r)}return simplePrice(c(this,fe),{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:s,lastUpdated:o,shouldThrow:l})}};z=new WeakMap,ne=new WeakMap,ae=new WeakMap,fe=new WeakMap,a(Bt,"TokenService");var K=Bt;var na="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",aa="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",cr=object({date:string(),usd:record(number())}),Ze=a(async()=>{try{return await U([na],cr)}catch{return await U([aa],cr)}},"getExchangeRates");var Ut=a((t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),"textItem"),et=a((t,e)=>({label:t,value:e,type:DetailItemType.LINK}),"linkItem"),ye=a((t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e}),"addressItem");var tt=a((t,e)=>({label:t,type:DetailItemType.NETWORK,value:e}),"networkItem");var Ft=a(({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}},"getCoreHeaders");var lr=process.env.GLACIER_API_KEY;var Be=a(()=>lr,"getGlacierApiKey");var ia={rltoken:Be()},oe,rt,nt,mr,at,dr,Gt=class Gt extends FetchHttpRequest{constructor(r){super(r);d(this,nt);d(this,at);d(this,oe,0);d(this,rt,G.exponential());}request(r){let n={...ia,...r.query||{}},a$1={...r,query:Object.keys(n).length>0?n:void 0},s=a(()=>super.request(a$1),"getRequest");return c(this,oe)>0?f(this,at,dr).call(this,s):f(this,nt,mr).call(this,s)}};oe=new WeakMap,rt=new WeakMap,nt=new WeakSet,mr=a(function(r){let n=r();return new CancelablePromise((a,s,o)=>{o(()=>n.cancel()),n.then(c=>{e(this,oe,0),a(c);}).catch(c$1=>{if(c$1 instanceof ApiError){let l=c$1.status===429,p=c$1.status>=500&&c$1.status<600;e(this,oe,c(this,oe)+Number(l||p));}s(c$1);});})},"#request"),at=new WeakSet,dr=a(function(r){let n=c(this,rt).call(this,c(this,oe));return new CancelablePromise((a,s,o)=>{let c=setTimeout(()=>{let l=r();o(()=>{l.cancel(),clearTimeout(c);}),l.then(a).catch(s);},n);})},"#postponeRequest"),a(Gt,"GlacierFetchHttpRequest");var Ue=Gt;var M=a((t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}}),"rpcErrorOpts");var ur={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 fr="DUMMY_API_KEY";var la={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},pa={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},hr=a(t=>{switch(t){case Environment.PRODUCTION:return la;case Environment.DEV:return pa}},"getEnv");var ge=a(({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}`)}},"buildDerivationPath");var kr=a(t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string","hasDerivationDetails");var br=a(async t=>{let{secretId:e,approvalController:r}=t,n=kr(t)?ge(t).EVM:void 0,a=await r.requestPublicKey({curve:"secp256k1",secretId:e,derivationPath:n});return {[NetworkVMType.EVM]:computeAddress(`0x${a}`)}},"deriveAddress");var vr=a(async t=>{let{approvalController:e,secretId:r,accountIndices:n,derivationPathType:a}=t;if(n.length===0)return [];await init();let s=await Promise.all(n.map(async c=>{let l=ge({accountIndex:c,derivationPathType:a}).EVM,p=await e.requestPublicKey({curve:"secp256k1",secretId:r,derivationPath:l});return Uint8Array.from(Buffer.from(p,"hex"))}));return (await deriveAddressesForEvm(s)).map(c=>({[NetworkVMType.EVM]:c}))},"deriveAddresses");var F=a(async t=>{let{chainId:e,chainName:r,rpcUrl:n,multiContractAddress:a,pollingInterval:s=2e3,customRpcHeaders:o}=t,c=ba(n),l=c;if(o){let m=new FetchRequest(c);for(let[u,f]of Object.entries(o))m.setHeader(u,f);l=m;}let p=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:a},l,new Network(r,e));return p.pollingInterval=s,p},"getProvider"),ka=["glacier-api.avax.network","proxy-api.avax.network"];function ba(t){let e=new URL(t),r=Be();if(r&&ka.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}a(ba,"addGlacierAPIKeyIfNeeded");var Te=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 Er=z$1.tuple([Te,Te]).rest(Te).refine(t=>Mt(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>Mt(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>Ra(t,"nonce")||Pa(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'}),va=z$1.object({skipIntermediateTxs:z$1.boolean().optional()}),Ea=z$1.union([Er,z$1.object({transactions:Er,options:va.optional()})]);function Pa(t,e){return !Mt(t,e)}a(Pa,"areAllDifferentByProp");function Ra(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}a(Ra,"areAllEmptyByProp");function Mt(t,e){return new Set(t.map(n=>n[e])).size===1}a(Mt,"areAllEqualByProp");var Pr=a(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},"parseRequestParams");var ot=a(async({from:t,provider:e})=>e.getTransactionCount(t),"getNonce");var Rr=a(async(t,e)=>{if(t[0].nonce)return;let r=await ot({from:t[0].from,provider:e});return Promise.all(t.map(async(n,a)=>{n.nonce=String(r+a);}))},"ensureProperNonces");var xr=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER,TransactionType.NFT_SEND,TransactionType.NFT_RECEIVE],se=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(se||{});var st=a(t=>{if(t.data)try{let r=new Interface(Br.abi).parseTransaction({data:t.data,value:t.value}),n=r?.name??r?.fragment?.name;return n&&Aa(n)?n:void 0}catch{return}},"parseERC20TransactionType");function Aa(t){return Object.values(se).includes(t)}a(Aa,"isERC20TransactionType");var it=a((t,e,r,{isSimulationSuccessful:n,balanceChange:a,tokenApprovals:s,alert:o})=>{let{dappInfo:c}=t,l=st(r),p="Do you approve this transaction?";l==="approve"&&(p="Do you approve this spend limit?");let m=[ye("Account",r.from),tt("Network",{name:e.chainName,logoUri:e.logoUri}),et("Website",c)];r.to&&m.push(ye("Contract",r.to));let u={title:p,details:[{title:"Transaction Details",items:m}],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}},"buildTxApprovalRequest");var ct=a(async(t,e,r)=>{if("txHash"in e)return e.txHash;let n=a(()=>t.send("eth_sendRawTransaction",[e.signedData]),"broadcast");return r?.shouldRetry?re({operation:()=>n(),isSuccess:()=>!0,maxRetries:6,backoffPolicy:G.linearThenExponential(4,1e3)}):n()},"getTxHash");function ke(t,e,r="tx"){return `${t}/${r}/${e}`}a(ke,"getExplorerAddressByNetwork");var Me=a(async({explorerUrl:t,provider:e,txHash:r,onTransactionPending:n,onTransactionConfirmed:a,onTransactionReverted:s,request:o})=>{try{let c=ke(t,r);if(n({txHash:r,request:o,explorerLink:c}),(await re({operation:async()=>e.getTransactionReceipt(r),isSuccess:m=>!!m,backoffPolicy:G.linearThenExponential(15,750),maxRetries:20}))?.status===1)return a({txHash:r,explorerLink:c,request:o}),!0}catch(c){console.error(c);}return s({txHash:r,request:o}),!1},"waitForTransactionReceipt");var lt=new Map,Sr=a((t,e,r)=>(lt.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a},s)=>{let o=lt.get(t);if(!o)throw rpcErrors.resourceNotFound();let{signingRequests:c}=o,p={signingRequests:c.map((m,u)=>{if(s===void 0||s===u){let{signingData:f}=m;return {signingData:{...f,data:{...f.data,maxFeePerGas:n??f.data.maxFeePerGas,maxPriorityFeePerGas:a??f.data.maxPriorityFeePerGas}},displayData:m.displayData}}return m}),displayData:r};return lt.set(t,p),p},cleanup:()=>lt.delete(t)}),"getTxBatchUpdater");function ie(t){return !("type"in t)}a(ie,"isNetworkToken");function pt(t){return t.type===TokenType.ERC20}a(pt,"isERC20Token");function Ar(t){return typeof t.to=="string"}a(Ar,"hasToField");function Ir(t){return "requestBatchApproval"in t&&typeof t.requestBatchApproval=="function"}a(Ir,"supportsBatchApprovals");function wa(t){return typeof t=="object"&&t!==null&&"ins"in t&&"outs"in t&&Array.isArray(t.ins)&&Array.isArray(t.outs)}a(wa,"isBalanceChange");function _a(t){return typeof t=="object"&&t!==null&&"approvals"in t&&"isEditable"in t&&Array.isArray(t.approvals)}a(_a,"isTokenApprovals");function Lt(t){return wa(t)?t.ins.length===0&&t.outs.length===0:_a(t)?t.approvals.length===0:!1}a(Lt,"isEmpty");var Cr=a(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}})},"scanTransactionBatch"),Nr=a(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}}),"scanTransaction"),wr=a(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}}),"scanJsonRpc");var Ur=a(async(t,e,r)=>{if(!t.data)return {tokenApprovals:void 0,balanceChange:void 0};try{let n=new ethers.Contract(t.to,Br.abi,r),a=await Promise.all([n.name?.(),n.symbol?.(),n.decimals?.()]),s=_r(a[0]),o=_r(a[1]),c=parseInt(a[2]),l={type:TokenType.ERC20,name:s,chainId:e,symbol:o,decimals:c,address:t.to,contractType:"ERC-20"},p=new ethers.Interface(Br.abi),m=p.getFunction(t.data.slice(0,10)),u=p.decodeFunctionData(t.data.slice(0,10),t.data);if(m?.name==="transfer")return {balanceChange:{outs:[{items:[{displayValue:new TokenUnit(u.amount,l.decimals,l.symbol).toDisplay(),usdPrice:void 0}],token:l}],ins:[]}};if(m?.name==="approve")return {tokenApprovals:{isEditable:!0,approvals:[{token:l,spenderAddress:u.spender,value:u.amount}]}}}catch(n){console.error("parseErc20Tx error",n);}return {tokenApprovals:void 0,balanceChange:void 0}},"parseWithErc20Abi");var J={[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 Gr=a(async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,blockaid:s})=>{let o;try{o=await Nr({chainId:n,params:r,domain:e,blockaid:s});}catch(c){console.error("simulateTransaction error",c);}return Vt({rpcMethod:t,params:r,chainId:n,provider:a,simulationResult:o})},"simulateTransaction"),Vt=a(async({rpcMethod:t,params:e,chainId:r,provider:n,simulationResult:a})=>{let s,o,c,l=!1,p;if(a){let{validation:m,simulation:u,gas_estimation:f}=a;!m||m.result_type==="Error"||m.result_type==="Warning"?s=J[AlertType.WARNING]:m.result_type==="Malicious"&&(s=J[AlertType.DANGER]),u?.status==="Success"&&(l=!0,c=Mr(t,u.account_summary),o=Lr(u.account_summary.assets_diffs)),f?.status==="Success"&&(p=Number(f.estimate));}if(!l&&Ar(e)){let m=await Ur(e,r,n);o=m.balanceChange,c=m.tokenApprovals;}return {alert:s,balanceChange:o,tokenApprovals:c,isSimulationSuccessful:l,estimatedGasLimit:p}},"processTransactionSimulation"),Va=a(t=>t.trace_type==="ExposureTrace","isExposureTrace"),Oa=a((t,e)=>`${t.toLowerCase()}.${e.toLowerCase()}`,"normalizeAddresses"),Ha=a(t=>t===void 0||t.length===0?{}:t.reduce((e,r)=>Va(r)?{[Oa(r.spender,r.asset.address)]:r}:e,{}),"mapExposureTracesToSpenderAsset"),Mr=a((t,e)=>{let{traces:r}=e,n=Ha(r),a=Object.entries(n).map(([o,c])=>{let l=Vr(c.asset);if(!l)return;let p={token:l,spenderAddress:c.spender,logoUri:l.logoUri};if(c.type==="ERC20ExposureTrace"){let{exposed:{raw_value:m,value:u,usd_price:f}}=c;if(!u||u<=0)return;p.value=m,p.usdPrice=`${f}`;}if(c.type==="ERC721ExposureTrace")if(!c.exposed)p.value=`0x${MaxUint256.toString(16)}`;else {let{usd_price:m,amount:u}=c.exposed;p.value=`${u}`,p.usdPrice=`${m}`;}return p}).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}},"processTokenApprovals"),Lr=a(t=>{let e=Fr(t,"in"),r=Fr(t,"out");if(!(e.length===0&&r.length===0))return {ins:e,outs:r}},"processBalanceChange"),Fr=a((t,e)=>t.filter(r=>r[e].length>0).sort((r,n)=>r[e].length-n[e].length).map(r=>{let n=r.asset,a="address"in n?Vr(n):$a(n);if(!a)return;let s=r[e].map(o=>{let c;if("value"in o&&o.value)if("decimals"in a){let u=numberToBN(o.value,a.decimals);c=balanceToDisplayValue(u,a.decimals);}else isHexString(o.value)&&(c=parseInt(o.value,16).toString());else "type"in a&&a.type===TokenType.ERC721&&(c="1");if(!c)return;let l="logo_url"in o?o.logo_url:void 0,p="token_id"in o?o.token_id:void 0;return {displayValue:c,usdPrice:o.usd_price,...l!==void 0&&{logoUri:l},...p!==void 0&&{tokenId:p}}}).filter(o=>o!==void 0);return {token:a,items:s}}).filter(r=>r!==void 0),"processAssetDiffs"),Vr=a(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},"convertAssetToNetworkContractToken"),$a=a(t=>({name:t.name??"",symbol:t.symbol??"",decimals:t.decimals,description:"",logoUri:t.logo_url}),"convertNativeAssetToToken"),Or=a(async({request:t,dAppUrl:e,accountAddress:r,chainId:n,data:a,blockaid:s})=>{let o,c,l;try{let{validation:p,simulation:m}=await wr({chainId:n,accountAddress:r,data:a,domain:e,blockaid:s});!p||p.result_type==="Error"||p.result_type==="Warning"?o=J[AlertType.WARNING]:p.result_type==="Malicious"&&(o=J[AlertType.DANGER]),m?.status==="Success"&&(l=Mr(t.method,m.account_summary),c=Lr(m.account_summary.assets_diffs));}catch(p){console.error("processJsonRpcSimulation error",p),o=J[AlertType.WARNING];}return {alert:o,balanceChange:c,tokenApprovals:l}},"processJsonRpcSimulation");var $r=a(async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,provider:a,populateMissingGas:s,blockaid:o})=>{let c;try{c=await Cr({chainId:n,params:r,domain:e,withGasEstimation:s,blockaid:o});}catch(y){return console.error("simulateTransactionBatch error",y),{isSimulationSuccessful:!1,alert:J[AlertType.WARNING],scans:[]}}let l=await Promise.all(c.map(async(y,h)=>{let E=r[h],x=await Vt({chainId:n,params:r[h],provider:a,rpcMethod:t,simulationResult:y});return s&&!E.gas&&x.estimatedGasLimit&&(E.gas=`0x${x.estimatedGasLimit.toString(16)}`),{transaction:E,...x}})),p=l.every(y=>y.isSimulationSuccessful),m=Wa(l),u=qa(l),f=ja(l);return {isSimulationSuccessful:p,alert:m,balanceChange:u,tokenApprovals:f,scans:l.map(y=>(y.tokenApprovals&&(y.tokenApprovals.isEditable=!1),y))}},"simulateTransactionBatch"),Wa=a(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)},"getHighestAlert"),ja=a(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 Ya(e,t),Lt(e)?void 0:e},"aggregateTokenApprovals"),qa=a(t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(a=>{let s=Hr(r.ins,a);s?s.items.push(...a.items):r.ins.push(a);}),n.outs.forEach(a=>{let s=Hr(r.outs,a);s?s.items.push(...a.items):r.outs.push({...a});})),r),{ins:[],outs:[]});return Lt(e)?void 0:e},"aggregateBalanceChange"),Hr=a((t,e)=>t.find(r=>ie(r.token)&&ie(e.token)?r.token.symbol===e.token.symbol:!ie(r.token)&&!ie(e.token)?r.token.address===e.token.address:!1),"findTokenDiff"),Ya=a((t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(s=>!ie(s.token)&&!ie(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;}},"clearSpentApprovals");var Wr=a(async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,success:o,error:c}=Pr(a);if(!o)return console.error("invalid params",c),{error:rpcErrors.invalidParams(M("Transaction params are invalid",c))};let{transactions:l,options:p={}}=s,{skipIntermediateTxs:m=!1}=p,u=await F({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3,customRpcHeaders:e.customRpcHeaders});try{await Rr(l,u);}catch(_){return console.error("Unable to calculate nonce",_),{error:rpcErrors.internal(M("Unable to calculate nonce",_))}}let f=l.every(_=>Number(_.gas)>0),{alert:y,balanceChange:h,isSimulationSuccessful:E,tokenApprovals:x,scans:P}=await $r({rpcMethod:t.method,chainId:e.chainId,params:l,dAppUrl:t.dappInfo.url,provider:u,populateMissingGas:!f,blockaid:n});if(!P.every(({transaction:_})=>Number(_.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:[ye("Account",l[0].from),tt("Network",{name:e.chainName,logoUri:e.logoUri}),et("Website",t.dappInfo)]}],isSimulationSuccessful:E,balanceChange:h,alert:y,tokenApprovals:x,networkFeeSelector:!0},k=P.map(_=>it(t,e,_.transaction,_)),{cleanup:v,updateTx:L}=Sr(t.requestId,k,I),j=await r.requestBatchApproval({request:t,signingRequests:k,displayData:I,updateTx:L});if(v(),"error"in j)return {error:j.error};if(j.result.length!==l.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${l.length}, got ${j.result.length}`})};let _e=[];for(let[_,Yn]of j.result.entries()){let or=_===j.result.length-1,It=await ct(u,Yn);if(or&&Me({explorerUrl:e.explorerUrl??"",provider:u,txHash:It,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),!or&&!m&&!await Me({explorerUrl:e.explorerUrl??"",provider:u,txHash:It,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}))return {error:rpcErrors.internal({message:`Transaction ${_+1} failed! Batch execution stopped`})};_e.push(It);}return {result:_e}},"ethSendTransactionBatch");function jr(t,e,r){return new ethers.Contract(t,Br.abi).interface.encodeFunctionData("approve",[e,r])}a(jr,"encodeApprovalLimit");var ut=new Map,qr=a((t,e,r)=>(ut.set(t,{signingData:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:a,approvalLimit:s,gasLimit:o})=>{let c=ut.get(t);if(!c)throw rpcErrors.resourceNotFound();let{signingData:l,displayData:p}=c,m={...l,data:{...l.data,gasLimit:o??l.data.gasLimit,maxFeePerGas:n??l.data.maxFeePerGas,maxPriorityFeePerGas:a??l.data.maxPriorityFeePerGas}},u={...p};if(typeof s=="string"){if(!s.startsWith("0x"))throw rpcErrors.invalidInput("Expected approvalLimit to be a hexadecimal number (0x-prefixed)");let y=p.tokenApprovals;Ja(y),Xa(l.data.data);let h=y.approvals[0];m.data.data=jr(h.token.address,h.spenderAddress,s),u.tokenApprovals={approvals:[{...h,value:s}],isEditable:!0};}let f={signingData:m,displayData:u};return ut.set(t,f),f},cleanup:()=>ut.delete(t)}),"getTxUpdater");function Ja(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.")}a(Ja,"ensureTokenApprovalCanBeEdited");function Xa(t){if((!t||t==="0x"?null:st({data:t??void 0}))!=="approve")throw rpcErrors.invalidInput("Cannot change invoked method for requests in progress. Please start a new request instead.")}a(Xa,"ensureApproveWasCalled");var Yr=a(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}))},"estimateGasLimit");var Qa=z$1.tuple([Te]),zr=a(t=>Qa.safeParse(t),"parseRequestParams");var Kr=a(async({request:t,network:e,approvalController:r,blockaid:n})=>{let{params:a}=t,{data:s,error:o,success:c}=zr(a);if(!c)return console.error("invalid params",o),{error:rpcErrors.invalidParams(M("Transaction params are invalid",o))};let[l]=s,p=await F({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3,customRpcHeaders:e.customRpcHeaders});if(!l.gas||Number(l.gas)<0)try{let T=await Yr({transactionParams:{from:l.from,to:l.to,data:l.data,value:l.value,accessList:l.accessList},provider:p});l.gas="0x"+T.toString(16);}catch(T){return {error:rpcErrors.internal(M("Unable to calculate gas limit",T))}}if(!l.nonce)try{let T=await ot({from:l.from,provider:p});l.nonce=String(T);}catch(T){return {error:rpcErrors.internal(M("Unable to calculate nonce",T))}}let m=await Gr({rpcMethod:t.method,chainId:e.chainId,params:l,dAppUrl:t.dappInfo.url,provider:p,blockaid:n}),{displayData:u,signingData:f}=it(t,e,l,m),{updateTx:y,cleanup:h}=qr(t.requestId,f,u),E=await r.requestApproval({request:t,displayData:u,signingData:f,updateTx:y});if(h(),"error"in E)return {error:E.error};let x,P=t.context?.shouldRetry===!0;try{x=await ct(p,E,{shouldRetry:P});}catch(T){return {error:rpcErrors.internal(M("Unable to get transaction hash",T))}}return Me({explorerUrl:e.explorerUrl??"",provider:p,txHash:x,onTransactionPending:r.onTransactionPending,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,request:t}),{result:x}},"ethSendTransaction");var Ot=a(t=>{let e="";e+=`Domain
|
|
17
18
|
`;for(let r in t.domain)e+=` ${r}: ${ce(String(t.domain[r]))}
|
|
18
19
|
`;e+=`
|
|
19
20
|
Message
|
|
@@ -27,11 +28,11 @@ Message
|
|
|
27
28
|
`,n[s].forEach((o,c)=>{e+=` ${c}: ${ce(o)}
|
|
28
29
|
`;})):e+=` ${s}: ${ce(String(n[s]))}
|
|
29
30
|
`;})):e+=` ${r}: ${ce(String(t.message[r]))}
|
|
30
|
-
`;return e},"beautifyComplexMessage"),
|
|
31
|
+
`;return e},"beautifyComplexMessage"),Jr=a(t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
31
32
|
`,e+=`${ce(String(r.value))}
|
|
32
33
|
|
|
33
|
-
`;}),e},"beautifySimpleMessage"),ce=a(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("")},"toUnicodeBold");var Ve=z$1.string().describe("message"),V=z$1.string().describe("address");var Xr=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([V,Ve])});var Zr=z$1.object({name:z$1.string(),type:z$1.string()}),be=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Zr)}).catchall(z$1.array(Zr)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),$t=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(),Wt=be.or($t),Qr=z$1.union([z$1.string().describe("data string"),be]),en=z$1.union([z$1.string().describe("data string"),Wt]),tn=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([V,en])}),rn=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([V,en])}),nn=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([V,Qr])}),an=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([V,Qr])});var on=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([Ve,V]),z$1.tuple([Ve,V,z$1.string().optional().describe("password")])])});var Za=z$1.discriminatedUnion("method",[on,Xr,tn,rn,nn,an]).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:Wt.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:be.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 sn(t){return Za.safeParse(t)}a(sn,"parseRequestParams");var cn=a(t=>$t.safeParse(t).success,"isTypedDataV1"),hp=a(t=>be.safeParse(t).success,"isTypedData");var ln=a(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}}},"isTypedDataValid");var pn=a(async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=sn({method:t.method,params:t.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.invalidParams(L("Params are invalid",a.error))};let{method:s,data:o,address:c}=a.data,l;(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4)&&(l=ln(o));let p,m,u;if(l&&!l.isValid&&(u={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:l.error.toString()}}),s===RpcMethod.ETH_SIGN)p={type:s,account:c,data:o},m=o;else if(s===RpcMethod.PERSONAL_SIGN)p={type:s,account:c,data:o},m=toUtf8String(o);else if(s===RpcMethod.SIGN_TYPED_DATA||s===RpcMethod.SIGN_TYPED_DATA_V1)p={type:s,account:c,data:o},m=cn(o)?Kr(o):Ot(o);else if(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4){p={type:s,account:c,data:o};let{types:E,primaryType:S,...R}=o;m=Ot(R);}if(!p||!m)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let f=await Vr({request:t,accountAddress:c,chainId:e.chainId,data:{method:s,params:t.params},dAppUrl:t.dappInfo.url,blockaid:n}),y={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:c,details:[{title:"Message",items:[Ut("Message",m,"vertical")]}],alert:f?.alert??u,balanceChange:f?.balanceChange,tokenApprovals:f?.tokenApprovals},h=await r.requestApproval({request:t,displayData:y,signingData:p});return "error"in h?{error:h.error}:"signedData"in h?{result:h.signedData}:{error:rpcErrors.internal("No signed data returned")}},"ethSign");var mn=a(async(t,e)=>{try{return {result:await(await F({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)}}},"forwardToRpcNode");var un=a(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}`)}},"getAddress");function Re(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}a(Re,"addIdToPromise");async function Pe(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},{}))}a(Pe,"settleAllIdPromises");var so={"ERC-20":TokenType.ERC20,"ERC-721":TokenType.ERC721,"ERC-1155":TokenType.ERC1155,"NON-ERC":TokenType.NONERC,SPL:TokenType.SPL},io=z$1.string().transform((t,e)=>{let r=so[t];return r||(e.addIssue({code:z$1.ZodIssueCode.custom,message:`Unknown contractType: ${t}`}),z$1.NEVER)}),co=z$1.array(z$1.object({address:z$1.string(),chainId:z$1.number(),contractType:io,decimals:z$1.number(),internalId:z$1.string().optional(),isNative:z$1.boolean(),logoUri:z$1.string().optional(),name:z$1.string(),symbol:z$1.string(),caip2Id:z$1.string().optional(),color:z$1.string().optional()}));async function gt({chainId:t,proxyApiUrl:e}){return (await U([`${e}/tokens?evmChainId=${t}`],co)).map(n=>({...n,type:n.contractType}))}a(gt,"getTokens");var w,Se,le,We,xe,qt=class qt{constructor({network:e$1,storage:r,proxyApiUrl:n,customTokens:a,fetch:s}){d(this,w,void 0);d(this,Se,void 0);d(this,le,void 0);d(this,We,void 0);d(this,xe,void 0);e(this,w,e$1),e(this,Se,r),e(this,le,n),e(this,We,a),e(this,xe,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await F({chainId:e,chainName:c(this,w).chainName,rpcUrl:c(this,w).rpcUrl,multiContractAddress:c(this,w).utilityAddresses?.multicall,customRpcHeaders:c(this,w).customRpcHeaders}),s=c(this,w).pricingProviders?.coingecko.nativeTokenId,o=c(this,w).networkToken,c$1=new K({storage:c(this,Se),proxyApiUrl:c(this,le),fetch:c(this,xe)}),l=s?await c$1.getSimplePrice({coinIds:[s],currencies:[n]}):{},p=l?.[s??""]?.[n]?.price??void 0,m=l?.[s??""]?.[n]?.marketCap??void 0,u=l?.[s??""]?.[n]?.vol24??void 0,f=l?.[s??""]?.[n]?.change24??void 0,y=await a.getBalance(r),h=new TokenUnit(y,o.decimals,o.symbol),E=p!==void 0?h.mul(p):void 0;return {...o,coingeckoId:s??"",type:TokenType.NATIVE,balance:y,balanceDisplayValue:h.toDisplay(),balanceInCurrency:E?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:E?.toDisplay({fixedDp:2}),priceInCurrency:p,marketCap:m,vol24:u,change24:f}}async listErc20Balances({chainId:e,address:r,currency:n}){let a$1=await F({chainId:e,chainName:c(this,w).chainName,rpcUrl:c(this,w).rpcUrl,multiContractAddress:c(this,w).utilityAddresses?.multicall,customRpcHeaders:c(this,w).customRpcHeaders}),s=c(this,w).pricingProviders?.coingecko.assetPlatformId,o=c(this,w).pricingProviders?.coingecko.nativeTokenId,c$1=await gt({chainId:Number(e),proxyApiUrl:c(this,le)}),l=c$1.map(R=>R.address),p=[...c$1,...c(this,We)].filter(pt),m=a(async R=>{let k=await new ethers.Contract(R.address,Br.abi,a$1).balanceOf?.(r)||0n;return {...R,balance:k}},"getTokenWithBalance"),u=p.map(R=>Re(m(R),R.address)),f=await Pe(u),y=new K({storage:c(this,Se),proxyApiUrl:c(this,le),fetch:c(this,xe)}),h=s&&await y.getPricesByAddresses(l,s,n)||{},E=Object.keys(f),S={};for(let R=0;R<E.length;R++){let T=E[R];if(T===void 0)continue;let A=f[T];if(A===void 0||"error"in A){S[T]={error:`rpcService:getTokenWithBalance failed: ${A?.error??"unknown error"}`};continue}let k=h?.[o??""]?.[n]?.price??void 0,v=h?.[o??""]?.[n]?.marketCap??void 0,M=h?.[o??""]?.[n]?.vol24??void 0,j=h?.[o??""]?.[n]?.change24??void 0,we=new TokenUnit(A.balance,A.decimals,A.symbol),_=k!==void 0?we.mul(k):void 0;S[A.address.toLowerCase()]={...A,type:TokenType.ERC20,balance:A.balance,balanceDisplayValue:we.toDisplay(),balanceInCurrency:_?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:_?.toDisplay({fixedDp:2}),priceInCurrency:k,marketCap:v,change24:j,vol24:M,reputation:null};}return S}async listNftBalances(){return {}}};w=new WeakMap,Se=new WeakMap,le=new WeakMap,We=new WeakMap,xe=new WeakMap,a(qt,"RpcService");var Tt=qt;async function hn(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}a(hn,"findAsync");var gn=a(async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:a=[TokenType.NATIVE,TokenType.ERC20,TokenType.ERC721,TokenType.ERC1155],customTokens:s=[],storage:o,balanceServices:c=[],tokenService:l,fetch:p})=>{let m=r.chainId,u=[...c,new Tt({network:r,storage:o,proxyApiUrl:n,customTokens:s,fetch:p})],f=await hn(u,h=>h.isNetworkSupported(r.chainId)),y={};if(f){let h=[],E=[],S=[];t.forEach(k=>{a.includes(TokenType.NATIVE)&&h.push(Re(f.getNativeBalance({address:k,currency:e.toUpperCase(),chainId:m}).then(async v=>{if(v.symbol==="AVAX"){let M=await l.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...v,priceInCurrency:M.priceInCurrency,marketCap:M.marketCap,vol24:M.vol24,change24:M.change24}}return v}),k)),a.includes(TokenType.ERC20)&&E.push(Re(f.listErc20Balances({customTokens:s.filter(pt),currency:e.toUpperCase(),chainId:m,address:k,pageSize:100}),k)),(a.includes(TokenType.ERC721)||a.includes(TokenType.ERC1155))&&S.push(Re(f.listNftBalances({chainId:m,address:k}),k));});let R=await Pe(h),T=await Pe(E),A=await Pe(S);Object.keys(R).forEach(k=>{let v=R[k];if(!v||"error"in v){y[k]={error:`getNativeBalance failed: ${v?.error??"unknown error"}`};return}let M=v.symbol;y[k]={[M]:v};}),Object.keys(T).forEach(k=>{let v=T[k];!v||"error"in v&&typeof v.error!="string"?y[k]={...y[k],error:"listErc20Balances failed: unknown error"}:"error"in v&&typeof v.error=="string"?y[k]={...y[k],error:`listErc20Balances failed: ${v.error}`}:y[k]={...y[k],...v};}),Object.keys(A).forEach(k=>{let v=A[k];!v||"error"in v&&typeof v.error!="string"?y[k]={...y[k],error:"listNftBalances failed: unknown error"}:"error"in v&&typeof v.error=="string"?y[k]={...y[k],error:`listNftBalances failed: ${v.error}`}:y[k]={...y[k],...v};});}else t.forEach(h=>{y[h]={error:"unsupported network"};});return y},"getBalances");var zt={LOW:1n,MEDIUM:4n,HIGH:6n},Kt=500000000n,mo=a(t=>t===ChainId.AVALANCHE_TESTNET_ID||t===ChainId.AVALANCHE_MAINNET_ID,"isCChain"),bn=137,vn=80002,uo=a(t=>t===bn||t===vn,"isPolygon"),fo={[bn]:"https://gasstation.polygon.technology/v2",[vn]:"https://gasstation.polygon.technology/amoy"};function pe(t){return BigInt(Math.round(t*1e9))}a(pe,"gweiToWei");async function yo(t){let e=fo[t];if(!e)throw new Error(`No gas station URL for Polygon chain ${t}`);let r=await fetch(e);if(!r.ok)throw new Error(`Polygon Gas Station returned ${r.status}`);let n=await r.json();return {baseFee:pe(n.estimatedBaseFee),low:{maxFeePerGas:pe(n.safeLow.maxFee),maxPriorityFeePerGas:pe(n.safeLow.maxPriorityFee)},medium:{maxFeePerGas:pe(n.standard.maxFee),maxPriorityFeePerGas:pe(n.standard.maxPriorityFee)},high:{maxFeePerGas:pe(n.fast.maxFee),maxPriorityFeePerGas:pe(n.fast.maxPriorityFee)},isFixedFee:!1,displayDecimals:9}}a(yo,"getPolygonGasStationFees");async function En({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:s,customRpcHeaders:o}){let c=await F({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,customRpcHeaders:o});if(!s)throw rpcErrors.internal("Proxy API URL is needed");if(mo(t))try{let T=await ho(c);return {...T,baseFee:T.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}if(uo(t))try{return await yo(t)}catch{console.error("Polygon Gas Station call failed, falling back to generic fee fetching");}let l=await c.getBlock("latest",!1);if(!l)throw rpcErrors.internal("There is no block");let p=l.baseFeePerGas;if(!p)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let m=await go(s,a),u=new TokenUnit(m,0,""),f=new TokenUnit(p,0,""),y=BigInt("1000000000"),h=f.mul(u).add(y).toSubUnit(),E=Kt*zt.LOW,S=Kt*zt.MEDIUM,R=Kt*zt.HIGH;return {baseFee:h,low:{maxFeePerGas:h+E,maxPriorityFeePerGas:E},medium:{maxFeePerGas:h+S,maxPriorityFeePerGas:S},high:{maxFeePerGas:h+R,maxPriorityFeePerGas:R},isFixedFee:!1,displayDecimals:9}}a(En,"getNetworkFee");async function ho(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)}}}a(ho,"suggestPriceOptions");async function go(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}}a(go,"getGasMultiplier");function Pn(t){return t===TokenType.ERC721||t===TokenType.ERC1155}a(Pn,"isNftTokenType");function Jt(t){let{txType:e,isSender:r,walletAddress:n,tokens:a}=t;if(a.length===0)return e;let s=n.toLowerCase(),o=a.some(m=>Pn(m.type)&&m.to?.address?.toLowerCase()===s),c=a.some(m=>Pn(m.type)&&m.from?.address?.toLowerCase()===s),l=e===TransactionType.RECEIVE||e===TransactionType.UNKNOWN||e===TransactionType.TRANSFER||e===TransactionType.AIRDROP,p=e===TransactionType.SEND||e===TransactionType.UNKNOWN||e===TransactionType.TRANSFER||e===TransactionType.AIRDROP;return !r&&o&&l?TransactionType.NFT_RECEIVE:r&&c&&p?TransactionType.NFT_SEND:e}a(Jt,"convertTransactionType");var Sn=a(({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,s)=>{let o=!e&&!r&&!n,c=ko(t.method?.methodName),l=a.toLowerCase(),p=c.toLowerCase().includes("swap"),m=o&&t.from.address.toLowerCase()===l,u=o&&t.to.address.toLowerCase()===l,f=c==="Market Buy Orders With Eth"||c==="Buy NFT",y=c==="Approve",h=c.toLowerCase().includes("transfer"),E=c.toLowerCase().includes("airdrop"),S=c.toLowerCase().includes("unwrap"),R=c==="Fill Order",T;p?T=TransactionType.SWAP:m?T=TransactionType.SEND:u?T=TransactionType.RECEIVE:f?T=TransactionType.NFT_BUY:y?T=TransactionType.APPROVE:h?T=TransactionType.TRANSFER:E?T=TransactionType.AIRDROP:S?T=TransactionType.UNWRAP:R?T=TransactionType.FILL_ORDER:T=TransactionType.UNKNOWN;let A=t.from.address.toLowerCase()===l;return Jt({txType:T,isSender:A,walletAddress:a,tokens:s})},"getTxType"),ko=a((t="")=>t.includes("(")?To(t.split("(",1)[0]):t,"parseRawMethod");function xn({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(),c=Eo(t.category),l=!bo.has(t.category),p=So(t,e,a),m=Te(r,t.hash);return c=Jt({txType:c,isSender:s,walletAddress:a,tokens:p}),{isContractCall:l,isIncoming:!s,isOutgoing:s,isSender:s,timestamp:o,hash:t.hash,from:t.from_address,to:t.to_address??"",tokens:p,gasPrice:t.gas_price,gasUsed:t.receipt_gas_used,chainId:n.toString(),txType:c,method:t.method_label??void 0,explorerLink:m}}a(xn,"convertMoralisTransaction");var bo=new Set(["send","receive","token send","token receive"]),vo={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 Eo(t){return vo[t]??TransactionType.UNKNOWN}a(Eo,"getMoralisTransactionType");function Q(t){if(!(t==null||t===""))return {address:t}}a(Q,"getTransferAddress");function kt(t){return t?.trim()??""}a(kt,"trimOrEmpty");function Ro(t){let e=t.trim().toLowerCase();return !e.startsWith("0x")||e.length<12?t.trim():`${e.slice(0,6)}\u2026${e.slice(-4)}`}a(Ro,"shortenHexAddress");function Po(t){let e=kt(t.token_symbol);if(e!=="")return e;let r=kt(t.token_name);return r!==""?r:Ro(t.address)}a(Po,"getErc20DisplaySymbol");function So(t,e,r){let n=[],a=t.native_transfers.map(o=>xo(o,e)),s=t.erc20_transfers.map(o=>Io(o));n.push(...a,...s);for(let o of t.nft_transfers)n.push(Ao(o));return n.length===0&&n.push(No(t,e,r)),n}a(So,"buildTokens");function xo(t,e){let r=kt(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:Q(t.from_address),to:Q(t.to_address),type:TokenType.NATIVE}}a(xo,"buildNativeToken");function Io(t){let e=Number(t.token_decimals),r=Po(t),n=new TokenUnit(t.value,e,r),a=kt(t.token_name)||r;return {decimal:t.token_decimals,name:a,symbol:r,amount:n.toDisplay(),from:Q(t.from_address),to:Q(t.to_address),type:TokenType.ERC20,address:t.address}}a(Io,"buildErc20Token");function Ao(t){let e=t.contract_type==="ERC1155"?TokenType.ERC1155:TokenType.ERC721;return {name:"",symbol:"",amount:t.amount,collectableTokenId:t.token_id,from:Q(t.from_address),to:Q(t.to_address),type:e,address:t.token_address}}a(Ao,"buildNftToken");function No(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:Q(t.from_address),to:Q(t.to_address),type:TokenType.NATIVE}}a(No,"buildFallbackNativeToken");var Co="https://proxy-api.avax.network/proxy/moralis-evm";async function In({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s}){try{let o=`0x${t.toString(16)}`,c=new URLSearchParams({chain:o,limit:(s??25).toString()});a&&c.set("cursor",a);let l=`${Co}/wallets/${n}/history?${c.toString()}`,p=await fetch(l);if(!p.ok)return {transactions:[],nextPageToken:""};let m=await p.json();return Array.isArray(m.result)?{transactions:m.result.filter(f=>f.receipt_status==="1").map(f=>xn({tx:f,networkToken:e,explorerUrl:r,chainId:t,address:n})),nextPageToken:m.cursor??""}:{transactions:[],nextPageToken:""}}catch{return {transactions:[],nextPageToken:""}}}a(In,"getTransactionsFromMoralis");var wo=new Set([1,4,5,11155111,8453,42161,10]);function An(t){return wo.has(t)}a(An,"isMoralisSupportedChain");var Nn=a((t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},a)=>{let s=t===TransactionType.TRANSFER,o=t===TransactionType.SEND||t===TransactionType.NFT_SEND,c=t===TransactionType.RECEIVE||t===TransactionType.NFT_RECEIVE,l=e?.from?.address,p=e?.to?.address;s&&r&&r[0]&&(l=r[0].from.address,p=r[0].to.address),s&&n&&n[0]&&(l=n[0].from.address,p=n[0].to.address);let m=o||s&&l.toLowerCase()===a.toLowerCase(),u=c||s&&p.toLowerCase()===a.toLowerCase();return {isOutgoing:m,isIncoming:u,isSender:l===a,from:l,to:p}},"getSenderInfo");async function Cn(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}a(Cn,"resolve");var Bo="https://ipfs.io";function Ie(t,e=Bo){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}a(Ie,"ipfsResolverWithFallback");async function Do(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}a(Do,"fetchWithTimeout");async function wn(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 Do(Ie(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}a(wn,"getNftMetadata");var Uo="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function _n(t,e="256"){let r=Ie(t);return `${Uo}/width=${e},fit/${r}`}a(_n,"getSmallImageForNFT");var Un=a(async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a)=>{let s=[];if(t.value!=="0"){let o=a.decimals,l=new TokenUnit(t.value,a.decimals,a.symbol).toDisplay();s.push({decimal:o.toString(),name:a.name,symbol:a.symbol,amount:l,from:t.from,to:t.to,type:TokenType.NATIVE});}return e?.forEach(o=>{let c=o.erc20Token.decimals,p=new TokenUnit(o.value,c,o.erc20Token.symbol).toDisplay();s.push({decimal:c.toString(),address:o.erc20Token.address,name:o.erc20Token.name,symbol:o.erc20Token.symbol,amount:p,from:o.from,to:o.to,imageUri:o.erc20Token.logoUri,type:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async o=>{let c=o.erc721Token,l=await Dn(c.tokenUri,c.metadata.imageUri);s.push({name:o.erc721Token.name,symbol:o.erc721Token.symbol,address:o.erc721Token.address,amount:"1",imageUri:l,from:o.from,to:o.to,collectableTokenId:o.erc721Token.tokenId,type:TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async o=>{let c=o.erc1155Token,l=await Dn(c.tokenUri,c.metadata.imageUri);s.push({name:o.erc1155Token.metadata.name??"",symbol:o.erc1155Token.metadata.symbol??"",address:o.erc1155Token.address,amount:o.value,imageUri:l,from:o.from,to:o.to,collectableTokenId:o.erc1155Token.tokenId,type:TokenType.ERC1155});})),s},"getTokens"),Dn=a(async(t,e)=>{if(e)return e.startsWith("ipfs://")?Ie(e):e;{let[r,n]=await Cn(wn(t));return n?"":r.image?_n(r.image):""}},"getImageUri");var Fn=a(async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let s=await Un(t,r),o=Sn(t,a,s),{isOutgoing:c,isIncoming:l,isSender:p,from:m,to:u}=Nn(o,t,a),{blockTimestamp:f,txHash:y,gasPrice:h,gasUsed:E}=t.nativeTransaction,S=Te(e,y);return {isContractCall:!Pr.includes(o),isIncoming:l,isOutgoing:c,isSender:p,timestamp:f*1e3,hash:y,from:m,to:u,tokens:s,gasPrice:h,gasUsed:E,chainId:n.toString(),txType:o,explorerLink:S}},"convertTransaction");var Gn=a(async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:a,offset:s,glacierService:o})=>{try{let c=await o.listTransactions({chainId:t.toString(),address:n,pageToken:a,pageSize:s});return {transactions:(await Promise.all(c.transactions.filter(m=>m.nativeTransaction.txStatus==="1").map(m=>Fn({transactions:m,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(u=>u)))).filter(m=>m.tokens.find(u=>Number(u.amount)!==0)),nextPageToken:c.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}},"getTransactionsFromGlacier");var Ln=a(async({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s,glacierService:o})=>An(t)?In({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s}):o.isHealthy()?Gn({networkToken:e,explorerUrl:r,chainId:t,address:n,nextPageToken:a,offset:s,glacierService:o}):{transactions:[],nextPageToken:""},"getTransactionHistory");var Go="https://ipfs.io";function Mn(t,e=Go){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}a(Mn,"ipfsResolverWithFallback");var Lo="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function vt(t,e="256"){let r=Mn(t);return `${Lo}/width=${e},fit/${r}`}a(vt,"getSmallImageForNFT");var Ae,H,Zt=class Zt{constructor(e$1,r){this.baseUrl=e$1;d(this,Ae,[]);d(this,H,void 0);e(this,H,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 c(this,H).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 c(this,H).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(c(this,H)??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(c(this,Ae).length===0){let e$1=await c(this,H).call(this,`${this.baseUrl}/v1/chain/list`);if(e$1.ok)e(this,Ae,await e$1.json());else throw new Error(`${e$1.status}:${e$1.statusText}`)}return c(this,Ae)}async getNftList({address:e,chainId:r}){return U([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],Ho,c(this,H))}};Ae=new WeakMap,H=new WeakMap,a(Zt,"DeBank");var Et=Zt,Vo=z$1.object({id:z$1.union([z$1.custom(isHexString),z$1.string()]),chain:z$1.string(),name:z$1.string()}),Oo=Vo.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()})),Ho=z$1.array(Oo);var O,Ne,Pt,xt,On,er=class er{constructor({proxyApiUrl:e$1,fetch:r}){d(this,Ne);d(this,xt);d(this,O,void 0);e(this,O,new Et(`${e$1}/proxy/debank`,r));}async isNetworkSupported(e){return c(this,O).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:s}=await f(this,Ne,Pt).call(this,e),o=a.native_token_id,c$1=await c(this,O).getTokenBalance({address:r,chainId:s,tokenId:o}),l=new TokenUnit(c$1.raw_amount,c$1.decimals,c$1.symbol),p=l.toDisplay(),u=(await Xe()).usd[n.toLowerCase()],f$1=u?u*c$1.price:void 0,y=f$1?l.mul(f$1).toDisplay({fixedDp:2}):void 0,h=f$1?l.mul(f$1).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c$1.name,symbol:c$1.symbol,decimals:c$1.decimals,type:TokenType.NATIVE,logoUri:c$1.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:h,balanceCurrencyDisplayValue:y,priceInCurrency:f$1}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:s}=await f(this,Ne,Pt).call(this,e),o=await c(this,O).getTokensBalanceOnChain({chainId:s,address:r}),c$1=await Xe(),l={};for(let p of o){if(p.id===a.native_token_id||p.is_core===!1)continue;let m=new TokenUnit(p.raw_amount,p.decimals,p.symbol),u=m.toDisplay(),f=c$1.usd[n.toLowerCase()],y=f?f*p.price:void 0,h=y?m.mul(y).toDisplay({fixedDp:2}):void 0,E=y?m.mul(y).toDisplay({fixedDp:2,asNumber:!0}):void 0;l[p.id]={chainId:a.community_id,address:p.id,name:p.name,symbol:p.symbol,decimals:p.decimals,logoUri:p.logo_url,balance:m.toSubUnit(),balanceCurrencyDisplayValue:h,balanceDisplayValue:u,balanceInCurrency:E,priceInCurrency:y,type:TokenType.ERC20,reputation:null};}return l}async listNftBalances({chainId:e,address:r}){if(!isHexString(r))throw rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await f(this,Ne,Pt).call(this,e),a=await c(this,O).getNftList({chainId:n,address:r});return f(this,xt,On).call(this,a,e)}};O=new WeakMap,Ne=new WeakSet,Pt=a(async function(e){let n=(await c(this,O).getChainList()).find(s=>s.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await c(this,O).getChainInfo({chainId:n});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},"#getChainInfo"),xt=new WeakSet,On=a(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:vt(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:""}}}),{})},"#mapNftList"),a(er,"DeBankService");var St=er;var rr=class rr extends Error{constructor(){super(...arguments);b(this,"message","Glacier is unhealthy. Try again later.");}};a(rr,"GlacierUnhealthyError");var $=rr,Yo=[ChainId.ETHEREUM_HOMESTEAD],nr=class nr{constructor({glacierApiUrl:e,headers:r}){b(this,"glacierSdk");b(this,"isGlacierHealthy",!0);b(this,"supportedChainIds",[]);b(this,"isHealthy",a(()=>this.isGlacierHealthy,"isHealthy"));this.glacierSdk=new Glacier({BASE:e,HEADERS:r},De),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=>!Yo.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 $&&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 $&&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,c=new TokenUnit(o.balance,o.decimals,o.symbol),l=o.price?.value,p=l!==void 0?c.mul(l):void 0;return {name:o.name,symbol:o.symbol,decimals:o.decimals,type:TokenType.NATIVE,logoUri:o.logoUri,balance:c.toSubUnit(),balanceDisplayValue:c.toDisplay(),balanceInCurrency:p?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:p?.toDisplay({fixedDp:2}),priceInCurrency:l,coingeckoId:a??""}}catch(s){throw s instanceof $&&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 $&&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 $&&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:vt(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 c=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:o});s.push(...Ko(c.erc20TokenBalances,Number(e))),o=c.nextPageToken;}while(o);return [...zo(a),...s].reduce((c,l)=>({...c,[l.address.toLowerCase()]:l}),{})}catch(s){throw s instanceof $&&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 $&&this.setGlacierToUnhealthy(),s}}};a(nr,"EvmGlacierService");var It=nr,zo=a(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})),"convertErc20TokenToTokenWithBalance"),Ko=a((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,c=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:c,priceInCurrency:o,reputation:r.tokenReputation,type:TokenType.ERC20}}),"convertErc20TokenWithBalanceToTokenWithBalance");var Ce,Ke,te,W,me,de,ar=class ar{constructor({approvalController:e$1,environment:r,appInfo:n,runtime:a}){d(this,Ce,void 0);d(this,Ke,void 0);d(this,te,void 0);d(this,W,void 0);d(this,me,void 0);d(this,de,void 0);let{glacierApiUrl:s,proxyApiUrl:o}=hr(r);e(this,de,a),e(this,Ce,new It({glacierApiUrl:s,headers:Ft(n)})),e(this,Ke,new St({proxyApiUrl:o,fetch:c(this,de)?.fetch})),e(this,te,o),e(this,W,e$1),e(this,me,new Xo({baseURL:o+"/proxy/blockaid/",apiKey:fr,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return F({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 un({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return at(e)}deriveAddress(e){return br({...e,approvalController:c(this,W)})}getBalances({addresses:e,network:r,currency:n,customTokens:a,storage:s,tokenTypes:o}){let c$1=new K({storage:s,proxyApiUrl:c(this,te),fetch:c(this,de)?.fetch});return gn({addresses:e,currency:n,network:r,proxyApiUrl:c(this,te),customTokens:a,balanceServices:[c(this,Ce),c(this,Ke)],storage:s,tokenTypes:o,tokenService:c$1,fetch:c(this,de)?.fetch})}getManifest(){let e=parseManifest(ur);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:s,caipId:o,customRpcHeaders:c$1}=e;return En({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:s?.multicall,caipId:o,proxyApiUrl:c(this,te),customRpcHeaders:c$1})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:a,offset:s}=e,{chainId:o,networkToken:c$1,explorerUrl:l=""}=r;return Ln({chainId:o,networkToken:c$1,explorerUrl:l,address:n,nextPageToken:a,offset:s,glacierService:c(this,Ce)})}getTokens(e){let{chainId:r}=e;return gt({chainId:r,proxyApiUrl:c(this,te)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return zr({request:e,network:r,approvalController:c(this,W),blockaid:c(this,me)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return Ir(c(this,W))?$r({request:e,network:r,approvalController:c(this,W),blockaid:c(this,me)}):{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 pn({request:e,network:r,approvalController:c(this,W),blockaid:c(this,me)});default:return Zo(e.method)?mn(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};Ce=new WeakMap,Ke=new WeakMap,te=new WeakMap,W=new WeakMap,me=new WeakMap,de=new WeakMap,a(ar,"EvmModule");var jn=ar,Zo=a(t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t),"shouldForwardToRpcNode");
|
|
34
|
+
`;}),e},"beautifySimpleMessage"),ce=a(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("")},"toUnicodeBold");var Oe=z$1.string().describe("message"),V=z$1.string().describe("address");var Zr=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([V,Oe])});var Qr=z$1.object({name:z$1.string(),type:z$1.string()}),ve=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Qr)}).catchall(z$1.array(Qr)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),$t=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(),Wt=ve.or($t),en=z$1.union([z$1.string().describe("data string"),ve]),tn=z$1.union([z$1.string().describe("data string"),Wt]),rn=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([V,tn])}),nn=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([V,tn])}),an=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([V,en])}),on=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([V,en])});var sn=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([Oe,V]),z$1.tuple([Oe,V,z$1.string().optional().describe("password")])])});var ro=z$1.discriminatedUnion("method",[sn,Zr,rn,nn,an,on]).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:Wt.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:ve.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 cn(t){return ro.safeParse(t)}a(cn,"parseRequestParams");var ln=a(t=>$t.safeParse(t).success,"isTypedDataV1"),xp=a(t=>ve.safeParse(t).success,"isTypedData");var pn=a(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}}},"isTypedDataValid");var mn=a(async({request:t,network:e,approvalController:r,blockaid:n})=>{let a=cn({method:t.method,params:t.params});if(!a.success)return console.error("invalid params",a.error),{success:!1,error:rpcErrors.invalidParams(M("Params are invalid",a.error))};let{method:s,data:o,address:c}=a.data,l;(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4)&&(l=pn(o));let p,m,u;if(l&&!l.isValid&&(u={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements. Please verify message content!",detailedDescription:l.error.toString()}}),s===RpcMethod.ETH_SIGN)p={type:s,account:c,data:o},m=o;else if(s===RpcMethod.PERSONAL_SIGN)p={type:s,account:c,data:o},m=toUtf8String(o);else if(s===RpcMethod.SIGN_TYPED_DATA||s===RpcMethod.SIGN_TYPED_DATA_V1)p={type:s,account:c,data:o},m=ln(o)?Jr(o):Ot(o);else if(s===RpcMethod.SIGN_TYPED_DATA_V3||s===RpcMethod.SIGN_TYPED_DATA_V4){p={type:s,account:c,data:o};let{types:E,primaryType:x,...P}=o;m=Ot(P);}if(!p||!m)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let f=await Or({request:t,accountAddress:c,chainId:e.chainId,data:{method:s,params:t.params},dAppUrl:t.dappInfo.url,blockaid:n}),y={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:c,details:[{title:"Message",items:[Ut("Message",m,"vertical")]}],alert:f?.alert??u,balanceChange:f?.balanceChange,tokenApprovals:f?.tokenApprovals},h=await r.requestApproval({request:t,displayData:y,signingData:p});return "error"in h?{error:h.error}:"signedData"in h?{result:h.signedData}:{error:rpcErrors.internal("No signed data returned")}},"ethSign");var dn=a(async(t,e)=>{try{return {result:await(await F({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)}}},"forwardToRpcNode");var fn=a(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}`)}},"getAddress");function Re(t,e){return t.then(r=>({id:e,status:"fulfilled",value:r})).catch(r=>({id:e,status:"rejected",reason:r}))}a(Re,"addIdToPromise");async function xe(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},{}))}a(xe,"settleAllIdPromises");var po={"ERC-20":TokenType.ERC20,"ERC-721":TokenType.ERC721,"ERC-1155":TokenType.ERC1155,"NON-ERC":TokenType.NONERC,SPL:TokenType.SPL},mo=z$1.string().transform((t,e)=>{let r=po[t];return r||(e.addIssue({code:z$1.ZodIssueCode.custom,message:`Unknown contractType: ${t}`}),z$1.NEVER)}),uo=z$1.array(z$1.object({address:z$1.string(),chainId:z$1.number(),contractType:mo,decimals:z$1.number(),internalId:z$1.string().optional(),isNative:z$1.boolean(),logoUri:z$1.string().optional().nullable(),name:z$1.string(),symbol:z$1.string(),caip2Id:z$1.string().optional(),color:z$1.string().optional()}));async function gt({chainId:t,proxyApiUrl:e}){return (await U([`${e}/tokens?evmChainId=${t}`],uo)).map(n=>({...n,type:n.contractType}))}a(gt,"getTokens");var w,Se,le,je,Ae,qt=class qt{constructor({network:e$1,storage:r,proxyApiUrl:n,customTokens:a,fetch:s}){d(this,w,void 0);d(this,Se,void 0);d(this,le,void 0);d(this,je,void 0);d(this,Ae,void 0);e(this,w,e$1),e(this,Se,r),e(this,le,n),e(this,je,a),e(this,Ae,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:r,currency:n}){let a=await F({chainId:e,chainName:c(this,w).chainName,rpcUrl:c(this,w).rpcUrl,multiContractAddress:c(this,w).utilityAddresses?.multicall,customRpcHeaders:c(this,w).customRpcHeaders}),s=c(this,w).pricingProviders?.coingecko.nativeTokenId,o=c(this,w).networkToken,c$1=new K({storage:c(this,Se),proxyApiUrl:c(this,le),fetch:c(this,Ae)}),l=s?await c$1.getSimplePrice({coinIds:[s],currencies:[n]}):{},p=l?.[s??""]?.[n]?.price??void 0,m=l?.[s??""]?.[n]?.marketCap??void 0,u=l?.[s??""]?.[n]?.vol24??void 0,f=l?.[s??""]?.[n]?.change24??void 0,y=await a.getBalance(r),h=new TokenUnit(y,o.decimals,o.symbol),E=p!==void 0?h.mul(p):void 0;return {...o,coingeckoId:s??"",type:TokenType.NATIVE,balance:y,balanceDisplayValue:h.toDisplay(),balanceInCurrency:E?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:E?.toDisplay({fixedDp:2}),priceInCurrency:p,marketCap:m,vol24:u,change24:f}}async listErc20Balances({chainId:e,address:r,currency:n}){let a$1=await F({chainId:e,chainName:c(this,w).chainName,rpcUrl:c(this,w).rpcUrl,multiContractAddress:c(this,w).utilityAddresses?.multicall,customRpcHeaders:c(this,w).customRpcHeaders}),s=c(this,w).pricingProviders?.coingecko.assetPlatformId,o=c(this,w).pricingProviders?.coingecko.nativeTokenId,c$1=await gt({chainId:Number(e),proxyApiUrl:c(this,le)}),l=c$1.map(P=>P.address),p=[...c$1,...c(this,je)].filter(pt),m=a(async P=>{let k=await new ethers.Contract(P.address,Br.abi,a$1).balanceOf?.(r)||0n;return {...P,balance:k}},"getTokenWithBalance"),u=p.map(P=>Re(m(P),P.address)),f=await xe(u),y=new K({storage:c(this,Se),proxyApiUrl:c(this,le),fetch:c(this,Ae)}),h=s&&await y.getPricesByAddresses(l,s,n)||{},E=Object.keys(f),x={};for(let P=0;P<E.length;P++){let T=E[P];if(T===void 0)continue;let I=f[T];if(I===void 0||"error"in I){x[T]={error:`rpcService:getTokenWithBalance failed: ${I?.error??"unknown error"}`};continue}let k=h?.[o??""]?.[n]?.price??void 0,v=h?.[o??""]?.[n]?.marketCap??void 0,L=h?.[o??""]?.[n]?.vol24??void 0,j=h?.[o??""]?.[n]?.change24??void 0,_e=new TokenUnit(I.balance,I.decimals,I.symbol),_=k!==void 0?_e.mul(k):void 0;x[I.address.toLowerCase()]={...I,type:TokenType.ERC20,balance:I.balance,balanceDisplayValue:_e.toDisplay(),balanceInCurrency:_?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:_?.toDisplay({fixedDp:2}),priceInCurrency:k,marketCap:v,change24:j,vol24:L,reputation:null};}return x}async listNftBalances(){return {}}};w=new WeakMap,Se=new WeakMap,le=new WeakMap,je=new WeakMap,Ae=new WeakMap,a(qt,"RpcService");var Tt=qt;async function gn(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}a(gn,"findAsync");var Tn=a(async({addresses:t,currency:e,network:r,proxyApiUrl:n,tokenTypes:a=[TokenType.NATIVE,TokenType.ERC20,TokenType.ERC721,TokenType.ERC1155],customTokens:s=[],storage:o,balanceServices:c=[],tokenService:l,fetch:p})=>{let m=r.chainId,u=[...c,new Tt({network:r,storage:o,proxyApiUrl:n,customTokens:s,fetch:p})],f=await gn(u,h=>h.isNetworkSupported(r.chainId)),y={};if(f){let h=[],E=[],x=[];t.forEach(k=>{a.includes(TokenType.NATIVE)&&h.push(Re(f.getNativeBalance({address:k,currency:e.toUpperCase(),chainId:m}).then(async v=>{if(v.symbol==="AVAX"){let L=await l.getWatchlistDataForToken({tokenDetails:{symbol:r.networkToken.symbol,isNative:!0,caip2Id:r.caipId??""},currency:e.toUpperCase()});return {...v,priceInCurrency:L.priceInCurrency,marketCap:L.marketCap,vol24:L.vol24,change24:L.change24}}return v}),k)),a.includes(TokenType.ERC20)&&E.push(Re(f.listErc20Balances({customTokens:s.filter(pt),currency:e.toUpperCase(),chainId:m,address:k,pageSize:100}),k)),(a.includes(TokenType.ERC721)||a.includes(TokenType.ERC1155))&&x.push(Re(f.listNftBalances({chainId:m,address:k}),k));});let P=await xe(h),T=await xe(E),I=await xe(x);Object.keys(P).forEach(k=>{let v=P[k];if(!v||"error"in v){y[k]={error:`getNativeBalance failed: ${v?.error??"unknown error"}`};return}let L=v.symbol;y[k]={[L]:v};}),Object.keys(T).forEach(k=>{let v=T[k];!v||"error"in v&&typeof v.error!="string"?y[k]={...y[k],error:"listErc20Balances failed: unknown error"}:"error"in v&&typeof v.error=="string"?y[k]={...y[k],error:`listErc20Balances failed: ${v.error}`}:y[k]={...y[k],...v};}),Object.keys(I).forEach(k=>{let v=I[k];!v||"error"in v&&typeof v.error!="string"?y[k]={...y[k],error:"listNftBalances failed: unknown error"}:"error"in v&&typeof v.error=="string"?y[k]={...y[k],error:`listNftBalances failed: ${v.error}`}:y[k]={...y[k],...v};});}else t.forEach(h=>{y[h]={error:"unsupported network"};});return y},"getBalances");var zt={LOW:1n,MEDIUM:4n,HIGH:6n},Kt=500000000n,ho=a(t=>t===ChainId.AVALANCHE_TESTNET_ID||t===ChainId.AVALANCHE_MAINNET_ID,"isCChain"),vn=137,En=80002,go=a(t=>t===vn||t===En,"isPolygon"),To={[vn]:"https://gasstation.polygon.technology/v2",[En]:"https://gasstation.polygon.technology/amoy"};function pe(t){return BigInt(Math.round(t*1e9))}a(pe,"gweiToWei");async function ko(t){let e=To[t];if(!e)throw new Error(`No gas station URL for Polygon chain ${t}`);let r=await fetch(e);if(!r.ok)throw new Error(`Polygon Gas Station returned ${r.status}`);let n=await r.json();return {baseFee:pe(n.estimatedBaseFee),low:{maxFeePerGas:pe(n.safeLow.maxFee),maxPriorityFeePerGas:pe(n.safeLow.maxPriorityFee)},medium:{maxFeePerGas:pe(n.standard.maxFee),maxPriorityFeePerGas:pe(n.standard.maxPriorityFee)},high:{maxFeePerGas:pe(n.fast.maxFee),maxPriorityFeePerGas:pe(n.fast.maxPriorityFee)},isFixedFee:!1,displayDecimals:9}}a(ko,"getPolygonGasStationFees");async function Pn({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,caipId:a,proxyApiUrl:s,customRpcHeaders:o}){let c=await F({chainId:t,chainName:e,rpcUrl:r,multiContractAddress:n,customRpcHeaders:o});if(!s)throw rpcErrors.internal("Proxy API URL is needed");if(ho(t))try{let T=await bo(c);return {...T,baseFee:T.medium.maxFeePerGas,displayDecimals:9,isFixedFee:!1}}catch{console.error("eth_suggestPriceOptions call failed, falling back to legacy fee fetching");}if(go(t))try{return await ko(t)}catch{console.error("Polygon Gas Station call failed, falling back to generic fee fetching");}let l=await c.getBlock("latest",!1);if(!l)throw rpcErrors.internal("There is no block");let p=l.baseFeePerGas;if(!p)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let m=await vo(s,a),u=new TokenUnit(m,0,""),f=new TokenUnit(p,0,""),y=BigInt("1000000000"),h=f.mul(u).add(y).toSubUnit(),E=Kt*zt.LOW,x=Kt*zt.MEDIUM,P=Kt*zt.HIGH;return {baseFee:h,low:{maxFeePerGas:h+E,maxPriorityFeePerGas:E},medium:{maxFeePerGas:h+x,maxPriorityFeePerGas:x},high:{maxFeePerGas:h+P,maxPriorityFeePerGas:P},isFixedFee:!1,displayDecimals:9}}a(Pn,"getNetworkFee");async function bo(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)}}}a(bo,"suggestPriceOptions");async function vo(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}}a(vo,"getGasMultiplier");function xn(t){return t===TokenType.ERC721||t===TokenType.ERC1155}a(xn,"isNftTokenType");function Jt(t){let{txType:e,isSender:r,walletAddress:n,tokens:a}=t;if(a.length===0)return e;let s=n.toLowerCase(),o=a.some(m=>xn(m.type)&&m.to?.address?.toLowerCase()===s),c=a.some(m=>xn(m.type)&&m.from?.address?.toLowerCase()===s),l=e===TransactionType.RECEIVE||e===TransactionType.UNKNOWN||e===TransactionType.TRANSFER||e===TransactionType.AIRDROP,p=e===TransactionType.SEND||e===TransactionType.UNKNOWN||e===TransactionType.TRANSFER||e===TransactionType.AIRDROP;return !r&&o&&l?TransactionType.NFT_RECEIVE:r&&c&&p?TransactionType.NFT_SEND:e}a(Jt,"convertTransactionType");var Sn=a(({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a,s)=>{let o=!e&&!r&&!n,c=Po(t.method?.methodName),l=a.toLowerCase(),p=c.toLowerCase().includes("swap"),m=o&&t.from.address.toLowerCase()===l,u=o&&t.to.address.toLowerCase()===l,f=c==="Market Buy Orders With Eth"||c==="Buy NFT",y=c==="Approve",h=c.toLowerCase().includes("transfer"),E=c.toLowerCase().includes("airdrop"),x=c.toLowerCase().includes("unwrap"),P=c==="Fill Order",T;p?T=TransactionType.SWAP:m?T=TransactionType.SEND:u?T=TransactionType.RECEIVE:f?T=TransactionType.NFT_BUY:y?T=TransactionType.APPROVE:h?T=TransactionType.TRANSFER:E?T=TransactionType.AIRDROP:x?T=TransactionType.UNWRAP:P?T=TransactionType.FILL_ORDER:T=TransactionType.UNKNOWN;let I=t.from.address.toLowerCase()===l;return Jt({txType:T,isSender:I,walletAddress:a,tokens:s})},"getTxType"),Po=a((t="")=>t.includes("(")?Eo(t.split("(",1)[0]):t,"parseRawMethod");function An({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(),c=So(t.category),l=!Ro.has(t.category),p=Co(t,e,a),m=ke(r,t.hash);return c=Jt({txType:c,isSender:s,walletAddress:a,tokens:p}),{isContractCall:l,isIncoming:!s,isOutgoing:s,isSender:s,timestamp:o,hash:t.hash,from:t.from_address,to:t.to_address??"",tokens:p,gasPrice:t.gas_price,gasUsed:t.receipt_gas_used,chainId:n.toString(),txType:c,method:t.method_label??void 0,explorerLink:m}}a(An,"convertMoralisTransaction");var Ro=new Set(["send","receive","token send","token receive"]),xo={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 So(t){return xo[t]??TransactionType.UNKNOWN}a(So,"getMoralisTransactionType");function Q(t){if(!(t==null||t===""))return {address:t}}a(Q,"getTransferAddress");function kt(t){return t?.trim()??""}a(kt,"trimOrEmpty");function Ao(t){let e=t.trim().toLowerCase();return !e.startsWith("0x")||e.length<12?t.trim():`${e.slice(0,6)}\u2026${e.slice(-4)}`}a(Ao,"shortenHexAddress");function Io(t){let e=kt(t.token_symbol);if(e!=="")return e;let r=kt(t.token_name);return r!==""?r:Ao(t.address)}a(Io,"getErc20DisplaySymbol");function Co(t,e,r){let n=[],a=t.native_transfers.map(o=>No(o,e)),s=t.erc20_transfers.map(o=>wo(o));n.push(...a,...s);for(let o of t.nft_transfers)n.push(_o(o));return n.length===0&&n.push(Do(t,e,r)),n}a(Co,"buildTokens");function No(t,e){let r=kt(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:Q(t.from_address),to:Q(t.to_address),type:TokenType.NATIVE}}a(No,"buildNativeToken");function wo(t){let e=Number(t.token_decimals),r=Io(t),n=new TokenUnit(t.value,e,r),a=kt(t.token_name)||r;return {decimal:t.token_decimals,name:a,symbol:r,amount:n.toDisplay(),from:Q(t.from_address),to:Q(t.to_address),type:TokenType.ERC20,address:t.address}}a(wo,"buildErc20Token");function _o(t){let e=t.contract_type==="ERC1155"?TokenType.ERC1155:TokenType.ERC721;return {name:"",symbol:"",amount:t.amount,collectableTokenId:t.token_id,from:Q(t.from_address),to:Q(t.to_address),type:e,address:t.token_address}}a(_o,"buildNftToken");function Do(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:Q(t.from_address),to:Q(t.to_address),type:TokenType.NATIVE}}a(Do,"buildFallbackNativeToken");var Bo="https://proxy-api.avax.network/proxy/moralis-evm";async function In({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s}){try{let o=`0x${t.toString(16)}`,c=new URLSearchParams({chain:o,limit:(s??25).toString()});a&&c.set("cursor",a);let l=`${Bo}/wallets/${n}/history?${c.toString()}`,p=await fetch(l);if(!p.ok)return {transactions:[],nextPageToken:""};let m=await p.json();return Array.isArray(m.result)?{transactions:m.result.filter(f=>f.receipt_status==="1").map(f=>An({tx:f,networkToken:e,explorerUrl:r,chainId:t,address:n})),nextPageToken:m.cursor??""}:{transactions:[],nextPageToken:""}}catch{return {transactions:[],nextPageToken:""}}}a(In,"getTransactionsFromMoralis");var Uo=new Set([1,4,5,11155111,8453,42161,10]);function Cn(t){return Uo.has(t)}a(Cn,"isMoralisSupportedChain");var Nn=a((t,{nativeTransaction:e,erc20Transfers:r,erc721Transfers:n},a)=>{let s=t===TransactionType.TRANSFER,o=t===TransactionType.SEND||t===TransactionType.NFT_SEND,c=t===TransactionType.RECEIVE||t===TransactionType.NFT_RECEIVE,l=e?.from?.address,p=e?.to?.address;s&&r&&r[0]&&(l=r[0].from.address,p=r[0].to.address),s&&n&&n[0]&&(l=n[0].from.address,p=n[0].to.address);let m=o||s&&l.toLowerCase()===a.toLowerCase(),u=c||s&&p.toLowerCase()===a.toLowerCase();return {isOutgoing:m,isIncoming:u,isSender:l===a,from:l,to:p}},"getSenderInfo");async function wn(t){try{return t.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}a(wn,"resolve");var Go="https://ipfs.io";function Ie(t,e=Go){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}a(Ie,"ipfsResolverWithFallback");async function Mo(t,e=5e3){let r=new AbortController;return setTimeout(()=>r.abort(),e),fetch(t,{signal:r.signal})}a(Mo,"fetchWithTimeout");async function _n(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(Ie(t)).then(r=>r.json()).catch(()=>({}));else return {};return e}a(_n,"getNftMetadata");var Lo="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Dn(t,e="256"){let r=Ie(t);return `${Lo}/width=${e},fit/${r}`}a(Dn,"getSmallImageForNFT");var Fn=a(async({nativeTransaction:t,erc20Transfers:e,erc721Transfers:r,erc1155Transfers:n},a)=>{let s=[];if(t.value!=="0"){let o=a.decimals,l=new TokenUnit(t.value,a.decimals,a.symbol).toDisplay();s.push({decimal:o.toString(),name:a.name,symbol:a.symbol,amount:l,from:t.from,to:t.to,type:TokenType.NATIVE});}return e?.forEach(o=>{let c=o.erc20Token.decimals,p=new TokenUnit(o.value,c,o.erc20Token.symbol).toDisplay();s.push({decimal:c.toString(),address:o.erc20Token.address,name:o.erc20Token.name,symbol:o.erc20Token.symbol,amount:p,from:o.from,to:o.to,imageUri:o.erc20Token.logoUri,type:TokenType.ERC20});}),r&&await Promise.allSettled(r.map(async o=>{let c=o.erc721Token,l=await Un(c.tokenUri,c.metadata.imageUri);s.push({name:o.erc721Token.name,symbol:o.erc721Token.symbol,address:o.erc721Token.address,amount:"1",imageUri:l,from:o.from,to:o.to,collectableTokenId:o.erc721Token.tokenId,type:TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async o=>{let c=o.erc1155Token,l=await Un(c.tokenUri,c.metadata.imageUri);s.push({name:o.erc1155Token.metadata.name??"",symbol:o.erc1155Token.metadata.symbol??"",address:o.erc1155Token.address,amount:o.value,imageUri:l,from:o.from,to:o.to,collectableTokenId:o.erc1155Token.tokenId,type:TokenType.ERC1155});})),s},"getTokens"),Un=a(async(t,e)=>{if(e)return e.startsWith("ipfs://")?Ie(e):e;{let[r,n]=await wn(_n(t));return n?"":r.image?Dn(r.image):""}},"getImageUri");var Gn=a(async({transactions:t,explorerUrl:e,networkToken:r,chainId:n,address:a})=>{let s=await Fn(t,r),o=Sn(t,a,s),{isOutgoing:c,isIncoming:l,isSender:p,from:m,to:u}=Nn(o,t,a),{blockTimestamp:f,txHash:y,gasPrice:h,gasUsed:E}=t.nativeTransaction,x=ke(e,y);return {isContractCall:!xr.includes(o),isIncoming:l,isOutgoing:c,isSender:p,timestamp:f*1e3,hash:y,from:m,to:u,tokens:s,gasPrice:h,gasUsed:E,chainId:n.toString(),txType:o,explorerLink:x}},"convertTransaction");var Mn=a(async({chainId:t,explorerUrl:e,networkToken:r,address:n,nextPageToken:a,offset:s,glacierService:o})=>{try{let c=await o.listTransactions({chainId:t.toString(),address:n,pageToken:a,pageSize:s});return {transactions:(await Promise.all(c.transactions.filter(m=>m.nativeTransaction.txStatus==="1").map(m=>Gn({transactions:m,explorerUrl:e,networkToken:r,chainId:t,address:n}).then(u=>u)))).filter(m=>m.tokens.find(u=>Number(u.amount)!==0)),nextPageToken:c.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}},"getTransactionsFromGlacier");var Ln=a(async({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s,glacierService:o})=>Cn(t)?In({chainId:t,networkToken:e,explorerUrl:r,address:n,nextPageToken:a,offset:s}):o.isHealthy()?Mn({networkToken:e,explorerUrl:r,chainId:t,address:n,nextPageToken:a,offset:s,glacierService:o}):{transactions:[],nextPageToken:""},"getTransactionHistory");var Oo="https://ipfs.io";function Vn(t,e=Oo){if(!t)return "";try{return ipfsResolver(t,e)}catch{return t}}a(Vn,"ipfsResolverWithFallback");var Ho="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function vt(t,e="256"){let r=Vn(t);return `${Ho}/width=${e},fit/${r}`}a(vt,"getSmallImageForNFT");var Ce,$,Zt=class Zt{constructor(e$1,r){this.baseUrl=e$1;d(this,Ce,[]);d(this,$,void 0);e(this,$,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 c(this,$).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 c(this,$).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(c(this,$)??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(c(this,Ce).length===0){let e$1=await c(this,$).call(this,`${this.baseUrl}/v1/chain/list`);if(e$1.ok)e(this,Ce,await e$1.json());else throw new Error(`${e$1.status}:${e$1.statusText}`)}return c(this,Ce)}async getNftList({address:e,chainId:r}){return U([`${this.baseUrl}/v1/user/nft_list?id=${e}&chain_id=${r}`],qo,c(this,$))}};Ce=new WeakMap,$=new WeakMap,a(Zt,"DeBank");var Et=Zt,Wo=z$1.object({id:z$1.union([z$1.custom(isHexString),z$1.string()]),chain:z$1.string(),name:z$1.string()}),jo=Wo.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()})),qo=z$1.array(jo);var O,Ne,Rt,St,Hn,er=class er{constructor({proxyApiUrl:e$1,fetch:r}){d(this,Ne);d(this,St);d(this,O,void 0);e(this,O,new Et(`${e$1}/proxy/debank`,r));}async isNetworkSupported(e){return c(this,O).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:a,chainIdString:s}=await f(this,Ne,Rt).call(this,e),o=a.native_token_id,c$1=await c(this,O).getTokenBalance({address:r,chainId:s,tokenId:o}),l=new TokenUnit(c$1.raw_amount,c$1.decimals,c$1.symbol),p=l.toDisplay(),u=(await Ze()).usd[n.toLowerCase()],f$1=u?u*c$1.price:void 0,y=f$1?l.mul(f$1).toDisplay({fixedDp:2}):void 0,h=f$1?l.mul(f$1).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c$1.name,symbol:c$1.symbol,decimals:c$1.decimals,type:TokenType.NATIVE,logoUri:c$1.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:h,balanceCurrencyDisplayValue:y,priceInCurrency:f$1}}async listErc20Balances({chainId:e,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:a,chainIdString:s}=await f(this,Ne,Rt).call(this,e),o=await c(this,O).getTokensBalanceOnChain({chainId:s,address:r}),c$1=await Ze(),l={};for(let p of o){if(p.id===a.native_token_id||p.is_core===!1)continue;let m=new TokenUnit(p.raw_amount,p.decimals,p.symbol),u=m.toDisplay(),f=c$1.usd[n.toLowerCase()],y=f?f*p.price:void 0,h=y?m.mul(y).toDisplay({fixedDp:2}):void 0,E=y?m.mul(y).toDisplay({fixedDp:2,asNumber:!0}):void 0;l[p.id]={chainId:a.community_id,address:p.id,name:p.name,symbol:p.symbol,decimals:p.decimals,logoUri:p.logo_url,balance:m.toSubUnit(),balanceCurrencyDisplayValue:h,balanceDisplayValue:u,balanceInCurrency:E,priceInCurrency:y,type:TokenType.ERC20,reputation:null};}return l}async listNftBalances({chainId:e,address:r}){if(!isHexString(r))throw rpcErrors.invalidParams("listNftBalances: not valid address");let{chainIdString:n}=await f(this,Ne,Rt).call(this,e),a=await c(this,O).getNftList({chainId:n,address:r});return f(this,St,Hn).call(this,a,e)}};O=new WeakMap,Ne=new WeakSet,Rt=a(async function(e){let n=(await c(this,O).getChainList()).find(s=>s.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await c(this,O).getChainInfo({chainId:n});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:a,chainIdString:n}},"#getChainInfo"),St=new WeakSet,Hn=a(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:vt(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:""}}}),{})},"#mapNftList"),a(er,"DeBankService");var xt=er;var rr=class rr extends Error{constructor(){super(...arguments);b(this,"message","Glacier is unhealthy. Try again later.");}};a(rr,"GlacierUnhealthyError");var W=rr,Xo=[ChainId.ETHEREUM_HOMESTEAD],nr=class nr{constructor({glacierApiUrl:e,headers:r}){b(this,"glacierSdk");b(this,"isGlacierHealthy",!0);b(this,"supportedChainIds",[]);b(this,"isHealthy",a(()=>this.isGlacierHealthy,"isHealthy"));this.glacierSdk=new Glacier({BASE:e,HEADERS:r},Ue),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=>!Xo.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 W&&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 W&&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,c=new TokenUnit(o.balance,o.decimals,o.symbol),l=o.price?.value,p=l!==void 0?c.mul(l):void 0;return {name:o.name,symbol:o.symbol,decimals:o.decimals,type:TokenType.NATIVE,logoUri:o.logoUri,balance:c.toSubUnit(),balanceDisplayValue:c.toDisplay(),balanceInCurrency:p?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:p?.toDisplay({fixedDp:2}),priceInCurrency:l,coingeckoId:a??""}}catch(s){throw s instanceof W&&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 W&&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 W&&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:vt(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 c=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:r,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:o});s.push(...Qo(c.erc20TokenBalances,Number(e))),o=c.nextPageToken;}while(o);return [...Zo(a),...s].reduce((c,l)=>({...c,[l.address.toLowerCase()]:l}),{})}catch(s){throw s instanceof W&&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 W&&this.setGlacierToUnhealthy(),s}}};a(nr,"EvmGlacierService");var At=nr,Zo=a(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})),"convertErc20TokenToTokenWithBalance"),Qo=a((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,c=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:c,priceInCurrency:o,reputation:r.tokenReputation,type:TokenType.ERC20}}),"convertErc20TokenWithBalanceToTokenWithBalance");var we,Je,te,H,me,de,ar=class ar{constructor({approvalController:e$1,environment:r,appInfo:n,runtime:a}){d(this,we,void 0);d(this,Je,void 0);d(this,te,void 0);d(this,H,void 0);d(this,me,void 0);d(this,de,void 0);let{glacierApiUrl:s,proxyApiUrl:o}=hr(r);e(this,de,a),e(this,we,new At({glacierApiUrl:s,headers:Ft(n)})),e(this,Je,new xt({proxyApiUrl:o,fetch:c(this,de)?.fetch})),e(this,te,o),e(this,H,e$1),e(this,me,new ts({baseURL:o+"/proxy/blockaid/",apiKey:fr,httpAgent:a?.httpAgent,fetch:a?.fetch}));}getProvider(e){return F({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 fn({accountIndex:e,xpub:r,walletType:n})}buildDerivationPath(e){return ge(e)}deriveAddress(e){return br({...e,approvalController:c(this,H)})}deriveAddresses(e){return vr({...e,approvalController:c(this,H)})}getBalances({addresses:e,network:r,currency:n,customTokens:a,storage:s,tokenTypes:o}){let c$1=new K({storage:s,proxyApiUrl:c(this,te),fetch:c(this,de)?.fetch});return Tn({addresses:e,currency:n,network:r,proxyApiUrl:c(this,te),customTokens:a,balanceServices:[c(this,we),c(this,Je)],storage:s,tokenTypes:o,tokenService:c$1,fetch:c(this,de)?.fetch})}getManifest(){let e=parseManifest(ur);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:a,utilityAddresses:s,caipId:o,customRpcHeaders:c$1}=e;return Pn({chainId:r,chainName:n,rpcUrl:a,multiContractAddress:s?.multicall,caipId:o,proxyApiUrl:c(this,te),customRpcHeaders:c$1})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:a,offset:s}=e,{chainId:o,networkToken:c$1,explorerUrl:l=""}=r;return Ln({chainId:o,networkToken:c$1,explorerUrl:l,address:n,nextPageToken:a,offset:s,glacierService:c(this,we)})}getTokens(e){let{chainId:r}=e;return gt({chainId:r,proxyApiUrl:c(this,te)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return Kr({request:e,network:r,approvalController:c(this,H),blockaid:c(this,me)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return Ir(c(this,H))?Wr({request:e,network:r,approvalController:c(this,H),blockaid:c(this,me)}):{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 mn({request:e,network:r,approvalController:c(this,H),blockaid:c(this,me)});default:return rs(e.method)?dn(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};we=new WeakMap,Je=new WeakMap,te=new WeakMap,H=new WeakMap,me=new WeakMap,de=new WeakMap,a(ar,"EvmModule");var qn=ar,rs=a(t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t),"shouldForwardToRpcNode");
|
|
34
35
|
|
|
35
|
-
export { se as ERC20TransactionType,
|
|
36
|
+
export { se as ERC20TransactionType, qn as EvmModule, xr as NonContractCallTypes, Re as addIdToPromise, xp as isTypedData, ln as isTypedDataV1, xe as settleAllIdPromises };
|
|
36
37
|
//# sourceMappingURL=out.js.map
|
|
37
38
|
//# sourceMappingURL=index.js.map
|