Skip to content

Commit 7cc86e3

Browse files
committed
refactor: migrate SelectedNetworkController to @metamask/messenger
1 parent afe574e commit 7cc86e3

File tree

8 files changed

+199
-141
lines changed

8 files changed

+199
-141
lines changed

packages/selected-network-controller/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Changed
1111

12+
- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6500](https://github.com/MetaMask/core/pull/6500))
13+
- Previously, `SelectedNetworkController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
1214
- Bump `@metamask/utils` from `^11.8.0` to `^11.8.1` ([#6708](https://github.com/MetaMask/core/pull/6708))
1315
- Bump `@metamask/base-controller` from `^8.3.0` to `^8.4.0` ([#6632](https://github.com/MetaMask/core/pull/6632))
1416
- Bump `@metamask/json-rpc-engine` from `^10.0.3` to `^10.1.0` ([#6678](https://github.com/MetaMask/core/pull/6678))

packages/selected-network-controller/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"dependencies": {
5050
"@metamask/base-controller": "^8.4.0",
5151
"@metamask/json-rpc-engine": "^10.1.0",
52+
"@metamask/messenger": "^0.3.0",
5253
"@metamask/swappable-obj-proxy": "^2.3.0",
5354
"@metamask/utils": "^11.8.1"
5455
},

packages/selected-network-controller/src/SelectedNetworkController.ts

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
import type { RestrictedMessenger } from '@metamask/base-controller';
2-
import { BaseController } from '@metamask/base-controller';
1+
import {
2+
BaseController,
3+
type ControllerGetStateAction,
4+
type ControllerStateChangeEvent,
5+
} from '@metamask/base-controller/next';
6+
import type { Messenger } from '@metamask/messenger';
37
import type {
48
BlockTrackerProxy,
59
NetworkClientId,
@@ -16,15 +20,14 @@ import type {
1620
} from '@metamask/permission-controller';
1721
import { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';
1822
import type { Hex } from '@metamask/utils';
19-
import type { Patch } from 'immer';
2023

21-
export const controllerName = 'SelectedNetworkController';
24+
const controllerName = 'SelectedNetworkController';
2225

2326
const stateMetadata = {
2427
domains: {
2528
includeInStateLogs: true,
2629
persist: true,
27-
anonymous: false,
30+
includeInDebugSnapshot: false,
2831
usedInUi: true,
2932
},
3033
};
@@ -51,15 +54,17 @@ export type SelectedNetworkControllerState = {
5154
domains: Record<Domain, NetworkClientId>;
5255
};
5356

54-
export type SelectedNetworkControllerStateChangeEvent = {
55-
type: typeof SelectedNetworkControllerEventTypes.stateChange;
56-
payload: [SelectedNetworkControllerState, Patch[]];
57-
};
57+
export type SelectedNetworkControllerStateChangeEvent =
58+
ControllerStateChangeEvent<
59+
typeof controllerName,
60+
SelectedNetworkControllerState
61+
>;
5862

59-
export type SelectedNetworkControllerGetSelectedNetworkStateAction = {
60-
type: typeof SelectedNetworkControllerActionTypes.getState;
61-
handler: () => SelectedNetworkControllerState;
62-
};
63+
export type SelectedNetworkControllerGetSelectedNetworkStateAction =
64+
ControllerGetStateAction<
65+
typeof controllerName,
66+
SelectedNetworkControllerState
67+
>;
6368

6469
export type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {
6570
type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain;
@@ -76,7 +81,7 @@ export type SelectedNetworkControllerActions =
7681
| SelectedNetworkControllerGetNetworkClientIdForDomainAction
7782
| SelectedNetworkControllerSetNetworkClientIdForDomainAction;
7883

79-
export type AllowedActions =
84+
type AllowedActions =
8085
| NetworkControllerGetNetworkClientByIdAction
8186
| NetworkControllerGetSelectedNetworkClientAction
8287
| NetworkControllerGetStateAction
@@ -86,16 +91,14 @@ export type AllowedActions =
8691
export type SelectedNetworkControllerEvents =
8792
SelectedNetworkControllerStateChangeEvent;
8893

89-
export type AllowedEvents =
94+
type AllowedEvents =
9095
| NetworkControllerStateChangeEvent
9196
| PermissionControllerStateChange;
9297

93-
export type SelectedNetworkControllerMessenger = RestrictedMessenger<
98+
export type SelectedNetworkControllerMessenger = Messenger<
9499
typeof controllerName,
95100
SelectedNetworkControllerActions | AllowedActions,
96-
SelectedNetworkControllerEvents | AllowedEvents,
97-
AllowedActions['type'],
98-
AllowedEvents['type']
101+
SelectedNetworkControllerEvents | AllowedEvents
99102
>;
100103

101104
export type SelectedNetworkControllerOptions = {
@@ -123,7 +126,7 @@ export class SelectedNetworkController extends BaseController<
123126
* Construct a SelectedNetworkController controller.
124127
*
125128
* @param options - The controller options.
126-
* @param options.messenger - The restricted messenger for the EncryptionPublicKey controller.
129+
* @param options.messenger - The messenger for the SelectedNetworkController controller.
127130
* @param options.state - The controllers initial state.
128131
* @param options.domainProxyMap - A map for storing domain-specific proxies that are held in memory only during use.
129132
*/
@@ -142,18 +145,18 @@ export class SelectedNetworkController extends BaseController<
142145
this.#registerMessageHandlers();
143146

144147
// this is fetching all the dapp permissions from the PermissionsController and looking for any domains that are not in domains state in this controller. Then we take any missing domains and add them to state here, setting it with the globally selected networkClientId (fetched from the NetworkController)
145-
this.messagingSystem
148+
this.messenger
146149
.call('PermissionController:getSubjectNames')
147150
.filter((domain) => this.state.domains[domain] === undefined)
148151
.forEach((domain) =>
149152
this.setNetworkClientIdForDomain(
150153
domain,
151-
this.messagingSystem.call('NetworkController:getState')
154+
this.messenger.call('NetworkController:getState')
152155
.selectedNetworkClientId,
153156
),
154157
);
155158

156-
this.messagingSystem.subscribe(
159+
this.messenger.subscribe(
157160
'PermissionController:stateChange',
158161
(_, patches) => {
159162
patches.forEach(({ op, path }) => {
@@ -164,7 +167,7 @@ export class SelectedNetworkController extends BaseController<
164167
if (op === 'add' && this.state.domains[domain] === undefined) {
165168
this.setNetworkClientIdForDomain(
166169
domain,
167-
this.messagingSystem.call('NetworkController:getState')
170+
this.messenger.call('NetworkController:getState')
168171
.selectedNetworkClientId,
169172
);
170173
} else if (
@@ -178,7 +181,7 @@ export class SelectedNetworkController extends BaseController<
178181
},
179182
);
180183

181-
this.messagingSystem.subscribe(
184+
this.messenger.subscribe(
182185
'NetworkController:stateChange',
183186
(
184187
{ selectedNetworkClientId, networkConfigurationsByChainId },
@@ -242,11 +245,11 @@ export class SelectedNetworkController extends BaseController<
242245
}
243246

244247
#registerMessageHandlers(): void {
245-
this.messagingSystem.registerActionHandler(
248+
this.messenger.registerActionHandler(
246249
SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,
247250
this.getNetworkClientIdForDomain.bind(this),
248251
);
249-
this.messagingSystem.registerActionHandler(
252+
this.messenger.registerActionHandler(
250253
SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,
251254
this.setNetworkClientIdForDomain.bind(this),
252255
);
@@ -256,7 +259,7 @@ export class SelectedNetworkController extends BaseController<
256259
domain: Domain,
257260
networkClientId: NetworkClientId,
258261
) {
259-
const networkClient = this.messagingSystem.call(
262+
const networkClient = this.messenger.call(
260263
'NetworkController:getNetworkClientById',
261264
networkClientId,
262265
);
@@ -279,7 +282,7 @@ export class SelectedNetworkController extends BaseController<
279282
* @param domain - The domain for which to unset the network client ID.
280283
*/
281284
#unsetNetworkClientIdForDomain(domain: Domain) {
282-
const globallySelectedNetworkClient = this.messagingSystem.call(
285+
const globallySelectedNetworkClient = this.messenger.call(
283286
'NetworkController:getSelectedNetworkClient',
284287
);
285288
const networkProxy = this.#domainProxyMap.get(domain);
@@ -297,10 +300,7 @@ export class SelectedNetworkController extends BaseController<
297300
}
298301

299302
#domainHasPermissions(domain: Domain): boolean {
300-
return this.messagingSystem.call(
301-
'PermissionController:hasPermissions',
302-
domain,
303-
);
303+
return this.messenger.call('PermissionController:hasPermissions', domain);
304304
}
305305

306306
setNetworkClientIdForDomain(
@@ -324,7 +324,7 @@ export class SelectedNetworkController extends BaseController<
324324

325325
getNetworkClientIdForDomain(domain: Domain): NetworkClientId {
326326
const { selectedNetworkClientId: metamaskSelectedNetworkClientId } =
327-
this.messagingSystem.call('NetworkController:getState');
327+
this.messenger.call('NetworkController:getState');
328328

329329
return this.state.domains[domain] ?? metamaskSelectedNetworkClientId;
330330
}
@@ -338,7 +338,7 @@ export class SelectedNetworkController extends BaseController<
338338
getProviderAndBlockTracker(domain: Domain): NetworkProxy {
339339
// If the domain is 'metamask', return the NetworkController's globally selected network client proxy
340340
if (domain === METAMASK_DOMAIN) {
341-
const networkClient = this.messagingSystem.call(
341+
const networkClient = this.messenger.call(
342342
'NetworkController:getSelectedNetworkClient',
343343
);
344344
if (networkClient === undefined) {
@@ -352,12 +352,12 @@ export class SelectedNetworkController extends BaseController<
352352
let networkClient;
353353
if (this.#domainHasPermissions(domain)) {
354354
const networkClientId = this.getNetworkClientIdForDomain(domain);
355-
networkClient = this.messagingSystem.call(
355+
networkClient = this.messenger.call(
356356
'NetworkController:getNetworkClientById',
357357
networkClientId,
358358
);
359359
} else {
360-
networkClient = this.messagingSystem.call(
360+
networkClient = this.messenger.call(
361361
'NetworkController:getSelectedNetworkClient',
362362
);
363363
if (networkClient === undefined) {

0 commit comments

Comments
 (0)