Skip to content
Open
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/address-book-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand Down
1 change: 1 addition & 0 deletions packages/address-book-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"dependencies": {
"@metamask/base-controller": "^8.4.0",
"@metamask/controller-utils": "^11.14.0",
"@metamask/messenger": "^0.2.0",
"@metamask/utils": "^11.8.0"
},
"devDependencies": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,48 +1,69 @@
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,
AddressType,
controllerName,
} from './AddressBookController';

type AllActions = MessengerActions<AddressBookControllerMessenger>;

type AllEvents = MessengerEvents<AddressBookControllerMessenger>;

type RootMessenger = Messenger<MockAnyNamespace, AllActions, AllEvents>;

/**
* 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
const contactUpdatedListener = jest.fn();
const contactDeletedListener = jest.fn();

// Subscribe to events
messenger.subscribe(
'AddressBookController:contactUpdated' as AddressBookControllerContactUpdatedEvent['type'],
rootMessenger.subscribe(
'AddressBookController:contactUpdated',
contactUpdatedListener,
);
messenger.subscribe(
rootMessenger.subscribe(
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Inconsistent Event Subscription Handling

The AddressBookController tests show inconsistent type assertion for event subscriptions. The contactUpdated event is subscribed without assertion, while contactDeleted retains explicit type casting. This suggests an incomplete migration to the new messenger system, affecting consistency and type safety.

Fix in Cursor Fix in Web

'AddressBookController:contactDeleted' as AddressBookControllerContactDeletedEvent['type'],
contactDeletedListener,
);
Expand Down Expand Up @@ -627,7 +648,7 @@ describe('AddressBookController', () => {
deriveStateFromMetadata(
controller.state,
controller.metadata,
'anonymous',
'includeInDebugSnapshot',
),
).toMatchInlineSnapshot(`Object {}`);
});
Expand Down
27 changes: 11 additions & 16 deletions packages/address-book-controller/src/AddressBookController.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
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,
isSafeDynamicKey,
toChecksumHexAddress,
toHex,
} from '@metamask/controller-utils';
import type { Messenger } from '@metamask/messenger';
import type { Hex } from '@metamask/utils';

/**
Expand Down Expand Up @@ -150,7 +150,7 @@ const addressBookControllerMetadata = {
addressBook: {
includeInStateLogs: true,
persist: true,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
};
Expand All @@ -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
>;

/**
Expand Down Expand Up @@ -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,
);
Expand Down Expand Up @@ -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;
Expand All @@ -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),
);
Expand Down
3 changes: 2 additions & 1 deletion packages/address-book-controller/tsconfig.build.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
}
3 changes: 2 additions & 1 deletion packages/address-book-controller/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
},
"references": [
{ "path": "../base-controller" },
{ "path": "../controller-utils" }
{ "path": "../controller-utils" },
{ "path": "../messenger" }
],
"include": ["../../types", "./src"]
}
8 changes: 8 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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.2.0"
"@metamask/utils": "npm:^11.8.0"
"@types/jest": "npm:^27.4.1"
deepmerge: "npm:^4.2.2"
Expand Down Expand Up @@ -3809,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"
Expand Down
Loading