1
- import type { RestrictedMessenger } from '@metamask/base-controller' ;
2
- import { BaseController } from '@metamask/base-controller' ;
1
+ import {
2
+ BaseController ,
3
+ type ControllerGetStateAction ,
4
+ type ControllerStateChangeEvent ,
5
+ } from '@metamask/base-controller/next' ;
6
+ import type { Messenger } from '@metamask/messenger' ;
3
7
import type {
4
8
BlockTrackerProxy ,
5
9
NetworkClientId ,
@@ -16,9 +20,8 @@ import type {
16
20
} from '@metamask/permission-controller' ;
17
21
import { createEventEmitterProxy } from '@metamask/swappable-obj-proxy' ;
18
22
import type { Hex } from '@metamask/utils' ;
19
- import type { Patch } from 'immer' ;
20
23
21
- export const controllerName = 'SelectedNetworkController' ;
24
+ const controllerName = 'SelectedNetworkController' ;
22
25
23
26
const stateMetadata = {
24
27
domains : { persist : true , anonymous : false } ,
@@ -46,15 +49,17 @@ export type SelectedNetworkControllerState = {
46
49
domains : Record < Domain , NetworkClientId > ;
47
50
} ;
48
51
49
- export type SelectedNetworkControllerStateChangeEvent = {
50
- type : typeof SelectedNetworkControllerEventTypes . stateChange ;
51
- payload : [ SelectedNetworkControllerState , Patch [ ] ] ;
52
- } ;
52
+ export type SelectedNetworkControllerStateChangeEvent =
53
+ ControllerStateChangeEvent <
54
+ typeof controllerName ,
55
+ SelectedNetworkControllerState
56
+ > ;
53
57
54
- export type SelectedNetworkControllerGetSelectedNetworkStateAction = {
55
- type : typeof SelectedNetworkControllerActionTypes . getState ;
56
- handler : ( ) => SelectedNetworkControllerState ;
57
- } ;
58
+ export type SelectedNetworkControllerGetSelectedNetworkStateAction =
59
+ ControllerGetStateAction <
60
+ typeof controllerName ,
61
+ SelectedNetworkControllerState
62
+ > ;
58
63
59
64
export type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {
60
65
type : typeof SelectedNetworkControllerActionTypes . getNetworkClientIdForDomain ;
@@ -71,7 +76,7 @@ export type SelectedNetworkControllerActions =
71
76
| SelectedNetworkControllerGetNetworkClientIdForDomainAction
72
77
| SelectedNetworkControllerSetNetworkClientIdForDomainAction ;
73
78
74
- export type AllowedActions =
79
+ type AllowedActions =
75
80
| NetworkControllerGetNetworkClientByIdAction
76
81
| NetworkControllerGetSelectedNetworkClientAction
77
82
| NetworkControllerGetStateAction
@@ -81,16 +86,14 @@ export type AllowedActions =
81
86
export type SelectedNetworkControllerEvents =
82
87
SelectedNetworkControllerStateChangeEvent ;
83
88
84
- export type AllowedEvents =
89
+ type AllowedEvents =
85
90
| NetworkControllerStateChangeEvent
86
91
| PermissionControllerStateChange ;
87
92
88
- export type SelectedNetworkControllerMessenger = RestrictedMessenger <
93
+ export type SelectedNetworkControllerMessenger = Messenger <
89
94
typeof controllerName ,
90
95
SelectedNetworkControllerActions | AllowedActions ,
91
- SelectedNetworkControllerEvents | AllowedEvents ,
92
- AllowedActions [ 'type' ] ,
93
- AllowedEvents [ 'type' ]
96
+ SelectedNetworkControllerEvents | AllowedEvents
94
97
> ;
95
98
96
99
export type SelectedNetworkControllerOptions = {
@@ -124,7 +127,7 @@ export class SelectedNetworkController extends BaseController<
124
127
* Construct a SelectedNetworkController controller.
125
128
*
126
129
* @param options - The controller options.
127
- * @param options.messenger - The restricted messenger for the EncryptionPublicKey controller.
130
+ * @param options.messenger - The messenger for the SelectedNetworkController controller.
128
131
* @param options.state - The controllers initial state.
129
132
* @param options.useRequestQueuePreference - A boolean indicating whether to use the request queue preference.
130
133
* @param options.onPreferencesStateChange - A callback that is called when the preference state changes.
@@ -148,18 +151,18 @@ export class SelectedNetworkController extends BaseController<
148
151
this . #registerMessageHandlers( ) ;
149
152
150
153
// 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)
151
- this . messagingSystem
154
+ this . messenger
152
155
. call ( 'PermissionController:getSubjectNames' )
153
156
. filter ( ( domain ) => this . state . domains [ domain ] === undefined )
154
157
. forEach ( ( domain ) =>
155
158
this . setNetworkClientIdForDomain (
156
159
domain ,
157
- this . messagingSystem . call ( 'NetworkController:getState' )
160
+ this . messenger . call ( 'NetworkController:getState' )
158
161
. selectedNetworkClientId ,
159
162
) ,
160
163
) ;
161
164
162
- this . messagingSystem . subscribe (
165
+ this . messenger . subscribe (
163
166
'PermissionController:stateChange' ,
164
167
( _ , patches ) => {
165
168
patches . forEach ( ( { op, path } ) => {
@@ -170,7 +173,7 @@ export class SelectedNetworkController extends BaseController<
170
173
if ( op === 'add' && this . state . domains [ domain ] === undefined ) {
171
174
this . setNetworkClientIdForDomain (
172
175
domain ,
173
- this . messagingSystem . call ( 'NetworkController:getState' )
176
+ this . messenger . call ( 'NetworkController:getState' )
174
177
. selectedNetworkClientId ,
175
178
) ;
176
179
} else if (
@@ -184,7 +187,7 @@ export class SelectedNetworkController extends BaseController<
184
187
} ,
185
188
) ;
186
189
187
- this . messagingSystem . subscribe (
190
+ this . messenger . subscribe (
188
191
'NetworkController:stateChange' ,
189
192
(
190
193
{ selectedNetworkClientId, networkConfigurationsByChainId } ,
@@ -199,12 +202,16 @@ export class SelectedNetworkController extends BaseController<
199
202
if ( patch ) {
200
203
const networkClientIdToChainId = Object . values (
201
204
networkConfigurationsByChainId ,
202
- ) . reduce ( ( acc , network ) => {
203
- network . rpcEndpoints . forEach (
204
- ( { networkClientId } ) => ( acc [ networkClientId ] = network . chainId ) ,
205
- ) ;
206
- return acc ;
207
- } , { } as Record < string , Hex > ) ;
205
+ ) . reduce (
206
+ ( acc , network ) => {
207
+ network . rpcEndpoints . forEach (
208
+ ( { networkClientId } ) =>
209
+ ( acc [ networkClientId ] = network . chainId ) ,
210
+ ) ;
211
+ return acc ;
212
+ } ,
213
+ { } as Record < string , Hex > ,
214
+ ) ;
208
215
209
216
Object . entries ( this . state . domains ) . forEach (
210
217
( [ domain , networkClientIdForDomain ] ) => {
@@ -259,11 +266,11 @@ export class SelectedNetworkController extends BaseController<
259
266
}
260
267
261
268
#registerMessageHandlers( ) : void {
262
- this . messagingSystem . registerActionHandler (
269
+ this . messenger . registerActionHandler (
263
270
SelectedNetworkControllerActionTypes . getNetworkClientIdForDomain ,
264
271
this . getNetworkClientIdForDomain . bind ( this ) ,
265
272
) ;
266
- this . messagingSystem . registerActionHandler (
273
+ this . messenger . registerActionHandler (
267
274
SelectedNetworkControllerActionTypes . setNetworkClientIdForDomain ,
268
275
this . setNetworkClientIdForDomain . bind ( this ) ,
269
276
) ;
@@ -273,7 +280,7 @@ export class SelectedNetworkController extends BaseController<
273
280
domain : Domain ,
274
281
networkClientId : NetworkClientId ,
275
282
) {
276
- const networkClient = this . messagingSystem . call (
283
+ const networkClient = this . messenger . call (
277
284
'NetworkController:getNetworkClientById' ,
278
285
networkClientId ,
279
286
) ;
@@ -296,7 +303,7 @@ export class SelectedNetworkController extends BaseController<
296
303
* @param domain - The domain for which to unset the network client ID.
297
304
*/
298
305
#unsetNetworkClientIdForDomain( domain : Domain ) {
299
- const globallySelectedNetworkClient = this . messagingSystem . call (
306
+ const globallySelectedNetworkClient = this . messenger . call (
300
307
'NetworkController:getSelectedNetworkClient' ,
301
308
) ;
302
309
const networkProxy = this . #domainProxyMap. get ( domain ) ;
@@ -314,18 +321,15 @@ export class SelectedNetworkController extends BaseController<
314
321
}
315
322
316
323
#domainHasPermissions( domain : Domain ) : boolean {
317
- return this . messagingSystem . call (
318
- 'PermissionController:hasPermissions' ,
319
- domain ,
320
- ) ;
324
+ return this . messenger . call ( 'PermissionController:hasPermissions' , domain ) ;
321
325
}
322
326
323
327
// Loop through all domains and for those with permissions it points that domain's proxy
324
328
// to an unproxied instance of the globally selected network client.
325
329
// NOT the NetworkController's proxy of the globally selected networkClient
326
330
#resetAllPermissionedDomains( ) {
327
331
this . #domainProxyMap. forEach ( ( _ : NetworkProxy , domain : string ) => {
328
- const { selectedNetworkClientId } = this . messagingSystem . call (
332
+ const { selectedNetworkClientId } = this . messenger . call (
329
333
'NetworkController:getState' ,
330
334
) ;
331
335
// can't use public setNetworkClientIdForDomain because it will throw an error
@@ -362,7 +366,7 @@ export class SelectedNetworkController extends BaseController<
362
366
363
367
getNetworkClientIdForDomain ( domain : Domain ) : NetworkClientId {
364
368
const { selectedNetworkClientId : metamaskSelectedNetworkClientId } =
365
- this . messagingSystem . call ( 'NetworkController:getState' ) ;
369
+ this . messenger . call ( 'NetworkController:getState' ) ;
366
370
if ( ! this . #useRequestQueuePreference) {
367
371
return metamaskSelectedNetworkClientId ;
368
372
}
@@ -378,7 +382,7 @@ export class SelectedNetworkController extends BaseController<
378
382
getProviderAndBlockTracker ( domain : Domain ) : NetworkProxy {
379
383
// If the domain is 'metamask', return the NetworkController's globally selected network client proxy
380
384
if ( domain === METAMASK_DOMAIN ) {
381
- const networkClient = this . messagingSystem . call (
385
+ const networkClient = this . messenger . call (
382
386
'NetworkController:getSelectedNetworkClient' ,
383
387
) ;
384
388
if ( networkClient === undefined ) {
@@ -395,12 +399,12 @@ export class SelectedNetworkController extends BaseController<
395
399
this . #domainHasPermissions( domain )
396
400
) {
397
401
const networkClientId = this . getNetworkClientIdForDomain ( domain ) ;
398
- networkClient = this . messagingSystem . call (
402
+ networkClient = this . messenger . call (
399
403
'NetworkController:getNetworkClientById' ,
400
404
networkClientId ,
401
405
) ;
402
406
} else {
403
- networkClient = this . messagingSystem . call (
407
+ networkClient = this . messenger . call (
404
408
'NetworkController:getSelectedNetworkClient' ,
405
409
) ;
406
410
if ( networkClient === undefined ) {
0 commit comments