From 3480c41716f9cc9c5201ffd20713fa61876d6a17 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Wed, 10 Sep 2025 16:05:47 +0200 Subject: [PATCH 1/6] refactor: migrate {AbstractMessage,DecryptMessage,EncryptionPublicKey}Manager to @metamask/messenger --- packages/message-manager/CHANGELOG.md | 2 ++ packages/message-manager/package.json | 1 + .../src/AbstractMessageManager.test.ts | 10 ++----- .../src/AbstractMessageManager.ts | 28 ++++++------------- .../src/DecryptMessageManager.ts | 14 ++++------ .../src/EncryptionPublicKeyManager.ts | 14 ++++------ packages/message-manager/src/index.ts | 6 +++- packages/message-manager/tsconfig.build.json | 3 +- packages/message-manager/tsconfig.json | 3 +- yarn.lock | 1 + 10 files changed, 35 insertions(+), 47 deletions(-) diff --git a/packages/message-manager/CHANGELOG.md b/packages/message-manager/CHANGELOG.md index 34ddd65318c..1c3a32a8326 100644 --- a/packages/message-manager/CHANGELOG.md +++ b/packages/message-manager/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` ([#6545](https://github.com/MetaMask/core/pull/6545)) + - Previously, `AbstractMessageManager`, `DecryptMessageManager` and `EncryptionPublicKeyManager` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`. - **BREAKING:** `AbstractMessageManager` now expects a `Name extends string` generic parameter to define the name of the message manager ([#6469](https://github.com/MetaMask/core/pull/6469)) - The type is used as namespace for `BaseController` and `Messenger` events and actions. - Bump `@metamask/base-controller` from `^8.0.1` to `^8.3.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)) diff --git a/packages/message-manager/package.json b/packages/message-manager/package.json index 06a7fb2660c..5bcff0d83d2 100644 --- a/packages/message-manager/package.json +++ b/packages/message-manager/package.json @@ -50,6 +50,7 @@ "@metamask/base-controller": "^8.3.0", "@metamask/controller-utils": "^11.12.0", "@metamask/eth-sig-util": "^8.2.0", + "@metamask/messenger": "^0.2.0", "@metamask/utils": "^11.4.2", "@types/uuid": "^8.3.0", "jsonschema": "^1.4.1", diff --git a/packages/message-manager/src/AbstractMessageManager.test.ts b/packages/message-manager/src/AbstractMessageManager.test.ts index 6914beccdd1..01e1b9e1729 100644 --- a/packages/message-manager/src/AbstractMessageManager.test.ts +++ b/packages/message-manager/src/AbstractMessageManager.test.ts @@ -1,5 +1,5 @@ -import type { RestrictedMessenger } from '@metamask/base-controller'; import { ApprovalType } from '@metamask/controller-utils'; +import type { Messenger } from '@metamask/messenger'; import type { AbstractMessage, @@ -68,13 +68,7 @@ const MOCK_MESSENGER = { publish: jest.fn(), registerActionHandler: jest.fn(), registerInitialEventPayload: jest.fn(), -} as unknown as RestrictedMessenger< - 'TestManager', - never, - never, - string, - string ->; +} as unknown as Messenger<'TestManager', never, never>; const MOCK_INITIAL_OPTIONS = { additionalFinishStatuses: undefined, diff --git a/packages/message-manager/src/AbstractMessageManager.ts b/packages/message-manager/src/AbstractMessageManager.ts index 172a1230766..cee419efef5 100644 --- a/packages/message-manager/src/AbstractMessageManager.ts +++ b/packages/message-manager/src/AbstractMessageManager.ts @@ -1,10 +1,10 @@ -import { BaseController } from '@metamask/base-controller'; +import { BaseController } from '@metamask/base-controller/next'; +import type { ApprovalType } from '@metamask/controller-utils'; import type { ActionConstraint, EventConstraint, - RestrictedMessenger, -} from '@metamask/base-controller'; -import type { ApprovalType } from '@metamask/controller-utils'; + Messenger, +} from '@metamask/messenger'; import type { Json } from '@metamask/utils'; // This package purposefully relies on Node's EventEmitter module. // eslint-disable-next-line import-x/no-nodejs-modules @@ -127,13 +127,7 @@ export type AbstractMessageManagerOptions< Event extends EventConstraint, > = { additionalFinishStatuses?: string[]; - messenger: RestrictedMessenger< - Name, - Action, - Event | UpdateBadgeEvent, - string, - string - >; + messenger: Messenger>; name: Name; securityProviderRequest?: SecurityProviderRequest; state?: MessageManagerState; @@ -152,13 +146,7 @@ export abstract class AbstractMessageManager< > extends BaseController< Name, MessageManagerState, - RestrictedMessenger< - Name, - Action, - Event | UpdateBadgeEvent, - string, - string - > + Messenger> > { protected messages: Message[]; @@ -190,7 +178,7 @@ export abstract class AbstractMessageManager< } /** - * Adds request props to the messsage params and returns a new messageParams object. + * Adds request props to the message params and returns a new messageParams object. * @param messageParams - The messageParams to add the request props to. * @param req - The original request object. * @returns The messageParams with the request props added. @@ -247,7 +235,7 @@ export abstract class AbstractMessageManager< state.unapprovedMessagesCount = this.getUnapprovedMessagesCount(); }); if (emitUpdateBadge) { - this.messagingSystem.publish(`${this.name}:updateBadge`); + this.messenger.publish(`${this.name}:updateBadge` as const); } } diff --git a/packages/message-manager/src/DecryptMessageManager.ts b/packages/message-manager/src/DecryptMessageManager.ts index 43399dca73c..c1a96581b42 100644 --- a/packages/message-manager/src/DecryptMessageManager.ts +++ b/packages/message-manager/src/DecryptMessageManager.ts @@ -1,9 +1,9 @@ +import { ApprovalType } from '@metamask/controller-utils'; import type { ActionConstraint, EventConstraint, - RestrictedMessenger, -} from '@metamask/base-controller'; -import { ApprovalType } from '@metamask/controller-utils'; + Messenger, +} from '@metamask/messenger'; import type { AbstractMessage, @@ -30,14 +30,12 @@ export type DecryptMessageManagerUpdateBadgeEvent = { payload: []; }; -export type DecryptMessageManagerMessenger = RestrictedMessenger< +export type DecryptMessageManagerMessenger = Messenger< typeof managerName, ActionConstraint, | EventConstraint | DecryptMessageManagerUnapprovedMessageAddedEvent - | DecryptMessageManagerUpdateBadgeEvent, - string, - string + | DecryptMessageManagerUpdateBadgeEvent >; type DecryptMessageManagerOptions = { @@ -194,7 +192,7 @@ export class DecryptMessageManager extends AbstractMessageManager< const messageId = messageData.id; await this.addMessage(messageData); - this.messagingSystem.publish(`${managerName}:unapprovedMessage`, { + this.messenger.publish(`${managerName}:unapprovedMessage`, { ...updatedMessageParams, metamaskId: messageId, }); diff --git a/packages/message-manager/src/EncryptionPublicKeyManager.ts b/packages/message-manager/src/EncryptionPublicKeyManager.ts index 8df1a608906..cfff6f3b7b8 100644 --- a/packages/message-manager/src/EncryptionPublicKeyManager.ts +++ b/packages/message-manager/src/EncryptionPublicKeyManager.ts @@ -1,9 +1,9 @@ +import { ApprovalType } from '@metamask/controller-utils'; import type { ActionConstraint, EventConstraint, - RestrictedMessenger, -} from '@metamask/base-controller'; -import { ApprovalType } from '@metamask/controller-utils'; + Messenger, +} from '@metamask/messenger'; import type { AbstractMessage, @@ -31,14 +31,12 @@ export type EncryptionPublicKeyManagerUpdateBadgeEvent = { payload: []; }; -export type EncryptionPublicKeyManagerMessenger = RestrictedMessenger< +export type EncryptionPublicKeyManagerMessenger = Messenger< typeof managerName, ActionConstraint, | EventConstraint | EncryptionPublicKeyManagerUnapprovedMessageAddedEvent - | EncryptionPublicKeyManagerUpdateBadgeEvent, - string, - string + | EncryptionPublicKeyManagerUpdateBadgeEvent >; type EncryptionPublicKeyManagerOptions = { @@ -185,7 +183,7 @@ export class EncryptionPublicKeyManager extends AbstractMessageManager< const messageId = messageData.id; await this.addMessage(messageData); - this.messagingSystem.publish(`${this.name}:unapprovedMessage`, { + this.messenger.publish(`${this.name}:unapprovedMessage` as const, { ...updatedMessageParams, metamaskId: messageId, }); diff --git a/packages/message-manager/src/index.ts b/packages/message-manager/src/index.ts index 27723685451..fae5514ea32 100644 --- a/packages/message-manager/src/index.ts +++ b/packages/message-manager/src/index.ts @@ -1,4 +1,8 @@ export * from './AbstractMessageManager'; export * from './EncryptionPublicKeyManager'; export * from './DecryptMessageManager'; -export * from './types'; +export type { + SignTypedDataMessageV3V4, + PersonalMessageParams, + TypedMessageParams, +} from './types'; diff --git a/packages/message-manager/tsconfig.build.json b/packages/message-manager/tsconfig.build.json index bbfe057a207..5a5c9e2326a 100644 --- a/packages/message-manager/tsconfig.build.json +++ b/packages/message-manager/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/message-manager/tsconfig.json b/packages/message-manager/tsconfig.json index 7ee9852347a..dfd15011442 100644 --- a/packages/message-manager/tsconfig.json +++ b/packages/message-manager/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 0cf2a57b624..3c000d6fac4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3777,6 +3777,7 @@ __metadata: "@metamask/base-controller": "npm:^8.3.0" "@metamask/controller-utils": "npm:^11.12.0" "@metamask/eth-sig-util": "npm:^8.2.0" + "@metamask/messenger": "npm:^0.2.0" "@metamask/utils": "npm:^11.4.2" "@types/jest": "npm:^27.4.1" "@types/uuid": "npm:^8.3.0" From 3619e829ea82e638ea0ce246d492bd52a51f40e6 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Wed, 15 Oct 2025 17:57:44 +0200 Subject: [PATCH 2/6] fix: rollback index export refactoring --- packages/message-manager/src/index.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/message-manager/src/index.ts b/packages/message-manager/src/index.ts index fae5514ea32..27723685451 100644 --- a/packages/message-manager/src/index.ts +++ b/packages/message-manager/src/index.ts @@ -1,8 +1,4 @@ export * from './AbstractMessageManager'; export * from './EncryptionPublicKeyManager'; export * from './DecryptMessageManager'; -export type { - SignTypedDataMessageV3V4, - PersonalMessageParams, - TypedMessageParams, -} from './types'; +export * from './types'; From ccc573a027a7cc3fe5751dddaeef06f1555b6b17 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Tue, 21 Oct 2025 13:27:31 +0200 Subject: [PATCH 3/6] add `GetStateAction` and `StateChangeEvent` --- .../src/AbstractMessageManager.ts | 49 +++++++++++++++---- .../src/DecryptMessageManager.ts | 33 ++++++++----- .../src/EncryptionPublicKeyManager.ts | 35 ++++++++----- 3 files changed, 81 insertions(+), 36 deletions(-) diff --git a/packages/message-manager/src/AbstractMessageManager.ts b/packages/message-manager/src/AbstractMessageManager.ts index 5202f2ec71b..1af6186122e 100644 --- a/packages/message-manager/src/AbstractMessageManager.ts +++ b/packages/message-manager/src/AbstractMessageManager.ts @@ -1,9 +1,14 @@ -import { BaseController } from '@metamask/base-controller/next'; +import { + BaseController, + type ControllerStateChangeEvent, + type ControllerGetStateAction, +} from '@metamask/base-controller/next'; import type { ApprovalType } from '@metamask/controller-utils'; import type { - ActionConstraint, - EventConstraint, Messenger, + EventConstraint, + ActionConstraint, + NamespacedName, } from '@metamask/messenger'; import type { Json } from '@metamask/utils'; // This package purposefully relies on Node's EventEmitter module. @@ -121,6 +126,29 @@ export type SecurityProviderRequest = ( messageType: string, ) => Promise; +type MessageManagerActionConstraint = { + type: NamespacedName; + handler: ActionConstraint['handler']; +}; + +type MessageManagerEventConstraint = { + type: NamespacedName; + payload: EventConstraint['payload']; +}; + +export type MessageManagerMessenger< + Name extends string, + Message extends AbstractMessage, + Action extends MessageManagerActionConstraint, + Event extends MessageManagerEventConstraint, +> = Messenger< + Name, + ControllerGetStateAction> | Action, + | ControllerStateChangeEvent> + | UpdateBadgeEvent + | Event +>; + /** * AbstractMessageManager constructor options. * @@ -133,11 +161,11 @@ export type SecurityProviderRequest = ( export type AbstractMessageManagerOptions< Name extends string, Message extends AbstractMessage, - Action extends ActionConstraint, - Event extends EventConstraint, + Action extends MessageManagerActionConstraint, + Event extends MessageManagerEventConstraint, > = { additionalFinishStatuses?: string[]; - messenger: Messenger>; + messenger: MessageManagerMessenger; name: Name; securityProviderRequest?: SecurityProviderRequest; state?: MessageManagerState; @@ -151,12 +179,12 @@ export abstract class AbstractMessageManager< Message extends AbstractMessage, Params extends AbstractMessageParams, ParamsMetamask extends AbstractMessageParamsMetamask, - Action extends ActionConstraint, - Event extends EventConstraint, + Action extends MessageManagerActionConstraint, + Event extends MessageManagerEventConstraint, > extends BaseController< Name, MessageManagerState, - Messenger> + MessageManagerMessenger > { protected messages: Message[]; @@ -245,7 +273,8 @@ export abstract class AbstractMessageManager< state.unapprovedMessagesCount = this.getUnapprovedMessagesCount(); }); if (emitUpdateBadge) { - this.messenger.publish(`${this.name}:updateBadge` as const); + // @ts-expect-error Messenger typing seems to have trouble inferring correctly here + this.messenger.publish(`${this.name}:updateBadge`); } } diff --git a/packages/message-manager/src/DecryptMessageManager.ts b/packages/message-manager/src/DecryptMessageManager.ts index c1a96581b42..df28681aa75 100644 --- a/packages/message-manager/src/DecryptMessageManager.ts +++ b/packages/message-manager/src/DecryptMessageManager.ts @@ -1,9 +1,10 @@ -import { ApprovalType } from '@metamask/controller-utils'; import type { - ActionConstraint, - EventConstraint, - Messenger, -} from '@metamask/messenger'; + ControllerGetStateAction, + ControllerStateChangeEvent, +} from '@metamask/base-controller/next'; +import { ApprovalType } from '@metamask/controller-utils'; +import type { Messenger } from '@metamask/messenger'; +import {} from '@metamask/messenger'; import type { AbstractMessage, @@ -30,12 +31,20 @@ export type DecryptMessageManagerUpdateBadgeEvent = { payload: []; }; -export type DecryptMessageManagerMessenger = Messenger< +type DecryptMessageManagerActions = ControllerGetStateAction< typeof managerName, - ActionConstraint, - | EventConstraint + DecryptMessageManagerState +>; + +type DecryptMessageManagerEvents = + | ControllerStateChangeEvent | DecryptMessageManagerUnapprovedMessageAddedEvent - | DecryptMessageManagerUpdateBadgeEvent + | DecryptMessageManagerUpdateBadgeEvent; + +export type DecryptMessageManagerMessenger = Messenger< + typeof managerName, + DecryptMessageManagerActions, + DecryptMessageManagerEvents >; type DecryptMessageManagerOptions = { @@ -95,10 +104,8 @@ export class DecryptMessageManager extends AbstractMessageManager< DecryptMessage, DecryptMessageParams, DecryptMessageParamsMetamask, - ActionConstraint, - | EventConstraint - | DecryptMessageManagerUnapprovedMessageAddedEvent - | DecryptMessageManagerUpdateBadgeEvent + DecryptMessageManagerActions, + DecryptMessageManagerEvents > { constructor({ additionalFinishStatuses, diff --git a/packages/message-manager/src/EncryptionPublicKeyManager.ts b/packages/message-manager/src/EncryptionPublicKeyManager.ts index cfff6f3b7b8..3a13882d103 100644 --- a/packages/message-manager/src/EncryptionPublicKeyManager.ts +++ b/packages/message-manager/src/EncryptionPublicKeyManager.ts @@ -1,9 +1,9 @@ -import { ApprovalType } from '@metamask/controller-utils'; import type { - ActionConstraint, - EventConstraint, - Messenger, -} from '@metamask/messenger'; + ControllerGetStateAction, + ControllerStateChangeEvent, +} from '@metamask/base-controller/next'; +import { ApprovalType } from '@metamask/controller-utils'; +import type { Messenger } from '@metamask/messenger'; import type { AbstractMessage, @@ -31,12 +31,23 @@ export type EncryptionPublicKeyManagerUpdateBadgeEvent = { payload: []; }; -export type EncryptionPublicKeyManagerMessenger = Messenger< +type EncryptionPublicKeyManagerActions = ControllerGetStateAction< typeof managerName, - ActionConstraint, - | EventConstraint + EncryptionPublicKeyManagerState +>; + +type EncryptionPublicKeyManagerEvents = + | ControllerStateChangeEvent< + typeof managerName, + EncryptionPublicKeyManagerState + > | EncryptionPublicKeyManagerUnapprovedMessageAddedEvent - | EncryptionPublicKeyManagerUpdateBadgeEvent + | EncryptionPublicKeyManagerUpdateBadgeEvent; + +export type EncryptionPublicKeyManagerMessenger = Messenger< + typeof managerName, + EncryptionPublicKeyManagerActions, + EncryptionPublicKeyManagerEvents >; type EncryptionPublicKeyManagerOptions = { @@ -93,10 +104,8 @@ export class EncryptionPublicKeyManager extends AbstractMessageManager< EncryptionPublicKey, EncryptionPublicKeyParams, EncryptionPublicKeyParamsMetamask, - ActionConstraint, - | EventConstraint - | EncryptionPublicKeyManagerUnapprovedMessageAddedEvent - | EncryptionPublicKeyManagerUpdateBadgeEvent + EncryptionPublicKeyManagerActions, + EncryptionPublicKeyManagerEvents > { constructor({ additionalFinishStatuses, From 9564b942e2724143351ef8a2e30aa632c381a091 Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Tue, 21 Oct 2025 13:31:37 +0200 Subject: [PATCH 4/6] use `ActionConstraint` and `EventConstraint` as messenger generic params --- .../src/AbstractMessageManager.ts | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/packages/message-manager/src/AbstractMessageManager.ts b/packages/message-manager/src/AbstractMessageManager.ts index 1af6186122e..75e4aa48ada 100644 --- a/packages/message-manager/src/AbstractMessageManager.ts +++ b/packages/message-manager/src/AbstractMessageManager.ts @@ -8,7 +8,6 @@ import type { Messenger, EventConstraint, ActionConstraint, - NamespacedName, } from '@metamask/messenger'; import type { Json } from '@metamask/utils'; // This package purposefully relies on Node's EventEmitter module. @@ -126,21 +125,11 @@ export type SecurityProviderRequest = ( messageType: string, ) => Promise; -type MessageManagerActionConstraint = { - type: NamespacedName; - handler: ActionConstraint['handler']; -}; - -type MessageManagerEventConstraint = { - type: NamespacedName; - payload: EventConstraint['payload']; -}; - export type MessageManagerMessenger< Name extends string, Message extends AbstractMessage, - Action extends MessageManagerActionConstraint, - Event extends MessageManagerEventConstraint, + Action extends ActionConstraint, + Event extends EventConstraint, > = Messenger< Name, ControllerGetStateAction> | Action, @@ -161,8 +150,8 @@ export type MessageManagerMessenger< export type AbstractMessageManagerOptions< Name extends string, Message extends AbstractMessage, - Action extends MessageManagerActionConstraint, - Event extends MessageManagerEventConstraint, + Action extends ActionConstraint, + Event extends EventConstraint, > = { additionalFinishStatuses?: string[]; messenger: MessageManagerMessenger; @@ -179,8 +168,8 @@ export abstract class AbstractMessageManager< Message extends AbstractMessage, Params extends AbstractMessageParams, ParamsMetamask extends AbstractMessageParamsMetamask, - Action extends MessageManagerActionConstraint, - Event extends MessageManagerEventConstraint, + Action extends ActionConstraint, + Event extends EventConstraint, > extends BaseController< Name, MessageManagerState, From 34e3e0074ceefb50012f6650e93b115cd71f180f Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Tue, 21 Oct 2025 13:43:37 +0200 Subject: [PATCH 5/6] use `MessageManagerMessenger` generic type param instead of Action, Event --- .../src/AbstractMessageManager.ts | 42 +++++++++---------- .../src/DecryptMessageManager.ts | 3 +- .../src/EncryptionPublicKeyManager.ts | 3 +- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/packages/message-manager/src/AbstractMessageManager.ts b/packages/message-manager/src/AbstractMessageManager.ts index 75e4aa48ada..4496834556c 100644 --- a/packages/message-manager/src/AbstractMessageManager.ts +++ b/packages/message-manager/src/AbstractMessageManager.ts @@ -125,19 +125,6 @@ export type SecurityProviderRequest = ( messageType: string, ) => Promise; -export type MessageManagerMessenger< - Name extends string, - Message extends AbstractMessage, - Action extends ActionConstraint, - Event extends EventConstraint, -> = Messenger< - Name, - ControllerGetStateAction> | Action, - | ControllerStateChangeEvent> - | UpdateBadgeEvent - | Event ->; - /** * AbstractMessageManager constructor options. * @@ -150,11 +137,17 @@ export type MessageManagerMessenger< export type AbstractMessageManagerOptions< Name extends string, Message extends AbstractMessage, - Action extends ActionConstraint, - Event extends EventConstraint, + MessageManagerMessenger extends Messenger< + Name, + | ControllerGetStateAction> + | ActionConstraint, + | ControllerStateChangeEvent> + | UpdateBadgeEvent + | EventConstraint + >, > = { additionalFinishStatuses?: string[]; - messenger: MessageManagerMessenger; + messenger: MessageManagerMessenger; name: Name; securityProviderRequest?: SecurityProviderRequest; state?: MessageManagerState; @@ -168,12 +161,18 @@ export abstract class AbstractMessageManager< Message extends AbstractMessage, Params extends AbstractMessageParams, ParamsMetamask extends AbstractMessageParamsMetamask, - Action extends ActionConstraint, - Event extends EventConstraint, + MessageManagerMessenger extends Messenger< + Name, + | ControllerGetStateAction> + | ActionConstraint, + | ControllerStateChangeEvent> + | UpdateBadgeEvent + | EventConstraint + >, > extends BaseController< Name, MessageManagerState, - MessageManagerMessenger + MessageManagerMessenger > { protected messages: Message[]; @@ -189,7 +188,7 @@ export abstract class AbstractMessageManager< name, securityProviderRequest, state = {} as MessageManagerState, - }: AbstractMessageManagerOptions) { + }: AbstractMessageManagerOptions) { super({ messenger, metadata: stateMetadata, @@ -262,8 +261,7 @@ export abstract class AbstractMessageManager< state.unapprovedMessagesCount = this.getUnapprovedMessagesCount(); }); if (emitUpdateBadge) { - // @ts-expect-error Messenger typing seems to have trouble inferring correctly here - this.messenger.publish(`${this.name}:updateBadge`); + this.messenger.publish(`${this.name}:updateBadge` as const); } } diff --git a/packages/message-manager/src/DecryptMessageManager.ts b/packages/message-manager/src/DecryptMessageManager.ts index df28681aa75..87176a021c8 100644 --- a/packages/message-manager/src/DecryptMessageManager.ts +++ b/packages/message-manager/src/DecryptMessageManager.ts @@ -104,8 +104,7 @@ export class DecryptMessageManager extends AbstractMessageManager< DecryptMessage, DecryptMessageParams, DecryptMessageParamsMetamask, - DecryptMessageManagerActions, - DecryptMessageManagerEvents + DecryptMessageManagerMessenger > { constructor({ additionalFinishStatuses, diff --git a/packages/message-manager/src/EncryptionPublicKeyManager.ts b/packages/message-manager/src/EncryptionPublicKeyManager.ts index 3a13882d103..56e7b9455fd 100644 --- a/packages/message-manager/src/EncryptionPublicKeyManager.ts +++ b/packages/message-manager/src/EncryptionPublicKeyManager.ts @@ -104,8 +104,7 @@ export class EncryptionPublicKeyManager extends AbstractMessageManager< EncryptionPublicKey, EncryptionPublicKeyParams, EncryptionPublicKeyParamsMetamask, - EncryptionPublicKeyManagerActions, - EncryptionPublicKeyManagerEvents + EncryptionPublicKeyManagerMessenger > { constructor({ additionalFinishStatuses, From 63f7037bd2fa48dbfa1bd45e062ac89c30be88eb Mon Sep 17 00:00:00 2001 From: Michele Esposito Date: Tue, 21 Oct 2025 13:51:52 +0200 Subject: [PATCH 6/6] fix `AbstractMessageManager` tests --- .../src/AbstractMessageManager.test.ts | 37 +++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/packages/message-manager/src/AbstractMessageManager.test.ts b/packages/message-manager/src/AbstractMessageManager.test.ts index 5f1899b0605..0b0560e9073 100644 --- a/packages/message-manager/src/AbstractMessageManager.test.ts +++ b/packages/message-manager/src/AbstractMessageManager.test.ts @@ -1,14 +1,19 @@ -import { deriveStateFromMetadata } from '@metamask/base-controller/next'; +import { + deriveStateFromMetadata, + type ControllerGetStateAction, + type ControllerStateChangeEvent, +} from '@metamask/base-controller/next'; import { ApprovalType } from '@metamask/controller-utils'; import type { Messenger } from '@metamask/messenger'; -import type { - AbstractMessage, - AbstractMessageParams, - OriginalRequest, - SecurityProviderRequest, +import { + AbstractMessageManager, + type AbstractMessage, + type AbstractMessageParams, + type MessageManagerState, + type OriginalRequest, + type SecurityProviderRequest, } from './AbstractMessageManager'; -import { AbstractMessageManager } from './AbstractMessageManager'; type ConcreteMessage = AbstractMessage & { messageParams: ConcreteMessageParams; @@ -22,16 +27,26 @@ type ConcreteMessageParamsMetamask = ConcreteMessageParams & { metamaskId?: string; }; -type ConcreteMessageManagerActions = never; -type ConcreteMessageManagerEvents = never; +type ConcreteMessageManagerActions = ControllerGetStateAction< + 'TestManager', + MessageManagerState +>; +type ConcreteMessageManagerEvents = ControllerStateChangeEvent< + 'TestManager', + MessageManagerState +>; +type ConcreteMessageManagerMessenger = Messenger< + 'TestManager', + ConcreteMessageManagerActions, + ConcreteMessageManagerEvents +>; class AbstractTestManager extends AbstractMessageManager< 'TestManager', ConcreteMessage, ConcreteMessageParams, ConcreteMessageParamsMetamask, - ConcreteMessageManagerActions, - ConcreteMessageManagerEvents + ConcreteMessageManagerMessenger > { addRequestToMessageParams( messageParams: MessageParams,