Skip to content

Commit 2a6a69e

Browse files
committed
refactor: migrate PreferencesController to @metamask/messenger
1 parent d53e126 commit 2a6a69e

File tree

5 files changed

+56
-43
lines changed

5 files changed

+56
-43
lines changed

packages/preferences-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` ([#6534](https://github.com/MetaMask/core/pull/6534))
13+
- Previously, `PreferencesController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
1214
- Bump `@metamask/base-controller` from `^8.1.0` to `^8.3.0` ([#6355](https://github.com/MetaMask/core/pull/6355), [#6465](https://github.com/MetaMask/core/pull/6465))
1315

1416
## [19.0.0]

packages/preferences-controller/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@
4848
},
4949
"dependencies": {
5050
"@metamask/base-controller": "^8.3.0",
51-
"@metamask/controller-utils": "^11.12.0"
51+
"@metamask/controller-utils": "^11.12.0",
52+
"@metamask/messenger": "^0.2.0"
5253
},
5354
"devDependencies": {
5455
"@metamask/auto-changelog": "^3.4.4",

packages/preferences-controller/src/PreferencesController.test.ts

Lines changed: 46 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
import { Messenger } from '@metamask/base-controller';
21
import { getDefaultKeyringState } from '@metamask/keyring-controller';
2+
import {
3+
Messenger,
4+
MOCK_ANY_NAMESPACE,
5+
type MessengerActions,
6+
type MessengerEvents,
7+
type MockAnyNamespace,
8+
} from '@metamask/messenger';
39
import { cloneDeep } from 'lodash';
410

511
import { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants';
612
import type {
7-
AllowedEvents,
813
EtherscanSupportedHexChainId,
9-
PreferencesControllerActions,
10-
PreferencesControllerEvents,
14+
PreferencesControllerMessenger,
1115
} from './PreferencesController';
1216
import { PreferencesController } from './PreferencesController';
1317

@@ -54,7 +58,7 @@ describe('PreferencesController', () => {
5458

5559
describe('KeyringController:stateChange', () => {
5660
it('should update identities state to reflect new keyring accounts', () => {
57-
const messenger = getMessenger();
61+
const messenger = getRootMessenger();
5862
const controller = setupPreferencesController({
5963
options: {
6064
state: {
@@ -102,7 +106,7 @@ describe('PreferencesController', () => {
102106
});
103107

104108
it('should update identities state to reflect removed keyring accounts', () => {
105-
const messenger = getMessenger();
109+
const messenger = getRootMessenger();
106110
const controller = setupPreferencesController({
107111
options: {
108112
state: {
@@ -141,7 +145,7 @@ describe('PreferencesController', () => {
141145
});
142146

143147
it('should update selected address to first identity if the selected address was removed', () => {
144-
const messenger = getMessenger();
148+
const messenger = getRootMessenger();
145149
const controller = setupPreferencesController({
146150
options: {
147151
state: {
@@ -183,7 +187,7 @@ describe('PreferencesController', () => {
183187
'0x01': { address: '0x01', importTime: 2, name: 'Account 2' },
184188
'0x02': { address: '0x02', importTime: 3, name: 'Account 3' },
185189
};
186-
const messenger = getMessenger();
190+
const messenger = getRootMessenger();
187191
const controller = setupPreferencesController({
188192
options: {
189193
state: {
@@ -221,7 +225,7 @@ describe('PreferencesController', () => {
221225
'0x01': { address: '0x01', importTime: 2, name: 'Account 2' },
222226
'0x02': { address: '0x02', importTime: 3, name: 'Account 3' },
223227
};
224-
const messenger = getMessenger();
228+
const messenger = getRootMessenger();
225229
const controller = setupPreferencesController({
226230
options: {
227231
state: {
@@ -259,7 +263,7 @@ describe('PreferencesController', () => {
259263
'0x01': { address: '0x01', importTime: 2, name: 'Account 2' },
260264
'0x02': { address: '0x02', importTime: 3, name: 'Account 3' },
261265
};
262-
const messenger = getMessenger();
266+
const messenger = getRootMessenger();
263267
const controller = setupPreferencesController({
264268
options: {
265269
state: {
@@ -305,7 +309,7 @@ describe('PreferencesController', () => {
305309
'0x01': { address: '0x01', importTime: 2, name: 'Account 2' },
306310
'0x02': { address: '0x02', importTime: 3, name: 'Account 3' },
307311
};
308-
const messenger = getMessenger();
312+
const messenger = getRootMessenger();
309313
const controller = setupPreferencesController({
310314
options: {
311315
state: {
@@ -574,22 +578,27 @@ describe('PreferencesController', () => {
574578
});
575579
});
576580

581+
type AllPreferencesControllerActions =
582+
MessengerActions<PreferencesControllerMessenger>;
583+
584+
type AllPreferencesControllerEvents =
585+
MessengerEvents<PreferencesControllerMessenger>;
586+
587+
type RootMessenger = Messenger<
588+
MockAnyNamespace,
589+
AllPreferencesControllerActions,
590+
AllPreferencesControllerEvents
591+
>;
592+
577593
/**
578-
* Construct a messenger for use in PreferencesController tests.
579-
*
580-
* This is a utility function that saves us from manually entering the correct
581-
* type parameters for the Messenger each time we construct it.
594+
* Creates and returns a root messenger for testing
582595
*
583-
* @returns A messenger
596+
* @returns A messenger instance
584597
*/
585-
function getMessenger(): Messenger<
586-
PreferencesControllerActions,
587-
PreferencesControllerEvents | AllowedEvents
588-
> {
589-
return new Messenger<
590-
PreferencesControllerActions,
591-
PreferencesControllerEvents | AllowedEvents
592-
>();
598+
function getRootMessenger(): RootMessenger {
599+
return new Messenger({
600+
namespace: MOCK_ANY_NAMESPACE,
601+
});
593602
}
594603

595604
/**
@@ -602,22 +611,24 @@ function getMessenger(): Messenger<
602611
*/
603612
function setupPreferencesController({
604613
options = {},
605-
messenger = getMessenger(),
614+
messenger = getRootMessenger(),
606615
}: {
607616
options?: Partial<ConstructorParameters<typeof PreferencesController>[0]>;
608-
messenger?: Messenger<
609-
PreferencesControllerActions,
610-
PreferencesControllerEvents | AllowedEvents
611-
>;
617+
messenger?: RootMessenger;
612618
} = {}) {
613-
const preferencesControllerMessenger = messenger.getRestricted<
619+
const preferencesControllerMessenger = new Messenger<
614620
'PreferencesController',
615-
never,
616-
AllowedEvents['type']
621+
AllPreferencesControllerActions,
622+
AllPreferencesControllerEvents,
623+
RootMessenger
617624
>({
618-
name: 'PreferencesController',
619-
allowedActions: [],
620-
allowedEvents: ['KeyringController:stateChange'],
625+
namespace: 'PreferencesController',
626+
parent: messenger,
627+
});
628+
messenger.delegate({
629+
messenger: preferencesControllerMessenger,
630+
actions: [],
631+
events: ['KeyringController:stateChange'],
621632
});
622633
return new PreferencesController({
623634
messenger: preferencesControllerMessenger,

packages/preferences-controller/src/PreferencesController.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import {
22
BaseController,
33
type ControllerStateChangeEvent,
44
type ControllerGetStateAction,
5-
type RestrictedMessenger,
6-
} from '@metamask/base-controller';
5+
} from '@metamask/base-controller/next';
76
import { toChecksumHexAddress } from '@metamask/controller-utils';
87
import type {
98
KeyringControllerState,
109
KeyringControllerStateChangeEvent,
1110
} from '@metamask/keyring-controller';
11+
import type { Messenger } from '@metamask/messenger';
1212
import type { Hex } from '@metamask/utils';
1313

1414
import { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants';
@@ -190,14 +190,12 @@ export type PreferencesControllerActions = PreferencesControllerGetStateAction;
190190

191191
export type PreferencesControllerEvents = PreferencesControllerStateChangeEvent;
192192

193-
export type AllowedEvents = KeyringControllerStateChangeEvent;
193+
type AllowedEvents = KeyringControllerStateChangeEvent;
194194

195-
export type PreferencesControllerMessenger = RestrictedMessenger<
195+
export type PreferencesControllerMessenger = Messenger<
196196
typeof name,
197197
PreferencesControllerActions,
198-
PreferencesControllerEvents | AllowedEvents,
199-
never,
200-
AllowedEvents['type']
198+
PreferencesControllerEvents | AllowedEvents
201199
>;
202200

203201
/**

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4234,6 +4234,7 @@ __metadata:
42344234
"@metamask/base-controller": "npm:^8.3.0"
42354235
"@metamask/controller-utils": "npm:^11.12.0"
42364236
"@metamask/keyring-controller": "npm:^23.0.0"
4237+
"@metamask/messenger": "npm:^0.2.0"
42374238
"@metamask/utils": "npm:^11.4.2"
42384239
"@types/jest": "npm:^27.4.1"
42394240
deepmerge: "npm:^4.2.2"

0 commit comments

Comments
 (0)