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
3 changes: 1 addition & 2 deletions eslint-warning-thresholds.json
Original file line number Diff line number Diff line change
Expand Up @@ -338,8 +338,7 @@
},
"packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts": {
"@typescript-eslint/prefer-readonly": 1,
"jsdoc/check-tag-names": 2,
"prettier/prettier": 1
"jsdoc/check-tag-names": 2
},
"packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.ts": {
"jsdoc/tag-lines": 2
Expand Down
2 changes: 2 additions & 0 deletions packages/remote-feature-flag-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### 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`.
- 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))
- Bump `@metamask/controller-utils` from `^11.11.0` to `^11.12.0` ([#6303](https://github.com/MetaMask/core/pull/6303))

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.3.0",
"@metamask/controller-utils": "^11.12.0",
"@metamask/messenger": "^0.2.0",
"@metamask/utils": "^11.4.2",
"uuid": "^8.3.2"
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { ControllerGetStateAction } from '@metamask/base-controller';
import type { ControllerGetStateAction } from '@metamask/base-controller/next';
import type { Json } from '@metamask/utils';

// Define accepted values for client, distribution, and environment
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
import { Messenger } from '@metamask/base-controller';
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 { RemoteFeatureFlagControllerMessenger } from './remote-feature-flag-controller';
import type {
RemoteFeatureFlagControllerActions,
RemoteFeatureFlagControllerMessenger,
FeatureFlags,
RemoteFeatureFlagControllerState,
RemoteFeatureFlagControllerStateChangeEvent,
} from './remote-feature-flag-controller';
import type { FeatureFlags } from './remote-feature-flag-controller-types';
} from './remote-feature-flag-controller-types';

const controllerName = 'RemoteFeatureFlagController';

const MOCK_FLAGS: FeatureFlags = {
feature1: true,
Expand Down Expand Up @@ -343,31 +348,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,15 +1,16 @@
import type {
ControllerGetStateAction,
ControllerStateChangeEvent,
RestrictedMessenger,
} from '@metamask/base-controller';
import { BaseController } from '@metamask/base-controller';
import {
BaseController,
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 {
FeatureFlags,
ServiceResponse,
FeatureFlagScopeValue,
RemoteFeatureFlagControllerState,
RemoteFeatureFlagControllerGetStateAction,
} from './remote-feature-flag-controller-types';
import {
generateDeterministicRandomNumber,
Expand All @@ -18,29 +19,18 @@ import {

// === GENERAL ===

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

// === STATE ===

export type RemoteFeatureFlagControllerState = {
remoteFeatureFlags: FeatureFlags;
cacheTimestamp: number;
};

const remoteFeatureFlagControllerMetadata = {
remoteFeatureFlags: { persist: true, anonymous: true },
cacheTimestamp: { persist: true, anonymous: true },
};

// === MESSENGER ===

export type RemoteFeatureFlagControllerGetStateAction =
ControllerGetStateAction<
typeof controllerName,
RemoteFeatureFlagControllerState
>;

export type RemoteFeatureFlagControllerGetRemoteFeatureFlagAction = {
type: `${typeof controllerName}:updateRemoteFeatureFlags`;
handler: RemoteFeatureFlagController['updateRemoteFeatureFlags'];
Expand All @@ -49,8 +39,6 @@ export type RemoteFeatureFlagControllerGetRemoteFeatureFlagAction = {
export type RemoteFeatureFlagControllerActions =
RemoteFeatureFlagControllerGetStateAction;

export type AllowedActions = never;

export type RemoteFeatureFlagControllerStateChangeEvent =
ControllerStateChangeEvent<
typeof controllerName,
Expand All @@ -60,14 +48,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 Expand Up @@ -192,7 +176,8 @@ export class RemoteFeatureFlagController extends BaseController<
* @private
*/
async #updateCache(remoteFeatureFlags: FeatureFlags) {
const processedRemoteFeatureFlags = await this.#processRemoteFeatureFlags(remoteFeatureFlags);
const processedRemoteFeatureFlags =
await this.#processRemoteFeatureFlags(remoteFeatureFlags);
this.update(() => {
return {
remoteFeatureFlags: processedRemoteFeatureFlags,
Expand Down
1 change: 1 addition & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4336,6 +4336,7 @@ __metadata:
"@metamask/auto-changelog": "npm:^3.4.4"
"@metamask/base-controller": "npm:^8.3.0"
"@metamask/controller-utils": "npm:^11.12.0"
"@metamask/messenger": "npm:^0.2.0"
"@metamask/utils": "npm:^11.4.2"
"@types/jest": "npm:^27.4.1"
deepmerge: "npm:^4.2.2"
Expand Down
Loading