1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Move infuraProjectId to network controller constructor (#16884)

The network controller `setInfuraProjectId` method has been deleted.
The Infura project ID is only ever set upon construction, so it is now
passed in as a constructor parameter instead.

Rather than adding this as a second parameter, the network controller
now uses an "options bag" for constructor parameters. The initial state
was the first parameter, but it's now passed in as the `state` option
instead.

These changes make the API more similar to the mobile network
controller API.

This should have zero functional changes.

This relates to https://github.com/MetaMask/controllers/issues/971

Co-authored-by: legobeat <109787230+legobeat@users.noreply.github.com>
This commit is contained in:
Mark Stacey 2022-12-13 12:09:21 -03:30 committed by GitHub
parent 659063b335
commit 6d64951938
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 20 additions and 23 deletions

View File

@ -33,8 +33,7 @@ describe('DetectTokensController', function () {
beforeEach(async function () {
keyringMemStore = new ObservableStore({ isUnlocked: false });
network = new NetworkController();
network.setInfuraProjectId('foo');
network = new NetworkController({ infuraProjectId: 'foo' });
network.initializeProvider(networkControllerProviderConfig);
provider = network.getProviderAndBlockTracker().provider;

View File

@ -13,11 +13,10 @@ describe('NetworkController', () => {
};
beforeEach(() => {
networkController = new NetworkController();
networkController = new NetworkController({ infuraProjectId: 'foo' });
getLatestBlockStub = sinon
.stub(networkController, 'getLatestBlock')
.callsFake(() => Promise.resolve({}));
networkController.setInfuraProjectId('foo');
setProviderTypeAndWait = () =>
new Promise((resolve) => {
networkController.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, () => {

View File

@ -71,12 +71,19 @@ export const NETWORK_EVENTS = {
};
export default class NetworkController extends EventEmitter {
constructor(opts = {}) {
/**
* Construct a NetworkController.
*
* @param {object} [options] - NetworkController options.
* @param {object} [options.state] - Initial controller state.
* @param {string} [options.infuraProjectId] - The Infura project ID.
*/
constructor({ state = {}, infuraProjectId } = {}) {
super();
// create stores
this.providerStore = new ObservableStore(
opts.provider || { ...defaultProviderConfig },
state.provider || { ...defaultProviderConfig },
);
this.previousProviderStore = new ObservableStore(
this.providerStore.getState(),
@ -88,7 +95,7 @@ export default class NetworkController extends EventEmitter {
// state. Currently this is only used for detecting EIP 1559 support but
// can be extended to track other network details.
this.networkDetails = new ObservableStore(
opts.networkDetails || {
state.networkDetails || {
...defaultNetworkDetailsState,
},
);
@ -107,21 +114,12 @@ export default class NetworkController extends EventEmitter {
this._providerProxy = null;
this._blockTrackerProxy = null;
this.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, this.lookupNetwork);
}
/**
* Sets the Infura project ID
*
* @param {string} projectId - The Infura project ID
* @throws {Error} If the project ID is not a valid string.
*/
setInfuraProjectId(projectId) {
if (!projectId || typeof projectId !== 'string') {
if (!infuraProjectId || typeof infuraProjectId !== 'string') {
throw new Error('Invalid Infura project ID');
}
this._infuraProjectId = infuraProjectId;
this._infuraProjectId = projectId;
this.on(NETWORK_EVENTS.NETWORK_DID_CHANGE, this.lookupNetwork);
}
initializeProvider(providerParams) {

View File

@ -20,8 +20,7 @@ describe('preferences controller', function () {
const networkControllerProviderConfig = {
getAccounts: () => undefined,
};
network = new NetworkController();
network.setInfuraProjectId('foo');
network = new NetworkController({ infuraProjectId: 'foo' });
network.initializeProvider(networkControllerProviderConfig);
provider = network.getProviderAndBlockTracker().provider;
const tokenListMessenger = new ControllerMessenger().getRestricted({

View File

@ -244,8 +244,10 @@ export default class MetamaskController extends EventEmitter {
showApprovalRequest: opts.showUserConfirmation,
});
this.networkController = new NetworkController(initState.NetworkController);
this.networkController.setInfuraProjectId(opts.infuraProjectId);
this.networkController = new NetworkController({
state: initState.NetworkController,
infuraProjectId: opts.infuraProjectId,
});
// now we can initialize the RPC provider, which other controllers require
this.initializeProvider();