Skip to content

Commit eb1e428

Browse files
committed
refactor: migrate RemoteFeatureFlagController to @metamask/messenger
1 parent f8c4c8a commit eb1e428

File tree

8 files changed

+64
-54
lines changed

8 files changed

+64
-54
lines changed

packages/remote-feature-flag-controller/CHANGELOG.md

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

1414
### Changed
1515

16+
- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6502](https://github.com/MetaMask/core/pull/6502))
17+
- Previously, `RemoteFeatureFlagController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
1618
- Bump `@metamask/base-controller` from `^8.0.1` to `^8.4.0` ([#6284](https://github.com/MetaMask/core/pull/6284), [#6355](https://github.com/MetaMask/core/pull/6355), [#6465](https://github.com/MetaMask/core/pull/6465), [#6632](https://github.com/MetaMask/core/pull/6632))
1719
- Bump `@metamask/controller-utils` from `^11.11.0` to `^11.14.0` ([#6303](https://github.com/MetaMask/core/pull/6303), [#6620](https://github.com/MetaMask/core/pull/6620), [#6629](https://github.com/MetaMask/core/pull/6629))
1820
- Bump `@metamask/utils` from `^11.4.2` to `^11.8.0` ([#6588](https://github.com/MetaMask/core/pull/6588))

packages/remote-feature-flag-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.0",
5151
"@metamask/controller-utils": "^11.14.0",
52+
"@metamask/messenger": "^0.3.0",
5253
"@metamask/utils": "^11.8.0",
5354
"uuid": "^8.3.2"
5455
},

packages/remote-feature-flag-controller/src/remote-feature-flag-controller-types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ControllerGetStateAction } from '@metamask/base-controller';
1+
import type { ControllerGetStateAction } from '@metamask/base-controller/next';
22
import type { Json } from '@metamask/utils';
33

44
// Define accepted values for client, distribution, and environment

packages/remote-feature-flag-controller/src/remote-feature-flag-controller.test.ts

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
1-
import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller';
1+
import { deriveStateFromMetadata } from '@metamask/base-controller/next';
2+
import {
3+
Messenger,
4+
MOCK_ANY_NAMESPACE,
5+
type MessengerActions,
6+
type MessengerEvents,
7+
type MockAnyNamespace,
8+
} from '@metamask/messenger';
29

310
import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service';
411
import {
512
RemoteFeatureFlagController,
6-
controllerName,
713
DEFAULT_CACHE_DURATION,
814
getDefaultRemoteFeatureFlagControllerState,
915
} from './remote-feature-flag-controller';
16+
import type { RemoteFeatureFlagControllerMessenger } from './remote-feature-flag-controller';
1017
import type {
11-
RemoteFeatureFlagControllerActions,
12-
RemoteFeatureFlagControllerMessenger,
18+
FeatureFlags,
1319
RemoteFeatureFlagControllerState,
14-
RemoteFeatureFlagControllerStateChangeEvent,
15-
} from './remote-feature-flag-controller';
16-
import type { FeatureFlags } from './remote-feature-flag-controller-types';
20+
} from './remote-feature-flag-controller-types';
21+
22+
const controllerName = 'RemoteFeatureFlagController';
1723

1824
const MOCK_FLAGS: FeatureFlags = {
1925
feature1: true,
@@ -350,7 +356,7 @@ describe('RemoteFeatureFlagController', () => {
350356
deriveStateFromMetadata(
351357
controller.state,
352358
controller.metadata,
353-
'anonymous',
359+
'includeInDebugSnapshot',
354360
),
355361
).toMatchInlineSnapshot(`
356362
Object {
@@ -412,31 +418,44 @@ describe('RemoteFeatureFlagController', () => {
412418
});
413419
});
414420

415-
type RootAction = RemoteFeatureFlagControllerActions;
416-
type RootEvent = RemoteFeatureFlagControllerStateChangeEvent;
421+
type AllRemoteFeatureFlagControllerActions =
422+
MessengerActions<RemoteFeatureFlagControllerMessenger>;
423+
424+
type AllRemoteFeatureFlagControllerEvents =
425+
MessengerEvents<RemoteFeatureFlagControllerMessenger>;
426+
427+
type RootMessenger = Messenger<
428+
MockAnyNamespace,
429+
AllRemoteFeatureFlagControllerActions,
430+
AllRemoteFeatureFlagControllerEvents
431+
>;
417432

