Skip to content

Commit ce4c907

Browse files
cryptodev-2smikespositoMrtenz
authored
refactor: migrate PermissionLogController to @metamask/messenger (#6536)
## 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 `PermissionLogController` 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 PermissionLogController to @metamask/messenger, updates types/metadata and exports, adapts tests, and updates configs/changelog. > > - **PermissionLogController**: > - Migrate to `@metamask/messenger` `Messenger`; use `@metamask/base-controller/next` types (`ControllerGetStateAction`, `ControllerStateChangeEvent`). > - Define and export `PermissionLogControllerMessenger`, `PermissionLogControllerActions`, `PermissionLogControllerGetStateAction`, `PermissionLogControllerEvents`, `PermissionLogControllerStateChangeEvent`. > - Rename metadata `anonymous` to `includeInDebugSnapshot`. > - Switch `index` to named exports and re-export new types. > - **Tests**: > - Update to construct root/child messengers from `@metamask/messenger` and use `deriveStateFromMetadata` from `@metamask/base-controller/next`. > - **Package/Config**: > - Add dependency `@metamask/messenger@^0.3.0`; add TS project references to `packages/messenger`. > - Changelog: note BREAKING migration to new `Messenger` and metadata rename; document new exported types. > - **Docs**: > - README dependency graph: add `permission_log_controller --> messenger`; minor graph tweak for `eip_7702_internal_rpc_middleware`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2c60018. 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: Maarten Zuidhoorn <[email protected]>
1 parent 320f696 commit ce4c907

File tree

9 files changed

+100
-19
lines changed

9 files changed

+100
-19
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ linkStyle default opacity:0.5
310310
permission_controller --> approval_controller;
311311
permission_log_controller --> base_controller;
312312
permission_log_controller --> json_rpc_engine;
313+
permission_log_controller --> messenger;
313314
phishing_controller --> base_controller;
314315
phishing_controller --> controller_utils;
315316
phishing_controller --> messenger;

packages/permission-log-controller/CHANGELOG.md

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

88
## [Unreleased]
99

10+
### Added
11+
12+
- Export new messenger action and event types: `PermissionLogControllerActions`, `PermissionLogControllerGetStateAction`, `PermissionLogControllerEvents`, and `PermissionLogControllerStateChangeEvent` ([#6536](https://github.com/MetaMask/core/pull/6536))
13+
14+
### Changed
15+
16+
- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6536](https://github.com/MetaMask/core/pull/6536))
17+
- Previously, `PermissionLogController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
18+
- **BREAKING:** Metadata property `anonymous` renamed to `includeInDebugSnapshot` ([#6536](https://github.com/MetaMask/core/pull/6536))
19+
1020
## [4.1.1]
1121

1222
### Changed

packages/permission-log-controller/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
"dependencies": {
5050
"@metamask/base-controller": "^8.4.2",
5151
"@metamask/json-rpc-engine": "^10.1.1",
52+
"@metamask/messenger": "^0.3.0",
5253
"@metamask/utils": "^11.8.1"
5354
},
5455
"devDependencies": {

packages/permission-log-controller/src/PermissionLogController.ts

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import {
22
BaseController,
3-
type RestrictedMessenger,
4-
} from '@metamask/base-controller';
3+
type ControllerGetStateAction,
4+
type ControllerStateChangeEvent,
5+
} from '@metamask/base-controller/next';
56
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
7+
import type { Messenger } from '@metamask/messenger';
68
import {
79
type Json,
810
type JsonRpcRequest,
@@ -70,12 +72,24 @@ export type PermissionLogControllerOptions = {
7072
messenger: PermissionLogControllerMessenger;
7173
};
7274

73-
export type PermissionLogControllerMessenger = RestrictedMessenger<
75+
export type PermissionLogControllerGetStateAction = ControllerGetStateAction<
7476
typeof name,
75-
never,
76-
never,
77-
never,
78-
never
77+
PermissionLogControllerState
78+
>;
79+
80+
export type PermissionLogControllerActions =
81+
PermissionLogControllerGetStateAction;
82+
83+
export type PermissionLogControllerStateChangeEvent =
84+
ControllerStateChangeEvent<typeof name, PermissionLogControllerState>;
85+
86+
export type PermissionLogControllerEvents =
87+
PermissionLogControllerStateChangeEvent;
88+
89+
export type PermissionLogControllerMessenger = Messenger<
90+
typeof name,
91+
PermissionLogControllerActions,
92+
PermissionLogControllerEvents
7993
>;
8094

8195
const defaultState: PermissionLogControllerState = {
@@ -108,13 +122,13 @@ export class PermissionLogController extends BaseController<
108122
permissionHistory: {
109123
includeInStateLogs: true,
110124
persist: true,
111-
anonymous: false,
125+
includeInDebugSnapshot: false,
112126
usedInUi: true,
113127
},
114128
permissionActivityLog: {
115129
includeInStateLogs: true,
116130
persist: false,
117-
anonymous: false,
131+
includeInDebugSnapshot: false,
118132
usedInUi: false,
119133
},
120134
},
Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,17 @@
1-
export * from './PermissionLogController';
1+
export { PermissionLogController } from './PermissionLogController';
2+
export type {
3+
JsonRpcRequestWithOrigin,
4+
Caveat,
5+
Permission,
6+
PermissionActivityLog,
7+
PermissionLog,
8+
PermissionEntry,
9+
PermissionHistory,
10+
PermissionLogControllerActions,
11+
PermissionLogControllerGetStateAction,
12+
PermissionLogControllerStateChangeEvent,
13+
PermissionLogControllerEvents,
14+
PermissionLogControllerMessenger,
15+
PermissionLogControllerState,
16+
PermissionLogControllerOptions,
17+
} from './PermissionLogController';

packages/permission-log-controller/tests/PermissionLogController.test.ts

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1-
import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller';
1+
import { deriveStateFromMetadata } from '@metamask/base-controller/next';
22
import type {
33
JsonRpcEngineReturnHandler,
44
JsonRpcEngineNextCallback,
55
} from '@metamask/json-rpc-engine';
6+
import {
7+
Messenger,
8+
MOCK_ANY_NAMESPACE,
9+
type MessengerActions,
10+
type MessengerEvents,
11+
type MockAnyNamespace,
12+
} from '@metamask/messenger';
613
import {
714
type PendingJsonRpcResponse,
815
type JsonRpcRequest,
@@ -13,9 +20,10 @@ import { nanoid } from 'nanoid';
1320
import { constants, getters, noop } from './helpers';
1421
import { LOG_LIMIT, LOG_METHOD_TYPES } from '../src/enums';
1522
import {
23+
PermissionLogController,
1624
type Permission,
1725
type PermissionLogControllerState,
18-
PermissionLogController,
26+
type PermissionLogControllerMessenger,
1927
} from '../src/PermissionLogController';
2028

2129
const { PERMS, RPC_REQUESTS } = getters;
@@ -33,17 +41,45 @@ class CustomError extends Error {
3341

3442
const name = 'PermissionLogController';
3543

44+
type AllPermissionLogControllerActions =
45+
MessengerActions<PermissionLogControllerMessenger>;
46+
47+
type AllPermissionLogControllerEvents =
48+
MessengerEvents<PermissionLogControllerMessenger>;
49+
50+
type RootMessenger = Messenger<
51+
MockAnyNamespace,
52+
AllPermissionLogControllerActions,
53+
AllPermissionLogControllerEvents
54+
>;
55+
56+
/**
57+
* Creates and returns a root messenger for testing
58+
*
59+
* @returns A messenger instance
60+
*/
61+
function getRootMessenger(): RootMessenger {
62+
return new Messenger({
63+
namespace: MOCK_ANY_NAMESPACE,
64+
});
65+
}
66+
3667
const initController = ({
3768
restrictedMethods,
3869
state,
3970
}: {
4071
restrictedMethods: Set<string>;
4172
state?: Partial<PermissionLogControllerState>;
4273
}): PermissionLogController => {
43-
const messenger = new Messenger().getRestricted({
44-
name,
45-
allowedActions: [],
46-
allowedEvents: [],
74+
const rootMessenger = getRootMessenger();
75+
const messenger = new Messenger<
76+
typeof name,
77+
AllPermissionLogControllerActions,
78+
AllPermissionLogControllerEvents,
79+
RootMessenger
80+
>({
81+
namespace: name,
82+
parent: rootMessenger,
4783
});
4884
return new PermissionLogController({
4985
messenger,
@@ -824,7 +860,7 @@ describe('PermissionLogController', () => {
824860
deriveStateFromMetadata(
825861
controller.state,
826862
controller.metadata,
827-
'anonymous',
863+
'includeInDebugSnapshot',
828864
),
829865
).toMatchInlineSnapshot(`Object {}`);
830866
});

packages/permission-log-controller/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": "../json-rpc-engine/tsconfig.build.json" }
10+
{ "path": "../json-rpc-engine/tsconfig.build.json" },
11+
{ "path": "../messenger/tsconfig.build.json" }
1112
],
1213
"include": ["../../types", "./src"]
1314
}

packages/permission-log-controller/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": "../json-rpc-engine" }
8+
{ "path": "../json-rpc-engine" },
9+
{ "path": "../messenger" }
910
],
1011
"include": ["../../types", "./src", "./tests"]
1112
}

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4433,6 +4433,7 @@ __metadata:
44334433
"@metamask/auto-changelog": "npm:^3.4.4"
44344434
"@metamask/base-controller": "npm:^8.4.2"
44354435
"@metamask/json-rpc-engine": "npm:^10.1.1"
4436+
"@metamask/messenger": "npm:^0.3.0"
44364437
"@metamask/utils": "npm:^11.8.1"
44374438
"@types/deep-freeze-strict": "npm:^1.1.0"
44384439
"@types/jest": "npm:^27.4.1"

0 commit comments

Comments
 (0)