Skip to content

Commit 94c5e2b

Browse files
committed
refactor: migrate {Permission,SubjectMetadata}Controller to @metamask/messenger
1 parent 273e522 commit 94c5e2b

10 files changed

+191
-166
lines changed

packages/permission-controller/CHANGELOG.md

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

1010
### Changed
1111

12+
- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6537](https://github.com/MetaMask/core/pull/6537))
13+
- Previously, `PermissionController` and `SubjectMetadataController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
1214
- Bump `@metamask/base-controller` from `^8.0.0` to `^8.3.0` ([#5722](https://github.com/MetaMask/core/pull/5722), [#6284](https://github.com/MetaMask/core/pull/6284), [#6355](https://github.com/MetaMask/core/pull/6355), [#6465](https://github.com/MetaMask/core/pull/6465))
1315
- Bump `@metamask/controller-utils` from `^11.5.0` to `^11.12.0` ([#5439](https://github.com/MetaMask/core/pull/5439), [#5583](https://github.com/MetaMask/core/pull/5583), [#5765](https://github.com/MetaMask/core/pull/5765), [#5812](https://github.com/MetaMask/core/pull/5812), [#5935](https://github.com/MetaMask/core/pull/5935), [#6069](https://github.com/MetaMask/core/pull/6069), [#6303](https://github.com/MetaMask/core/pull/6303))
1416
- Bump `@metamask/utils` from `^11.1.0` to `^11.4.2` ([#5301](https://github.com/MetaMask/core/pull/5301), [#6054](https://github.com/MetaMask/core/pull/6054))

packages/permission-controller/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.3.0",
5151
"@metamask/controller-utils": "^11.12.0",
5252
"@metamask/json-rpc-engine": "^10.0.3",
53+
"@metamask/messenger": "^0.2.0",
5354
"@metamask/rpc-errors": "^7.0.2",
5455
"@metamask/utils": "^11.4.2",
5556
"@types/deep-freeze-strict": "^1.1.0",

packages/permission-controller/src/Caveat.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import type {
1212
RestrictedMethodParameters,
1313
} from './Permission';
1414
import { PermissionType } from './Permission';
15-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
16-
import type { PermissionController } from './PermissionController';
1715

1816
export type CaveatConstraint = {
1917
/**

packages/permission-controller/src/Permission.ts

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
import type {
2-
ActionConstraint,
3-
EventConstraint,
4-
} from '@metamask/base-controller';
51
import type { NonEmptyArray } from '@metamask/controller-utils';
2+
import type { ActionConstraint, EventConstraint } from '@metamask/messenger';
63
import type { Json } from '@metamask/utils';
74
import { nanoid } from 'nanoid';
85

9-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
10-
import type { CaveatConstraint, Caveat } from './Caveat';
6+
import type { CaveatConstraint } from './Caveat';
117
import type {
12-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
13-
PermissionController,
148
PermissionsRequest,
159
SideEffectMessenger,
1610
} from './PermissionController';
@@ -117,8 +111,8 @@ export type ValidPermission<
117111
type ExtractArrayMembers<ArrayType> = ArrayType extends []
118112
? never
119113
: ArrayType extends unknown[] | readonly unknown[]
120-
? ArrayType[number]
121-
: never;
114+
? ArrayType[number]
115+
: never;
122116

123117
/**
124118
* A utility type for extracting the allowed caveat types for a particular
@@ -538,11 +532,12 @@ export type PermissionSpecificationBuilderExportConstraint = {
538532

539533
type ValidRestrictedMethodSpecification<
540534
Specification extends RestrictedMethodSpecificationConstraint,
541-
> = Specification['methodImplementation'] extends ValidRestrictedMethod<
542-
Specification['methodImplementation']
543-
>
544-
? Specification
545-
: never;
535+
> =
536+
Specification['methodImplementation'] extends ValidRestrictedMethod<
537+
Specification['methodImplementation']
538+
>
539+
? Specification
540+
: never;
546541

547542
/**
548543
* Constraint for {@link PermissionSpecificationConstraint} objects that
@@ -556,10 +551,10 @@ export type ValidPermissionSpecification<
556551
? Specification['permissionType'] extends PermissionType.Endowment
557552
? Specification
558553
: Specification['permissionType'] extends PermissionType.RestrictedMethod
559-
? ValidRestrictedMethodSpecification<
560-
Extract<Specification, RestrictedMethodSpecificationConstraint>
561-
>
562-
: never
554+
? ValidRestrictedMethodSpecification<
555+
Extract<Specification, RestrictedMethodSpecificationConstraint>
556+
>
557+
: never
563558
: never;
564559

565560
/**

packages/permission-controller/src/PermissionController.test.ts

Lines changed: 64 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import type {
2-
AcceptRequest as AcceptApprovalRequest,
3-
AddApprovalRequest,
4-
HasApprovalRequest,
5-
RejectRequest as RejectApprovalRequest,
6-
} from '@metamask/approval-controller';
7-
import { Messenger } from '@metamask/base-controller';
81
import { isPlainObject } from '@metamask/controller-utils';
92
import { JsonRpcEngine } from '@metamask/json-rpc-engine';
3+
import {
4+
Messenger,
5+
MOCK_ANY_NAMESPACE,
6+
type MessengerActions,
7+
type MessengerEvents,
8+
type MockAnyNamespace,
9+
} from '@metamask/messenger';
1010
import type { Json, JsonRpcRequest } from '@metamask/utils';
1111
import {
1212
assertIsJsonRpcFailure,
@@ -22,8 +22,7 @@ import type {
2222
CaveatMutator,
2323
ExtractSpecifications,
2424
PermissionConstraint,
25-
PermissionControllerActions,
26-
PermissionControllerEvents,
25+
PermissionControllerMessenger,
2726
PermissionOptions,
2827
PermissionsRequest,
2928
RestrictedMethodOptions,
@@ -40,7 +39,6 @@ import {
4039
import * as errors from './errors';
4140
import type { EndowmentGetterParams } from './Permission';
4241
import { SubjectType } from './SubjectMetadataController';
43-
import type { GetSubjectMetadata } from './SubjectMetadataController';
4442

4543
// Caveat types and specifications
4644

@@ -546,13 +544,6 @@ type DefaultPermissionSpecifications = ExtractSpecifications<
546544

547545
const controllerName = 'PermissionController' as const;
548546

549-
type AllowedActions =
550-
| HasApprovalRequest
551-
| AddApprovalRequest
552-
| AcceptApprovalRequest
553-
| RejectApprovalRequest
554-
| GetSubjectMetadata;
555-
556547
/**
557548
* Params for `ApprovalController:addRequest` of type `wallet_requestPermissions`.
558549
*/
@@ -565,41 +556,59 @@ type AddPermissionRequestParams = {
565556

566557
type AddPermissionRequestArgs = [string, AddPermissionRequestParams];
567558

559+
type AllPermissionControllerActions =
560+
MessengerActions<PermissionControllerMessenger>;
561+
562+
type AllPermissionControllerEvents =
563+
MessengerEvents<PermissionControllerMessenger>;
564+
565+
type RootMessenger = Messenger<
566+
MockAnyNamespace,
567+
AllPermissionControllerActions,
568+
AllPermissionControllerEvents
569+
>;
570+
568571
/**
569-
* Gets an unrestricted messenger. Used for tests.
572+
* Creates and returns a root messenger for testing
570573
*
571-
* @returns The unrestricted messenger.
574+
* @returns A messenger instance
572575
*/
573-
function getUnrestrictedMessenger() {
574-
return new Messenger<
575-
PermissionControllerActions | AllowedActions,
576-
PermissionControllerEvents
577-
>();
576+
function getRootMessenger(): RootMessenger {
577+
return new Messenger({
578+
namespace: MOCK_ANY_NAMESPACE,
579+
});
578580
}
579581

580582
/**
581-
* Gets a restricted messenger.
583+
* Gets a messenger for the permission controller.
582584
* Used as a default in {@link getPermissionControllerOptions}.
583585
*
584-
* @param messenger - Optional parameter to pass in a messenger
585-
* @returns The restricted messenger.
586+
* @param rootMessenger - Optional parameter to pass in a root messenger
587+
* @returns The messenger for the permission controller.
586588
*/
587589
function getPermissionControllerMessenger(
588-
messenger = getUnrestrictedMessenger(),
589-
) {
590-
return messenger.getRestricted<typeof controllerName, AllowedActions['type']>(
591-
{
592-
name: controllerName,
593-
allowedActions: [
594-
'ApprovalController:hasRequest',
595-
'ApprovalController:addRequest',
596-
'ApprovalController:acceptRequest',
597-
'ApprovalController:rejectRequest',
598-
'SubjectMetadataController:getSubjectMetadata',
599-
],
600-
allowedEvents: [],
601-
},
602-
);
590+
rootMessenger = getRootMessenger(),
591+
): PermissionControllerMessenger {
592+
const messenger = new Messenger<
593+
typeof controllerName,
594+
AllPermissionControllerActions,
595+
AllPermissionControllerEvents,
596+
RootMessenger
597+
>({
598+
namespace: controllerName,
599+
parent: rootMessenger,
600+
});
601+
rootMessenger.delegate({
602+
actions: [
603+
'ApprovalController:hasRequest',
604+
'ApprovalController:addRequest',
605+
'ApprovalController:acceptRequest',
606+
'ApprovalController:rejectRequest',
607+
'SubjectMetadataController:getSubjectMetadata',
608+
],
609+
messenger,
610+
});
611+
return messenger;
603612
}
604613

605614
/**
@@ -5572,7 +5581,7 @@ describe('PermissionController', () => {
55725581

55735582
describe('controller actions', () => {
55745583
it('action: PermissionController:clearPermissions', () => {
5575-
const messenger = getUnrestrictedMessenger();
5584+
const messenger = getRootMessenger();
55765585
const options = getPermissionControllerOptions({
55775586
messenger: getPermissionControllerMessenger(messenger),
55785587
});
@@ -5597,7 +5606,7 @@ describe('PermissionController', () => {
55975606
});
55985607

55995608
it('action: PermissionController:getEndowments', async () => {
5600-
const messenger = getUnrestrictedMessenger();
5609+
const messenger = getRootMessenger();
56015610
const options = getPermissionControllerOptions({
56025611
messenger: getPermissionControllerMessenger(messenger),
56035612
});
@@ -5670,7 +5679,7 @@ describe('PermissionController', () => {
56705679
});
56715680

56725681
it('action: PermissionController:getSubjectNames', () => {
5673-
const messenger = getUnrestrictedMessenger();
5682+
const messenger = getRootMessenger();
56745683
const options = getPermissionControllerOptions({
56755684
messenger: getPermissionControllerMessenger(messenger),
56765685
});
@@ -5698,7 +5707,7 @@ describe('PermissionController', () => {
56985707
});
56995708

57005709
it('action: PermissionController:hasPermission', () => {
5701-
const messenger = getUnrestrictedMessenger();
5710+
const messenger = getRootMessenger();
57025711
const options = getPermissionControllerOptions({
57035712
messenger: getPermissionControllerMessenger(messenger),
57045713
});
@@ -5760,7 +5769,7 @@ describe('PermissionController', () => {
57605769
});
57615770

57625771
it('action: PermissionController:hasPermissions', () => {
5763-
const messenger = getUnrestrictedMessenger();
5772+
const messenger = getRootMessenger();
57645773
const options = getPermissionControllerOptions({
57655774
messenger: getPermissionControllerMessenger(messenger),
57665775
});
@@ -5790,7 +5799,7 @@ describe('PermissionController', () => {
57905799
});
57915800

57925801
it('action: PermissionController:getPermissions', () => {
5793-
const messenger = getUnrestrictedMessenger();
5802+
const messenger = getRootMessenger();
57945803
const options = getPermissionControllerOptions({
57955804
messenger: getPermissionControllerMessenger(messenger),
57965805
});
@@ -5824,7 +5833,7 @@ describe('PermissionController', () => {
58245833
});
58255834

58265835
it('action: PermissionController:revokeAllPermissions', () => {
5827-
const messenger = getUnrestrictedMessenger();
5836+
const messenger = getRootMessenger();
58285837
const options = getPermissionControllerOptions({
58295838
messenger: getPermissionControllerMessenger(messenger),
58305839
});
@@ -5858,7 +5867,7 @@ describe('PermissionController', () => {
58585867
});
58595868

58605869
it('action: PermissionController:revokePermissionForAllSubjects', () => {
5861-
const messenger = getUnrestrictedMessenger();
5870+
const messenger = getRootMessenger();
58625871
const options = getPermissionControllerOptions({
58635872
messenger: getPermissionControllerMessenger(messenger),
58645873
});
@@ -5898,7 +5907,7 @@ describe('PermissionController', () => {
58985907
});
58995908

59005909
it('action: PermissionController:grantPermissions', async () => {
5901-
const messenger = getUnrestrictedMessenger();
5910+
const messenger = getRootMessenger();
59025911
const options = getPermissionControllerOptions({
59035912
messenger: getPermissionControllerMessenger(messenger),
59045913
});
@@ -5919,7 +5928,7 @@ describe('PermissionController', () => {
59195928
});
59205929

59215930
it('action: PermissionController:grantPermissionsIncremental', async () => {
5922-
const messenger = getUnrestrictedMessenger();
5931+
const messenger = getRootMessenger();
59235932
const options = getPermissionControllerOptions({
59245933
messenger: getPermissionControllerMessenger(messenger),
59255934
});
@@ -5943,7 +5952,7 @@ describe('PermissionController', () => {
59435952
});
59445953

59455954
it('action: PermissionController:requestPermissions', async () => {
5946-
const messenger = getUnrestrictedMessenger();
5955+
const messenger = getRootMessenger();
59475956
const options = getPermissionControllerOptions({
59485957
messenger: getPermissionControllerMessenger(messenger),
59495958
});
@@ -5970,7 +5979,7 @@ describe('PermissionController', () => {
59705979
});
59715980

59725981
it('action: PermissionController:requestPermissionsIncremental', async () => {
5973-
const messenger = getUnrestrictedMessenger();
5982+
const messenger = getRootMessenger();
59745983
const options = getPermissionControllerOptions({
59755984
messenger: getPermissionControllerMessenger(messenger),
59765985
});
@@ -5997,7 +6006,7 @@ describe('PermissionController', () => {
59976006
});
59986007

59996008
it('action: PermissionController:updateCaveat', async () => {
6000-
const messenger = getUnrestrictedMessenger();
6009+
const messenger = getRootMessenger();
60016010
const state = {
60026011
subjects: {
60036012
'metamask.io': {

0 commit comments

Comments
 (0)