From 3e6263391a6f81483a760b3a06d199fe1b8aa7f2 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 1 Sep 2025 19:13:00 +0200 Subject: [PATCH 01/13] refactor: migrate `AccountsController` to `@metamask/messenger` --- packages/accounts-controller/package.json | 1 + .../src/AccountsController.test.ts | 144 +++++++++++------- .../src/AccountsController.ts | 73 ++++----- yarn.lock | 1 + 4 files changed, 122 insertions(+), 97 deletions(-) diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index d7a923c21d6..3a1249f27e7 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -53,6 +53,7 @@ "@metamask/keyring-api": "^20.1.0", "@metamask/keyring-internal-api": "^8.1.0", "@metamask/keyring-utils": "^3.1.0", + "@metamask/messenger": "^0.1.0", "@metamask/snaps-sdk": "^9.0.0", "@metamask/snaps-utils": "^11.0.0", "@metamask/superstruct": "^3.1.0", diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts index 2b7732cf613..5658a2732e7 100644 --- a/packages/accounts-controller/src/AccountsController.test.ts +++ b/packages/accounts-controller/src/AccountsController.test.ts @@ -1,4 +1,3 @@ -import { Messenger } from '@metamask/base-controller'; import { InfuraNetworkType } from '@metamask/controller-utils'; import type { AccountAssetListUpdatedEventPayload, @@ -15,6 +14,12 @@ import { } from '@metamask/keyring-api'; import { KeyringTypes } from '@metamask/keyring-controller'; import type { InternalAccount } from '@metamask/keyring-internal-api'; +import { + Messenger, + DISABLE_NAMESPACE, + type MessengerActions, + type MessengerEvents, +} from '@metamask/messenger'; import type { NetworkClientId } from '@metamask/network-controller'; import type { SnapControllerState } from '@metamask/snaps-controllers'; import { SnapStatus } from '@metamask/snaps-utils'; @@ -25,6 +30,7 @@ import * as uuid from 'uuid'; import type { AccountsControllerActions, AccountsControllerEvents, + AccountsControllerMessenger, AccountsControllerState, AllowedActions, AllowedEvents, @@ -41,6 +47,17 @@ import { keyringTypeToName, } from './utils'; +type AllAccountsControllerActions = + MessengerActions; + +type AllAccountsControllerEvents = MessengerEvents; + +type RootMessenger = Messenger< + string, + AllAccountsControllerActions, + AllAccountsControllerEvents +>; + jest.mock('uuid'); const mockUUID = jest.spyOn(uuid, 'v4'); const actualUUID = jest.requireActual('uuid').v4; // We also use uuid.v4 in our mocks @@ -223,21 +240,35 @@ function setExpectedLastSelectedAsAny( */ function buildMessenger() { return new Messenger< - AccountsControllerActions | AllowedActions, - AccountsControllerEvents | AllowedEvents - >(); + string, + AllAccountsControllerActions, + AllAccountsControllerEvents + >({ namespace: DISABLE_NAMESPACE }); } /** - * Builds a restricted messenger for the AccountsController. + * Builds a messenger for the AccountsController. * - * @param messenger - The messenger to restrict. - * @returns The restricted messenger. + * @param rootMessenger - The parent messenger. + * @returns The messenger for AccountsController. */ -function buildAccountsControllerMessenger(messenger = buildMessenger()) { - return messenger.getRestricted({ - name: 'AccountsController', - allowedEvents: [ +function buildAccountsControllerMessenger(rootMessenger = buildMessenger()) { + const accountsControllerMessenger = new Messenger< + 'AccountsController', + AllAccountsControllerActions, + AllAccountsControllerEvents, + typeof rootMessenger + >({ + namespace: 'AccountsController', + parent: rootMessenger, + }); + rootMessenger.delegate({ + messenger: accountsControllerMessenger, + actions: [ + 'KeyringController:getState', + 'KeyringController:getKeyringsByType', + ], + events: [ 'SnapController:stateChange', 'KeyringController:stateChange', 'SnapKeyring:accountAssetListUpdated', @@ -245,11 +276,8 @@ function buildAccountsControllerMessenger(messenger = buildMessenger()) { 'SnapKeyring:accountTransactionsUpdated', 'MultichainNetworkController:networkDidChange', ], - allowedActions: [ - 'KeyringController:getState', - 'KeyringController:getKeyringsByType', - ], }); + return accountsControllerMessenger; } /** @@ -257,7 +285,7 @@ function buildAccountsControllerMessenger(messenger = buildMessenger()) { * * @param options - The options object. * @param [options.initialState] - The initial state to use for the AccountsController. - * @param [options.messenger] - Messenger to use for the AccountsController. + * @param [options.messenger] - The root messenger to use for creating the AccountsController messenger. * @returns An instance of the AccountsController class. */ function setupAccountsController({ @@ -265,16 +293,11 @@ function setupAccountsController({ messenger = buildMessenger(), }: { initialState?: Partial; - messenger?: Messenger< - AccountsControllerActions | AllowedActions, - AccountsControllerEvents | AllowedEvents - >; + messenger?: RootMessenger; }): { accountsController: AccountsController; - messenger: Messenger< - AccountsControllerActions | AllowedActions, - AccountsControllerEvents | AllowedEvents - >; + messenger: RootMessenger; + accountsControllerMessenger: AccountsControllerMessenger; triggerMultichainNetworkChange: (id: NetworkClientId | CaipChainId) => void; } { const accountsControllerMessenger = @@ -288,7 +311,12 @@ function setupAccountsController({ const triggerMultichainNetworkChange = (id: NetworkClientId | CaipChainId) => messenger.publish('MultichainNetworkController:networkDidChange', id); - return { accountsController, messenger, triggerMultichainNetworkChange }; + return { + accountsController, + messenger, + accountsControllerMessenger, + triggerMultichainNetworkChange, + }; } describe('AccountsController', () => { @@ -1136,11 +1164,10 @@ describe('AccountsController', () => { it('publishes accountAdded event', async () => { const messenger = buildMessenger(); - const messengerSpy = jest.spyOn(messenger, 'publish'); mockUUIDWithNormalAccounts([mockAccount, mockAccount2]); - setupAccountsController({ + const { accountsControllerMessenger } = setupAccountsController({ initialState: { internalAccounts: { accounts: { @@ -1152,6 +1179,8 @@ describe('AccountsController', () => { messenger, }); + const messengerSpy = jest.spyOn(accountsControllerMessenger, 'publish'); + const mockNewKeyringState = { isUnlocked: true, keyrings: [ @@ -1172,11 +1201,10 @@ describe('AccountsController', () => { [], ); - // First call is 'KeyringController:stateChange' + // First call is 'AccountsController:stateChange' expect(messengerSpy).toHaveBeenNthCalledWith( - // 1. KeyringController:stateChange - // 2. AccountsController:stateChange - 3, + // 1. AccountsController:stateChange + 2, 'AccountsController:accountAdded', MockExpectedInternalAccountBuilder.from(mockAccount2) .setExpectedLastSelectedAsAny() @@ -1437,11 +1465,10 @@ describe('AccountsController', () => { it('publishes accountRemoved event', async () => { const messenger = buildMessenger(); - const messengerSpy = jest.spyOn(messenger, 'publish'); mockUUIDWithNormalAccounts([mockAccount, mockAccount2]); - setupAccountsController({ + const { accountsControllerMessenger } = setupAccountsController({ initialState: { internalAccounts: { accounts: { @@ -1454,6 +1481,8 @@ describe('AccountsController', () => { messenger, }); + const messengerSpy = jest.spyOn(accountsControllerMessenger, 'publish'); + const mockNewKeyringState = { isUnlocked: true, keyrings: [ @@ -1473,11 +1502,10 @@ describe('AccountsController', () => { [], ); - // First call is 'KeyringController:stateChange' + // First call is 'AccountsController:stateChange' expect(messengerSpy).toHaveBeenNthCalledWith( - // 1. KeyringController:stateChange - // 2. AccountsController:stateChange - 3, + // 1. AccountsController:stateChange + 2, 'AccountsController:accountRemoved', mockAccount3.id, ); @@ -3085,19 +3113,20 @@ describe('AccountsController', () => { }, type: BtcAccountType.P2wpkh, }); - const { accountsController, messenger } = setupAccountsController({ - initialState: { - internalAccounts: { - accounts: { - [mockAccount.id]: mockAccount, - [mockNonEvmAccount.id]: mockNonEvmAccount, + const { accountsController, accountsControllerMessenger } = + setupAccountsController({ + initialState: { + internalAccounts: { + accounts: { + [mockAccount.id]: mockAccount, + [mockNonEvmAccount.id]: mockNonEvmAccount, + }, + selectedAccount: mockAccount.id, }, - selectedAccount: mockAccount.id, }, - }, - }); + }); - const messengerSpy = jest.spyOn(messenger, 'publish'); + const messengerSpy = jest.spyOn(accountsControllerMessenger, 'publish'); accountsController.setSelectedAccount(mockNonEvmAccount.id); @@ -3191,10 +3220,10 @@ describe('AccountsController', () => { }); it('publishes the accountRenamed event', () => { - const { accountsController, messenger } = + const { accountsController, accountsControllerMessenger } = setupAccountsController(mockState); - const messengerSpy = jest.spyOn(messenger, 'publish'); + const messengerSpy = jest.spyOn(accountsControllerMessenger, 'publish'); accountsController.setAccountNameAndSelectAccount( mockAccount.id, @@ -3269,16 +3298,17 @@ describe('AccountsController', () => { }); it('publishes the accountRenamed event', () => { - const { accountsController, messenger } = setupAccountsController({ - initialState: { - internalAccounts: { - accounts: { [mockAccount.id]: mockAccount }, - selectedAccount: mockAccount.id, + const { accountsController, accountsControllerMessenger } = + setupAccountsController({ + initialState: { + internalAccounts: { + accounts: { [mockAccount.id]: mockAccount }, + selectedAccount: mockAccount.id, + }, }, - }, - }); + }); - const messengerSpy = jest.spyOn(messenger, 'publish'); + const messengerSpy = jest.spyOn(accountsControllerMessenger, 'publish'); accountsController.setAccountName(mockAccount.id, 'new name'); diff --git a/packages/accounts-controller/src/AccountsController.ts b/packages/accounts-controller/src/AccountsController.ts index ff1c6c429bf..b8081c882cf 100644 --- a/packages/accounts-controller/src/AccountsController.ts +++ b/packages/accounts-controller/src/AccountsController.ts @@ -1,10 +1,8 @@ import { type ControllerGetStateAction, type ControllerStateChangeEvent, - type ExtractEventPayload, - type RestrictedMessenger, BaseController, -} from '@metamask/base-controller'; +} from '@metamask/base-controller/next'; import { type SnapKeyringAccountAssetListUpdatedEvent, type SnapKeyringAccountBalancesUpdatedEvent, @@ -29,6 +27,7 @@ import { } from '@metamask/keyring-controller'; import type { InternalAccount } from '@metamask/keyring-internal-api'; import { isScopeEqualToAny } from '@metamask/keyring-utils'; +import type { Messenger, ExtractEventPayload } from '@metamask/messenger'; import type { NetworkClientId } from '@metamask/network-controller'; import type { SnapControllerState, @@ -212,12 +211,10 @@ export type AccountsControllerEvents = | AccountsControllerAccountTransactionsUpdatedEvent | AccountsControllerAccountAssetListUpdatedEvent; -export type AccountsControllerMessenger = RestrictedMessenger< +export type AccountsControllerMessenger = Messenger< typeof controllerName, AccountsControllerActions | AllowedActions, - AccountsControllerEvents | AllowedEvents, - AllowedActions['type'], - AllowedEvents['type'] + AccountsControllerEvents | AllowedEvents >; const accountsControllerMetadata = { @@ -484,7 +481,7 @@ export class AccountsController extends BaseController< state.internalAccounts.selectedAccount = account.id; }); - this.messagingSystem.publish( + this.messenger.publish( 'AccountsController:accountRenamed', internalAccount, ); @@ -528,7 +525,7 @@ export class AccountsController extends BaseController< }); if (metadata.name) { - this.messagingSystem.publish( + this.messenger.publish( 'AccountsController:accountRenamed', internalAccount, ); @@ -548,9 +545,7 @@ export class AccountsController extends BaseController< const internalAccounts: AccountsControllerState['internalAccounts']['accounts'] = {}; - const { keyrings } = this.messagingSystem.call( - 'KeyringController:getState', - ); + const { keyrings } = this.messenger.call('KeyringController:getState'); for (const keyring of keyrings) { const keyringTypeName = keyringTypeToName(keyring.type); @@ -707,7 +702,7 @@ export class AccountsController extends BaseController< * @returns The Snap keyring if available. */ #getSnapKeyring(): SnapKeyring | undefined { - const [snapKeyring] = this.messagingSystem.call( + const [snapKeyring] = this.messenger.call( 'KeyringController:getKeyringsByType', SnapKeyring.type, ); @@ -731,7 +726,7 @@ export class AccountsController extends BaseController< event: EventType, ...payload: ExtractEventPayload ): void { - this.messagingSystem.publish(event, ...payload); + this.messenger.publish(event, ...payload); } /** @@ -882,11 +877,11 @@ export class AccountsController extends BaseController< // Now publish events for (const id of diff.removed) { - this.messagingSystem.publish('AccountsController:accountRemoved', id); + this.messenger.publish('AccountsController:accountRemoved', id); } for (const account of diff.added) { - this.messagingSystem.publish('AccountsController:accountAdded', account); + this.messenger.publish('AccountsController:accountAdded', account); } // NOTE: Since we also track "updated" accounts with our patches, we could fire a new event @@ -939,12 +934,12 @@ export class AccountsController extends BaseController< // `selectedAccount` to be non-empty. if (account) { if (isEvmAccountType(account.type)) { - this.messagingSystem.publish( + this.messenger.publish( 'AccountsController:selectedEvmAccountChange', account, ); } - this.messagingSystem.publish( + this.messenger.publish( 'AccountsController:selectedAccountChange', account, ); @@ -1186,17 +1181,15 @@ export class AccountsController extends BaseController< * Subscribes to message events. */ #subscribeToMessageEvents() { - this.messagingSystem.subscribe( - 'SnapController:stateChange', - (snapStateState) => this.#handleOnSnapStateChange(snapStateState), + this.messenger.subscribe('SnapController:stateChange', (snapStateState) => + this.#handleOnSnapStateChange(snapStateState), ); - this.messagingSystem.subscribe( - 'KeyringController:stateChange', - (keyringState) => this.#handleOnKeyringStateChange(keyringState), + this.messenger.subscribe('KeyringController:stateChange', (keyringState) => + this.#handleOnKeyringStateChange(keyringState), ); - this.messagingSystem.subscribe( + this.messenger.subscribe( 'SnapKeyring:accountAssetListUpdated', (snapAccountEvent) => this.#handleOnSnapKeyringAccountEvent( @@ -1205,7 +1198,7 @@ export class AccountsController extends BaseController< ), ); - this.messagingSystem.subscribe( + this.messenger.subscribe( 'SnapKeyring:accountBalancesUpdated', (snapAccountEvent) => this.#handleOnSnapKeyringAccountEvent( @@ -1214,7 +1207,7 @@ export class AccountsController extends BaseController< ), ); - this.messagingSystem.subscribe( + this.messenger.subscribe( 'SnapKeyring:accountTransactionsUpdated', (snapAccountEvent) => this.#handleOnSnapKeyringAccountEvent( @@ -1224,7 +1217,7 @@ export class AccountsController extends BaseController< ); // Handle account change when multichain network is changed - this.messagingSystem.subscribe( + this.messenger.subscribe( 'MultichainNetworkController:networkDidChange', (id) => this.#handleOnMultichainNetworkDidChange(id), ); @@ -1234,62 +1227,62 @@ export class AccountsController extends BaseController< * Registers message handlers for the AccountsController. */ #registerMessageHandlers() { - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:setSelectedAccount`, this.setSelectedAccount.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:listAccounts`, this.listAccounts.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:listMultichainAccounts`, this.listMultichainAccounts.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:setAccountName`, this.setAccountName.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:setAccountNameAndSelectAccount`, this.setAccountNameAndSelectAccount.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:updateAccounts`, this.updateAccounts.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:getSelectedAccount`, this.getSelectedAccount.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:getSelectedMultichainAccount`, this.getSelectedMultichainAccount.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:getAccountByAddress`, this.getAccountByAddress.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `${controllerName}:getNextAvailableAccountName`, this.getNextAvailableAccountName.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `AccountsController:getAccount`, this.getAccount.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( `AccountsController:updateAccountMetadata`, this.updateAccountMetadata.bind(this), ); diff --git a/yarn.lock b/yarn.lock index d034e506bb5..5fadf9cb940 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2443,6 +2443,7 @@ __metadata: "@metamask/keyring-controller": "npm:^23.0.0" "@metamask/keyring-internal-api": "npm:^8.1.0" "@metamask/keyring-utils": "npm:^3.1.0" + "@metamask/messenger": "npm:^0.1.0" "@metamask/network-controller": "npm:^24.1.0" "@metamask/providers": "npm:^22.1.0" "@metamask/snaps-controllers": "npm:^14.0.1" From 443a6ee5eed0a7d3b25051a3c5270134e489292c Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 1 Sep 2025 19:18:13 +0200 Subject: [PATCH 02/13] update changelog --- packages/accounts-controller/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/accounts-controller/CHANGELOG.md b/packages/accounts-controller/CHANGELOG.md index 54b0871af5d..0aed9097df6 100644 --- a/packages/accounts-controller/CHANGELOG.md +++ b/packages/accounts-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` ([#6426](https://github.com/MetaMask/core/pull/6426)) + - Previously, `AccountsController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`. - Bump `@metamask/base-controller` from `^8.1.0` to `^8.2.0` ([#6355](https://github.com/MetaMask/core/pull/6355)) ## [33.0.0] From b25ee8eac974f3ae3d8d37a5aae8409e59bde397 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 1 Sep 2025 19:22:18 +0200 Subject: [PATCH 03/13] refactor `buildMessenger` --- .../src/AccountsController.test.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts index 5658a2732e7..fd714432f72 100644 --- a/packages/accounts-controller/src/AccountsController.test.ts +++ b/packages/accounts-controller/src/AccountsController.test.ts @@ -234,16 +234,12 @@ function setExpectedLastSelectedAsAny( } /** - * Builds a new instance of the Messenger class for the AccountsController. + * Builds a new instance of the Root Messenger. * - * @returns A new instance of the Messenger class for the AccountsController. + * @returns A new instance of the Root Messenger. */ -function buildMessenger() { - return new Messenger< - string, - AllAccountsControllerActions, - AllAccountsControllerEvents - >({ namespace: DISABLE_NAMESPACE }); +function buildMessenger(): RootMessenger { + return new Messenger({ namespace: DISABLE_NAMESPACE }); } /** From 3453a8d26d39e958fb71c95065680326afc09221 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 1 Sep 2025 19:36:03 +0200 Subject: [PATCH 04/13] remove unused variables --- packages/accounts-controller/src/AccountsController.test.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts index fd714432f72..2ed026070a4 100644 --- a/packages/accounts-controller/src/AccountsController.test.ts +++ b/packages/accounts-controller/src/AccountsController.test.ts @@ -28,12 +28,8 @@ import type { V4Options } from 'uuid'; import * as uuid from 'uuid'; import type { - AccountsControllerActions, - AccountsControllerEvents, AccountsControllerMessenger, AccountsControllerState, - AllowedActions, - AllowedEvents, } from './AccountsController'; import { AccountsController, EMPTY_ACCOUNT } from './AccountsController'; import { From 3c6828e921a6a9dc8572ba70a0c2d6daa553647a Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Wed, 3 Sep 2025 11:51:26 +0200 Subject: [PATCH 05/13] update messenger imports --- .../accounts-controller/src/AccountsController.test.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts index 2ed026070a4..b0557d7bad8 100644 --- a/packages/accounts-controller/src/AccountsController.test.ts +++ b/packages/accounts-controller/src/AccountsController.test.ts @@ -15,10 +15,11 @@ import { import { KeyringTypes } from '@metamask/keyring-controller'; import type { InternalAccount } from '@metamask/keyring-internal-api'; import { + MOCK_ANY_NAMESPACE, Messenger, - DISABLE_NAMESPACE, type MessengerActions, type MessengerEvents, + type MockAnyNamespace, } from '@metamask/messenger'; import type { NetworkClientId } from '@metamask/network-controller'; import type { SnapControllerState } from '@metamask/snaps-controllers'; @@ -49,7 +50,7 @@ type AllAccountsControllerActions = type AllAccountsControllerEvents = MessengerEvents; type RootMessenger = Messenger< - string, + MockAnyNamespace, AllAccountsControllerActions, AllAccountsControllerEvents >; @@ -235,7 +236,7 @@ function setExpectedLastSelectedAsAny( * @returns A new instance of the Root Messenger. */ function buildMessenger(): RootMessenger { - return new Messenger({ namespace: DISABLE_NAMESPACE }); + return new Messenger({ namespace: MOCK_ANY_NAMESPACE }); } /** From 7db8785075adec8d467a835ac397cda606ee9373 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 11:33:32 +0200 Subject: [PATCH 06/13] update messenger package --- packages/accounts-controller/package.json | 2 +- yarn.lock | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index 50badec5d9e..e96bd39abfd 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -53,7 +53,7 @@ "@metamask/keyring-api": "^21.0.0", "@metamask/keyring-internal-api": "^9.0.0", "@metamask/keyring-utils": "^3.1.0", - "@metamask/messenger": "^0.1.0", + "@metamask/messenger": "^0.2.0", "@metamask/snaps-sdk": "^9.0.0", "@metamask/snaps-utils": "^11.0.0", "@metamask/superstruct": "^3.1.0", diff --git a/yarn.lock b/yarn.lock index 5743614eb08..f4d5f2504b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2456,7 +2456,7 @@ __metadata: "@metamask/keyring-controller": "npm:^23.1.0" "@metamask/keyring-internal-api": "npm:^9.0.0" "@metamask/keyring-utils": "npm:^3.1.0" - "@metamask/messenger": "npm:^0.1.0" + "@metamask/messenger": "npm:^0.2.0" "@metamask/network-controller": "npm:^24.1.0" "@metamask/providers": "npm:^22.1.0" "@metamask/snaps-controllers": "npm:^14.0.1" @@ -3810,6 +3810,13 @@ __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 bff153674e39c74f9a4cd8263628134d9e36b760 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 11:33:36 +0200 Subject: [PATCH 07/13] update tsconfigs --- packages/accounts-controller/tsconfig.build.json | 3 ++- packages/accounts-controller/tsconfig.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/accounts-controller/tsconfig.build.json b/packages/accounts-controller/tsconfig.build.json index 2ccd968d36d..d95a2cae72e 100644 --- a/packages/accounts-controller/tsconfig.build.json +++ b/packages/accounts-controller/tsconfig.build.json @@ -11,7 +11,8 @@ "path": "../base-controller/tsconfig.build.json" }, { "path": "../keyring-controller/tsconfig.build.json" }, - { "path": "../network-controller/tsconfig.build.json" } + { "path": "../network-controller/tsconfig.build.json" }, + { "path": "../messenger/tsconfig.build.json" } ], "include": ["../../types", "./src"] } diff --git a/packages/accounts-controller/tsconfig.json b/packages/accounts-controller/tsconfig.json index 12cd20ecb5c..d568399237d 100644 --- a/packages/accounts-controller/tsconfig.json +++ b/packages/accounts-controller/tsconfig.json @@ -10,7 +10,8 @@ { "path": "../keyring-controller" }, - { "path": "../network-controller" } + { "path": "../network-controller" }, + { "path": "../messenger" } ], "include": ["../../types", "./src", "src/tests"] } From 74bd264a2b453ffd00d5f4bc5f14251832d815e0 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 13:58:28 +0200 Subject: [PATCH 08/13] update messenger package to `^0.3.0` --- packages/accounts-controller/package.json | 2 +- yarn.lock | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/accounts-controller/package.json b/packages/accounts-controller/package.json index e96bd39abfd..b0dfa635ab7 100644 --- a/packages/accounts-controller/package.json +++ b/packages/accounts-controller/package.json @@ -53,7 +53,7 @@ "@metamask/keyring-api": "^21.0.0", "@metamask/keyring-internal-api": "^9.0.0", "@metamask/keyring-utils": "^3.1.0", - "@metamask/messenger": "^0.2.0", + "@metamask/messenger": "^0.3.0", "@metamask/snaps-sdk": "^9.0.0", "@metamask/snaps-utils": "^11.0.0", "@metamask/superstruct": "^3.1.0", diff --git a/yarn.lock b/yarn.lock index f4d5f2504b5..51ee348dee3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2456,7 +2456,7 @@ __metadata: "@metamask/keyring-controller": "npm:^23.1.0" "@metamask/keyring-internal-api": "npm:^9.0.0" "@metamask/keyring-utils": "npm:^3.1.0" - "@metamask/messenger": "npm:^0.2.0" + "@metamask/messenger": "npm:^0.3.0" "@metamask/network-controller": "npm:^24.1.0" "@metamask/providers": "npm:^22.1.0" "@metamask/snaps-controllers": "npm:^14.0.1" @@ -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 17359ad0da88a88579008e5e0c824f4882aae704 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 14:13:44 +0200 Subject: [PATCH 09/13] rename `anonymous` to `includeInDebugSnapshot` --- .../accounts-controller/src/AccountsController.test.ts | 10 +++++----- packages/accounts-controller/src/AccountsController.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts index 46661f50cee..97affea7864 100644 --- a/packages/accounts-controller/src/AccountsController.test.ts +++ b/packages/accounts-controller/src/AccountsController.test.ts @@ -3922,19 +3922,19 @@ describe('AccountsController', () => { describe('metadata', () => { it('includes expected state in debug snapshots', () => { - const { accountsController: controller } = setupAccountsController(); + const { accountsController: controller } = setupAccountsController({}); expect( deriveStateFromMetadata( controller.state, controller.metadata, - 'anonymous', + 'includeInDebugSnapshot', ), ).toMatchInlineSnapshot(`Object {}`); }); it('includes expected state in state logs', () => { - const { accountsController: controller } = setupAccountsController(); + const { accountsController: controller } = setupAccountsController({}); expect( deriveStateFromMetadata( @@ -3953,7 +3953,7 @@ describe('AccountsController', () => { }); it('persists expected state', () => { - const { accountsController: controller } = setupAccountsController(); + const { accountsController: controller } = setupAccountsController({}); expect( deriveStateFromMetadata( @@ -3972,7 +3972,7 @@ describe('AccountsController', () => { }); it('exposes expected state to UI', () => { - const { accountsController: controller } = setupAccountsController(); + const { accountsController: controller } = setupAccountsController({}); expect( deriveStateFromMetadata( diff --git a/packages/accounts-controller/src/AccountsController.ts b/packages/accounts-controller/src/AccountsController.ts index 91ef89f4c1e..b5206c47626 100644 --- a/packages/accounts-controller/src/AccountsController.ts +++ b/packages/accounts-controller/src/AccountsController.ts @@ -221,7 +221,7 @@ const accountsControllerMetadata = { internalAccounts: { includeInStateLogs: true, persist: true, - anonymous: false, + includeInDebugSnapshot: false, usedInUi: true, }, }; From 53e3844cecff25b0475cc6c0d862ff695e4c0149 Mon Sep 17 00:00:00 2001 From: Michele Esposito <34438276+mikesposito@users.noreply.github.com> Date: Mon, 22 Sep 2025 19:54:38 +0200 Subject: [PATCH 10/13] Update packages/accounts-controller/src/AccountsController.test.ts Co-authored-by: Elliot Winkler --- packages/accounts-controller/src/AccountsController.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts index 97affea7864..1686a4ec3fe 100644 --- a/packages/accounts-controller/src/AccountsController.test.ts +++ b/packages/accounts-controller/src/AccountsController.test.ts @@ -243,7 +243,7 @@ function buildMessenger(): RootMessenger { /** * Builds a messenger for the AccountsController. * - * @param rootMessenger - The parent messenger. + * @param rootMessenger - The root messenger. * @returns The messenger for AccountsController. */ function buildAccountsControllerMessenger(rootMessenger = buildMessenger()) { From 86a9e0bf41f5415d69265d1b3a528febb051ef55 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 19:57:16 +0200 Subject: [PATCH 11/13] apply suggestion from @mcmire --- packages/accounts-controller/src/AccountsController.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/accounts-controller/src/AccountsController.test.ts b/packages/accounts-controller/src/AccountsController.test.ts index 1686a4ec3fe..ecb620c4f76 100644 --- a/packages/accounts-controller/src/AccountsController.test.ts +++ b/packages/accounts-controller/src/AccountsController.test.ts @@ -232,9 +232,9 @@ function setExpectedLastSelectedAsAny( } /** - * Builds a new instance of the Root Messenger. + * Builds a new instance of the root messenger. * - * @returns A new instance of the Root Messenger. + * @returns A new instance of the root messenger. */ function buildMessenger(): RootMessenger { return new Messenger({ namespace: MOCK_ANY_NAMESPACE }); From 11a662db9ebba6b1f5f026bc2db041361f5aba05 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Mon, 22 Sep 2025 20:15:44 +0200 Subject: [PATCH 12/13] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4eab983a1dc..6c1fad2424a 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ linkStyle default opacity:0.5 account_tree_controller --> multichain_account_service; account_tree_controller --> profile_sync_controller; accounts_controller --> base_controller; + accounts_controller --> messenger; accounts_controller --> controller_utils; accounts_controller --> keyring_controller; accounts_controller --> network_controller; From 80e5d0100b76007d141c1f814b1a6d7df8642c06 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Wed, 15 Oct 2025 11:17:55 +0200 Subject: [PATCH 13/13] dedupe packages --- yarn.lock | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1baf94b0fc9..78482b192b0 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: