diff --git a/src/logic/currentSession/store/actions/loadCurrentSessionFromStorage.ts b/src/logic/currentSession/store/actions/loadCurrentSessionFromStorage.ts index 2d9bcf3be9..6cffc5cd03 100644 --- a/src/logic/currentSession/store/actions/loadCurrentSessionFromStorage.ts +++ b/src/logic/currentSession/store/actions/loadCurrentSessionFromStorage.ts @@ -5,8 +5,8 @@ import { getCurrentSessionFromStorage } from 'src/logic/currentSession/utils' const loadCurrentSessionFromStorage = () => - async (dispatch: Dispatch): Promise => { - const currentSession = await getCurrentSessionFromStorage() + (dispatch: Dispatch): void => { + const currentSession = getCurrentSessionFromStorage() dispatch(loadCurrentSession(currentSession)) } diff --git a/src/logic/currentSession/utils/index.ts b/src/logic/currentSession/utils/index.ts index 2680648529..be7311153c 100644 --- a/src/logic/currentSession/utils/index.ts +++ b/src/logic/currentSession/utils/index.ts @@ -3,13 +3,9 @@ import { CurrentSessionState } from 'src/logic/currentSession/store/reducer/curr const CURRENT_SESSION_STORAGE_KEY = 'CURRENT_SESSION' -export const getCurrentSessionFromStorage = async (): Promise => +export const getCurrentSessionFromStorage = (): CurrentSessionState | undefined => loadFromStorage(CURRENT_SESSION_STORAGE_KEY) -export const saveCurrentSessionToStorage = async (currentSession: CurrentSessionState): Promise => { - try { - await saveToStorage(CURRENT_SESSION_STORAGE_KEY, currentSession) - } catch (err) { - console.error('Error storing currentSession in localStorage', err) - } +export const saveCurrentSessionToStorage = (currentSession: CurrentSessionState): void => { + saveToStorage(CURRENT_SESSION_STORAGE_KEY, currentSession) } diff --git a/src/logic/safe/hooks/useLocalSafes.tsx b/src/logic/safe/hooks/useLocalSafes.tsx index d5a9464000..8a5d9e3012 100644 --- a/src/logic/safe/hooks/useLocalSafes.tsx +++ b/src/logic/safe/hooks/useLocalSafes.tsx @@ -21,8 +21,8 @@ const useLocalSafes = (): LocalSafes => { // Reload added Safes from the localStorage when addedAddresses changes useEffect(() => { const getLocalSafes = () => { - getChains().forEach(async ({ chainId }) => { - const localSafe = await getLocalNetworkSafesById(chainId) + getChains().forEach(({ chainId }) => { + const localSafe = getLocalNetworkSafesById(chainId) setLocalSafes((prevSafes) => ({ ...prevSafes, ...(localSafe && { [chainId]: localSafe }), diff --git a/src/logic/safe/store/actions/fetchSafe.ts b/src/logic/safe/store/actions/fetchSafe.ts index c21e0d7bd2..0c3fc1a43c 100644 --- a/src/logic/safe/store/actions/fetchSafe.ts +++ b/src/logic/safe/store/actions/fetchSafe.ts @@ -29,13 +29,11 @@ export const buildSafe = async (safeAddress: string): Promise = // setting `loadedViaUrl` to false, as `buildSafe` is called on safe Load or Open flows const safeInfo: Partial = { address, loadedViaUrl: false } - const [remote, local] = await Promise.all([ - getSafeInfo(safeAddress).catch((err) => { - err.log() - return null - }), - getLocalSafe(safeAddress), - ]) + const local = getLocalSafe(safeAddress) + const remote = await getSafeInfo(safeAddress).catch((err) => { + err.log() + return null + }) // remote (client-gateway) const remoteSafeInfo = remote ? await extractRemoteSafeInfo(remote) : {} diff --git a/src/logic/safe/store/actions/loadSafesFromStorage.ts b/src/logic/safe/store/actions/loadSafesFromStorage.ts index 65fd31ca52..b8805b0438 100644 --- a/src/logic/safe/store/actions/loadSafesFromStorage.ts +++ b/src/logic/safe/store/actions/loadSafesFromStorage.ts @@ -5,16 +5,14 @@ import { addOrUpdateSafe } from './addOrUpdateSafe' const loadSafesFromStorage = () => - async (dispatch: Dispatch): Promise => { - const safes = await getLocalSafes() + (dispatch: Dispatch): void => { + const safes = getLocalSafes() if (safes) { safes.forEach((safeProps) => { dispatch(addOrUpdateSafe(buildSafe(safeProps))) }) } - - return Promise.resolve() } export default loadSafesFromStorage diff --git a/src/logic/safe/store/middleware/notificationsMiddleware.ts b/src/logic/safe/store/middleware/notificationsMiddleware.ts index 5e5e1f5e81..2b7a582e0c 100644 --- a/src/logic/safe/store/middleware/notificationsMiddleware.ts +++ b/src/logic/safe/store/middleware/notificationsMiddleware.ts @@ -28,13 +28,13 @@ const watchedActions = [ADD_OR_UPDATE_SAFE, ADD_QUEUED_TRANSACTIONS, ADD_HISTORY const LAST_TIME_USED_LOGGED_IN_ID = 'LAST_TIME_USED_LOGGED_IN_ID' -const sendAwaitingTransactionNotification = async ( +const sendAwaitingTransactionNotification = ( dispatch, safeAddress, awaitingTxsSubmissionDateList, notificationKey, notificationClickedCb, -) => { +): void => { if (!dispatch || !safeAddress || !awaitingTxsSubmissionDateList || !notificationKey) { return } @@ -42,7 +42,7 @@ const sendAwaitingTransactionNotification = async ( return } - let lastTimeUserLoggedInForSafes = (await loadFromStorage>(LAST_TIME_USED_LOGGED_IN_ID)) || {} + let lastTimeUserLoggedInForSafes = loadFromStorage>(LAST_TIME_USED_LOGGED_IN_ID) || {} const lastTimeUserLoggedIn = lastTimeUserLoggedInForSafes[safeAddress] ? lastTimeUserLoggedInForSafes[safeAddress] : null @@ -63,7 +63,7 @@ const sendAwaitingTransactionNotification = async ( ...lastTimeUserLoggedInForSafes, [safeAddress]: new Date(), } - await saveToStorage(LAST_TIME_USED_LOGGED_IN_ID, lastTimeUserLoggedInForSafes) + saveToStorage(LAST_TIME_USED_LOGGED_IN_ID, lastTimeUserLoggedInForSafes) } // any/AnyAction used as our Redux state is not typed @@ -121,7 +121,7 @@ const notificationsMiddleware = ) } - await sendAwaitingTransactionNotification( + sendAwaitingTransactionNotification( dispatch, safeAddress, awaitingTxsSubmissionDateList, diff --git a/src/logic/safe/utils/mocks/remoteConfig.json b/src/logic/safe/utils/mocks/remoteConfig.json index f99107921b..b11063378e 100644 --- a/src/logic/safe/utils/mocks/remoteConfig.json +++ b/src/logic/safe/utils/mocks/remoteConfig.json @@ -64,62 +64,6 @@ "SPENDING_LIMIT" ] }, - { - "transactionService": "https://safe-transaction.avalanche.gnosis.io", - "chainId": "43114", - "chainName": "Avalanche", - "shortName": "Avalanche", - "l2": true, - "description": "", - "rpcUri": { - "authentication": "NO_AUTHENTICATION", - "value": "https://api.avax.network/ext/bc/C/rpc" - }, - "safeAppsRpcUri": { - "authentication": "NO_AUTHENTICATION", - "value": "https://api.avax.network/ext/bc/C/rpc" - }, - "publicRpcUri": { - "authentication": "NO_AUTHENTICATION", - "value": "https://api.avax.network/ext/bc/C/rpc" - }, - "blockExplorerUriTemplate": { - "address": "https://snowtrace.io/address/{{address}}", - "txHash": "https://snowtrace.io/tx/{{txHash}}", - "api": "https://api.snowtrace.io/api?module={{module}}&action={{action}}&address={{address}}&apiKey={{apiKey}}" - }, - "nativeCurrency": { - "name": "Avalanche", - "symbol": "AVAX", - "decimals": 18, - "logoUri": "https://safe-transaction-assets.staging.gnosisdev.com/chains/43114/currency_logo.png" - }, - "theme": { - "textColor": "#ffffff", - "backgroundColor": "#e84142" - }, - "gasPrice": [], - "disabledWallets": [ - "authereum", - "fortmatic", - "keystone", - "lattice", - "opera", - "operaTouch", - "portis", - "torus", - "trezor", - "trust" - ], - "features": [ - "CONTRACT_INTERACTION", - "DOMAIN_LOOKUP", - "EIP1559", - "ERC721", - "SAFE_APPS", - "SAFE_TX_GAS_OPTIONAL" - ] - }, { "transactionService": "https://safe-transaction-polygon.staging.gnosisdev.com", "chainId": "137", @@ -168,7 +112,6 @@ "fortmatic", "keystone", "lattice", - "ledger", "opera", "operaTouch", "portis", diff --git a/src/logic/safe/utils/safeStorage.ts b/src/logic/safe/utils/safeStorage.ts index 708c730d35..8668b579df 100644 --- a/src/logic/safe/utils/safeStorage.ts +++ b/src/logic/safe/utils/safeStorage.ts @@ -6,33 +6,29 @@ export const SAFES_KEY = 'SAFES' export type StoredSafes = Record -export const loadStoredSafes = (): Promise => { +export const loadStoredSafes = (): StoredSafes | undefined => { return loadFromStorage(SAFES_KEY) } -export const loadStoredNetworkSafeById = (id: ChainId): Promise => { +export const loadStoredNetworkSafeById = (id: ChainId): StoredSafes | undefined => { return loadFromStorage(SAFES_KEY, getStoragePrefix(id)) } -export const saveSafes = async (safes: StoredSafes): Promise => { - try { - await saveToStorage(SAFES_KEY, safes) - } catch (err) { - console.error('Error storing Safe info in localstorage', err) - } +export const saveSafes = (safes: StoredSafes): void => { + saveToStorage(SAFES_KEY, safes) } -export const getLocalSafes = async (): Promise => { - const storedSafes = await loadStoredSafes() +export const getLocalSafes = (): SafeRecordProps[] | undefined => { + const storedSafes = loadStoredSafes() return storedSafes ? Object.values(storedSafes) : undefined } -export const getLocalNetworkSafesById = async (id: ChainId): Promise => { - const storedSafes = await loadStoredNetworkSafeById(id) +export const getLocalNetworkSafesById = (id: ChainId): SafeRecordProps[] | undefined => { + const storedSafes = loadStoredNetworkSafeById(id) return storedSafes ? Object.values(storedSafes) : undefined } -export const getLocalSafe = async (safeAddress: string): Promise => { - const storedSafes = await loadStoredSafes() +export const getLocalSafe = (safeAddress: string): SafeRecordProps | undefined => { + const storedSafes = loadStoredSafes() return storedSafes?.[safeAddress] } diff --git a/src/logic/wallets/transactionDataCheck/index.ts b/src/logic/wallets/transactionDataCheck/index.ts index b4a03bbfbb..283bfbdd67 100644 --- a/src/logic/wallets/transactionDataCheck/index.ts +++ b/src/logic/wallets/transactionDataCheck/index.ts @@ -4,9 +4,9 @@ import contractDataImage from './images/contractData.png' const USER_ENABLED_LEDGER_TX_DATA = 'USER_ENABLED_LEDGER_TX_DATA' function transactionDataCheck(): any { - return async (stateAndHelpers) => { + return (stateAndHelpers) => { const { wallet } = stateAndHelpers - const isTransactionDataEnabled = await loadFromStorage(USER_ENABLED_LEDGER_TX_DATA) + const isTransactionDataEnabled = loadFromStorage(USER_ENABLED_LEDGER_TX_DATA) if (wallet && wallet.name.toUpperCase() === WALLET_PROVIDER.LEDGER && !isTransactionDataEnabled) { return { heading: 'Allow Transaction Data', // edit modal heading here @@ -14,7 +14,7 @@ function transactionDataCheck(): any { eventCode: 'allowTransactionData', button: { text: 'Done', - onclick: async () => await saveToStorage(USER_ENABLED_LEDGER_TX_DATA, true), + onclick: () => saveToStorage(USER_ENABLED_LEDGER_TX_DATA, true), }, icon: ` diff --git a/src/routes/CreateSafePage/CreateSafePage.tsx b/src/routes/CreateSafePage/CreateSafePage.tsx index 0c8bdd4bd4..63712f1cc1 100644 --- a/src/routes/CreateSafePage/CreateSafePage.tsx +++ b/src/routes/CreateSafePage/CreateSafePage.tsx @@ -46,9 +46,15 @@ function CreateSafePage(): ReactElement { const provider = !!providerName && !isWrongNetwork useEffect(() => { - async function checkIfSafeIsPendingToBeCreated() { + const checkIfSafeIsPendingToBeCreated = async (): Promise => { setIsLoading(true) - const safePendingToBeCreated = (await loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY)) as CreateSafeFormValues + + // Removing the await completely is breaking the tests for a mysterious reason + // @TODO: remove the promise + const safePendingToBeCreated = await Promise.resolve( + loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY), + ) + if (provider) { await instantiateSafeContracts() setSafePendingToBeCreated(safePendingToBeCreated) @@ -63,8 +69,8 @@ function CreateSafePage(): ReactElement { const location = useLocation() const safeRandomName = useMnemonicSafeName() - async function showSafeCreationProcess(newSafeFormValues: CreateSafeFormValues) { - await saveToStorage(SAFE_PENDING_CREATION_STORAGE_KEY, { ...newSafeFormValues }) + const showSafeCreationProcess = (newSafeFormValues: CreateSafeFormValues): void => { + saveToStorage(SAFE_PENDING_CREATION_STORAGE_KEY, { ...newSafeFormValues }) setSafePendingToBeCreated(newSafeFormValues) } diff --git a/src/routes/CreateSafePage/components/SafeCreationProcess.tsx b/src/routes/CreateSafePage/components/SafeCreationProcess.tsx index 64b069b7f0..3ae5b5448b 100644 --- a/src/routes/CreateSafePage/components/SafeCreationProcess.tsx +++ b/src/routes/CreateSafePage/components/SafeCreationProcess.tsx @@ -61,8 +61,8 @@ function SafeCreationProcess(): ReactElement { const [showModal, setShowModal] = useState(false) const [modalData, setModalData] = useState({ safeAddress: '' }) - const createNewSafe = useCallback(async () => { - const safeCreationFormValues = (await loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY)) as CreateSafeFormValues + const createNewSafe = useCallback(() => { + const safeCreationFormValues = loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY) if (!safeCreationFormValues) { goToWelcomePage() @@ -115,27 +115,22 @@ function SafeCreationProcess(): ReactElement { }, [userAddressAccount]) useEffect(() => { - const load = async () => { - const safeCreationFormValues = (await loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY)) as CreateSafeFormValues - - if (!safeCreationFormValues) { - goToWelcomePage() - return - } - - const safeCreationTxHash = safeCreationFormValues[FIELD_NEW_SAFE_CREATION_TX_HASH] - if (safeCreationTxHash) { - setSafeCreationTxHash(safeCreationTxHash) - } else { - createNewSafe() - } + const safeCreationFormValues = loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY) + if (!safeCreationFormValues) { + goToWelcomePage() + return } - load() + const safeCreationTxHash = safeCreationFormValues[FIELD_NEW_SAFE_CREATION_TX_HASH] + if (safeCreationTxHash) { + setSafeCreationTxHash(safeCreationTxHash) + } else { + createNewSafe() + } }, [createNewSafe]) const onSafeCreated = async (newSafeAddress: string): Promise => { - const createSafeFormValues = (await loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY)) as CreateSafeFormValues + const createSafeFormValues = loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY) if (!createSafeFormValues) { goToWelcomePage() @@ -182,8 +177,8 @@ function SafeCreationProcess(): ReactElement { }) } - const onRetry = async () => { - const safeCreationFormValues = (await loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY)) as CreateSafeFormValues + const onRetry = (): void => { + const safeCreationFormValues = loadFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY) if (!safeCreationFormValues) { goToWelcomePage() @@ -192,7 +187,7 @@ function SafeCreationProcess(): ReactElement { setSafeCreationTxHash(undefined) delete safeCreationFormValues.safeCreationTxHash - await saveToStorage(SAFE_PENDING_CREATION_STORAGE_KEY, safeCreationFormValues) + saveToStorage(SAFE_PENDING_CREATION_STORAGE_KEY, safeCreationFormValues) createNewSafe() } @@ -201,8 +196,9 @@ function SafeCreationProcess(): ReactElement { goToWelcomePage() } - async function onClickModalButton() { - await removeFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY) + function onClickModalButton() { + removeFromStorage(SAFE_PENDING_CREATION_STORAGE_KEY) + const { safeName, safeCreationTxHash, safeAddress } = modalData history.push({ pathname: generateSafeRoute(SAFE_ROUTES.ASSETS_BALANCES, { diff --git a/src/routes/LoadSafePage/LoadSafePage.tsx b/src/routes/LoadSafePage/LoadSafePage.tsx index 264c84730f..7c150f0bd6 100644 --- a/src/routes/LoadSafePage/LoadSafePage.tsx +++ b/src/routes/LoadSafePage/LoadSafePage.tsx @@ -81,7 +81,7 @@ function Load(): ReactElement { dispatch(addressBookSafeLoad([...ownerEntries, safeEntry])) } - const onSubmitLoadSafe = async (values: LoadSafeFormValues) => { + const onSubmitLoadSafe = async (values: LoadSafeFormValues): Promise => { const address = values[FIELD_LOAD_SAFE_ADDRESS] if (!isValidAddress(address)) { return @@ -91,10 +91,10 @@ function Load(): ReactElement { const checksummedAddress = checksumAddress(address || '') const safeProps = await buildSafe(checksummedAddress) - const storedSafes = (await loadStoredSafes()) || {} + const storedSafes = loadStoredSafes() || {} storedSafes[checksummedAddress] = safeProps - await saveSafes(storedSafes) + saveSafes(storedSafes) dispatch(addOrUpdateSafe(safeProps)) // Go to the newly added Safe diff --git a/src/routes/safe/components/Apps/components/AppsList.test.tsx b/src/routes/safe/components/Apps/components/AppsList.test.tsx index dea8b77964..f6478167ea 100644 --- a/src/routes/safe/components/Apps/components/AppsList.test.tsx +++ b/src/routes/safe/components/Apps/components/AppsList.test.tsx @@ -18,10 +18,10 @@ const spyTrackEventGA = jest.fn() beforeEach(async () => { // Includes an id that doesn't exist in the remote apps to check that there's no error - await saveToStorage(appUtils.PINNED_SAFE_APP_IDS, ['14', '24', '228']) + saveToStorage(appUtils.PINNED_SAFE_APP_IDS, ['14', '24', '228']) // populate custom app - await saveToStorage(appUtils.APPS_STORAGE_KEY, [ + saveToStorage(appUtils.APPS_STORAGE_KEY, [ { url: 'https://apps.gnosis-safe.io/drain-safe', }, @@ -206,7 +206,7 @@ describe('Safe Apps -> AppsList -> Search', () => { describe('Safe Apps -> AppsList -> Pinning apps', () => { it('Shows a tutorial message when there are no pinned apps', async () => { - await saveToStorage(appUtils.PINNED_SAFE_APP_IDS, []) + saveToStorage(appUtils.PINNED_SAFE_APP_IDS, []) render() diff --git a/src/routes/safe/components/Apps/hooks/useLegalConsent.ts b/src/routes/safe/components/Apps/hooks/useLegalConsent.ts index c9bbf86ada..02acf4c305 100644 --- a/src/routes/safe/components/Apps/hooks/useLegalConsent.ts +++ b/src/routes/safe/components/Apps/hooks/useLegalConsent.ts @@ -7,17 +7,7 @@ const useLegalConsent = (): { consentReceived: boolean | undefined; onConsentRec const [consentReceived, setConsentReceived] = useState() useEffect(() => { - const checkLegalDisclaimer = async () => { - const storedConsentReceived = await loadFromStorage(APPS_LEGAL_CONSENT_RECEIVED) - - if (storedConsentReceived) { - setConsentReceived(true) - } else { - setConsentReceived(false) - } - } - - checkLegalDisclaimer() + setConsentReceived(loadFromStorage(APPS_LEGAL_CONSENT_RECEIVED) || false) }, []) const onConsentReceipt = useCallback((): void => { diff --git a/src/utils/storage/index.ts b/src/utils/storage/index.ts index 656108332d..ca99f38986 100644 --- a/src/utils/storage/index.ts +++ b/src/utils/storage/index.ts @@ -24,18 +24,15 @@ export const getStoragePrefix = (id = _getChainId()): string => { return `_immortal|v2_${name}__` } -export const loadFromStorage = async ( - key: string, - prefix = getStoragePrefix(), -): Promise => { +export const loadFromStorage = (key: string, prefix = getStoragePrefix()): T | undefined => { return storage.getItem(`${prefix}${key}`) } -export const saveToStorage = async (key: string, value: T): Promise => { +export const saveToStorage = (key: string, value: T): void => { storage.setItem(`${getStoragePrefix()}${key}`, value) } -export const removeFromStorage = async (key: string): Promise => { +export const removeFromStorage = (key: string): void => { storage.removeItem(`${getStoragePrefix()}${key}`) }