mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-28 23:06:37 +01:00
431712aaf9
The legacy gas API is still useful for BSC, which is a network our APIs support that is not EIP-1559 compatible. The legacy gas API will now be used for BSC prior to using RPC methods as a fallback. This brings extension closer in alignment with mobile, which also uses the legacy gas API for BSC. The E2E network mock function has been updated to use a variable for the initial test network. This made it easier to write the e2e test for the BSC case.
419 lines
11 KiB
JavaScript
419 lines
11 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,
|
|
};
|
|
|
|
/**
|
|
* 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 }) {
|
|
await server.forAnyRequest().thenPassThrough({
|
|
beforeRequest: (req) => {
|
|
const { host } = req.headers;
|
|
if (blacklistedHosts.includes(host)) {
|
|
return {
|
|
url: 'http://localhost:8545',
|
|
};
|
|
}
|
|
return {};
|
|
},
|
|
});
|
|
|
|
const mockedEndpoint = await testSpecificMock(server);
|
|
|
|
// Mocks below this line can be overridden by test-specific mocks
|
|
|
|
await server
|
|
.forPost(
|
|
'https://arbitrum-mainnet.infura.io/v3/00000000000000000000000000000000',
|
|
)
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {
|
|
jsonrpc: '2.0',
|
|
id: '1675864782845',
|
|
result: '0xa4b1',
|
|
},
|
|
};
|
|
});
|
|
|
|
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/${chainId}/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/${chainId}/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/${chainId}`)
|
|
.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/${chainId}`)
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {},
|
|
};
|
|
});
|
|
|
|
// It disables loading of token icons, e.g. this URL: https://static.metafi.codefi.network/api/v1/tokenIcons/1337/0x0000000000000000000000000000000000000000.png
|
|
const tokenIconRegex = new RegExp(
|
|
`^https:\\/\\/static\\.metafi\\.codefi\\.network\\/api\\/vi\\/tokenIcons\\/${chainId}\\/.*\\.png`,
|
|
'u',
|
|
);
|
|
await server.forGet(tokenIconRegex).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',
|
|
},
|
|
};
|
|
});
|
|
|
|
await server.forGet(STALELIST_URL).thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: emptyStalelist,
|
|
};
|
|
});
|
|
|
|
await server.forGet(HOTLIST_URL).thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: emptyHotlist,
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forPost('https://customnetwork.com/api/customRPC')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {
|
|
jsonrpc: '2.0',
|
|
id: '1675864782845',
|
|
result: '0x122',
|
|
},
|
|
};
|
|
});
|
|
|
|
return mockedEndpoint;
|
|
}
|
|
|
|
module.exports = { setupMocking };
|