Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
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 @@ -13,6 +13,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/utils` from `^11.4.2` to `^11.8.1` ([#6588](https://github.com/MetaMask/core/pull/6588), [#6708](https://github.com/MetaMask/core/pull/6708))
- 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))
- 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))
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.0",
"@metamask/controller-utils": "^11.14.0",
"@metamask/messenger": "^0.3.0",
"@metamask/utils": "^11.8.1",
"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,25 @@
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 { 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 @@ -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,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,39 +19,28 @@ 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: {
includeInStateLogs: true,
persist: true,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
cacheTimestamp: {
includeInStateLogs: true,
persist: true,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: false,
},
};

// === MESSENGER ===

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

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

export type AllowedActions = never;

export type RemoteFeatureFlagControllerStateChangeEvent =
ControllerStateChangeEvent<
typeof controllerName,
Expand All @@ -70,14 +58,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 @@ -4378,6 +4378,7 @@ __metadata:
"@metamask/auto-changelog": "npm:^3.4.4"
"@metamask/base-controller": "npm:^8.4.0"
"@metamask/controller-utils": "npm:^11.14.0"
"@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