@@ -4,6 +4,7 @@ import { BN } from 'ethereumjs-util';
4
4
import {
5
5
NetworkController ,
6
6
NetworkControllerMessenger ,
7
+ NetworkControllerProviderChangeEvent ,
7
8
NetworkControllerStateChangeEvent ,
8
9
NetworksChainId ,
9
10
} from '../network/NetworkController' ;
@@ -82,46 +83,47 @@ const sampleTokenB: Token = {
82
83
aggregators : formattedSampleAggregators ,
83
84
} ;
84
85
85
- /**
86
- * Constructs a restricted controller messenger for TokenList.
87
- *
88
- * @returns A restricted controller messenger.
89
- */
90
- function getTokenListMessenger ( ) {
91
- const controllerMessenger = new ControllerMessenger <
92
- GetTokenListState ,
93
- TokenListStateChange
94
- > ( ) ;
95
- const messenger = controllerMessenger . getRestricted <
96
- 'TokenListController' ,
97
- never ,
98
- TokenListStateChange [ 'type' ]
99
- > ( {
86
+ type MainControllerMessenger = ControllerMessenger < GetTokenListState , TokenListStateChange | NetworkControllerProviderChangeEvent | NetworkControllerStateChangeEvent > ;
87
+
88
+ const getControllerMessenger = ( ) : MainControllerMessenger => {
89
+ return new ControllerMessenger ( ) ;
90
+ } ;
91
+
92
+ const setupNetworkController = ( controllerMessenger : MainControllerMessenger ) => {
93
+ const networkMessenger = controllerMessenger . getRestricted ( {
94
+ name : 'NetworkController' ,
95
+ allowedEvents : [
96
+ 'NetworkController:providerChange' ,
97
+ 'NetworkController:stateChange' ,
98
+ ] ,
99
+ allowedActions : [ ] ,
100
+ } ) ;
101
+
102
+ const network = new NetworkController ( {
103
+ messenger : networkMessenger ,
104
+ infuraProjectId : '123' ,
105
+ } ) ;
106
+
107
+ return { network, networkMessenger } ;
108
+ } ;
109
+
110
+ const setupTokenListController = ( controllerMessenger : MainControllerMessenger ) => {
111
+ const tokenListMessenger = controllerMessenger . getRestricted ( {
100
112
name : 'TokenListController' ,
101
- allowedEvents : [ 'TokenListController:stateChange' ] ,
113
+ allowedActions : [ ] ,
114
+ allowedEvents : [
115
+ 'TokenListController:stateChange' ,
116
+ 'NetworkController:providerChange'
117
+ ] ,
102
118
} ) ;
103
- return messenger ;
104
- }
105
119
106
- /**
107
- * Constructs a restricted controller messenger for NetworkController.
108
- *
109
- * @returns A restricted controller messenger.
110
- */
111
- function getNetworkMessenger ( ) {
112
- const controllerMessenger = new ControllerMessenger <
113
- never ,
114
- NetworkControllerStateChangeEvent
115
- > ( ) ;
116
- const messenger = controllerMessenger . getRestricted <
117
- 'NetworkController' ,
118
- never ,
119
- NetworkControllerStateChangeEvent [ 'type' ]
120
- > ( {
121
- name : 'NetworkController' ,
122
- allowedEvents : [ 'NetworkController:stateChange' ] ,
120
+ const tokenList = new TokenListController ( {
121
+ chainId : NetworksChainId . mainnet ,
122
+ preventPollingOnNetworkRestart : false ,
123
+ messenger : tokenListMessenger ,
123
124
} ) ;
124
- return messenger ;
125
+
126
+ return { tokenList, tokenListMessenger } ;
125
127
}
126
128
127
129
describe ( 'TokenDetectionController' , ( ) => {
@@ -131,6 +133,7 @@ describe('TokenDetectionController', () => {
131
133
let networkMessenger : NetworkControllerMessenger ;
132
134
let tokensController : TokensController ;
133
135
let tokenList : TokenListController ;
136
+ let controllerMessenger : MainControllerMessenger ;
134
137
let getBalancesInSingleCall : sinon . SinonStub <
135
138
Parameters < AssetsContractController [ 'getBalancesInSingleCall' ] > ,
136
139
ReturnType < AssetsContractController [ 'getBalancesInSingleCall' ] >
@@ -151,33 +154,25 @@ describe('TokenDetectionController', () => {
151
154
. persist ( ) ;
152
155
153
156
preferences = new PreferencesController ( { } , { useTokenDetection : true } ) ;
154
- networkMessenger = getNetworkMessenger ( ) ;
155
- network = new NetworkController ( {
156
- messenger : networkMessenger ,
157
- infuraProjectId : '123' ,
158
- } ) ;
159
-
157
+ controllerMessenger = getControllerMessenger ( ) ;
158
+ const networkSetup = setupNetworkController ( controllerMessenger ) ;
159
+ network = networkSetup . network ;
160
+ networkMessenger = networkSetup . networkMessenger ;
160
161
tokensController = new TokensController ( {
161
162
onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
162
163
onNetworkStateChange : ( listener ) =>
163
164
networkMessenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
164
165
} ) ;
165
- const messenger = getTokenListMessenger ( ) ;
166
- tokenList = new TokenListController ( {
167
- chainId : NetworksChainId . mainnet ,
168
- preventPollingOnNetworkRestart : false ,
169
- onNetworkStateChange : ( listener ) =>
170
- networkMessenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
171
- messenger,
172
- } ) ;
166
+ const tokenListSetup = setupTokenListController ( controllerMessenger ) ;
167
+ tokenList = tokenListSetup . tokenList ;
173
168
await tokenList . start ( ) ;
174
169
getBalancesInSingleCall = sinon . stub ( ) ;
175
170
tokenDetection = new TokenDetectionController ( {
176
171
onPreferencesStateChange : ( listener ) => preferences . subscribe ( listener ) ,
177
172
onNetworkStateChange : ( listener ) =>
178
173
networkMessenger . subscribe ( 'NetworkController:stateChange' , listener ) ,
179
174
onTokenListStateChange : ( listener ) =>
180
- messenger . subscribe ( `TokenListController:stateChange` , listener ) ,
175
+ tokenListSetup . tokenListMessenger . subscribe ( `TokenListController:stateChange` , listener ) ,
181
176
getBalancesInSingleCall :
182
177
getBalancesInSingleCall as unknown as AssetsContractController [ 'getBalancesInSingleCall' ] ,
183
178
addDetectedTokens :
@@ -198,7 +193,7 @@ describe('TokenDetectionController', () => {
198
193
sinon . restore ( ) ;
199
194
tokenDetection . stop ( ) ;
200
195
tokenList . destroy ( ) ;
201
- networkMessenger . clearEventSubscriptions ( 'NetworkController:stateChange' ) ;
196
+ controllerMessenger . clearEventSubscriptions ( 'NetworkController:stateChange' ) ;
202
197
} ) ;
203
198
204
199
it ( 'should set default config' , ( ) => {
0 commit comments