1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-29 07:16:36 +01:00
metamask-extension/test/e2e/mock-e2e.js
Mark Stacey 2ccc1977bf
Update the PhishingController to v2 and update phishing warning page (#17835)
The PhishingController has been updated to v2. This release should
dramatically reduce network traffic and double the update speed of the
phishing list.

This was accomplished by combining both of our phishing configurations
into one list (the "stalelist"), then creating a separate list of the
changes just the past few days (the "hotlist"). Now users will download
a smaller list more frequently (every 30 minutes rather than every
hour), whereas the full list is only updated every 4 days.

The combined configuration means that we no longer know which list was
responsible for each block. The phishing warning page has been updated
to dynamically look this information up, to ensure users are still
directed to the correct place to dispute a block. This update to the
phishing warning page also includes the recent redesign.
2023-02-24 11:39:00 -03:30

378 lines
9.5 KiB
JavaScript

const blacklistedHosts = [
'arbitrum-mainnet.infura.io',
'goerli.infura.io',
'mainnet.infura.io',
'sepolia.infura.io',
];
const HOTLIST_URL =
'https://static.metafi.codefi.network/api/v1/lists/hotlist.json';
const STALELIST_URL =
'https://static.metafi.codefi.network/api/v1/lists/stalelist.json';
const emptyHotlist = [];
const emptyStalelist = {
version: 2,
tolerance: 2,
fuzzylist: [],
allowlist: [],
blocklist: [],
lastUpdated: 0,
};
async function setupMocking(server, testSpecificMock) {
await server.forAnyRequest().thenPassThrough({
beforeRequest: (req) => {
const { host } = req.headers;
if (blacklistedHosts.includes(host)) {
return {
url: 'http://localhost:8545',
};
}
return {};
},
});
await server.forPost('https://api.segment.io/v1/batch').thenCallback(() => {
return {
statusCode: 200,
};
});
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: {},
};
});
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,
},
],
},
};
});
await server
.forGet('https://gas-api.metaswap.codefi.network/networks/1/gasPrices')
.thenCallback(() => {
return {
statusCode: 200,
json: {
SafeGasPrice: '1',
ProposeGasPrice: '2',
FastGasPrice: '3',
},
};
});
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'],
},
};
});
await server
.forGet(
'https://gas-api.metaswap.codefi.network/networks/1/suggestedGasFees',
)
.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',
},
};
});
await server
.forGet('https://swap.metaswap.codefi.network/featureFlags')
.thenCallback(() => {
return {
statusCode: 200,
json: [
{
ethereum: {
fallbackToV1: false,
mobileActive: true,
extensionActive: true,
},
bsc: {
fallbackToV1: false,
mobileActive: true,
extensionActive: true,
},
polygon: {
fallbackToV1: false,
mobileActive: true,
extensionActive: true,
},
avalanche: {
fallbackToV1: false,
mobileActive: true,
extensionActive: true,
},
smartTransactions: {
mobileActive: false,
extensionActive: false,
},
updated_at: '2022-03-17T15:54:00.360Z',
},
],
};
});
await server
.forGet('https://token-api.metaswap.codefi.network/tokens/1337')
.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,
},
],
};
});
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',
},
],
};
});
await server
.forGet('https://token-api.metaswap.codefi.network/token/0x539')
.thenCallback(() => {
return {
statusCode: 200,
json: {},
};
});
// It disables loading of token icons, e.g. this URL: https://static.metaswap.codefi.network/api/v1/tokenIcons/1337/0x0000000000000000000000000000000000000000.png
await server
.forGet(
/^https:\/\/static\.metaswap\.codefi\.network\/api\/v1\/tokenIcons\/1337\/.*\.png/u,
)
.thenCallback(() => {
return {
statusCode: 200,
};
});
await server
.forGet('https://min-api.cryptocompare.com/data/price')
.withQuery({ fsym: 'ETH', tsyms: 'USD' })
.thenCallback(() => {
return {
statusCode: 200,
json: {
USD: '1700',
},
};
});
testSpecificMock(server);
// Mocks below this line can be overridden by test-specific mocks
await server.forGet(STALELIST_URL).thenCallback(() => {
return {
statusCode: 200,
json: emptyStalelist,
};
});
await server.forGet(HOTLIST_URL).thenCallback(() => {
return {
statusCode: 200,
json: emptyHotlist,
};
});
}
module.exports = { setupMocking };