Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions packages/remote-feature-flag-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6502](https://github.com/MetaMask/core/pull/6502))
- Previously, `RemoteFeatureFlagController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`.

## [1.9.0]

### Added
Expand Down
1 change: 1 addition & 0 deletions packages/remote-feature-flag-controller/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
"dependencies": {
"@metamask/base-controller": "^8.4.1",
"@metamask/controller-utils": "^11.14.1",
"@metamask/messenger": "^0.3.0",
"@metamask/utils": "^11.8.1",
"uuid": "^8.3.2"
},
Expand Down
6 changes: 2 additions & 4 deletions packages/remote-feature-flag-controller/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export { RemoteFeatureFlagController } from './remote-feature-flag-controller';
export type {
RemoteFeatureFlagControllerState,
RemoteFeatureFlagControllerMessenger,
RemoteFeatureFlagControllerActions,
RemoteFeatureFlagControllerGetStateAction,
Expand All @@ -13,9 +14,6 @@ export {
EnvironmentType,
} from './remote-feature-flag-controller-types';

export type {
RemoteFeatureFlagControllerState,
FeatureFlags,
} from './remote-feature-flag-controller-types';
export type { FeatureFlags } from './remote-feature-flag-controller-types';
export { ClientConfigApiService } from './client-config-api-service/client-config-api-service';
export { generateDeterministicRandomNumber } from './utils/user-segmentation-utils';
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,3 @@ export type ServiceResponse = {
remoteFeatureFlags: FeatureFlags;
cacheTimestamp: number | null;
};

/**
* Describes the shape of the state object for the {@link RemoteFeatureFlagController}.
*/
export type RemoteFeatureFlagControllerState = {
/**
* The collection of feature flags and their respective values, which can be objects.
*/
remoteFeatureFlags: FeatureFlags;
/**
* The timestamp of the last successful feature flag cache.
*/
cacheTimestamp: number;
};
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller';
import { deriveStateFromMetadata } from '@metamask/base-controller/next';
import {
Messenger,
MOCK_ANY_NAMESPACE,
type MessengerActions,
type MessengerEvents,
type MockAnyNamespace,
} from '@metamask/messenger';

import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service';
import {
RemoteFeatureFlagController,
controllerName,
DEFAULT_CACHE_DURATION,
getDefaultRemoteFeatureFlagControllerState,
} from './remote-feature-flag-controller';
import type {
RemoteFeatureFlagControllerActions,
RemoteFeatureFlagControllerMessenger,
RemoteFeatureFlagControllerState,
RemoteFeatureFlagControllerStateChangeEvent,
} from './remote-feature-flag-controller';
import type { FeatureFlags } from './remote-feature-flag-controller-types';

const controllerName = 'RemoteFeatureFlagController';

const MOCK_FLAGS: FeatureFlags = {
feature1: true,
feature2: { chrome: '<109' },
Expand Down Expand Up @@ -350,7 +356,7 @@ describe('RemoteFeatureFlagController', () => {
deriveStateFromMetadata(
controller.state,
controller.metadata,
'anonymous',
'includeInDebugSnapshot',
),
).toMatchInlineSnapshot(`
Object {
Expand Down Expand Up @@ -412,31 +418,44 @@ describe('RemoteFeatureFlagController', () => {
});
});

type RootAction = RemoteFeatureFlagControllerActions;
type RootEvent = RemoteFeatureFlagControllerStateChangeEvent;
type AllRemoteFeatureFlagControllerActions =
MessengerActions<RemoteFeatureFlagControllerMessenger>;

type AllRemoteFeatureFlagControllerEvents =
MessengerEvents<RemoteFeatureFlagControllerMessenger>;

type RootMessenger = Messenger<
MockAnyNamespace,
AllRemoteFeatureFlagControllerActions,
AllRemoteFeatureFlagControllerEvents
>;

/**
* Creates and returns a root messenger for testing
*
* @returns A messenger instance
*/
function getRootMessenger(): Messenger<RootAction, RootEvent> {
return new Messenger<RootAction, RootEvent>();
function getRootMessenger(): RootMessenger {
return new Messenger({
namespace: MOCK_ANY_NAMESPACE,
});
}

/**
* Creates a restricted messenger for testing
* Creates a messenger for the RemoteFeatureFlagController
*
* @param rootMessenger - The root messenger to restrict
* @returns A restricted messenger instance
* @returns A messenger instance
*/
function getMessenger(
rootMessenger = getRootMessenger(),
): RemoteFeatureFlagControllerMessenger {
return rootMessenger.getRestricted({
name: controllerName,
allowedActions: [],
allowedEvents: [],
function getMessenger(): RemoteFeatureFlagControllerMessenger {
const rootMessenger = getRootMessenger();
return new Messenger<
typeof controllerName,
AllRemoteFeatureFlagControllerActions,
AllRemoteFeatureFlagControllerEvents,
RootMessenger
>({
namespace: controllerName,
parent: rootMessenger,
});
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { BaseController } from '@metamask/base-controller';
import type {
ControllerGetStateAction,
ControllerStateChangeEvent,
RestrictedMessenger,
} from '@metamask/base-controller';
import {
BaseController,
type ControllerGetStateAction,
type ControllerStateChangeEvent,
} from '@metamask/base-controller/next';
import type { Messenger } from '@metamask/messenger';

import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service';
import type {
Expand All @@ -18,7 +18,7 @@ import {

// === GENERAL ===

export const controllerName = 'RemoteFeatureFlagController';
const controllerName = 'RemoteFeatureFlagController';
export const DEFAULT_CACHE_DURATION = 24 * 60 * 60 * 1000; // 1 day

// === STATE ===
Expand All @@ -32,13 +32,13 @@ const remoteFeatureFlagControllerMetadata = {
remoteFeatureFlags: {
includeInStateLogs: true,
persist: true,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
cacheTimestamp: {
includeInStateLogs: true,
persist: true,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: false,
},
};
Expand All @@ -63,8 +63,6 @@ export type RemoteFeatureFlagControllerActions =
| RemoteFeatureFlagControllerGetStateAction
| RemoteFeatureFlagControllerUpdateRemoteFeatureFlagsAction;

export type AllowedActions = never;

export type RemoteFeatureFlagControllerStateChangeEvent =
ControllerStateChangeEvent<
typeof controllerName,
Expand All @@ -74,14 +72,10 @@ export type RemoteFeatureFlagControllerStateChangeEvent =
export type RemoteFeatureFlagControllerEvents =
RemoteFeatureFlagControllerStateChangeEvent;

export type AllowedEvents = never;

export type RemoteFeatureFlagControllerMessenger = RestrictedMessenger<
export type RemoteFeatureFlagControllerMessenger = Messenger<
typeof controllerName,
RemoteFeatureFlagControllerActions | AllowedActions,
RemoteFeatureFlagControllerEvents | AllowedEvents,
AllowedActions['type'],
AllowedEvents['type']
RemoteFeatureFlagControllerActions,
RemoteFeatureFlagControllerEvents
>;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
"outDir": "./dist",
"rootDir": "./src"
},
"references": [{ "path": "../base-controller/tsconfig.build.json" }],
"references": [
{ "path": "../base-controller/tsconfig.build.json" },
{ "path": "../messenger/tsconfig.build.json" }
],
"include": ["../../types", "./src"]
}
2 changes: 1 addition & 1 deletion packages/remote-feature-flag-controller/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
"compilerOptions": {
"baseUrl": "./"
},
"references": [{ "path": "../../packages/base-controller" }],
"references": [{ "path": "../base-controller" }, { "path": "../messenger" }],
"include": ["../../types", "./src"]
}
1 change: 1 addition & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4571,6 +4571,7 @@ __metadata:
"@metamask/auto-changelog": "npm:^3.4.4"
"@metamask/base-controller": "npm:^8.4.1"
"@metamask/controller-utils": "npm:^11.14.1"
"@metamask/messenger": "npm:^0.3.0"
"@metamask/utils": "npm:^11.8.1"
"@types/jest": "npm:^27.4.1"
deepmerge: "npm:^4.2.2"
Expand Down
Loading