From 9ea578b8e4b4af851343afd0a4b2b2a70b130ca8 Mon Sep 17 00:00:00 2001 From: aleka Date: Tue, 13 Feb 2024 13:51:47 -0500 Subject: [PATCH] avoid logging expected switch chain error (#291) * avoid logging expected switch chain error * skip logging more expected errors * update switch chain error requirements check --- src/constants/wallets.ts | 1 + src/hooks/useWalletConnection.ts | 17 +++++----- src/lib/wallet/index.ts | 12 ++++++- .../dialogs/OnboardingDialog/GenerateKeys.tsx | 31 ++++++++++++++----- 4 files changed, 46 insertions(+), 15 deletions(-) diff --git a/src/constants/wallets.ts b/src/constants/wallets.ts index 43e80c9..4eced61 100644 --- a/src/constants/wallets.ts +++ b/src/constants/wallets.ts @@ -40,6 +40,7 @@ export enum WalletErrorType { // General ChainMismatch, UserCanceled, + SwitchChainMethodMissing, // Non-Deterministic NonDeterministicWallet, diff --git a/src/hooks/useWalletConnection.ts b/src/hooks/useWalletConnection.ts index ef36fc1..3fc63a8 100644 --- a/src/hooks/useWalletConnection.ts +++ b/src/hooks/useWalletConnection.ts @@ -163,17 +163,20 @@ export const useWalletConnection = () => { } } } catch (error) { - throw Object.assign( - new Error([error.message, error.cause?.message].filter(Boolean).join('\n')), - { - walletConnectionType: walletConnection?.type, - } - ); + const { isErrorExpected } = parseWalletError({ error, stringGetter }); + if (!isErrorExpected) { + throw Object.assign( + new Error([error.message, error.cause?.message].filter(Boolean).join('\n')), + { + walletConnectionType: walletConnection?.type, + } + ); + } } return { walletType, - walletConnectionType: walletConnection.type, + walletConnectionType: walletConnection?.type, }; }, [isConnectedGraz, signerGraz, isConnectedWagmi, signerWagmi] diff --git a/src/lib/wallet/index.ts b/src/lib/wallet/index.ts index ba11110..7ce29c9 100644 --- a/src/lib/wallet/index.ts +++ b/src/lib/wallet/index.ts @@ -92,6 +92,10 @@ export const getWalletErrorType = ({ error }: { error: Error }) => { return WalletErrorType.ChainMismatch; } + if (messageLower.includes('Missing or invalid. request() method: wallet_switchEthereumChain')) { + return WalletErrorType.SwitchChainMethodMissing; + } + // ImToken - User canceled if (messageLower.includes('用户取消了操作')) { return WalletErrorType.UserCanceled; @@ -113,13 +117,18 @@ export const parseWalletError = ({ }) => { const walletErrorType = getWalletErrorType({ error }); let message; + let isErrorExpected; switch (walletErrorType) { case WalletErrorType.ChainMismatch: - case WalletErrorType.UserCanceled: { + case WalletErrorType.UserCanceled: + case WalletErrorType.SwitchChainMethodMissing: { + isErrorExpected = true; + message = error.message; break; } default: { + isErrorExpected = false; message = stringGetter({ key: STRING_KEYS.SOMETHING_WENT_WRONG_WITH_MESSAGE, params: { @@ -132,5 +141,6 @@ export const parseWalletError = ({ return { walletErrorType, message, + isErrorExpected, }; }; diff --git a/src/views/dialogs/OnboardingDialog/GenerateKeys.tsx b/src/views/dialogs/OnboardingDialog/GenerateKeys.tsx index 4bc6a86..5e03705 100644 --- a/src/views/dialogs/OnboardingDialog/GenerateKeys.tsx +++ b/src/views/dialogs/OnboardingDialog/GenerateKeys.tsx @@ -44,7 +44,6 @@ export const GenerateKeys = ({ onKeysDerived = () => {}, }: ElementProps) => { const stringGetter = useStringGetter(); - const { isMobile } = useBreakpoints(); const [shouldRememberMe, setShouldRememberMe] = useState(false); @@ -66,17 +65,30 @@ export const GenerateKeys = ({ try { await matchNetwork?.(); + return true; } catch (error) { - const { message, walletErrorType } = parseWalletError({ error, stringGetter }); + const { message, walletErrorType, isErrorExpected } = parseWalletError({ + error, + stringGetter, + }); + + if (!isErrorExpected) { + log('GenerateKeys/switchNetwork', error, { walletErrorType }); + } if (message) { - log('GenerateKeys/switchNetwork', error, { walletErrorType }); setError(message); - throw error; } + + return false; } }; + const switchNetworkAndDeriveKeys = async () => { + const networkSwitched = await switchNetwork(); + if (networkSwitched) await deriveKeys(); + }; + // 2. Derive keys from EVM account const { getWalletFromEvmSignature } = useDydxClient(); const { getSubaccounts } = useAccounts(); @@ -154,11 +166,16 @@ export const GenerateKeys = ({ setStatus(EvmDerivedAccountStatus.Derived); } catch (error) { setStatus(EvmDerivedAccountStatus.NotDerived); - const { message, walletErrorType } = parseWalletError({ error, stringGetter }); + const { message, walletErrorType, isErrorExpected } = parseWalletError({ + error, + stringGetter, + }); if (message) { setError(message); - log('GenerateKeys/deriveKeys', error, { walletErrorType }); + if (!isErrorExpected) { + log('GenerateKeys/deriveKeys', error, { walletErrorType }); + } } } }; @@ -231,7 +248,7 @@ export const GenerateKeys = ({ {!isMatchingNetwork ? (