Skip to content

Commit ff928bc

Browse files
refactor: migrate {AbstractMessage,DecryptMessage,EncryptionPublicKey}Manager to @metamask/messenger (#6545)
## Explanation <!-- Thanks for your contribution! Take a moment to answer these questions so that reviewers have the information they need to properly understand your changes: * What is the current state of things and why does it need to change? * What is the solution your changes offer and how does it work? * Are there any changes whose purpose might not obvious to those unfamiliar with the domain? * If your primary goal was to update one package but you found you had to update another one along the way, why did you do so? * If you had to upgrade a dependency, why did you do so? --> This PR migrates `AbstractMessageManager`, `EncryptionPublicKeyManager` and `DecryptMessageManager` to the new `@metamask/messenger` message bus, as opposed to the one exported from `@metamask/base-controller`. ## References <!-- Are there any issues that this pull request is tied to? Are there other links that reviewers should consult to understand these changes better? Are there client or consumer pull requests to adopt any breaking changes? For example: * Fixes #12345 * Related to #67890 --> * Related to #5626 ## Checklist - [ ] I've updated the test suite for new or updated code as appropriate - [ ] I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate - [ ] I've communicated my changes to consumers by [updating changelogs for packages I've changed](https://github.com/MetaMask/core/tree/main/docs/contributing.md#updating-changelogs), highlighting breaking changes as necessary - [ ] I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Migrates `AbstractMessageManager`, `DecryptMessageManager`, and `EncryptionPublicKeyManager` to the new `@metamask/messenger` API, updating types/events and wiring, and adds the messenger dependency. > > - **Message Manager (breaking)** > - Switch from `RestrictedMessenger` (`@metamask/base-controller`) to `Messenger` (`@metamask/messenger`) across `AbstractMessageManager`, `DecryptMessageManager`, and `EncryptionPublicKeyManager`. > - Update publish calls to use `this.messenger.publish` and rework action/event typings (`ControllerGetStateAction`, `ControllerStateChangeEvent`). > - Adjust state metadata keys (`anonymous` → `includeInDebugSnapshot`). > - **Tests** > - Update mocks and types to use `Messenger` and new metadata flag. > - **Configs/Dependencies** > - Add `@metamask/messenger` dependency and TypeScript project references. > - Update README dependency graph to show `message_manager` → `messenger` and add new edge for `eip-7702-internal-rpc-middleware`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c9835ae. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Michele Esposito <[email protected]> Co-authored-by: Michele Esposito <[email protected]>
1 parent 67888a6 commit ff928bc

File tree

10 files changed

+111
-80
lines changed

10 files changed

+111
-80
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ linkStyle default opacity:0.5
256256
logging_controller --> controller_utils;
257257
message_manager --> base_controller;
258258
message_manager --> controller_utils;
259+
message_manager --> messenger;
259260
multichain_account_service --> base_controller;
260261
multichain_account_service --> accounts_controller;
261262
multichain_account_service --> keyring_controller;

packages/message-manager/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Changed
11+
12+
- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6545](https://github.com/MetaMask/core/pull/6545))
13+
- Previously, `AbstractMessageManager`, `DecryptMessageManager` and `EncryptionPublicKeyManager` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
14+
1015
## [13.0.2]
1116

1217
### Changed

packages/message-manager/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"@metamask/base-controller": "^8.4.2",
5151
"@metamask/controller-utils": "^11.14.1",
5252
"@metamask/eth-sig-util": "^8.2.0",
53+
"@metamask/messenger": "^0.3.0",
5354
"@metamask/utils": "^11.8.1",
5455
"@types/uuid": "^8.3.0",
5556
"jsonschema": "^1.4.1",

packages/message-manager/src/AbstractMessageManager.test.ts

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import {
22
deriveStateFromMetadata,
3-
type RestrictedMessenger,
4-
} from '@metamask/base-controller';
3+
type ControllerGetStateAction,
4+
type ControllerStateChangeEvent,
5+
} from '@metamask/base-controller/next';
56
import { ApprovalType } from '@metamask/controller-utils';
7+
import type { Messenger } from '@metamask/messenger';
68

