Skip to content

Commit 7bcf574

Browse files
authored
refactor: migrate to @metamask/messenger (#383)
Migrate from `RestrictedMessenger` to `@metamask/messenger`. * Fixes #278 <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Migrates messenger types and test setup from RestrictedMessenger to @metamask/messenger across keyring packages, updating dependencies and changelogs. > > - **Messaging migration (BREAKING)**: > - Replace `RestrictedMessenger` from `@metamask/base-controller` with new `Messenger` from `@metamask/messenger`. > - Update `KeyringInternalSnapClientMessenger` and `SnapKeyringMessenger` type definitions to use `Messenger`. > - Adjust event payload typing via `ExtractEventPayload` from `@metamask/messenger`. > - **Tests**: > - Refactor `SnapKeyring.test.ts` to construct `Messenger` with namespaces (`MOCK_ANY_NAMESPACE`) and delegate allowed actions. > - **Dependencies**: > - Add `@metamask/messenger@^0.3.0`; remove `@metamask/base-controller` from affected packages. > - **Changelogs**: > - Note breaking changes for `@metamask/keyring-internal-snap-client` and `@metamask/eth-snap-keyring` regarding the messenger migration. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 74cd0f8. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
1 parent ebcb06c commit 7bcf574

9 files changed

Lines changed: 54 additions & 37 deletions

File tree

packages/keyring-internal-snap-client/CHANGELOG.md

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

88
## [Unreleased]
99

10+
### Changed
11+
12+
- **BREAKING:** Migrate `KeyringInternalSnapClientMessenger` to new `Messenger` type from `@metamask/messenger` ([#383](https://github.com/MetaMask/accounts/pull/383))
13+
1014
## [7.2.0]
1115

1216
### Changed

packages/keyring-internal-snap-client/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@
4545
"test:watch": "jest --watch"
4646
},
4747
"dependencies": {
48-
"@metamask/base-controller": "^8.3.0",
4948
"@metamask/keyring-api": "workspace:^",
5049
"@metamask/keyring-internal-api": "workspace:^",
5150
"@metamask/keyring-snap-client": "workspace:^",
52-
"@metamask/keyring-utils": "workspace:^"
51+
"@metamask/keyring-utils": "workspace:^",
52+
"@metamask/messenger": "^0.3.0"
5353
},
5454
"devDependencies": {
5555
"@lavamoat/allow-scripts": "^3.2.1",

packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { RestrictedMessenger } from '@metamask/base-controller';
21
import { KeyringRpcMethod } from '@metamask/keyring-api';
32
import type {
43
KeyringRequestV1,
@@ -7,6 +6,7 @@ import type {
76
import { SubmitRequestResponseV1Struct } from '@metamask/keyring-internal-api';
87
import { KeyringClient, type Sender } from '@metamask/keyring-snap-client';
98
import { strictMask, type JsonRpcRequest } from '@metamask/keyring-utils';
9+
import type { Messenger } from '@metamask/messenger';
1010
import type { HandleSnapRequest } from '@metamask/snaps-controllers';
1111
import type { SnapId } from '@metamask/snaps-sdk';
1212
import type { HandlerType } from '@metamask/snaps-utils';
@@ -19,12 +19,9 @@ type AllowedActions = HandleSnapRequest;
1919
* A restricted-`Messenger` used by `KeyringInternalSnapClient` to dispatch
2020
* internal Snap requests.
2121
*/
22-
export type KeyringInternalSnapClientMessenger = RestrictedMessenger<
22+
export type KeyringInternalSnapClientMessenger = Messenger<
2323
'KeyringInternalSnapClient',
24-
AllowedActions,
25-
never,
26-
AllowedActions['type'],
27-
never
24+
AllowedActions
2825
>;
2926

3027
/**

packages/keyring-snap-bridge/CHANGELOG.md

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

88
## [Unreleased]
99

10+
### Changed
11+
12+
- **BREAKING:** Migrate `SnapKeyringMessenger` to new `Messenger` type from `@metamask/messenger` ([#383](https://github.com/MetaMask/accounts/pull/383))
13+
1014
## [17.3.0]
1115

1216
### Added

packages/keyring-snap-bridge/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@
3838
},
3939
"dependencies": {
4040
"@ethereumjs/tx": "^5.4.0",
41-
"@metamask/base-controller": "^8.3.0",
4241
"@metamask/eth-sig-util": "^8.2.0",
4342
"@metamask/keyring-api": "workspace:^",
4443
"@metamask/keyring-internal-api": "workspace:^",
4544
"@metamask/keyring-internal-snap-client": "workspace:^",
4645
"@metamask/keyring-snap-sdk": "workspace:^",
4746
"@metamask/keyring-utils": "workspace:^",
47+
"@metamask/messenger": "^0.3.0",
4848
"@metamask/superstruct": "^3.1.0",
4949
"@metamask/utils": "^11.1.0",
5050
"@types/uuid": "^9.0.8",

packages/keyring-snap-bridge/src/SnapKeyring.test.ts

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { TransactionFactory, type TypedTxData } from '@ethereumjs/tx';
2-
import { Messenger } from '@metamask/base-controller';
32
import { SignTypedDataVersion } from '@metamask/eth-sig-util';
43
import type {
54
KeyringAccount,
@@ -32,6 +31,13 @@ import {
3231
} from '@metamask/keyring-api';
3332
import { SnapManageAccountsMethod } from '@metamask/keyring-snap-sdk';
3433
import type { JsonRpcRequest } from '@metamask/keyring-utils';
34+
import {
35+
Messenger,
36+
MOCK_ANY_NAMESPACE,
37+
type MessengerActions,
38+
type MessengerEvents,
39+
type MockAnyNamespace,
40+
} from '@metamask/messenger';
3541
import type { HandleSnapRequest } from '@metamask/snaps-controllers';
3642
import { type SnapId } from '@metamask/snaps-sdk';
3743
import type { HandlerType } from '@metamask/snaps-utils';
@@ -44,11 +50,7 @@ import { getDefaultInternalOptions, SnapKeyring } from '.';
4450
import type { KeyringAccountV1 } from './account';
4551
import { DeferredPromise } from './DeferredPromise';
4652
import { migrateAccountV1, getScopesForAccountV1 } from './migrations';
47-
import type {
48-
SnapKeyringAllowedActions,
49-
SnapKeyringEvents,
50-
SnapKeyringMessenger,
51-
} from './SnapKeyringMessenger';
53+
import type { SnapKeyringMessenger } from './SnapKeyringMessenger';
5254

5355
type SnapRpcRequest = Parameters<HandleSnapRequest['handler']>[0];
5456

@@ -263,8 +265,11 @@ describe('SnapKeyring', () => {
263265
};
264266

265267
// Fake the Messenger and registers all mock actions here:
266-
const messenger: Messenger<SnapKeyringAllowedActions, SnapKeyringEvents> =
267-
new Messenger();
268+
const messenger: Messenger<
269+
MockAnyNamespace,
270+
MessengerActions<SnapKeyringMessenger>,
271+
MessengerEvents<SnapKeyringMessenger>
272+
> = new Messenger({ namespace: MOCK_ANY_NAMESPACE });
268273
messenger.registerActionHandler('SnapController:get', mockMessenger.get);
269274
messenger.registerActionHandler(
270275
'SnapController:handleRequest',
@@ -275,17 +280,19 @@ describe('SnapKeyring', () => {
275280
mockMessenger.isMinimumPlatformVersion,
276281
);
277282

278-
// Now extracts a restricted messenger for the Snap keyring only.
279-
const mockSnapKeyringMessenger: SnapKeyringMessenger =
280-
messenger.getRestricted({
281-
name: 'SnapKeyring',
282-
allowedEvents: [],
283-
allowedActions: [
284-
'SnapController:get',
285-
'SnapController:handleRequest',
286-
'SnapController:isMinimumPlatformVersion',
287-
],
288-
});
283+
// Now extracts a messenger for the Snap keyring only.
284+
const mockSnapKeyringMessenger: SnapKeyringMessenger = new Messenger({
285+
namespace: 'SnapKeyring',
286+
parent: messenger,
287+
});
288+
messenger.delegate({
289+
messenger: mockSnapKeyringMessenger,
290+
actions: [
291+
'SnapController:get',
292+
'SnapController:handleRequest',
293+
'SnapController:isMinimumPlatformVersion',
294+
],
295+
});
289296

290297
// Allow to map a mocked value for a given keyring RPC method
291298
const mockMessengerHandleRequest = (

packages/keyring-snap-bridge/src/SnapKeyring.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import type { TypedTransaction } from '@ethereumjs/tx';
66
import { TransactionFactory } from '@ethereumjs/tx';
7-
import type { ExtractEventPayload } from '@metamask/base-controller';
87
import type { TypedDataV1, TypedMessage } from '@metamask/eth-sig-util';
98
import { SignTypedDataVersion } from '@metamask/eth-sig-util';
109
import type {
@@ -46,6 +45,7 @@ import {
4645
} from '@metamask/keyring-snap-sdk';
4746
import type { AccountId, JsonRpcRequest } from '@metamask/keyring-utils';
4847
import { strictMask } from '@metamask/keyring-utils';
48+
import type { ExtractEventPayload } from '@metamask/messenger';
4949
import type { SnapId } from '@metamask/snaps-sdk';
5050
import { type Snap } from '@metamask/snaps-utils';
5151
import { assert, mask, object, string } from '@metamask/superstruct';

packages/keyring-snap-bridge/src/SnapKeyringMessenger.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import type { RestrictedMessenger } from '@metamask/base-controller';
21
import type {
32
AccountAssetListUpdatedEventPayload,
43
AccountBalancesUpdatedEventPayload,
54
AccountTransactionsUpdatedEventPayload,
65
} from '@metamask/keyring-api';
6+
import type { Messenger } from '@metamask/messenger';
77
import type {
88
HandleSnapRequest as SnapControllerHandleSnapRequest,
99
GetSnap as SnapControllerGetSnap,
@@ -42,10 +42,8 @@ export type SnapKeyringAllowedActions =
4242

4343
export const SNAP_KEYRING_NAME = 'SnapKeyring';
4444

45-
export type SnapKeyringMessenger = RestrictedMessenger<
45+
export type SnapKeyringMessenger = Messenger<
4646
typeof SNAP_KEYRING_NAME,
4747
SnapKeyringAllowedActions,
48-
SnapKeyringEvents,
49-
SnapKeyringAllowedActions['type'],
50-
never
48+
SnapKeyringEvents
5149
>;

yarn.lock

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,7 +1553,7 @@ __metadata:
15531553
languageName: node
15541554
linkType: hard
15551555

1556-
"@metamask/base-controller@npm:^8.0.0, @metamask/base-controller@npm:^8.0.1, @metamask/base-controller@npm:^8.3.0":
1556+
"@metamask/base-controller@npm:^8.0.0, @metamask/base-controller@npm:^8.0.1":
15571557
version: 8.3.0
15581558
resolution: "@metamask/base-controller@npm:8.3.0"
15591559
dependencies:
@@ -1839,13 +1839,13 @@ __metadata:
18391839
"@lavamoat/allow-scripts": "npm:^3.2.1"
18401840
"@lavamoat/preinstall-always-fail": "npm:^2.1.0"
18411841
"@metamask/auto-changelog": "npm:^3.4.4"
1842-
"@metamask/base-controller": "npm:^8.3.0"
18431842
"@metamask/eth-sig-util": "npm:^8.2.0"
18441843
"@metamask/keyring-api": "workspace:^"
18451844
"@metamask/keyring-internal-api": "workspace:^"
18461845
"@metamask/keyring-internal-snap-client": "workspace:^"
18471846
"@metamask/keyring-snap-sdk": "workspace:^"
18481847
"@metamask/keyring-utils": "workspace:^"
1848+
"@metamask/messenger": "npm:^0.3.0"
18491849
"@metamask/snaps-controllers": "npm:^14.0.1"
18501850
"@metamask/snaps-sdk": "npm:^9.0.0"
18511851
"@metamask/snaps-utils": "npm:^11.0.0"
@@ -2016,11 +2016,11 @@ __metadata:
20162016
"@lavamoat/allow-scripts": "npm:^3.2.1"
20172017
"@lavamoat/preinstall-always-fail": "npm:^2.1.0"
20182018
"@metamask/auto-changelog": "npm:^3.4.4"
2019-
"@metamask/base-controller": "npm:^8.3.0"
20202019
"@metamask/keyring-api": "workspace:^"
20212020
"@metamask/keyring-internal-api": "workspace:^"
20222021
"@metamask/keyring-snap-client": "workspace:^"
20232022
"@metamask/keyring-utils": "workspace:^"
2023+
"@metamask/messenger": "npm:^0.3.0"
20242024
"@metamask/snaps-controllers": "npm:^14.0.1"
20252025
"@metamask/snaps-sdk": "npm:^9.0.0"
20262026
"@metamask/snaps-utils": "npm:^11.0.0"
@@ -2141,6 +2141,13 @@ __metadata:
21412141
languageName: node
21422142
linkType: hard
21432143

2144+
"@metamask/messenger@npm:^0.3.0":
2145+
version: 0.3.0
2146+
resolution: "@metamask/messenger@npm:0.3.0"
2147+
checksum: 10/84e9f4193646d749c7260a4958b13974b3c8738cc2e414116279ed31734e1edba687ff56ddbfdb75033bce30aaa9eeb7c391bccb87a66dbc99a902882271f673
2148+
languageName: node
2149+
linkType: hard
2150+
21442151
"@metamask/number-to-bn@npm:^1.7.1":
21452152
version: 1.7.1
21462153
resolution: "@metamask/number-to-bn@npm:1.7.1"

0 commit comments

Comments
 (0)