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; diff --git a/packages/address-book-controller/CHANGELOG.md b/packages/address-book-controller/CHANGELOG.md index ac3795b6b8e..767ad204ebb 100644 --- a/packages/address-book-controller/CHANGELOG.md +++ b/packages/address-book-controller/CHANGELOG.md @@ -13,6 +13,8 @@ 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.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), [#6632](https://github.com/MetaMask/core/pull/6632)) - Bump `@metamask/controller-utils` from `^11.11.0` to `^11.14.0` ([#6303](https://github.com/MetaMask/core/pull/6303), [#6620](https://github.com/MetaMask/core/pull/6620), [#6629](https://github.com/MetaMask/core/pull/6629)) - Bump `@metamask/utils` from `^11.4.2` to `^11.8.0` ([#6588](https://github.com/MetaMask/core/pull/6588)) diff --git a/packages/address-book-controller/package.json b/packages/address-book-controller/package.json index 00b0d8b70f7..06c1d86a9d1 100644 --- a/packages/address-book-controller/package.json +++ b/packages/address-book-controller/package.json @@ -49,6 +49,7 @@ "dependencies": { "@metamask/base-controller": "^8.4.0", "@metamask/controller-utils": "^11.14.0", + "@metamask/messenger": "^0.3.0", "@metamask/utils": "^11.8.0" }, "devDependencies": { diff --git a/packages/address-book-controller/src/AddressBookController.test.ts b/packages/address-book-controller/src/AddressBookController.test.ts index 0a918ce8716..1b8e4ed5fb3 100644 --- a/packages/address-book-controller/src/AddressBookController.test.ts +++ b/packages/address-book-controller/src/AddressBookController.test.ts @@ -1,12 +1,17 @@ -import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller'; +import { deriveStateFromMetadata } from '@metamask/base-controller/next'; import { toHex } from '@metamask/controller-utils'; +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, @@ -14,23 +19,39 @@ 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 messenger = new Messenger< - AddressBookControllerActions, - AddressBookControllerEvents - >(); - const restrictedMessenger = messenger.getRestricted({ - name: controllerName, - allowedActions: [], - allowedEvents: [], + const rootMessenger = getRootMessenger(); + const addressBookControllerMessenger = new Messenger< + typeof controllerName, + AllActions, + AllEvents, + typeof rootMessenger + >({ + namespace: controllerName, + parent: rootMessenger, }); const controller = new AddressBookController({ - messenger: restrictedMessenger, + messenger: addressBookControllerMessenger, }); // Set up mock event listeners @@ -38,11 +59,11 @@ function arrangeMocks() { const contactDeletedListener = jest.fn(); // Subscribe to events - messenger.subscribe( - 'AddressBookController:contactUpdated' as AddressBookControllerContactUpdatedEvent['type'], + rootMessenger.subscribe( + 'AddressBookController:contactUpdated', contactUpdatedListener, ); - messenger.subscribe( + rootMessenger.subscribe( 'AddressBookController:contactDeleted' as AddressBookControllerContactDeletedEvent['type'], contactDeletedListener, ); @@ -627,7 +648,7 @@ describe('AddressBookController', () => { deriveStateFromMetadata( controller.state, controller.metadata, - 'anonymous', + 'includeInDebugSnapshot', ), ).toMatchInlineSnapshot(`Object {}`); }); diff --git a/packages/address-book-controller/src/AddressBookController.ts b/packages/address-book-controller/src/AddressBookController.ts index e02200b0710..13d00a1561b 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'; +} from '@metamask/base-controller/next'; +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'; /** @@ -150,7 +150,7 @@ const addressBookControllerMetadata = { addressBook: { includeInStateLogs: true, persist: true, - anonymous: false, + includeInDebugSnapshot: false, usedInUi: true, }, }; @@ -170,12 +170,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 >; /** @@ -275,7 +273,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, ); @@ -335,10 +333,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; @@ -348,15 +343,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), ); 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"] } diff --git a/yarn.lock b/yarn.lock index 1de1facfaea..c7fd154f0d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2503,6 +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.3.0" "@metamask/utils": "npm:^11.8.0" "@types/jest": "npm:^27.4.1" deepmerge: "npm:^4.2.2"