From dd35f12a75c56795f015cc76feb8087ed8b44b32 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Fri, 8 Mar 2024 10:43:50 +0000 Subject: [PATCH] chore: refactor out CHAIN_SPEC_URL constant --- app/scripts/metamask-controller.js | 23 +++++++++++++------ shared/constants/network.ts | 1 + ui/hooks/useIsOriginalNativeTokenSymbol.js | 7 ++++-- .../confirmation/confirmation.js | 3 ++- .../networks-form/networks-form.js | 3 ++- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 2d00c602f755..1010f7457ea7 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -168,6 +168,7 @@ import { } from '../../shared/constants/swaps'; import { CHAIN_IDS, + CHAIN_SPEC_URL, NETWORK_TYPES, TEST_NETWORK_TICKER_MAP, NetworkStatus, @@ -201,7 +202,10 @@ import { } from '../../shared/constants/metametrics'; import { LOG_EVENT } from '../../shared/constants/logs'; -import { getStorageItem, setStorageItem } from '../../shared/lib/storage-helpers'; +import { + getStorageItem, + setStorageItem, +} from '../../shared/lib/storage-helpers'; import { getTokenIdParam, fetchTokenBalance, @@ -5410,15 +5414,20 @@ export default class MetamaskController extends EventEmitter { } /** - * The chain list is fetched live at runtime, falling back to a cache. - * This preseeds the cache at startup with a static list provided at build. - */ + * The chain list is fetched live at runtime, falling back to a cache. + * This preseeds the cache at startup with a static list provided at build. + */ async initializeChainlist() { - const cacheKey = 'cachedFetch:https://chainid.network/chains.json'; - if (await getStorageItem(cacheKey)) { + const cacheKey = `cachedFetch:${CHAIN_SPEC_URL}`; + const { cachedResponse } = (await getStorageItem(cacheKey)) || {}; + if (cachedResponse) { return; } - await setStorage(cacheKey, rawChainData()); + await setStorageItem(cacheKey, { + cachedResponse: rawChainData(), + // Cached value is immediately invalidated + cachedTime: 0, + }); } /** diff --git a/shared/constants/network.ts b/shared/constants/network.ts index 0e8ea20b406c..12d6140b6e06 100644 --- a/shared/constants/network.ts +++ b/shared/constants/network.ts @@ -108,6 +108,7 @@ export const NETWORK_NAMES = { HOMESTEAD: 'homestead', }; +export const CHAIN_SPEC_URL = 'https://chainid.network/chains.json'; /** * An object containing all of the chain ids for networks both built in and * those that we have added custom code to support our feature set. diff --git a/ui/hooks/useIsOriginalNativeTokenSymbol.js b/ui/hooks/useIsOriginalNativeTokenSymbol.js index 1dd7584c3134..c31a1b0f702e 100644 --- a/ui/hooks/useIsOriginalNativeTokenSymbol.js +++ b/ui/hooks/useIsOriginalNativeTokenSymbol.js @@ -1,7 +1,10 @@ import { useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; import fetchWithCache from '../../shared/lib/fetch-with-cache'; -import { CHAIN_ID_TO_CURRENCY_SYMBOL_MAP } from '../../shared/constants/network'; +import { + CHAIN_ID_TO_CURRENCY_SYMBOL_MAP, + CHAIN_SPEC_URL, +} from '../../shared/constants/network'; import { DAY } from '../../shared/constants/time'; import { useSafeChainsListValidationSelector } from '../selectors'; @@ -25,7 +28,7 @@ export function useIsOriginalNativeTokenSymbol(chainId, ticker, type) { } const safeChainsList = await fetchWithCache({ - url: 'https://chainid.network/chains.json', + url: CHAIN_SPEC_URL, allowStale: true, cacheOptions: { cacheRefreshTime: DAY }, functionName: 'getSafeChainsList', diff --git a/ui/pages/confirmations/confirmation/confirmation.js b/ui/pages/confirmations/confirmation/confirmation.js index 843d30e6d2e6..96c0ea44c5fa 100644 --- a/ui/pages/confirmations/confirmation/confirmation.js +++ b/ui/pages/confirmations/confirmation/confirmation.js @@ -15,6 +15,7 @@ import log from 'loglevel'; ///: BEGIN:ONLY_INCLUDE_IF(snaps) import { ApprovalType } from '@metamask/controller-utils'; ///: END:ONLY_INCLUDE_IF +import { CHAIN_SPEC_URL } from '../../../../shared/constants/network'; import fetchWithCache from '../../../../shared/lib/fetch-with-cache'; import Box from '../../../components/ui/box'; import MetaMaskTemplateRenderer from '../../../components/app/metamask-template-renderer'; @@ -373,7 +374,7 @@ export default function ConfirmationPage({ try { if (useSafeChainsListValidation) { const response = await fetchWithCache({ - url: 'https://chainid.network/chains.json', + url: CHAIN_SPEC_URL, allowStale: true, cacheOptions: { cacheRefreshTime: DAY }, functionName: 'getSafeChainsList', diff --git a/ui/pages/settings/networks-tab/networks-form/networks-form.js b/ui/pages/settings/networks-tab/networks-form/networks-form.js index c0afd39ffde8..915a0051cf40 100644 --- a/ui/pages/settings/networks-tab/networks-form/networks-form.js +++ b/ui/pages/settings/networks-tab/networks-form/networks-form.js @@ -19,6 +19,7 @@ import { import { BUILT_IN_NETWORKS, CHAIN_IDS, + CHAIN_SPEC_URL, FEATURED_RPCS, infuraProjectId, } from '../../../../../shared/constants/network'; @@ -133,7 +134,7 @@ const NetworksForm = ({ async function fetchChainList() { try { const chainList = await fetchWithCache({ - url: 'https://chainid.network/chains.json', + url: CHAIN_SPEC_URL, functionName: 'getSafeChainsList', allowStale: true, });