From 56762d7e74cec37c79c188ee9703c49ba8df6b2d Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 19 Feb 2024 14:59:28 -0600 Subject: [PATCH 1/3] trying to cleanup and make more logical --- .../src/SelectedNetworkController.ts | 94 +++++-------------- .../src/SelectedNetworkMiddleware.ts | 8 +- 2 files changed, 26 insertions(+), 76 deletions(-) diff --git a/packages/selected-network-controller/src/SelectedNetworkController.ts b/packages/selected-network-controller/src/SelectedNetworkController.ts index 047265b75d8..7fa04d74625 100644 --- a/packages/selected-network-controller/src/SelectedNetworkController.ts +++ b/packages/selected-network-controller/src/SelectedNetworkController.ts @@ -31,8 +31,6 @@ export const SelectedNetworkControllerActionTypes = { getState: `${controllerName}:getState` as const, getNetworkClientIdForDomain: `${controllerName}:getNetworkClientIdForDomain` as const, - getNetworkClientIdForMetamask: - `${controllerName}:getNetworkClientIdForMetamask` as const, setNetworkClientIdForDomain: `${controllerName}:setNetworkClientIdForDomain` as const, }; @@ -66,11 +64,6 @@ export type SelectedNetworkControllerGetNetworkClientIdForDomainAction = { handler: SelectedNetworkController['getNetworkClientIdForDomain']; }; -export type SelectedNetworkControllerGetNetworkClientIdForMetamaskAction = { - type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForMetamask; - handler: SelectedNetworkController['getNetworkClientIdForMetamask']; -}; - export type SelectedNetworkControllerSetNetworkClientIdForDomainAction = { type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain; handler: SelectedNetworkController['setNetworkClientIdForDomain']; @@ -84,7 +77,6 @@ type PermissionControllerHasPermissions = { export type SelectedNetworkControllerActions = | SelectedNetworkControllerGetSelectedNetworkStateAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction - | SelectedNetworkControllerGetNetworkClientIdForMetamaskAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction; export type AllowedActions = @@ -143,23 +135,6 @@ export class SelectedNetworkController extends BaseController< state, }); this.#registerMessageHandlers(); - - // if the network for metamask is not set, set it to the currently selected network upon initialization - if (this.state.domains[METAMASK_DOMAIN] === undefined) { - const { selectedNetworkClientId } = this.messagingSystem.call( - 'NetworkController:getState', - ); - this.setNetworkClientIdForMetamask(selectedNetworkClientId); - } - - this.messagingSystem.subscribe( - 'NetworkController:stateChange', - ({ selectedNetworkClientId }) => { - if (this.getNetworkClientIdForMetamask() !== selectedNetworkClientId) { - this.setNetworkClientIdForMetamask(selectedNetworkClientId); - } - }, - ); } #registerMessageHandlers(): void { @@ -167,20 +142,12 @@ export class SelectedNetworkController extends BaseController< SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, this.getNetworkClientIdForDomain.bind(this), ); - this.messagingSystem.registerActionHandler( - SelectedNetworkControllerActionTypes.getNetworkClientIdForMetamask, - this.getNetworkClientIdForMetamask.bind(this), - ); this.messagingSystem.registerActionHandler( SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain, this.setNetworkClientIdForDomain.bind(this), ); } - setNetworkClientIdForMetamask(networkClientId: NetworkClientId) { - this.setNetworkClientIdForDomain(METAMASK_DOMAIN, networkClientId); - } - #setNetworkClientIdForDomain( domain: Domain, networkClientId: NetworkClientId, @@ -218,50 +185,33 @@ export class SelectedNetworkController extends BaseController< domain: Domain, networkClientId: NetworkClientId, ) { - if (domain !== METAMASK_DOMAIN && !this.state.perDomainNetwork) { - return; + if (domain === METAMASK_DOMAIN) { + throw new Error( + 'NetworkClientId for domain "metamask" cannot be set on the SelectedNetworkController ', + ); } - - if (domain !== METAMASK_DOMAIN && !this.#domainHasPermissions(domain)) { - return; + if (!this.state.perDomainNetwork) { + throw new Error( + 'NetworkClientId for domain cannot be called while perDomainNetwork preference is false', + ); } - // If setting for Metamask and perDomainNetwork is disabled, update all domains to the Metamask networkClientId in order to keep the proxies in sync - if (domain === METAMASK_DOMAIN && !this.state.perDomainNetwork) { - Object.entries(this.state.domains).forEach( - ([entryDomain, networkClientIdForDomain]) => { - if ( - networkClientIdForDomain !== networkClientId && - entryDomain !== domain - ) { - this.#setNetworkClientIdForDomain(entryDomain, networkClientId); - } - }, + if (!this.#domainHasPermissions(domain)) { + throw new Error( + 'NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions', ); } this.#setNetworkClientIdForDomain(domain, networkClientId); } - getNetworkClientIdForDomain(domain: Domain): NetworkClientId | undefined { - if (domain === METAMASK_DOMAIN) { - return this.getNetworkClientIdForMetamask(); - } + getNetworkClientIdForDomain(domain: Domain): NetworkClientId { + const { selectedNetworkClientId: metamaskSelectedNetworkClientId } = + this.messagingSystem.call('NetworkController:getState'); if (!this.state.perDomainNetwork) { - return undefined; + return metamaskSelectedNetworkClientId; } - return this.state.domains[domain]; - } - - getNetworkClientIdForMetamask(): NetworkClientId { - return this.state.domains[METAMASK_DOMAIN]; - } - - #getNetworkClientIdForDomainOrMetamask(domain: Domain): NetworkClientId { - return ( - this.getNetworkClientIdForDomain(domain) ?? - this.getNetworkClientIdForMetamask() - ); + return this.state.domains[domain] ?? metamaskSelectedNetworkClientId; } /** @@ -271,11 +221,17 @@ export class SelectedNetworkController extends BaseController< * @returns The proxy and block tracker proxies. */ getProviderAndBlockTracker(domain: Domain): NetworkProxy { + const networkClientId = this.getNetworkClientIdForDomain(domain); + if (!networkClientId) { + throw new Error( + 'NetworkClientId has not been set for the requested domain', + ); + } let networkProxy = this.#proxies.get(domain); if (networkProxy === undefined) { const networkClient = this.messagingSystem.call( 'NetworkController:getNetworkClientById', - this.#getNetworkClientIdForDomainOrMetamask(domain), + networkClientId, ); networkProxy = { provider: createEventEmitterProxy(networkClient.provider), @@ -300,8 +256,8 @@ export class SelectedNetworkController extends BaseController< Object.keys(this.state.domains).forEach((domain) => { this.setNetworkClientIdForDomain( domain, - // when perDomainNetwork is false, getNetworkClientIdForDomainOrMetamask always returns the networkClientId for the domain 'metamask' - this.#getNetworkClientIdForDomainOrMetamask(domain), + // when perDomainNetwork is false, getNetworkClientIdForDomain always returns the networkClientId for the domain 'metamask' + this.getNetworkClientIdForDomain(domain), ); }); } diff --git a/packages/selected-network-controller/src/SelectedNetworkMiddleware.ts b/packages/selected-network-controller/src/SelectedNetworkMiddleware.ts index 073f077fa19..eb84a503e98 100644 --- a/packages/selected-network-controller/src/SelectedNetworkMiddleware.ts +++ b/packages/selected-network-controller/src/SelectedNetworkMiddleware.ts @@ -18,19 +18,13 @@ export const createSelectedNetworkMiddleware = ( SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, origin, ); - const getNetworkClientIdForMetamask = () => - messenger.call( - SelectedNetworkControllerActionTypes.getNetworkClientIdForMetamask, - ); return (req: SelectedNetworkMiddlewareJsonRpcRequest, _, next) => { if (!req.origin) { throw new Error("Request object is lacking an 'origin'"); } - req.networkClientId = - getNetworkClientIdForDomain(req.origin) ?? - getNetworkClientIdForMetamask(); + req.networkClientId = getNetworkClientIdForDomain(req.origin); return next(); }; }; From 31929d3da836c1d1dfdab13934f94acfd959d4af Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 19 Feb 2024 16:53:24 -0600 Subject: [PATCH 2/3] i guess proxies dont need to stay synced when feature flag is off --- .../src/SelectedNetworkController.ts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/packages/selected-network-controller/src/SelectedNetworkController.ts b/packages/selected-network-controller/src/SelectedNetworkController.ts index 7fa04d74625..fe43c1fc031 100644 --- a/packages/selected-network-controller/src/SelectedNetworkController.ts +++ b/packages/selected-network-controller/src/SelectedNetworkController.ts @@ -190,11 +190,6 @@ export class SelectedNetworkController extends BaseController< 'NetworkClientId for domain "metamask" cannot be set on the SelectedNetworkController ', ); } - if (!this.state.perDomainNetwork) { - throw new Error( - 'NetworkClientId for domain cannot be called while perDomainNetwork preference is false', - ); - } if (!this.#domainHasPermissions(domain)) { throw new Error( @@ -250,15 +245,5 @@ export class SelectedNetworkController extends BaseController< state.perDomainNetwork = enabled; return state; }); - // when perDomainNetwork is toggled on or off we need to update the proxies for all domains - // when toggled on all domains should have their own proxies - // when toggled off all domains should use the same proxies as the metamask domain - Object.keys(this.state.domains).forEach((domain) => { - this.setNetworkClientIdForDomain( - domain, - // when perDomainNetwork is false, getNetworkClientIdForDomain always returns the networkClientId for the domain 'metamask' - this.getNetworkClientIdForDomain(domain), - ); - }); } } From 7838c9275d111b71b398e4b5148067b58a5810ba Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 20 Feb 2024 12:49:04 -0600 Subject: [PATCH 3/3] add errors + fix tests --- .../src/SelectedNetworkController.ts | 9 +- .../tests/SelectedNetworkController.test.ts | 240 +++++++----------- .../tests/SelectedNetworkMiddleware.test.ts | 67 ++--- 3 files changed, 132 insertions(+), 184 deletions(-) diff --git a/packages/selected-network-controller/src/SelectedNetworkController.ts b/packages/selected-network-controller/src/SelectedNetworkController.ts index fe43c1fc031..be29b3bcee6 100644 --- a/packages/selected-network-controller/src/SelectedNetworkController.ts +++ b/packages/selected-network-controller/src/SelectedNetworkController.ts @@ -187,7 +187,7 @@ export class SelectedNetworkController extends BaseController< ) { if (domain === METAMASK_DOMAIN) { throw new Error( - 'NetworkClientId for domain "metamask" cannot be set on the SelectedNetworkController ', + 'NetworkClientId for domain "metamask" cannot be set on the SelectedNetworkController', ); } @@ -216,7 +216,12 @@ export class SelectedNetworkController extends BaseController< * @returns The proxy and block tracker proxies. */ getProviderAndBlockTracker(domain: Domain): NetworkProxy { - const networkClientId = this.getNetworkClientIdForDomain(domain); + if (!this.state.perDomainNetwork) { + throw new Error( + 'Provider and BlockTracker should be fetched from NetworkController when perDomainNetwork is false', + ); + } + const networkClientId = this.state.domains[domain]; if (!networkClientId) { throw new Error( 'NetworkClientId has not been set for the requested domain', diff --git a/packages/selected-network-controller/tests/SelectedNetworkController.test.ts b/packages/selected-network-controller/tests/SelectedNetworkController.test.ts index 7a304325f83..87a25e271fd 100644 --- a/packages/selected-network-controller/tests/SelectedNetworkController.test.ts +++ b/packages/selected-network-controller/tests/SelectedNetworkController.test.ts @@ -9,7 +9,6 @@ import type { SelectedNetworkControllerMessenger, } from '../src/SelectedNetworkController'; import { - METAMASK_DOMAIN, SelectedNetworkController, controllerName, } from '../src/SelectedNetworkController'; @@ -137,7 +136,7 @@ describe('SelectedNetworkController', () => { it('can be instantiated with default values', () => { const { controller } = setup({ state: undefined }); expect(controller.state).toStrictEqual({ - domains: { metamask: 'mainnet' }, + domains: {}, perDomainNetwork: false, }); }); @@ -145,94 +144,36 @@ describe('SelectedNetworkController', () => { const { controller } = setup({ state: { perDomainNetwork: true, - domains: { metamask: 'sepolia', networkClientId: 'goerli' }, + domains: { networkClientId: 'goerli' }, }, }); expect(controller.state).toStrictEqual({ - domains: { metamask: 'sepolia', networkClientId: 'goerli' }, + domains: { networkClientId: 'goerli' }, perDomainNetwork: true, }); }); - it('changes the networkClientId for the metamask domain when selectedNetworkClientId in networkController state changes', () => { - const { controller, messenger } = setup({ - state: { - perDomainNetwork: true, - domains: { metamask: 'mainnet' }, - }, - }); - expect(controller.state.domains.metamask).toBe('mainnet'); - messenger.publish( - 'NetworkController:stateChange', - { - providerConfig: { chainId: '0x5', ticker: 'ETH', type: 'goerli' }, - selectedNetworkClientId: 'goerli', - networkConfigurations: {}, - networksMetadata: {}, - }, - [], - ); - expect(controller.state.domains.metamask).toBe('goerli'); - }); }); describe('setNetworkClientIdForDomain', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + it('should throw an error when passed "metamask" as domain arg', () => { + const { controller } = setup(); + expect(() => { + controller.setNetworkClientIdForDomain('metamask', 'mainnet'); + }).toThrow( + 'NetworkClientId for domain "metamask" cannot be set on the SelectedNetworkController', + ); + expect(controller.state.domains.metamask).toBeUndefined(); + }); describe('when the perDomainNetwork state is false', () => { - describe('when the requesting domain is metamask', () => { - it('sets the networkClientId for the metamask domain', () => { - const { controller } = setup(); - - const networkClientId = 'network2'; - controller.setNetworkClientIdForDomain( - METAMASK_DOMAIN, - networkClientId, - ); - expect(controller.state.domains.metamask).toBe(networkClientId); - }); - - it('updates the networkClientId for all domains in state', () => { - const { controller } = setup({ - state: { - perDomainNetwork: false, - domains: { - metamask: 'mainnet', - '1.com': '1', - '2.com': '2', - }, - }, - }); - - controller.setNetworkClientIdForMetamask('foo'); - Object.entries(controller.state.domains).forEach(([domain]) => - expect(controller.state.domains[domain]).toBe('foo'), - ); - }); - }); - describe('when the requesting domain is not metamask', () => { - it('does not update the networkClientId for the metamask domain', () => { + it('updates the networkClientId for domain in state', () => { const { controller } = setup({ - hasPermissions: false, - state: { - perDomainNetwork: false, - domains: { metamask: 'mainnet' }, - }, - }); - - const networkClientId = 'network2'; - controller.setNetworkClientIdForDomain( - 'not-metamask', - networkClientId, - ); - expect(controller.state.domains.metamask).toBe('mainnet'); - }); - - it('does not update the networkClientId for all domains in state', () => { - const { controller } = setup({ - hasPermissions: false, state: { perDomainNetwork: false, domains: { - metamask: 'mainnet', '1.com': 'mainnet', '2.com': 'mainnet', '3.com': 'mainnet', @@ -246,8 +187,9 @@ describe('SelectedNetworkController', () => { controller.setNetworkClientIdForDomain(domain, networkClientIds[i]), ); - expect(controller.state.domains['1.com']).toBe('mainnet'); - expect(controller.state.domains['2.com']).toBe('mainnet'); + expect(controller.state.domains['1.com']).toBe('1'); + expect(controller.state.domains['2.com']).toBe('2'); + expect(controller.state.domains['3.com']).toBe('3'); }); }); }); @@ -294,7 +236,7 @@ describe('SelectedNetworkController', () => { }); describe('when the requesting domain does not have permissions', () => { - it('does not set the networkClientId for the passed in domain', () => { + it('throw an error and does not set the networkClientId for the passed in domain', () => { const { controller } = setup({ state: { perDomainNetwork: true, domains: {} }, hasPermissions: false, @@ -302,7 +244,11 @@ describe('SelectedNetworkController', () => { const domain = 'example.com'; const networkClientId = 'network1'; - controller.setNetworkClientIdForDomain(domain, networkClientId); + expect(() => { + controller.setNetworkClientIdForDomain(domain, networkClientId); + }).toThrow( + 'NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions', + ); expect(controller.state.domains[domain]).toBeUndefined(); }); }); @@ -311,17 +257,19 @@ describe('SelectedNetworkController', () => { describe('getNetworkClientIdForDomain', () => { describe('when the perDomainNetwork state is false', () => { - it('returns undefined if not no networkClientId is set for requested domain', () => { + it('returns the selectedNetworkClientId from the NetworkController if not no networkClientId is set for requested domain', () => { const { controller } = setup(); - const result = controller.getNetworkClientIdForDomain('example.com'); - expect(result).toBeUndefined(); + expect(controller.getNetworkClientIdForDomain('example.com')).toBe( + 'mainnet', + ); }); - it('returns undefined if a networkClientId is set for the requested domain', () => { + it('returns the selectedNetworkClientId from the NetworkController if a networkClientId is set for the requested domain', () => { const { controller } = setup(); const networkClientId = 'network3'; controller.setNetworkClientIdForDomain('example.com', networkClientId); - const result = controller.getNetworkClientIdForDomain('example.com'); - expect(result).toBeUndefined(); + expect(controller.getNetworkClientIdForDomain('example.com')).toBe( + 'mainnet', + ); }); it('returns the networkClientId for the metamask domain when passed "metamask"', () => { const { controller } = setup(); @@ -346,93 +294,99 @@ describe('SelectedNetworkController', () => { expect(result2).toBe(networkClientId2); }); - it('returns undefined when no networkClientId has been set for the domain requested', () => { + it('returns the selectedNetworkClientId from the NetworkController when no networkClientId has been set for the domain requested', () => { const { controller } = setup({ state: { perDomainNetwork: true, domains: {} }, hasPermissions: true, }); - const result = controller.getNetworkClientIdForDomain('example.com'); - expect(result).toBeUndefined(); + expect(controller.getNetworkClientIdForDomain('example.com')).toBe( + 'mainnet', + ); }); }); }); describe('getProviderAndBlockTracker', () => { - it('returns a proxy provider and block tracker when there is one already', () => { - const { controller } = setup(); - controller.setNetworkClientIdForDomain('example.com', 'network7'); - const result = controller.getProviderAndBlockTracker('example.com'); - expect(result).toBeDefined(); + describe('when perDomainNetwork is true', () => { + it('returns a proxy provider and block tracker when a networkClientId has been set for the requested domain', () => { + const { controller } = setup({ + state: { + perDomainNetwork: true, + domains: {}, + }, + }); + controller.setNetworkClientIdForDomain('example.com', 'network7'); + const result = controller.getProviderAndBlockTracker('example.com'); + expect(result).toBeDefined(); + }); + + it('creates a new proxy provider and block tracker when there isnt one already', () => { + const { controller } = setup({ + state: { + perDomainNetwork: true, + domains: { + 'test.com': 'mainnet', + }, + }, + }); + const result = controller.getProviderAndBlockTracker('test.com'); + expect(result).toBeDefined(); + }); + + it('throws and error when a networkClientId has not been set for the requested domain', () => { + const { controller } = setup({ + state: { + perDomainNetwork: true, + domains: {}, + }, + }); + + expect(() => { + controller.getProviderAndBlockTracker('test.com'); + }).toThrow('NetworkClientId has not been set for the requested domain'); + }); }); + describe('when perDomainNetwork is false', () => { + it('throws and error when a networkClientId has been been set for the requested domain', () => { + const { controller } = setup({ + state: { + perDomainNetwork: false, + domains: {}, + }, + }); - it('creates a new proxy provider and block tracker when there isnt one already', () => { - const { controller } = setup(); - expect( - controller.getNetworkClientIdForDomain('test.com'), - ).toBeUndefined(); - const result = controller.getProviderAndBlockTracker('test.com'); - expect(result).toBeDefined(); + expect(() => { + controller.getProviderAndBlockTracker('test.com'); + }).toThrow( + 'Provider and BlockTracker should be fetched from NetworkController when perDomainNetwork is false', + ); + }); }); }); describe('setPerDomainNetwork', () => { describe('when toggling from false to true', () => { - it('updates proxies for each domain', () => { - const { - controller, - createEventEmitterProxyMock, - mockProviderProxy, - mockBlockTrackerProxy, - } = setup({ + it('should update perDomainNetwork state to true', () => { + const { controller } = setup({ state: { perDomainNetwork: false, - domains: { - metamask: 'mainnet', - 'example.com': 'network7', - 'test.com': 'network8', - }, + domains: {}, }, }); controller.setPerDomainNetwork(true); - // createEventEmitterProxy is constructed twice (once for provider and once for blockTracker) for each of the domains in state - expect(createEventEmitterProxyMock).toHaveBeenCalledTimes(6); - - // after the proxies have been created, the setTarget method on the proxy is called on each of them on subsequent setPerDomainNetwork calls - controller.setPerDomainNetwork(false); - expect(mockProviderProxy.setTarget).toHaveBeenCalledTimes(3); - expect(mockBlockTrackerProxy.setTarget).toHaveBeenCalledTimes(3); + expect(controller.state.perDomainNetwork).toBe(true); }); }); describe('when toggling from true to false', () => { - it('updates the networkClientId and proxies for each domain to match the metamask domain', () => { - const { - controller, - createEventEmitterProxyMock, - mockProviderProxy, - mockBlockTrackerProxy, - } = setup({ + it('should update perDomainNetwork state to false', () => { + const { controller } = setup({ state: { perDomainNetwork: true, - domains: { - metamask: 'mainnet', - 'example.com': 'network7', - 'test.com': 'network8', - }, + domains: {}, }, }); controller.setPerDomainNetwork(false); - expect(controller.state.domains).toStrictEqual({ - metamask: 'mainnet', - 'example.com': 'mainnet', - 'test.com': 'mainnet', - }); - // createEventEmitterProxy is constructed twice (once for provider and once for blockTracker) for each of the domains in state - expect(createEventEmitterProxyMock).toHaveBeenCalledTimes(6); - - // after the proxies have been created, the setTarget method on the proxy is called on each of them on subsequent setPerDomainNetwork calls - controller.setPerDomainNetwork(true); - expect(mockProviderProxy.setTarget).toHaveBeenCalledTimes(3); - expect(mockBlockTrackerProxy.setTarget).toHaveBeenCalledTimes(3); + expect(controller.state.perDomainNetwork).toBe(false); }); }); }); diff --git a/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts b/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts index ece981ffa18..ce07dc20f0c 100644 --- a/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts +++ b/packages/selected-network-controller/tests/SelectedNetworkMiddleware.test.ts @@ -3,14 +3,20 @@ import { JsonRpcEngine } from '@metamask/json-rpc-engine'; import type { JsonRpcResponse } from '@metamask/utils'; import { SelectedNetworkControllerActionTypes } from '../src/SelectedNetworkController'; -import type { SelectedNetworkControllerMessenger } from '../src/SelectedNetworkController'; +import type { + AllowedActions, + AllowedEvents, + SelectedNetworkControllerActions, + SelectedNetworkControllerEvents, +} from '../src/SelectedNetworkController'; import type { SelectedNetworkMiddlewareJsonRpcRequest } from '../src/SelectedNetworkMiddleware'; import { createSelectedNetworkMiddleware } from '../src/SelectedNetworkMiddleware'; -const buildMessenger = (): SelectedNetworkControllerMessenger => { - return new ControllerMessenger().getRestricted({ - name: 'SelectedNetworkController', - }); +const buildMessenger = () => { + return new ControllerMessenger< + SelectedNetworkControllerActions | AllowedActions, + SelectedNetworkControllerEvents | AllowedEvents + >(); }; const noop = jest.fn(); @@ -18,7 +24,11 @@ const noop = jest.fn(); describe('createSelectedNetworkMiddleware', () => { it('throws if not provided an origin', async () => { const messenger = buildMessenger(); - const middleware = createSelectedNetworkMiddleware(messenger); + const middleware = createSelectedNetworkMiddleware( + messenger.getRestricted({ + name: 'SelectedNetworkController', + }), + ); const req: SelectedNetworkMiddlewareJsonRpcRequest = { id: '123', jsonrpc: '2.0', @@ -36,7 +46,11 @@ describe('createSelectedNetworkMiddleware', () => { it('puts networkClientId on request', async () => { const messenger = buildMessenger(); - const middleware = createSelectedNetworkMiddleware(messenger); + const middleware = createSelectedNetworkMiddleware( + messenger.getRestricted({ + name: 'SelectedNetworkController', + }), + ); const req = { origin: 'example.com', @@ -58,37 +72,6 @@ describe('createSelectedNetworkMiddleware', () => { expect(req.networkClientId).toBe('mockNetworkClientId'); }); - it('puts metamask selected networkClientId on the request object if the requesting origin does not have one set', async () => { - const messenger = buildMessenger(); - const middleware = createSelectedNetworkMiddleware(messenger); - - const req = { - origin: 'example.com', - } as SelectedNetworkMiddlewareJsonRpcRequest; - - const mockGetNetworkClientIdForDomain = jest - .fn() - .mockReturnValue(undefined); - const mockGetNetworkClientIdForMetamask = jest - .fn() - .mockReturnValue('metamaskNetworkClientId'); - - messenger.registerActionHandler( - SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, - mockGetNetworkClientIdForDomain, - ); - messenger.registerActionHandler( - SelectedNetworkControllerActionTypes.getNetworkClientIdForMetamask, - mockGetNetworkClientIdForMetamask, - ); - - await new Promise((resolve) => - middleware(req, {} as JsonRpcResponse, resolve, noop), - ); - - expect(req.networkClientId).toBe('metamaskNetworkClientId'); - }); - it('implements the json-rpc-engine middleware interface appropriately', async () => { const engine = new JsonRpcEngine(); const messenger = buildMessenger(); @@ -96,7 +79,13 @@ describe('createSelectedNetworkMiddleware', () => { req.origin = 'foobar'; next(); }); - engine.push(createSelectedNetworkMiddleware(messenger)); + engine.push( + createSelectedNetworkMiddleware( + messenger.getRestricted({ + name: 'SelectedNetworkController', + }), + ), + ); const mockNextMiddleware = jest .fn() .mockImplementation((req, res, _, end) => {