Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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/message-manager/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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))

Expand Down
9 changes: 5 additions & 4 deletions packages/message-manager/src/AbstractMessageManager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ type ConcreteMessageManagerActions = never;
type ConcreteMessageManagerEvents = never;

class AbstractTestManager extends AbstractMessageManager<
'TestManager',
ConcreteMessage,
ConcreteMessageParams,
ConcreteMessageParamsMetamask,
Expand Down Expand Up @@ -68,7 +69,7 @@ const MOCK_MESSENGER = {
registerActionHandler: jest.fn(),
registerInitialEventPayload: jest.fn(),
} as unknown as RestrictedMessenger<
'AbstractMessageManager',
'TestManager',
never,
never,
string,
Expand All @@ -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,
};

Expand Down Expand Up @@ -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.',
);
});
});
Expand Down Expand Up @@ -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.',
);
});
});
Expand Down
26 changes: 17 additions & 9 deletions packages/message-manager/src/AbstractMessageManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ export type MessageManagerState<Message extends AbstractMessage> = {
unapprovedMessagesCount: number;
};

export type UpdateBadgeEvent = {
type: `${string}:updateBadge`;
export type UpdateBadgeEvent<Namespace extends string> = {
type: `${Namespace}:updateBadge`;
payload: [];
};

Expand All @@ -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<Name>,
string,
string
>;
name: string;
name: Name;
securityProviderRequest?: SecurityProviderRequest;
state?: MessageManagerState<Message>;
};
Expand All @@ -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<Message>,
RestrictedMessenger<string, Action, Event | UpdateBadgeEvent, string, string>
RestrictedMessenger<
Name,
Action,
Event | UpdateBadgeEvent<Name>,
string,
string
>
> {
protected messages: Message[];

Expand All @@ -166,7 +174,7 @@ export abstract class AbstractMessageManager<
name,
securityProviderRequest,
state = {} as MessageManagerState<Message>,
}: AbstractMessageManagerOptions<Message, Action, Event>) {
}: AbstractMessageManagerOptions<Name, Message, Action, Event>) {
super({
messenger,
metadata: stateMetadata,
Expand Down Expand Up @@ -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`);
}
}

Expand Down
3 changes: 2 additions & 1 deletion packages/message-manager/src/DecryptMessageManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export type DecryptMessageManagerUpdateBadgeEvent = {
};

export type DecryptMessageManagerMessenger = RestrictedMessenger<
string,
typeof managerName,
ActionConstraint,
| EventConstraint
| DecryptMessageManagerUnapprovedMessageAddedEvent
Expand Down Expand Up @@ -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,
Expand Down
5 changes: 3 additions & 2 deletions packages/message-manager/src/EncryptionPublicKeyManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export type EncryptionPublicKeyManagerUpdateBadgeEvent = {
};

export type EncryptionPublicKeyManagerMessenger = RestrictedMessenger<
string,
typeof managerName,
ActionConstraint,
| EventConstraint
| EncryptionPublicKeyManagerUnapprovedMessageAddedEvent
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
});
Expand Down
Loading