Skip to content

Commit 11476e1

Browse files
authored
feat: Add new metadata properties to RemoteFeatureFlagController (#6574)
## Explanation The new metadata properties `includeInStateLogs` and `usedInUi` have been added to the `RemoteFeatureFlagController`. ## References Relates to #6516 ## Checklist - [x] I've updated the test suite for new or updated code as appropriate - [x] I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate - [x] I've communicated my changes to consumers by [updating changelogs for packages I've changed](https://github.com/MetaMask/core/tree/main/docs/contributing.md#updating-changelogs), highlighting breaking changes as necessary - [x] I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes
1 parent 615f87a commit 11476e1

File tree

4 files changed

+89
-6
lines changed

4 files changed

+89
-6
lines changed

eslint-warning-thresholds.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,8 +334,7 @@
334334
},
335335
"packages/remote-feature-flag-controller/src/remote-feature-flag-controller.ts": {
336336
"@typescript-eslint/prefer-readonly": 1,
337-
"jsdoc/check-tag-names": 2,
338-
"prettier/prettier": 1
337+
"jsdoc/check-tag-names": 2
339338
},
340339
"packages/remote-feature-flag-controller/src/utils/user-segmentation-utils.ts": {
341340
"jsdoc/tag-lines": 2

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

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

88
## [Unreleased]
99

10+
### Added
11+
12+
- Add two new controller state metadata properties: `includeInStateLogs` and `usedInUi` ([#6574](https://github.com/MetaMask/core/pull/6574))
13+
1014
### Changed
1115

1216
- 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))

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

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Messenger } from '@metamask/base-controller';
1+
import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller';
22

33
import type { AbstractClientConfigApiService } from './client-config-api-service/abstract-client-config-api-service';
44
import {
@@ -341,6 +341,75 @@ describe('RemoteFeatureFlagController', () => {
341341
});
342342
});
343343
});
344+
345+
describe('metadata', () => {
346+
it('includes expected state in debug snapshots', () => {
347+
const controller = createController();
348+
349+
expect(
350+
deriveStateFromMetadata(
351+
controller.state,
352+
controller.metadata,
353+
'anonymous',
354+
),
355+
).toMatchInlineSnapshot(`
356+
Object {
357+
"cacheTimestamp": 0,
358+
"remoteFeatureFlags": Object {},
359+
}
360+
`);
361+
});
362+
363+
it('includes expected state in state logs', () => {
364+
const controller = createController();
365+
366+
expect(
367+
deriveStateFromMetadata(
368+
controller.state,
369+
controller.metadata,
370+
'includeInStateLogs',
371+
),
372+
).toMatchInlineSnapshot(`
373+
Object {
374+
"cacheTimestamp": 0,
375+
"remoteFeatureFlags": Object {},
376+
}
377+
`);
378+
});
379+
380+
it('persists expected state', () => {
381+
const controller = createController();
382+
383+
expect(
384+
deriveStateFromMetadata(
385+
controller.state,
386+
controller.metadata,
387+
'persist',
388+
),
389+
).toMatchInlineSnapshot(`
390+
Object {
391+
"cacheTimestamp": 0,
392+
"remoteFeatureFlags": Object {},
393+
}
394+
`);
395+
});
396+
397+
it('exposes expected state to UI', () => {
398+
const controller = createController();
399+
400+
expect(
401+
deriveStateFromMetadata(
402+
controller.state,
403+
controller.metadata,
404+
'usedInUi',
405+
),
406+
).toMatchInlineSnapshot(`
407+
Object {
408+
"remoteFeatureFlags": Object {},
409+
}
410+
`);
411+
});
412+
});
344413
});
345414

346415
type RootAction = RemoteFeatureFlagControllerActions;

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,18 @@ export type RemoteFeatureFlagControllerState = {
2929
};
3030

3131
const remoteFeatureFlagControllerMetadata = {
32-
remoteFeatureFlags: { persist: true, anonymous: true },
33-
cacheTimestamp: { persist: true, anonymous: true },
32+
remoteFeatureFlags: {
33+
includeInStateLogs: true,
34+
persist: true,
35+
anonymous: true,
36+
usedInUi: true,
37+
},
38+
cacheTimestamp: {
39+
includeInStateLogs: true,
40+
persist: true,
41+
anonymous: true,
42+
usedInUi: false,
43+
},
3444
};
3545

3646
// === MESSENGER ===
@@ -192,7 +202,8 @@ export class RemoteFeatureFlagController extends BaseController<
192202
* @private
193203
*/
194204
async #updateCache(remoteFeatureFlags: FeatureFlags) {
195-
const processedRemoteFeatureFlags = await this.#processRemoteFeatureFlags(remoteFeatureFlags);
205+
const processedRemoteFeatureFlags =
206+
await this.#processRemoteFeatureFlags(remoteFeatureFlags);
196207
this.update(() => {
197208
return {
198209
remoteFeatureFlags: processedRemoteFeatureFlags,

0 commit comments

Comments
 (0)