418433
/**
419434
* Creates and returns a root messenger for testing
420435
*
421436
* @returns A messenger instance
422437
*/
423-
function getRootMessenger(): Messenger<RootAction, RootEvent> {
424-
return new Messenger<RootAction, RootEvent>();
438+
function getRootMessenger(): RootMessenger {
439+
return new Messenger({
440+
namespace: MOCK_ANY_NAMESPACE,
441+
});
425442
}
426443

427444
/**
428-
* Creates a restricted messenger for testing
445+
* Creates a messenger for the RemoteFeatureFlagController
429446
*
430-
* @param rootMessenger - The root messenger to restrict
431-
* @returns A restricted messenger instance
447+
* @returns A messenger instance
432448
*/
433-
function getMessenger(
434-
rootMessenger = getRootMessenger(),
435-
): RemoteFeatureFlagControllerMessenger {
436-
return rootMessenger.getRestricted({
437-
name: controllerName,
438-
allowedActions: [],
439-
allowedEvents: [],
449+
function getMessenger(): RemoteFeatureFlagControllerMessenger {
450+
const rootMessenger = getRootMessenger();
451+
return new Messenger<
452+
typeof controllerName,
453+
AllRemoteFeatureFlagControllerActions,
454+
AllRemoteFeatureFlagControllerEvents,
455+
RootMessenger
456+
>({
457+
namespace: controllerName,
458+
parent: rootMessenger,
440459
});
441460
}
442461

packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
import type {
2-
ControllerGetStateAction,
3-
ControllerStateChangeEvent,
4-
RestrictedMessenger,
5-
} from '@metamask/base-controller';
6-
import { BaseController } from '@metamask/base-controller';
1+
import {
2+
BaseController,
3+
type ControllerStateChangeEvent,
4+
} from '@metamask/base-controller/next';
5+
import type { Messenger } from '@metamask/messenger';
76

87
import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service';
98
import type {
109
FeatureFlags,
1110
ServiceResponse,
1211
FeatureFlagScopeValue,
12+
RemoteFeatureFlagControllerState,
13+
RemoteFeatureFlagControllerGetStateAction,
1314
} from './remote-feature-flag-controller-types';
1415
import {
1516
generateDeterministicRandomNumber,
@@ -18,39 +19,28 @@ import {
1819

1920
// === GENERAL ===
2021

21-
export const controllerName = 'RemoteFeatureFlagController';
22+
const controllerName = 'RemoteFeatureFlagController';
2223
export const DEFAULT_CACHE_DURATION = 24 * 60 * 60 * 1000; // 1 day
2324

2425
// === STATE ===
2526

26-
export type RemoteFeatureFlagControllerState = {
27-
remoteFeatureFlags: FeatureFlags;
28-
cacheTimestamp: number;
29-
};
30-
3127
const remoteFeatureFlagControllerMetadata = {
3228
remoteFeatureFlags: {
3329
includeInStateLogs: true,
3430
persist: true,
35-
anonymous: true,
31+
includeInDebugSnapshot: true,
3632
usedInUi: true,
3733
},
3834
cacheTimestamp: {
3935
includeInStateLogs: true,
4036
persist: true,
41-
anonymous: true,
37+
includeInDebugSnapshot: true,
4238
usedInUi: false,
4339
},
4440
};
4541

4642
// === MESSENGER ===
4743

48-
export type RemoteFeatureFlagControllerGetStateAction =
49-
ControllerGetStateAction<
50-
typeof controllerName,
51-
RemoteFeatureFlagControllerState
52-
>;
53-
5444
export type RemoteFeatureFlagControllerGetRemoteFeatureFlagAction = {
5545
type: `${typeof controllerName}:updateRemoteFeatureFlags`;
5646
handler: RemoteFeatureFlagController['updateRemoteFeatureFlags'];
@@ -59,8 +49,6 @@ export type RemoteFeatureFlagControllerGetRemoteFeatureFlagAction = {
5949
export type RemoteFeatureFlagControllerActions =
6050
RemoteFeatureFlagControllerGetStateAction;
6151

62-
export type AllowedActions = never;
63-
6452
export type RemoteFeatureFlagControllerStateChangeEvent =
6553
ControllerStateChangeEvent<
6654
typeof controllerName,
@@ -70,14 +58,10 @@ export type RemoteFeatureFlagControllerStateChangeEvent =
7058
export type RemoteFeatureFlagControllerEvents =
7159
RemoteFeatureFlagControllerStateChangeEvent;
7260

73-
export type AllowedEvents = never;
74-
75-
export type RemoteFeatureFlagControllerMessenger = RestrictedMessenger<
61+
export type RemoteFeatureFlagControllerMessenger = Messenger<
7662
typeof controllerName,
77-
RemoteFeatureFlagControllerActions | AllowedActions,
78-
RemoteFeatureFlagControllerEvents | AllowedEvents,
79-
AllowedActions['type'],
80-
AllowedEvents['type']
63+
RemoteFeatureFlagControllerActions,
64+
RemoteFeatureFlagControllerEvents
8165
>;
8266

8367
/**

packages/remote-feature-flag-controller/tsconfig.build.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
"outDir": "./dist",
66
"rootDir": "./src"
77
},
8-
"references": [{ "path": "../base-controller/tsconfig.build.json" }],
8+
"references": [
9+
{ "path": "../base-controller/tsconfig.build.json" },
10+
{ "path": "../messenger/tsconfig.build.json" }
11+
],
912
"include": ["../../types", "./src"]
1013
}

packages/remote-feature-flag-controller/tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
"compilerOptions": {
44
"baseUrl": "./"
55
},
6-
"references": [{ "path": "../../packages/base-controller" }],
6+
"references": [{ "path": "../base-controller" }, { "path": "../messenger" }],
77
"include": ["../../types", "./src"]
88
}

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4376,6 +4376,7 @@ __metadata:
43764376
"@metamask/auto-changelog": "npm:^3.4.4"
43774377
"@metamask/base-controller": "npm:^8.4.0"
43784378
"@metamask/controller-utils": "npm:^11.14.0"
4379+
"@metamask/messenger": "npm:^0.3.0"
43794380
"@metamask/utils": "npm:^11.8.0"
43804381
"@types/jest": "npm:^27.4.1"
43814382
deepmerge: "npm:^4.2.2"

0 commit comments

Comments
 (0)