7-
import type {
8-
AbstractMessage,
9-
AbstractMessageParams,
10-
OriginalRequest,
11-
SecurityProviderRequest,
9+
import {
10+
AbstractMessageManager,
11+
type AbstractMessage,
12+
type AbstractMessageParams,
13+
type MessageManagerState,
14+
type OriginalRequest,
15+
type SecurityProviderRequest,
1216
} from './AbstractMessageManager';
13-
import { AbstractMessageManager } from './AbstractMessageManager';
1417

1518
type ConcreteMessage = AbstractMessage & {
1619
messageParams: ConcreteMessageParams;
@@ -24,16 +27,26 @@ type ConcreteMessageParamsMetamask = ConcreteMessageParams & {
2427
metamaskId?: string;
2528
};
2629

27-
type ConcreteMessageManagerActions = never;
28-
type ConcreteMessageManagerEvents = never;
30+
type ConcreteMessageManagerActions = ControllerGetStateAction<
31+
'TestManager',
32+
MessageManagerState<ConcreteMessage>
33+
>;
34+
type ConcreteMessageManagerEvents = ControllerStateChangeEvent<
35+
'TestManager',
36+
MessageManagerState<ConcreteMessage>
37+
>;
38+
type ConcreteMessageManagerMessenger = Messenger<
39+
'TestManager',
40+
ConcreteMessageManagerActions,
41+
ConcreteMessageManagerEvents
42+
>;
2943

3044
class AbstractTestManager extends AbstractMessageManager<
3145
'TestManager',
3246
ConcreteMessage,
3347
ConcreteMessageParams,
3448
ConcreteMessageParamsMetamask,
35-
ConcreteMessageManagerActions,
36-
ConcreteMessageManagerEvents
49+
ConcreteMessageManagerMessenger
3750
> {
3851
addRequestToMessageParams<MessageParams extends AbstractMessageParams>(
3952
messageParams: MessageParams,
@@ -71,13 +84,7 @@ const MOCK_MESSENGER = {
7184
publish: jest.fn(),
7285
registerActionHandler: jest.fn(),
7386
registerInitialEventPayload: jest.fn(),
74-
} as unknown as RestrictedMessenger<
75-
'TestManager',
76-
never,
77-
never,
78-
string,
79-
string
80-
>;
87+
} as unknown as Messenger<'TestManager'>;
8188

8289
const MOCK_INITIAL_OPTIONS = {
8390
additionalFinishStatuses: undefined,
@@ -579,7 +586,7 @@ describe('AbstractTestManager', () => {
579586
deriveStateFromMetadata(
580587
controller.state,
581588
controller.metadata,
582-
'anonymous',
589+
'includeInDebugSnapshot',
583590
),
584591
).toMatchInlineSnapshot(`Object {}`);
585592
});

packages/message-manager/src/AbstractMessageManager.ts

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
import { BaseController } from '@metamask/base-controller';
1+
import {
2+
BaseController,
3+
type ControllerStateChangeEvent,
4+
type ControllerGetStateAction,
5+
} from '@metamask/base-controller/next';
6+
import type { ApprovalType } from '@metamask/controller-utils';
27
import type {
3-
ActionConstraint,
8+
Messenger,
49
EventConstraint,
5-
RestrictedMessenger,
6-
} from '@metamask/base-controller';
7-
import type { ApprovalType } from '@metamask/controller-utils';
10+
ActionConstraint,
11+
} from '@metamask/messenger';
812
import type { Json } from '@metamask/utils';
913
// This package purposefully relies on Node's EventEmitter module.
1014
// eslint-disable-next-line import-x/no-nodejs-modules
@@ -16,13 +20,13 @@ const stateMetadata = {
1620
unapprovedMessages: {
1721
includeInStateLogs: true,
1822
persist: false,
19-
anonymous: false,
23+
includeInDebugSnapshot: false,
2024
usedInUi: true,
2125
},
2226
unapprovedMessagesCount: {
2327
includeInStateLogs: true,
2428
persist: false,
25-
anonymous: false,
29+
includeInDebugSnapshot: false,
2630
usedInUi: true,
2731
},
2832
};
@@ -133,17 +137,17 @@ export type SecurityProviderRequest = (
133137
export type AbstractMessageManagerOptions<
134138
Name extends string,
135139
Message extends AbstractMessage,
136-
Action extends ActionConstraint,
137-
Event extends EventConstraint,
140+
MessageManagerMessenger extends Messenger<
141+
Name,
142+
| ControllerGetStateAction<Name, MessageManagerState<Message>>
143+
| ActionConstraint,
144+
| ControllerStateChangeEvent<Name, MessageManagerState<Message>>
145+
| UpdateBadgeEvent<Name>
146+
| EventConstraint
147+
>,
138148
> = {
139149
additionalFinishStatuses?: string[];
140-
messenger: RestrictedMessenger<
141-
Name,
142-
Action,
143-
Event | UpdateBadgeEvent<Name>,
144-
string,
145-
string
146-
>;
150+
messenger: MessageManagerMessenger;
147151
name: Name;
148152
securityProviderRequest?: SecurityProviderRequest;
149153
state?: MessageManagerState<Message>;
@@ -157,18 +161,18 @@ export abstract class AbstractMessageManager<
157161
Message extends AbstractMessage,
158162
Params extends AbstractMessageParams,
159163
ParamsMetamask extends AbstractMessageParamsMetamask,
160-
Action extends ActionConstraint,
161-
Event extends EventConstraint,
164+
MessageManagerMessenger extends Messenger<
165+
Name,
166+
| ControllerGetStateAction<Name, MessageManagerState<Message>>
167+
| ActionConstraint,
168+
| ControllerStateChangeEvent<Name, MessageManagerState<Message>>
169+
| UpdateBadgeEvent<Name>
170+
| EventConstraint
171+
>,
162172
> extends BaseController<
163173
Name,
164174
MessageManagerState<Message>,
165-
RestrictedMessenger<
166-
Name,
167-
Action,
168-
Event | UpdateBadgeEvent<Name>,
169-
string,
170-
string
171-
>
175+
MessageManagerMessenger
172176
> {
173177
protected messages: Message[];
174178

@@ -184,7 +188,7 @@ export abstract class AbstractMessageManager<
184188
name,
185189
securityProviderRequest,
186190
state = {} as MessageManagerState<Message>,
187-
}: AbstractMessageManagerOptions<Name, Message, Action, Event>) {
191+
}: AbstractMessageManagerOptions<Name, Message, MessageManagerMessenger>) {
188192
super({
189193
messenger,
190194
metadata: stateMetadata,
@@ -200,7 +204,7 @@ export abstract class AbstractMessageManager<
200204
}
201205

202206
/**
203-
* Adds request props to the messsage params and returns a new messageParams object.
207+
* Adds request props to the message params and returns a new messageParams object.
204208
* @param messageParams - The messageParams to add the request props to.
205209
* @param req - The original request object.
206210
* @returns The messageParams with the request props added.
@@ -257,7 +261,7 @@ export abstract class AbstractMessageManager<
257261
state.unapprovedMessagesCount = this.getUnapprovedMessagesCount();
258262
});
259263
if (emitUpdateBadge) {
260-
this.messagingSystem.publish(`${this.name}:updateBadge`);
264+
this.messenger.publish(`${this.name}:updateBadge` as const);
261265
}
262266
}
263267

packages/message-manager/src/DecryptMessageManager.ts

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import type {
2-
ActionConstraint,
3-
EventConstraint,
4-
RestrictedMessenger,
5-
} from '@metamask/base-controller';
2+
ControllerGetStateAction,
3+
ControllerStateChangeEvent,
4+
} from '@metamask/base-controller/next';
65
import { ApprovalType } from '@metamask/controller-utils';
6+
import type { Messenger } from '@metamask/messenger';
7+
import {} from '@metamask/messenger';
78

89
import type {
910
AbstractMessage,
@@ -30,14 +31,20 @@ export type DecryptMessageManagerUpdateBadgeEvent = {
3031
payload: [];
3132
};
3233

33-
export type DecryptMessageManagerMessenger = RestrictedMessenger<
34+
type DecryptMessageManagerActions = ControllerGetStateAction<
3435
typeof managerName,
35-
ActionConstraint,
36-
| EventConstraint
36+
DecryptMessageManagerState
37+
>;
38+
39+
type DecryptMessageManagerEvents =
40+
| ControllerStateChangeEvent<typeof managerName, DecryptMessageManagerState>
3741
| DecryptMessageManagerUnapprovedMessageAddedEvent
38-
| DecryptMessageManagerUpdateBadgeEvent,
39-
string,
40-
string
42+
| DecryptMessageManagerUpdateBadgeEvent;
43+
44+
export type DecryptMessageManagerMessenger = Messenger<
45+
typeof managerName,
46+
DecryptMessageManagerActions,
47+
DecryptMessageManagerEvents
4148
>;
4249

4350
type DecryptMessageManagerOptions = {
@@ -97,10 +104,7 @@ export class DecryptMessageManager extends AbstractMessageManager<
97104
DecryptMessage,
98105
DecryptMessageParams,
99106
DecryptMessageParamsMetamask,
100-
ActionConstraint,
101-
| EventConstraint
102-
| DecryptMessageManagerUnapprovedMessageAddedEvent
103-
| DecryptMessageManagerUpdateBadgeEvent
107+
DecryptMessageManagerMessenger
104108
> {
105109
constructor({
106110
additionalFinishStatuses,
@@ -194,7 +198,7 @@ export class DecryptMessageManager extends AbstractMessageManager<
194198
const messageId = messageData.id;
195199

196200
await this.addMessage(messageData);
197-
this.messagingSystem.publish(`${managerName}:unapprovedMessage`, {
201+
this.messenger.publish(`${managerName}:unapprovedMessage`, {
198202
...updatedMessageParams,
199203
metamaskId: messageId,
200204
});

packages/message-manager/src/EncryptionPublicKeyManager.ts

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type {
2-
ActionConstraint,
3-
EventConstraint,
4-
RestrictedMessenger,
5-
} from '@metamask/base-controller';
2+
ControllerGetStateAction,
3+
ControllerStateChangeEvent,
4+
} from '@metamask/base-controller/next';
65
import { ApprovalType } from '@metamask/controller-utils';
6+
import type { Messenger } from '@metamask/messenger';
77

88
import type {
99
AbstractMessage,
@@ -31,14 +31,23 @@ export type EncryptionPublicKeyManagerUpdateBadgeEvent = {
3131
payload: [];
3232
};
3333

34-
export type EncryptionPublicKeyManagerMessenger = RestrictedMessenger<
34+
type EncryptionPublicKeyManagerActions = ControllerGetStateAction<
3535
typeof managerName,
36-
ActionConstraint,
37-
| EventConstraint
36+
EncryptionPublicKeyManagerState
37+
>;
38+
39+
type EncryptionPublicKeyManagerEvents =
40+
| ControllerStateChangeEvent<
41+
typeof managerName,
42+
EncryptionPublicKeyManagerState
43+
>
3844
| EncryptionPublicKeyManagerUnapprovedMessageAddedEvent
39-
| EncryptionPublicKeyManagerUpdateBadgeEvent,
40-
string,
41-
string
45+
| EncryptionPublicKeyManagerUpdateBadgeEvent;
46+
47+
export type EncryptionPublicKeyManagerMessenger = Messenger<
48+
typeof managerName,
49+
EncryptionPublicKeyManagerActions,
50+
EncryptionPublicKeyManagerEvents
4251
>;
4352

4453
type EncryptionPublicKeyManagerOptions = {
@@ -95,10 +104,7 @@ export class EncryptionPublicKeyManager extends AbstractMessageManager<
95104
EncryptionPublicKey,
96105
EncryptionPublicKeyParams,
97106
EncryptionPublicKeyParamsMetamask,
98-
ActionConstraint,
99-
| EventConstraint
100-
| EncryptionPublicKeyManagerUnapprovedMessageAddedEvent
101-
| EncryptionPublicKeyManagerUpdateBadgeEvent
107+
EncryptionPublicKeyManagerMessenger
102108
> {
103109
constructor({
104110
additionalFinishStatuses,
@@ -185,7 +191,7 @@ export class EncryptionPublicKeyManager extends AbstractMessageManager<
185191
const messageId = messageData.id;
186192

187193
await this.addMessage(messageData);
188-
this.messagingSystem.publish(`${this.name}:unapprovedMessage`, {
194+
this.messenger.publish(`${this.name}:unapprovedMessage` as const, {
189195
...updatedMessageParams,
190196
metamaskId: messageId,
191197
});

packages/message-manager/tsconfig.build.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
},
88
"references": [
99
{ "path": "../base-controller/tsconfig.build.json" },
10-
{ "path": "../controller-utils/tsconfig.build.json" }
10+
{ "path": "../controller-utils/tsconfig.build.json" },
11+
{ "path": "../messenger/tsconfig.build.json" }
1112
],
1213
"include": ["../../types", "./src"]
1314
}

packages/message-manager/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
},
66
"references": [
77
{ "path": "../base-controller" },
8-
{ "path": "../controller-utils" }
8+
{ "path": "../controller-utils" },
9+
{ "path": "../messenger" }
910
],
1011
"include": ["../../types", "./src"]
1112
}

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4034,6 +4034,7 @@ __metadata:
40344034
"@metamask/base-controller": "npm:^8.4.2"
40354035
"@metamask/controller-utils": "npm:^11.14.1"
40364036
"@metamask/eth-sig-util": "npm:^8.2.0"
4037+
"@metamask/messenger": "npm:^0.3.0"
40374038
"@metamask/utils": "npm:^11.8.1"
40384039
"@types/jest": "npm:^27.4.1"
40394040
"@types/uuid": "npm:^8.3.0"

0 commit comments

Comments
 (0)