@@ -9,22 +9,20 @@ import {
99} from '@metamask/controller-utils' ;
1010import HttpProvider from '@metamask/ethjs-provider-http' ;
1111import type {
12- NetworkClientId ,
13- NetworkControllerMessenger ,
1412 Provider ,
13+ NetworkControllerEvents ,
14+ NetworkControllerActions ,
1515} from '@metamask/network-controller' ;
1616import {
1717 NetworkController ,
1818 NetworkClientType ,
1919} from '@metamask/network-controller' ;
20- import {
21- getDefaultPreferencesState ,
22- type PreferencesState ,
23- } from '@metamask/preferences-controller' ;
20+ import { getDefaultPreferencesState } from '@metamask/preferences-controller' ;
2421import assert from 'assert' ;
2522
2623import { mockNetwork } from '../../../tests/mock-network' ;
2724import { buildInfuraNetworkClientConfiguration } from '../../network-controller/tests/helpers' ;
25+ import type { AllowedActions , AllowedEvents } from './AssetsContractController' ;
2826import {
2927 AssetsContractController ,
3028 MISSING_PROVIDER_ERROR ,
@@ -65,22 +63,25 @@ async function setupAssetContractControllers({
6563} = { } ) {
6664 const networkClientConfiguration = {
6765 type : NetworkClientType . Infura ,
68- network : ' mainnet' ,
66+ network : NetworkType . mainnet ,
6967 infuraProjectId,
7068 chainId : BUILT_IN_NETWORKS . mainnet . chainId ,
7169 ticker : BUILT_IN_NETWORKS . mainnet . ticker ,
7270 } as const ;
7371 let provider : Provider ;
7472
75- const messenger : NetworkControllerMessenger =
76- new ControllerMessenger ( ) . getRestricted ( {
77- name : 'NetworkController' ,
78- allowedActions : [ ] ,
79- allowedEvents : [ ] ,
80- } ) ;
73+ const controllerMessenger = new ControllerMessenger <
74+ NetworkControllerActions | AllowedActions ,
75+ NetworkControllerEvents | AllowedEvents
76+ > ( ) ;
77+ const networkMessenger = controllerMessenger . getRestricted ( {
78+ name : 'NetworkController' ,
79+ allowedActions : [ ] ,
80+ allowedEvents : [ ] ,
81+ } ) ;
8182 const networkController = new NetworkController ( {
8283 infuraProjectId,
83- messenger,
84+ messenger : networkMessenger ,
8485 trackMetaMetricsEvent : jest . fn ( ) ,
8586 } ) ;
8687 if ( useNetworkControllerProvider ) {
@@ -94,41 +95,27 @@ async function setupAssetContractControllers({
9495 ) ;
9596 }
9697
97- const getNetworkClientById = useNetworkControllerProvider
98- ? networkController . getNetworkClientById . bind ( networkController )
99- : ( networkClientId : NetworkClientId ) =>
100- ( {
101- ...networkController . getNetworkClientById ( networkClientId ) ,
102- provider,
103- // TODO: Replace `any` with type
104- // eslint-disable-next-line @typescript-eslint/no-explicit-any
105- } as any ) ;
106-
107- const preferencesStateChangeListeners : ( ( state : PreferencesState ) => void ) [ ] =
108- [ ] ;
98+ const assetsContractMessenger = controllerMessenger . getRestricted ( {
99+ name : 'AssetsContractController' ,
100+ allowedActions : [ 'NetworkController:getNetworkClientById' ] ,
101+ allowedEvents : [
102+ 'PreferencesController:stateChange' ,
103+ 'NetworkController:networkDidChange' ,
104+ ] ,
105+ } ) ;
109106 const assetsContract = new AssetsContractController ( {
110107 chainId : ChainId . mainnet ,
111- onPreferencesStateChange : ( listener ) => {
112- preferencesStateChangeListeners . push ( listener ) ;
113- } ,
114- onNetworkDidChange : ( listener ) =>
115- messenger . subscribe ( 'NetworkController:networkDidChange' , listener ) ,
116- getNetworkClientById,
108+ messenger : assetsContractMessenger ,
117109 ...options ,
118110 } ) ;
119111
120112 return {
121- messenger,
113+ messenger : controllerMessenger ,
122114 network : networkController ,
123115 assetsContract,
124116 provider,
125117 networkClientConfiguration,
126118 infuraProjectId,
127- triggerPreferencesStateChange : ( state : PreferencesState ) => {
128- for ( const listener of preferencesStateChangeListeners ) {
129- listener ( state ) ;
130- }
131- } ,
132119 } ;
133120}
134121
@@ -170,32 +157,41 @@ export { setupAssetContractControllers, mockNetworkWithDefaultChainId };
170157describe ( 'AssetsContractController' , ( ) => {
171158 it ( 'should set default config' , async ( ) => {
172159 const { assetsContract, messenger } = await setupAssetContractControllers ( ) ;
173- expect ( assetsContract . config ) . toStrictEqual ( {
160+ expect ( {
161+ chainId : assetsContract . chainId ,
162+ ipfsGateway : assetsContract . ipfsGateway ,
163+ } ) . toStrictEqual ( {
174164 chainId : SupportedTokenDetectionNetworks . mainnet ,
175165 ipfsGateway : IPFS_DEFAULT_GATEWAY_URL ,
176- provider : undefined ,
177166 } ) ;
178167 messenger . clearEventSubscriptions ( 'NetworkController:networkDidChange' ) ;
179168 } ) ;
180169
181170 it ( 'should update the ipfsGateWay config value when this value is changed in the preferences controller' , async ( ) => {
182- const { assetsContract, messenger, triggerPreferencesStateChange } =
183- await setupAssetContractControllers ( ) ;
184- expect ( assetsContract . config ) . toStrictEqual ( {
171+ const { assetsContract, messenger } = await setupAssetContractControllers ( ) ;
172+ expect ( {
173+ chainId : assetsContract . chainId ,
174+ ipfsGateway : assetsContract . ipfsGateway ,
175+ } ) . toStrictEqual ( {
185176 chainId : SupportedTokenDetectionNetworks . mainnet ,
186177 ipfsGateway : IPFS_DEFAULT_GATEWAY_URL ,
187- provider : undefined ,
188178 } ) ;
189179
190- triggerPreferencesStateChange ( {
191- ...getDefaultPreferencesState ( ) ,
192- ipfsGateway : 'newIPFSGateWay' ,
193- } ) ;
180+ messenger . publish (
181+ 'PreferencesController:stateChange' ,
182+ {
183+ ...getDefaultPreferencesState ( ) ,
184+ ipfsGateway : 'newIPFSGateWay' ,
185+ } ,
186+ [ ] ,
187+ ) ;
194188
195- expect ( assetsContract . config ) . toStrictEqual ( {
189+ expect ( {
190+ chainId : assetsContract . chainId ,
191+ ipfsGateway : assetsContract . ipfsGateway ,
192+ } ) . toStrictEqual ( {
196193 ipfsGateway : 'newIPFSGateWay' ,
197194 chainId : SupportedTokenDetectionNetworks . mainnet ,
198- provider : undefined ,
199195 } ) ;
200196
201197 messenger . clearEventSubscriptions ( 'NetworkController:networkDidChange' ) ;
@@ -211,7 +207,7 @@ describe('AssetsContractController', () => {
211207
212208 it ( 'should throw missing provider error when getting ERC-20 token balance when missing provider' , async ( ) => {
213209 const { assetsContract, messenger } = await setupAssetContractControllers ( ) ;
214- assetsContract . configure ( { provider : undefined } ) ;
210+ assetsContract . provider = undefined ;
215211 await expect (
216212 assetsContract . getERC20BalanceOf (
217213 ERC20_UNI_ADDRESS ,
@@ -223,7 +219,7 @@ describe('AssetsContractController', () => {
223219
224220 it ( 'should throw missing provider error when getting ERC-20 token decimal when missing provider' , async ( ) => {
225221 const { assetsContract, messenger } = await setupAssetContractControllers ( ) ;
226- assetsContract . configure ( { provider : undefined } ) ;
222+ assetsContract . provider = undefined ;
227223 await expect (
228224 assetsContract . getERC20TokenDecimals ( ERC20_UNI_ADDRESS ) ,
229225 ) . rejects . toThrow ( MISSING_PROVIDER_ERROR ) ;
@@ -233,7 +229,7 @@ describe('AssetsContractController', () => {
233229 it ( 'should get balance of ERC-20 token contract correctly' , async ( ) => {
234230 const { assetsContract, messenger, provider, networkClientConfiguration } =
235231 await setupAssetContractControllers ( ) ;
236- assetsContract . configure ( { provider } ) ;
232+ assetsContract . provider = provider ;
237233 mockNetworkWithDefaultChainId ( {
238234 networkClientConfiguration,
239235 mocks : [
@@ -287,7 +283,7 @@ describe('AssetsContractController', () => {
287283 it ( 'should get ERC-721 NFT tokenId correctly' , async ( ) => {
288284 const { assetsContract, messenger, provider, networkClientConfiguration } =
289285 await setupAssetContractControllers ( ) ;
290- assetsContract . configure ( { provider } ) ;
286+ assetsContract . provider = provider ;
291287 mockNetworkWithDefaultChainId ( {
292288 networkClientConfiguration,
293289 mocks : [
@@ -320,7 +316,7 @@ describe('AssetsContractController', () => {
320316
321317 it ( 'should throw missing provider error when getting ERC-721 token standard and details when missing provider' , async ( ) => {
322318 const { assetsContract, messenger } = await setupAssetContractControllers ( ) ;
323- assetsContract . configure ( { provider : undefined } ) ;
319+ assetsContract . provider = undefined ;
324320 await expect (
325321 assetsContract . getTokenStandardAndDetails (
326322 ERC20_UNI_ADDRESS ,
@@ -333,7 +329,7 @@ describe('AssetsContractController', () => {
333329 it ( 'should throw contract standard error when getting ERC-20 token standard and details when provided with invalid ERC-20 address' , async ( ) => {
334330 const { assetsContract, messenger, provider } =
335331 await setupAssetContractControllers ( ) ;
336- assetsContract . configure ( { provider } ) ;
332+ assetsContract . provider = provider ;
337333 const error = 'Unable to determine contract standard' ;
338334 await expect (
339335 assetsContract . getTokenStandardAndDetails (
@@ -347,7 +343,7 @@ describe('AssetsContractController', () => {
347343 it ( 'should get ERC-721 token standard and details' , async ( ) => {
348344 const { assetsContract, messenger, provider, networkClientConfiguration } =
349345 await setupAssetContractControllers ( ) ;
350- assetsContract . configure ( { provider } ) ;
346+ assetsContract . provider = provider ;
351347 mockNetworkWithDefaultChainId ( {
352348 networkClientConfiguration,
353349 mocks : [
@@ -412,7 +408,7 @@ describe('AssetsContractController', () => {
412408 it ( 'should get ERC-1155 token standard and details' , async ( ) => {
413409 const { assetsContract, messenger, provider, networkClientConfiguration } =
414410 await setupAssetContractControllers ( ) ;
415- assetsContract . configure ( { provider } ) ;
411+ assetsContract . provider = provider ;
416412 mockNetworkWithDefaultChainId ( {
417413 networkClientConfiguration,
418414 mocks : [
@@ -497,7 +493,7 @@ describe('AssetsContractController', () => {
497493 it ( 'should get ERC-20 token standard and details' , async ( ) => {
498494 const { assetsContract, messenger, provider, networkClientConfiguration } =
499495 await setupAssetContractControllers ( ) ;
500- assetsContract . configure ( { provider } ) ;
496+ assetsContract . provider = provider ;
501497 mockNetworkWithDefaultChainId ( {
502498 networkClientConfiguration,
503499 mocks : [
@@ -594,7 +590,7 @@ describe('AssetsContractController', () => {
594590 it ( 'should get ERC-721 NFT tokenURI correctly' , async ( ) => {
595591 const { assetsContract, messenger, provider, networkClientConfiguration } =
596592 await setupAssetContractControllers ( ) ;
597- assetsContract . configure ( { provider } ) ;
593+ assetsContract . provider = provider ;
598594 mockNetworkWithDefaultChainId ( {
599595 networkClientConfiguration,
600596 mocks : [
@@ -643,7 +639,7 @@ describe('AssetsContractController', () => {
643639 it ( 'should not throw an error when address given does not support NFT Metadata interface' , async ( ) => {
644640 const { assetsContract, messenger, provider, networkClientConfiguration } =
645641 await setupAssetContractControllers ( ) ;
646- assetsContract . configure ( { provider } ) ;
642+ assetsContract . provider = provider ;
647643 const errorLogSpy = jest
648644 . spyOn ( console , 'error' )
649645 . mockImplementationOnce ( ( ) => {
@@ -701,7 +697,7 @@ describe('AssetsContractController', () => {
701697 it ( 'should get ERC-721 NFT name' , async ( ) => {
702698 const { assetsContract, messenger, provider, networkClientConfiguration } =
703699 await setupAssetContractControllers ( ) ;
704- assetsContract . configure ( { provider } ) ;
700+ assetsContract . provider = provider ;
705701 mockNetworkWithDefaultChainId ( {
706702 networkClientConfiguration,
707703 mocks : [
@@ -731,7 +727,7 @@ describe('AssetsContractController', () => {
731727 it ( 'should get ERC-721 NFT symbol' , async ( ) => {
732728 const { assetsContract, messenger, provider, networkClientConfiguration } =
733729 await setupAssetContractControllers ( ) ;
734- assetsContract . configure ( { provider } ) ;
730+ assetsContract . provider = provider ;
735731 mockNetworkWithDefaultChainId ( {
736732 networkClientConfiguration,
737733 mocks : [
@@ -771,7 +767,7 @@ describe('AssetsContractController', () => {
771767 it ( 'should get ERC-20 token decimals' , async ( ) => {
772768 const { assetsContract, messenger, provider, networkClientConfiguration } =
773769 await setupAssetContractControllers ( ) ;
774- assetsContract . configure ( { provider } ) ;
770+ assetsContract . provider = provider ;
775771 mockNetworkWithDefaultChainId ( {
776772 networkClientConfiguration,
777773 mocks : [
@@ -803,7 +799,7 @@ describe('AssetsContractController', () => {
803799 it ( 'should get ERC-20 token name' , async ( ) => {
804800 const { assetsContract, messenger, provider, networkClientConfiguration } =
805801 await setupAssetContractControllers ( ) ;
806- assetsContract . configure ( { provider } ) ;
802+ assetsContract . provider = provider ;
807803 mockNetworkWithDefaultChainId ( {
808804 networkClientConfiguration,
809805 mocks : [
@@ -835,7 +831,7 @@ describe('AssetsContractController', () => {
835831 it ( 'should get ERC-721 NFT ownership' , async ( ) => {
836832 const { assetsContract, messenger, provider, networkClientConfiguration } =
837833 await setupAssetContractControllers ( ) ;
838- assetsContract . configure ( { provider } ) ;
834+ assetsContract . provider = provider ;
839835 mockNetworkWithDefaultChainId ( {
840836 networkClientConfiguration,
841837 mocks : [
@@ -876,7 +872,7 @@ describe('AssetsContractController', () => {
876872 it ( 'should get balance of ERC-20 token in a single call on network with token detection support' , async ( ) => {
877873 const { assetsContract, messenger, provider, networkClientConfiguration } =
878874 await setupAssetContractControllers ( ) ;
879- assetsContract . configure ( { provider } ) ;
875+ assetsContract . provider = provider ;
880876 mockNetworkWithDefaultChainId ( {
881877 networkClientConfiguration,
882878 mocks : [
@@ -982,7 +978,7 @@ describe('AssetsContractController', () => {
982978 useNetworkControllerProvider : true ,
983979 infuraProjectId,
984980 } ) ;
985- assetsContract . configure ( { provider } ) ;
981+ assetsContract . provider = provider ;
986982
987983 const balancesOnMainnet = await assetsContract . getBalancesInSingleCall (
988984 ERC20_SAI_ADDRESS ,
@@ -1011,7 +1007,7 @@ describe('AssetsContractController', () => {
10111007 provider,
10121008 networkClientConfiguration,
10131009 } = await setupAssetContractControllers ( ) ;
1014- assetsContract . configure ( { provider } ) ;
1010+ assetsContract . provider = provider ;
10151011 mockNetworkWithDefaultChainId ( {
10161012 networkClientConfiguration,
10171013 mocks : [
@@ -1082,7 +1078,7 @@ describe('AssetsContractController', () => {
10821078
10831079 it ( 'should throw missing provider error when transferring single ERC-1155 when missing provider' , async ( ) => {
10841080 const { assetsContract, messenger } = await setupAssetContractControllers ( ) ;
1085- assetsContract . configure ( { provider : undefined } ) ;
1081+ assetsContract . provider = undefined ;
10861082 await expect (
10871083 assetsContract . transferSingleERC1155 (
10881084 ERC1155_ADDRESS ,
@@ -1098,7 +1094,7 @@ describe('AssetsContractController', () => {
10981094 it ( 'should throw when ERC1155 function transferSingle is not defined' , async ( ) => {
10991095 const { assetsContract, messenger, provider, networkClientConfiguration } =
11001096 await setupAssetContractControllers ( ) ;
1101- assetsContract . configure ( { provider } ) ;
1097+ assetsContract . provider = provider ;
11021098 mockNetworkWithDefaultChainId ( {
11031099 networkClientConfiguration,
11041100 mocks : [
@@ -1135,7 +1131,7 @@ describe('AssetsContractController', () => {
11351131 it ( 'should get the balance of a ERC-1155 NFT for a given address' , async ( ) => {
11361132 const { assetsContract, messenger, provider, networkClientConfiguration } =
11371133 await setupAssetContractControllers ( ) ;
1138- assetsContract . configure ( { provider } ) ;
1134+ assetsContract . provider = provider ;
11391135 mockNetworkWithDefaultChainId ( {
11401136 networkClientConfiguration,
11411137 mocks : [
@@ -1181,7 +1177,7 @@ describe('AssetsContractController', () => {
11811177 it ( 'should get the URI of a ERC-1155 NFT' , async ( ) => {
11821178 const { assetsContract, messenger, provider, networkClientConfiguration } =
11831179 await setupAssetContractControllers ( ) ;
1184- assetsContract . configure ( { provider } ) ;
1180+ assetsContract . provider = provider ;
11851181 mockNetworkWithDefaultChainId ( {
11861182 networkClientConfiguration,
11871183 mocks : [
0 commit comments