Skip to content

Commit 63e6be6

Browse files
committed
refactor: migrate PreferencesController to @metamask/messenger
1 parent f8c4c8a commit 63e6be6

File tree

7 files changed

+85
-69
lines changed

7 files changed

+85
-69
lines changed

packages/preferences-controller/CHANGELOG.md

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

1616
### Changed
1717

18+
- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6534](https://github.com/MetaMask/core/pull/6534))
19+
- Previously, `PreferencesController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
1820
- **BREAKING:** Rename controller state property from `useMultiRpcMigration` to `showMultiRpcModal` ([#6707](https://github.com/MetaMask/core/pull/6707))
1921
- **BREAKING:** Rename controller method from `setUseMultiRpcMigration` to `setShowMultiRpcModal` ([#6707](https://github.com/MetaMask/core/pull/6707))
2022
- **BREAKING:** Rename controller state property from `openSeaEnabled` to `displayNftMedia` ([#4774](https://github.com/MetaMask/core/pull/4774))

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.4.0",
51-
"@metamask/controller-utils": "^11.14.0"
51+
"@metamask/controller-utils": "^11.14.0",
52+
"@metamask/messenger": "^0.3.0"
5253
},
5354
"devDependencies": {
5455
"@metamask/auto-changelog": "^3.4.4",

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

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
1-
import { deriveStateFromMetadata, Messenger } from '@metamask/base-controller';
1+
import { deriveStateFromMetadata } from '@metamask/base-controller/next';
22
import { getDefaultKeyringState } from '@metamask/keyring-controller';
3+
import {
4+
Messenger,
5+
MOCK_ANY_NAMESPACE,
6+
type MessengerActions,
7+
type MessengerEvents,
8+
type MockAnyNamespace,
9+
} from '@metamask/messenger';
310
import { cloneDeep } from 'lodash';
411

512
import { ETHERSCAN_SUPPORTED_CHAIN_IDS } from './constants';
613
import type {
7-
AllowedEvents,
814
EtherscanSupportedHexChainId,
9-
PreferencesControllerActions,
10-
PreferencesControllerEvents,
15+
PreferencesControllerMessenger,
1116
} from './PreferencesController';
1217
import { PreferencesController } from './PreferencesController';
1318

@@ -55,7 +60,7 @@ describe('PreferencesController', () => {
5560

5661
describe('KeyringController:stateChange', () => {
5762
it('should update identities state to reflect new keyring accounts', () => {
58-
const messenger = getMessenger();
63+
const messenger = getRootMessenger();
5964
const controller = setupPreferencesController({
6065
options: {
6166
state: {
@@ -103,7 +108,7 @@ describe('PreferencesController', () => {
103108
});
104109

105110
it('should update identities state to reflect removed keyring accounts', () => {
106-
const messenger = getMessenger();
111+
const messenger = getRootMessenger();
107112
const controller = setupPreferencesController({
108113
options: {
109114
state: {
@@ -142,7 +147,7 @@ describe('PreferencesController', () => {
142147
});
143148

144149
it('should update selected address to first identity if the selected address was removed', () => {
145-
const messenger = getMessenger();
150+
const messenger = getRootMessenger();
146151
const controller = setupPreferencesController({
147152
options: {
148153
state: {
@@ -184,7 +189,7 @@ describe('PreferencesController', () => {
184189
'0x01': { address: '0x01', importTime: 2, name: 'Account 2' },
185190
'0x02': { address: '0x02', importTime: 3, name: 'Account 3' },
186191
};
187-
const messenger = getMessenger();
192+
const messenger = getRootMessenger();
188193
const controller = setupPreferencesController({
189194
options: {
190195
state: {
@@ -222,7 +227,7 @@ describe('PreferencesController', () => {
222227
'0x01': { address: '0x01', importTime: 2, name: 'Account 2' },
223228
'0x02': { address: '0x02', importTime: 3, name: 'Account 3' },
224229
};
225-
const messenger = getMessenger();
230+
const messenger = getRootMessenger();
226231
const controller = setupPreferencesController({
227232
options: {
228233
state: {
@@ -260,7 +265,7 @@ describe('PreferencesController', () => {
260265
'0x01': { address: '0x01', importTime: 2, name: 'Account 2' },
261266
'0x02': { address: '0x02', importTime: 3, name: 'Account 3' },
262267
};
263-
const messenger = getMessenger();
268+
const messenger = getRootMessenger();
264269
const controller = setupPreferencesController({
265270
options: {
266271
state: {
@@ -306,7 +311,7 @@ describe('PreferencesController', () => {
306311
'0x01': { address: '0x01', importTime: 2, name: 'Account 2' },
307312
'0x02': { address: '0x02', importTime: 3, name: 'Account 3' },
308313
};
309-
const messenger = getMessenger();
314+
const messenger = getRootMessenger();
310315
const controller = setupPreferencesController({
311316
options: {
312317
state: {
@@ -591,7 +596,7 @@ describe('PreferencesController', () => {
591596
deriveStateFromMetadata(
592597
controller.state,
593598
controller.metadata,
594-
'anonymous',
599+
'includeInDebugSnapshot',
595600
),
596601
).toMatchInlineSnapshot(`
597602
Object {
@@ -835,22 +840,27 @@ describe('PreferencesController', () => {
835840
});
836841
});
837842

