diff --git a/README.md b/README.md index 4eab983a1dc..5d3f9213f06 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,7 @@ linkStyle default opacity:0.5 address_book_controller --> base_controller; address_book_controller --> controller_utils; announcement_controller --> base_controller; + announcement_controller --> messenger; app_metadata_controller --> base_controller; approval_controller --> base_controller; assets_controllers --> base_controller; diff --git a/packages/announcement-controller/CHANGELOG.md b/packages/announcement-controller/CHANGELOG.md index 9ab00d3045d..c1f4806792c 100644 --- a/packages/announcement-controller/CHANGELOG.md +++ b/packages/announcement-controller/CHANGELOG.md @@ -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` ([#6384](https://github.com/MetaMask/core/pull/6384)) + - Previously, `AnnouncementController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`. - Bump `@metamask/base-controller` from `^8.0.0` to `^8.4.0` ([#5722](https://github.com/MetaMask/core/pull/5722), [#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)) ## [7.0.3] diff --git a/packages/announcement-controller/package.json b/packages/announcement-controller/package.json index 56d017e30c9..40a36e3b398 100644 --- a/packages/announcement-controller/package.json +++ b/packages/announcement-controller/package.json @@ -47,7 +47,8 @@ "test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch" }, "dependencies": { - "@metamask/base-controller": "^8.4.0" + "@metamask/base-controller": "^8.4.0", + "@metamask/messenger": "^0.3.0" }, "devDependencies": { "@metamask/auto-changelog": "^3.4.4", diff --git a/packages/announcement-controller/src/AnnouncementController.test.ts b/packages/announcement-controller/src/AnnouncementController.test.ts index 32fed68792e..ee36b0ce4e5 100644 --- a/packages/announcement-controller/src/AnnouncementController.test.ts +++ b/packages/announcement-controller/src/AnnouncementController.test.ts @@ -1,4 +1,9 @@ -import { Messenger, deriveStateFromMetadata } from '@metamask/base-controller'; +import { deriveStateFromMetadata } from '@metamask/base-controller/next'; +import { + Messenger, + MOCK_ANY_NAMESPACE, + type MockAnyNamespace, +} from '@metamask/messenger'; import type { AnnouncementControllerState, @@ -16,15 +21,20 @@ const name = 'AnnouncementController'; * * @returns A restricted controller messenger. */ -function getRestrictedMessenger() { +function getMessenger() { const messenger = new Messenger< + MockAnyNamespace, AnnouncementControllerActions, AnnouncementControllerEvents - >(); - return messenger.getRestricted({ - name, - allowedActions: [], - allowedEvents: [], + >({ namespace: MOCK_ANY_NAMESPACE }); + return new Messenger< + typeof name, + AnnouncementControllerActions, + AnnouncementControllerEvents, + typeof messenger + >({ + namespace: name, + parent: messenger, }); } const allAnnouncements: AnnouncementMap = { @@ -89,7 +99,7 @@ const state2: AnnouncementControllerState = { describe('announcement controller', () => { it('should add announcement to state', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), allAnnouncements, }); expect(Object.keys(controller.state.announcements)).toHaveLength(2); @@ -110,7 +120,7 @@ describe('announcement controller', () => { it('should add new announcement to state and a new announcement should be created with isShown as false', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), state: state1, allAnnouncements: allAnnouncements2, }); @@ -123,7 +133,7 @@ describe('announcement controller', () => { describe('resetViewed', () => { it('resets all announcement isShown states to false', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), state: state2, allAnnouncements: allAnnouncements2, }); @@ -142,7 +152,7 @@ describe('announcement controller', () => { describe('update viewed announcements', () => { it('should update isShown status', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), state: state2, allAnnouncements: allAnnouncements2, }); @@ -154,7 +164,7 @@ describe('announcement controller', () => { it('should update isShown of more than one announcement', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), state: state2, allAnnouncements: allAnnouncements2, }); @@ -168,7 +178,7 @@ describe('announcement controller', () => { describe('metadata', () => { it('includes expected state in debug snapshots', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), allAnnouncements, }); @@ -176,7 +186,7 @@ describe('announcement controller', () => { deriveStateFromMetadata( controller.state, controller.metadata, - 'anonymous', + 'includeInDebugSnapshot', ), ).toMatchInlineSnapshot(` Object { @@ -198,7 +208,7 @@ describe('announcement controller', () => { it('includes expected state in state logs', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), allAnnouncements, }); @@ -228,7 +238,7 @@ describe('announcement controller', () => { it('persists expected state', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), allAnnouncements, }); @@ -258,7 +268,7 @@ describe('announcement controller', () => { it('exposes expected state to UI', () => { const controller = new AnnouncementController({ - messenger: getRestrictedMessenger(), + messenger: getMessenger(), allAnnouncements, }); diff --git a/packages/announcement-controller/src/AnnouncementController.ts b/packages/announcement-controller/src/AnnouncementController.ts index 66f9858031a..f98cca82034 100644 --- a/packages/announcement-controller/src/AnnouncementController.ts +++ b/packages/announcement-controller/src/AnnouncementController.ts @@ -1,10 +1,10 @@ import type { ControllerGetStateAction, ControllerStateChangeEvent, - RestrictedMessenger, StateMetadata, -} from '@metamask/base-controller'; -import { BaseController } from '@metamask/base-controller'; +} from '@metamask/base-controller/next'; +import { BaseController } from '@metamask/base-controller/next'; +import type { Messenger } from '@metamask/messenger'; type ViewedAnnouncement = { [id: number]: boolean; @@ -64,17 +64,15 @@ const metadata: StateMetadata = { announcements: { includeInStateLogs: true, persist: true, - anonymous: true, + includeInDebugSnapshot: true, usedInUi: true, }, }; -export type AnnouncementControllerMessenger = RestrictedMessenger< +export type AnnouncementControllerMessenger = Messenger< typeof controllerName, AnnouncementControllerActions, - AnnouncementControllerEvents, - never, - never + AnnouncementControllerEvents >; /** diff --git a/packages/announcement-controller/tsconfig.build.json b/packages/announcement-controller/tsconfig.build.json index e5fd7422b9a..931c4d6594b 100644 --- a/packages/announcement-controller/tsconfig.build.json +++ b/packages/announcement-controller/tsconfig.build.json @@ -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"] } diff --git a/packages/announcement-controller/tsconfig.json b/packages/announcement-controller/tsconfig.json index 34354c4b09d..8af2380112d 100644 --- a/packages/announcement-controller/tsconfig.json +++ b/packages/announcement-controller/tsconfig.json @@ -3,6 +3,9 @@ "compilerOptions": { "baseUrl": "./" }, - "references": [{ "path": "../base-controller" }], + "references": [ + { "path": "../base-controller" }, + { "path": "../messenger" } + ], "include": ["../../types", "./src"] } diff --git a/yarn.lock b/yarn.lock index 02bdce79ee5..d220931f724 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2520,6 +2520,7 @@ __metadata: dependencies: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.4.0" + "@metamask/messenger": "npm:^0.3.0" "@types/jest": "npm:^27.4.1" deepmerge: "npm:^4.2.2" jest: "npm:^27.5.1"