@metamask-previews/selected-network-controller 18.0.0-preview-39802fe2 → 18.0.0-preview-3e4b1340

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,12 +4,12 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkZFFMRFO4js = require('./chunk-ZFFMRFO4.js');
7
+ var _chunk4HXG4CVZjs = require('./chunk-4HXG4CVZ.js');
8
8
 
9
9
 
10
10
 
11
11
 
12
12
 
13
13
 
14
- exports.METAMASK_DOMAIN = _chunkZFFMRFO4js.METAMASK_DOMAIN; exports.SelectedNetworkController = _chunkZFFMRFO4js.SelectedNetworkController; exports.SelectedNetworkControllerActionTypes = _chunkZFFMRFO4js.SelectedNetworkControllerActionTypes; exports.SelectedNetworkControllerEventTypes = _chunkZFFMRFO4js.SelectedNetworkControllerEventTypes; exports.controllerName = _chunkZFFMRFO4js.controllerName;
14
+ exports.METAMASK_DOMAIN = _chunk4HXG4CVZjs.METAMASK_DOMAIN; exports.SelectedNetworkController = _chunk4HXG4CVZjs.SelectedNetworkController; exports.SelectedNetworkControllerActionTypes = _chunk4HXG4CVZjs.SelectedNetworkControllerActionTypes; exports.SelectedNetworkControllerEventTypes = _chunk4HXG4CVZjs.SelectedNetworkControllerEventTypes; exports.controllerName = _chunk4HXG4CVZjs.controllerName;
15
15
  //# sourceMappingURL=SelectedNetworkController.js.map
@@ -4,7 +4,7 @@ import {
4
4
  SelectedNetworkControllerActionTypes,
5
5
  SelectedNetworkControllerEventTypes,
6
6
  controllerName
7
- } from "./chunk-D745I7P5.mjs";
7
+ } from "./chunk-QQROFIF4.mjs";
8
8
  export {
9
9
  METAMASK_DOMAIN,
10
10
  SelectedNetworkController,
@@ -1,8 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkH6ZVCOKDjs = require('./chunk-H6ZVCOKD.js');
4
- require('./chunk-ZFFMRFO4.js');
3
+ var _chunkSKLUXXC3js = require('./chunk-SKLUXXC3.js');
4
+ require('./chunk-4HXG4CVZ.js');
5
5
 
6
6
 
7
- exports.createSelectedNetworkMiddleware = _chunkH6ZVCOKDjs.createSelectedNetworkMiddleware;
7
+ exports.createSelectedNetworkMiddleware = _chunkSKLUXXC3js.createSelectedNetworkMiddleware;
8
8
  //# sourceMappingURL=SelectedNetworkMiddleware.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createSelectedNetworkMiddleware
3
- } from "./chunk-JFYFZWUW.mjs";
4
- import "./chunk-D745I7P5.mjs";
3
+ } from "./chunk-Q45PXQOC.mjs";
4
+ import "./chunk-QQROFIF4.mjs";
5
5
  export {
6
6
  createSelectedNetworkMiddleware
7
7
  };
