diff --git a/README.md b/README.md index 0b377cff988..2a5a8012e74 100644 --- a/README.md +++ b/README.md @@ -216,6 +216,7 @@ linkStyle default opacity:0.5 earn_controller --> transaction_controller; eip_5792_middleware --> transaction_controller; eip_5792_middleware --> keyring_controller; + eip_7702_internal_rpc_middleware --> controller_utils; eip1193_permission_middleware --> chain_agnostic_permission; eip1193_permission_middleware --> controller_utils; eip1193_permission_middleware --> json_rpc_engine; @@ -307,6 +308,7 @@ linkStyle default opacity:0.5 seedless_onboarding_controller --> keyring_controller; selected_network_controller --> base_controller; selected_network_controller --> json_rpc_engine; + selected_network_controller --> messenger; selected_network_controller --> network_controller; selected_network_controller --> permission_controller; shield_controller --> base_controller; diff --git a/packages/selected-network-controller/CHANGELOG.md b/packages/selected-network-controller/CHANGELOG.md index d257bc45259..ef8e330cad0 100644 --- a/packages/selected-network-controller/CHANGELOG.md +++ b/packages/selected-network-controller/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- **BREAKING:** Use new `Messenger` from `@metamask/messenger` ([#6500](https://github.com/MetaMask/core/pull/6500)) + - Previously, `SelectedNetworkController` accepted a `RestrictedMessenger` instance from `@metamask/base-controller`. +- **BREAKING:** Metadata property `anonymous` renamed to `includeInDebugSnapshot` ([#6500](https://github.com/MetaMask/core/pull/6500)) + ## [24.0.2] ### Changed diff --git a/packages/selected-network-controller/package.json b/packages/selected-network-controller/package.json index 962ef749c81..8692978653f 100644 --- a/packages/selected-network-controller/package.json +++ b/packages/selected-network-controller/package.json @@ -49,6 +49,7 @@ "dependencies": { "@metamask/base-controller": "^8.4.2", "@metamask/json-rpc-engine": "^10.1.1", + "@metamask/messenger": "^0.3.0", "@metamask/swappable-obj-proxy": "^2.3.0", "@metamask/utils": "^11.8.1" }, diff --git a/packages/selected-network-controller/src/SelectedNetworkController.ts b/packages/selected-network-controller/src/SelectedNetworkController.ts index 0cf0273eea7..d95b1af3b58 100644 --- a/packages/selected-network-controller/src/SelectedNetworkController.ts +++ b/packages/selected-network-controller/src/SelectedNetworkController.ts @@ -1,5 +1,9 @@ -import type { RestrictedMessenger } from '@metamask/base-controller'; -import { BaseController } from '@metamask/base-controller'; +import { + BaseController, + type ControllerGetStateAction, + type ControllerStateChangeEvent, +} from '@metamask/base-controller/next'; +import type { Messenger } from '@metamask/messenger'; import type { BlockTrackerProxy, NetworkClientId, @@ -16,15 +20,14 @@ import type { } from '@metamask/permission-controller'; import { createEventEmitterProxy } from '@metamask/swappable-obj-proxy'; import type { Hex } from '@metamask/utils'; -import type { Patch } from 'immer'; -export const controllerName = 'SelectedNetworkController'; +const controllerName = 'SelectedNetworkController'; const stateMetadata = { domains: { includeInStateLogs: true, persist: true, - anonymous: false, + includeInDebugSnapshot: false, usedInUi: true, }, }; @@ -51,15 +54,17 @@ export type SelectedNetworkControllerState = { domains: Record; }; -export type SelectedNetworkControllerStateChangeEvent = { - type: typeof SelectedNetworkControllerEventTypes.stateChange; - payload: [SelectedNetworkControllerState, Patch[]]; -}; +export type SelectedNetworkControllerStateChangeEvent = + ControllerStateChangeEvent< + typeof controllerName, + SelectedNetworkControllerState + >; -export type SelectedNetworkControllerGetSelectedNetworkStateAction = { - type: typeof SelectedNetworkControllerActionTypes.getState; - handler: () => SelectedNetworkControllerState; -}; +export type SelectedNetworkControllerGetSelectedNetworkStateAction = + ControllerGetStateAction< + typeof controllerName, + SelectedNetworkControllerState + >; export type SelectedNetworkControllerGetNetworkClientIdForDomainAction = { type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain; @@ -76,7 +81,7 @@ export type SelectedNetworkControllerActions = | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction; -export type AllowedActions = +type AllowedActions = | NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetSelectedNetworkClientAction | NetworkControllerGetStateAction @@ -86,16 +91,14 @@ export type AllowedActions = export type SelectedNetworkControllerEvents = SelectedNetworkControllerStateChangeEvent; -export type AllowedEvents = +type AllowedEvents = | NetworkControllerStateChangeEvent | PermissionControllerStateChange; -export type SelectedNetworkControllerMessenger = RestrictedMessenger< +export type SelectedNetworkControllerMessenger = Messenger< typeof controllerName, SelectedNetworkControllerActions | AllowedActions, - SelectedNetworkControllerEvents | AllowedEvents, - AllowedActions['type'], - AllowedEvents['type'] + SelectedNetworkControllerEvents | AllowedEvents >; export type SelectedNetworkControllerOptions = { @@ -123,7 +126,7 @@ export class SelectedNetworkController extends BaseController< * Construct a SelectedNetworkController controller. * * @param options - The controller options. - * @param options.messenger - The restricted messenger for the EncryptionPublicKey controller. + * @param options.messenger - The messenger for the SelectedNetworkController controller. * @param options.state - The controllers initial state. * @param options.domainProxyMap - A map for storing domain-specific proxies that are held in memory only during use. */ @@ -142,18 +145,18 @@ export class SelectedNetworkController extends BaseController< this.#registerMessageHandlers(); // this is fetching all the dapp permissions from the PermissionsController and looking for any domains that are not in domains state in this controller. Then we take any missing domains and add them to state here, setting it with the globally selected networkClientId (fetched from the NetworkController) - this.messagingSystem + this.messenger .call('PermissionController:getSubjectNames') .filter((domain) => this.state.domains[domain] === undefined) .forEach((domain) => this.setNetworkClientIdForDomain( domain, - this.messagingSystem.call('NetworkController:getState') + this.messenger.call('NetworkController:getState') .selectedNetworkClientId, ), ); - this.messagingSystem.subscribe( + this.messenger.subscribe( 'PermissionController:stateChange', (_, patches) => { patches.forEach(({ op, path }) => { @@ -164,7 +167,7 @@ export class SelectedNetworkController extends BaseController< if (op === 'add' && this.state.domains[domain] === undefined) { this.setNetworkClientIdForDomain( domain, - this.messagingSystem.call('NetworkController:getState') + this.messenger.call('NetworkController:getState') .selectedNetworkClientId, ); } else if ( @@ -178,7 +181,7 @@ export class SelectedNetworkController extends BaseController< }, ); - this.messagingSystem.subscribe( + this.messenger.subscribe( 'NetworkController:stateChange', ( { selectedNetworkClientId, networkConfigurationsByChainId }, @@ -242,11 +245,11 @@ export class SelectedNetworkController extends BaseController< } #registerMessageHandlers(): void { - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, this.getNetworkClientIdForDomain.bind(this), ); - this.messagingSystem.registerActionHandler( + this.messenger.registerActionHandler( SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain, this.setNetworkClientIdForDomain.bind(this), ); @@ -256,7 +259,7 @@ export class SelectedNetworkController extends BaseController< domain: Domain, networkClientId: NetworkClientId, ) { - const networkClient = this.messagingSystem.call( + const networkClient = this.messenger.call( 'NetworkController:getNetworkClientById', networkClientId, ); @@ -279,7 +282,7 @@ export class SelectedNetworkController extends BaseController< * @param domain - The domain for which to unset the network client ID. */ #unsetNetworkClientIdForDomain(domain: Domain) { - const globallySelectedNetworkClient = this.messagingSystem.call( + const globallySelectedNetworkClient = this.messenger.call( 'NetworkController:getSelectedNetworkClient', ); const networkProxy = this.#domainProxyMap.get(domain); @@ -297,10 +300,7 @@ export class SelectedNetworkController extends BaseController< } #domainHasPermissions(domain: Domain): boolean { - return this.messagingSystem.call( - 'PermissionController:hasPermissions', - domain, - ); + return this.messenger.call('PermissionController:hasPermissions', domain); } setNetworkClientIdForDomain( @@ -324,7 +324,7 @@ export class SelectedNetworkController extends BaseController< getNetworkClientIdForDomain(domain: Domain): NetworkClientId { const { selectedNetworkClientId: metamaskSelectedNetworkClientId } = - this.messagingSystem.call('NetworkController:getState'); + this.messenger.call('NetworkController:getState'); return this.state.domains[domain] ?? metamaskSelectedNetworkClientId; } @@ -338,7 +338,7 @@ export class SelectedNetworkController extends BaseController< getProviderAndBlockTracker(domain: Domain): NetworkProxy { // If the domain is 'metamask', return the NetworkController's globally selected network client proxy if (domain === METAMASK_DOMAIN) { - const networkClient = this.messagingSystem.call( + const networkClient = this.messenger.call( 'NetworkController:getSelectedNetworkClient', ); if (networkClient === undefined) { @@ -352,12 +352,12 @@ export class SelectedNetworkController extends BaseController< let networkClient; if (this.#domainHasPermissions(domain)) { const networkClientId = this.getNetworkClientIdForDomain(domain); - networkClient = this.messagingSystem.call( + networkClient = this.messenger.call( 'NetworkController:getNetworkClientById', networkClientId, ); } else { - networkClient = this.messagingSystem.call( + networkClient = this.messenger.call( 'NetworkController:getSelectedNetworkClient', ); if (networkClient === undefined) { diff --git a/packages/selected-network-controller/tests/SelectedNetworkController.test.ts b/packages/selected-network-controller/tests/SelectedNetworkController.test.ts index c58c146ed95..4be27de0454 100644 --- a/packages/selected-network-controller/tests/SelectedNetworkController.test.ts +++ b/packages/selected-network-controller/tests/SelectedNetworkController.test.ts @@ -1,4 +1,11 @@ -import { deriveStateFromMetadata, Messenger } 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 ProviderProxy, type BlockTrackerProxy, @@ -10,58 +17,61 @@ import { createEventEmitterProxy } from '@metamask/swappable-obj-proxy'; import type { Hex } from '@metamask/utils'; import type { - AllowedActions, - AllowedEvents, - SelectedNetworkControllerActions, - SelectedNetworkControllerEvents, SelectedNetworkControllerState, Domain, NetworkProxy, + SelectedNetworkControllerMessenger, } from '../src/SelectedNetworkController'; import { METAMASK_DOMAIN, SelectedNetworkController, - controllerName, } from '../src/SelectedNetworkController'; +const controllerName = 'SelectedNetworkController'; + +type AllSelectedNetworkControllerActions = + MessengerActions; + +type AllSelectedNetworkControllerEvents = + MessengerEvents; + +type RootMessenger = Messenger< + MockAnyNamespace, + AllSelectedNetworkControllerActions, + AllSelectedNetworkControllerEvents +>; + /** - * Builds a new instance of the Messenger class for the SelectedNetworkController. + * Constructs the root messenger. * - * @returns A new instance of the Messenger class for the SelectedNetworkController. + * @returns A root messenger. */ -function buildMessenger() { - return new Messenger< - SelectedNetworkControllerActions | AllowedActions, - SelectedNetworkControllerEvents | AllowedEvents - >(); +function getRootMessenger(): RootMessenger { + return new Messenger({ + namespace: MOCK_ANY_NAMESPACE, + }); } /** * Build a restricted messenger for the selected network controller. * * @param options - The options bag. - * @param options.messenger - A messenger. + * @param options.rootMessenger - A messenger. * @param options.getSubjectNames - Permissions controller list of domains with permissions * @returns The network controller restricted messenger. */ function buildSelectedNetworkControllerMessenger({ - messenger = new Messenger< - SelectedNetworkControllerActions | AllowedActions, - SelectedNetworkControllerEvents | AllowedEvents - >(), + rootMessenger, getSubjectNames, }: { - messenger?: Messenger< - SelectedNetworkControllerActions | AllowedActions, - SelectedNetworkControllerEvents | AllowedEvents - >; + rootMessenger: RootMessenger; getSubjectNames?: string[]; -} = {}) { +}) { const mockGetNetworkClientById = jest.fn().mockReturnValue({ provider: { request: jest.fn() }, blockTracker: { getLatestBlock: jest.fn() }, }); - messenger.registerActionHandler( + rootMessenger.registerActionHandler( 'NetworkController:getNetworkClientById', mockGetNetworkClientById, ); @@ -69,45 +79,54 @@ function buildSelectedNetworkControllerMessenger({ provider: { request: jest.fn() }, blockTracker: { getLatestBlock: jest.fn() }, }); - messenger.registerActionHandler( + rootMessenger.registerActionHandler( 'NetworkController:getSelectedNetworkClient', mockGetSelectedNetworkClient, ); const mockNetworkControllerGetState = jest .fn() .mockReturnValue({ selectedNetworkClientId: 'mainnet' }); - messenger.registerActionHandler( + rootMessenger.registerActionHandler( 'NetworkController:getState', mockNetworkControllerGetState, ); const mockHasPermissions = jest.fn().mockReturnValue(true); - messenger.registerActionHandler( + rootMessenger.registerActionHandler( 'PermissionController:hasPermissions', mockHasPermissions, ); const mockGetSubjectNames = jest.fn().mockReturnValue(getSubjectNames); - messenger.registerActionHandler( + rootMessenger.registerActionHandler( 'PermissionController:getSubjectNames', mockGetSubjectNames, ); - const restrictedMessenger = messenger.getRestricted({ - name: controllerName, - allowedActions: [ + const messenger = new Messenger< + typeof controllerName, + AllSelectedNetworkControllerActions, + AllSelectedNetworkControllerEvents, + RootMessenger + >({ + namespace: controllerName, + parent: rootMessenger, + }); + rootMessenger.delegate({ + messenger, + actions: [ 'NetworkController:getNetworkClientById', 'NetworkController:getSelectedNetworkClient', 'NetworkController:getState', 'PermissionController:hasPermissions', 'PermissionController:getSubjectNames', ], - allowedEvents: [ + events: [ 'NetworkController:stateChange', 'PermissionController:stateChange', ], }); return { - restrictedMessenger, + messenger, mockGetNetworkClientById, mockGetSelectedNetworkClient, mockNetworkControllerGetState, @@ -161,21 +180,22 @@ const setup = ({ } return mockProviderProxy; }); - const messenger = buildMessenger(); - const { restrictedMessenger, ...mockMessengerActions } = + const rootMessenger = getRootMessenger(); + const { messenger, ...mockMessengerActions } = buildSelectedNetworkControllerMessenger({ - messenger, + rootMessenger, getSubjectNames, }); const controller = new SelectedNetworkController({ - messenger: restrictedMessenger, + messenger, state, domainProxyMap, }); return { controller, + rootMessenger, messenger, mockProviderProxy, mockBlockTrackerProxy, @@ -247,7 +267,7 @@ describe('SelectedNetworkController', () => { const deleteNetwork = ( chainId: Hex, networkControllerState: NetworkState, - messenger: ReturnType, + messenger: RootMessenger, mockNetworkControllerGetState: jest.Mock, ) => { delete networkControllerState.networkConfigurationsByChainId[chainId]; @@ -267,9 +287,10 @@ describe('SelectedNetworkController', () => { }; it('redirects domains to the globally selected network', () => { - const { controller, messenger, mockNetworkControllerGetState } = setup({ - state: { domains: initialDomains }, - }); + const { controller, rootMessenger, mockNetworkControllerGetState } = + setup({ + state: { domains: initialDomains }, + }); const networkControllerState = { ...getDefaultNetworkControllerState(), @@ -279,7 +300,7 @@ describe('SelectedNetworkController', () => { deleteNetwork( '0xaa36a7', networkControllerState, - messenger, + rootMessenger, mockNetworkControllerGetState, ); @@ -293,7 +314,7 @@ describe('SelectedNetworkController', () => { const domainProxyMap = new Map(); const { controller, - messenger, + rootMessenger, mockNetworkControllerGetState, mockGetNetworkClientById, } = setup({ @@ -324,7 +345,7 @@ describe('SelectedNetworkController', () => { deleteNetwork( '0xaa36a7', networkControllerState, - messenger, + rootMessenger, mockNetworkControllerGetState, ); @@ -342,9 +363,10 @@ describe('SelectedNetworkController', () => { 'chain-with-new-default.com': 'sepolia', }; - const { controller, messenger, mockNetworkControllerGetState } = setup({ - state: { domains: initialDomains }, - }); + const { controller, rootMessenger, mockNetworkControllerGetState } = + setup({ + state: { domains: initialDomains }, + }); const networkControllerState = getDefaultNetworkControllerState(); const goerliNetwork = @@ -362,7 +384,7 @@ describe('SelectedNetworkController', () => { networkControllerState, ); - messenger.publish( + rootMessenger.publish( 'NetworkController:stateChange', networkControllerState, [ @@ -385,9 +407,10 @@ describe('SelectedNetworkController', () => { 'chain-with-new-default.com': 'sepolia', }; - const { controller, messenger, mockNetworkControllerGetState } = setup({ - state: { domains: initialDomains }, - }); + const { controller, rootMessenger, mockNetworkControllerGetState } = + setup({ + state: { domains: initialDomains }, + }); const networkControllerState = getDefaultNetworkControllerState(); const goerliNetwork = @@ -406,7 +429,7 @@ describe('SelectedNetworkController', () => { networkControllerState, ); - messenger.publish( + rootMessenger.publish( 'NetworkController:stateChange', networkControllerState, [ @@ -733,7 +756,7 @@ describe('getProviderAndBlockTracker', () => { describe('PermissionController:stateChange', () => { describe('on permission add', () => { it('should add new domain to domains list', async () => { - const { controller, messenger } = setup({}); + const { controller, rootMessenger } = setup({}); const mockPermission = { parentCapability: 'eth_accounts', id: 'example.com', @@ -741,13 +764,17 @@ describe('PermissionController:stateChange', () => { caveats: [{ type: 'restrictToAccounts', value: ['0x...'] }], }; - messenger.publish('PermissionController:stateChange', { subjects: {} }, [ - { - op: 'add', - path: ['subjects', 'example.com', 'permissions'], - value: mockPermission, - }, - ]); + rootMessenger.publish( + 'PermissionController:stateChange', + { subjects: {} }, + [ + { + op: 'add', + path: ['subjects', 'example.com', 'permissions'], + value: mockPermission, + }, + ], + ); const { domains } = controller.state; expect(domains['example.com']).toBeDefined(); @@ -755,11 +782,11 @@ describe('PermissionController:stateChange', () => { describe('on permission removal', () => { it('should remove domain from domains list', async () => { - const { controller, messenger } = setup({ + const { controller, rootMessenger } = setup({ state: { domains: { 'example.com': 'foo' } }, }); - messenger.publish( + rootMessenger.publish( 'PermissionController:stateChange', { subjects: {} }, [ @@ -775,12 +802,12 @@ describe('PermissionController:stateChange', () => { }); it('should set the proxy to the globally selected network if the globally selected network client is initialized and a proxy exists for the domain', async () => { - const { controller, messenger, mockProviderProxy } = setup({ + const { controller, rootMessenger, mockProviderProxy } = setup({ state: { domains: { 'example.com': 'foo' } }, }); controller.getProviderAndBlockTracker('example.com'); - messenger.publish( + rootMessenger.publish( 'PermissionController:stateChange', { subjects: {} }, [ @@ -803,7 +830,7 @@ describe('PermissionController:stateChange', () => { it('should delete the proxy if the globally selected network client is not initialized but a proxy exists for the domain', async () => { const { controller, - messenger, + rootMessenger, domainProxyMap, mockProviderProxy, mockGetSelectedNetworkClient, @@ -814,7 +841,7 @@ describe('PermissionController:stateChange', () => { mockGetSelectedNetworkClient.mockReturnValue(undefined); expect(domainProxyMap.get('example.com')).toBeDefined(); - messenger.publish( + rootMessenger.publish( 'PermissionController:stateChange', { subjects: {} }, [ @@ -839,7 +866,7 @@ describe('PermissionController:stateChange', () => { deriveStateFromMetadata( controller.state, controller.metadata, - 'anonymous', + 'includeInDebugSnapshot', ), ).toMatchInlineSnapshot(`Object {}`); }); diff --git a/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts b/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts index 13d66bcacd7..34893ed56da 100644 --- a/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts +++ b/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts @@ -1,35 +1,70 @@ -import { Messenger } from '@metamask/base-controller'; import { JsonRpcEngine } from '@metamask/json-rpc-engine'; +import { + Messenger, + MOCK_ANY_NAMESPACE, + type MessengerActions, + type MessengerEvents, + type MockAnyNamespace, +} from '@metamask/messenger'; import type { JsonRpcResponse } from '@metamask/utils'; import { SelectedNetworkControllerActionTypes } from '../src/SelectedNetworkController'; -import type { - AllowedActions, - AllowedEvents, - SelectedNetworkControllerActions, - SelectedNetworkControllerEvents, -} from '../src/SelectedNetworkController'; +import type { SelectedNetworkControllerMessenger } from '../src/SelectedNetworkController'; import type { SelectedNetworkMiddlewareJsonRpcRequest } from '../src/SelectedNetworkMiddleware'; import { createSelectedNetworkMiddleware } from '../src/SelectedNetworkMiddleware'; -const buildMessenger = () => { +type AllSelectedNetworkControllerActions = + MessengerActions; + +type AllSelectedNetworkControllerEvents = + MessengerEvents; + +type RootMessenger = Messenger< + MockAnyNamespace, + AllSelectedNetworkControllerActions, + AllSelectedNetworkControllerEvents +>; + +const controllerName = 'SelectedNetworkController'; + +/** + * Constructs the root messenger. + * + * @returns A root messenger. + */ +function getRootMessenger(): RootMessenger { + return new Messenger({ + namespace: MOCK_ANY_NAMESPACE, + }); +} + +/** + * Constructs the selected network controller messenger. + * + * @param rootMessenger - A root messenger. + * @returns A selected network controller messenger. + */ +function getSelectedNetworkControllerMessenger( + rootMessenger: RootMessenger, +): SelectedNetworkControllerMessenger { return new Messenger< - SelectedNetworkControllerActions | AllowedActions, - SelectedNetworkControllerEvents | AllowedEvents - >(); -}; + typeof controllerName, + AllSelectedNetworkControllerActions, + AllSelectedNetworkControllerEvents, + RootMessenger + >({ + namespace: controllerName, + parent: rootMessenger, + }); +} const noop = jest.fn(); describe('createSelectedNetworkMiddleware', () => { it('throws if not provided an origin', async () => { - const messenger = buildMessenger(); + const rootMessenger = getRootMessenger(); const middleware = createSelectedNetworkMiddleware( - messenger.getRestricted({ - name: 'SelectedNetworkController', - allowedActions: [], - allowedEvents: [], - }), + getSelectedNetworkControllerMessenger(rootMessenger), ); const req: SelectedNetworkMiddlewareJsonRpcRequest = { id: '123', @@ -47,14 +82,9 @@ describe('createSelectedNetworkMiddleware', () => { }); it('puts networkClientId on request', async () => { - const messenger = buildMessenger(); - const middleware = createSelectedNetworkMiddleware( - messenger.getRestricted({ - name: 'SelectedNetworkController', - allowedActions: [], - allowedEvents: [], - }), - ); + const rootMessenger = getRootMessenger(); + const messenger = getSelectedNetworkControllerMessenger(rootMessenger); + const middleware = createSelectedNetworkMiddleware(messenger); const req = { origin: 'example.com', @@ -78,20 +108,13 @@ describe('createSelectedNetworkMiddleware', () => { it('implements the json-rpc-engine middleware interface appropriately', async () => { const engine = new JsonRpcEngine(); - const messenger = buildMessenger(); + const rootMessenger = getRootMessenger(); + const messenger = getSelectedNetworkControllerMessenger(rootMessenger); engine.push((req: SelectedNetworkMiddlewareJsonRpcRequest, _, next) => { req.origin = 'foobar'; next(); }); - engine.push( - createSelectedNetworkMiddleware( - messenger.getRestricted({ - name: 'SelectedNetworkController', - allowedActions: [], - allowedEvents: [], - }), - ), - ); + engine.push(createSelectedNetworkMiddleware(messenger)); const mockNextMiddleware = jest .fn() .mockImplementation((req, res, _, end) => { diff --git a/packages/selected-network-controller/tsconfig.build.json b/packages/selected-network-controller/tsconfig.build.json index 0113f476410..f387a699564 100644 --- a/packages/selected-network-controller/tsconfig.build.json +++ b/packages/selected-network-controller/tsconfig.build.json @@ -9,7 +9,8 @@ { "path": "../base-controller/tsconfig.build.json" }, { "path": "../network-controller/tsconfig.build.json" }, { "path": "../json-rpc-engine/tsconfig.build.json" }, - { "path": "../permission-controller/tsconfig.build.json" } + { "path": "../permission-controller/tsconfig.build.json" }, + { "path": "../messenger/tsconfig.build.json" } ], "include": ["../../types", "./src"] } diff --git a/packages/selected-network-controller/tsconfig.json b/packages/selected-network-controller/tsconfig.json index 9e391177a64..3f45736e967 100644 --- a/packages/selected-network-controller/tsconfig.json +++ b/packages/selected-network-controller/tsconfig.json @@ -16,6 +16,9 @@ }, { "path": "../permission-controller" + }, + { + "path": "../messenger" } ], "include": ["../../types", "../../tests", "./src", "./tests"] diff --git a/yarn.lock b/yarn.lock index f67c9bc6cb0..98caef24528 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4697,6 +4697,7 @@ __metadata: "@metamask/auto-changelog": "npm:^3.4.4" "@metamask/base-controller": "npm:^8.4.2" "@metamask/json-rpc-engine": "npm:^10.1.1" + "@metamask/messenger": "npm:^0.3.0" "@metamask/network-controller": "npm:^24.3.1" "@metamask/permission-controller": "npm:^11.1.1" "@metamask/swappable-obj-proxy": "npm:^2.3.0"