@avalabs/evm-module 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +28 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -2
- package/dist/index.d.ts +35 -2
- package/dist/index.js +22 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _metamask_rpc_errors from '@metamask/rpc-errors';
|
|
2
2
|
import * as _avalabs_vm_module_types_dist_token from '@avalabs/vm-module-types/dist/token';
|
|
3
3
|
import * as _avalabs_vm_module_types_dist_transaction_history from '@avalabs/vm-module-types/dist/transaction-history';
|
|
4
|
-
import { Module, ApprovalController, Environment, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, Network, NetworkFees, GetTransactionHistory, RpcRequest, TransactionType, TypedDataV1, TypedData, MessageTypes } from '@avalabs/vm-module-types';
|
|
4
|
+
import { Module, ApprovalController, Environment, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, Network, NetworkFees, GetTransactionHistory, RpcRequest, TransactionType, TypedDataV1, TypedData, MessageTypes, Error } from '@avalabs/vm-module-types';
|
|
5
5
|
|
|
6
6
|
declare class EvmModule implements Module {
|
|
7
7
|
#private;
|
|
@@ -49,4 +49,37 @@ declare enum ERC20TransactionType {
|
|
|
49
49
|
declare const isTypedDataV1: (data: unknown) => data is TypedDataV1;
|
|
50
50
|
declare const isTypedData: (data: unknown) => data is TypedData<MessageTypes>;
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
type Id = string;
|
|
53
|
+
type IdPromise<T> = {
|
|
54
|
+
id: string;
|
|
55
|
+
status: 'fulfilled';
|
|
56
|
+
value: T;
|
|
57
|
+
} | {
|
|
58
|
+
id: string;
|
|
59
|
+
status: 'rejected';
|
|
60
|
+
reason: any;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* The addIdToPromise function takes an existing promise and an id string as input and returns a new promise that
|
|
64
|
+
* resolves to an object containing the id, the status of the original promise (either 'fulfilled' or 'rejected'),
|
|
65
|
+
* and the result or error of the original promise.
|
|
66
|
+
*
|
|
67
|
+
* Usage:
|
|
68
|
+
* This function is useful for tracking the status and outcome of multiple promises when used with Promise.allSettled
|
|
69
|
+
*
|
|
70
|
+
* @param promise The original promise that resolves to a value of type T.
|
|
71
|
+
* @param id A unique identifier associated with the promise.
|
|
72
|
+
*/
|
|
73
|
+
declare function addIdToPromise<T>(promise: Promise<T>, id: string): Promise<IdPromise<T>>;
|
|
74
|
+
/**
|
|
75
|
+
* The settleAllIdPromises function processes an array of promises that return IdPromise objects,
|
|
76
|
+
* resolving all of them and organizing the results into a record.
|
|
77
|
+
*
|
|
78
|
+
* Usage:
|
|
79
|
+
* Use {@link addIdToPromise} to get array of promises
|
|
80
|
+
*
|
|
81
|
+
* @param promises An array of promises that each resolve to an IdPromise<T> object.
|
|
82
|
+
*/
|
|
83
|
+
declare function settleAllIdPromises<T>(promises: Promise<IdPromise<T>>[]): Promise<Record<Id, T | Error>>;
|
|
84
|
+
|
|
85
|
+
export { ERC20TransactionType, EvmModule, IdPromise, NonContractCallTypes, TransactionParams, addIdToPromise, isTypedData, isTypedDataV1, settleAllIdPromises };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _metamask_rpc_errors from '@metamask/rpc-errors';
|
|
2
2
|
import * as _avalabs_vm_module_types_dist_token from '@avalabs/vm-module-types/dist/token';
|
|
3
3
|
import * as _avalabs_vm_module_types_dist_transaction_history from '@avalabs/vm-module-types/dist/transaction-history';
|
|
4
|
-
import { Module, ApprovalController, Environment, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, Network, NetworkFees, GetTransactionHistory, RpcRequest, TransactionType, TypedDataV1, TypedData, MessageTypes } from '@avalabs/vm-module-types';
|
|
4
|
+
import { Module, ApprovalController, Environment, GetAddressParams, GetAddressResponse, GetBalancesParams, GetBalancesResponse, Manifest, Network, NetworkFees, GetTransactionHistory, RpcRequest, TransactionType, TypedDataV1, TypedData, MessageTypes, Error } from '@avalabs/vm-module-types';
|
|
5
5
|
|
|
6
6
|
declare class EvmModule implements Module {
|
|
7
7
|
#private;
|
|
@@ -49,4 +49,37 @@ declare enum ERC20TransactionType {
|
|
|
49
49
|
declare const isTypedDataV1: (data: unknown) => data is TypedDataV1;
|
|
50
50
|
declare const isTypedData: (data: unknown) => data is TypedData<MessageTypes>;
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
type Id = string;
|
|
53
|
+
type IdPromise<T> = {
|
|
54
|
+
id: string;
|
|
55
|
+
status: 'fulfilled';
|
|
56
|
+
value: T;
|
|
57
|
+
} | {
|
|
58
|
+
id: string;
|
|
59
|
+
status: 'rejected';
|
|
60
|
+
reason: any;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* The addIdToPromise function takes an existing promise and an id string as input and returns a new promise that
|
|
64
|
+
* resolves to an object containing the id, the status of the original promise (either 'fulfilled' or 'rejected'),
|
|
65
|
+
* and the result or error of the original promise.
|
|
66
|
+
*
|
|
67
|
+
* Usage:
|
|
68
|
+
* This function is useful for tracking the status and outcome of multiple promises when used with Promise.allSettled
|
|
69
|
+
*
|
|
70
|
+
* @param promise The original promise that resolves to a value of type T.
|
|
71
|
+
* @param id A unique identifier associated with the promise.
|
|
72
|
+
*/
|
|
73
|
+
declare function addIdToPromise<T>(promise: Promise<T>, id: string): Promise<IdPromise<T>>;
|
|
74
|
+
/**
|
|
75
|
+
* The settleAllIdPromises function processes an array of promises that return IdPromise objects,
|
|
76
|
+
* resolving all of them and organizing the results into a record.
|
|
77
|
+
*
|
|
78
|
+
* Usage:
|
|
79
|
+
* Use {@link addIdToPromise} to get array of promises
|
|
80
|
+
*
|
|
81
|
+
* @param promises An array of promises that each resolve to an IdPromise<T> object.
|
|
82
|
+
*/
|
|
83
|
+
declare function settleAllIdPromises<T>(promises: Promise<IdPromise<T>>[]): Promise<Record<Id, T | Error>>;
|
|
84
|
+
|
|
85
|
+
export { ERC20TransactionType, EvmModule, IdPromise, NonContractCallTypes, TransactionParams, addIdToPromise, isTypedData, isTypedDataV1, settleAllIdPromises };
|
package/dist/index.js
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import { rpcErrors } from '@metamask/rpc-errors';
|
|
2
1
|
import { TransactionType, AlertType, RpcMethod, parseManifest, TokenType, Environment, WalletType, NetworkVMType, RawSimplePriceResponseSchema, SimplePriceResponseSchema } from '@avalabs/vm-module-types';
|
|
2
|
+
import { rpcErrors } from '@metamask/rpc-errors';
|
|
3
3
|
import { getEvmAddressFromPubKey, getAddressFromXPub, JsonRpcBatchInternal } from '@avalabs/core-wallets-sdk';
|
|
4
|
-
import { toUtf8String,
|
|
4
|
+
import { toUtf8String, isHexString, Network, Interface, TypedDataEncoder, ethers } from 'ethers';
|
|
5
5
|
import { TokenUnit, numberToBN, balanceToDisplayValue, ipfsResolver } from '@avalabs/core-utils-sdk';
|
|
6
6
|
import { getNormalTxs, getErc20Txs } from '@avalabs/core-etherscan-sdk';
|
|
7
|
-
import
|
|
8
|
-
import { z
|
|
9
|
-
import
|
|
7
|
+
import kr from 'lodash.startcase';
|
|
8
|
+
import { z, object, string, record, number, boolean } from 'zod';
|
|
9
|
+
import pt from '@blockaid/client';
|
|
10
|
+
import { Glacier } from '@avalabs/glacier-sdk';
|
|
10
11
|
import { getBasicCoingeckoHttp, VsCurrencyType, simpleTokenPrice, simplePrice } from '@avalabs/core-coingecko-sdk';
|
|
11
12
|
import { Zodios } from '@zodios/core';
|
|
12
|
-
import { Glacier } from '@avalabs/glacier-sdk';
|
|
13
13
|
|
|
14
|
-
var qt=Object.defineProperty;var zt=(n,e,t)=>e in n?qt(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var N=(n,e,t)=>(zt(n,typeof e!="symbol"?e+"":e,t),t),Ce=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var g=(n,e,t)=>(Ce(n,e,"read from private field"),t?t.call(n):e.get(n)),R=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t);},P=(n,e,t,a)=>(Ce(n,e,"write to private field"),a?a.call(n,t):e.set(n,t),t);async function te({chainId:n,proxyApiUrl:e}){let t=await fetch(`${e}/tokens?evmChainId=${n}`);if(!t.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${n}`);return t.json()}var Zt=process.env.GLACIER_API_KEY,A=n=>{let{chainId:e,chainName:t,rpcUrl:a,multiContractAddress:s,pollingInterval:r=2e3}=n,o=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},tn(a,Zt),new Network(t,e));return o.pollingInterval=r,o},en=["glacier-api.avax.network","proxy-api.avax.network"];function tn(n,e){let t=new URL(n);if(e&&en.includes(t.hostname)){let a=t.searchParams;return a.set("token",e),t.search=a.toString(),t.toString()}return n}var de={LOW:1n,MEDIUM:4n,HIGH:6n},ue=500000000n;async function Ie({chainId:n,chainName:e,rpcUrl:t,multiContractAddress:a}){let s=A({chainId:n,chainName:e,rpcUrl:t,multiContractAddress:a}),{maxFeePerGas:r}=await s.getFeeData();if(!r)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let o=ue*de.LOW,i=ue*de.MEDIUM,c=ue*de.HIGH;return {baseFee:r,low:{maxFeePerGas:r+o,maxPriorityFeePerGas:o},medium:{maxFeePerGas:r+i,maxPriorityFeePerGas:i},high:{maxFeePerGas:r+c,maxPriorityFeePerGas:c},isFixedFee:!1}}function V(n,e,t="tx"){return `${n}/${t}/${e}`}var Ae=({tx:n,networkToken:e,chainId:t,explorerUrl:a,address:s})=>{let r=n.from.toLowerCase()===s.toLowerCase(),o=parseInt(n.timeStamp)*1e3,i=e.decimals,l=new TokenUnit(n.value,e.decimals,e.symbol).toDisplay(),d=r?TransactionType.SEND:TransactionType.RECEIVE,{from:b,to:m,gasPrice:p,gasUsed:f,hash:u}=n,h=V(a,u);return {isIncoming:!r,isOutgoing:r,isContractCall:on(n),timestamp:o,hash:u,isSender:r,from:b,to:m,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:TokenType.NATIVE}],gasUsed:f,gasPrice:p,chainId:t.toString(),txType:d,explorerLink:h}};function on(n){return n.input!=="0x"}function De({tx:n,address:e,explorerUrl:t,chainId:a}){let s=n.from.toLowerCase()===e.toLowerCase(),r=parseInt(n.timeStamp)*1e3,i=new TokenUnit(n.value,Number(n.tokenDecimal),n.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:d,gasUsed:b,hash:m,tokenDecimal:p,tokenName:f,tokenSymbol:u}=n,h=s?TransactionType.SEND:TransactionType.RECEIVE,T=V(t,m);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:r,hash:m,isSender:s,from:c,to:l,tokens:[{decimal:p,name:f,symbol:u,type:TokenType.ERC20,amount:i}],gasUsed:b,gasPrice:d,chainId:a.toString(),txType:h,explorerLink:T}}var Be=async({isTestnet:n,networkToken:e,explorerUrl:t,chainId:a,address:s,nextPageToken:r,offset:o})=>{let i=r?JSON.parse(r):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],d=(l.includes("normal")?await getNormalTxs(s,!n,{page:c,offset:o}):[]).map(u=>Ae({tx:u,chainId:a,networkToken:e,explorerUrl:t,address:s})),b=(l.includes("erc20")?await getErc20Txs(s,!n,void 0,{page:c,offset:o}):[]).map(u=>De({tx:u,address:s,explorerUrl:t,chainId:a})),m=b.map(u=>u.hash),p=d.filter(u=>!m.includes(u.hash)),f={queries:[],page:c+1};return d.length&&f.queries.push("normal"),b.length&&f.queries.push("erc20"),{transactions:[...p,...b],nextPageToken:f.queries.length?JSON.stringify(f):""}};var Ue=n=>n===1||n===5||n===4||n===11155111;var Me=({nativeTransaction:n,erc20Transfers:e,erc721Transfers:t},a,s)=>{let r=!e&&!t,o=dn(n.method?.methodName),i=a.toLowerCase(),c=o.toLowerCase().includes("swap"),l=r&&n.from.address.toLowerCase()===i,d=r&&n.to.address.toLowerCase()===i,b=o==="Market Buy Orders With Eth"||o==="Buy NFT",m=o==="Approve",p=o.toLowerCase().includes("transfer"),f=o.toLowerCase().includes("airdrop"),u=o.toLowerCase().includes("unwrap"),h=o==="Fill Order",T=p&&!!s[0]&&Ve(s[0].type)&&s[0].from?.address.toLowerCase()===i,k=p&&!!s[0]&&Ve(s[0].type)&&s[0].to?.address.toLowerCase()===i;return c?TransactionType.SWAP:l?TransactionType.SEND:d?TransactionType.RECEIVE:b?TransactionType.NFT_BUY:m?TransactionType.APPROVE:T?TransactionType.NFT_SEND:k?TransactionType.NFT_RECEIVE:p?TransactionType.TRANSFER:f?TransactionType.AIRDROP:u?TransactionType.UNWRAP:h?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function Ve(n){return n===TokenType.ERC721||n===TokenType.ERC1155}var dn=(n="")=>n.includes("(")?mn(n.split("(",1)[0]):n;var Le=(n,{nativeTransaction:e,erc20Transfers:t,erc721Transfers:a},s)=>{let r=n===TransactionType.TRANSFER,o=n===TransactionType.SEND,i=n===TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;r&&t&&t[0]&&(c=t[0].from.address,l=t[0].to.address),r&&a&&a[0]&&(c=a[0].from.address,l=a[0].to.address);let d=o||r&&c.toLowerCase()===s.toLowerCase(),b=i||r&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:d,isIncoming:b,isSender:c===s,from:c,to:l}};async function Fe(n){try{return n.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var fn="https://ipfs.io";function M(n,e=fn){if(!n)return "";try{return ipfsResolver(n,e)}catch{return n}}async function yn(n,e=5e3){let t=new AbortController;return setTimeout(()=>t.abort(),e),fetch(n,{signal:t.signal})}async function He(n){let e={};if(n)if(n.startsWith("data:application/json;base64,")){let t=n.substring(29);try{let a=Buffer.from(t,"base64").toString();e=JSON.parse(a);}catch{e={};}}else e=await yn(M(n)).then(t=>t.json()).catch(()=>({}));else return {};return e}var bn="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function We(n,e="256"){let t=M(n);return `${bn}/width=${e},fit/${t}`}var je=async({nativeTransaction:n,erc20Transfers:e,erc721Transfers:t,erc1155Transfers:a},s)=>{let r=[];if(n.value!=="0"){let o=s.decimals,c=new TokenUnit(n.value,s.decimals,s.symbol).toDisplay();r.push({decimal:o.toString(),name:s.name,symbol:s.symbol,amount:c,from:n.from,to:n.to,type:TokenType.NATIVE});}return e?.forEach(o=>{let i=o.erc20Token.decimals,l=new TokenUnit(o.value,i,o.erc20Token.symbol).toDisplay();r.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});}),t&&await Promise.allSettled(t.map(async o=>{let i=o.erc721Token,c=await $e(i.tokenUri,i.metadata.imageUri);r.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});})),a&&await Promise.allSettled(a.map(async o=>{let i=o.erc1155Token,c=await $e(i.tokenUri,i.metadata.imageUri);r.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});})),r},$e=async(n,e)=>{if(e)return e.startsWith("ipfs://")?M(e):e;{let[t,a]=await Fe(He(n));return a?"":t.image?We(t.image):""}};var Ye=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],ae=(o=>(o.TOTAL_SUPPLY="totalSupply",o.BALANCE_OF="balanceOf",o.TRANSFER="transfer",o.TRANSFER_FROM="transferFrom",o.APPROVE="approve",o.ALLOWANCE="allowance",o))(ae||{});var Je=async({transactions:n,explorerUrl:e,networkToken:t,chainId:a,address:s})=>{let r=await je(n,t),o=Me(n,s,r),{isOutgoing:i,isIncoming:c,isSender:l,from:d,to:b}=Le(o,n,s),{blockTimestamp:m,txHash:p,gasPrice:f,gasUsed:u}=n.nativeTransaction,h=V(e,p);return {isContractCall:!Ye.includes(o),isIncoming:c,isOutgoing:i,isSender:l,timestamp:m*1e3,hash:p,from:d,to:b,tokens:r,gasPrice:f,gasUsed:u,chainId:a.toString(),txType:o,explorerLink:h}};var qe=async({chainId:n,explorerUrl:e,networkToken:t,address:a,nextPageToken:s,offset:r,glacierService:o})=>{try{let i=await o.listTransactions({chainId:n.toString(),address:a,pageToken:s,pageSize:r});return {transactions:(await Promise.all(i.transactions.filter(d=>d.nativeTransaction.txStatus==="1").map(d=>Je({transactions:d,explorerUrl:e,networkToken:t,chainId:n,address:a}).then(b=>b)))).filter(d=>d.tokens.find(b=>Number(b.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var ze=async({chainId:n,isTestnet:e,networkToken:t,explorerUrl:a,address:s,nextPageToken:r,offset:o,glacierService:i})=>Ue(n)?Be({isTestnet:e,networkToken:t,explorerUrl:a,chainId:n,address:s,nextPageToken:r,offset:o}):i.isHealthy()?qe({networkToken:t,explorerUrl:a,chainId:n,address:s,nextPageToken:r,offset:o,glacierService:i}):{transactions:[],nextPageToken:""};var Ke={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["eip155:1","eip155:43114","eip155:43113"],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"]}},manifestVersion:"0.0"};var hn=z$1.object({from:z$1.string().length(42),to:z$1.string().length(42),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()}),Tn=z$1.array(hn).length(1),Qe=n=>Tn.safeParse(n);var Xe=async({transactionParams:{from:n,to:e,data:t,value:a},provider:s})=>{let r=await s.getTransactionCount(n);return Number(await s.estimateGas({from:n,to:e,nonce:r,data:t,value:a}))};var Ze=async({from:n,provider:e})=>e.getTransactionCount(n);var tt="DUMMY_API_KEY",nt=async({proxyApiUrl:n,chainId:e,params:t,domain:a})=>new et({baseURL:n+"/proxy/blockaid/",apiKey:tt}).evm.transaction.scan({account_address:t.from,chain:e.toString(),options:["validation","simulation"],data:{from:t.from,to:t.to,data:t.data,value:t.value,gas:t.gas,gas_price:t.gasPrice},metadata:a&&a.length>0?{domain:a}:{non_dapp:!0}}),at=async({proxyApiUrl:n,chainId:e,accountAddress:t,data:a,domain:s})=>new et({baseURL:n+"/proxy/blockaid/",apiKey:tt}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:t,data:a,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var ot=async({request:n,dAppUrl:e,params:t,chainId:a,proxyApiUrl:s})=>{let r,o,i;try{let{validation:c,simulation:l}=await nt({proxyApiUrl:s,chainId:a,params:t,domain:e});!c||c.result_type==="Error"||c.result_type==="Warning"?r=F[AlertType.WARNING]:c.result_type==="Malicious"&&(r=F[AlertType.DANGER]),l?.status==="Success"&&(i=st(n,l.account_summary.exposures),o=it(l.account_summary.assets_diffs));}catch(c){console.error("processTransactionSimulation error",c),r=F[AlertType.WARNING];}return {alert:r,balanceChange:o,tokenApprovals:i}},st=(n,e)=>{let t=[];for(let s of e){let r=ct(s.asset);if(r)for(let[o,i]of Object.entries(s.spenders))if(i.exposure.length===0)t.push({token:r,spenderAddress:o,logoUri:r.logoUri});else for(let c of i.exposure)"raw_value"in c?t.push({token:r,spenderAddress:o,value:c.raw_value,usdPrice:c.usd_price,logoUri:r.logoUri}):t.push({token:r,spenderAddress:o,logoUri:c.logo_url,usdPrice:c.usd_price});}return t.length===0?void 0:{isEditable:t.length===1&&t[0]?.token.type===TokenType.ERC20&&n.method===RpcMethod.ETH_SEND_TRANSACTION,approvals:t}},it=n=>{let e=rt(n,"in"),t=rt(n,"out");if(!(e.length===0&&t.length===0))return {ins:e,outs:t}},rt=(n,e)=>n.filter(t=>t[e].length>0).sort((t,a)=>t[e].length-a[e].length).map(t=>{let a=t.asset,s="address"in a?ct(a):Rn(a);if(!s)return;let r=t[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:r}}).filter(t=>t!==void 0),ct=n=>{let e;return n.type==="ERC20"?e={type:TokenType.ERC20,address:n.address,decimals:n.decimals,name:n.name??n.symbol??"",symbol:n.symbol??"",logoUri:n.logo_url}:n.type==="ERC1155"?e={type:TokenType.ERC1155,address:n.address,logoUri:n.logo_url,name:n.name,symbol:n.symbol}:n.type==="ERC721"?e={type:TokenType.ERC721,address:n.address,logoUri:n.logo_url,name:n.name,symbol:n.symbol}:n.type==="NONERC"&&(e={type:TokenType.NONERC,address:n.address,logoUri:n.logo_url,name:n.name,symbol:n.symbol}),e},Rn=n=>({name:n.name??"",symbol:n.symbol??"",decimals:n.decimals,description:"",logoUri:n.logo_url}),lt=async({request:n,dAppUrl:e,accountAddress:t,chainId:a,data:s,proxyApiUrl:r})=>{let o,i,c;try{let{validation:l,simulation:d}=await at({proxyApiUrl:r,chainId:a,accountAddress:t,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?o=F[AlertType.WARNING]:l.result_type==="Malicious"&&(o=F[AlertType.DANGER]),d?.status==="Success"&&(c=st(n,d.account_summary.exposures),i=it(d.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),o=F[AlertType.WARNING];}return {alert:o,balanceChange:i,tokenApprovals:c}},F={[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 is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var re={_format:"hh-sol-artifact-1",contractName:"ERC20",sourceName:"contracts/token/ERC20/ERC20.sol",abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],bytecode:"0x60806040523480156200001157600080fd5b5060405162000aed38038062000aed8339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000281565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b6020821081036200027b57634e487b7160e01b600052602260045260246000fd5b50919050565b61085c80620002916000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",deployedBytecode:"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",linkReferences:{},deployedLinkReferences:{}};var pt=n=>{if(n.data)try{let t=new Interface(re.abi).parseTransaction({data:n.data,value:n.value}),a=t?.name??t?.fragment?.name;return a&&wn(a)?a:void 0}catch{return}};function wn(n){return Object.values(ae).includes(n)}var mt=async({request:n,network:e,approvalController:t,proxyApiUrl:a})=>{let{dappInfo:s,params:r}=n,o=Qe(r);if(!o.success)return console.error("invalid params",o.error),{error:rpcErrors.invalidParams("Transaction params are invalid")};let i=o.data[0];if(!i)return {error:rpcErrors.invalidParams("Transaction params are invalid")};let c=A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let k=await Xe({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+k.toString(16);}catch{return {error:rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let k=await Ze({from:i.from,provider:c});i.nonce=String(k);}catch{return {error:rpcErrors.internal("Unable to calculate nonce")}}let l=pt(i),{alert:d,balanceChange:b,tokenApprovals:m}=await ot({request:n,proxyApiUrl:a,chainId:e.chainId,params:i,dAppUrl:n.dappInfo.url}),p="Approve Transaction";l==="approve"&&(p="Token Spend Approval");let f={title:p,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},transactionDetails:{website:new URL(s.url).hostname,from:i.from,to:i.to,data:i.data,type:l},networkFeeSelector:!0,alert:d,balanceChange:b,tokenApprovals:m},u={type:RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId}},h=await t.requestApproval({request:n,displayData:f,signingData:u});if("error"in h)return {error:h.error};let T=await In(c,h);return Nn({provider:c,txHash:T,onTransactionConfirmed:t.onTransactionConfirmed,onTransactionReverted:t.onTransactionReverted}),{result:T}},In=async(n,e)=>"txHash"in e?e.txHash:await n.send("eth_sendRawTransaction",[e.signedData]),Nn=async({provider:n,txHash:e,onTransactionConfirmed:t,onTransactionReverted:a})=>{(await n.waitForTransaction(e))?.status===1?t(e):a(e);};var dt=async({provider:n,tokenService:e,address:t,currency:a,tokens:s,network:r})=>{let o=r.pricingProviders?.coingecko.assetPlatformId,i=r.pricingProviders?.coingecko.nativeTokenId,c=s.map(b=>b.address),l=await Promise.allSettled(s.map(async b=>{let f=await new ethers.Contract(b.address,re.abi,n).balanceOf?.(t)||0n;return {...b,balance:f}})).then(b=>b.reduce((m,p)=>p.status==="fulfilled"&&p.value.balance!==0n?[...m,p.value]:m,[]));if(!l.length)return {};let d=o&&await e.getPricesByAddresses(c,o,a)||{};return l.reduce((b,m)=>{let p=d?.[i??""]?.[a]?.price??void 0,f=d?.[i??""]?.[a]?.marketCap??void 0,u=d?.[i??""]?.[a]?.vol24??void 0,h=d?.[i??""]?.[a]?.change24??void 0,T=new TokenUnit(m.balance,m.decimals,m.symbol),k=p!==void 0?T.mul(p):void 0;return {...b,[m.address.toLowerCase()]:{...m,type:TokenType.ERC20,balance:m.balance,balanceDisplayValue:T.toDisplay(),balanceInCurrency:k?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:k?.toDisplay({fixedDp:2}),priceInCurrency:p,marketCap:f,change24:h,vol24:u}}},{})};var ut=async({operation:n,isSuccess:e,maxRetries:t=10,backoffPolicy:a=z.exponential()})=>{let s=0,r=0,o;for(;r<t;){r>0&&await Bn(s);try{let c=await n(r);if(e(c))return c}catch(c){o=c;}s=a(r),r++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},z=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return t=>e*1e3}static constantMs(e){return t=>e}};function Bn(n){return new Promise(e=>setTimeout(e,n))}var be=n=>ut({operation:e=>n(e>0),maxRetries:2,backoffPolicy:z.constant(1),isSuccess:e=>e?.status?.error_code!==429});function ft(n){let e,t=0;for(e=0;e<n.length;e++)t+=n.charCodeAt(e)*(e+1);return t}function ge(n){let e,t=0;for(e=0;e<n.length;e++){let a=ft(n[e]??"");t=t+65027/a;}return (""+t).slice(0,16)}var Te=n=>new Zodios(`${n}/proxy/coingecko`,[{method:"post",path:"/simple/price",parameters:[{name:"ids",type:"Query",schema:string()},{name:"vs_currencies",type:"Query",schema:string()},{name:"include_market_cap",type:"Query",schema:string().optional()},{name:"include_24hr_vol",type:"Query",schema:string().optional()},{name:"include_24hr_change",type:"Query",schema:string().optional()},{name:"include_last_updated_at",type:"Query",schema:string().optional()}],alias:"simplePrice",response:RawSimplePriceResponseSchema},{method:"post",path:"/simple/token_price/:id",parameters:[{name:"id",type:"Path",schema:string()},{name:"contract_addresses",type:"Query",schema:string().array()},{name:"vs_currencies",type:"Query",schema:string().array()},{name:"include_market_cap",type:"Query",schema:boolean().optional()},{name:"include_24hr_vol",type:"Query",schema:boolean().optional()},{name:"include_24hr_change",type:"Query",schema:boolean().optional()}],alias:"simplePriceByContractAddresses",response:SimplePriceResponseSchema}],{axiosConfig:{headers:{"Content-Type":"application/json"}}});var yt=getBasicCoingeckoHttp(),_,H,Q=class{constructor({storage:e,proxyApiUrl:t}){R(this,_,void 0);R(this,H,void 0);N(this,"transformSimplePriceResponse",(e,t=[VsCurrencyType.USD])=>{let a={};return Object.keys(e).forEach(s=>{let r=e[s];a[s]={},t.forEach(o=>{a[s]={[o]:{price:r?.[o],change24:r?.[`${o}_24h_change`],vol24:r?.[`${o}_24h_vol`],marketCap:r?.[`${o}_market_cap`]}};});}),a});P(this,_,e),P(this,H,t);}async getSimplePrice({coinIds:e=[],currencies:t=[VsCurrencyType.USD]}){let a,r=`getSimplePrice-${e?`${ge(e)}-${t.toString()}`:`${t.toString()}`}`;if(a=g(this,_)?.get?.(r),a)return a;try{a=await be(o=>this.simplePrice({coinIds:e,currencies:t,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{a=void 0;}return g(this,_)?.set?.(r,a),a}async getPricesByAddresses(e,t,a=VsCurrencyType.USD){let s,o=`getPricesWithMarketDataByAddresses-${`${ge(e)}-${t}-${a}`}`;if(s=g(this,_)?.get?.(o),s)return s;try{s=await be(i=>this.fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:e,currency:a,useCoingeckoProxy:i}));}catch{s=void 0;}return g(this,_)?.set?.(o,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:t,currency:a=VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?Te(g(this,H)).simplePriceByContractAddresses(void 0,{params:{id:e},queries:{contract_addresses:t,vs_currencies:[a],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}}):simpleTokenPrice(yt,{assetPlatformId:e,tokenAddresses:t,currencies:[a],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:t=[VsCurrencyType.USD],marketCap:a=!1,vol24:s=!1,change24:r=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await Te(g(this,H)).simplePrice(void 0,{queries:{ids:e?.join(","),vs_currencies:t.join(","),include_market_cap:String(a),include_24hr_vol:String(s),include_24hr_change:String(r),include_last_updated_at:String(o)}});return this.transformSimplePriceResponse(l,t)}return simplePrice(yt,{coinIds:e,currencies:t,marketCap:a,vol24:s,change24:r,lastUpdated:o,shouldThrow:c})}};_=new WeakMap,H=new WeakMap;var jn="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Yn="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",gt=object({date:string(),usd:record(number())}),Jn=new Zodios(jn,[{method:"get",path:"",alias:"getExchangeRates",response:gt}]),qn=new Zodios(Yn,[{method:"get",path:"",alias:"getExchangeRates",response:gt}]),se=async()=>{try{return await Jn.getExchangeRates()}catch{return await qn.getExchangeRates()}};var ht=async({provider:n,tokenService:e,address:t,currency:a,network:s})=>{let r=s.pricingProviders?.coingecko.nativeTokenId,o=s.networkToken,i=r?await e.getSimplePrice({coinIds:[r],currencies:[a]}):{},c=i?.[r??""]?.[a]?.price??void 0,l=i?.[r??""]?.[a]?.marketCap??void 0,d=i?.[r??""]?.[a]?.vol24??void 0,b=i?.[r??""]?.[a]?.change24??void 0,m=await n.getBalance(t),p=new TokenUnit(m,o.decimals,o.symbol),f=c!==void 0?p.mul(c):void 0;return {...o,coingeckoId:r??"",type:TokenType.NATIVE,balance:m,balanceDisplayValue:p.toDisplay(),balanceInCurrency:f?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:f?.toDisplay({fixedDp:2}),priceInCurrency:c,marketCap:l,vol24:d,change24:b}};var W,ie=class{constructor(e){this.baseUrl=e;R(this,W,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(s=>s.community_id).some(s=>s===e)}async getChainInfo({chainId:e}){return await(await fetch(`${this.baseUrl}/v1/chain?id=${e}`)).json()}async getTokenBalance({chainId:e,address:t,tokenId:a}){return await(await fetch(`${this.baseUrl}/v1/user/token?id=${t}&chain_id=${e}&token_id=${a}`)).json()}async getTokenList({chainId:e,address:t}){return await(await fetch(`${this.baseUrl}/v1/user/token_list?id=${t}&chain_id=${e}`)).json()}async getChainList(){if(g(this,W).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);P(this,W,await e.json());}return g(this,W)}};W=new WeakMap;var S,le=class{constructor({proxyApiUrl:e}){R(this,S,void 0);P(this,S,new ie(`${e}/proxy/debank`));}async isNetworkSupported(e){return g(this,S).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:t,currency:a}){if(!isHexString(t))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+t);let r=(await g(this,S).getChainList()).find(h=>h.community_id===e)?.id;if(!r)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=(await g(this,S).getChainInfo({chainId:r})).wrapped_token_id,c=await g(this,S).getTokenBalance({address:t,chainId:r,tokenId:i}),l=new TokenUnit(c.raw_amount,c.decimals,c.symbol),d=l.toDisplay(),m=(await se()).usd[a.toLowerCase()],p=m?m*c.price:void 0,f=p?l.mul(p).toDisplay({fixedDp:2}):void 0,u=p?l.mul(p).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c.name,symbol:c.symbol,decimals:c.decimals,type:TokenType.NATIVE,logoUri:c.logo_url,balance:l.toSubUnit(),balanceDisplayValue:d,balanceInCurrency:u,balanceCurrencyDisplayValue:f,priceInCurrency:p}}async listErc20Balances({chainId:e,address:t,currency:a}){if(!isHexString(t))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let r=(await g(this,S).getChainList()).find(p=>p.community_id===e)?.id;if(!r)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let o=await g(this,S).getTokenList({chainId:r,address:t}),i=await g(this,S).getChainInfo({chainId:r}),l=o.filter(p=>p.id!==i.native_token_id).map(p=>g(this,S).getTokenBalance({chainId:r,tokenId:p.id,address:t}).then(f=>({id:p.id,status:"fulfilled",value:f})).catch(f=>({id:p.id,status:"rejected",reason:f}))),d={};await Promise.allSettled(l).then(p=>{d=p.reduce((f,u)=>(u.status==="fulfilled"&&"value"in u.value&&(f[u.value.id]=u.value.value),f),{});});let b=Object.keys(d),m={};for(let p=0;p<b.length;p++){let f=b[p];if(f===void 0||!isHexString(f))continue;let u=d[f];if(u===void 0)continue;let h=new TokenUnit(u.raw_amount,u.decimals,u.symbol),T=h.toDisplay(),we=(await se()).usd[a.toLowerCase()],q=we?we*u.price:void 0,Yt=q?h.mul(q).toDisplay({fixedDp:2}):void 0,Jt=q?h.mul(q).toDisplay({fixedDp:2,asNumber:!0}):void 0;m[u.id]={chainId:i.community_id,address:u.id,name:u.name,symbol:u.symbol,decimals:u.decimals,logoUri:u.logo_url,balance:h.toSubUnit(),balanceCurrencyDisplayValue:Yt,balanceDisplayValue:T,balanceInCurrency:Jt,priceInCurrency:q,type:TokenType.ERC20};}return m}};S=new WeakMap;async function vt(n,e){let t=n.map(async(r,o)=>({index:o,result:await e(r)})),s=(await Promise.allSettled(t)).filter(r=>r.status==="fulfilled").map(r=>r).find(r=>r.value.result);return s?n[s.value.index]:void 0}var St=async({addresses:n,currency:e,network:t,proxyApiUrl:a,customTokens:s=[],storage:r,glacierService:o})=>{let i=t.chainId,c=[o,new le({proxyApiUrl:a})],l=await vt(c,m=>m.isNetworkSupported(t.chainId)),d;if(l)d=await Promise.allSettled(n.map(async m=>{let p=await l.getNativeBalance({address:m,currency:e.toUpperCase(),chainId:i}),f=await l.listErc20Balances({customTokens:s.filter(Et),currency:e.toUpperCase(),chainId:i,address:m,pageSize:100});return {address:m,balances:{[p.symbol]:p,...f}}}));else {let m=new Q({storage:r,proxyApiUrl:a}),f=[...await te({chainId:Number(i),proxyApiUrl:a}),...s],u=A({chainId:i,chainName:t.chainName,rpcUrl:t.rpcUrl,multiContractAddress:t.utilityAddresses?.multicall});d=await Promise.allSettled(n.map(async h=>{let T=await ht({network:t,tokenService:m,address:h,currency:e,provider:u}),k=await dt({provider:u,network:t,tokenService:m,address:h,currency:e,tokens:f.filter(Et)});return {address:h,balances:{[T.symbol]:T,...k}}}));}return d.reduce((m,p)=>p.status==="rejected"?m:{...m,[p.value.address]:p.value.balances},{})};function Et(n){return n.type===TokenType.ERC20}var Xn={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},Zn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},Pt=n=>{switch(n){case Environment.PRODUCTION:return Xn;case Environment.DEV:return Zn}};var I=class extends Error{constructor(){super(...arguments);N(this,"message","Glacier is unhealthy. Try again later.");}},pe=class{constructor({glacierApiUrl:e}){N(this,"glacierSdk");N(this,"isGlacierHealthy",!0);N(this,"supportedChainIds",[]);N(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:e}),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(a=>a===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(t=>t.chainId),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:t,tokenId:a}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:t,tokenId:a});}catch(s){throw s instanceof I&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:t,tokenId:a}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:t,tokenId:a})}catch(s){throw s instanceof I&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:t,currency:a,coingeckoId:s}){try{let o=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:t,currency:a.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(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}async listErc721Balances({chainId:e,address:t,pageSize:a,pageToken:s}){try{return this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:t,pageSize:a,pageToken:s})}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}async listErc1155Balances({chainId:e,address:t,pageSize:a,pageToken:s}){try{return this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:t,pageSize:a,pageToken:s})}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}async listErc20Balances({chainId:e,address:t,currency:a,customTokens:s}){try{let r=[],o;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:t,currency:a.toLocaleLowerCase(),pageSize:100,pageToken:o});r.push(...aa(i.erc20TokenBalances,Number(e))),o=i.nextPageToken;}while(o);return [...na(s),...r].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}async listTransactions({chainId:e,address:t,pageToken:a,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:t,pageToken:a,pageSize:s})}catch(r){throw r instanceof I&&this.setGlacierToUnhealthy(),r}}},na=n=>n.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})),aa=(n,e)=>n.map(t=>{let a=new TokenUnit(t.balance,t.decimals,t.symbol),s=a.toDisplay(),r=t.balanceValue?.value.toString(),o=t.price?.value,i=o!==void 0?a.mul(o).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:t.address,name:t.name,symbol:t.symbol,decimals:t.decimals,logoUri:t.logoUri,balance:a.toSubUnit(),balanceCurrencyDisplayValue:r,balanceDisplayValue:s,balanceInCurrency:i,priceInCurrency:o,type:TokenType.ERC20}});var Ee=n=>{let e="";e+=`Domain
|
|
15
|
-
`;for(let t in
|
|
14
|
+
var ar=Object.defineProperty;var or=(r,e,t)=>e in r?ar(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var D=(r,e,t)=>(or(r,typeof e!="symbol"?e+"":e,t),t),Me=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var d=(r,e,t)=>(Me(r,e,"read from private field"),t?t.call(r):e.get(r)),k=(r,e,t)=>{if(e.has(r))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(r):e.set(r,t);},E=(r,e,t,n)=>(Me(r,e,"write to private field"),n?n.call(r,t):e.set(r,t),t);async function pe({chainId:r,proxyApiUrl:e}){let t=await fetch(`${e}/tokens?evmChainId=${r}`);if(!t.ok)throw rpcErrors.internal(`Failed to fetch tokens for chainId ${r}`);return t.json()}var lr=process.env.GLACIER_API_KEY,N=r=>{let{chainId:e,chainName:t,rpcUrl:n,multiContractAddress:s,pollingInterval:o=2e3}=r,a=new JsonRpcBatchInternal({maxCalls:40,multiContractAddress:s},mr(n,lr),new Network(t,e));return a.pollingInterval=o,a},pr=["glacier-api.avax.network","proxy-api.avax.network"];function mr(r,e){let t=new URL(r);if(e&&pr.includes(t.hostname)){let n=t.searchParams;return n.set("token",e),t.search=n.toString(),t.toString()}return r}var Ee={LOW:1n,MEDIUM:4n,HIGH:6n},ve=500000000n;async function Le({chainId:r,chainName:e,rpcUrl:t,multiContractAddress:n}){let s=N({chainId:r,chainName:e,rpcUrl:t,multiContractAddress:n}),{maxFeePerGas:o}=await s.getFeeData();if(!o)throw rpcErrors.internal("Pre-EIP-1559 networks are not supported");let a=ve*Ee.LOW,i=ve*Ee.MEDIUM,c=ve*Ee.HIGH;return {baseFee:o,low:{maxFeePerGas:o+a,maxPriorityFeePerGas:a},medium:{maxFeePerGas:o+i,maxPriorityFeePerGas:i},high:{maxFeePerGas:o+c,maxPriorityFeePerGas:c},isFixedFee:!1}}function F(r,e,t="tx"){return `${r}/${t}/${e}`}var He=({tx:r,networkToken:e,chainId:t,explorerUrl:n,address:s})=>{let o=r.from.toLowerCase()===s.toLowerCase(),a=parseInt(r.timeStamp)*1e3,i=e.decimals,l=new TokenUnit(r.value,e.decimals,e.symbol).toDisplay(),p=o?TransactionType.SEND:TransactionType.RECEIVE,{from:f,to:h,gasPrice:y,gasUsed:g,hash:m}=r,b=F(n,m);return {isIncoming:!o,isOutgoing:o,isContractCall:yr(r),timestamp:a,hash:m,isSender:o,from:f,to:h,tokens:[{decimal:i.toString(),name:e.name,symbol:e.symbol,amount:l,type:TokenType.NATIVE}],gasUsed:g,gasPrice:y,chainId:t.toString(),txType:p,explorerLink:b}};function yr(r){return r.input!=="0x"}function We({tx:r,address:e,explorerUrl:t,chainId:n}){let s=r.from.toLowerCase()===e.toLowerCase(),o=parseInt(r.timeStamp)*1e3,i=new TokenUnit(r.value,Number(r.tokenDecimal),r.tokenSymbol).toDisplay(),{from:c,to:l,gasPrice:p,gasUsed:f,hash:h,tokenDecimal:y,tokenName:g,tokenSymbol:m}=r,b=s?TransactionType.SEND:TransactionType.RECEIVE,T=F(t,h);return {isIncoming:!s,isOutgoing:s,isContractCall:!1,timestamp:o,hash:h,isSender:s,from:c,to:l,tokens:[{decimal:y,name:g,symbol:m,type:TokenType.ERC20,amount:i}],gasUsed:f,gasPrice:p,chainId:n.toString(),txType:b,explorerLink:T}}var Oe=async({isTestnet:r,networkToken:e,explorerUrl:t,chainId:n,address:s,nextPageToken:o,offset:a})=>{let i=o?JSON.parse(o):void 0,c=i?.page||1,l=i?.queries||["normal","erc20"],p=(l.includes("normal")?await getNormalTxs(s,!r,{page:c,offset:a}):[]).map(m=>He({tx:m,chainId:n,networkToken:e,explorerUrl:t,address:s})),f=(l.includes("erc20")?await getErc20Txs(s,!r,void 0,{page:c,offset:a}):[]).map(m=>We({tx:m,address:s,explorerUrl:t,chainId:n})),h=f.map(m=>m.hash),y=p.filter(m=>!h.includes(m.hash)),g={queries:[],page:c+1};return p.length&&g.queries.push("normal"),f.length&&g.queries.push("erc20"),{transactions:[...y,...f],nextPageToken:g.queries.length?JSON.stringify(g):""}};var je=r=>r===1||r===5||r===4||r===11155111;var qe=({nativeTransaction:r,erc20Transfers:e,erc721Transfers:t},n,s)=>{let o=!e&&!t,a=Er(r.method?.methodName),i=n.toLowerCase(),c=a.toLowerCase().includes("swap"),l=o&&r.from.address.toLowerCase()===i,p=o&&r.to.address.toLowerCase()===i,f=a==="Market Buy Orders With Eth"||a==="Buy NFT",h=a==="Approve",y=a.toLowerCase().includes("transfer"),g=a.toLowerCase().includes("airdrop"),m=a.toLowerCase().includes("unwrap"),b=a==="Fill Order",T=y&&!!s[0]&&Je(s[0].type)&&s[0].from?.address.toLowerCase()===i,v=y&&!!s[0]&&Je(s[0].type)&&s[0].to?.address.toLowerCase()===i;return c?TransactionType.SWAP:l?TransactionType.SEND:p?TransactionType.RECEIVE:f?TransactionType.NFT_BUY:h?TransactionType.APPROVE:T?TransactionType.NFT_SEND:v?TransactionType.NFT_RECEIVE:y?TransactionType.TRANSFER:g?TransactionType.AIRDROP:m?TransactionType.UNWRAP:b?TransactionType.FILL_ORDER:TransactionType.UNKNOWN};function Je(r){return r===TokenType.ERC721||r===TokenType.ERC1155}var Er=(r="")=>r.includes("(")?kr(r.split("(",1)[0]):r;var ze=(r,{nativeTransaction:e,erc20Transfers:t,erc721Transfers:n},s)=>{let o=r===TransactionType.TRANSFER,a=r===TransactionType.SEND,i=r===TransactionType.RECEIVE,c=e?.from?.address,l=e?.to?.address;o&&t&&t[0]&&(c=t[0].from.address,l=t[0].to.address),o&&n&&n[0]&&(c=n[0].from.address,l=n[0].to.address);let p=a||o&&c.toLowerCase()===s.toLowerCase(),f=i||o&&l.toLowerCase()===s.toLowerCase();return {isOutgoing:p,isIncoming:f,isSender:c===s,from:c,to:l}};async function Ke(r){try{return r.then(e=>[e,null]).catch(e=>[null,e])}catch(e){return Promise.resolve([null,e])}}var Sr="https://ipfs.io";function H(r,e=Sr){if(!r)return "";try{return ipfsResolver(r,e)}catch{return r}}async function Rr(r,e=5e3){let t=new AbortController;return setTimeout(()=>t.abort(),e),fetch(r,{signal:t.signal})}async function Qe(r){let e={};if(r)if(r.startsWith("data:application/json;base64,")){let t=r.substring(29);try{let n=Buffer.from(t,"base64").toString();e=JSON.parse(n);}catch{e={};}}else e=await Rr(H(r)).then(t=>t.json()).catch(()=>({}));else return {};return e}var wr="https://image-proxy.svc.prod.covalenthq.com/cdn-cgi/image";function Xe(r,e="256"){let t=H(r);return `${wr}/width=${e},fit/${t}`}var tt=async({nativeTransaction:r,erc20Transfers:e,erc721Transfers:t,erc1155Transfers:n},s)=>{let o=[];if(r.value!=="0"){let a=s.decimals,c=new TokenUnit(r.value,s.decimals,s.symbol).toDisplay();o.push({decimal:a.toString(),name:s.name,symbol:s.symbol,amount:c,from:r.from,to:r.to,type:TokenType.NATIVE});}return e?.forEach(a=>{let i=a.erc20Token.decimals,l=new TokenUnit(a.value,i,a.erc20Token.symbol).toDisplay();o.push({decimal:i.toString(),name:a.erc20Token.name,symbol:a.erc20Token.symbol,amount:l,from:a.from,to:a.to,imageUri:a.erc20Token.logoUri,type:TokenType.ERC20});}),t&&await Promise.allSettled(t.map(async a=>{let i=a.erc721Token,c=await et(i.tokenUri,i.metadata.imageUri);o.push({name:a.erc721Token.name,symbol:a.erc721Token.symbol,amount:"1",imageUri:c,from:a.from,to:a.to,collectableTokenId:a.erc721Token.tokenId,type:TokenType.ERC721});})),n&&await Promise.allSettled(n.map(async a=>{let i=a.erc1155Token,c=await et(i.tokenUri,i.metadata.imageUri);o.push({name:a.erc1155Token.metadata.name??"",symbol:a.erc1155Token.metadata.symbol??"",amount:a.value,imageUri:c,from:a.from,to:a.to,collectableTokenId:a.erc1155Token.tokenId,type:TokenType.ERC1155});})),o},et=async(r,e)=>{if(e)return e.startsWith("ipfs://")?H(e):e;{let[t,n]=await Ke(Qe(r));return n?"":t.image?Xe(t.image):""}};var rt=[TransactionType.SEND,TransactionType.RECEIVE,TransactionType.TRANSFER],de=(a=>(a.TOTAL_SUPPLY="totalSupply",a.BALANCE_OF="balanceOf",a.TRANSFER="transfer",a.TRANSFER_FROM="transferFrom",a.APPROVE="approve",a.ALLOWANCE="allowance",a))(de||{});var nt=async({transactions:r,explorerUrl:e,networkToken:t,chainId:n,address:s})=>{let o=await tt(r,t),a=qe(r,s,o),{isOutgoing:i,isIncoming:c,isSender:l,from:p,to:f}=ze(a,r,s),{blockTimestamp:h,txHash:y,gasPrice:g,gasUsed:m}=r.nativeTransaction,b=F(e,y);return {isContractCall:!rt.includes(a),isIncoming:c,isOutgoing:i,isSender:l,timestamp:h*1e3,hash:y,from:p,to:f,tokens:o,gasPrice:g,gasUsed:m,chainId:n.toString(),txType:a,explorerLink:b}};var at=async({chainId:r,explorerUrl:e,networkToken:t,address:n,nextPageToken:s,offset:o,glacierService:a})=>{try{let i=await a.listTransactions({chainId:r.toString(),address:n,pageToken:s,pageSize:o});return {transactions:(await Promise.all(i.transactions.filter(p=>p.nativeTransaction.txStatus==="1").map(p=>nt({transactions:p,explorerUrl:e,networkToken:t,chainId:r,address:n}).then(f=>f)))).filter(p=>p.tokens.find(f=>Number(f.amount)!==0)),nextPageToken:i.nextPageToken}}catch{return {transactions:[],nextPageToken:""}}};var ot=async({chainId:r,isTestnet:e,networkToken:t,explorerUrl:n,address:s,nextPageToken:o,offset:a,glacierService:i})=>je(r)?Oe({isTestnet:e,networkToken:t,explorerUrl:n,chainId:r,address:s,nextPageToken:o,offset:a}):i.isHealthy()?at({networkToken:t,explorerUrl:n,chainId:r,address:s,nextPageToken:o,offset:a,glacierService:i}):{transactions:[],nextPageToken:""};var st={name:"EVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/bundle.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider.js",packageName:"@avalabs/evm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["eip155:1","eip155:43114","eip155:43113"],namespaces:["eip155"]},cointype:"60",permissions:{rpc:{dapps:!0,methods:["personal_sign","eth_sendTransaction","eth_*","web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"]}},manifestVersion:"0.0"};var xr=z.object({from:z.string().length(42),to:z.string().length(42),data:z.string().optional(),value:z.string().startsWith("0x").optional(),gas:z.string().startsWith("0x").optional(),gasPrice:z.string().startsWith("0x").optional(),maxFeePerGas:z.string().startsWith("0x").optional(),maxPriorityFeePerGas:z.string().startsWith("0x").optional(),nonce:z.string().optional(),chainId:z.string().optional()}),Ir=z.array(xr).length(1),it=r=>Ir.safeParse(r);var ct=async({transactionParams:{from:r,to:e,data:t,value:n},provider:s})=>{let o=await s.getTransactionCount(r);return Number(await s.estimateGas({from:r,to:e,nonce:o,data:t,value:n}))};var lt=async({from:r,provider:e})=>e.getTransactionCount(r);var mt="DUMMY_API_KEY",dt=async({proxyApiUrl:r,chainId:e,params:t,domain:n})=>new pt({baseURL:r+"/proxy/blockaid/",apiKey:mt}).evm.transaction.scan({account_address:t.from,chain:e.toString(),options:["validation","simulation"],data:{from:t.from,to:t.to,data:t.data,value:t.value,gas:t.gas,gas_price:t.gasPrice},metadata:n&&n.length>0?{domain:n}:{non_dapp:!0}}),ut=async({proxyApiUrl:r,chainId:e,accountAddress:t,data:n,domain:s})=>new pt({baseURL:r+"/proxy/blockaid/",apiKey:mt}).evm.jsonRpc.scan({chain:e.toString(),options:["validation","simulation"],account_address:t,data:n,metadata:s&&s.length>0?{domain:s}:{non_dapp:!0}});var yt=async({request:r,dAppUrl:e,params:t,chainId:n,proxyApiUrl:s})=>{let o,a,i;try{let{validation:c,simulation:l}=await dt({proxyApiUrl:s,chainId:n,params:t,domain:e});!c||c.result_type==="Error"||c.result_type==="Warning"?o=W[AlertType.WARNING]:c.result_type==="Malicious"&&(o=W[AlertType.DANGER]),l?.status==="Success"&&(i=gt(r,l.account_summary.exposures),a=bt(l.account_summary.assets_diffs));}catch(c){console.error("processTransactionSimulation error",c),o=W[AlertType.WARNING];}return {alert:o,balanceChange:a,tokenApprovals:i}},gt=(r,e)=>{let t=[];for(let s of e){let o=ht(s.asset);if(o)for(let[a,i]of Object.entries(s.spenders))if(i.exposure.length===0)t.push({token:o,spenderAddress:a,logoUri:o.logoUri});else for(let c of i.exposure)"raw_value"in c?t.push({token:o,spenderAddress:a,value:c.raw_value,usdPrice:c.usd_price,logoUri:o.logoUri}):t.push({token:o,spenderAddress:a,logoUri:c.logo_url,usdPrice:c.usd_price});}return t.length===0?void 0:{isEditable:t.length===1&&t[0]?.token.type===TokenType.ERC20&&r.method===RpcMethod.ETH_SEND_TRANSACTION,approvals:t}},bt=r=>{let e=ft(r,"in"),t=ft(r,"out");if(!(e.length===0&&t.length===0))return {ins:e,outs:t}},ft=(r,e)=>r.filter(t=>t[e].length>0).sort((t,n)=>t[e].length-n[e].length).map(t=>{let n=t.asset,s="address"in n?ht(n):Dr(n);if(!s)return;let o=t[e].map(a=>{let i;if("value"in a&&a.value)if("decimals"in s){let c=numberToBN(a.value,s.decimals);i=balanceToDisplayValue(c,s.decimals);}else isHexString(a.value)&&(i=parseInt(a.value,16).toString());else "type"in s&&s.type===TokenType.ERC721&&(i="1");return i?{displayValue:i,usdPrice:a.usd_price}:void 0}).filter(a=>a!==void 0);return {token:s,items:o}}).filter(t=>t!==void 0),ht=r=>{let e;return r.type==="ERC20"?e={type:TokenType.ERC20,address:r.address,decimals:r.decimals,name:r.name??r.symbol??"",symbol:r.symbol??"",logoUri:r.logo_url}:r.type==="ERC1155"?e={type:TokenType.ERC1155,address:r.address,logoUri:r.logo_url,name:r.name,symbol:r.symbol}:r.type==="ERC721"?e={type:TokenType.ERC721,address:r.address,logoUri:r.logo_url,name:r.name,symbol:r.symbol}:r.type==="NONERC"&&(e={type:TokenType.NONERC,address:r.address,logoUri:r.logo_url,name:r.name,symbol:r.symbol}),e},Dr=r=>({name:r.name??"",symbol:r.symbol??"",decimals:r.decimals,description:"",logoUri:r.logo_url}),Tt=async({request:r,dAppUrl:e,accountAddress:t,chainId:n,data:s,proxyApiUrl:o})=>{let a,i,c;try{let{validation:l,simulation:p}=await ut({proxyApiUrl:o,chainId:n,accountAddress:t,data:s,domain:e});!l||l.result_type==="Error"||l.result_type==="Warning"?a=W[AlertType.WARNING]:l.result_type==="Malicious"&&(a=W[AlertType.DANGER]),p?.status==="Success"&&(c=gt(r,p.account_summary.exposures),i=bt(p.account_summary.assets_diffs));}catch(l){console.error("processJsonRpcSimulation error",l),a=W[AlertType.WARNING];}return {alert:a,balanceChange:i,tokenApprovals:c}},W={[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 is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};var ue={_format:"hh-sol-artifact-1",contractName:"ERC20",sourceName:"contracts/token/ERC20/ERC20.sol",abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],bytecode:"0x60806040523480156200001157600080fd5b5060405162000aed38038062000aed8339810160408190526200003491620001db565b81516200004990600390602085019062000068565b5080516200005f90600490602084019062000068565b50505062000281565b828054620000769062000245565b90600052602060002090601f0160209004810192826200009a5760008555620000e5565b82601f10620000b557805160ff1916838001178555620000e5565b82800160010185558215620000e5579182015b82811115620000e5578251825591602001919060010190620000c8565b50620000f3929150620000f7565b5090565b5b80821115620000f35760008155600101620000f8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200013657600080fd5b81516001600160401b03808211156200015357620001536200010e565b604051601f8301601f19908116603f011681019082821181831017156200017e576200017e6200010e565b816040528381526020925086838588010111156200019b57600080fd5b600091505b83821015620001bf5785820183015181830184015290820190620001a0565b83821115620001d15760008385830101525b9695505050505050565b60008060408385031215620001ef57600080fd5b82516001600160401b03808211156200020757600080fd5b620002158683870162000124565b935060208501519150808211156200022c57600080fd5b506200023b8582860162000124565b9150509250929050565b600181811c908216806200025a57607f821691505b6020821081036200027b57634e487b7160e01b600052602260045260246000fd5b50919050565b61085c80620002916000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",deployedBytecode:"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461012357806370a082311461013657806395d89b411461015f578063a457c2d714610167578063a9059cbb1461017a578063dd62ed3e1461018d57600080fd5b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100ef57806323b872dd14610101578063313ce56714610114575b600080fd5b6100b66101a0565b6040516100c3919061069a565b60405180910390f35b6100df6100da36600461070b565b610232565b60405190151581526020016100c3565b6002545b6040519081526020016100c3565b6100df61010f366004610735565b61024a565b604051601281526020016100c3565b6100df61013136600461070b565b61026e565b6100f3610144366004610771565b6001600160a01b031660009081526020819052604090205490565b6100b6610290565b6100df61017536600461070b565b61029f565b6100df61018836600461070b565b61031f565b6100f361019b366004610793565b61032d565b6060600380546101af906107c6565b80601f01602080910402602001604051908101604052809291908181526020018280546101db906107c6565b80156102285780601f106101fd57610100808354040283529160200191610228565b820191906000526020600020905b81548152906001019060200180831161020b57829003601f168201915b5050505050905090565b600033610240818585610358565b5060019392505050565b60003361025885828561047c565b6102638585856104f6565b506001949350505050565b600033610240818585610281838361032d565b61028b9190610800565b610358565b6060600480546101af906107c6565b600033816102ad828661032d565b9050838110156103125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102638286868403610358565b6000336102408185856104f6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103ba5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610309565b6001600160a01b03821661041b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610309565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610488848461032d565b905060001981146104f057818110156104e35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610309565b6104f08484848403610358565b50505050565b6001600160a01b03831661055a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610309565b6001600160a01b0382166105bc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610309565b6001600160a01b038316600090815260208190526040902054818110156106345760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610309565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104f0565b600060208083528351808285015260005b818110156106c7578581018301518582016040015282016106ab565b818111156106d9576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461070657600080fd5b919050565b6000806040838503121561071e57600080fd5b610727836106ef565b946020939093013593505050565b60008060006060848603121561074a57600080fd5b610753846106ef565b9250610761602085016106ef565b9150604084013590509250925092565b60006020828403121561078357600080fd5b61078c826106ef565b9392505050565b600080604083850312156107a657600080fd5b6107af836106ef565b91506107bd602084016106ef565b90509250929050565b600181811c908216806107da57607f821691505b6020821081036107fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561082157634e487b7160e01b600052601160045260246000fd5b50019056fea2646970667358221220e7dc257596a973556752e9db5f465b21aad78d068ae819d0395e1f99a95065a964736f6c634300080d0033",linkReferences:{},deployedLinkReferences:{}};var kt=r=>{if(r.data)try{let t=new Interface(ue.abi).parseTransaction({data:r.data,value:r.value}),n=t?.name??t?.fragment?.name;return n&&Vr(n)?n:void 0}catch{return}};function Vr(r){return Object.values(de).includes(r)}var Et=async({request:r,network:e,approvalController:t,proxyApiUrl:n})=>{let{dappInfo:s,params:o}=r,a=it(o);if(!a.success)return console.error("invalid params",a.error),{error:rpcErrors.invalidParams("Transaction params are invalid")};let i=a.data[0];if(!i)return {error:rpcErrors.invalidParams("Transaction params are invalid")};let c=N({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});if(!i.gas||Number(i.gas)<0)try{let v=await ct({transactionParams:{from:i.from,to:i.to,data:i.data,value:i.value},provider:c});i.gas="0x"+v.toString(16);}catch{return {error:rpcErrors.internal("Unable to calculate gas limit")}}if(!i.nonce)try{let v=await lt({from:i.from,provider:c});i.nonce=String(v);}catch{return {error:rpcErrors.internal("Unable to calculate nonce")}}let l=kt(i),{alert:p,balanceChange:f,tokenApprovals:h}=await yt({request:r,proxyApiUrl:n,chainId:e.chainId,params:i,dAppUrl:r.dappInfo.url}),y="Approve Transaction";l==="approve"&&(y="Token Spend Approval");let g={title:y,network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},transactionDetails:{website:new URL(s.url).hostname,from:i.from,to:i.to,data:i.data,type:l},networkFeeSelector:!0,alert:p,balanceChange:f,tokenApprovals:h},m={type:RpcMethod.ETH_SEND_TRANSACTION,account:i.from,data:{type:2,nonce:Number(i.nonce),gasLimit:Number(i.gas),to:i.to,from:i.from,data:i.data,value:i.value,chainId:i.chainId}},b=await t.requestApproval({request:r,displayData:g,signingData:m});if("error"in b)return {error:b.error};let T=await Mr(c,b);return Lr({provider:c,txHash:T,onTransactionConfirmed:t.onTransactionConfirmed,onTransactionReverted:t.onTransactionReverted}),{result:T}},Mr=async(r,e)=>"txHash"in e?e.txHash:await r.send("eth_sendRawTransaction",[e.signedData]),Lr=async({provider:r,txHash:e,onTransactionConfirmed:t,onTransactionReverted:n})=>{(await r.waitForTransaction(e))?.status===1?t(e):n(e);};async function vt(r,e){let t=r.map(async(o,a)=>({index:a,result:await e(o)})),s=(await Promise.allSettled(t)).filter(o=>o.status==="fulfilled").map(o=>o).find(o=>o.value.result);return s?r[s.value.index]:void 0}function te(r,e){return r.then(t=>({id:e,status:"fulfilled",value:t})).catch(t=>({id:e,status:"rejected",reason:t}))}async function re(r){return await Promise.allSettled(r).then(e=>e.reduce((t,n)=>{if(n.status==="fulfilled"){let s=n.value;s.status==="fulfilled"?t[s.id]=s.value:t[s.id]={error:s.reason};}return t},{}))}var St=async({operation:r,isSuccess:e,maxRetries:t=10,backoffPolicy:n=ne.exponential()})=>{let s=0,o=0,a;for(;o<t;){o>0&&await Fr(s);try{let c=await r(o);if(e(c))return c}catch(c){a=c;}s=n(o),o++;}let i=a?`Max retry exceeded. ${a}`:"Max retry exceeded.";throw new Error(i)},ne=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return t=>e*1e3}static constantMs(e){return t=>e}};function Fr(r){return new Promise(e=>setTimeout(e,r))}var we=r=>St({operation:e=>r(e>0),maxRetries:2,backoffPolicy:ne.constant(1),isSuccess:e=>e?.status?.error_code!==429});function Rt(r){let e,t=0;for(e=0;e<r.length;e++)t+=r.charCodeAt(e)*(e+1);return t}function Pe(r){let e,t=0;for(e=0;e<r.length;e++){let n=Rt(r[e]??"");t=t+65027/n;}return (""+t).slice(0,16)}var Ie=r=>new Zodios(`${r}/proxy/coingecko`,[{method:"post",path:"/simple/price",parameters:[{name:"ids",type:"Query",schema:string()},{name:"vs_currencies",type:"Query",schema:string()},{name:"include_market_cap",type:"Query",schema:string().optional()},{name:"include_24hr_vol",type:"Query",schema:string().optional()},{name:"include_24hr_change",type:"Query",schema:string().optional()},{name:"include_last_updated_at",type:"Query",schema:string().optional()}],alias:"simplePrice",response:RawSimplePriceResponseSchema},{method:"post",path:"/simple/token_price/:id",parameters:[{name:"id",type:"Path",schema:string()},{name:"contract_addresses",type:"Query",schema:string().array()},{name:"vs_currencies",type:"Query",schema:string().array()},{name:"include_market_cap",type:"Query",schema:boolean().optional()},{name:"include_24hr_vol",type:"Query",schema:boolean().optional()},{name:"include_24hr_change",type:"Query",schema:boolean().optional()}],alias:"simplePriceByContractAddresses",response:SimplePriceResponseSchema}],{axiosConfig:{headers:{"Content-Type":"application/json"}}});var wt=getBasicCoingeckoHttp(),B,O,j=class{constructor({storage:e,proxyApiUrl:t}){k(this,B,void 0);k(this,O,void 0);D(this,"transformSimplePriceResponse",(e,t=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(s=>{let o=e[s];n[s]={},t.forEach(a=>{n[s]={[a]:{price:o?.[a],change24:o?.[`${a}_24h_change`],vol24:o?.[`${a}_24h_vol`],marketCap:o?.[`${a}_market_cap`]}};});}),n});E(this,B,e),E(this,O,t);}async getSimplePrice({coinIds:e=[],currencies:t=[VsCurrencyType.USD]}){let n,o=`getSimplePrice-${e?`${Pe(e)}-${t.toString()}`:`${t.toString()}`}`;if(n=d(this,B)?.get?.(o),n)return n;try{n=await we(a=>this.simplePrice({coinIds:e,currencies:t,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:a}));}catch{n=void 0;}return d(this,B)?.set?.(o,n),n}async getPricesByAddresses(e,t,n=VsCurrencyType.USD){let s,a=`getPricesWithMarketDataByAddresses-${`${Pe(e)}-${t}-${n}`}`;if(s=d(this,B)?.get?.(a),s)return s;try{s=await we(i=>this.fetchPricesByAddresses({assetPlatformId:t,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch{s=void 0;}return d(this,B)?.set?.(a,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:t,currency:n=VsCurrencyType.USD,useCoingeckoProxy:s=!1}){return s?Ie(d(this,O)).simplePriceByContractAddresses(void 0,{params:{id:e},queries:{contract_addresses:t,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0}}):simpleTokenPrice(wt,{assetPlatformId:e,tokenAddresses:t,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:t=[VsCurrencyType.USD],marketCap:n=!1,vol24:s=!1,change24:o=!1,lastUpdated:a=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let l=await Ie(d(this,O)).simplePrice(void 0,{queries:{ids:e?.join(","),vs_currencies:t.join(","),include_market_cap:String(n),include_24hr_vol:String(s),include_24hr_change:String(o),include_last_updated_at:String(a)}});return this.transformSimplePriceResponse(l,t)}return simplePrice(wt,{coinIds:e,currencies:t,marketCap:n,vol24:s,change24:o,lastUpdated:a,shouldThrow:c})}};B=new WeakMap,O=new WeakMap;var Qr="https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@latest/v1/currencies/usd.min.json",Xr="https://latest.currency-api.pages.dev/v1/currencies/usd.min.json",xt=object({date:string(),usd:record(number())}),Zr=new Zodios(Qr,[{method:"get",path:"",alias:"getExchangeRates",response:xt}]),en=new Zodios(Xr,[{method:"get",path:"",alias:"getExchangeRates",response:xt}]),ye=async()=>{try{return await Zr.getExchangeRates()}catch{return await en.getExchangeRates()}};var S,Y,G,oe,ge=class{constructor({network:e,storage:t,proxyApiUrl:n,customTokens:s}){k(this,S,void 0);k(this,Y,void 0);k(this,G,void 0);k(this,oe,void 0);E(this,S,e),E(this,Y,t),E(this,G,n),E(this,oe,s);}async isNetworkSupported(){return !0}async getNativeBalance({chainId:e,address:t,currency:n}){let s=N({chainId:e,chainName:d(this,S).chainName,rpcUrl:d(this,S).rpcUrl,multiContractAddress:d(this,S).utilityAddresses?.multicall}),o=d(this,S).pricingProviders?.coingecko.nativeTokenId,a=d(this,S).networkToken,i=new j({storage:d(this,Y),proxyApiUrl:d(this,G)}),c=o?await i.getSimplePrice({coinIds:[o],currencies:[n]}):{},l=c?.[o??""]?.[n]?.price??void 0,p=c?.[o??""]?.[n]?.marketCap??void 0,f=c?.[o??""]?.[n]?.vol24??void 0,h=c?.[o??""]?.[n]?.change24??void 0,y=await s.getBalance(t),g=new TokenUnit(y,a.decimals,a.symbol),m=l!==void 0?g.mul(l):void 0;return {...a,coingeckoId:o??"",type:TokenType.NATIVE,balance:y,balanceDisplayValue:g.toDisplay(),balanceInCurrency:m?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:m?.toDisplay({fixedDp:2}),priceInCurrency:l,marketCap:p,vol24:f,change24:h}}async listErc20Balances({chainId:e,address:t,currency:n}){let s=N({chainId:e,chainName:d(this,S).chainName,rpcUrl:d(this,S).rpcUrl,multiContractAddress:d(this,S).utilityAddresses?.multicall}),o=d(this,S).pricingProviders?.coingecko.assetPlatformId,a=d(this,S).pricingProviders?.coingecko.nativeTokenId,i=await pe({chainId:Number(e),proxyApiUrl:d(this,G)}),c=i.map(T=>T.address),l=[...i,...d(this,oe)].filter(rn),p=async T=>{let ee=await new ethers.Contract(T.address,ue.abi,s).balanceOf?.(t)||0n;return {...T,balance:ee}},f=l.map(T=>te(p(T),T.address)),h=await re(f),y=new j({storage:d(this,Y),proxyApiUrl:d(this,G)}),g=o&&await y.getPricesByAddresses(c,o,n)||{},m=Object.keys(h),b={};for(let T=0;T<m.length;T++){let v=m[T];if(v===void 0)continue;let x=h[v];if(x===void 0||"error"in x){b[v]={error:`rpcService:getTokenWithBalance failed: ${x?.error??"unknown error"}`};continue}let ee=g?.[a??""]?.[n]?.price??void 0,tr=g?.[a??""]?.[n]?.marketCap??void 0,rr=g?.[a??""]?.[n]?.vol24??void 0,nr=g?.[a??""]?.[n]?.change24??void 0,Ve=new TokenUnit(x.balance,x.decimals,x.symbol),Ge=ee!==void 0?Ve.mul(ee):void 0;b[x.address.toLowerCase()]={...x,type:TokenType.ERC20,balance:x.balance,balanceDisplayValue:Ve.toDisplay(),balanceInCurrency:Ge?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:Ge?.toDisplay({fixedDp:2}),priceInCurrency:ee,marketCap:tr,change24:nr,vol24:rr};}return b}};S=new WeakMap,Y=new WeakMap,G=new WeakMap,oe=new WeakMap;function rn(r){return r.type===TokenType.ERC20}var Ct=async({addresses:r,currency:e,network:t,proxyApiUrl:n,customTokens:s=[],storage:o,balanceServices:a=[]})=>{let i=t.chainId,c=[...a,new ge({network:t,storage:o,proxyApiUrl:n,customTokens:s})],l=await vt(c,f=>f.isNetworkSupported(t.chainId)),p={};if(l){let f=[],h=[];r.forEach(m=>{f.push(te(l.getNativeBalance({address:m,currency:e.toUpperCase(),chainId:i}),m)),h.push(te(l.listErc20Balances({customTokens:s.filter(an),currency:e.toUpperCase(),chainId:i,address:m,pageSize:100}),m));});let y=await re(f),g=await re(h);Object.keys(y).forEach(m=>{let b=y[m];if(!b||"error"in b){p[m]={error:`getNativeBalance failed: ${b?.error??"unknown error"}`};return}let T=b.symbol;p[m]={[T]:b};}),Object.keys(g).forEach(m=>{let b=g[m];!b||"error"in b&&typeof b.error!="string"?p[m]={...p[m],error:"listErc20Balances failed: unknown error"}:"error"in b&&typeof b.error=="string"?p[m]={...p[m],error:`listErc20Balances failed: ${b.error}`}:p[m]={...p[m],...b};});}else r.forEach(f=>{p[f]={error:"unsupported network"};});return p};function an(r){return r.type===TokenType.ERC20}var on={glacierApiUrl:"https://glacier-api.avax.network",proxyApiUrl:"https://proxy-api.avax.network"},sn={glacierApiUrl:"https://glacier-api-dev.avax.network",proxyApiUrl:"https://proxy-api-dev.avax.network"},At=r=>{switch(r){case Environment.PRODUCTION:return on;case Environment.DEV:return sn}};var _=class extends Error{constructor(){super(...arguments);D(this,"message","Glacier is unhealthy. Try again later.");}},be=class{constructor({glacierApiUrl:e}){D(this,"glacierSdk");D(this,"isGlacierHealthy",!0);D(this,"supportedChainIds",[]);D(this,"isHealthy",()=>this.isGlacierHealthy);this.glacierSdk=new Glacier({BASE:e}),this.getSupportedChainIds().catch(()=>{});}setGlacierToUnhealthy(){this.isGlacierHealthy=!1,setTimeout(()=>{this.isGlacierHealthy=!0;},5*60*1e3);}async isNetworkSupported(e){return (await this.getSupportedChainIds()).some(n=>n===e.toString())}async getSupportedChainIds(){if(this.supportedChainIds.length)return this.supportedChainIds;try{let e=await this.glacierSdk.evmChains.supportedChains({});return this.supportedChainIds=e.chains.map(t=>t.chainId),this.supportedChainIds}catch{return []}}async reindexNft({address:e,chainId:t,tokenId:n}){try{await this.glacierSdk.nfTs.reindexNft({address:e,chainId:t,tokenId:n});}catch(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getTokenDetails({address:e,chainId:t,tokenId:n}){try{return this.glacierSdk.nfTs.getTokenDetails({address:e,chainId:t,tokenId:n})}catch(s){throw s instanceof _&&this.setGlacierToUnhealthy(),s}}async getNativeBalance({chainId:e,address:t,currency:n,coingeckoId:s}){try{let a=(await this.glacierSdk.evmBalances.getNativeBalance({chainId:e.toString(),address:t,currency:n.toLocaleLowerCase()})).nativeTokenBalance,i=new TokenUnit(a.balance,a.decimals,a.symbol),c=a.price?.value,l=c!==void 0?i.mul(c):void 0;return {name:a.name,symbol:a.symbol,decimals:a.decimals,type:TokenType.NATIVE,logoUri:a.logoUri,balance:i.toSubUnit(),balanceDisplayValue:i.toDisplay(),balanceInCurrency:l?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:l?.toDisplay({fixedDp:2}),priceInCurrency:c,coingeckoId:s??""}}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listErc721Balances({chainId:e,address:t,pageSize:n,pageToken:s}){try{return this.glacierSdk.evmBalances.listErc721Balances({chainId:e,address:t,pageSize:n,pageToken:s})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listErc1155Balances({chainId:e,address:t,pageSize:n,pageToken:s}){try{return this.glacierSdk.evmBalances.listErc1155Balances({chainId:e,address:t,pageSize:n,pageToken:s})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listErc20Balances({chainId:e,address:t,currency:n,customTokens:s}){try{let o=[],a;do{let i=await this.glacierSdk.evmBalances.listErc20Balances({chainId:e.toString(),address:t,currency:n.toLocaleLowerCase(),pageSize:100,pageToken:a});o.push(...mn(i.erc20TokenBalances,Number(e))),a=i.nextPageToken;}while(a);return [...pn(s),...o].reduce((i,c)=>({...i,[c.address.toLowerCase()]:c}),{})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}async listTransactions({chainId:e,address:t,pageToken:n,pageSize:s}){try{return this.glacierSdk.evmTransactions.listTransactions({chainId:e,address:t,pageToken:n,pageSize:s})}catch(o){throw o instanceof _&&this.setGlacierToUnhealthy(),o}}},pn=r=>r.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})),mn=(r,e)=>r.map(t=>{let n=new TokenUnit(t.balance,t.decimals,t.symbol),s=n.toDisplay(),o=t.balanceValue?.value.toString(),a=t.price?.value,i=a!==void 0?n.mul(a).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {chainId:e,address:t.address,name:t.name,symbol:t.symbol,decimals:t.decimals,logoUri:t.logoUri,balance:n.toSubUnit(),balanceCurrencyDisplayValue:o,balanceDisplayValue:s,balanceInCurrency:i,priceInCurrency:a,type:TokenType.ERC20}});var Ae=r=>{let e="";e+=`Domain
|
|
15
|
+
`;for(let t in r.domain)e+=` ${t}: ${M(String(r.domain[t]))}
|
|
16
16
|
`;e+=`
|
|
17
17
|
Message
|
|
18
|
-
`;for(let t in
|
|
19
|
-
`;for(let
|
|
20
|
-
`,
|
|
21
|
-
`;})):e+=` ${
|
|
22
|
-
`;}else Array.isArray(
|
|
23
|
-
`,
|
|
24
|
-
`;for(let
|
|
25
|
-
`,
|
|
26
|
-
`;})):e+=` ${
|
|
27
|
-
`;})):e+=` ${t}: ${
|
|
28
|
-
`;return e},
|
|
29
|
-
`,e+=`${
|
|
18
|
+
`;for(let t in r.message)if(typeof r.message[t]=="object"&&!Array.isArray(r.message[t])){e+=` ${t}:
|
|
19
|
+
`;for(let n in r.message[t])Array.isArray(r.message[t][n])?(e+=` ${n}:
|
|
20
|
+
`,r.message[t][n].forEach((s,o)=>{e+=` ${o}: ${M(s)}
|
|
21
|
+
`;})):e+=` ${n}: ${M(String(r.message[t][n]))}
|
|
22
|
+
`;}else Array.isArray(r.message[t])?(e+=` ${t}:
|
|
23
|
+
`,r.message[t].forEach((n,s)=>{e+=` ${s}:
|
|
24
|
+
`;for(let o in n)Array.isArray(n[o])?(e+=` ${o}:
|
|
25
|
+
`,n[o].forEach((a,i)=>{e+=` ${i}: ${M(a)}
|
|
26
|
+
`;})):e+=` ${o}: ${M(String(n[o]))}
|
|
27
|
+
`;})):e+=` ${t}: ${M(String(r.message[t]))}
|
|
28
|
+
`;return e},Dt=r=>{let e="";return r.forEach(t=>{e+=`${t.name}:
|
|
29
|
+
`,e+=`${M(String(t.value))}
|
|
30
30
|
|
|
31
|
-
`;}),e},U=n=>{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 n.split("").map(t=>e[t]||t).join("")};var X=z$1.string().describe("message"),w=z$1.string().describe("address");var It=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([w,X])});var Nt=z$1.object({name:z$1.string(),type:z$1.string()}),O=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Nt)}).catchall(z$1.array(Nt)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),Re=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(),Pe=O.or(Re),At=z$1.union([z$1.string().describe("data string"),O]),_t=z$1.union([z$1.string().describe("data string"),Pe]),Dt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([w,_t])}),Bt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([w,_t])}),Ut=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([w,At])}),Gt=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([w,At])});var Vt=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([X,w]),z$1.tuple([X,w,z$1.string().optional().describe("password")])])});var sa=z$1.discriminatedUnion("method",[Vt,It,Dt,Bt,Ut,Gt]).transform((n,e)=>{let{method:t,params:a}=n;switch(t){case RpcMethod.PERSONAL_SIGN:return {data:a[0],address:a[1],method:t};case RpcMethod.ETH_SIGN:return {data:a[1],address:a[0],method:t};case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:{let s=a[0],r=a[1];if(typeof r!="string")return {data:r,address:s,method:t};try{let o=JSON.parse(r);return {data:Pe.parse(o),address:s,method:t}}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=a[0],r=a[1];if(typeof r!="string")return {data:r,address:s,method:t};try{let o=JSON.parse(r);return {data:O.parse(o),address:s,method:t}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function Mt(n){return sa.safeParse(n)}var Lt=n=>Re.safeParse(n).success,Vs=n=>O.safeParse(n).success;var Ft=n=>{try{let{EIP712Domain:e,...t}=n.types;return TypedDataEncoder.getPayload(n.domain,t,n.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Ht=async({request:n,network:e,approvalController:t,proxyApiUrl:a})=>{let s=Mt({method:n.method,params:n.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.invalidParams("Params are invalid")};let{method:r,data:o,address:i}=s.data,c;(r===RpcMethod.SIGN_TYPED_DATA_V3||r===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Ft(o));let l,d,b,m;if(c&&!c.isValid&&(m={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),r===RpcMethod.ETH_SIGN)l={type:r,account:i,data:o},d=o,b="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(r===RpcMethod.PERSONAL_SIGN)l={type:r,account:i,data:o},d=toUtf8String(o);else if(r===RpcMethod.SIGN_TYPED_DATA||r===RpcMethod.SIGN_TYPED_DATA_V1)l={type:r,account:i,data:o},d=Lt(o)?wt(o):Ee(o);else if(r===RpcMethod.SIGN_TYPED_DATA_V3||r===RpcMethod.SIGN_TYPED_DATA_V4){l={type:r,account:i,data:o};let{types:h,primaryType:T,...k}=o;d=Ee(k);}if(!l)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let p=await lt({request:n,proxyApiUrl:a,accountAddress:i,chainId:e.chainId,data:{method:r,params:n.params},dAppUrl:n.dappInfo.url}),f={title:"Sign Message",dAppInfo:{name:n.dappInfo.name,action:`${n.dappInfo.name} requests you to sign the following message`,logoUri:n.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,messageDetails:d,disclaimer:b,alert:p?.alert??m,balanceChange:p?.balanceChange,tokenApprovals:p?.tokenApprovals},u=await t.requestApproval({request:n,displayData:f,signingData:l});return "error"in u?{error:u.error}:"signedData"in u?{result:u.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Wt=async(n,e)=>{try{return {result:await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3}).send(n.method,n.params)}}catch(t){let a=t.info?.error?.message||t.error?.message||t.message;return {error:rpcErrors.internal(a)}}};var $t=async({accountIndex:n,xpub:e,walletType:t})=>{switch(t){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,n)};case WalletType.LedgerLive:case WalletType.Seedless:{let a=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(a)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${t}`)}};var Y,B,J,jt=class{constructor({approvalController:e,environment:t}){R(this,Y,void 0);R(this,B,void 0);R(this,J,void 0);let{glacierApiUrl:a,proxyApiUrl:s}=Pt(t);P(this,Y,new pe({glacierApiUrl:a})),P(this,B,s),P(this,J,e);}getAddress({accountIndex:e,xpub:t,walletType:a}){return $t({accountIndex:e,xpub:t,walletType:a})}getBalances({addresses:e,network:t,currency:a,customTokens:s,storage:r}){return St({addresses:e,currency:a,network:t,proxyApiUrl:g(this,B),customTokens:s,glacierService:g(this,Y),storage:r})}getManifest(){let e=parseManifest(Ke);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:t,chainName:a,rpcUrl:s,utilityAddresses:r}=e;return Ie({chainId:t,chainName:a,rpcUrl:s,multiContractAddress:r?.multicall})}getTransactionHistory(e){let{network:t,address:a,nextPageToken:s,offset:r}=e,{chainId:o,isTestnet:i,networkToken:c,explorerUrl:l=""}=t;return ze({chainId:o,isTestnet:i,networkToken:c,explorerUrl:l,address:a,nextPageToken:s,offset:r,glacierService:g(this,Y)})}getTokens(e){let{chainId:t}=e;return te({chainId:t,proxyApiUrl:g(this,B)})}async onRpcRequest(e,t){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return mt({request:e,network:t,approvalController:g(this,J),proxyApiUrl:g(this,B)});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 Ht({request:e,network:t,approvalController:g(this,J),proxyApiUrl:g(this,B)});default:return ba(e.method)?Wt(e,t):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};Y=new WeakMap,B=new WeakMap,J=new WeakMap;var ba=n=>n.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(n);
|
|
31
|
+
`;}),e},M=r=>{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 r.split("").map(t=>e[t]||t).join("")};var se=z.string().describe("message"),C=z.string().describe("address");var Ut=z.object({method:z.literal(RpcMethod.ETH_SIGN),params:z.tuple([C,se])});var Vt=z.object({name:z.string(),type:z.string()}),J=z.object({types:z.object({EIP712Domain:z.array(Vt)}).catchall(z.array(Vt)),primaryType:z.string(),domain:z.record(z.any()),message:z.record(z.any())}),De=z.array(z.object({type:z.string(),name:z.string(),value:z.union([z.string(),z.number(),z.boolean(),z.object({}).passthrough(),z.array(z.unknown()),z.null()])})).nonempty(),Be=J.or(De),Gt=z.union([z.string().describe("data string"),J]),Mt=z.union([z.string().describe("data string"),Be]),Lt=z.object({method:z.literal(RpcMethod.SIGN_TYPED_DATA),params:z.tuple([C,Mt])}),Ft=z.object({method:z.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z.tuple([C,Mt])}),Ht=z.object({method:z.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z.tuple([C,Gt])}),$t=z.object({method:z.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z.tuple([C,Gt])});var Wt=z.object({method:z.literal(RpcMethod.PERSONAL_SIGN),params:z.union([z.tuple([se,C]),z.tuple([se,C,z.string().optional().describe("password")])])});var fn=z.discriminatedUnion("method",[Wt,Ut,Lt,Ft,Ht,$t]).transform((r,e)=>{let{method:t,params:n}=r;switch(t){case RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:t};case RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:t};case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:{let s=n[0],o=n[1];if(typeof o!="string")return {data:o,address:s,method:t};try{let a=JSON.parse(o);return {data:Be.parse(a),address:s,method:t}}catch{return e.addIssue({code:z.ZodIssueCode.custom,message:"param is not a valid json"}),z.NEVER}}case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:{let s=n[0],o=n[1];if(typeof o!="string")return {data:o,address:s,method:t};try{let a=JSON.parse(o);return {data:J.parse(a),address:s,method:t}}catch{return e.addIssue({code:z.ZodIssueCode.custom,message:"param is not a valid json"}),z.NEVER}}}});function Ot(r){return fn.safeParse(r)}var jt=r=>De.safeParse(r).success,As=r=>J.safeParse(r).success;var Yt=r=>{try{let{EIP712Domain:e,...t}=r.types;return TypedDataEncoder.getPayload(r.domain,t,r.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Jt=async({request:r,network:e,approvalController:t,proxyApiUrl:n})=>{let s=Ot({method:r.method,params:r.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.invalidParams("Params are invalid")};let{method:o,data:a,address:i}=s.data,c;(o===RpcMethod.SIGN_TYPED_DATA_V3||o===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Yt(a));let l,p,f,h;if(c&&!c.isValid&&(h={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),o===RpcMethod.ETH_SIGN)l={type:o,account:i,data:a},p=a,f="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(o===RpcMethod.PERSONAL_SIGN)l={type:o,account:i,data:a},p=toUtf8String(a);else if(o===RpcMethod.SIGN_TYPED_DATA||o===RpcMethod.SIGN_TYPED_DATA_V1)l={type:o,account:i,data:a},p=jt(a)?Dt(a):Ae(a);else if(o===RpcMethod.SIGN_TYPED_DATA_V3||o===RpcMethod.SIGN_TYPED_DATA_V4){l={type:o,account:i,data:a};let{types:b,primaryType:T,...v}=a;p=Ae(v);}if(!l)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let y=await Tt({request:r,proxyApiUrl:n,accountAddress:i,chainId:e.chainId,data:{method:o,params:r.params},dAppUrl:r.dappInfo.url}),g={title:"Sign Message",dAppInfo:{name:r.dappInfo.name,action:`${r.dappInfo.name} requests you to sign the following message`,logoUri:r.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,messageDetails:p,disclaimer:f,alert:y?.alert??h,balanceChange:y?.balanceChange,tokenApprovals:y?.tokenApprovals},m=await t.requestApproval({request:r,displayData:g,signingData:l});return "error"in m?{error:m.error}:"signedData"in m?{result:m.signedData}:{error:rpcErrors.internal("No signed data returned")}};var qt=async(r,e)=>{try{return {result:await N({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3}).send(r.method,r.params)}}catch(t){let n=t.info?.error?.message||t.error?.message||t.message;return {error:rpcErrors.internal(n)}}};var Kt=async({accountIndex:r,xpub:e,walletType:t})=>{switch(t){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,r)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${t}`)}};var K,Te=class{constructor(e){this.baseUrl=e;k(this,K,[]);}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:t,tokenId:n}){let s=await fetch(`${this.baseUrl}/v1/user/token?id=${t}&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:t}){let n=await fetch(`${this.baseUrl}/v1/user/all_token_list?id=${t}&chain_ids=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:t}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${t}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(d(this,K).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)E(this,K,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return d(this,K)}};K=new WeakMap;var P,ke=class{constructor({proxyApiUrl:e}){k(this,P,void 0);E(this,P,new Te(`${e}/proxy/debank`));}async isNetworkSupported(e){return d(this,P).isNetworkSupported(e)}async getNativeBalance({chainId:e,address:t,currency:n}){if(!isHexString(t))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+t);let o=(await d(this,P).getChainList()).find(b=>b.community_id===e)?.id;if(!o)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await d(this,P).getChainInfo({chainId:o});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=a.native_token_id,c=await d(this,P).getTokenBalance({address:t,chainId:o,tokenId:i}),l=new TokenUnit(c.raw_amount,c.decimals,c.symbol),p=l.toDisplay(),h=(await ye()).usd[n.toLowerCase()],y=h?h*c.price:void 0,g=y?l.mul(y).toDisplay({fixedDp:2}):void 0,m=y?l.mul(y).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:c.name,symbol:c.symbol,decimals:c.decimals,type:TokenType.NATIVE,logoUri:c.logo_url,balance:l.toSubUnit(),balanceDisplayValue:p,balanceInCurrency:m,balanceCurrencyDisplayValue:g,priceInCurrency:y}}async listErc20Balances({chainId:e,address:t,currency:n}){if(!isHexString(t))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let o=(await d(this,P).getChainList()).find(l=>l.community_id===e)?.id;if(!o)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let a=await d(this,P).getChainInfo({chainId:o});if(!a)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let i=await d(this,P).getTokensBalanceOnChain({chainId:o,address:t}),c={};for(let l of i){if(l.id===a.native_token_id)continue;let p=new TokenUnit(l.raw_amount,l.decimals,l.symbol),f=p.toDisplay(),y=(await ye()).usd[n.toLowerCase()],g=y?y*l.price:void 0,m=g?p.mul(g).toDisplay({fixedDp:2}):void 0,b=g?p.mul(g).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:a.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:m,balanceDisplayValue:f,balanceInCurrency:b,priceInCurrency:g,type:TokenType.ERC20};}return c}};P=new WeakMap;var X,le,V,Z,er=class{constructor({approvalController:e,environment:t}){k(this,X,void 0);k(this,le,void 0);k(this,V,void 0);k(this,Z,void 0);let{glacierApiUrl:n,proxyApiUrl:s}=At(t);E(this,X,new be({glacierApiUrl:n})),E(this,le,new ke({proxyApiUrl:s})),E(this,V,s),E(this,Z,e);}getAddress({accountIndex:e,xpub:t,walletType:n}){return Kt({accountIndex:e,xpub:t,walletType:n})}getBalances({addresses:e,network:t,currency:n,customTokens:s,storage:o}){return Ct({addresses:e,currency:n,network:t,proxyApiUrl:d(this,V),customTokens:s,balanceServices:[d(this,X),d(this,le)],storage:o})}getManifest(){let e=parseManifest(st);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:t,chainName:n,rpcUrl:s,utilityAddresses:o}=e;return Le({chainId:t,chainName:n,rpcUrl:s,multiContractAddress:o?.multicall})}getTransactionHistory(e){let{network:t,address:n,nextPageToken:s,offset:o}=e,{chainId:a,isTestnet:i,networkToken:c,explorerUrl:l=""}=t;return ot({chainId:a,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:s,offset:o,glacierService:d(this,X)})}getTokens(e){let{chainId:t}=e;return pe({chainId:t,proxyApiUrl:d(this,V)})}async onRpcRequest(e,t){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return Et({request:e,network:t,approvalController:d(this,Z),proxyApiUrl:d(this,V)});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 Jt({request:e,network:t,approvalController:d(this,Z),proxyApiUrl:d(this,V)});default:return Rn(e.method)?qt(e,t):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};X=new WeakMap,le=new WeakMap,V=new WeakMap,Z=new WeakMap;var Rn=r=>r.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(r);
|
|
32
32
|
|
|
33
|
-
export {
|
|
33
|
+
export { de as ERC20TransactionType, er as EvmModule, rt as NonContractCallTypes, te as addIdToPromise, As as isTypedData, jt as isTypedDataV1, re as settleAllIdPromises };
|
|
34
34
|
//# sourceMappingURL=out.js.map
|
|
35
35
|
//# sourceMappingURL=index.js.map
|