@avalabs/evm-module 1.9.11 → 1.9.13

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