2022-04-08 16:54:43 +02:00
const blacklistedHosts = [
2022-12-19 17:46:07 +01:00
'arbitrum-mainnet.infura.io' ,
2022-04-08 16:54:43 +02:00
'goerli.infura.io' ,
'mainnet.infura.io' ,
2022-09-14 20:26:45 +02:00
'sepolia.infura.io' ,
2022-04-08 16:54:43 +02:00
] ;
2023-07-31 14:48:48 +02:00
const {
mockEmptyStalelistAndHotlist ,
} = require ( './tests/phishing-controller/mocks' ) ;
2023-02-24 16:09:00 +01:00
2023-07-10 18:39:39 +02:00
/ * *
* Setup E2E network mocks .
*
* @ param { object } server - The mock server used for network mocks .
* @ param { Function } testSpecificMock - A function for setting up test - specific network mocks
* @ param { object } options - Network mock options .
* @ param { string } options . chainId - The chain ID used by the default configured network .
* @ returns
* /
async function setupMocking ( server , testSpecificMock , { chainId } ) {
2022-04-08 16:54:43 +02:00
await server . forAnyRequest ( ) . thenPassThrough ( {
beforeRequest : ( req ) => {
const { host } = req . headers ;
if ( blacklistedHosts . includes ( host ) ) {
return {
url : 'http://localhost:8545' ,
} ;
}
return { } ;
} ,
} ) ;
2023-04-19 16:36:23 +02:00
const mockedEndpoint = await testSpecificMock ( server ) ;
// Mocks below this line can be overridden by test-specific mocks
2023-03-08 17:33:27 +01:00
await server
. forPost (
'https://arbitrum-mainnet.infura.io/v3/00000000000000000000000000000000' ,
)
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : {
jsonrpc : '2.0' ,
id : '1675864782845' ,
result : '0xa4b1' ,
} ,
} ;
} ) ;
2022-02-16 15:21:41 +01:00
2022-04-06 10:05:45 +02:00
await server . forPost ( 'https://api.segment.io/v1/batch' ) . thenCallback ( ( ) => {
return {
statusCode : 200 ,
} ;
} ) ;
2022-08-26 01:07:31 +02:00
await server
. forPost ( 'https://sentry.io/api/0000000/envelope/' )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : { } ,
} ;
} ) ;
await server
. forPost ( 'https://sentry.io/api/0000000/store/' )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : { } ,
} ;
} ) ;
2022-07-20 19:39:40 +02:00
await server
. forGet ( 'https://www.4byte.directory/api/v1/signatures/' )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : {
count : 1 ,
next : null ,
previous : null ,
results : [
{
id : 1 ,
created _at : null ,
text _signature : 'deposit()' ,
hex _signature : null ,
bytes _signature : null ,
} ,
] ,
} ,
} ;
} ) ;
2022-03-07 20:23:04 +01:00
await server
2023-07-10 18:39:39 +02:00
. forGet (
` https://gas-api.metaswap.codefi.network/networks/ ${ chainId } /gasPrices ` ,
)
2022-02-16 15:21:41 +01:00
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : {
SafeGasPrice : '1' ,
ProposeGasPrice : '2' ,
FastGasPrice : '3' ,
} ,
} ;
} ) ;
2022-02-22 17:48:12 +01:00
2022-11-16 16:57:47 +01:00
await server
. forGet ( 'https://swap.metaswap.codefi.network/networks/1/token' )
. withQuery ( { address : '0x72c9Fb7ED19D3ce51cea5C56B3e023cd918baaDf' } )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : {
symbol : 'AGLT' ,
type : 'erc20' ,
decimals : '18' ,
address : '0x72c9fb7ed19d3ce51cea5c56b3e023cd918baadf' ,
occurences : 1 ,
aggregators : [ 'dynamic' ] ,
} ,
} ;
} ) ;
2022-03-16 17:06:13 +01:00
await server
. forGet (
2023-07-10 18:39:39 +02:00
` https://gas-api.metaswap.codefi.network/networks/ ${ chainId } /suggestedGasFees ` ,
2022-03-16 17:06:13 +01:00
)
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : {
low : {
suggestedMaxPriorityFeePerGas : '1' ,
suggestedMaxFeePerGas : '20.44436136' ,
minWaitTimeEstimate : 15000 ,
maxWaitTimeEstimate : 30000 ,
} ,
medium : {
suggestedMaxPriorityFeePerGas : '1.5' ,
suggestedMaxFeePerGas : '25.80554517' ,
minWaitTimeEstimate : 15000 ,
maxWaitTimeEstimate : 45000 ,
} ,
high : {
suggestedMaxPriorityFeePerGas : '2' ,
suggestedMaxFeePerGas : '27.277766977' ,
minWaitTimeEstimate : 15000 ,
maxWaitTimeEstimate : 60000 ,
} ,
estimatedBaseFee : '19.444436136' ,
networkCongestion : 0.14685 ,
latestPriorityFeeRange : [ '0.378818859' , '6.555563864' ] ,
historicalPriorityFeeRange : [ '0.1' , '248.262969261' ] ,
historicalBaseFeeRange : [ '14.146999781' , '28.825256275' ] ,
priorityFeeTrend : 'down' ,
baseFeeTrend : 'up' ,
} ,
} ;
} ) ;
2022-04-06 10:05:45 +02:00
await server
. forGet ( 'https://swap.metaswap.codefi.network/featureFlags' )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : [
{
ethereum : {
2022-09-29 18:03:38 +02:00
fallbackToV1 : false ,
2022-04-06 10:05:45 +02:00
mobileActive : true ,
extensionActive : true ,
} ,
bsc : {
2022-09-29 18:03:38 +02:00
fallbackToV1 : false ,
2022-04-06 10:05:45 +02:00
mobileActive : true ,
extensionActive : true ,
} ,
polygon : {
2022-09-29 18:03:38 +02:00
fallbackToV1 : false ,
2022-04-06 10:05:45 +02:00
mobileActive : true ,
extensionActive : true ,
} ,
avalanche : {
2022-09-29 18:03:38 +02:00
fallbackToV1 : false ,
2022-04-06 10:05:45 +02:00
mobileActive : true ,
extensionActive : true ,
} ,
smartTransactions : {
mobileActive : false ,
extensionActive : false ,
} ,
updated _at : '2022-03-17T15:54:00.360Z' ,
} ,
] ,
} ;
} ) ;
2022-04-04 17:02:29 +02:00
await server
2023-07-10 18:39:39 +02:00
. forGet ( ` https://token-api.metaswap.codefi.network/tokens/ ${ chainId } ` )
2022-04-04 17:02:29 +02:00
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : [
{
address : '0x0d8775f648430679a709e98d2b0cb6250d2887ef' ,
symbol : 'BAT' ,
decimals : 18 ,
name : 'Basic Attention Token' ,
iconUrl :
'https://assets.coingecko.com/coins/images/677/thumb/basic-attention-token.png?1547034427' ,
aggregators : [
'aave' ,
'bancor' ,
'coinGecko' ,
'oneInch' ,
'paraswap' ,
'pmm' ,
'zapper' ,
'zerion' ,
'zeroEx' ,
] ,
occurrences : 9 ,
} ,
] ,
} ;
} ) ;
2022-11-16 16:57:47 +01:00
await server
. forGet ( 'https://swap.metaswap.codefi.network/networks/1/tokens' )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : [
{
name : 'Ethereum' ,
symbol : 'ETH' ,
decimals : 18 ,
type : 'native' ,
iconUrl :
'https://token.metaswap.codefi.network/assets/nativeCurrencyLogos/ethereum.svg' ,
coingeckoId : 'ethereum' ,
address : '0x0000000000000000000000000000000000000000' ,
occurrences : 100 ,
aggregators : [ ] ,
} ,
{
address : '0x6b175474e89094c44da98b954eedeac495271d0f' ,
symbol : 'DAI' ,
decimals : 18 ,
name : 'Dai Stablecoin' ,
iconUrl :
'https://crypto.com/price/coin-data/icon/DAI/color_icon.png' ,
type : 'erc20' ,
aggregators : [
'aave' ,
'bancor' ,
'cmc' ,
'cryptocom' ,
'coinGecko' ,
'oneInch' ,
'pmm' ,
'zerion' ,
'lifi' ,
] ,
occurrences : 9 ,
fees : {
'0xb0da5965d43369968574d399dbe6374683773a65' : 0 ,
} ,
storage : {
balance : 2 ,
} ,
} ,
{
address : '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' ,
symbol : 'USDC' ,
decimals : 6 ,
name : 'USD Coin' ,
iconUrl :
'https://crypto.com/price/coin-data/icon/USDC/color_icon.png' ,
type : 'erc20' ,
aggregators : [
'aave' ,
'bancor' ,
'cryptocom' ,
'coinGecko' ,
'oneInch' ,
'pmm' ,
'zerion' ,
'lifi' ,
] ,
occurrences : 8 ,
fees : { } ,
storage : {
balance : 9 ,
} ,
} ,
{
address : '0xc6bdb96e29c38dc43f014eed44de4106a6a8eb5f' ,
symbol : 'INUINU' ,
decimals : 18 ,
name : 'Inu Inu' ,
iconUrl :
'https://assets.coingecko.com/coins/images/26391/thumb/logo_square_200.png?1657752596' ,
type : 'erc20' ,
aggregators : [ 'coinGecko' ] ,
occurrences : 1 ,
} ,
] ,
} ;
} ) ;
await server
. forGet ( 'https://swap.metaswap.codefi.network/networks/1/topAssets' )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : [
{
address : '0x0000000000000000000000000000000000000000' ,
symbol : 'ETH' ,
} ,
{
address : '0x6b175474e89094c44da98b954eedeac495271d0f' ,
symbol : 'DAI' ,
} ,
{
address : '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' ,
symbol : 'USDC' ,
} ,
{
address : '0xdac17f958d2ee523a2206206994597c13d831ec7' ,
symbol : 'USDT' ,
} ,
] ,
} ;
} ) ;
2022-07-19 17:22:38 +02:00
await server
2023-07-10 18:39:39 +02:00
. forGet ( ` https://token-api.metaswap.codefi.network/token/ ${ chainId } ` )
2022-07-19 17:22:38 +02:00
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : { } ,
} ;
} ) ;
2023-03-07 16:51:15 +01:00
// It disables loading of token icons, e.g. this URL: https://static.metafi.codefi.network/api/v1/tokenIcons/1337/0x0000000000000000000000000000000000000000.png
2023-07-10 18:39:39 +02:00
const tokenIconRegex = new RegExp (
` ^https: \\ / \\ /static \\ .metafi \\ .codefi \\ .network \\ /api \\ /vi \\ /tokenIcons \\ / ${ chainId } \\ /.* \\ .png ` ,
'u' ,
) ;
await server . forGet ( tokenIconRegex ) . thenCallback ( ( ) => {
return {
statusCode : 200 ,
} ;
} ) ;
2022-07-18 16:43:30 +02:00
2022-08-11 17:02:19 +02:00
await server
. forGet ( 'https://min-api.cryptocompare.com/data/price' )
. withQuery ( { fsym : 'ETH' , tsyms : 'USD' } )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : {
USD : '1700' ,
} ,
} ;
} ) ;
2023-07-31 14:48:48 +02:00
await mockEmptyStalelistAndHotlist ( server ) ;
2023-03-08 17:33:27 +01:00
await server
. forPost ( 'https://customnetwork.com/api/customRPC' )
. thenCallback ( ( ) => {
return {
statusCode : 200 ,
json : {
jsonrpc : '2.0' ,
id : '1675864782845' ,
result : '0x122' ,
} ,
} ;
} ) ;
2023-04-19 16:36:23 +02:00
return mockedEndpoint ;
2022-02-16 15:21:41 +01:00
}
module . exports = { setupMocking } ;