diff --git a/packages/gator-permissions-controller/CHANGELOG.md b/packages/gator-permissions-controller/CHANGELOG.md index f63a62b8c8f..779ca693f2b 100644 --- a/packages/gator-permissions-controller/CHANGELOG.md +++ b/packages/gator-permissions-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add two new controller state metadata properties: `includeInStateLogs` and `usedInUi` ([#6552](https://github.com/MetaMask/core/pull/6552)) + ## [0.1.0] ### Added diff --git a/packages/gator-permissions-controller/src/GatorPermissionContoller.test.ts b/packages/gator-permissions-controller/src/GatorPermissionContoller.test.ts index 72219103a52..53fdf741312 100644 --- a/packages/gator-permissions-controller/src/GatorPermissionContoller.test.ts +++ b/packages/gator-permissions-controller/src/GatorPermissionContoller.test.ts @@ -1,5 +1,5 @@ import type { AccountSigner } from '@metamask/7715-permission-types'; -import { Messenger } from '@metamask/base-controller'; +import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller'; import type { HandleSnapRequest, HasSnap } from '@metamask/snaps-controllers'; import type { SnapId } from '@metamask/snaps-sdk'; import type { Hex } from '@metamask/utils'; @@ -379,6 +379,80 @@ describe('GatorPermissionsController', () => { expect(controller.state.isGatorPermissionsEnabled).toBe(true); }); }); + + describe('metadata', () => { + it('includes expected state in debug snapshots', () => { + const controller = new GatorPermissionsController({ + messenger: getMessenger(), + }); + + expect( + deriveStateFromMetadata( + controller.state, + controller.metadata, + 'anonymous', + ), + ).toMatchInlineSnapshot(`Object {}`); + }); + + it('includes expected state in state logs', () => { + const controller = new GatorPermissionsController({ + messenger: getMessenger(), + }); + + expect( + deriveStateFromMetadata( + controller.state, + controller.metadata, + 'includeInStateLogs', + ), + ).toMatchInlineSnapshot(` + Object { + "gatorPermissionsMapSerialized": "{\\"native-token-stream\\":{},\\"native-token-periodic\\":{},\\"erc20-token-stream\\":{},\\"erc20-token-periodic\\":{},\\"other\\":{}}", + "gatorPermissionsProviderSnapId": "@metamask/gator-permissions-snap", + "isFetchingGatorPermissions": false, + "isGatorPermissionsEnabled": false, + } + `); + }); + + it('persists expected state', () => { + const controller = new GatorPermissionsController({ + messenger: getMessenger(), + }); + + expect( + deriveStateFromMetadata( + controller.state, + controller.metadata, + 'persist', + ), + ).toMatchInlineSnapshot(` + Object { + "gatorPermissionsMapSerialized": "{\\"native-token-stream\\":{},\\"native-token-periodic\\":{},\\"erc20-token-stream\\":{},\\"erc20-token-periodic\\":{},\\"other\\":{}}", + "isGatorPermissionsEnabled": false, + } + `); + }); + + it('exposes expected state to UI', () => { + const controller = new GatorPermissionsController({ + messenger: getMessenger(), + }); + + expect( + deriveStateFromMetadata( + controller.state, + controller.metadata, + 'usedInUi', + ), + ).toMatchInlineSnapshot(` + Object { + "gatorPermissionsMapSerialized": "{\\"native-token-stream\\":{},\\"native-token-periodic\\":{},\\"erc20-token-stream\\":{},\\"erc20-token-periodic\\":{},\\"other\\":{}}", + } + `); + }); + }); }); /** diff --git a/packages/gator-permissions-controller/src/GatorPermissionsController.ts b/packages/gator-permissions-controller/src/GatorPermissionsController.ts index d3139c8863c..18bb9090e54 100644 --- a/packages/gator-permissions-controller/src/GatorPermissionsController.ts +++ b/packages/gator-permissions-controller/src/GatorPermissionsController.ts @@ -76,20 +76,28 @@ export type GatorPermissionsControllerState = { const gatorPermissionsControllerMetadata = { isGatorPermissionsEnabled: { + includeInStateLogs: true, persist: true, anonymous: false, + usedInUi: false, }, gatorPermissionsMapSerialized: { + includeInStateLogs: true, persist: true, anonymous: false, + usedInUi: true, }, isFetchingGatorPermissions: { + includeInStateLogs: true, persist: false, anonymous: false, + usedInUi: false, }, gatorPermissionsProviderSnapId: { + includeInStateLogs: true, persist: false, anonymous: false, + usedInUi: false, }, } satisfies StateMetadata;