diff --git a/packages/message-manager/CHANGELOG.md b/packages/message-manager/CHANGELOG.md index 5eb78273f61..34ddd65318c 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:** `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)) - Bump `@metamask/controller-utils` from `^11.11.0` to `^11.12.0` ([#6303](https://github.com/MetaMask/core/pull/6303)) diff --git a/packages/message-manager/src/AbstractMessageManager.test.ts b/packages/message-manager/src/AbstractMessageManager.test.ts index 7af79718123..6914beccdd1 100644 --- a/packages/message-manager/src/AbstractMessageManager.test.ts +++ b/packages/message-manager/src/AbstractMessageManager.test.ts @@ -25,6 +25,7 @@ type ConcreteMessageManagerActions = never; type ConcreteMessageManagerEvents = never; class AbstractTestManager extends AbstractMessageManager< + 'TestManager', ConcreteMessage, ConcreteMessageParams, ConcreteMessageParamsMetamask, @@ -68,7 +69,7 @@ const MOCK_MESSENGER = { registerActionHandler: jest.fn(), registerInitialEventPayload: jest.fn(), } as unknown as RestrictedMessenger< - 'AbstractMessageManager', + 'TestManager', never, never, string, @@ -78,7 +79,7 @@ const MOCK_MESSENGER = { const MOCK_INITIAL_OPTIONS = { additionalFinishStatuses: undefined, messenger: MOCK_MESSENGER, - name: 'AbstractMessageManager' as const, + name: 'TestManager' as const, securityProviderRequest: undefined, }; @@ -398,7 +399,7 @@ describe('AbstractTestManager', () => { const controller = new AbstractTestManager(MOCK_INITIAL_OPTIONS); expect(() => controller.setMessageStatus(messageId, 'newstatus')).toThrow( - 'AbstractMessageManager: Message not found for id: 1.', + 'TestManager: Message not found for id: 1.', ); }); }); @@ -450,7 +451,7 @@ describe('AbstractTestManager', () => { const controller = new AbstractTestManager(MOCK_INITIAL_OPTIONS); expect(() => controller.setMetadata(messageId, { foo: 'bar' })).toThrow( - 'AbstractMessageManager: Message not found for id: 1.', + 'TestManager: Message not found for id: 1.', ); }); }); diff --git a/packages/message-manager/src/AbstractMessageManager.ts b/packages/message-manager/src/AbstractMessageManager.ts index 3b21b85358c..172a1230766 100644 --- a/packages/message-manager/src/AbstractMessageManager.ts +++ b/packages/message-manager/src/AbstractMessageManager.ts @@ -98,8 +98,8 @@ export type MessageManagerState = { unapprovedMessagesCount: number; }; -export type UpdateBadgeEvent = { - type: `${string}:updateBadge`; +export type UpdateBadgeEvent = { + type: `${Namespace}:updateBadge`; payload: []; }; @@ -121,19 +121,20 @@ export type SecurityProviderRequest = ( * @property state - Initial state to set on this controller. */ export type AbstractMessageManagerOptions< + Name extends string, Message extends AbstractMessage, Action extends ActionConstraint, Event extends EventConstraint, > = { additionalFinishStatuses?: string[]; messenger: RestrictedMessenger< - string, + Name, Action, - Event | UpdateBadgeEvent, + Event | UpdateBadgeEvent, string, string >; - name: string; + name: Name; securityProviderRequest?: SecurityProviderRequest; state?: MessageManagerState; }; @@ -142,15 +143,22 @@ export type AbstractMessageManagerOptions< * Controller in charge of managing - storing, adding, removing, updating - Messages. */ export abstract class AbstractMessageManager< + Name extends string, Message extends AbstractMessage, Params extends AbstractMessageParams, ParamsMetamask extends AbstractMessageParamsMetamask, Action extends ActionConstraint, Event extends EventConstraint, > extends BaseController< - string, + Name, MessageManagerState, - RestrictedMessenger + RestrictedMessenger< + Name, + Action, + Event | UpdateBadgeEvent, + string, + string + > > { protected messages: Message[]; @@ -166,7 +174,7 @@ export abstract class AbstractMessageManager< name, securityProviderRequest, state = {} as MessageManagerState, - }: AbstractMessageManagerOptions) { + }: AbstractMessageManagerOptions) { super({ messenger, metadata: stateMetadata, @@ -239,7 +247,7 @@ export abstract class AbstractMessageManager< state.unapprovedMessagesCount = this.getUnapprovedMessagesCount(); }); if (emitUpdateBadge) { - this.messagingSystem.publish(`${this.name as string}:updateBadge`); + this.messagingSystem.publish(`${this.name}:updateBadge`); } } diff --git a/packages/message-manager/src/DecryptMessageManager.ts b/packages/message-manager/src/DecryptMessageManager.ts index 563909d05d5..43399dca73c 100644 --- a/packages/message-manager/src/DecryptMessageManager.ts +++ b/packages/message-manager/src/DecryptMessageManager.ts @@ -31,7 +31,7 @@ export type DecryptMessageManagerUpdateBadgeEvent = { }; export type DecryptMessageManagerMessenger = RestrictedMessenger< - string, + typeof managerName, ActionConstraint, | EventConstraint | DecryptMessageManagerUnapprovedMessageAddedEvent @@ -93,6 +93,7 @@ export interface DecryptMessageParamsMetamask * Controller in charge of managing - storing, adding, removing, updating - DecryptMessages. */ export class DecryptMessageManager extends AbstractMessageManager< + typeof managerName, DecryptMessage, DecryptMessageParams, DecryptMessageParamsMetamask, diff --git a/packages/message-manager/src/EncryptionPublicKeyManager.ts b/packages/message-manager/src/EncryptionPublicKeyManager.ts index 139282e7c05..8df1a608906 100644 --- a/packages/message-manager/src/EncryptionPublicKeyManager.ts +++ b/packages/message-manager/src/EncryptionPublicKeyManager.ts @@ -32,7 +32,7 @@ export type EncryptionPublicKeyManagerUpdateBadgeEvent = { }; export type EncryptionPublicKeyManagerMessenger = RestrictedMessenger< - string, + typeof managerName, ActionConstraint, | EventConstraint | EncryptionPublicKeyManagerUnapprovedMessageAddedEvent @@ -91,6 +91,7 @@ export type EncryptionPublicKeyParamsMetamask = * Controller in charge of managing - storing, adding, removing, updating - Messages. */ export class EncryptionPublicKeyManager extends AbstractMessageManager< + typeof managerName, EncryptionPublicKey, EncryptionPublicKeyParams, EncryptionPublicKeyParamsMetamask, @@ -184,7 +185,7 @@ export class EncryptionPublicKeyManager extends AbstractMessageManager< const messageId = messageData.id; await this.addMessage(messageData); - this.messagingSystem.publish(`${this.name as string}:unapprovedMessage`, { + this.messagingSystem.publish(`${this.name}:unapprovedMessage`, { ...updatedMessageParams, metamaskId: messageId, });