Skip to content

Commit eda0482

Browse files
committed
refactor: migrate SelectedNetworkController to @metamask/messenger
1 parent 32223e1 commit eda0482

File tree

6 files changed

+203
-149
lines changed

6 files changed

+203
-149
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.2.0` to `^11.4.2` ([#6054](https://github.com/MetaMask/core/pull/6054))
1315
- Bump `@metamask/base-controller` from `^8.0.1` to `^8.3.0` ([#6284](https://github.com/MetaMask/core/pull/6284), [#6355](https://github.com/MetaMask/core/pull/6355), [#6465](https://github.com/MetaMask/core/pull/6465))
1416

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.3.0",
5151
"@metamask/json-rpc-engine": "^10.0.3",
52+
"@metamask/messenger": "^0.2.0",
5253
"@metamask/swappable-obj-proxy": "^2.3.0",
5354
"@metamask/utils": "^11.4.2"
5455
},

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

Lines changed: 47 additions & 43 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,9 +20,8 @@ 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: { persist: true, anonymous: false },
@@ -46,15 +49,17 @@ export type SelectedNetworkControllerState = {
4649
domains: Record<Domain, NetworkClientId>;
4750
};
4851

49-
export type SelectedNetworkControllerStateChangeEvent = {
50-
type: typeof SelectedNetworkControllerEventTypes.stateChange;
51-
payload: [SelectedNetworkControllerState, Patch[]];
52-
};
52+
export type SelectedNetworkControllerStateChangeEvent =
53+
ControllerStateChangeEvent<
54+
typeof controllerName,
55+
SelectedNetworkControllerState
56+
>;
5357

54-
export type SelectedNetworkControllerGetSelectedNetworkStateAction = {
55-
type: typeof SelectedNetworkControllerActionTypes.getState;
56-
handler: () => SelectedNetworkControllerState;
57-
};
58+
export type SelectedNetworkControllerGetSelectedNetworkStateAction =
59+
ControllerGetStateAction<
60+
typeof controllerName,
61+
SelectedNetworkControllerState
62+
>;
5863

5964
export type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {
6065
type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain;
@@ -71,7 +76,7 @@ export type SelectedNetworkControllerActions =
7176
| SelectedNetworkControllerGetNetworkClientIdForDomainAction
7277
| SelectedNetworkControllerSetNetworkClientIdForDomainAction;
7378

74-
export type AllowedActions =
79+
type AllowedActions =
7580
| NetworkControllerGetNetworkClientByIdAction
7681
| NetworkControllerGetSelectedNetworkClientAction
7782
| NetworkControllerGetStateAction
@@ -81,16 +86,14 @@ export type AllowedActions =
8186
export type SelectedNetworkControllerEvents =
8287
SelectedNetworkControllerStateChangeEvent;
8388

84-
export type AllowedEvents =
89+
type AllowedEvents =
8590
| NetworkControllerStateChangeEvent
8691
| PermissionControllerStateChange;
8792

88-
export type SelectedNetworkControllerMessenger = RestrictedMessenger<
93+
export type SelectedNetworkControllerMessenger = Messenger<
8994
typeof controllerName,
9095
SelectedNetworkControllerActions | AllowedActions,
91-
SelectedNetworkControllerEvents | AllowedEvents,
92-
AllowedActions['type'],
93-
AllowedEvents['type']
96+
SelectedNetworkControllerEvents | AllowedEvents
9497
>;
9598

9699
export type SelectedNetworkControllerOptions = {
@@ -124,7 +127,7 @@ export class SelectedNetworkController extends BaseController<
124127
* Construct a SelectedNetworkController controller.
125128
*
126129
* @param options - The controller options.
127-
* @param options.messenger - The restricted messenger for the EncryptionPublicKey controller.
130+
* @param options.messenger - The messenger for the SelectedNetworkController controller.
128131
* @param options.state - The controllers initial state.
129132
* @param options.useRequestQueuePreference - A boolean indicating whether to use the request queue preference.
130133
* @param options.onPreferencesStateChange - A callback that is called when the preference state changes.
@@ -148,18 +151,18 @@ export class SelectedNetworkController extends BaseController<
148151
this.#registerMessageHandlers();
149152

150153
// 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)
151-
this.messagingSystem
154+
this.messenger
152155
.call('PermissionController:getSubjectNames')
153156
.filter((domain) => this.state.domains[domain] === undefined)
154157
.forEach((domain) =>
155158
this.setNetworkClientIdForDomain(
156159
domain,
157-
this.messagingSystem.call('NetworkController:getState')
160+
this.messenger.call('NetworkController:getState')
158161
.selectedNetworkClientId,
159162
),
160163
);
161164

162-
this.messagingSystem.subscribe(
165+
this.messenger.subscribe(
163166
'PermissionController:stateChange',
164167
(_, patches) => {
165168
patches.forEach(({ op, path }) => {
@@ -170,7 +173,7 @@ export class SelectedNetworkController extends BaseController<
170173
if (op === 'add' && this.state.domains[domain] === undefined) {
171174
this.setNetworkClientIdForDomain(
172175
domain,
173-
this.messagingSystem.call('NetworkController:getState')
176+
this.messenger.call('NetworkController:getState')
174177
.selectedNetworkClientId,
175178
);
176179
} else if (
@@ -184,7 +187,7 @@ export class SelectedNetworkController extends BaseController<
184187
},
185188
);
186189

187-
this.messagingSystem.subscribe(
190+
this.messenger.subscribe(
188191
'NetworkController:stateChange',
189192
(
190193
{ selectedNetworkClientId, networkConfigurationsByChainId },
@@ -199,12 +202,16 @@ export class SelectedNetworkController extends BaseController<
199202
if (patch) {
200203
const networkClientIdToChainId = Object.values(
201204
networkConfigurationsByChainId,
202-
).reduce((acc, network) => {
203-
network.rpcEndpoints.forEach(
204-
({ networkClientId }) => (acc[networkClientId] = network.chainId),
205-
);
206-
return acc;
207-
}, {} as Record<string, Hex>);
205+
).reduce(
206+
(acc, network) => {
207+
network.rpcEndpoints.forEach(
208+
({ networkClientId }) =>
209+
(acc[networkClientId] = network.chainId),
210+
);
211+
return acc;
212+
},
213+
{} as Record<string, Hex>,
214+
);
208215

209216
Object.entries(this.state.domains).forEach(
210217
([domain, networkClientIdForDomain]) => {
@@ -259,11 +266,11 @@ export class SelectedNetworkController extends BaseController<
259266
}
260267

261268
#registerMessageHandlers(): void {
262-
this.messagingSystem.registerActionHandler(
269+
this.messenger.registerActionHandler(
263270
SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,
264271
this.getNetworkClientIdForDomain.bind(this),
265272
);
266-
this.messagingSystem.registerActionHandler(
273+
this.messenger.registerActionHandler(
267274
SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,
268275
this.setNetworkClientIdForDomain.bind(this),
269276
);
@@ -273,7 +280,7 @@ export class SelectedNetworkController extends BaseController<
273280
domain: Domain,
274281
networkClientId: NetworkClientId,
275282
) {
276-
const networkClient = this.messagingSystem.call(
283+
const networkClient = this.messenger.call(
277284
'NetworkController:getNetworkClientById',
278285
networkClientId,
279286
);
@@ -296,7 +303,7 @@ export class SelectedNetworkController extends BaseController<
296303
* @param domain - The domain for which to unset the network client ID.
297304
*/
298305
#unsetNetworkClientIdForDomain(domain: Domain) {
299-
const globallySelectedNetworkClient = this.messagingSystem.call(
306+
const globallySelectedNetworkClient = this.messenger.call(
300307
'NetworkController:getSelectedNetworkClient',
301308
);
302309
const networkProxy = this.#domainProxyMap.get(domain);
@@ -314,18 +321,15 @@ export class SelectedNetworkController extends BaseController<
314321
}
315322

316323
#domainHasPermissions(domain: Domain): boolean {
317-
return this.messagingSystem.call(
318-
'PermissionController:hasPermissions',
319-
domain,
320-
);
324+
return this.messenger.call('PermissionController:hasPermissions', domain);
321325
}
322326

323327
// Loop through all domains and for those with permissions it points that domain's proxy
324328
// to an unproxied instance of the globally selected network client.
325329
// NOT the NetworkController's proxy of the globally selected networkClient
326330
#resetAllPermissionedDomains() {
327331
this.#domainProxyMap.forEach((_: NetworkProxy, domain: string) => {
328-
const { selectedNetworkClientId } = this.messagingSystem.call(
332+
const { selectedNetworkClientId } = this.messenger.call(
329333
'NetworkController:getState',
330334
);
331335
// can't use public setNetworkClientIdForDomain because it will throw an error
@@ -362,7 +366,7 @@ export class SelectedNetworkController extends BaseController<
362366

363367
getNetworkClientIdForDomain(domain: Domain): NetworkClientId {
364368
const { selectedNetworkClientId: metamaskSelectedNetworkClientId } =
365-
this.messagingSystem.call('NetworkController:getState');
369+
this.messenger.call('NetworkController:getState');
366370
if (!this.#useRequestQueuePreference) {
367371
return metamaskSelectedNetworkClientId;
368372
}
@@ -378,7 +382,7 @@ export class SelectedNetworkController extends BaseController<
378382
getProviderAndBlockTracker(domain: Domain): NetworkProxy {
379383
// If the domain is 'metamask', return the NetworkController's globally selected network client proxy
380384
if (domain === METAMASK_DOMAIN) {
381-
const networkClient = this.messagingSystem.call(
385+
const networkClient = this.messenger.call(
382386
'NetworkController:getSelectedNetworkClient',
383387
);
384388
if (networkClient === undefined) {
@@ -395,12 +399,12 @@ export class SelectedNetworkController extends BaseController<
395399
this.#domainHasPermissions(domain)
396400
) {
397401
const networkClientId = this.getNetworkClientIdForDomain(domain);
398-
networkClient = this.messagingSystem.call(
402+
networkClient = this.messenger.call(
399403
'NetworkController:getNetworkClientById',
400404
networkClientId,
401405
);
402406
} else {
403-
networkClient = this.messagingSystem.call(
407+
networkClient = this.messenger.call(
404408
'NetworkController:getSelectedNetworkClient',
405409
);
406410
if (networkClient === undefined) {

0 commit comments

Comments
 (0)