Skip to content

Commit 0de0405

Browse files
mikespositoGudahtt
andauthored
refactor: migrate EarnController to @metamask/messenger (#6445)
## 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 the `EarnController` class to the new `@metamask/messenger` comm system, 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 `EarnController` from `RestrictedMessenger` to `@metamask/messenger`, updates state metadata keys, and aligns tests, configs, and docs. > > - **EarnController**: > - Migrate messaging from `RestrictedMessenger` to `@metamask/messenger` with new typed `Messenger` and `delegate` usage; replace `messagingSystem` calls with `messenger.call/subscribe`. > - Update imports to `@metamask/base-controller/next`. > - Rename metadata key `anonymous` to `includeInDebugSnapshot` and adjust values. > - **Tests** (`packages/earn-controller/src/EarnController.test.ts`): > - Switch to `@metamask/messenger` root and namespaced messengers; update types; adjust `deriveStateFromMetadata` selector to `includeInDebugSnapshot`. > - **Package/Config**: > - Add dependency `@metamask/messenger` and TS project references. > - **Docs**: > - Update dependency graph in `README.md` to link `earn_controller` → `messenger` and add `eip_7702_internal_rpc_middleware` → `controller_utils`. > - **Changelog**: > - Note breaking changes: new `Messenger` requirement and metadata key rename. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ba9bcec. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Mark Stacey <markjstacey@gmail.com>
1 parent 4fbdc63 commit 0de0405

File tree

8 files changed

+68
-39
lines changed

8 files changed

+68
-39
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ linkStyle default opacity:0.5
220220
delegation_controller --> keyring_controller;
221221
earn_controller --> base_controller;
222222
earn_controller --> controller_utils;
223+
earn_controller --> messenger;
223224
earn_controller --> account_tree_controller;
224225
earn_controller --> network_controller;
225226
earn_controller --> transaction_controller;

packages/earn-controller/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ 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` ([#6445](https://github.com/MetaMask/core/pull/6445))
13+
- Previously, `EarnController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
14+
- **BREAKING:** Metadata property `anonymous` renamed to `includeInDebugSnapshot` ([#6445](https://github.com/MetaMask/core/pull/6445))
15+
1016
## [8.0.2]
1117

1218
### Changed

packages/earn-controller/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"@metamask/base-controller": "^8.4.2",
5353
"@metamask/controller-utils": "^11.14.1",
5454
"@metamask/keyring-api": "^21.0.0",
55+
"@metamask/messenger": "^0.3.0",
5556
"@metamask/stake-sdk": "^3.2.1",
5657
"reselect": "^5.1.1"
5758
},

packages/earn-controller/src/EarnController.test.ts

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
/* eslint-disable jest/no-conditional-in-test */
2-
import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller';
2+
import { deriveStateFromMetadata } from '@metamask/base-controller/next';
33
import { toHex } from '@metamask/controller-utils';
44
import type { InternalAccount } from '@metamask/keyring-internal-api';
5+
import {
6+
MOCK_ANY_NAMESPACE,
7+
Messenger,
8+
type MessengerActions,
9+
type MessengerEvents,
10+
type MockAnyNamespace,
11+
} from '@metamask/messenger';
512
import { getDefaultNetworkControllerState } from '@metamask/network-controller';
613
import {
714
EarnSdk,
@@ -17,10 +24,6 @@ import {
1724
EarnController,
1825
type EarnControllerState,
1926
type EarnControllerMessenger,
20-
type EarnControllerEvents,
21-
type EarnControllerActions,
22-
type AllowedActions,
23-
type AllowedEvents,
2427
DEFAULT_POOLED_STAKING_CHAIN_STATE,
2528
} from './EarnController';
2629
import type { TransactionMeta } from '../../transaction-controller/src';
@@ -29,6 +32,16 @@ import {
2932
TransactionType,
3033
} from '../../transaction-controller/src';
3134

35+
type AllEarnControllerActions = MessengerActions<EarnControllerMessenger>;
36+
37+
type AllEarnControllerEvents = MessengerEvents<EarnControllerMessenger>;
38+
39+
type RootMessenger = Messenger<
40+
MockAnyNamespace,
41+
AllEarnControllerActions,
42+
AllEarnControllerEvents
43+
>;
44+
3245
jest.mock('@metamask/stake-sdk', () => ({
3346
EarnSdk: {
3447
create: jest.fn().mockImplementation(() => ({
@@ -81,39 +94,45 @@ jest.mock('@metamask/stake-sdk', () => ({
8194
}));
8295

8396
/**
84-
* Builds a new instance of the Messenger class for the EarnController.
97+
* Builds a new instance of the root messenger.
8598
*
86-
* @returns A new instance of the Messenger class for the EarnController.
99+
* @returns A new instance of the root messenger.
87100
*/
88-
function buildMessenger() {
89-
return new Messenger<
90-
EarnControllerActions | AllowedActions,
91-
EarnControllerEvents | AllowedEvents
92-
>();
101+
function buildMessenger(): RootMessenger {
102+
return new Messenger({ namespace: MOCK_ANY_NAMESPACE });
93103
}
94104

95105
/**
96-
* Constructs the messenger which is restricted to relevant EarnController
97-
* actions and events.
106+
* Constructs the messenger for EarnController.
98107
*
99-
* @param rootMessenger - The root messenger to restrict.
108+
* @param rootMessenger - The root messenger to set as parent.
100109
* @returns The restricted messenger.
101110
*/
102111
function getEarnControllerMessenger(
103112
rootMessenger = buildMessenger(),
104113
): EarnControllerMessenger {
105-
return rootMessenger.getRestricted({
106-
name: 'EarnController',
107-
allowedActions: [
114+
const earnControllerMessenger = new Messenger<
115+
'EarnController',
116+
AllEarnControllerActions,
117+
AllEarnControllerEvents,
118+
RootMessenger
119+
>({
120+
namespace: 'EarnController',
121+
parent: rootMessenger,
122+
});
123+
rootMessenger.delegate({
124+
messenger: earnControllerMessenger,
125+
actions: [
108126
'NetworkController:getNetworkClientById',
109127
'AccountTreeController:getAccountsFromSelectedAccountGroup',
110128
],
111-
allowedEvents: [
129+
events: [
112130
'NetworkController:networkDidChange',
113131
'AccountTreeController:selectedAccountGroupChange',
114132
'TransactionController:transactionConfirmed',
115133
],
116134
});
135+
return earnControllerMessenger;
117136
}
118137

119138
const mockAccount1Address = '0x1234';
@@ -1461,10 +1480,7 @@ describe('EarnController', () => {
14611480

14621481
describe('On transaction confirmed', () => {
14631482
let controller: EarnController;
1464-
let messenger: Messenger<
1465-
EarnControllerActions | AllowedActions,
1466-
EarnControllerEvents | AllowedEvents
1467-
>;
1483+
let messenger: RootMessenger;
14681484

14691485
beforeEach(async () => {
14701486
const earnController = await setupController();
@@ -2575,7 +2591,7 @@ describe('EarnController', () => {
25752591
deriveStateFromMetadata(
25762592
controller.state,
25772593
controller.metadata,
2578-
'anonymous',
2594+
'includeInDebugSnapshot',
25792595
),
25802596
).toMatchInlineSnapshot(`
25812597
Object {

packages/earn-controller/src/EarnController.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import type {
66
import type {
77
ControllerGetStateAction,
88
ControllerStateChangeEvent,
9-
RestrictedMessenger,
109
StateMetadata,
11-
} from '@metamask/base-controller';
12-
import { BaseController } from '@metamask/base-controller';
10+
} from '@metamask/base-controller/next';
11+
import { BaseController } from '@metamask/base-controller/next';
1312
import { convertHexToDecimal, toHex } from '@metamask/controller-utils';
1413
import { isEvmAccountType } from '@metamask/keyring-api';
1514
import type { InternalAccount } from '@metamask/keyring-internal-api';
15+
import type { Messenger } from '@metamask/messenger';
1616
import type {
1717
NetworkControllerGetNetworkClientByIdAction,
1818
NetworkControllerNetworkDidChangeEvent,
@@ -117,19 +117,19 @@ const earnControllerMetadata: StateMetadata<EarnControllerState> = {
117117
pooled_staking: {
118118
includeInStateLogs: true,
119119
persist: true,
120-
anonymous: false,
120+
includeInDebugSnapshot: false,
121121
usedInUi: true,
122122
},
123123
lending: {
124124
includeInStateLogs: true,
125125
persist: true,
126-
anonymous: false,
126+
includeInDebugSnapshot: false,
127127
usedInUi: true,
128128
},
129129
lastUpdated: {
130130
includeInStateLogs: true,
131131
persist: false,
132-
anonymous: true,
132+
includeInDebugSnapshot: true,
133133
usedInUi: false,
134134
},
135135
};
@@ -273,12 +273,10 @@ export type AllowedEvents =
273273
* The messenger which is restricted to actions and events accessed by
274274
* EarnController.
275275
*/
276-
export type EarnControllerMessenger = RestrictedMessenger<
276+
export type EarnControllerMessenger = Messenger<
277277
typeof controllerName,
278278
EarnControllerActions | AllowedActions,
279-
EarnControllerEvents | AllowedEvents,
280-
AllowedActions['type'],
281-
AllowedEvents['type']
279+
EarnControllerEvents | AllowedEvents
282280
>;
283281

284282
// === CONTROLLER DEFINITION ===
@@ -344,7 +342,7 @@ export class EarnController extends BaseController<
344342
this.refreshLendingData().catch(console.error);
345343

346344
// Listen for network changes
347-
this.messagingSystem.subscribe(
345+
this.messenger.subscribe(
348346
'NetworkController:networkDidChange',
349347
(networkControllerState: NetworkState) => {
350348
this.#selectedNetworkClientId =
@@ -365,7 +363,7 @@ export class EarnController extends BaseController<
365363
);
366364

367365
// Listen for account group changes
368-
this.messagingSystem.subscribe(
366+
this.messenger.subscribe(
369367
'AccountTreeController:selectedAccountGroupChange',
370368
() => {
371369
const address = this.#getSelectedEvmAccountAddress();
@@ -379,7 +377,7 @@ export class EarnController extends BaseController<
379377
);
380378

381379
// Listen for confirmed staking transactions
382-
this.messagingSystem.subscribe(
380+
this.messenger.subscribe(
383381
'TransactionController:transactionConfirmed',
384382
(transactionMeta: TransactionMeta) => {
385383
/**
@@ -419,7 +417,7 @@ export class EarnController extends BaseController<
419417
* @param networkClientId - The network client id to initialize the Earn SDK for.
420418
*/
421419
async #initializeSDK(networkClientId: string) {
422-
const networkClient = this.messagingSystem.call(
420+
const networkClient = this.messenger.call(
423421
'NetworkController:getNetworkClientById',
424422
networkClientId,
425423
);
@@ -460,7 +458,7 @@ export class EarnController extends BaseController<
460458
* @returns The EVM account or undefined if no EVM account is found.
461459
*/
462460
#getSelectedEvmAccount(): InternalAccount | undefined {
463-
return this.messagingSystem
461+
return this.messenger
464462
.call('AccountTreeController:getAccountsFromSelectedAccountGroup')
465463
.find((account: InternalAccount) => isEvmAccountType(account.type));
466464
}

packages/earn-controller/tsconfig.build.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
},
1818
{
1919
"path": "../account-tree-controller/tsconfig.build.json"
20+
},
21+
{
22+
"path": "../messenger/tsconfig.build.json"
2023
}
2124
],
2225
"include": ["../../types", "./src"]

packages/earn-controller/tsconfig.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
},
1717
{
1818
"path": "../account-tree-controller"
19+
},
20+
{
21+
"path": "../messenger"
1922
}
2023
]
2124
}

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3256,6 +3256,7 @@ __metadata:
32563256
"@metamask/base-controller": "npm:^8.4.2"
32573257
"@metamask/controller-utils": "npm:^11.14.1"
32583258
"@metamask/keyring-api": "npm:^21.0.0"
3259+
"@metamask/messenger": "npm:^0.3.0"
32593260
"@metamask/network-controller": "npm:^24.3.1"
32603261
"@metamask/stake-sdk": "npm:^3.2.1"
32613262
"@metamask/transaction-controller": "npm:^60.10.0"

0 commit comments

Comments
 (0)