1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 19:26:13 +02:00

Fix error behavior of addEthereumChain (#11031)

This commit is contained in:
Erik Marks 2021-05-11 09:34:52 -07:00 committed by GitHub
parent 1338b2f8ca
commit 35531d8360
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,4 @@
import { ethErrors } from 'eth-rpc-errors';
import { ethErrors, errorCodes } from 'eth-rpc-errors';
import validUrl from 'valid-url';
import { omit } from 'lodash';
import { MESSAGE_TYPE } from '../../../../../shared/constants/app';
@ -123,12 +123,16 @@ async function addEthereumChainHandler(
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();
if (currentChainId === _chainId) {
res.result = null;
return end();
}
// Ask the user to switch the network
try {
await updateRpcTarget(
await requestUserApproval({
@ -144,7 +148,12 @@ async function addEthereumChainHandler(
);
res.result = null;
} catch (error) {
return end(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();
}
@ -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 requestUserApproval({
origin,
@ -263,10 +280,13 @@ async function addEthereumChainHandler(
},
}),
);
res.result = null;
} catch (error) {
return end(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();
}