Fix error behavior of addEthereumChain (#11031)

feature/default_network_editable
Erik Marks 4 years ago committed by Dan Miller
parent 434249f171
commit 8303e866e2
  1. 30
      app/scripts/lib/rpc-method-middleware/handlers/add-ethereum-chain.js

@ -1,4 +1,4 @@
import { ethErrors } from 'eth-rpc-errors'; import { ethErrors, errorCodes } from 'eth-rpc-errors';
import validUrl from 'valid-url'; import validUrl from 'valid-url';
import { omit } from 'lodash'; import { omit } from 'lodash';
import { MESSAGE_TYPE } from '../../../../../shared/constants/app'; import { MESSAGE_TYPE } from '../../../../../shared/constants/app';
@ -123,12 +123,16 @@ async function addEthereumChainHandler(
const existingNetwork = findCustomRpcBy({ chainId: _chainId }); const existingNetwork = findCustomRpcBy({ chainId: _chainId });
if (existingNetwork !== null) { if (existingNetwork) {
// If the network already exists, the request is considered successful
res.result = null;
const currentChainId = getCurrentChainId(); const currentChainId = getCurrentChainId();
if (currentChainId === _chainId) { if (currentChainId === _chainId) {
res.result = null;
return end(); return end();
} }
// Ask the user to switch the network
try { try {
await updateRpcTarget( await updateRpcTarget(
await requestUserApproval({ await requestUserApproval({
@ -144,8 +148,13 @@ async function addEthereumChainHandler(
); );
res.result = null; res.result = null;
} catch (error) { } catch (error) {
// For the purposes of this method, it does not matter if the user
// declines to switch the selected network. However, other errors indicate
// that something is wrong.
if (error.code !== errorCodes.provider.userRejectedRequest) {
return end(error); return end(error);
} }
}
return end(); return end();
} }
@ -251,6 +260,14 @@ async function addEthereumChainHandler(
}, },
}); });
// Once the network has been added, the requested is considered successful
res.result = null;
} catch (error) {
return end(error);
}
// Ask the user to switch the network
try {
await updateRpcTarget( await updateRpcTarget(
await requestUserApproval({ await requestUserApproval({
origin, origin,
@ -263,10 +280,13 @@ async function addEthereumChainHandler(
}, },
}), }),
); );
res.result = null;
} catch (error) { } catch (error) {
// For the purposes of this method, it does not matter if the user
// declines to switch the selected network. However, other errors indicate
// that something is wrong.
if (error.code !== errorCodes.provider.userRejectedRequest) {
return end(error); return end(error);
} }
}
return end(); return end();
} }

Loading…
Cancel
Save