From 752ab8a8863cc8e999f769da57e01fb1c38934d2 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Tue, 26 Aug 2025 14:08:00 +0200 Subject: [PATCH 01/11] refactor: migrate `AddressBookController` to `@metamask/messenger` --- packages/address-book-controller/package.json | 1 + .../src/AddressBookController.test.ts | 25 +++++++++++-------- .../src/AddressBookController.ts | 23 +++++++---------- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/packages/address-book-controller/package.json b/packages/address-book-controller/package.json index 35b5e54aea5..8b0e34c7218 100644 --- a/packages/address-book-controller/package.json +++ b/packages/address-book-controller/package.json @@ -49,6 +49,7 @@ "dependencies": { "@metamask/base-controller": "^8.2.0", "@metamask/controller-utils": "^11.12.0", + "@metamask/messenger": "^0.1.0", "@metamask/utils": "^11.4.2" }, "devDependencies": { diff --git a/packages/address-book-controller/src/AddressBookController.test.ts b/packages/address-book-controller/src/AddressBookController.test.ts index 060948a59cb..00710157d2f 100644 --- a/packages/address-book-controller/src/AddressBookController.test.ts +++ b/packages/address-book-controller/src/AddressBookController.test.ts @@ -1,5 +1,5 @@ -import { Messenger } from '@metamask/base-controller'; import { toHex } from '@metamask/controller-utils'; +import { Messenger } from '@metamask/messenger'; import type { Hex } from '@metamask/utils'; import type { @@ -20,17 +20,22 @@ import { * @returns Test fixtures including messenger, controller, and event listeners */ function arrangeMocks() { - const messenger = new Messenger< + const rootMessenger = new Messenger< + 'Root', AddressBookControllerActions, AddressBookControllerEvents - >(); - const restrictedMessenger = messenger.getRestricted({ - name: controllerName, - allowedActions: [], - allowedEvents: [], + >({ namespace: 'Root' }); + const addressBookControllerMessenger = new Messenger< + typeof controllerName, + AddressBookControllerActions, + AddressBookControllerEvents, + typeof rootMessenger + >({ + namespace: controllerName, + parent: rootMessenger, }); const controller = new AddressBookController({ - messenger: restrictedMessenger, + messenger: addressBookControllerMessenger, }); // Set up mock event listeners @@ -38,11 +43,11 @@ function arrangeMocks() { const contactDeletedListener = jest.fn(); // Subscribe to events - messenger.subscribe( + rootMessenger.subscribe( 'AddressBookController:contactUpdated' as AddressBookControllerContactUpdatedEvent['type'], contactUpdatedListener, ); - messenger.subscribe( + rootMessenger.subscribe( 'AddressBookController:contactDeleted' as AddressBookControllerContactDeletedEvent['type'], contactDeletedListener, ); diff --git a/packages/address-book-controller/src/AddressBookController.ts b/packages/address-book-controller/src/AddressBookController.ts index b7637b22049..c9825e24571 100644 --- a/packages/address-book-controller/src/AddressBookController.ts +++ b/packages/address-book-controller/src/AddressBookController.ts @@ -1,9 +1,8 @@ import type { ControllerGetStateAction, ControllerStateChangeEvent, - RestrictedMessenger, } from '@metamask/base-controller'; -import { BaseController } from '@metamask/base-controller'; +import { BaseController } from '@metamask/base-controller/next'; import { normalizeEnsName, isValidHexAddress, @@ -11,6 +10,7 @@ import { toChecksumHexAddress, toHex, } from '@metamask/controller-utils'; +import type { Messenger } from '@metamask/messenger'; import type { Hex } from '@metamask/utils'; /** @@ -165,12 +165,10 @@ export const getDefaultAddressBookControllerState = /** * The messenger of the {@link AddressBookController} for communication. */ -export type AddressBookControllerMessenger = RestrictedMessenger< +export type AddressBookControllerMessenger = Messenger< typeof controllerName, AddressBookControllerActions, - AddressBookControllerEvents, - never, - never + AddressBookControllerEvents >; /** @@ -270,7 +268,7 @@ export class AddressBookController extends BaseController< // These entries with chainId='*' are the wallet's own accounts (internal MetaMask accounts), // not user-created contacts. They don't need to trigger sync events. if (String(chainId) !== WALLET_ACCOUNTS_CHAIN_ID) { - this.messagingSystem.publish( + this.messenger.publish( 'AddressBookController:contactDeleted', deletedEntry, ); @@ -330,10 +328,7 @@ export class AddressBookController extends BaseController< // These entries with chainId='*' are the wallet's own accounts (internal MetaMask accounts), // not user-created contacts. They don't need to trigger sync events. if (String(chainId) !== WALLET_ACCOUNTS_CHAIN_ID) { - this.messagingSystem.publish( - 'AddressBookController:contactUpdated', - entry, - ); + this.messenger.publish('AddressBookController:contactUpdated', entry); } return true; @@ -343,15 +338,15 @@ export class AddressBookController extends BaseController< * Registers message handlers for the AddressBookController. */ #registerMessageHandlers() { - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:list`, this.list.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:set`, this.set.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:delete`, this.delete.bind(this), ); From 82ec30e8c9e7f9f1c8945b2ab354d425f734f9b4 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Tue, 26 Aug 2025 14:10:14 +0200 Subject: [PATCH 02/11] update changelog --- packages/address-book-controller/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/address-book-controller/CHANGELOG.md b/packages/address-book-controller/CHANGELOG.md index 2e69e2e245d..ea3afd73b38 100644 --- a/packages/address-book-controller/CHANGELOG.md +++ b/packages/address-book-controller/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6380](https://github.com/MetaMask/core/pull/6380)) + - Previously, `AddressBookController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`. - Bump `@metamask/base-controller` from `^8.0.1` to `^8.2.0` ([#6284](https://github.com/MetaMask/core/pull/6284), [#6355](https://github.com/MetaMask/core/pull/6355)) - Bump `@metamask/controller-utils` from `^11.11.0` to `^11.12.0` ([#6303](https://github.com/MetaMask/core/pull/6303)) From 74782eec991968593097f9dd0dcd82ddbde4cfd8 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Tue, 26 Aug 2025 14:11:29 +0200 Subject: [PATCH 03/11] update pr link --- packages/address-book-controller/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/address-book-controller/CHANGELOG.md b/packages/address-book-controller/CHANGELOG.md index ea3afd73b38..28556c8b226 100644 --- a/packages/address-book-controller/CHANGELOG.md +++ b/packages/address-book-controller/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6380](https://github.com/MetaMask/core/pull/6380)) +- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6383](https://github.com/MetaMask/core/pull/6383)) - Previously, `AddressBookController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`. - Bump `@metamask/base-controller` from `^8.0.1` to `^8.2.0` ([#6284](https://github.com/MetaMask/core/pull/6284), [#6355](https://github.com/MetaMask/core/pull/6355)) - Bump `@metamask/controller-utils` from `^11.11.0` to `^11.12.0` ([#6303](https://github.com/MetaMask/core/pull/6303)) From dfd33e989d7a0cf1700f7338f011927dd9ed15a1 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Tue, 26 Aug 2025 14:22:08 +0200 Subject: [PATCH 04/11] update lockfile --- yarn.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn.lock b/yarn.lock index a431876c636..eb517cdb6d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2490,6 +2490,7 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.2.0" "@metamask/controller-utils": "npm:^11.12.0" + "@metamask/messenger": "npm:^0.1.0" "@metamask/utils": "npm:^11.4.2" "@types/jest": "npm:^27.4.1" deepmerge: "npm:^4.2.2" From 814aa6b47be3bb158bbd418e7bfb08362ba906f9 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 11:37:23 +0200 Subject: [PATCH 05/11] update tsconfigs --- packages/address-book-controller/tsconfig.build.json | 3 ++- packages/address-book-controller/tsconfig.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/address-book-controller/tsconfig.build.json b/packages/address-book-controller/tsconfig.build.json index bbfe057a207..5a5c9e2326a 100644 --- a/packages/address-book-controller/tsconfig.build.json +++ b/packages/address-book-controller/tsconfig.build.json @@ -7,7 +7,8 @@ }, "references": [ { "path": "../base-controller/tsconfig.build.json" }, - { "path": "../controller-utils/tsconfig.build.json" } + { "path": "../controller-utils/tsconfig.build.json" }, + { "path": "../messenger/tsconfig.build.json" } ], "include": ["../../types", "./src"] } diff --git a/packages/address-book-controller/tsconfig.json b/packages/address-book-controller/tsconfig.json index 7ee9852347a..dfd15011442 100644 --- a/packages/address-book-controller/tsconfig.json +++ b/packages/address-book-controller/tsconfig.json @@ -5,7 +5,8 @@ }, "references": [ { "path": "../base-controller" }, - { "path": "../controller-utils" } + { "path": "../controller-utils" }, + { "path": "../messenger" } ], "include": ["../../types", "./src"] } From cde42fadf3e9d0dd4c49b5ab3dcfb847c5a21b7a Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 13:54:58 +0200 Subject: [PATCH 06/11] use `MockAnyNamespace` namespace --- .../src/AddressBookController.test.ts | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/packages/address-book-controller/src/AddressBookController.test.ts b/packages/address-book-controller/src/AddressBookController.test.ts index d03719abe70..1b8e4ed5fb3 100644 --- a/packages/address-book-controller/src/AddressBookController.test.ts +++ b/packages/address-book-controller/src/AddressBookController.test.ts @@ -1,13 +1,17 @@ import { deriveStateFromMetadata } from '@metamask/base-controller/next'; import { toHex } from '@metamask/controller-utils'; -import { Messenger } from '@metamask/messenger'; +import { + Messenger, + MOCK_ANY_NAMESPACE, + type MessengerActions, + type MessengerEvents, + type MockAnyNamespace, +} from '@metamask/messenger'; import type { Hex } from '@metamask/utils'; import type { - AddressBookControllerActions, - AddressBookControllerEvents, - AddressBookControllerContactUpdatedEvent, AddressBookControllerContactDeletedEvent, + AddressBookControllerMessenger, } from './AddressBookController'; import { AddressBookController, @@ -15,21 +19,32 @@ import { controllerName, } from './AddressBookController'; +type AllActions = MessengerActions; + +type AllEvents = MessengerEvents; + +type RootMessenger = Messenger; + +/** + * Creates a new root messenger instance for testing. + * + * @returns A new Messenger instance. + */ +function getRootMessenger(): RootMessenger { + return new Messenger({ namespace: MOCK_ANY_NAMESPACE }); +} + /** * Helper function to create test fixtures * * @returns Test fixtures including messenger, controller, and event listeners */ function arrangeMocks() { - const rootMessenger = new Messenger< - 'Root', - AddressBookControllerActions, - AddressBookControllerEvents - >({ namespace: 'Root' }); + const rootMessenger = getRootMessenger(); const addressBookControllerMessenger = new Messenger< typeof controllerName, - AddressBookControllerActions, - AddressBookControllerEvents, + AllActions, + AllEvents, typeof rootMessenger >({ namespace: controllerName, @@ -45,7 +60,7 @@ function arrangeMocks() { // Subscribe to events rootMessenger.subscribe( - 'AddressBookController:contactUpdated' as AddressBookControllerContactUpdatedEvent['type'], + 'AddressBookController:contactUpdated', contactUpdatedListener, ); rootMessenger.subscribe( @@ -633,7 +648,7 @@ describe('AddressBookController', () => { deriveStateFromMetadata( controller.state, controller.metadata, - 'anonymous', + 'includeInDebugSnapshot', ), ).toMatchInlineSnapshot(`Object {}`); }); From 9845fb4f2a18d9ea05a939a718447e3559958ddb Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 13:55:12 +0200 Subject: [PATCH 07/11] rename `anonymout` to `includeInDebugSnapshot` --- packages/address-book-controller/src/AddressBookController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/address-book-controller/src/AddressBookController.ts b/packages/address-book-controller/src/AddressBookController.ts index fdf62deba30..13d00a1561b 100644 --- a/packages/address-book-controller/src/AddressBookController.ts +++ b/packages/address-book-controller/src/AddressBookController.ts @@ -1,7 +1,7 @@ import type { ControllerGetStateAction, ControllerStateChangeEvent, -} from '@metamask/base-controller'; +} from '@metamask/base-controller/next'; import { BaseController } from '@metamask/base-controller/next'; import { normalizeEnsName, @@ -150,7 +150,7 @@ const addressBookControllerMetadata = { addressBook: { includeInStateLogs: true, persist: true, - anonymous: false, + includeInDebugSnapshot: false, usedInUi: true, }, }; From 2258bbc6ee88c1f627539c5cb6221250012ee527 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 20:06:16 +0200 Subject: [PATCH 08/11] update messenger to ^0.3.0 --- packages/address-book-controller/package.json | 2 +- yarn.lock | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/address-book-controller/package.json b/packages/address-book-controller/package.json index 09b8b9caade..06c1d86a9d1 100644 --- a/packages/address-book-controller/package.json +++ b/packages/address-book-controller/package.json @@ -49,7 +49,7 @@ "dependencies": { "@metamask/base-controller": "^8.4.0", "@metamask/controller-utils": "^11.14.0", - "@metamask/messenger": "^0.2.0", + "@metamask/messenger": "^0.3.0", "@metamask/utils": "^11.8.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index dc693de41dc..b4c36a04d21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2503,7 +2503,7 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.4.0" "@metamask/controller-utils": "npm:^11.14.0" - "@metamask/messenger": "npm:^0.2.0" + "@metamask/messenger": "npm:^0.3.0" "@metamask/utils": "npm:^11.8.0" "@types/jest": "npm:^27.4.1" deepmerge: "npm:^4.2.2" @@ -3810,13 +3810,6 @@ __metadata: languageName: unknown linkType: soft -"@metamask/messenger@npm:^0.2.0": - version: 0.2.0 - resolution: "@metamask/messenger@npm:0.2.0" - checksum: 10/48f682d9cde1208fbda0936022dea37acc3828cc221203b5f917df25c131d9a250dc5e86e9263f5dba8ee7c05adc6752a68dfb57da7d297f95f38b052f4fe5c1 - languageName: node - linkType: hard - "@metamask/messenger@npm:^0.3.0, @metamask/messenger@workspace:packages/messenger": version: 0.0.0-use.local resolution: "@metamask/messenger@workspace:packages/messenger" From 3f0ecfc866b807332c31da7475cee1fdfb2a8f1f Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 20:15:13 +0200 Subject: [PATCH 09/11] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4eab983a1dc..4238ccc952d 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,7 @@ linkStyle default opacity:0.5 accounts_controller --> network_controller; address_book_controller --> base_controller; address_book_controller --> controller_utils; + address_book_controller --> messenger; announcement_controller --> base_controller; app_metadata_controller --> base_controller; approval_controller --> base_controller; From 3c427e7fc1640c71d91dcba9ab169c9926502d22 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Wed, 15 Oct 2025 11:18:42 +0200 Subject: [PATCH 10/11] dedupe packages --- yarn.lock | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/yarn.lock b/yarn.lock index 74aa0cd5141..affa6350cbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5056,26 +5056,7 @@ __metadata: languageName: unknown linkType: soft -"@metamask/utils@npm:^11.0.1, @metamask/utils@npm:^11.1.0, @metamask/utils@npm:^11.4.0": - version: 11.8.0 - resolution: "@metamask/utils@npm:11.8.0" - dependencies: - "@ethereumjs/tx": "npm:^4.2.0" - "@metamask/superstruct": "npm:^3.1.0" - "@noble/hashes": "npm:^1.3.1" - "@scure/base": "npm:^1.1.3" - "@types/debug": "npm:^4.1.7" - "@types/lodash": "npm:^4.17.20" - debug: "npm:^4.3.4" - lodash: "npm:^4.17.21" - pony-cause: "npm:^2.1.10" - semver: "npm:^7.5.4" - uuid: "npm:^9.0.1" - checksum: 10/d5a9d8c04223fc62b0d4a078b505e062f5d1d47e752df36802189bec19a9e68aee7a9b0df9b15e7e6fa15fd9d65f61c7e4909604209dddc21f0943cd9a2fd5d1 - languageName: node - linkType: hard - -"@metamask/utils@npm:^11.7.0, @metamask/utils@npm:^11.8.1": +"@metamask/utils@npm:^11.0.1, @metamask/utils@npm:^11.1.0, @metamask/utils@npm:^11.4.0, @metamask/utils@npm:^11.7.0, @metamask/utils@npm:^11.8.1": version: 11.8.1 resolution: "@metamask/utils@npm:11.8.1" dependencies: From c1fce8210adde8a8caf37649978945d9eac323a1 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Fri, 24 Oct 2025 19:11:48 +0200 Subject: [PATCH 11/11] update changelog and readme --- README.md | 1 + packages/address-book-controller/CHANGELOG.md | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7245d5dba6f..3d8dbd26ff5 100644 --- a/README.md +++ b/README.md @@ -217,6 +217,7 @@ linkStyle default opacity:0.5 earn_controller --> transaction_controller; eip_5792_middleware --> transaction_controller; eip_5792_middleware --> keyring_controller; + eip_7702_internal_rpc_middleware --> controller_utils; eip1193_permission_middleware --> chain_agnostic_permission; eip1193_permission_middleware --> controller_utils; eip1193_permission_middleware --> json_rpc_engine; diff --git a/packages/address-book-controller/CHANGELOG.md b/packages/address-book-controller/CHANGELOG.md index 7fa4ef6fe21..3570d2aa57f 100644 --- a/packages/address-book-controller/CHANGELOG.md +++ b/packages/address-book-controller/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6383](https://github.com/MetaMask/core/pull/6383)) + - Previously, `AddressBookController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`. +- **BREAKING:** Metadata property `anonymous` renamed to `includeInDebugSnapshot` ([#6383](https://github.com/MetaMask/core/pull/6383)) + ## [6.2.1] ### Changed @@ -21,8 +27,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6383](https://github.com/MetaMask/core/pull/6383)) - - Previously, `AddressBookController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`. - Bump `@metamask/base-controller` from `^8.0.1` to `^8.4.1` ([#6284](https://github.com/MetaMask/core/pull/6284), [#6355](https://github.com/MetaMask/core/pull/6355), [#6465](https://github.com/MetaMask/core/pull/6465), [#6632](https://github.com/MetaMask/core/pull/6632), [#6807](https://github.com/MetaMask/core/pull/6807)) - Bump `@metamask/controller-utils` from `^11.11.0` to `^11.14.1` ([#6303](https://github.com/MetaMask/core/pull/6303), [#6620](https://github.com/MetaMask/core/pull/6620), [#6629](https://github.com/MetaMask/core/pull/6629), [#6807](https://github.com/MetaMask/core/pull/6807)) - Bump `@metamask/utils` from `^11.4.2` to `^11.8.1` ([#6588](https://github.com/MetaMask/core/pull/6588), [#6708](https://github.com/MetaMask/core/pull/6708))