843+
type AllPreferencesControllerActions =
844+
MessengerActions<PreferencesControllerMessenger>;
845+
846+
type AllPreferencesControllerEvents =
847+
MessengerEvents<PreferencesControllerMessenger>;
848+
849+
type RootMessenger = Messenger<
850+
MockAnyNamespace,
851+
AllPreferencesControllerActions,
852+
AllPreferencesControllerEvents
853+
>;
854+
838855
/**
839-
* Construct a messenger for use in PreferencesController tests.
840-
*
841-
* This is a utility function that saves us from manually entering the correct
842-
* type parameters for the Messenger each time we construct it.
856+
* Creates and returns a root messenger for testing
843857
*
844-
* @returns A messenger
858+
* @returns A messenger instance
845859
*/
846-
function getMessenger(): Messenger<
847-
PreferencesControllerActions,
848-
PreferencesControllerEvents | AllowedEvents
849-
> {
850-
return new Messenger<
851-
PreferencesControllerActions,
852-
PreferencesControllerEvents | AllowedEvents
853-
>();
860+
function getRootMessenger(): RootMessenger {
861+
return new Messenger({
862+
namespace: MOCK_ANY_NAMESPACE,
863+
});
854864
}
855865

856866
/**
@@ -863,22 +873,24 @@ function getMessenger(): Messenger<
863873
*/
864874
function setupPreferencesController({
865875
options = {},
866-
messenger = getMessenger(),
876+
messenger = getRootMessenger(),
867877
}: {
868878
options?: Partial<ConstructorParameters<typeof PreferencesController>[0]>;
869-
messenger?: Messenger<
870-
PreferencesControllerActions,
871-
PreferencesControllerEvents | AllowedEvents
872-
>;
879+
messenger?: RootMessenger;
873880
} = {}) {
874-
const preferencesControllerMessenger = messenger.getRestricted<
881+
const preferencesControllerMessenger = new Messenger<
875882
'PreferencesController',
876-
never,
877-
AllowedEvents['type']
883+
AllPreferencesControllerActions,
884+
AllPreferencesControllerEvents,
885+
RootMessenger
878886
>({
879-
name: 'PreferencesController',
880-
allowedActions: [],
881-
allowedEvents: ['KeyringController:stateChange'],
887+
namespace: 'PreferencesController',
888+
parent: messenger,
889+
});
890+
messenger.delegate({
891+
messenger: preferencesControllerMessenger,
892+
actions: [],
893+
events: ['KeyringController:stateChange'],
882894
});
883895
return new PreferencesController({
884896
messenger: preferencesControllerMessenger,

packages/preferences-controller/src/PreferencesController.ts

Lines changed: 28 additions & 30 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';
@@ -157,139 +157,139 @@ const metadata = {
157157
featureFlags: {
158158
includeInStateLogs: true,
159159
persist: true,
160-
anonymous: true,
160+
includeInDebugSnapshot: true,
161161
usedInUi: true,
162162
},
163163
identities: {
164164
includeInStateLogs: true,
165165
persist: true,
166-
anonymous: false,
166+
includeInDebugSnapshot: false,
167167
usedInUi: true,
168168
},
169169
ipfsGateway: {
170170
includeInStateLogs: true,
171171
persist: true,
172-
anonymous: false,
172+
includeInDebugSnapshot: false,
173173
usedInUi: true,
174174
},
175175
isIpfsGatewayEnabled: {
176176
includeInStateLogs: true,
177177
persist: true,
178-
anonymous: true,
178+
includeInDebugSnapshot: true,
179179
usedInUi: true,
180180
},
181181
isMultiAccountBalancesEnabled: {
182182
includeInStateLogs: true,
183183
persist: true,
184-
anonymous: true,
184+
includeInDebugSnapshot: true,
185185
usedInUi: true,
186186
},
187187
lostIdentities: {
188188
includeInStateLogs: true,
189189
persist: true,
190-
anonymous: false,
190+
includeInDebugSnapshot: false,
191191
usedInUi: false,
192192
},
193193
displayNftMedia: {
194194
includeInStateLogs: true,
195195
persist: true,
196-
anonymous: true,
196+
includeInDebugSnapshot: true,
197197
usedInUi: true,
198198
},
199199
securityAlertsEnabled: {
200200
includeInStateLogs: true,
201201
persist: true,
202-
anonymous: true,
202+
includeInDebugSnapshot: true,
203203
usedInUi: true,
204204
},
205205
selectedAddress: {
206206
includeInStateLogs: true,
207207
persist: true,
208-
anonymous: false,
208+
includeInDebugSnapshot: false,
209209
usedInUi: true,
210210
},
211211
showTestNetworks: {
212212
includeInStateLogs: true,
213213
persist: true,
214-
anonymous: true,
214+
includeInDebugSnapshot: true,
215215
usedInUi: true,
216216
},
217217
showIncomingTransactions: {
218218
includeInStateLogs: true,
219219
persist: true,
220-
anonymous: true,
220+
includeInDebugSnapshot: true,
221221
usedInUi: true,
222222
},
223223
useNftDetection: {
224224
includeInStateLogs: true,
225225
persist: true,
226-
anonymous: true,
226+
includeInDebugSnapshot: true,
227227
usedInUi: true,
228228
},
229229
useTokenDetection: {
230230
includeInStateLogs: true,
231231
persist: true,
232-
anonymous: true,
232+
includeInDebugSnapshot: true,
233233
usedInUi: true,
234234
},
235235
smartTransactionsOptInStatus: {
236236
includeInStateLogs: true,
237237
persist: true,
238-
anonymous: false,
238+
includeInDebugSnapshot: false,
239239
usedInUi: true,
240240
},
241241
useTransactionSimulations: {
242242
includeInStateLogs: true,
243243
persist: true,
244-
anonymous: true,
244+
includeInDebugSnapshot: true,
245245
usedInUi: true,
246246
},
247247
showMultiRpcModal: {
248248
includeInStateLogs: true,
249249
persist: true,
250-
anonymous: true,
250+
includeInDebugSnapshot: true,
251251
usedInUi: true,
252252
},
253253
useSafeChainsListValidation: {
254254
includeInStateLogs: true,
255255
persist: true,
256-
anonymous: true,
256+
includeInDebugSnapshot: true,
257257
usedInUi: true,
258258
},
259259
tokenSortConfig: {
260260
includeInStateLogs: true,
261261
persist: true,
262-
anonymous: true,
262+
includeInDebugSnapshot: true,
263263
usedInUi: true,
264264
},
265265
privacyMode: {
266266
includeInStateLogs: true,
267267
persist: true,
268-
anonymous: true,
268+
includeInDebugSnapshot: true,
269269
usedInUi: true,
270270
},
271271
dismissSmartAccountSuggestionEnabled: {
272272
includeInStateLogs: true,
273273
persist: true,
274-
anonymous: true,
274+
includeInDebugSnapshot: true,
275275
usedInUi: true,
276276
},
277277
smartAccountOptIn: {
278278
includeInStateLogs: true,
279279
persist: true,
280-
anonymous: true,
280+
includeInDebugSnapshot: true,
281281
usedInUi: true,
282282
},
283283
smartAccountOptInForAccounts: {
284284
includeInStateLogs: true,
285285
persist: true,
286-
anonymous: true,
286+
includeInDebugSnapshot: true,
287287
usedInUi: true,
288288
},
289289
tokenNetworkFilter: {
290290
includeInStateLogs: true,
291291
persist: true,
292-
anonymous: false,
292+
includeInDebugSnapshot: false,
293293
usedInUi: true,
294294
},
295295
};
@@ -310,14 +310,12 @@ export type PreferencesControllerActions = PreferencesControllerGetStateAction;
310310

311311
export type PreferencesControllerEvents = PreferencesControllerStateChangeEvent;
312312

313-
export type AllowedEvents = KeyringControllerStateChangeEvent;
313+
type AllowedEvents = KeyringControllerStateChangeEvent;
314314

315-
export type PreferencesControllerMessenger = RestrictedMessenger<
315+
export type PreferencesControllerMessenger = Messenger<
316316
typeof name,
317317
PreferencesControllerActions,
318-
PreferencesControllerEvents | AllowedEvents,
319-
never,
320-
AllowedEvents['type']
318+
PreferencesControllerEvents | AllowedEvents
321319
>;
322320

323321
/**

packages/preferences-controller/tsconfig.build.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
"references": [
99
{ "path": "../base-controller/tsconfig.build.json" },
1010
{ "path": "../controller-utils/tsconfig.build.json" },
11-
{ "path": "../keyring-controller/tsconfig.build.json" }
11+
{ "path": "../keyring-controller/tsconfig.build.json" },
12+
{ "path": "../messenger/tsconfig.build.json" }
1213
],
1314
"include": ["../../types", "./src"]
1415
}

0 commit comments

Comments
 (0)