@@ -23,7 +23,6 @@ var __privateMethod = (obj, member, method) => {
23
23
 
24
24
  // src/SelectedNetworkController.ts
25
25
  var _basecontroller = require('@metamask/base-controller');
26
- var _networkcontroller = require('@metamask/network-controller');
27
26
  var _swappableobjproxy = require('@metamask/swappable-obj-proxy');
28
27
  var controllerName = "SelectedNetworkController";
29
28
  var stateMetadata = {
@@ -34,13 +33,13 @@ var snapsPrefixes = ["npm:", "local:"];
34
33
  var METAMASK_DOMAIN = "metamask";
35
34
  var SelectedNetworkControllerActionTypes = {
36
35
  getState: `${controllerName}:getState`,
37
- getNetworkClientIdForDomain: `${controllerName}:getNetworkClientIdForDomain`,
38
- setNetworkClientIdForDomain: `${controllerName}:setNetworkClientIdForDomain`
36
+ getChainIdForDomain: `${controllerName}:getChainIdForDomain`,
37
+ setChainIdForDomain: `${controllerName}:setChainIdForDomain`
39
38
  };
40
39
  var SelectedNetworkControllerEventTypes = {
41
40
  stateChange: `${controllerName}:stateChange`
42
41
  };
43
- var _domainProxyMap, _useRequestQueuePreference, _registerMessageHandlers, registerMessageHandlers_fn, _setNetworkClientIdForDomain, setNetworkClientIdForDomain_fn, _unsetNetworkClientIdForDomain, unsetNetworkClientIdForDomain_fn, _domainHasPermissions, domainHasPermissions_fn, _resetAllPermissionedDomains, resetAllPermissionedDomains_fn;
42
+ var _domainProxyMap, _useRequestQueuePreference, _registerMessageHandlers, registerMessageHandlers_fn, _getSelectedChainId, getSelectedChainId_fn, _setChainIdForDomain, setChainIdForDomain_fn, _unsetChainIdForDomain, unsetChainIdForDomain_fn, _domainHasPermissions, domainHasPermissions_fn, _resetAllPermissionedDomains, resetAllPermissionedDomains_fn;
44
43
  var SelectedNetworkController = class extends _basecontroller.BaseController {
45
44
  /**
46
45
  * Construct a SelectedNetworkController controller.
@@ -66,14 +65,15 @@ var SelectedNetworkController = class extends _basecontroller.BaseController {
66
65
  state
67
66
  });
68
67
  __privateAdd(this, _registerMessageHandlers);
69
- __privateAdd(this, _setNetworkClientIdForDomain);
68
+ __privateAdd(this, _getSelectedChainId);
69
+ __privateAdd(this, _setChainIdForDomain);
70
70
  /**
71
71
  * This method is used when a domain is removed from the PermissionsController.
72
72
  * It will remove re-point the network proxy to the globally selected network in the domainProxyMap or, if no globally selected network client is available, delete the proxy.
73
73
  *
74
74
  * @param domain - The domain for which to unset the network client ID.
75
75
  */
76
- __privateAdd(this, _unsetNetworkClientIdForDomain);
76
+ __privateAdd(this, _unsetChainIdForDomain);
77
77
  __privateAdd(this, _domainHasPermissions);
78
78
  // Loop through all domains and for those with permissions it points that domain's proxy
79
79
  // to an unproxied instance of the globally selected network client.
@@ -84,26 +84,20 @@ var SelectedNetworkController = class extends _basecontroller.BaseController {
84
84
  __privateSet(this, _useRequestQueuePreference, useRequestQueuePreference);
85
85
  __privateSet(this, _domainProxyMap, domainProxyMap);
86
86
  __privateMethod(this, _registerMessageHandlers, registerMessageHandlers_fn).call(this);
87
- this.messagingSystem.call("PermissionController:getSubjectNames").filter((domain) => this.state.domains[domain] === void 0).forEach(
88
- (domain) => this.setNetworkClientIdForDomain(
89
- domain,
90
- this.messagingSystem.call("NetworkController:getState").selectedNetworkClientId
91
- )
92
- );
87
+ let selectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
88
+ this.messagingSystem.call("PermissionController:getSubjectNames").filter((domain) => this.state.domains[domain] === void 0).forEach((domain) => this.setChainIdForDomain(domain, selectedChainId));
93
89
  this.messagingSystem.subscribe(
94
90
  "PermissionController:stateChange",
95
91
  (_, patches) => {
92
+ selectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
96
93
  patches.forEach(({ op, path }) => {
97
94
  const isChangingSubject = path[0] === "subjects" && path[1] !== void 0;
98
95
  if (isChangingSubject && typeof path[1] === "string") {
99
96
  const domain = path[1];
100
97
  if (op === "add" && this.state.domains[domain] === void 0) {
101
- this.setNetworkClientIdForDomain(
102
- domain,
103
- this.messagingSystem.call("NetworkController:getState").selectedNetworkClientId
104
- );
98
+ this.setChainIdForDomain(domain, selectedChainId);
105
99
  } else if (op === "remove" && this.state.domains[domain] !== void 0) {
106
- __privateMethod(this, _unsetNetworkClientIdForDomain, unsetNetworkClientIdForDomain_fn).call(this, domain);
100
+ __privateMethod(this, _unsetChainIdForDomain, unsetChainIdForDomain_fn).call(this, domain);
107
101
  }
108
102
  }
109
103
  });
@@ -111,25 +105,29 @@ var SelectedNetworkController = class extends _basecontroller.BaseController {
111
105
  );
112
106
  this.messagingSystem.subscribe(
113
107
  "NetworkController:stateChange",
114
- (availableNetworkClientIds) => {
115
- const { selectedNetworkClientId } = this.messagingSystem.call(
116
- "NetworkController:getState"
108
+ ({ networkConfigurationsByChainId }, patches) => {
109
+ const patch = patches.find(
110
+ ({ op, path }) => (op === "replace" || op === "remove") && path[0] === "networkConfigurationsByChainId"
117
111
  );
118
- Object.entries(this.state.domains).forEach(
119
- ([domain, networkClientIdForDomain]) => {
120
- if (!availableNetworkClientIds.includes(networkClientIdForDomain)) {
121
- this.setNetworkClientIdForDomain(domain, selectedNetworkClientId);
112
+ if (patch) {
113
+ selectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
114
+ Object.entries(this.state.domains).forEach(
115
+ ([domain, chainIdForDomain]) => {
116
+ if (patch.op === "remove" && !networkConfigurationsByChainId[chainIdForDomain]) {
117
+ this.setChainIdForDomain(domain, selectedChainId);
118
+ } else if (patch.op === "replace" && chainIdForDomain === patch.path[1]) {
119
+ this.setChainIdForDomain(domain, chainIdForDomain);
120
+ }
122
121
  }
123
- }
124
- );
125
- },
126
- _networkcontroller.selectAvailableNetworkClientIds
122
+ );
123
+ }
124
+ }
127
125
  );
128
126
  onPreferencesStateChange(({ useRequestQueue }) => {
129
127
  if (__privateGet(this, _useRequestQueuePreference) !== useRequestQueue) {
130
128
  if (!useRequestQueue) {
131
129
  Object.keys(this.state.domains).forEach((domain) => {
132
- __privateMethod(this, _unsetNetworkClientIdForDomain, unsetNetworkClientIdForDomain_fn).call(this, domain);
130
+ __privateMethod(this, _unsetChainIdForDomain, unsetChainIdForDomain_fn).call(this, domain);
133
131
  });
134
132
  } else {
135
133
  __privateMethod(this, _resetAllPermissionedDomains, resetAllPermissionedDomains_fn).call(this);
@@ -138,13 +136,13 @@ var SelectedNetworkController = class extends _basecontroller.BaseController {
138
136
  }
139
137
  });
140
138
  }
141
- setNetworkClientIdForDomain(domain, networkClientId) {
139
+ setChainIdForDomain(domain, chainId) {
142
140
  if (!__privateGet(this, _useRequestQueuePreference)) {
143
141
  return;
144
142
  }
145
143
  if (domain === METAMASK_DOMAIN) {
146
144
  throw new Error(
147
- `NetworkClientId for domain "${METAMASK_DOMAIN}" cannot be set on the SelectedNetworkController`
145
+ `ChainId for domain "${METAMASK_DOMAIN}" cannot be set on the SelectedNetworkController`
148
146
  );
149
147
  }
150
148
  if (snapsPrefixes.some((prefix) => domain.startsWith(prefix))) {
@@ -152,17 +150,17 @@ var SelectedNetworkController = class extends _basecontroller.BaseController {
152
150
  }
153
151
  if (!__privateMethod(this, _domainHasPermissions, domainHasPermissions_fn).call(this, domain)) {
154
152
  throw new Error(
155
- "NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions"
153
+ "ChainId for domain cannot be called with a domain that has not yet been granted permissions"
156
154
  );
157
155
  }
158
- __privateMethod(this, _setNetworkClientIdForDomain, setNetworkClientIdForDomain_fn).call(this, domain, networkClientId);
156
+ __privateMethod(this, _setChainIdForDomain, setChainIdForDomain_fn).call(this, domain, chainId);
159
157
  }
160
- getNetworkClientIdForDomain(domain) {
161
- const { selectedNetworkClientId: metamaskSelectedNetworkClientId } = this.messagingSystem.call("NetworkController:getState");
158
+ getChainIdForDomain(domain) {
159
+ const metamaskSelectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
162
160
  if (!__privateGet(this, _useRequestQueuePreference)) {
163
- return metamaskSelectedNetworkClientId;
161
+ return metamaskSelectedChainId;
164
162
  }
165
- return this.state.domains[domain] ?? metamaskSelectedNetworkClientId;
163
+ return this.state.domains[domain] ?? metamaskSelectedChainId;
166
164
  }
167
165
  /**
168
166
  * Accesses the provider and block tracker for the currently selected network.
@@ -184,7 +182,11 @@ var SelectedNetworkController = class extends _basecontroller.BaseController {
184
182
  if (networkProxy === void 0) {
185
183
  let networkClient;
186
184
  if (__privateGet(this, _useRequestQueuePreference) && __privateMethod(this, _domainHasPermissions, domainHasPermissions_fn).call(this, domain)) {
187
- const networkClientId = this.getNetworkClientIdForDomain(domain);
185
+ const chainId = this.getChainIdForDomain(domain);
186
+ const networkClientId = this.messagingSystem.call(
187
+ "NetworkController:getDefaultNetworkClientIdForChainId",
188
+ chainId
189
+ );
188
190
  networkClient = this.messagingSystem.call(
189
191
  "NetworkController:getNetworkClientById",
190
192
  networkClientId
@@ -213,16 +215,31 @@ _useRequestQueuePreference = new WeakMap();
213
215
  _registerMessageHandlers = new WeakSet();
214
216
  registerMessageHandlers_fn = function() {
215
217
  this.messagingSystem.registerActionHandler(
216
- SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,
217
- this.getNetworkClientIdForDomain.bind(this)
218
+ SelectedNetworkControllerActionTypes.getChainIdForDomain,
219
+ this.getChainIdForDomain.bind(this)
218
220
  );
219
221
  this.messagingSystem.registerActionHandler(
220
- SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,
221
- this.setNetworkClientIdForDomain.bind(this)
222
+ SelectedNetworkControllerActionTypes.setChainIdForDomain,
223
+ this.setChainIdForDomain.bind(this)
222
224
  );
223
225
  };
224
- _setNetworkClientIdForDomain = new WeakSet();
225
- setNetworkClientIdForDomain_fn = function(domain, networkClientId) {
226
+ _getSelectedChainId = new WeakSet();
227
+ getSelectedChainId_fn = function() {
228
+ const { selectedNetworkClientId } = this.messagingSystem.call(
229
+ "NetworkController:getState"
230
+ );
231
+ const { chainId } = this.messagingSystem.call(
232
+ "NetworkController:getNetworkConfigurationByNetworkClientId",
233
+ selectedNetworkClientId
234
+ );
235
+ return chainId;
236
+ };
237
+ _setChainIdForDomain = new WeakSet();
238
+ setChainIdForDomain_fn = function(domain, chainId) {
239
+ const networkClientId = this.messagingSystem.call(
240
+ "NetworkController:getDefaultNetworkClientIdForChainId",
241
+ chainId
242
+ );
226
243
  const networkClient = this.messagingSystem.call(
227
244
  "NetworkController:getNetworkClientById",
228
245
  networkClientId
@@ -231,11 +248,11 @@ setNetworkClientIdForDomain_fn = function(domain, networkClientId) {
231
248
  networkProxy.provider.setTarget(networkClient.provider);
232
249
  networkProxy.blockTracker.setTarget(networkClient.blockTracker);
233
250
  this.update((state) => {
234
- state.domains[domain] = networkClientId;
251
+ state.domains[domain] = chainId;
235
252
  });
236
253
  };
237
- _unsetNetworkClientIdForDomain = new WeakSet();
238
- unsetNetworkClientIdForDomain_fn = function(domain) {
254
+ _unsetChainIdForDomain = new WeakSet();
255
+ unsetChainIdForDomain_fn = function(domain) {
239
256
  const globallySelectedNetworkClient = this.messagingSystem.call(
240
257
  "NetworkController:getSelectedNetworkClient"
241
258
  );
@@ -262,11 +279,9 @@ domainHasPermissions_fn = function(domain) {
262
279
  _resetAllPermissionedDomains = new WeakSet();
263
280
  resetAllPermissionedDomains_fn = function() {
264
281
  __privateGet(this, _domainProxyMap).forEach((_, domain) => {
265
- const { selectedNetworkClientId } = this.messagingSystem.call(
266
- "NetworkController:getState"
267
- );
282
+ const selectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
268
283
  if (__privateMethod(this, _domainHasPermissions, domainHasPermissions_fn).call(this, domain)) {
269
- __privateMethod(this, _setNetworkClientIdForDomain, setNetworkClientIdForDomain_fn).call(this, domain, selectedNetworkClientId);
284
+ __privateMethod(this, _setChainIdForDomain, setChainIdForDomain_fn).call(this, domain, selectedChainId);
270
285
  }
271
286
  });
272
287
  };
@@ -278,4 +293,4 @@ resetAllPermissionedDomains_fn = function() {
278
293
 
279
294
 
280
295
  exports.controllerName = controllerName; exports.METAMASK_DOMAIN = METAMASK_DOMAIN; exports.SelectedNetworkControllerActionTypes = SelectedNetworkControllerActionTypes; exports.SelectedNetworkControllerEventTypes = SelectedNetworkControllerEventTypes; exports.SelectedNetworkController = SelectedNetworkController;
281
- //# sourceMappingURL=chunk-ZFFMRFO4.js.map
296
+ //# sourceMappingURL=chunk-4HXG4CVZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n BlockTrackerProxy,\n NetworkControllerGetDefaultNetworkClientIdForChainIdAction,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetNetworkConfigurationByNetworkClientId,\n NetworkControllerGetSelectedNetworkClientAction,\n NetworkControllerGetStateAction,\n NetworkControllerStateChangeEvent,\n ProviderProxy,\n} from '@metamask/network-controller';\nimport type {\n PermissionControllerStateChange,\n GetSubjects as PermissionControllerGetSubjectsAction,\n HasPermissions as PermissionControllerHasPermissions,\n} from '@metamask/permission-controller';\nimport { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';\nimport type { Hex } from '@metamask/utils';\nimport type { Patch } from 'immer';\n\nexport const controllerName = 'SelectedNetworkController';\n\nconst stateMetadata = {\n domains: { persist: true, anonymous: false },\n};\n\nconst getDefaultState = () => ({ domains: {} });\n\n// npm and local are currently the only valid prefixes for snap domains\n// TODO: eventually we maybe want to pull this in from snaps-utils to ensure it stays in sync\n// For now it seems like overkill to add a dependency for this one constant\n// https://github.com/MetaMask/snaps/blob/2beee7803bfe9e540788a3558b546b9f55dc3cb4/packages/snaps-utils/src/types.ts#L120\nconst snapsPrefixes = ['npm:', 'local:'] as const;\n\nexport type Domain = string;\n\nexport const METAMASK_DOMAIN = 'metamask' as const;\n\nexport const SelectedNetworkControllerActionTypes = {\n getState: `${controllerName}:getState` as const,\n getChainIdForDomain: `${controllerName}:getChainIdForDomain` as const,\n setChainIdForDomain: `${controllerName}:setChainIdForDomain` as const,\n};\n\nexport const SelectedNetworkControllerEventTypes = {\n stateChange: `${controllerName}:stateChange` as const,\n};\n\nexport type SelectedNetworkControllerState = {\n domains: Record<Domain, Hex>;\n};\n\nexport type SelectedNetworkControllerStateChangeEvent = {\n type: typeof SelectedNetworkControllerEventTypes.stateChange;\n payload: [SelectedNetworkControllerState, Patch[]];\n};\n\nexport type SelectedNetworkControllerGetSelectedNetworkStateAction = {\n type: typeof SelectedNetworkControllerActionTypes.getState;\n handler: () => SelectedNetworkControllerState;\n};\n\nexport type SelectedNetworkControllerGetChainIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.getChainIdForDomain;\n handler: SelectedNetworkController['getChainIdForDomain'];\n};\n\nexport type SelectedNetworkControllerSetChainIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.setChainIdForDomain;\n handler: SelectedNetworkController['setChainIdForDomain'];\n};\n\nexport type SelectedNetworkControllerActions =\n | SelectedNetworkControllerGetSelectedNetworkStateAction\n | SelectedNetworkControllerGetChainIdForDomainAction\n | SelectedNetworkControllerSetChainIdForDomainAction;\n\nexport type AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetSelectedNetworkClientAction\n | NetworkControllerGetDefaultNetworkClientIdForChainIdAction\n | NetworkControllerGetNetworkConfigurationByNetworkClientId\n | NetworkControllerGetStateAction\n | PermissionControllerHasPermissions\n | PermissionControllerGetSubjectsAction;\n\nexport type SelectedNetworkControllerEvents =\n SelectedNetworkControllerStateChangeEvent;\n\nexport type AllowedEvents =\n | NetworkControllerStateChangeEvent\n | PermissionControllerStateChange;\n\nexport type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SelectedNetworkControllerActions | AllowedActions,\n SelectedNetworkControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\nexport type SelectedNetworkControllerOptions = {\n state?: SelectedNetworkControllerState;\n messenger: SelectedNetworkControllerMessenger;\n useRequestQueuePreference: boolean;\n onPreferencesStateChange: (\n listener: (preferencesState: { useRequestQueue: boolean }) => void,\n ) => void;\n domainProxyMap: Map<Domain, NetworkProxy>;\n};\n\nexport type NetworkProxy = {\n provider: ProviderProxy;\n blockTracker: BlockTrackerProxy;\n};\n\n/**\n * Controller for getting and setting the network for a particular domain.\n */\nexport class SelectedNetworkController extends BaseController<\n typeof controllerName,\n SelectedNetworkControllerState,\n SelectedNetworkControllerMessenger\n> {\n #domainProxyMap: Map<Domain, NetworkProxy>;\n\n #useRequestQueuePreference: boolean;\n\n /**\n * Construct a SelectedNetworkController controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.\n * @param options.state - The controllers initial state.\n * @param options.useRequestQueuePreference - A boolean indicating whether to use the request queue preference.\n * @param options.onPreferencesStateChange - A callback that is called when the preference state changes.\n * @param options.domainProxyMap - A map for storing domain-specific proxies that are held in memory only during use.\n */\n constructor({\n messenger,\n state = getDefaultState(),\n useRequestQueuePreference,\n onPreferencesStateChange,\n domainProxyMap,\n }: SelectedNetworkControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state,\n });\n this.#useRequestQueuePreference = useRequestQueuePreference;\n this.#domainProxyMap = domainProxyMap;\n this.#registerMessageHandlers();\n\n let selectedChainId = this.#getSelectedChainId();\n // 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 chainId (fetched from the NetworkController)\n this.messagingSystem\n .call('PermissionController:getSubjectNames')\n .filter((domain) => this.state.domains[domain] === undefined)\n .forEach((domain) => this.setChainIdForDomain(domain, selectedChainId));\n\n this.messagingSystem.subscribe(\n 'PermissionController:stateChange',\n (_, patches) => {\n selectedChainId = this.#getSelectedChainId();\n patches.forEach(({ op, path }) => {\n const isChangingSubject =\n path[0] === 'subjects' && path[1] !== undefined;\n if (isChangingSubject && typeof path[1] === 'string') {\n const domain = path[1];\n if (op === 'add' && this.state.domains[domain] === undefined) {\n this.setChainIdForDomain(domain, selectedChainId);\n } else if (\n op === 'remove' &&\n this.state.domains[domain] !== undefined\n ) {\n this.#unsetChainIdForDomain(domain);\n }\n }\n });\n },\n );\n\n this.messagingSystem.subscribe(\n 'NetworkController:stateChange',\n ({ networkConfigurationsByChainId }, patches) => {\n const patch = patches.find(\n ({ op, path }) =>\n (op === 'replace' || op === 'remove') &&\n path[0] === 'networkConfigurationsByChainId',\n );\n\n if (patch) {\n selectedChainId = this.#getSelectedChainId();\n Object.entries(this.state.domains).forEach(\n ([domain, chainIdForDomain]) => {\n if (\n patch.op === 'remove' &&\n !networkConfigurationsByChainId[chainIdForDomain]\n ) {\n // If the network was removed, fall back to the globally selected network\n this.setChainIdForDomain(domain, selectedChainId);\n } else if (\n patch.op === 'replace' &&\n chainIdForDomain === patch.path[1]\n ) {\n // If the network was updated, redirect to the network's default endpoint\n this.setChainIdForDomain(domain, chainIdForDomain);\n }\n },\n );\n }\n },\n );\n\n onPreferencesStateChange(({ useRequestQueue }) => {\n if (this.#useRequestQueuePreference !== useRequestQueue) {\n if (!useRequestQueue) {\n // Loop through all domains and points each domain's proxy\n // to the NetworkController's own proxy of the globally selected networkClient\n Object.keys(this.state.domains).forEach((domain) => {\n this.#unsetChainIdForDomain(domain);\n });\n } else {\n this.#resetAllPermissionedDomains();\n }\n this.#useRequestQueuePreference = useRequestQueue;\n }\n });\n }\n\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.getChainIdForDomain,\n this.getChainIdForDomain.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.setChainIdForDomain,\n this.setChainIdForDomain.bind(this),\n );\n }\n\n #getSelectedChainId() {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n // this has to be defined though. add to eslint?\n const { chainId } = this.messagingSystem.call(\n 'NetworkController:getNetworkConfigurationByNetworkClientId',\n selectedNetworkClientId,\n )!;\n return chainId;\n }\n\n #setChainIdForDomain(domain: Domain, chainId: Hex) {\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:getDefaultNetworkClientIdForChainId',\n chainId,\n );\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n const networkProxy = this.getProviderAndBlockTracker(domain);\n networkProxy.provider.setTarget(networkClient.provider);\n networkProxy.blockTracker.setTarget(networkClient.blockTracker);\n\n this.update((state) => {\n state.domains[domain] = chainId;\n });\n }\n\n /**\n * This method is used when a domain is removed from the PermissionsController.\n * It will remove re-point the network proxy to the globally selected network in the domainProxyMap or, if no globally selected network client is available, delete the proxy.\n *\n * @param domain - The domain for which to unset the network client ID.\n */\n #unsetChainIdForDomain(domain: Domain) {\n const globallySelectedNetworkClient = this.messagingSystem.call(\n 'NetworkController:getSelectedNetworkClient',\n );\n const networkProxy = this.#domainProxyMap.get(domain);\n if (networkProxy && globallySelectedNetworkClient) {\n networkProxy.provider.setTarget(globallySelectedNetworkClient.provider);\n networkProxy.blockTracker.setTarget(\n globallySelectedNetworkClient.blockTracker,\n );\n } else if (networkProxy) {\n this.#domainProxyMap.delete(domain);\n }\n this.update((state) => {\n delete state.domains[domain];\n });\n }\n\n #domainHasPermissions(domain: Domain): boolean {\n return this.messagingSystem.call(\n 'PermissionController:hasPermissions',\n domain,\n );\n }\n\n // Loop through all domains and for those with permissions it points that domain's proxy\n // to an unproxied instance of the globally selected network client.\n // NOT the NetworkController's proxy of the globally selected networkClient\n #resetAllPermissionedDomains() {\n this.#domainProxyMap.forEach((_: NetworkProxy, domain: string) => {\n const selectedChainId = this.#getSelectedChainId();\n // can't use public setChainIdForDomain because it will throw an error\n // rather than simply skip if the domain doesn't have permissions which can happen\n // in this case since proxies are added for each site the user visits\n if (this.#domainHasPermissions(domain)) {\n this.#setChainIdForDomain(domain, selectedChainId);\n }\n });\n }\n\n setChainIdForDomain(domain: Domain, chainId: Hex) {\n if (!this.#useRequestQueuePreference) {\n return;\n }\n\n if (domain === METAMASK_DOMAIN) {\n throw new Error(\n `ChainId for domain \"${METAMASK_DOMAIN}\" cannot be set on the SelectedNetworkController`,\n );\n }\n\n if (snapsPrefixes.some((prefix) => domain.startsWith(prefix))) {\n return;\n }\n\n if (!this.#domainHasPermissions(domain)) {\n throw new Error(\n 'ChainId for domain cannot be called with a domain that has not yet been granted permissions',\n );\n }\n\n this.#setChainIdForDomain(domain, chainId);\n }\n\n getChainIdForDomain(domain: Domain): Hex {\n const metamaskSelectedChainId = this.#getSelectedChainId();\n if (!this.#useRequestQueuePreference) {\n return metamaskSelectedChainId;\n }\n return this.state.domains[domain] ?? metamaskSelectedChainId;\n }\n\n /**\n * Accesses the provider and block tracker for the currently selected network.\n *\n * @param domain - the domain for the provider\n * @returns The proxy and block tracker proxies.\n */\n getProviderAndBlockTracker(domain: Domain): NetworkProxy {\n // If the domain is 'metamask' or a snap, return the NetworkController's globally selected network client proxy\n if (\n domain === METAMASK_DOMAIN ||\n snapsPrefixes.some((prefix) => domain.startsWith(prefix))\n ) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getSelectedNetworkClient',\n );\n if (networkClient === undefined) {\n throw new Error('Selected network not initialized');\n }\n return networkClient;\n }\n\n let networkProxy = this.#domainProxyMap.get(domain);\n if (networkProxy === undefined) {\n let networkClient;\n if (\n this.#useRequestQueuePreference &&\n this.#domainHasPermissions(domain)\n ) {\n const chainId = this.getChainIdForDomain(domain);\n const networkClientId = this.messagingSystem.call(\n 'NetworkController:getDefaultNetworkClientIdForChainId',\n chainId,\n );\n networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n } else {\n networkClient = this.messagingSystem.call(\n 'NetworkController:getSelectedNetworkClient',\n );\n if (networkClient === undefined) {\n throw new Error('Selected network not initialized');\n }\n }\n networkProxy = {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n };\n this.#domainProxyMap.set(domain, networkProxy);\n }\n return networkProxy;\n }\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import {
2
+ SelectedNetworkControllerActionTypes
3
+ } from "./chunk-QQROFIF4.mjs";
4
+
5
+ // src/SelectedNetworkMiddleware.ts
6
+ var createSelectedNetworkMiddleware = (messenger) => {
7
+ const getChainIdForDomain = (origin) => messenger.call(
8
+ SelectedNetworkControllerActionTypes.getChainIdForDomain,
9
+ origin
10
+ );
11
+ const getDefaultNetworkClientIdForChainId = (chainId) => messenger.call(
12
+ "NetworkController:getDefaultNetworkClientIdForChainId",
13
+ chainId
14
+ );
15
+ return (req, _, next) => {
16
+ if (!req.origin) {
17
+ throw new Error("Request object is lacking an 'origin'");
18
+ }
19
+ req.chainId = getChainIdForDomain(req.origin);
20
+ req.networkClientId = getDefaultNetworkClientIdForChainId(req.chainId);
21
+ return next();
22
+ };
23
+ };
24
+
25
+ export {
26
+ createSelectedNetworkMiddleware
27
+ };
28
+ //# sourceMappingURL=chunk-Q45PXQOC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/SelectedNetworkMiddleware.ts"],"sourcesContent":["import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex, Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';\n\nimport type { SelectedNetworkControllerMessenger } from './SelectedNetworkController';\nimport { SelectedNetworkControllerActionTypes } from './SelectedNetworkController';\n\nexport type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {\n chainId?: Hex;\n networkClientId?: NetworkClientId;\n origin?: string;\n};\n\nexport const createSelectedNetworkMiddleware = (\n messenger: SelectedNetworkControllerMessenger,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n const getChainIdForDomain = (origin: string) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.getChainIdForDomain,\n origin,\n );\n\n const getDefaultNetworkClientIdForChainId = (chainId: Hex) =>\n messenger.call(\n 'NetworkController:getDefaultNetworkClientIdForChainId',\n chainId,\n );\n\n return (req: SelectedNetworkMiddlewareJsonRpcRequest, _, next) => {\n if (!req.origin) {\n throw new Error(\"Request object is lacking an 'origin'\");\n }\n\n req.chainId = getChainIdForDomain(req.origin);\n req.networkClientId = getDefaultNetworkClientIdForChainId(req.chainId);\n return next();\n };\n};\n"],"mappings":";;;;;AAaO,IAAM,kCAAkC,CAC7C,cAC2C;AAC3C,QAAM,sBAAsB,CAAC,WAC3B,UAAU;AAAA,IACR,qCAAqC;AAAA,IACrC;AAAA,EACF;AAEF,QAAM,sCAAsC,CAAC,YAC3C,UAAU;AAAA,IACR;AAAA,IACA;AAAA,EACF;AAEF,SAAO,CAAC,KAA8C,GAAG,SAAS;AAChE,QAAI,CAAC,IAAI,QAAQ;AACf,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,QAAI,UAAU,oBAAoB,IAAI,MAAM;AAC5C,QAAI,kBAAkB,oCAAoC,IAAI,OAAO;AACrE,WAAO,KAAK;AAAA,EACd;AACF;","names":[]}
@@ -23,7 +23,6 @@ var __privateMethod = (obj, member, method) => {
23
23
 
24
24
  // src/SelectedNetworkController.ts
25
25
  import { BaseController } from "@metamask/base-controller";
26
- import { selectAvailableNetworkClientIds } from "@metamask/network-controller";
27
26
  import { createEventEmitterProxy } from "@metamask/swappable-obj-proxy";
28
27
  var controllerName = "SelectedNetworkController";
29
28
  var stateMetadata = {
@@ -34,13 +33,13 @@ var snapsPrefixes = ["npm:", "local:"];
34
33
  var METAMASK_DOMAIN = "metamask";
35
34
  var SelectedNetworkControllerActionTypes = {
36
35
  getState: `${controllerName}:getState`,
37
- getNetworkClientIdForDomain: `${controllerName}:getNetworkClientIdForDomain`,
38
- setNetworkClientIdForDomain: `${controllerName}:setNetworkClientIdForDomain`
36
+ getChainIdForDomain: `${controllerName}:getChainIdForDomain`,
37
+ setChainIdForDomain: `${controllerName}:setChainIdForDomain`
39
38
  };
40
39
  var SelectedNetworkControllerEventTypes = {
41
40
  stateChange: `${controllerName}:stateChange`
42
41
  };
43
- var _domainProxyMap, _useRequestQueuePreference, _registerMessageHandlers, registerMessageHandlers_fn, _setNetworkClientIdForDomain, setNetworkClientIdForDomain_fn, _unsetNetworkClientIdForDomain, unsetNetworkClientIdForDomain_fn, _domainHasPermissions, domainHasPermissions_fn, _resetAllPermissionedDomains, resetAllPermissionedDomains_fn;
42
+ var _domainProxyMap, _useRequestQueuePreference, _registerMessageHandlers, registerMessageHandlers_fn, _getSelectedChainId, getSelectedChainId_fn, _setChainIdForDomain, setChainIdForDomain_fn, _unsetChainIdForDomain, unsetChainIdForDomain_fn, _domainHasPermissions, domainHasPermissions_fn, _resetAllPermissionedDomains, resetAllPermissionedDomains_fn;
44
43
  var SelectedNetworkController = class extends BaseController {
45
44
  /**
46
45
  * Construct a SelectedNetworkController controller.
@@ -66,14 +65,15 @@ var SelectedNetworkController = class extends BaseController {
66
65
  state
67
66
  });
68
67
  __privateAdd(this, _registerMessageHandlers);
69
- __privateAdd(this, _setNetworkClientIdForDomain);
68
+ __privateAdd(this, _getSelectedChainId);
69
+ __privateAdd(this, _setChainIdForDomain);
70
70
  /**
71
71
  * This method is used when a domain is removed from the PermissionsController.
72
72
  * It will remove re-point the network proxy to the globally selected network in the domainProxyMap or, if no globally selected network client is available, delete the proxy.
73
73
  *
74
74
  * @param domain - The domain for which to unset the network client ID.
75
75
  */
76
- __privateAdd(this, _unsetNetworkClientIdForDomain);
76
+ __privateAdd(this, _unsetChainIdForDomain);
77
77
  __privateAdd(this, _domainHasPermissions);
78
78
  // Loop through all domains and for those with permissions it points that domain's proxy
79
79
  // to an unproxied instance of the globally selected network client.
@@ -84,26 +84,20 @@ var SelectedNetworkController = class extends BaseController {
84
84
  __privateSet(this, _useRequestQueuePreference, useRequestQueuePreference);
85
85
  __privateSet(this, _domainProxyMap, domainProxyMap);
86
86
  __privateMethod(this, _registerMessageHandlers, registerMessageHandlers_fn).call(this);
87
- this.messagingSystem.call("PermissionController:getSubjectNames").filter((domain) => this.state.domains[domain] === void 0).forEach(
88
- (domain) => this.setNetworkClientIdForDomain(
89
- domain,
90
- this.messagingSystem.call("NetworkController:getState").selectedNetworkClientId
91
- )
92
- );
87
+ let selectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
88
+ this.messagingSystem.call("PermissionController:getSubjectNames").filter((domain) => this.state.domains[domain] === void 0).forEach((domain) => this.setChainIdForDomain(domain, selectedChainId));
93
89
  this.messagingSystem.subscribe(
94
90
  "PermissionController:stateChange",
95
91
  (_, patches) => {
92
+ selectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
96
93
  patches.forEach(({ op, path }) => {
97
94
  const isChangingSubject = path[0] === "subjects" && path[1] !== void 0;
98
95
  if (isChangingSubject && typeof path[1] === "string") {
99
96
  const domain = path[1];
100
97
  if (op === "add" && this.state.domains[domain] === void 0) {
101
- this.setNetworkClientIdForDomain(
102
- domain,
103
- this.messagingSystem.call("NetworkController:getState").selectedNetworkClientId
104
- );
98
+ this.setChainIdForDomain(domain, selectedChainId);
105
99
  } else if (op === "remove" && this.state.domains[domain] !== void 0) {
106
- __privateMethod(this, _unsetNetworkClientIdForDomain, unsetNetworkClientIdForDomain_fn).call(this, domain);
100
+ __privateMethod(this, _unsetChainIdForDomain, unsetChainIdForDomain_fn).call(this, domain);
107
101
  }
108
102
  }
109
103
  });
@@ -111,25 +105,29 @@ var SelectedNetworkController = class extends BaseController {
111
105
  );
112
106
  this.messagingSystem.subscribe(
113
107
  "NetworkController:stateChange",
114
- (availableNetworkClientIds) => {
115
- const { selectedNetworkClientId } = this.messagingSystem.call(
116
- "NetworkController:getState"
108
+ ({ networkConfigurationsByChainId }, patches) => {
109
+ const patch = patches.find(
110
+ ({ op, path }) => (op === "replace" || op === "remove") && path[0] === "networkConfigurationsByChainId"
117
111
  );
118
- Object.entries(this.state.domains).forEach(
119
- ([domain, networkClientIdForDomain]) => {
120
- if (!availableNetworkClientIds.includes(networkClientIdForDomain)) {
121
- this.setNetworkClientIdForDomain(domain, selectedNetworkClientId);
112
+ if (patch) {
113
+ selectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
114
+ Object.entries(this.state.domains).forEach(
115
+ ([domain, chainIdForDomain]) => {
116
+ if (patch.op === "remove" && !networkConfigurationsByChainId[chainIdForDomain]) {
117
+ this.setChainIdForDomain(domain, selectedChainId);
118
+ } else if (patch.op === "replace" && chainIdForDomain === patch.path[1]) {
119
+ this.setChainIdForDomain(domain, chainIdForDomain);
120
+ }
122
121
  }
123
- }
124
- );
125
- },
126
- selectAvailableNetworkClientIds
122
+ );
123
+ }
124
+ }
127
125
  );
128
126
  onPreferencesStateChange(({ useRequestQueue }) => {
129
127
  if (__privateGet(this, _useRequestQueuePreference) !== useRequestQueue) {
130
128
  if (!useRequestQueue) {
131
129
  Object.keys(this.state.domains).forEach((domain) => {
132
- __privateMethod(this, _unsetNetworkClientIdForDomain, unsetNetworkClientIdForDomain_fn).call(this, domain);
130
+ __privateMethod(this, _unsetChainIdForDomain, unsetChainIdForDomain_fn).call(this, domain);
133
131
  });
134
132
  } else {
135
133
  __privateMethod(this, _resetAllPermissionedDomains, resetAllPermissionedDomains_fn).call(this);
@@ -138,13 +136,13 @@ var SelectedNetworkController = class extends BaseController {
138
136
  }
139
137
  });
140
138
  }
141
- setNetworkClientIdForDomain(domain, networkClientId) {
139
+ setChainIdForDomain(domain, chainId) {
142
140
  if (!__privateGet(this, _useRequestQueuePreference)) {
143
141
  return;
144
142
  }
145
143
  if (domain === METAMASK_DOMAIN) {
146
144
  throw new Error(
147
- `NetworkClientId for domain "${METAMASK_DOMAIN}" cannot be set on the SelectedNetworkController`
145
+ `ChainId for domain "${METAMASK_DOMAIN}" cannot be set on the SelectedNetworkController`
148
146
  );
149
147
  }
150
148
  if (snapsPrefixes.some((prefix) => domain.startsWith(prefix))) {
@@ -152,17 +150,17 @@ var SelectedNetworkController = class extends BaseController {
152
150
  }
153
151
  if (!__privateMethod(this, _domainHasPermissions, domainHasPermissions_fn).call(this, domain)) {
154
152
  throw new Error(
155
- "NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions"
153
+ "ChainId for domain cannot be called with a domain that has not yet been granted permissions"
156
154
  );
157
155
  }
158
- __privateMethod(this, _setNetworkClientIdForDomain, setNetworkClientIdForDomain_fn).call(this, domain, networkClientId);
156
+ __privateMethod(this, _setChainIdForDomain, setChainIdForDomain_fn).call(this, domain, chainId);
159
157
  }
160
- getNetworkClientIdForDomain(domain) {
161
- const { selectedNetworkClientId: metamaskSelectedNetworkClientId } = this.messagingSystem.call("NetworkController:getState");
158
+ getChainIdForDomain(domain) {
159
+ const metamaskSelectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
162
160
  if (!__privateGet(this, _useRequestQueuePreference)) {
163
- return metamaskSelectedNetworkClientId;
161
+ return metamaskSelectedChainId;
164
162
  }
165
- return this.state.domains[domain] ?? metamaskSelectedNetworkClientId;
163
+ return this.state.domains[domain] ?? metamaskSelectedChainId;
166
164
  }
167
165
  /**
168
166
  * Accesses the provider and block tracker for the currently selected network.
@@ -184,7 +182,11 @@ var SelectedNetworkController = class extends BaseController {
184
182
  if (networkProxy === void 0) {
185
183
  let networkClient;
186
184
  if (__privateGet(this, _useRequestQueuePreference) && __privateMethod(this, _domainHasPermissions, domainHasPermissions_fn).call(this, domain)) {
187
- const networkClientId = this.getNetworkClientIdForDomain(domain);
185
+ const chainId = this.getChainIdForDomain(domain);
186
+ const networkClientId = this.messagingSystem.call(
187
+ "NetworkController:getDefaultNetworkClientIdForChainId",
188
+ chainId
189
+ );
188
190
  networkClient = this.messagingSystem.call(
189
191
  "NetworkController:getNetworkClientById",
190
192
  networkClientId
@@ -213,16 +215,31 @@ _useRequestQueuePreference = new WeakMap();
213
215
  _registerMessageHandlers = new WeakSet();
214
216
  registerMessageHandlers_fn = function() {
215
217
  this.messagingSystem.registerActionHandler(
216
- SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,
217
- this.getNetworkClientIdForDomain.bind(this)
218
+ SelectedNetworkControllerActionTypes.getChainIdForDomain,
219
+ this.getChainIdForDomain.bind(this)
218
220
  );
219
221
  this.messagingSystem.registerActionHandler(
220
- SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,
221
- this.setNetworkClientIdForDomain.bind(this)
222
+ SelectedNetworkControllerActionTypes.setChainIdForDomain,
223
+ this.setChainIdForDomain.bind(this)
222
224
  );
223
225
  };
224
- _setNetworkClientIdForDomain = new WeakSet();
225
- setNetworkClientIdForDomain_fn = function(domain, networkClientId) {
226
+ _getSelectedChainId = new WeakSet();
227
+ getSelectedChainId_fn = function() {
228
+ const { selectedNetworkClientId } = this.messagingSystem.call(
229
+ "NetworkController:getState"
230
+ );
231
+ const { chainId } = this.messagingSystem.call(
232
+ "NetworkController:getNetworkConfigurationByNetworkClientId",
233
+ selectedNetworkClientId
234
+ );
235
+ return chainId;
236
+ };
237
+ _setChainIdForDomain = new WeakSet();
238
+ setChainIdForDomain_fn = function(domain, chainId) {
239
+ const networkClientId = this.messagingSystem.call(
240
+ "NetworkController:getDefaultNetworkClientIdForChainId",
241
+ chainId
242
+ );
226
243
  const networkClient = this.messagingSystem.call(
227
244
  "NetworkController:getNetworkClientById",
228
245
  networkClientId
@@ -231,11 +248,11 @@ setNetworkClientIdForDomain_fn = function(domain, networkClientId) {
231
248
  networkProxy.provider.setTarget(networkClient.provider);
232
249
  networkProxy.blockTracker.setTarget(networkClient.blockTracker);
233
250
  this.update((state) => {
234
- state.domains[domain] = networkClientId;
251
+ state.domains[domain] = chainId;
235
252
  });
236
253
  };
237
- _unsetNetworkClientIdForDomain = new WeakSet();
238
- unsetNetworkClientIdForDomain_fn = function(domain) {
254
+ _unsetChainIdForDomain = new WeakSet();
255
+ unsetChainIdForDomain_fn = function(domain) {
239
256
  const globallySelectedNetworkClient = this.messagingSystem.call(
240
257
  "NetworkController:getSelectedNetworkClient"
241
258
  );
@@ -262,11 +279,9 @@ domainHasPermissions_fn = function(domain) {
262
279
  _resetAllPermissionedDomains = new WeakSet();
263
280
  resetAllPermissionedDomains_fn = function() {
264
281
  __privateGet(this, _domainProxyMap).forEach((_, domain) => {
265
- const { selectedNetworkClientId } = this.messagingSystem.call(
266
- "NetworkController:getState"
267
- );
282
+ const selectedChainId = __privateMethod(this, _getSelectedChainId, getSelectedChainId_fn).call(this);
268
283
  if (__privateMethod(this, _domainHasPermissions, domainHasPermissions_fn).call(this, domain)) {
269
- __privateMethod(this, _setNetworkClientIdForDomain, setNetworkClientIdForDomain_fn).call(this, domain, selectedNetworkClientId);
284
+ __privateMethod(this, _setChainIdForDomain, setChainIdForDomain_fn).call(this, domain, selectedChainId);
270
285
  }
271
286
  });
272
287
  };
@@ -278,4 +293,4 @@ export {
278
293
  SelectedNetworkControllerEventTypes,
279
294
  SelectedNetworkController
280
295
  };
281
- //# sourceMappingURL=chunk-D745I7P5.mjs.map
296
+ //# sourceMappingURL=chunk-QQROFIF4.mjs.map