Skip to content

Commit dd1859e

Browse files
committed
refactor: migrate RemoteFeatureFlagController to @metamask/messenger
1 parent 7a9e620 commit dd1859e

File tree

7 files changed

+58
-52
lines changed

7 files changed

+58
-52
lines changed

eslint-warning-thresholds.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,8 +338,7 @@
338338
},
339339
"packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts": {
340340
"@typescript-eslint/prefer-readonly": 1,
341-
"jsdoc/check-tag-names": 2,
342-
"prettier/prettier": 1
341+
"jsdoc/check-tag-names": 2
343342
},
344343
"packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.ts": {
345344
"jsdoc/tag-lines": 2

packages/remote-feature-flag-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` ([#6502](https://github.com/MetaMask/core/pull/6502))
13+
- Previously, `RemoteFeatureFlagController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.
1214
- Bump `@metamask/base-controller` from `^8.0.1` to `^8.3.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))
1315
- Bump `@metamask/controller-utils` from `^11.11.0` to `^11.12.0` ([#6303](https://github.com/MetaMask/core/pull/6303))
1416

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.3.0",
5151
"@metamask/controller-utils": "^11.12.0",
52+
"@metamask/messenger": "^0.2.0",
5253
"@metamask/utils": "^11.4.2",
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: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
1-
import { Messenger } from '@metamask/base-controller';
1+
import {
2+
Messenger,
3+
MOCK_ANY_NAMESPACE,
4+
type MessengerActions,
5+
type MessengerEvents,
6+
type MockAnyNamespace,
7+
} from '@metamask/messenger';
28

39
import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service';
410
import {
511
RemoteFeatureFlagController,
6-
controllerName,
712
DEFAULT_CACHE_DURATION,
813
getDefaultRemoteFeatureFlagControllerState,
914
} from './remote-feature-flag-controller';
15+
import type { RemoteFeatureFlagControllerMessenger } from './remote-feature-flag-controller';
1016
import type {
11-
RemoteFeatureFlagControllerActions,
12-
RemoteFeatureFlagControllerMessenger,
17+
FeatureFlags,
1318
RemoteFeatureFlagControllerState,
14-
RemoteFeatureFlagControllerStateChangeEvent,
15-
} from './remote-feature-flag-controller';
16-
import type { FeatureFlags } from './remote-feature-flag-controller-types';
19+
} from './remote-feature-flag-controller-types';
20+
21+
const controllerName = 'RemoteFeatureFlagController';
1722

1823
const MOCK_FLAGS: FeatureFlags = {
1924
feature1: true,
@@ -343,31 +348,44 @@ describe('RemoteFeatureFlagController', () => {
343348
});
344349
});
345350

346-
type RootAction = RemoteFeatureFlagControllerActions;
347-
type RootEvent = RemoteFeatureFlagControllerStateChangeEvent;
351+
type AllRemoteFeatureFlagControllerActions =
352+
MessengerActions<RemoteFeatureFlagControllerMessenger>;
353+
354+
type AllRemoteFeatureFlagControllerEvents =
355+
MessengerEvents<RemoteFeatureFlagControllerMessenger>;
356+
357+
type RootMessenger = Messenger<
358+
MockAnyNamespace,
359+
AllRemoteFeatureFlagControllerActions,
360+
AllRemoteFeatureFlagControllerEvents
361+
>;
348362

349363
/**
350364
* Creates and returns a root messenger for testing
351365
*
352366
* @returns A messenger instance
353367
*/
354-
function getRootMessenger(): Messenger<RootAction, RootEvent> {
355-
return new Messenger<RootAction, RootEvent>();
368+
function getRootMessenger(): RootMessenger {
369+
return new Messenger({
370+
namespace: MOCK_ANY_NAMESPACE,
371+
});
356372
}
357373

358374
/**
359-
* Creates a restricted messenger for testing
375+
* Creates a messenger for the RemoteFeatureFlagController
360376
*
361-
* @param rootMessenger - The root messenger to restrict
362-
* @returns A restricted messenger instance
377+
* @returns A messenger instance
363378
*/
364-
function getMessenger(
365-
rootMessenger = getRootMessenger(),
366-
): RemoteFeatureFlagControllerMessenger {
367-
return rootMessenger.getRestricted({
368-
name: controllerName,
369-
allowedActions: [],
370-
allowedEvents: [],
379+
function getMessenger(): RemoteFeatureFlagControllerMessenger {
380+
const rootMessenger = getRootMessenger();
381+
return new Messenger<
382+
typeof controllerName,
383+
AllRemoteFeatureFlagControllerActions,
384+
AllRemoteFeatureFlagControllerEvents,
385+
RootMessenger
386+
>({
387+
namespace: controllerName,
388+
parent: rootMessenger,
371389
});
372390
}
373391

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

Lines changed: 13 additions & 28 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,29 +19,18 @@ 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: { persist: true, anonymous: true },
3329
cacheTimestamp: { persist: true, anonymous: true },
3430
};
3531

3632
// === MESSENGER ===
3733

38-
export type RemoteFeatureFlagControllerGetStateAction =
39-
ControllerGetStateAction<
40-
typeof controllerName,
41-
RemoteFeatureFlagControllerState
42-
>;
43-
4434
export type RemoteFeatureFlagControllerGetRemoteFeatureFlagAction = {
4535
type: `${typeof controllerName}:updateRemoteFeatureFlags`;
4636
handler: RemoteFeatureFlagController['updateRemoteFeatureFlags'];
@@ -49,8 +39,6 @@ export type RemoteFeatureFlagControllerGetRemoteFeatureFlagAction = {
4939
export type RemoteFeatureFlagControllerActions =
5040
RemoteFeatureFlagControllerGetStateAction;
5141

52-
export type AllowedActions = never;
53-
5442
export type RemoteFeatureFlagControllerStateChangeEvent =
5543
ControllerStateChangeEvent<
5644
typeof controllerName,
@@ -60,14 +48,10 @@ export type RemoteFeatureFlagControllerStateChangeEvent =
6048
export type RemoteFeatureFlagControllerEvents =
6149
RemoteFeatureFlagControllerStateChangeEvent;
6250

63-
export type AllowedEvents = never;
64-
65-
export type RemoteFeatureFlagControllerMessenger = RestrictedMessenger<
51+
export type RemoteFeatureFlagControllerMessenger = Messenger<
6652
typeof controllerName,
67-
RemoteFeatureFlagControllerActions | AllowedActions,
68-
RemoteFeatureFlagControllerEvents | AllowedEvents,
69-
AllowedActions['type'],
70-
AllowedEvents['type']
53+
RemoteFeatureFlagControllerActions,
54+
RemoteFeatureFlagControllerEvents
7155
>;
7256

7357
/**
@@ -192,7 +176,8 @@ export class RemoteFeatureFlagController extends BaseController<
192176
* @private
193177
*/
194178
async #updateCache(remoteFeatureFlags: FeatureFlags) {
195-
const processedRemoteFeatureFlags = await this.#processRemoteFeatureFlags(remoteFeatureFlags);
179+
const processedRemoteFeatureFlags =
180+
await this.#processRemoteFeatureFlags(remoteFeatureFlags);
196181
this.update(() => {
197182
return {
198183
remoteFeatureFlags: processedRemoteFeatureFlags,

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4336,6 +4336,7 @@ __metadata:
43364336
"@metamask/auto-changelog": "npm:^3.4.4"
43374337
"@metamask/base-controller": "npm:^8.3.0"
43384338
"@metamask/controller-utils": "npm:^11.12.0"
4339+
"@metamask/messenger": "npm:^0.2.0"
43394340
"@metamask/utils": "npm:^11.4.2"
43404341
"@types/jest": "npm:^27.4.1"
43414342
deepmerge: "npm:^4.2.2"

0 commit comments

Comments
 (0)