Skip to content

Commit ed9948c

Browse files
committed
refactor: migrate PhishingController to @metamask/messenger
1 parent 675e518 commit ed9948c

File tree

7 files changed

+98
-52
lines changed

7 files changed

+98
-52
lines changed

packages/phishing-controller/CHANGELOG.md

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

88
## [Unreleased]
99

10+
### Changed
11+
12+
- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6535](https://github.com/MetaMask/core/pull/6535))
13+
- Previously, `PhishingController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
14+
1015
## [14.1.0]
1116

1217
### Added

packages/phishing-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/controller-utils": "^11.14.0",
52+
"@metamask/messenger": "^0.3.0",
5253
"@noble/hashes": "^1.8.0",
5354
"@types/punycode": "^2.1.0",
5455
"ethereum-cryptography": "^2.1.2",

packages/phishing-controller/src/PhishingController.test.ts

Lines changed: 65 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1-
import { deriveStateFromMetadata, Messenger } from '@metamask/base-controller';
2-
import type { TransactionControllerStateChangeEvent } from '@metamask/transaction-controller';
1+
import { deriveStateFromMetadata } from '@metamask/base-controller/next';
2+
import {
3+
Messenger,
4+
MOCK_ANY_NAMESPACE,
5+
type MessengerActions,
6+
type MessengerEvents,
7+
type MockAnyNamespace,
8+
} from '@metamask/messenger';
39
import { strict as assert } from 'assert';
410
import nock, { cleanAll, isDone, pendingMocks } from 'nock';
511
import sinon from 'sinon';
@@ -10,15 +16,14 @@ import {
1016
METAMASK_STALELIST_FILE,
1117
PhishingController,
1218
PHISHING_CONFIG_BASE_URL,
13-
type PhishingControllerActions,
14-
type PhishingControllerEvents,
1519
type PhishingControllerOptions,
1620
CLIENT_SIDE_DETECION_BASE_URL,
1721
C2_DOMAIN_BLOCKLIST_ENDPOINT,
1822
PHISHING_DETECTION_BASE_URL,
1923
PHISHING_DETECTION_SCAN_ENDPOINT,
2024
PHISHING_DETECTION_BULK_SCAN_ENDPOINT,
2125
type BulkPhishingDetectionScanResponse,
26+
type PhishingControllerMessenger,
2227
} from './PhishingController';
2328
import {
2429
createMockStateChangePayload,
@@ -32,24 +37,58 @@ import { getHostnameFromUrl } from './utils';
3237

3338
const controllerName = 'PhishingController';
3439

40+
type AllPhishingControllerActions =
41+
MessengerActions<PhishingControllerMessenger>;
42+
43+
type AllPhishingControllerEvents = MessengerEvents<PhishingControllerMessenger>;
44+
45+
type RootMessenger = Messenger<
46+
MockAnyNamespace,
47+
AllPhishingControllerActions,
48+
AllPhishingControllerEvents
49+
>;
50+
3551
/**
36-
* Constructs a restricted messenger with transaction events enabled.
52+
* Creates and returns a root messenger for testing
3753
*
38-
* @returns A restricted messenger that can listen to TransactionController events.
54+
* @returns A messenger instance
3955
*/
40-
function getRestrictedMessengerWithTransactionEvents() {
56+
function getRootMessenger(): RootMessenger {
57+
return new Messenger({
58+
namespace: MOCK_ANY_NAMESPACE,
59+
});
60+
}
61+
62+
/**
63+
* Constructs a messenger for use in PhishingController tests.
64+
*
65+
* @returns A messenger and the root messenger.
66+
*/
67+
function setupMessenger(): {
68+
messenger: PhishingControllerMessenger;
69+
rootMessenger: RootMessenger;
70+
} {
71+
const rootMessenger = getRootMessenger();
72+
4173
const messenger = new Messenger<
42-
PhishingControllerActions,
43-
PhishingControllerEvents | TransactionControllerStateChangeEvent
44-
>();
74+
typeof controllerName,
75+
AllPhishingControllerActions,
76+
AllPhishingControllerEvents,
77+
RootMessenger
78+
>({
79+
namespace: controllerName,
80+
parent: rootMessenger,
81+
});
82+
83+
messenger.delegate({
84+
actions: [],
85+
events: ['TransactionController:stateChange'],
86+
messenger: rootMessenger,
87+
});
4588

4689
return {
47-
messenger: messenger.getRestricted({
48-
name: controllerName,
49-
allowedActions: [],
50-
allowedEvents: ['TransactionController:stateChange'],
51-
}),
52-
globalMessenger: messenger,
90+
messenger,
91+
rootMessenger,
5392
};
5493
}
5594

@@ -60,8 +99,9 @@ function getRestrictedMessengerWithTransactionEvents() {
6099
* @returns The constructed Phishing Controller.
61100
*/
62101
function getPhishingController(options?: Partial<PhishingControllerOptions>) {
102+
const { messenger } = setupMessenger();
63103
return new PhishingController({
64-
messenger: getRestrictedMessengerWithTransactionEvents().messenger,
104+
messenger,
65105
...options,
66106
});
67107
}
@@ -407,8 +447,9 @@ describe('PhishingController', () => {
407447
});
408448

409449
it('replaces existing phishing lists with completely new list from phishing detection API', async () => {
450+
const { messenger } = setupMessenger();
410451
const controller = new PhishingController({
411-
messenger: getRestrictedMessengerWithTransactionEvents().messenger,
452+
messenger,
412453
stalelistRefreshInterval: 10,
413454
state: {
414455
phishingLists: [
@@ -3495,7 +3536,7 @@ describe('URL Scan Cache', () => {
34953536
deriveStateFromMetadata(
34963537
controller.state,
34973538
controller.metadata,
3498-
'anonymous',
3539+
'includeInDebugSnapshot',
34993540
),
35003541
).toMatchInlineSnapshot(`Object {}`);
35013542
});
@@ -3561,18 +3602,16 @@ describe('URL Scan Cache', () => {
35613602

35623603
describe('Transaction Controller State Change Integration', () => {
35633604
let controller: PhishingController;
3564-
let globalMessenger: Messenger<
3565-
PhishingControllerActions,
3566-
PhishingControllerEvents | TransactionControllerStateChangeEvent
3567-
>;
3605+
let globalMessenger: RootMessenger;
35683606
let bulkScanTokensSpy: jest.SpyInstance;
35693607

35703608
beforeEach(() => {
3571-
const messengerSetup = getRestrictedMessengerWithTransactionEvents();
3572-
globalMessenger = messengerSetup.globalMessenger;
3609+
const { messenger, rootMessenger } = setupMessenger();
3610+
3611+
globalMessenger = rootMessenger;
35733612

35743613
controller = new PhishingController({
3575-
messenger: messengerSetup.messenger,
3614+
messenger,
35763615
});
35773616

35783617
bulkScanTokensSpy = jest

packages/phishing-controller/src/PhishingController.ts

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import type {
2-
ControllerGetStateAction,
3-
ControllerStateChangeEvent,
4-
RestrictedMessenger,
5-
StateMetadata,
6-
} from '@metamask/base-controller';
7-
import { BaseController } from '@metamask/base-controller';
1+
import {
2+
BaseController,
3+
type StateMetadata,
4+
type ControllerGetStateAction,
5+
type ControllerStateChangeEvent,
6+
} from '@metamask/base-controller/next';
87
import {
98
safelyExecute,
109
safelyExecuteWithTimeout,
1110
} from '@metamask/controller-utils';
11+
import { type Messenger } from '@metamask/messenger';
1212
import type {
1313
TransactionControllerStateChangeEvent,
1414
TransactionMeta,
@@ -238,49 +238,49 @@ const metadata: StateMetadata<PhishingControllerState> = {
238238
phishingLists: {
239239
includeInStateLogs: false,
240240
persist: true,
241-
anonymous: false,
241+
includeInDebugSnapshot: false,
242242
usedInUi: false,
243243
},
244244
whitelist: {
245245
includeInStateLogs: false,
246246
persist: true,
247-
anonymous: false,
247+
includeInDebugSnapshot: false,
248248
usedInUi: false,
249249
},
250250
whitelistPaths: {
251251
includeInStateLogs: false,
252252
persist: true,
253-
anonymous: false,
253+
includeInDebugSnapshot: false,
254254
usedInUi: false,
255255
},
256256
hotlistLastFetched: {
257257
includeInStateLogs: true,
258258
persist: true,
259-
anonymous: false,
259+
includeInDebugSnapshot: false,
260260
usedInUi: false,
261261
},
262262
stalelistLastFetched: {
263263
includeInStateLogs: true,
264264
persist: true,
265-
anonymous: false,
265+
includeInDebugSnapshot: false,
266266
usedInUi: false,
267267
},
268268
c2DomainBlocklistLastFetched: {
269269
includeInStateLogs: true,
270270
persist: true,
271-
anonymous: false,
271+
includeInDebugSnapshot: false,
272272
usedInUi: false,
273273
},
274274
urlScanCache: {
275275
includeInStateLogs: false,
276276
persist: true,
277-
anonymous: false,
277+
includeInDebugSnapshot: false,
278278
usedInUi: true,
279279
},
280280
tokenScanCache: {
281281
includeInStateLogs: false,
282282
persist: true,
283-
anonymous: false,
283+
includeInDebugSnapshot: false,
284284
usedInUi: true,
285285
},
286286
};
@@ -399,12 +399,10 @@ type AllowedActions = never;
399399
*/
400400
export type AllowedEvents = TransactionControllerStateChangeEvent;
401401

402-
export type PhishingControllerMessenger = RestrictedMessenger<
402+
export type PhishingControllerMessenger = Messenger<
403403
typeof controllerName,
404404
PhishingControllerActions | AllowedActions,
405-
PhishingControllerEvents | AllowedEvents,
406-
AllowedActions['type'],
407-
AllowedEvents['type']
405+
PhishingControllerEvents | AllowedEvents
408406
>;
409407

410408
/**
@@ -521,7 +519,7 @@ export class PhishingController extends BaseController<
521519
}
522520

523521
#subscribeToTransactionControllerStateChange() {
524-
this.messagingSystem.subscribe(
522+
this.messenger.subscribe(
525523
'TransactionController:stateChange',
526524
this.#transactionControllerStateChangeHandler,
527525
);
@@ -532,22 +530,22 @@ export class PhishingController extends BaseController<
532530
* actions.
533531
*/
534532
#registerMessageHandlers(): void {
535-
this.messagingSystem.registerActionHandler(
533+
this.messenger.registerActionHandler(
536534
`${controllerName}:maybeUpdateState` as const,
537535
this.maybeUpdateState.bind(this),
538536
);
539537

540-
this.messagingSystem.registerActionHandler(
538+
this.messenger.registerActionHandler(
541539
`${controllerName}:testOrigin` as const,
542540
this.test.bind(this),
543541
);
544542

545-
this.messagingSystem.registerActionHandler(
543+
this.messenger.registerActionHandler(
546544
`${controllerName}:bulkScanUrls` as const,
547545
this.bulkScanUrls.bind(this),
548546
);
549547

550-
this.messagingSystem.registerActionHandler(
548+
this.messenger.registerActionHandler(
551549
`${controllerName}:bulkScanTokens` as const,
552550
this.bulkScanTokens.bind(this),
553551
);

packages/phishing-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": "../transaction-controller/tsconfig.build.json" }
11+
{ "path": "../transaction-controller/tsconfig.build.json" },
12+
{ "path": "../messenger/tsconfig.build.json" }
1213
],
1314
"include": ["../../types", "./src"]
1415
}

packages/phishing-controller/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"references": [
77
{ "path": "../base-controller" },
88
{ "path": "../controller-utils" },
9-
{ "path": "../transaction-controller" }
9+
{ "path": "../transaction-controller" },
10+
{ "path": "../messenger" }
1011
],
1112
"include": ["../../types", "./src", "./tests"]
1213
}

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4212,6 +4212,7 @@ __metadata:
42124212
"@metamask/auto-changelog": "npm:^3.4.4"
42134213
"@metamask/base-controller": "npm:^8.4.0"
42144214
"@metamask/controller-utils": "npm:^11.14.0"
4215+
"@metamask/messenger": "npm:^0.3.0"
42154216
"@metamask/transaction-controller": "npm:^60.6.0"
42164217
"@noble/hashes": "npm:^1.8.0"
42174218
"@types/jest": "npm:^27.4.1"

0 commit comments

Comments
 (0)