@metamask-previews/selected-network-controller 26.1.7-preview-5b293ee50 → 26.1.7-preview-3866c0ff1

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.
Files changed (44) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/{SelectedNetworkController-method-action-types.d.mts → SelectedNetworkController-method-action-types.d.ts} +2 -2
  3. package/dist/SelectedNetworkController-method-action-types.d.ts.map +1 -0
  4. package/dist/{SelectedNetworkController-method-action-types.mjs → SelectedNetworkController-method-action-types.js} +1 -1
  5. package/dist/SelectedNetworkController-method-action-types.js.map +1 -0
  6. package/dist/{SelectedNetworkController.d.cts → SelectedNetworkController.d.ts} +8 -8
  7. package/dist/SelectedNetworkController.d.ts.map +1 -0
  8. package/dist/{SelectedNetworkController.mjs → SelectedNetworkController.js} +45 -50
  9. package/dist/SelectedNetworkController.js.map +1 -0
  10. package/dist/SelectedNetworkMiddleware.d.ts +10 -0
  11. package/dist/SelectedNetworkMiddleware.d.ts.map +1 -0
  12. package/dist/{SelectedNetworkMiddleware.mjs → SelectedNetworkMiddleware.js} +2 -2
  13. package/dist/SelectedNetworkMiddleware.js.map +1 -0
  14. package/dist/{index.d.cts → index.d.ts} +6 -6
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +3 -0
  17. package/dist/index.js.map +1 -0
  18. package/package.json +13 -17
  19. package/dist/SelectedNetworkController-method-action-types.cjs +0 -7
  20. package/dist/SelectedNetworkController-method-action-types.cjs.map +0 -1
  21. package/dist/SelectedNetworkController-method-action-types.d.cts +0 -28
  22. package/dist/SelectedNetworkController-method-action-types.d.cts.map +0 -1
  23. package/dist/SelectedNetworkController-method-action-types.d.mts.map +0 -1
  24. package/dist/SelectedNetworkController-method-action-types.mjs.map +0 -1
  25. package/dist/SelectedNetworkController.cjs +0 -195
  26. package/dist/SelectedNetworkController.cjs.map +0 -1
  27. package/dist/SelectedNetworkController.d.cts.map +0 -1
  28. package/dist/SelectedNetworkController.d.mts +0 -66
  29. package/dist/SelectedNetworkController.d.mts.map +0 -1
  30. package/dist/SelectedNetworkController.mjs.map +0 -1
  31. package/dist/SelectedNetworkMiddleware.cjs +0 -16
  32. package/dist/SelectedNetworkMiddleware.cjs.map +0 -1
  33. package/dist/SelectedNetworkMiddleware.d.cts +0 -10
  34. package/dist/SelectedNetworkMiddleware.d.cts.map +0 -1
  35. package/dist/SelectedNetworkMiddleware.d.mts +0 -10
  36. package/dist/SelectedNetworkMiddleware.d.mts.map +0 -1
  37. package/dist/SelectedNetworkMiddleware.mjs.map +0 -1
  38. package/dist/index.cjs +0 -11
  39. package/dist/index.cjs.map +0 -1
  40. package/dist/index.d.cts.map +0 -1
  41. package/dist/index.d.mts +0 -6
  42. package/dist/index.d.mts.map +0 -1
  43. package/dist/index.mjs +0 -3
  44. package/dist/index.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Changed
11
+
12
+ - **BREAKING:** Bump minimum Node.js version to 22 ([#9168](https://github.com/MetaMask/core/pull/9168))
13
+
10
14
  ## [26.1.7]
11
15
 
12
16
  ### Changed
@@ -2,7 +2,7 @@
2
2
  * This file is auto generated.
3
3
  * Do not edit manually.
4
4
  */
5
- import type { SelectedNetworkController } from "./SelectedNetworkController.mjs";
5
+ import type { SelectedNetworkController } from './SelectedNetworkController.js';
6
6
  export type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {
7
7
  type: `SelectedNetworkController:setNetworkClientIdForDomain`;
8
8
  handler: SelectedNetworkController['setNetworkClientIdForDomain'];
@@ -25,4 +25,4 @@ export type SelectedNetworkControllerGetProviderAndBlockTrackerAction = {
25
25
  * Union of all SelectedNetworkController action types.
26
26
  */
27
27
  export type SelectedNetworkControllerMethodActions = SelectedNetworkControllerSetNetworkClientIdForDomainAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerGetProviderAndBlockTrackerAction;
28
- //# sourceMappingURL=SelectedNetworkController-method-action-types.d.mts.map
28
+ //# sourceMappingURL=SelectedNetworkController-method-action-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedNetworkController-method-action-types.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,uDAAuD,CAAC;IAC9D,OAAO,EAAE,yBAAyB,CAAC,6BAA6B,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,uDAAuD,CAAC;IAC9D,OAAO,EAAE,yBAAyB,CAAC,6BAA6B,CAAC,CAAC;CACnE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,yDAAyD,GAAG;IACtE,IAAI,EAAE,sDAAsD,CAAC;IAC7D,OAAO,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;CAClE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAC9C,0DAA0D,GAC1D,0DAA0D,GAC1D,yDAAyD,CAAC"}
@@ -3,4 +3,4 @@
3
3
  * Do not edit manually.
4
4
  */
5
5
  export {};
6
- //# sourceMappingURL=SelectedNetworkController-method-action-types.mjs.map
6
+ //# sourceMappingURL=SelectedNetworkController-method-action-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedNetworkController-method-action-types.js","sourceRoot":"","sources":["../src/SelectedNetworkController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated.\n * Do not edit manually.\n */\n\nimport type { SelectedNetworkController } from './SelectedNetworkController.js';\n\nexport type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {\n type: `SelectedNetworkController:setNetworkClientIdForDomain`;\n handler: SelectedNetworkController['setNetworkClientIdForDomain'];\n};\n\nexport type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {\n type: `SelectedNetworkController:getNetworkClientIdForDomain`;\n handler: SelectedNetworkController['getNetworkClientIdForDomain'];\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 */\nexport type SelectedNetworkControllerGetProviderAndBlockTrackerAction = {\n type: `SelectedNetworkController:getProviderAndBlockTracker`;\n handler: SelectedNetworkController['getProviderAndBlockTracker'];\n};\n\n/**\n * Union of all SelectedNetworkController action types.\n */\nexport type SelectedNetworkControllerMethodActions =\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerGetProviderAndBlockTrackerAction;\n"]}
@@ -1,12 +1,12 @@
1
- import { BaseController } from "@metamask/base-controller";
2
- import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
3
- import type { Messenger } from "@metamask/messenger";
4
- import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetSelectedNetworkClientAction, NetworkControllerGetStateAction, NetworkControllerStateChangeEvent, ProviderProxy } from "@metamask/network-controller";
5
- import type { PermissionControllerStateChange, PermissionControllerGetSubjectNamesAction as PermissionControllerGetSubjectsAction, PermissionControllerHasPermissionsAction as PermissionControllerHasPermissions } from "@metamask/permission-controller";
6
- import type { SelectedNetworkControllerMethodActions } from "./SelectedNetworkController-method-action-types.cjs";
1
+ import { BaseController } from '@metamask/base-controller';
2
+ import type { ControllerGetStateAction, ControllerStateChangeEvent } from '@metamask/base-controller';
3
+ import type { Messenger } from '@metamask/messenger';
4
+ import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetSelectedNetworkClientAction, NetworkControllerGetStateAction, NetworkControllerStateChangeEvent, ProviderProxy } from '@metamask/network-controller';
5
+ import type { PermissionControllerStateChange, PermissionControllerGetSubjectNamesAction as PermissionControllerGetSubjectsAction, PermissionControllerHasPermissionsAction as PermissionControllerHasPermissions } from '@metamask/permission-controller';
6
+ import type { SelectedNetworkControllerMethodActions } from './SelectedNetworkController-method-action-types.js';
7
7
  declare const controllerName = "SelectedNetworkController";
8
8
  export type Domain = string;
9
- export declare const METAMASK_DOMAIN: "metamask";
9
+ export declare const METAMASK_DOMAIN: 'metamask';
10
10
  export declare const SelectedNetworkControllerActionTypes: {
11
11
  getState: "SelectedNetworkController:getState";
12
12
  getNetworkClientIdForDomain: "SelectedNetworkController:getNetworkClientIdForDomain";
@@ -63,4 +63,4 @@ export declare class SelectedNetworkController extends BaseController<typeof con
63
63
  getProviderAndBlockTracker(domain: Domain): NetworkProxy;
64
64
  }
65
65
  export {};
66
- //# sourceMappingURL=SelectedNetworkController.d.cts.map
66
+ //# sourceMappingURL=SelectedNetworkController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedNetworkController.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,2CAA2C,EAC3C,+CAA+C,EAC/C,+BAA+B,EAC/B,iCAAiC,EACjC,aAAa,EACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EACV,+BAA+B,EAC/B,yCAAyC,IAAI,qCAAqC,EAClF,wCAAwC,IAAI,kCAAkC,EAC/E,MAAM,iCAAiC,CAAC;AAOzC,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,oDAAoD,CAAC;AAEjH,QAAA,MAAM,cAAc,8BAA8B,CAAC;AAmBnD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,eAAO,MAAM,eAAe,EAAG,UAAmB,CAAC;AAEnD,eAAO,MAAM,oCAAoC;IAC/C,QAAQ;IACR,2BAA2B;IAE3B,2BAA2B;CAE5B,CAAC;AAEF,eAAO,MAAM,mCAAmC;IAC9C,WAAW;CACZ,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,yCAAyC,GACnD,0BAA0B,CACxB,OAAO,cAAc,EACrB,8BAA8B,CAC/B,CAAC;AAEJ,MAAM,MAAM,uCAAuC,GAAG,wBAAwB,CAC5E,OAAO,cAAc,EACrB,8BAA8B,CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sDAAsD,GAChE,uCAAuC,CAAC;AAE1C,MAAM,MAAM,gCAAgC,GACxC,uCAAuC,GACvC,sCAAsC,CAAC;AAE3C,KAAK,cAAc,GACf,2CAA2C,GAC3C,+CAA+C,GAC/C,+BAA+B,GAC/B,kCAAkC,GAClC,qCAAqC,CAAC;AAE1C,MAAM,MAAM,+BAA+B,GACzC,yCAAyC,CAAC;AAE5C,KAAK,aAAa,GACd,iCAAiC,GACjC,+BAA+B,CAAC;AAEpC,MAAM,MAAM,kCAAkC,GAAG,SAAS,CACxD,OAAO,cAAc,EACrB,gCAAgC,GAAG,cAAc,EACjD,+BAA+B,GAAG,aAAa,CAChD,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,KAAK,CAAC,EAAE,8BAA8B,CAAC;IACvC,SAAS,EAAE,kCAAkC,CAAC;IAC9C,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,cAAc,CAC3D,OAAO,cAAc,EACrB,8BAA8B,EAC9B,kCAAkC,CACnC;;IAGC;;;;;;;OAOG;IACH,YAAY,EACV,SAAS,EACT,KAAyB,EACzB,cAAc,GACf,EAAE,gCAAgC,EA0GlC;IAkDD,2BAA2B,CACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,QAejC;IAED,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAK3D;IAED;;;;;OAKG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAsCvD;CACF"}
@@ -1,17 +1,5 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _SelectedNetworkController_instances, _SelectedNetworkController_domainProxyMap, _SelectedNetworkController_setNetworkClientIdForDomain, _SelectedNetworkController_unsetNetworkClientIdForDomain, _SelectedNetworkController_domainHasPermissions;
13
- import { BaseController } from "@metamask/base-controller";
14
- import { createEventEmitterProxy, createSwappableProxy } from "@metamask/swappable-obj-proxy";
1
+ import { BaseController } from '@metamask/base-controller';
2
+ import { createEventEmitterProxy, createSwappableProxy, } from '@metamask/swappable-obj-proxy';
15
3
  const controllerName = 'SelectedNetworkController';
16
4
  const MESSENGER_EXPOSED_METHODS = [
17
5
  'setNetworkClientIdForDomain',
@@ -40,6 +28,7 @@ export const SelectedNetworkControllerEventTypes = {
40
28
  * Controller for getting and setting the network for a particular domain.
41
29
  */
42
30
  export class SelectedNetworkController extends BaseController {
31
+ #domainProxyMap;
43
32
  /**
44
33
  * Construct a SelectedNetworkController controller.
45
34
  *
@@ -55,9 +44,7 @@ export class SelectedNetworkController extends BaseController {
55
44
  messenger,
56
45
  state,
57
46
  });
58
- _SelectedNetworkController_instances.add(this);
59
- _SelectedNetworkController_domainProxyMap.set(this, void 0);
60
- __classPrivateFieldSet(this, _SelectedNetworkController_domainProxyMap, domainProxyMap, "f");
47
+ this.#domainProxyMap = domainProxyMap;
61
48
  this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
62
49
  // 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)
63
50
  this.messenger
@@ -76,7 +63,7 @@ export class SelectedNetworkController extends BaseController {
76
63
  }
77
64
  else if (op === 'remove' &&
78
65
  this.state.domains[domain] !== undefined) {
79
- __classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_unsetNetworkClientIdForDomain).call(this, domain);
66
+ this.#unsetNetworkClientIdForDomain(domain);
80
67
  }
81
68
  }
82
69
  });
@@ -110,14 +97,48 @@ export class SelectedNetworkController extends BaseController {
110
97
  }
111
98
  });
112
99
  }
100
+ #setNetworkClientIdForDomain(domain, networkClientId) {
101
+ const networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
102
+ // This needs to happen before getProviderAndBlockTracker,
103
+ // otherwise we may be referencing a network client ID that no longer exists.
104
+ this.update((state) => {
105
+ state.domains[domain] = networkClientId;
106
+ });
107
+ const networkProxy = this.getProviderAndBlockTracker(domain);
108
+ networkProxy.provider.setTarget(networkClient.provider);
109
+ networkProxy.blockTracker.setTarget(networkClient.blockTracker);
110
+ }
111
+ /**
112
+ * This method is used when a domain is removed from the PermissionsController.
113
+ * 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.
114
+ *
115
+ * @param domain - The domain for which to unset the network client ID.
116
+ */
117
+ #unsetNetworkClientIdForDomain(domain) {
118
+ const globallySelectedNetworkClient = this.messenger.call('NetworkController:getSelectedNetworkClient');
119
+ const networkProxy = this.#domainProxyMap.get(domain);
120
+ if (networkProxy && globallySelectedNetworkClient) {
121
+ networkProxy.provider.setTarget(globallySelectedNetworkClient.provider);
122
+ networkProxy.blockTracker.setTarget(globallySelectedNetworkClient.blockTracker);
123
+ }
124
+ else if (networkProxy) {
125
+ this.#domainProxyMap.delete(domain);
126
+ }
127
+ this.update((state) => {
128
+ delete state.domains[domain];
129
+ });
130
+ }
131
+ #domainHasPermissions(domain) {
132
+ return this.messenger.call('PermissionController:hasPermissions', domain);
133
+ }
113
134
  setNetworkClientIdForDomain(domain, networkClientId) {
114
135
  if (domain === METAMASK_DOMAIN) {
115
136
  throw new Error(`NetworkClientId for domain "${METAMASK_DOMAIN}" cannot be set on the SelectedNetworkController`);
116
137
  }
117
- if (!__classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_domainHasPermissions).call(this, domain)) {
138
+ if (!this.#domainHasPermissions(domain)) {
118
139
  throw new Error('NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions');
119
140
  }
120
- __classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_setNetworkClientIdForDomain).call(this, domain, networkClientId);
141
+ this.#setNetworkClientIdForDomain(domain, networkClientId);
121
142
  }
122
143
  getNetworkClientIdForDomain(domain) {
123
144
  const { selectedNetworkClientId: metamaskSelectedNetworkClientId } = this.messenger.call('NetworkController:getState');
@@ -138,10 +159,10 @@ export class SelectedNetworkController extends BaseController {
138
159
  }
139
160
  return networkClient;
140
161
  }
141
- let networkProxy = __classPrivateFieldGet(this, _SelectedNetworkController_domainProxyMap, "f").get(domain);
162
+ let networkProxy = this.#domainProxyMap.get(domain);
142
163
  if (networkProxy === undefined) {
143
164
  let networkClient;
144
- if (__classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_domainHasPermissions).call(this, domain)) {
165
+ if (this.#domainHasPermissions(domain)) {
145
166
  const networkClientId = this.getNetworkClientIdForDomain(domain);
146
167
  networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
147
168
  }
@@ -157,35 +178,9 @@ export class SelectedNetworkController extends BaseController {
157
178
  eventFilter: 'skipInternal',
158
179
  }),
159
180
  };
160
- __classPrivateFieldGet(this, _SelectedNetworkController_domainProxyMap, "f").set(domain, networkProxy);
181
+ this.#domainProxyMap.set(domain, networkProxy);
161
182
  }
162
183
  return networkProxy;
163
184
  }
164
185
  }
165
- _SelectedNetworkController_domainProxyMap = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_setNetworkClientIdForDomain = function _SelectedNetworkController_setNetworkClientIdForDomain(domain, networkClientId) {
166
- const networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
167
- // This needs to happen before getProviderAndBlockTracker,
168
- // otherwise we may be referencing a network client ID that no longer exists.
169
- this.update((state) => {
170
- state.domains[domain] = networkClientId;
171
- });
172
- const networkProxy = this.getProviderAndBlockTracker(domain);
173
- networkProxy.provider.setTarget(networkClient.provider);
174
- networkProxy.blockTracker.setTarget(networkClient.blockTracker);
175
- }, _SelectedNetworkController_unsetNetworkClientIdForDomain = function _SelectedNetworkController_unsetNetworkClientIdForDomain(domain) {
176
- const globallySelectedNetworkClient = this.messenger.call('NetworkController:getSelectedNetworkClient');
177
- const networkProxy = __classPrivateFieldGet(this, _SelectedNetworkController_domainProxyMap, "f").get(domain);
178
- if (networkProxy && globallySelectedNetworkClient) {
179
- networkProxy.provider.setTarget(globallySelectedNetworkClient.provider);
180
- networkProxy.blockTracker.setTarget(globallySelectedNetworkClient.blockTracker);
181
- }
182
- else if (networkProxy) {
183
- __classPrivateFieldGet(this, _SelectedNetworkController_domainProxyMap, "f").delete(domain);
184
- }
185
- this.update((state) => {
186
- delete state.domains[domain];
187
- });
188
- }, _SelectedNetworkController_domainHasPermissions = function _SelectedNetworkController_domainHasPermissions(domain) {
189
- return this.messenger.call('PermissionController:hasPermissions', domain);
190
- };
191
- //# sourceMappingURL=SelectedNetworkController.mjs.map
186
+ //# sourceMappingURL=SelectedNetworkController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedNetworkController.js","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n BlockTrackerProxy,\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetSelectedNetworkClientAction,\n NetworkControllerGetStateAction,\n NetworkControllerStateChangeEvent,\n ProviderProxy,\n} from '@metamask/network-controller';\nimport type {\n PermissionControllerStateChange,\n PermissionControllerGetSubjectNamesAction as PermissionControllerGetSubjectsAction,\n PermissionControllerHasPermissionsAction as PermissionControllerHasPermissions,\n} from '@metamask/permission-controller';\nimport {\n createEventEmitterProxy,\n createSwappableProxy,\n} from '@metamask/swappable-obj-proxy';\nimport type { Hex } from '@metamask/utils';\n\nimport type { SelectedNetworkControllerMethodActions } from './SelectedNetworkController-method-action-types.js';\n\nconst controllerName = 'SelectedNetworkController';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'setNetworkClientIdForDomain',\n 'getNetworkClientIdForDomain',\n 'getProviderAndBlockTracker',\n] as const;\n\nconst stateMetadata = {\n domains: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({ domains: {} });\n\nexport type Domain = string;\n\nexport const METAMASK_DOMAIN = 'metamask' as const;\n\nexport const SelectedNetworkControllerActionTypes = {\n getState: `${controllerName}:getState` as const,\n getNetworkClientIdForDomain:\n `${controllerName}:getNetworkClientIdForDomain` as const,\n setNetworkClientIdForDomain:\n `${controllerName}:setNetworkClientIdForDomain` as const,\n};\n\nexport const SelectedNetworkControllerEventTypes = {\n stateChange: `${controllerName}:stateChange` as const,\n};\n\nexport type SelectedNetworkControllerState = {\n domains: Record<Domain, NetworkClientId>;\n};\n\nexport type SelectedNetworkControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n SelectedNetworkControllerState\n >;\n\nexport type SelectedNetworkControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n SelectedNetworkControllerState\n>;\n\n/**\n * @deprecated Use `SelectedNetworkControllerGetStateAction` instead.\n */\nexport type SelectedNetworkControllerGetSelectedNetworkStateAction =\n SelectedNetworkControllerGetStateAction;\n\nexport type SelectedNetworkControllerActions =\n | SelectedNetworkControllerGetStateAction\n | SelectedNetworkControllerMethodActions;\n\ntype AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetSelectedNetworkClientAction\n | NetworkControllerGetStateAction\n | PermissionControllerHasPermissions\n | PermissionControllerGetSubjectsAction;\n\nexport type SelectedNetworkControllerEvents =\n SelectedNetworkControllerStateChangeEvent;\n\ntype AllowedEvents =\n | NetworkControllerStateChangeEvent\n | PermissionControllerStateChange;\n\nexport type SelectedNetworkControllerMessenger = Messenger<\n typeof controllerName,\n SelectedNetworkControllerActions | AllowedActions,\n SelectedNetworkControllerEvents | AllowedEvents\n>;\n\nexport type SelectedNetworkControllerOptions = {\n state?: SelectedNetworkControllerState;\n messenger: SelectedNetworkControllerMessenger;\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 readonly #domainProxyMap: Map<Domain, NetworkProxy>;\n\n /**\n * Construct a SelectedNetworkController controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The messenger for the SelectedNetworkController controller.\n * @param options.state - The controllers initial state.\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 domainProxyMap,\n }: SelectedNetworkControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state,\n });\n this.#domainProxyMap = domainProxyMap;\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\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 networkClientId (fetched from the NetworkController)\n this.messenger\n .call('PermissionController:getSubjectNames')\n .filter((domain) => this.state.domains[domain] === undefined)\n .forEach((domain) =>\n this.setNetworkClientIdForDomain(\n domain,\n this.messenger.call('NetworkController:getState')\n .selectedNetworkClientId,\n ),\n );\n\n this.messenger.subscribe(\n 'PermissionController:stateChange',\n (_, patches) => {\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.setNetworkClientIdForDomain(\n domain,\n this.messenger.call('NetworkController:getState')\n .selectedNetworkClientId,\n );\n } else if (\n op === 'remove' &&\n this.state.domains[domain] !== undefined\n ) {\n this.#unsetNetworkClientIdForDomain(domain);\n }\n }\n });\n },\n );\n\n this.messenger.subscribe(\n 'NetworkController:stateChange',\n (\n { selectedNetworkClientId, networkConfigurationsByChainId },\n patches,\n ) => {\n const patch = patches.find(\n ({ op, path }) =>\n (op === 'replace' || op === 'remove') &&\n path[0] === 'networkConfigurationsByChainId',\n );\n\n if (patch) {\n const networkClientIdToChainId = Object.values(\n networkConfigurationsByChainId,\n ).reduce<Record<string, Hex>>((acc, network) => {\n network.rpcEndpoints.forEach(\n ({ networkClientId }) => (acc[networkClientId] = network.chainId),\n );\n return acc;\n }, {});\n\n Object.entries(this.state.domains).forEach(\n ([domain, networkClientIdForDomain]) => {\n const chainIdForDomain =\n networkClientIdToChainId[networkClientIdForDomain];\n\n if (patch.op === 'remove' && !chainIdForDomain) {\n // If the network was removed, fall back to the globally selected network\n this.setNetworkClientIdForDomain(\n domain,\n selectedNetworkClientId,\n );\n } else if (patch.op === 'replace') {\n // If the network was updated, redirect to the network's default endpoint\n const updatedChainId = patch.path[1] as Hex;\n if (!chainIdForDomain || chainIdForDomain === updatedChainId) {\n const network =\n networkConfigurationsByChainId[updatedChainId];\n\n const { networkClientId: defaultNetworkClientId } =\n network.rpcEndpoints[network.defaultRpcEndpointIndex];\n\n if (networkClientIdForDomain !== defaultNetworkClientId) {\n this.setNetworkClientIdForDomain(\n domain,\n defaultNetworkClientId,\n );\n }\n }\n }\n },\n );\n }\n },\n );\n }\n\n #setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n const networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n // This needs to happen before getProviderAndBlockTracker,\n // otherwise we may be referencing a network client ID that no longer exists.\n this.update((state) => {\n state.domains[domain] = networkClientId;\n });\n\n const networkProxy = this.getProviderAndBlockTracker(domain);\n networkProxy.provider.setTarget(networkClient.provider);\n networkProxy.blockTracker.setTarget(networkClient.blockTracker);\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 #unsetNetworkClientIdForDomain(domain: Domain) {\n const globallySelectedNetworkClient = this.messenger.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.messenger.call('PermissionController:hasPermissions', domain);\n }\n\n setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n if (domain === METAMASK_DOMAIN) {\n throw new Error(\n `NetworkClientId for domain \"${METAMASK_DOMAIN}\" cannot be set on the SelectedNetworkController`,\n );\n }\n\n if (!this.#domainHasPermissions(domain)) {\n throw new Error(\n 'NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions',\n );\n }\n\n this.#setNetworkClientIdForDomain(domain, networkClientId);\n }\n\n getNetworkClientIdForDomain(domain: Domain): NetworkClientId {\n const { selectedNetworkClientId: metamaskSelectedNetworkClientId } =\n this.messenger.call('NetworkController:getState');\n\n return this.state.domains[domain] ?? metamaskSelectedNetworkClientId;\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', return the NetworkController's globally selected network client proxy\n if (domain === METAMASK_DOMAIN) {\n const networkClient = this.messenger.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 (this.#domainHasPermissions(domain)) {\n const networkClientId = this.getNetworkClientIdForDomain(domain);\n networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n } else {\n networkClient = this.messenger.call(\n 'NetworkController:getSelectedNetworkClient',\n );\n if (networkClient === undefined) {\n throw new Error('Selected network not initialized');\n }\n }\n networkProxy = {\n provider: createSwappableProxy(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,10 @@
1
+ import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
2
+ import type { NetworkClientId } from '@metamask/network-controller';
3
+ import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
4
+ import type { SelectedNetworkControllerMessenger } from './SelectedNetworkController.js';
5
+ export type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {
6
+ networkClientId?: NetworkClientId;
7
+ origin?: string;
8
+ };
9
+ export declare const createSelectedNetworkMiddleware: (messenger: SelectedNetworkControllerMessenger) => JsonRpcMiddleware<JsonRpcParams, Json>;
10
+ //# sourceMappingURL=SelectedNetworkMiddleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedNetworkMiddleware.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAC;AAGzF,MAAM,MAAM,uCAAuC,GAAG,cAAc,GAAG;IACrE,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,+BAA+B,cAC/B,kCAAkC,KAC5C,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAevC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { SelectedNetworkControllerActionTypes } from "./SelectedNetworkController.mjs";
1
+ import { SelectedNetworkControllerActionTypes } from './SelectedNetworkController.js';
2
2
  export const createSelectedNetworkMiddleware = (messenger) => {
3
3
  const getNetworkClientIdForDomain = (origin) => messenger.call(SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, origin);
4
4
  return (req, _, next) => {
@@ -9,4 +9,4 @@ export const createSelectedNetworkMiddleware = (messenger) => {
9
9
  return next();
10
10
  };
11
11
  };
12
- //# sourceMappingURL=SelectedNetworkMiddleware.mjs.map
12
+ //# sourceMappingURL=SelectedNetworkMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectedNetworkMiddleware.js","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oCAAoC,EAAE,MAAM,gCAAgC,CAAC;AAOtF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,SAA6C,EACL,EAAE;IAC1C,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAE,EAAE,CACrD,SAAS,CAAC,IAAI,CACZ,oCAAoC,CAAC,2BAA2B,EAChE,MAAM,CACP,CAAC;IAEJ,OAAO,CAAC,GAA4C,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,GAAG,CAAC,eAAe,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';\n\nimport type { SelectedNetworkControllerMessenger } from './SelectedNetworkController.js';\nimport { SelectedNetworkControllerActionTypes } from './SelectedNetworkController.js';\n\nexport type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {\n networkClientId?: NetworkClientId;\n origin?: string;\n};\n\nexport const createSelectedNetworkMiddleware = (\n messenger: SelectedNetworkControllerMessenger,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n const getNetworkClientIdForDomain = (origin: string) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n origin,\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.networkClientId = getNetworkClientIdForDomain(req.origin);\n return next();\n };\n};\n"]}
@@ -1,6 +1,6 @@
1
- export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent, SelectedNetworkControllerGetStateAction, SelectedNetworkControllerGetSelectedNetworkStateAction, SelectedNetworkControllerActions, SelectedNetworkControllerEvents, SelectedNetworkControllerMessenger, SelectedNetworkControllerOptions, NetworkProxy, Domain, } from "./SelectedNetworkController.cjs";
2
- export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, METAMASK_DOMAIN, } from "./SelectedNetworkController.cjs";
3
- export type { SelectedNetworkControllerSetNetworkClientIdForDomainAction, SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerGetProviderAndBlockTrackerAction, } from "./SelectedNetworkController-method-action-types.cjs";
4
- export type { SelectedNetworkMiddlewareJsonRpcRequest } from "./SelectedNetworkMiddleware.cjs";
5
- export { createSelectedNetworkMiddleware } from "./SelectedNetworkMiddleware.cjs";
6
- //# sourceMappingURL=index.d.cts.map
1
+ export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent, SelectedNetworkControllerGetStateAction, SelectedNetworkControllerGetSelectedNetworkStateAction, SelectedNetworkControllerActions, SelectedNetworkControllerEvents, SelectedNetworkControllerMessenger, SelectedNetworkControllerOptions, NetworkProxy, Domain, } from './SelectedNetworkController.js';
2
+ export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, METAMASK_DOMAIN, } from './SelectedNetworkController.js';
3
+ export type { SelectedNetworkControllerSetNetworkClientIdForDomainAction, SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerGetProviderAndBlockTrackerAction, } from './SelectedNetworkController-method-action-types.js';
4
+ export type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware.js';
5
+ export { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,uCAAuC,EACvC,sDAAsD,EACtD,gCAAgC,EAChC,+BAA+B,EAC/B,kCAAkC,EAClC,gCAAgC,EAChC,YAAY,EACZ,MAAM,GACP,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,GAChB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,0DAA0D,EAC1D,0DAA0D,EAC1D,yDAAyD,GAC1D,MAAM,oDAAoD,CAAC;AAC5D,YAAY,EAAE,uCAAuC,EAAE,MAAM,gCAAgC,CAAC;AAC9F,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, METAMASK_DOMAIN, } from './SelectedNetworkController.js';
2
+ export { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,GAChB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EAAE,+BAA+B,EAAE,MAAM,gCAAgC,CAAC","sourcesContent":["export type {\n SelectedNetworkControllerState,\n SelectedNetworkControllerStateChangeEvent,\n SelectedNetworkControllerGetStateAction,\n SelectedNetworkControllerGetSelectedNetworkStateAction,\n SelectedNetworkControllerActions,\n SelectedNetworkControllerEvents,\n SelectedNetworkControllerMessenger,\n SelectedNetworkControllerOptions,\n NetworkProxy,\n Domain,\n} from './SelectedNetworkController.js';\nexport {\n SelectedNetworkControllerActionTypes,\n SelectedNetworkControllerEventTypes,\n SelectedNetworkController,\n METAMASK_DOMAIN,\n} from './SelectedNetworkController.js';\nexport type {\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetProviderAndBlockTrackerAction,\n} from './SelectedNetworkController-method-action-types.js';\nexport type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware.js';\nexport { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware.js';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/selected-network-controller",
3
- "version": "26.1.7-preview-5b293ee50",
3
+ "version": "26.1.7-preview-3866c0ff1",
4
4
  "description": "Provides an interface to the currently selected networkClientId for a given domain",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -18,19 +18,12 @@
18
18
  "files": [
19
19
  "dist/"
20
20
  ],
21
+ "type": "module",
21
22
  "sideEffects": false,
22
- "main": "./dist/index.cjs",
23
- "types": "./dist/index.d.cts",
24
23
  "exports": {
25
24
  ".": {
26
- "import": {
27
- "types": "./dist/index.d.mts",
28
- "default": "./dist/index.mjs"
29
- },
30
- "require": {
31
- "types": "./dist/index.d.cts",
32
- "default": "./dist/index.cjs"
33
- }
25
+ "types": "./dist/index.d.ts",
26
+ "default": "./dist/index.js"
34
27
  },
35
28
  "./package.json": "./package.json"
36
29
  },
@@ -39,9 +32,11 @@
39
32
  "registry": "https://registry.npmjs.org/"
40
33
  },
41
34
  "scripts": {
42
- "build": "ts-bridge --project tsconfig.build.json --verbose --clean --no-references",
43
- "build:all": "ts-bridge --project tsconfig.build.json --verbose --clean",
35
+ "build": "tsc --project tsconfig.build.json",
36
+ "build:all": "tsc --build tsconfig.build.json --verbose",
37
+ "build:clean": "yarn build:only-clean && yarn build",
44
38
  "build:docs": "typedoc",
39
+ "build:only-clean": "rimraf './dist' './tsconfig.build.tsbuildinfo'",
45
40
  "changelog:update": "../../scripts/update-changelog.sh @metamask/selected-network-controller",
46
41
  "changelog:validate": "../../scripts/validate-changelog.sh @metamask/selected-network-controller",
47
42
  "lint:tsconfigs": "tsx ../../scripts/lint-tsconfigs/lint-tsconfigs.mts",
@@ -65,21 +60,22 @@
65
60
  },
66
61
  "devDependencies": {
67
62
  "@metamask/auto-changelog": "^6.1.0",
68
- "@ts-bridge/cli": "^0.6.4",
69
63
  "@types/jest": "^30.0.0",
64
+ "@typescript/native": "npm:typescript@^7.0.2",
70
65
  "deepmerge": "^4.2.2",
71
66
  "immer": "^9.0.6",
72
67
  "jest": "^30.4.2",
73
68
  "jest-environment-jsdom": "^30.4.1",
74
- "lodash": "^4.17.21",
69
+ "lodash-es": "^4.17.21",
75
70
  "nock": "^13.3.1",
71
+ "rimraf": "^5.0.5",
76
72
  "ts-jest": "^29.4.11",
77
73
  "tsx": "^4.20.5",
78
74
  "typedoc": "^0.25.13",
79
75
  "typedoc-plugin-missing-exports": "^2.0.0",
80
- "typescript": "~5.3.3"
76
+ "typescript": "npm:@typescript/typescript6@^6.0.2"
81
77
  },
82
78
  "engines": {
83
- "node": "^18.18 || >=20"
79
+ "node": "^22.14.0 || ^24"
84
80
  }
85
81
  }
@@ -1,7 +0,0 @@
1
- "use strict";
2
- /**
3
- * This file is auto generated.
4
- * Do not edit manually.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- //# sourceMappingURL=SelectedNetworkController-method-action-types.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkController-method-action-types.cjs","sourceRoot":"","sources":["../src/SelectedNetworkController-method-action-types.ts"],"names":[],"mappings":";AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated.\n * Do not edit manually.\n */\n\nimport type { SelectedNetworkController } from './SelectedNetworkController.js';\n\nexport type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {\n type: `SelectedNetworkController:setNetworkClientIdForDomain`;\n handler: SelectedNetworkController['setNetworkClientIdForDomain'];\n};\n\nexport type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {\n type: `SelectedNetworkController:getNetworkClientIdForDomain`;\n handler: SelectedNetworkController['getNetworkClientIdForDomain'];\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 */\nexport type SelectedNetworkControllerGetProviderAndBlockTrackerAction = {\n type: `SelectedNetworkController:getProviderAndBlockTracker`;\n handler: SelectedNetworkController['getProviderAndBlockTracker'];\n};\n\n/**\n * Union of all SelectedNetworkController action types.\n */\nexport type SelectedNetworkControllerMethodActions =\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerGetProviderAndBlockTrackerAction;\n"]}
@@ -1,28 +0,0 @@
1
- /**
2
- * This file is auto generated.
3
- * Do not edit manually.
4
- */
5
- import type { SelectedNetworkController } from "./SelectedNetworkController.cjs";
6
- export type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {
7
- type: `SelectedNetworkController:setNetworkClientIdForDomain`;
8
- handler: SelectedNetworkController['setNetworkClientIdForDomain'];
9
- };
10
- export type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {
11
- type: `SelectedNetworkController:getNetworkClientIdForDomain`;
12
- handler: SelectedNetworkController['getNetworkClientIdForDomain'];
13
- };
14
- /**
15
- * Accesses the provider and block tracker for the currently selected network.
16
- *
17
- * @param domain - the domain for the provider
18
- * @returns The proxy and block tracker proxies.
19
- */
20
- export type SelectedNetworkControllerGetProviderAndBlockTrackerAction = {
21
- type: `SelectedNetworkController:getProviderAndBlockTracker`;
22
- handler: SelectedNetworkController['getProviderAndBlockTracker'];
23
- };
24
- /**
25
- * Union of all SelectedNetworkController action types.
26
- */
27
- export type SelectedNetworkControllerMethodActions = SelectedNetworkControllerSetNetworkClientIdForDomainAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerGetProviderAndBlockTrackerAction;
28
- //# sourceMappingURL=SelectedNetworkController-method-action-types.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkController-method-action-types.d.cts","sourceRoot":"","sources":["../src/SelectedNetworkController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,wCAAuC;AAEhF,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,uDAAuD,CAAC;IAC9D,OAAO,EAAE,yBAAyB,CAAC,6BAA6B,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,uDAAuD,CAAC;IAC9D,OAAO,EAAE,yBAAyB,CAAC,6BAA6B,CAAC,CAAC;CACnE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,yDAAyD,GAAG;IACtE,IAAI,EAAE,sDAAsD,CAAC;IAC7D,OAAO,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;CAClE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAC9C,0DAA0D,GAC1D,0DAA0D,GAC1D,yDAAyD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkController-method-action-types.d.mts","sourceRoot":"","sources":["../src/SelectedNetworkController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,wCAAuC;AAEhF,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,uDAAuD,CAAC;IAC9D,OAAO,EAAE,yBAAyB,CAAC,6BAA6B,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,0DAA0D,GAAG;IACvE,IAAI,EAAE,uDAAuD,CAAC;IAC9D,OAAO,EAAE,yBAAyB,CAAC,6BAA6B,CAAC,CAAC;CACnE,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,yDAAyD,GAAG;IACtE,IAAI,EAAE,sDAAsD,CAAC;IAC7D,OAAO,EAAE,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;CAClE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAC9C,0DAA0D,GAC1D,0DAA0D,GAC1D,yDAAyD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkController-method-action-types.mjs","sourceRoot":"","sources":["../src/SelectedNetworkController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated.\n * Do not edit manually.\n */\n\nimport type { SelectedNetworkController } from './SelectedNetworkController.js';\n\nexport type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {\n type: `SelectedNetworkController:setNetworkClientIdForDomain`;\n handler: SelectedNetworkController['setNetworkClientIdForDomain'];\n};\n\nexport type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {\n type: `SelectedNetworkController:getNetworkClientIdForDomain`;\n handler: SelectedNetworkController['getNetworkClientIdForDomain'];\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 */\nexport type SelectedNetworkControllerGetProviderAndBlockTrackerAction = {\n type: `SelectedNetworkController:getProviderAndBlockTracker`;\n handler: SelectedNetworkController['getProviderAndBlockTracker'];\n};\n\n/**\n * Union of all SelectedNetworkController action types.\n */\nexport type SelectedNetworkControllerMethodActions =\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerGetProviderAndBlockTrackerAction;\n"]}
@@ -1,195 +0,0 @@
1
- "use strict";
2
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
- if (kind === "m") throw new TypeError("Private method is not writable");
4
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
- };
8
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
- };
13
- var _SelectedNetworkController_instances, _SelectedNetworkController_domainProxyMap, _SelectedNetworkController_setNetworkClientIdForDomain, _SelectedNetworkController_unsetNetworkClientIdForDomain, _SelectedNetworkController_domainHasPermissions;
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = exports.METAMASK_DOMAIN = void 0;
16
- const base_controller_1 = require("@metamask/base-controller");
17
- const swappable_obj_proxy_1 = require("@metamask/swappable-obj-proxy");
18
- const controllerName = 'SelectedNetworkController';
19
- const MESSENGER_EXPOSED_METHODS = [
20
- 'setNetworkClientIdForDomain',
21
- 'getNetworkClientIdForDomain',
22
- 'getProviderAndBlockTracker',
23
- ];
24
- const stateMetadata = {
25
- domains: {
26
- includeInStateLogs: true,
27
- persist: true,
28
- includeInDebugSnapshot: false,
29
- usedInUi: true,
30
- },
31
- };
32
- const getDefaultState = () => ({ domains: {} });
33
- exports.METAMASK_DOMAIN = 'metamask';
34
- exports.SelectedNetworkControllerActionTypes = {
35
- getState: `${controllerName}:getState`,
36
- getNetworkClientIdForDomain: `${controllerName}:getNetworkClientIdForDomain`,
37
- setNetworkClientIdForDomain: `${controllerName}:setNetworkClientIdForDomain`,
38
- };
39
- exports.SelectedNetworkControllerEventTypes = {
40
- stateChange: `${controllerName}:stateChange`,
41
- };
42
- /**
43
- * Controller for getting and setting the network for a particular domain.
44
- */
45
- class SelectedNetworkController extends base_controller_1.BaseController {
46
- /**
47
- * Construct a SelectedNetworkController controller.
48
- *
49
- * @param options - The controller options.
50
- * @param options.messenger - The messenger for the SelectedNetworkController controller.
51
- * @param options.state - The controllers initial state.
52
- * @param options.domainProxyMap - A map for storing domain-specific proxies that are held in memory only during use.
53
- */
54
- constructor({ messenger, state = getDefaultState(), domainProxyMap, }) {
55
- super({
56
- name: controllerName,
57
- metadata: stateMetadata,
58
- messenger,
59
- state,
60
- });
61
- _SelectedNetworkController_instances.add(this);
62
- _SelectedNetworkController_domainProxyMap.set(this, void 0);
63
- __classPrivateFieldSet(this, _SelectedNetworkController_domainProxyMap, domainProxyMap, "f");
64
- this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
65
- // 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)
66
- this.messenger
67
- .call('PermissionController:getSubjectNames')
68
- .filter((domain) => this.state.domains[domain] === undefined)
69
- .forEach((domain) => this.setNetworkClientIdForDomain(domain, this.messenger.call('NetworkController:getState')
70
- .selectedNetworkClientId));
71
- this.messenger.subscribe('PermissionController:stateChange', (_, patches) => {
72
- patches.forEach(({ op, path }) => {
73
- const isChangingSubject = path[0] === 'subjects' && path[1] !== undefined;
74
- if (isChangingSubject && typeof path[1] === 'string') {
75
- const domain = path[1];
76
- if (op === 'add' && this.state.domains[domain] === undefined) {
77
- this.setNetworkClientIdForDomain(domain, this.messenger.call('NetworkController:getState')
78
- .selectedNetworkClientId);
79
- }
80
- else if (op === 'remove' &&
81
- this.state.domains[domain] !== undefined) {
82
- __classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_unsetNetworkClientIdForDomain).call(this, domain);
83
- }
84
- }
85
- });
86
- });
87
- this.messenger.subscribe('NetworkController:stateChange', ({ selectedNetworkClientId, networkConfigurationsByChainId }, patches) => {
88
- const patch = patches.find(({ op, path }) => (op === 'replace' || op === 'remove') &&
89
- path[0] === 'networkConfigurationsByChainId');
90
- if (patch) {
91
- const networkClientIdToChainId = Object.values(networkConfigurationsByChainId).reduce((acc, network) => {
92
- network.rpcEndpoints.forEach(({ networkClientId }) => (acc[networkClientId] = network.chainId));
93
- return acc;
94
- }, {});
95
- Object.entries(this.state.domains).forEach(([domain, networkClientIdForDomain]) => {
96
- const chainIdForDomain = networkClientIdToChainId[networkClientIdForDomain];
97
- if (patch.op === 'remove' && !chainIdForDomain) {
98
- // If the network was removed, fall back to the globally selected network
99
- this.setNetworkClientIdForDomain(domain, selectedNetworkClientId);
100
- }
101
- else if (patch.op === 'replace') {
102
- // If the network was updated, redirect to the network's default endpoint
103
- const updatedChainId = patch.path[1];
104
- if (!chainIdForDomain || chainIdForDomain === updatedChainId) {
105
- const network = networkConfigurationsByChainId[updatedChainId];
106
- const { networkClientId: defaultNetworkClientId } = network.rpcEndpoints[network.defaultRpcEndpointIndex];
107
- if (networkClientIdForDomain !== defaultNetworkClientId) {
108
- this.setNetworkClientIdForDomain(domain, defaultNetworkClientId);
109
- }
110
- }
111
- }
112
- });
113
- }
114
- });
115
- }
116
- setNetworkClientIdForDomain(domain, networkClientId) {
117
- if (domain === exports.METAMASK_DOMAIN) {
118
- throw new Error(`NetworkClientId for domain "${exports.METAMASK_DOMAIN}" cannot be set on the SelectedNetworkController`);
119
- }
120
- if (!__classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_domainHasPermissions).call(this, domain)) {
121
- throw new Error('NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions');
122
- }
123
- __classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_setNetworkClientIdForDomain).call(this, domain, networkClientId);
124
- }
125
- getNetworkClientIdForDomain(domain) {
126
- const { selectedNetworkClientId: metamaskSelectedNetworkClientId } = this.messenger.call('NetworkController:getState');
127
- return this.state.domains[domain] ?? metamaskSelectedNetworkClientId;
128
- }
129
- /**
130
- * Accesses the provider and block tracker for the currently selected network.
131
- *
132
- * @param domain - the domain for the provider
133
- * @returns The proxy and block tracker proxies.
134
- */
135
- getProviderAndBlockTracker(domain) {
136
- // If the domain is 'metamask', return the NetworkController's globally selected network client proxy
137
- if (domain === exports.METAMASK_DOMAIN) {
138
- const networkClient = this.messenger.call('NetworkController:getSelectedNetworkClient');
139
- if (networkClient === undefined) {
140
- throw new Error('Selected network not initialized');
141
- }
142
- return networkClient;
143
- }
144
- let networkProxy = __classPrivateFieldGet(this, _SelectedNetworkController_domainProxyMap, "f").get(domain);
145
- if (networkProxy === undefined) {
146
- let networkClient;
147
- if (__classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_domainHasPermissions).call(this, domain)) {
148
- const networkClientId = this.getNetworkClientIdForDomain(domain);
149
- networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
150
- }
151
- else {
152
- networkClient = this.messenger.call('NetworkController:getSelectedNetworkClient');
153
- if (networkClient === undefined) {
154
- throw new Error('Selected network not initialized');
155
- }
156
- }
157
- networkProxy = {
158
- provider: (0, swappable_obj_proxy_1.createSwappableProxy)(networkClient.provider),
159
- blockTracker: (0, swappable_obj_proxy_1.createEventEmitterProxy)(networkClient.blockTracker, {
160
- eventFilter: 'skipInternal',
161
- }),
162
- };
163
- __classPrivateFieldGet(this, _SelectedNetworkController_domainProxyMap, "f").set(domain, networkProxy);
164
- }
165
- return networkProxy;
166
- }
167
- }
168
- exports.SelectedNetworkController = SelectedNetworkController;
169
- _SelectedNetworkController_domainProxyMap = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_setNetworkClientIdForDomain = function _SelectedNetworkController_setNetworkClientIdForDomain(domain, networkClientId) {
170
- const networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
171
- // This needs to happen before getProviderAndBlockTracker,
172
- // otherwise we may be referencing a network client ID that no longer exists.
173
- this.update((state) => {
174
- state.domains[domain] = networkClientId;
175
- });
176
- const networkProxy = this.getProviderAndBlockTracker(domain);
177
- networkProxy.provider.setTarget(networkClient.provider);
178
- networkProxy.blockTracker.setTarget(networkClient.blockTracker);
179
- }, _SelectedNetworkController_unsetNetworkClientIdForDomain = function _SelectedNetworkController_unsetNetworkClientIdForDomain(domain) {
180
- const globallySelectedNetworkClient = this.messenger.call('NetworkController:getSelectedNetworkClient');
181
- const networkProxy = __classPrivateFieldGet(this, _SelectedNetworkController_domainProxyMap, "f").get(domain);
182
- if (networkProxy && globallySelectedNetworkClient) {
183
- networkProxy.provider.setTarget(globallySelectedNetworkClient.provider);
184
- networkProxy.blockTracker.setTarget(globallySelectedNetworkClient.blockTracker);
185
- }
186
- else if (networkProxy) {
187
- __classPrivateFieldGet(this, _SelectedNetworkController_domainProxyMap, "f").delete(domain);
188
- }
189
- this.update((state) => {
190
- delete state.domains[domain];
191
- });
192
- }, _SelectedNetworkController_domainHasPermissions = function _SelectedNetworkController_domainHasPermissions(domain) {
193
- return this.messenger.call('PermissionController:hasPermissions', domain);
194
- };
195
- //# sourceMappingURL=SelectedNetworkController.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkController.cjs","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n BlockTrackerProxy,\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetSelectedNetworkClientAction,\n NetworkControllerGetStateAction,\n NetworkControllerStateChangeEvent,\n ProviderProxy,\n} from '@metamask/network-controller';\nimport type {\n PermissionControllerStateChange,\n PermissionControllerGetSubjectNamesAction as PermissionControllerGetSubjectsAction,\n PermissionControllerHasPermissionsAction as PermissionControllerHasPermissions,\n} from '@metamask/permission-controller';\nimport {\n createEventEmitterProxy,\n createSwappableProxy,\n} from '@metamask/swappable-obj-proxy';\nimport type { Hex } from '@metamask/utils';\n\nimport type { SelectedNetworkControllerMethodActions } from './SelectedNetworkController-method-action-types.js';\n\nconst controllerName = 'SelectedNetworkController';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'setNetworkClientIdForDomain',\n 'getNetworkClientIdForDomain',\n 'getProviderAndBlockTracker',\n] as const;\n\nconst stateMetadata = {\n domains: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({ domains: {} });\n\nexport type Domain = string;\n\nexport const METAMASK_DOMAIN = 'metamask' as const;\n\nexport const SelectedNetworkControllerActionTypes = {\n getState: `${controllerName}:getState` as const,\n getNetworkClientIdForDomain:\n `${controllerName}:getNetworkClientIdForDomain` as const,\n setNetworkClientIdForDomain:\n `${controllerName}:setNetworkClientIdForDomain` as const,\n};\n\nexport const SelectedNetworkControllerEventTypes = {\n stateChange: `${controllerName}:stateChange` as const,\n};\n\nexport type SelectedNetworkControllerState = {\n domains: Record<Domain, NetworkClientId>;\n};\n\nexport type SelectedNetworkControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n SelectedNetworkControllerState\n >;\n\nexport type SelectedNetworkControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n SelectedNetworkControllerState\n>;\n\n/**\n * @deprecated Use `SelectedNetworkControllerGetStateAction` instead.\n */\nexport type SelectedNetworkControllerGetSelectedNetworkStateAction =\n SelectedNetworkControllerGetStateAction;\n\nexport type SelectedNetworkControllerActions =\n | SelectedNetworkControllerGetStateAction\n | SelectedNetworkControllerMethodActions;\n\ntype AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetSelectedNetworkClientAction\n | NetworkControllerGetStateAction\n | PermissionControllerHasPermissions\n | PermissionControllerGetSubjectsAction;\n\nexport type SelectedNetworkControllerEvents =\n SelectedNetworkControllerStateChangeEvent;\n\ntype AllowedEvents =\n | NetworkControllerStateChangeEvent\n | PermissionControllerStateChange;\n\nexport type SelectedNetworkControllerMessenger = Messenger<\n typeof controllerName,\n SelectedNetworkControllerActions | AllowedActions,\n SelectedNetworkControllerEvents | AllowedEvents\n>;\n\nexport type SelectedNetworkControllerOptions = {\n state?: SelectedNetworkControllerState;\n messenger: SelectedNetworkControllerMessenger;\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 readonly #domainProxyMap: Map<Domain, NetworkProxy>;\n\n /**\n * Construct a SelectedNetworkController controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The messenger for the SelectedNetworkController controller.\n * @param options.state - The controllers initial state.\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 domainProxyMap,\n }: SelectedNetworkControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state,\n });\n this.#domainProxyMap = domainProxyMap;\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\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 networkClientId (fetched from the NetworkController)\n this.messenger\n .call('PermissionController:getSubjectNames')\n .filter((domain) => this.state.domains[domain] === undefined)\n .forEach((domain) =>\n this.setNetworkClientIdForDomain(\n domain,\n this.messenger.call('NetworkController:getState')\n .selectedNetworkClientId,\n ),\n );\n\n this.messenger.subscribe(\n 'PermissionController:stateChange',\n (_, patches) => {\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.setNetworkClientIdForDomain(\n domain,\n this.messenger.call('NetworkController:getState')\n .selectedNetworkClientId,\n );\n } else if (\n op === 'remove' &&\n this.state.domains[domain] !== undefined\n ) {\n this.#unsetNetworkClientIdForDomain(domain);\n }\n }\n });\n },\n );\n\n this.messenger.subscribe(\n 'NetworkController:stateChange',\n (\n { selectedNetworkClientId, networkConfigurationsByChainId },\n patches,\n ) => {\n const patch = patches.find(\n ({ op, path }) =>\n (op === 'replace' || op === 'remove') &&\n path[0] === 'networkConfigurationsByChainId',\n );\n\n if (patch) {\n const networkClientIdToChainId = Object.values(\n networkConfigurationsByChainId,\n ).reduce<Record<string, Hex>>((acc, network) => {\n network.rpcEndpoints.forEach(\n ({ networkClientId }) => (acc[networkClientId] = network.chainId),\n );\n return acc;\n }, {});\n\n Object.entries(this.state.domains).forEach(\n ([domain, networkClientIdForDomain]) => {\n const chainIdForDomain =\n networkClientIdToChainId[networkClientIdForDomain];\n\n if (patch.op === 'remove' && !chainIdForDomain) {\n // If the network was removed, fall back to the globally selected network\n this.setNetworkClientIdForDomain(\n domain,\n selectedNetworkClientId,\n );\n } else if (patch.op === 'replace') {\n // If the network was updated, redirect to the network's default endpoint\n const updatedChainId = patch.path[1] as Hex;\n if (!chainIdForDomain || chainIdForDomain === updatedChainId) {\n const network =\n networkConfigurationsByChainId[updatedChainId];\n\n const { networkClientId: defaultNetworkClientId } =\n network.rpcEndpoints[network.defaultRpcEndpointIndex];\n\n if (networkClientIdForDomain !== defaultNetworkClientId) {\n this.setNetworkClientIdForDomain(\n domain,\n defaultNetworkClientId,\n );\n }\n }\n }\n },\n );\n }\n },\n );\n }\n\n #setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n const networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n // This needs to happen before getProviderAndBlockTracker,\n // otherwise we may be referencing a network client ID that no longer exists.\n this.update((state) => {\n state.domains[domain] = networkClientId;\n });\n\n const networkProxy = this.getProviderAndBlockTracker(domain);\n networkProxy.provider.setTarget(networkClient.provider);\n networkProxy.blockTracker.setTarget(networkClient.blockTracker);\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 #unsetNetworkClientIdForDomain(domain: Domain) {\n const globallySelectedNetworkClient = this.messenger.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.messenger.call('PermissionController:hasPermissions', domain);\n }\n\n setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n if (domain === METAMASK_DOMAIN) {\n throw new Error(\n `NetworkClientId for domain \"${METAMASK_DOMAIN}\" cannot be set on the SelectedNetworkController`,\n );\n }\n\n if (!this.#domainHasPermissions(domain)) {\n throw new Error(\n 'NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions',\n );\n }\n\n this.#setNetworkClientIdForDomain(domain, networkClientId);\n }\n\n getNetworkClientIdForDomain(domain: Domain): NetworkClientId {\n const { selectedNetworkClientId: metamaskSelectedNetworkClientId } =\n this.messenger.call('NetworkController:getState');\n\n return this.state.domains[domain] ?? metamaskSelectedNetworkClientId;\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', return the NetworkController's globally selected network client proxy\n if (domain === METAMASK_DOMAIN) {\n const networkClient = this.messenger.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 (this.#domainHasPermissions(domain)) {\n const networkClientId = this.getNetworkClientIdForDomain(domain);\n networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n } else {\n networkClient = this.messenger.call(\n 'NetworkController:getSelectedNetworkClient',\n );\n if (networkClient === undefined) {\n throw new Error('Selected network not initialized');\n }\n }\n networkProxy = {\n provider: createSwappableProxy(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"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkController.d.cts","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,2CAA2C,EAC3C,+CAA+C,EAC/C,+BAA+B,EAC/B,iCAAiC,EACjC,aAAa,EACd,qCAAqC;AACtC,OAAO,KAAK,EACV,+BAA+B,EAC/B,yCAAyC,IAAI,qCAAqC,EAClF,wCAAwC,IAAI,kCAAkC,EAC/E,wCAAwC;AAOzC,OAAO,KAAK,EAAE,sCAAsC,EAAE,4DAA2D;AAEjH,QAAA,MAAM,cAAc,8BAA8B,CAAC;AAmBnD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,eAAO,MAAM,eAAe,YAAsB,CAAC;AAEnD,eAAO,MAAM,oCAAoC;;;;CAMhD,CAAC;AAEF,eAAO,MAAM,mCAAmC;;CAE/C,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,yCAAyC,GACnD,0BAA0B,CACxB,OAAO,cAAc,EACrB,8BAA8B,CAC/B,CAAC;AAEJ,MAAM,MAAM,uCAAuC,GAAG,wBAAwB,CAC5E,OAAO,cAAc,EACrB,8BAA8B,CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sDAAsD,GAChE,uCAAuC,CAAC;AAE1C,MAAM,MAAM,gCAAgC,GACxC,uCAAuC,GACvC,sCAAsC,CAAC;AAE3C,KAAK,cAAc,GACf,2CAA2C,GAC3C,+CAA+C,GAC/C,+BAA+B,GAC/B,kCAAkC,GAClC,qCAAqC,CAAC;AAE1C,MAAM,MAAM,+BAA+B,GACzC,yCAAyC,CAAC;AAE5C,KAAK,aAAa,GACd,iCAAiC,GACjC,+BAA+B,CAAC;AAEpC,MAAM,MAAM,kCAAkC,GAAG,SAAS,CACxD,OAAO,cAAc,EACrB,gCAAgC,GAAG,cAAc,EACjD,+BAA+B,GAAG,aAAa,CAChD,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,KAAK,CAAC,EAAE,8BAA8B,CAAC;IACvC,SAAS,EAAE,kCAAkC,CAAC;IAC9C,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,cAAc,CAC3D,OAAO,cAAc,EACrB,8BAA8B,EAC9B,kCAAkC,CACnC;;IAGC;;;;;;;OAOG;gBACS,EACV,SAAS,EACT,KAAyB,EACzB,cAAc,GACf,EAAE,gCAAgC;IA4JnC,2BAA2B,CACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe;IAiBlC,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IAO5D;;;;;OAKG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;CAuCzD"}
@@ -1,66 +0,0 @@
1
- import { BaseController } from "@metamask/base-controller";
2
- import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
3
- import type { Messenger } from "@metamask/messenger";
4
- import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetSelectedNetworkClientAction, NetworkControllerGetStateAction, NetworkControllerStateChangeEvent, ProviderProxy } from "@metamask/network-controller";
5
- import type { PermissionControllerStateChange, PermissionControllerGetSubjectNamesAction as PermissionControllerGetSubjectsAction, PermissionControllerHasPermissionsAction as PermissionControllerHasPermissions } from "@metamask/permission-controller";
6
- import type { SelectedNetworkControllerMethodActions } from "./SelectedNetworkController-method-action-types.mjs";
7
- declare const controllerName = "SelectedNetworkController";
8
- export type Domain = string;
9
- export declare const METAMASK_DOMAIN: "metamask";
10
- export declare const SelectedNetworkControllerActionTypes: {
11
- getState: "SelectedNetworkController:getState";
12
- getNetworkClientIdForDomain: "SelectedNetworkController:getNetworkClientIdForDomain";
13
- setNetworkClientIdForDomain: "SelectedNetworkController:setNetworkClientIdForDomain";
14
- };
15
- export declare const SelectedNetworkControllerEventTypes: {
16
- stateChange: "SelectedNetworkController:stateChange";
17
- };
18
- export type SelectedNetworkControllerState = {
19
- domains: Record<Domain, NetworkClientId>;
20
- };
21
- export type SelectedNetworkControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, SelectedNetworkControllerState>;
22
- export type SelectedNetworkControllerGetStateAction = ControllerGetStateAction<typeof controllerName, SelectedNetworkControllerState>;
23
- /**
24
- * @deprecated Use `SelectedNetworkControllerGetStateAction` instead.
25
- */
26
- export type SelectedNetworkControllerGetSelectedNetworkStateAction = SelectedNetworkControllerGetStateAction;
27
- export type SelectedNetworkControllerActions = SelectedNetworkControllerGetStateAction | SelectedNetworkControllerMethodActions;
28
- type AllowedActions = NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetSelectedNetworkClientAction | NetworkControllerGetStateAction | PermissionControllerHasPermissions | PermissionControllerGetSubjectsAction;
29
- export type SelectedNetworkControllerEvents = SelectedNetworkControllerStateChangeEvent;
30
- type AllowedEvents = NetworkControllerStateChangeEvent | PermissionControllerStateChange;
31
- export type SelectedNetworkControllerMessenger = Messenger<typeof controllerName, SelectedNetworkControllerActions | AllowedActions, SelectedNetworkControllerEvents | AllowedEvents>;
32
- export type SelectedNetworkControllerOptions = {
33
- state?: SelectedNetworkControllerState;
34
- messenger: SelectedNetworkControllerMessenger;
35
- domainProxyMap: Map<Domain, NetworkProxy>;
36
- };
37
- export type NetworkProxy = {
38
- provider: ProviderProxy;
39
- blockTracker: BlockTrackerProxy;
40
- };
41
- /**
42
- * Controller for getting and setting the network for a particular domain.
43
- */
44
- export declare class SelectedNetworkController extends BaseController<typeof controllerName, SelectedNetworkControllerState, SelectedNetworkControllerMessenger> {
45
- #private;
46
- /**
47
- * Construct a SelectedNetworkController controller.
48
- *
49
- * @param options - The controller options.
50
- * @param options.messenger - The messenger for the SelectedNetworkController controller.
51
- * @param options.state - The controllers initial state.
52
- * @param options.domainProxyMap - A map for storing domain-specific proxies that are held in memory only during use.
53
- */
54
- constructor({ messenger, state, domainProxyMap, }: SelectedNetworkControllerOptions);
55
- setNetworkClientIdForDomain(domain: Domain, networkClientId: NetworkClientId): void;
56
- getNetworkClientIdForDomain(domain: Domain): NetworkClientId;
57
- /**
58
- * Accesses the provider and block tracker for the currently selected network.
59
- *
60
- * @param domain - the domain for the provider
61
- * @returns The proxy and block tracker proxies.
62
- */
63
- getProviderAndBlockTracker(domain: Domain): NetworkProxy;
64
- }
65
- export {};
66
- //# sourceMappingURL=SelectedNetworkController.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkController.d.mts","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC3B,kCAAkC;AACnC,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,2CAA2C,EAC3C,+CAA+C,EAC/C,+BAA+B,EAC/B,iCAAiC,EACjC,aAAa,EACd,qCAAqC;AACtC,OAAO,KAAK,EACV,+BAA+B,EAC/B,yCAAyC,IAAI,qCAAqC,EAClF,wCAAwC,IAAI,kCAAkC,EAC/E,wCAAwC;AAOzC,OAAO,KAAK,EAAE,sCAAsC,EAAE,4DAA2D;AAEjH,QAAA,MAAM,cAAc,8BAA8B,CAAC;AAmBnD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,eAAO,MAAM,eAAe,YAAsB,CAAC;AAEnD,eAAO,MAAM,oCAAoC;;;;CAMhD,CAAC;AAEF,eAAO,MAAM,mCAAmC;;CAE/C,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,yCAAyC,GACnD,0BAA0B,CACxB,OAAO,cAAc,EACrB,8BAA8B,CAC/B,CAAC;AAEJ,MAAM,MAAM,uCAAuC,GAAG,wBAAwB,CAC5E,OAAO,cAAc,EACrB,8BAA8B,CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sDAAsD,GAChE,uCAAuC,CAAC;AAE1C,MAAM,MAAM,gCAAgC,GACxC,uCAAuC,GACvC,sCAAsC,CAAC;AAE3C,KAAK,cAAc,GACf,2CAA2C,GAC3C,+CAA+C,GAC/C,+BAA+B,GAC/B,kCAAkC,GAClC,qCAAqC,CAAC;AAE1C,MAAM,MAAM,+BAA+B,GACzC,yCAAyC,CAAC;AAE5C,KAAK,aAAa,GACd,iCAAiC,GACjC,+BAA+B,CAAC;AAEpC,MAAM,MAAM,kCAAkC,GAAG,SAAS,CACxD,OAAO,cAAc,EACrB,gCAAgC,GAAG,cAAc,EACjD,+BAA+B,GAAG,aAAa,CAChD,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,KAAK,CAAC,EAAE,8BAA8B,CAAC;IACvC,SAAS,EAAE,kCAAkC,CAAC;IAC9C,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,cAAc,CAC3D,OAAO,cAAc,EACrB,8BAA8B,EAC9B,kCAAkC,CACnC;;IAGC;;;;;;;OAOG;gBACS,EACV,SAAS,EACT,KAAyB,EACzB,cAAc,GACf,EAAE,gCAAgC;IA4JnC,2BAA2B,CACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe;IAiBlC,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IAO5D;;;;;OAKG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;CAuCzD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkController.mjs","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n BlockTrackerProxy,\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetSelectedNetworkClientAction,\n NetworkControllerGetStateAction,\n NetworkControllerStateChangeEvent,\n ProviderProxy,\n} from '@metamask/network-controller';\nimport type {\n PermissionControllerStateChange,\n PermissionControllerGetSubjectNamesAction as PermissionControllerGetSubjectsAction,\n PermissionControllerHasPermissionsAction as PermissionControllerHasPermissions,\n} from '@metamask/permission-controller';\nimport {\n createEventEmitterProxy,\n createSwappableProxy,\n} from '@metamask/swappable-obj-proxy';\nimport type { Hex } from '@metamask/utils';\n\nimport type { SelectedNetworkControllerMethodActions } from './SelectedNetworkController-method-action-types.js';\n\nconst controllerName = 'SelectedNetworkController';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'setNetworkClientIdForDomain',\n 'getNetworkClientIdForDomain',\n 'getProviderAndBlockTracker',\n] as const;\n\nconst stateMetadata = {\n domains: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n};\n\nconst getDefaultState = () => ({ domains: {} });\n\nexport type Domain = string;\n\nexport const METAMASK_DOMAIN = 'metamask' as const;\n\nexport const SelectedNetworkControllerActionTypes = {\n getState: `${controllerName}:getState` as const,\n getNetworkClientIdForDomain:\n `${controllerName}:getNetworkClientIdForDomain` as const,\n setNetworkClientIdForDomain:\n `${controllerName}:setNetworkClientIdForDomain` as const,\n};\n\nexport const SelectedNetworkControllerEventTypes = {\n stateChange: `${controllerName}:stateChange` as const,\n};\n\nexport type SelectedNetworkControllerState = {\n domains: Record<Domain, NetworkClientId>;\n};\n\nexport type SelectedNetworkControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n SelectedNetworkControllerState\n >;\n\nexport type SelectedNetworkControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n SelectedNetworkControllerState\n>;\n\n/**\n * @deprecated Use `SelectedNetworkControllerGetStateAction` instead.\n */\nexport type SelectedNetworkControllerGetSelectedNetworkStateAction =\n SelectedNetworkControllerGetStateAction;\n\nexport type SelectedNetworkControllerActions =\n | SelectedNetworkControllerGetStateAction\n | SelectedNetworkControllerMethodActions;\n\ntype AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetSelectedNetworkClientAction\n | NetworkControllerGetStateAction\n | PermissionControllerHasPermissions\n | PermissionControllerGetSubjectsAction;\n\nexport type SelectedNetworkControllerEvents =\n SelectedNetworkControllerStateChangeEvent;\n\ntype AllowedEvents =\n | NetworkControllerStateChangeEvent\n | PermissionControllerStateChange;\n\nexport type SelectedNetworkControllerMessenger = Messenger<\n typeof controllerName,\n SelectedNetworkControllerActions | AllowedActions,\n SelectedNetworkControllerEvents | AllowedEvents\n>;\n\nexport type SelectedNetworkControllerOptions = {\n state?: SelectedNetworkControllerState;\n messenger: SelectedNetworkControllerMessenger;\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 readonly #domainProxyMap: Map<Domain, NetworkProxy>;\n\n /**\n * Construct a SelectedNetworkController controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The messenger for the SelectedNetworkController controller.\n * @param options.state - The controllers initial state.\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 domainProxyMap,\n }: SelectedNetworkControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state,\n });\n this.#domainProxyMap = domainProxyMap;\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n\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 networkClientId (fetched from the NetworkController)\n this.messenger\n .call('PermissionController:getSubjectNames')\n .filter((domain) => this.state.domains[domain] === undefined)\n .forEach((domain) =>\n this.setNetworkClientIdForDomain(\n domain,\n this.messenger.call('NetworkController:getState')\n .selectedNetworkClientId,\n ),\n );\n\n this.messenger.subscribe(\n 'PermissionController:stateChange',\n (_, patches) => {\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.setNetworkClientIdForDomain(\n domain,\n this.messenger.call('NetworkController:getState')\n .selectedNetworkClientId,\n );\n } else if (\n op === 'remove' &&\n this.state.domains[domain] !== undefined\n ) {\n this.#unsetNetworkClientIdForDomain(domain);\n }\n }\n });\n },\n );\n\n this.messenger.subscribe(\n 'NetworkController:stateChange',\n (\n { selectedNetworkClientId, networkConfigurationsByChainId },\n patches,\n ) => {\n const patch = patches.find(\n ({ op, path }) =>\n (op === 'replace' || op === 'remove') &&\n path[0] === 'networkConfigurationsByChainId',\n );\n\n if (patch) {\n const networkClientIdToChainId = Object.values(\n networkConfigurationsByChainId,\n ).reduce<Record<string, Hex>>((acc, network) => {\n network.rpcEndpoints.forEach(\n ({ networkClientId }) => (acc[networkClientId] = network.chainId),\n );\n return acc;\n }, {});\n\n Object.entries(this.state.domains).forEach(\n ([domain, networkClientIdForDomain]) => {\n const chainIdForDomain =\n networkClientIdToChainId[networkClientIdForDomain];\n\n if (patch.op === 'remove' && !chainIdForDomain) {\n // If the network was removed, fall back to the globally selected network\n this.setNetworkClientIdForDomain(\n domain,\n selectedNetworkClientId,\n );\n } else if (patch.op === 'replace') {\n // If the network was updated, redirect to the network's default endpoint\n const updatedChainId = patch.path[1] as Hex;\n if (!chainIdForDomain || chainIdForDomain === updatedChainId) {\n const network =\n networkConfigurationsByChainId[updatedChainId];\n\n const { networkClientId: defaultNetworkClientId } =\n network.rpcEndpoints[network.defaultRpcEndpointIndex];\n\n if (networkClientIdForDomain !== defaultNetworkClientId) {\n this.setNetworkClientIdForDomain(\n domain,\n defaultNetworkClientId,\n );\n }\n }\n }\n },\n );\n }\n },\n );\n }\n\n #setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n const networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n\n // This needs to happen before getProviderAndBlockTracker,\n // otherwise we may be referencing a network client ID that no longer exists.\n this.update((state) => {\n state.domains[domain] = networkClientId;\n });\n\n const networkProxy = this.getProviderAndBlockTracker(domain);\n networkProxy.provider.setTarget(networkClient.provider);\n networkProxy.blockTracker.setTarget(networkClient.blockTracker);\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 #unsetNetworkClientIdForDomain(domain: Domain) {\n const globallySelectedNetworkClient = this.messenger.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.messenger.call('PermissionController:hasPermissions', domain);\n }\n\n setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n if (domain === METAMASK_DOMAIN) {\n throw new Error(\n `NetworkClientId for domain \"${METAMASK_DOMAIN}\" cannot be set on the SelectedNetworkController`,\n );\n }\n\n if (!this.#domainHasPermissions(domain)) {\n throw new Error(\n 'NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions',\n );\n }\n\n this.#setNetworkClientIdForDomain(domain, networkClientId);\n }\n\n getNetworkClientIdForDomain(domain: Domain): NetworkClientId {\n const { selectedNetworkClientId: metamaskSelectedNetworkClientId } =\n this.messenger.call('NetworkController:getState');\n\n return this.state.domains[domain] ?? metamaskSelectedNetworkClientId;\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', return the NetworkController's globally selected network client proxy\n if (domain === METAMASK_DOMAIN) {\n const networkClient = this.messenger.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 (this.#domainHasPermissions(domain)) {\n const networkClientId = this.getNetworkClientIdForDomain(domain);\n networkClient = this.messenger.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n } else {\n networkClient = this.messenger.call(\n 'NetworkController:getSelectedNetworkClient',\n );\n if (networkClient === undefined) {\n throw new Error('Selected network not initialized');\n }\n }\n networkProxy = {\n provider: createSwappableProxy(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"]}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSelectedNetworkMiddleware = void 0;
4
- const SelectedNetworkController_js_1 = require("./SelectedNetworkController.cjs");
5
- const createSelectedNetworkMiddleware = (messenger) => {
6
- const getNetworkClientIdForDomain = (origin) => messenger.call(SelectedNetworkController_js_1.SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, origin);
7
- return (req, _, next) => {
8
- if (!req.origin) {
9
- throw new Error("Request object is lacking an 'origin'");
10
- }
11
- req.networkClientId = getNetworkClientIdForDomain(req.origin);
12
- return next();
13
- };
14
- };
15
- exports.createSelectedNetworkMiddleware = createSelectedNetworkMiddleware;
16
- //# sourceMappingURL=SelectedNetworkMiddleware.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkMiddleware.cjs","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":";;;AAKA,kFAAsF;AAO/E,MAAM,+BAA+B,GAAG,CAC7C,SAA6C,EACL,EAAE;IAC1C,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAE,EAAE,CACrD,SAAS,CAAC,IAAI,CACZ,mEAAoC,CAAC,2BAA2B,EAChE,MAAM,CACP,CAAC;IAEJ,OAAO,CAAC,GAA4C,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,GAAG,CAAC,eAAe,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,+BAA+B,mCAiB1C","sourcesContent":["import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';\n\nimport type { SelectedNetworkControllerMessenger } from './SelectedNetworkController.js';\nimport { SelectedNetworkControllerActionTypes } from './SelectedNetworkController.js';\n\nexport type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {\n networkClientId?: NetworkClientId;\n origin?: string;\n};\n\nexport const createSelectedNetworkMiddleware = (\n messenger: SelectedNetworkControllerMessenger,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n const getNetworkClientIdForDomain = (origin: string) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n origin,\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.networkClientId = getNetworkClientIdForDomain(req.origin);\n return next();\n };\n};\n"]}
@@ -1,10 +0,0 @@
1
- import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
2
- import type { NetworkClientId } from "@metamask/network-controller";
3
- import type { Json, JsonRpcParams, JsonRpcRequest } from "@metamask/utils";
4
- import type { SelectedNetworkControllerMessenger } from "./SelectedNetworkController.cjs";
5
- export type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {
6
- networkClientId?: NetworkClientId;
7
- origin?: string;
8
- };
9
- export declare const createSelectedNetworkMiddleware: (messenger: SelectedNetworkControllerMessenger) => JsonRpcMiddleware<JsonRpcParams, Json>;
10
- //# sourceMappingURL=SelectedNetworkMiddleware.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkMiddleware.d.cts","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kCAAkC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,wBAAwB;AAE3E,OAAO,KAAK,EAAE,kCAAkC,EAAE,wCAAuC;AAGzF,MAAM,MAAM,uCAAuC,GAAG,cAAc,GAAG;IACrE,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,+BAA+B,qDAEzC,kBAAkB,aAAa,EAAE,IAAI,CAevC,CAAC"}
@@ -1,10 +0,0 @@
1
- import type { JsonRpcMiddleware } from "@metamask/json-rpc-engine";
2
- import type { NetworkClientId } from "@metamask/network-controller";
3
- import type { Json, JsonRpcParams, JsonRpcRequest } from "@metamask/utils";
4
- import type { SelectedNetworkControllerMessenger } from "./SelectedNetworkController.mjs";
5
- export type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {
6
- networkClientId?: NetworkClientId;
7
- origin?: string;
8
- };
9
- export declare const createSelectedNetworkMiddleware: (messenger: SelectedNetworkControllerMessenger) => JsonRpcMiddleware<JsonRpcParams, Json>;
10
- //# sourceMappingURL=SelectedNetworkMiddleware.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkMiddleware.d.mts","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kCAAkC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,wBAAwB;AAE3E,OAAO,KAAK,EAAE,kCAAkC,EAAE,wCAAuC;AAGzF,MAAM,MAAM,uCAAuC,GAAG,cAAc,GAAG;IACrE,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,+BAA+B,qDAEzC,kBAAkB,aAAa,EAAE,IAAI,CAevC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectedNetworkMiddleware.mjs","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oCAAoC,EAAE,wCAAuC;AAOtF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,SAA6C,EACL,EAAE;IAC1C,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAE,EAAE,CACrD,SAAS,CAAC,IAAI,CACZ,oCAAoC,CAAC,2BAA2B,EAChE,MAAM,CACP,CAAC;IAEJ,OAAO,CAAC,GAA4C,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,GAAG,CAAC,eAAe,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';\n\nimport type { SelectedNetworkControllerMessenger } from './SelectedNetworkController.js';\nimport { SelectedNetworkControllerActionTypes } from './SelectedNetworkController.js';\n\nexport type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {\n networkClientId?: NetworkClientId;\n origin?: string;\n};\n\nexport const createSelectedNetworkMiddleware = (\n messenger: SelectedNetworkControllerMessenger,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n const getNetworkClientIdForDomain = (origin: string) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n origin,\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.networkClientId = getNetworkClientIdForDomain(req.origin);\n return next();\n };\n};\n"]}
package/dist/index.cjs DELETED
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSelectedNetworkMiddleware = exports.METAMASK_DOMAIN = exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = void 0;
4
- var SelectedNetworkController_js_1 = require("./SelectedNetworkController.cjs");
5
- Object.defineProperty(exports, "SelectedNetworkControllerActionTypes", { enumerable: true, get: function () { return SelectedNetworkController_js_1.SelectedNetworkControllerActionTypes; } });
6
- Object.defineProperty(exports, "SelectedNetworkControllerEventTypes", { enumerable: true, get: function () { return SelectedNetworkController_js_1.SelectedNetworkControllerEventTypes; } });
7
- Object.defineProperty(exports, "SelectedNetworkController", { enumerable: true, get: function () { return SelectedNetworkController_js_1.SelectedNetworkController; } });
8
- Object.defineProperty(exports, "METAMASK_DOMAIN", { enumerable: true, get: function () { return SelectedNetworkController_js_1.METAMASK_DOMAIN; } });
9
- var SelectedNetworkMiddleware_js_1 = require("./SelectedNetworkMiddleware.cjs");
10
- Object.defineProperty(exports, "createSelectedNetworkMiddleware", { enumerable: true, get: function () { return SelectedNetworkMiddleware_js_1.createSelectedNetworkMiddleware; } });
11
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAYA,gFAKwC;AAJtC,oJAAA,oCAAoC,OAAA;AACpC,mJAAA,mCAAmC,OAAA;AACnC,yIAAA,yBAAyB,OAAA;AACzB,+HAAA,eAAe,OAAA;AAQjB,gFAAiF;AAAxE,+IAAA,+BAA+B,OAAA","sourcesContent":["export type {\n SelectedNetworkControllerState,\n SelectedNetworkControllerStateChangeEvent,\n SelectedNetworkControllerGetStateAction,\n SelectedNetworkControllerGetSelectedNetworkStateAction,\n SelectedNetworkControllerActions,\n SelectedNetworkControllerEvents,\n SelectedNetworkControllerMessenger,\n SelectedNetworkControllerOptions,\n NetworkProxy,\n Domain,\n} from './SelectedNetworkController.js';\nexport {\n SelectedNetworkControllerActionTypes,\n SelectedNetworkControllerEventTypes,\n SelectedNetworkController,\n METAMASK_DOMAIN,\n} from './SelectedNetworkController.js';\nexport type {\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetProviderAndBlockTrackerAction,\n} from './SelectedNetworkController-method-action-types.js';\nexport type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware.js';\nexport { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware.js';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,uCAAuC,EACvC,sDAAsD,EACtD,gCAAgC,EAChC,+BAA+B,EAC/B,kCAAkC,EAClC,gCAAgC,EAChC,YAAY,EACZ,MAAM,GACP,wCAAuC;AACxC,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,GAChB,wCAAuC;AACxC,YAAY,EACV,0DAA0D,EAC1D,0DAA0D,EAC1D,yDAAyD,GAC1D,4DAA2D;AAC5D,YAAY,EAAE,uCAAuC,EAAE,wCAAuC;AAC9F,OAAO,EAAE,+BAA+B,EAAE,wCAAuC"}
package/dist/index.d.mts DELETED
@@ -1,6 +0,0 @@
1
- export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent, SelectedNetworkControllerGetStateAction, SelectedNetworkControllerGetSelectedNetworkStateAction, SelectedNetworkControllerActions, SelectedNetworkControllerEvents, SelectedNetworkControllerMessenger, SelectedNetworkControllerOptions, NetworkProxy, Domain, } from "./SelectedNetworkController.mjs";
2
- export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, METAMASK_DOMAIN, } from "./SelectedNetworkController.mjs";
3
- export type { SelectedNetworkControllerSetNetworkClientIdForDomainAction, SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerGetProviderAndBlockTrackerAction, } from "./SelectedNetworkController-method-action-types.mjs";
4
- export type { SelectedNetworkMiddlewareJsonRpcRequest } from "./SelectedNetworkMiddleware.mjs";
5
- export { createSelectedNetworkMiddleware } from "./SelectedNetworkMiddleware.mjs";
6
- //# sourceMappingURL=index.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,uCAAuC,EACvC,sDAAsD,EACtD,gCAAgC,EAChC,+BAA+B,EAC/B,kCAAkC,EAClC,gCAAgC,EAChC,YAAY,EACZ,MAAM,GACP,wCAAuC;AACxC,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,GAChB,wCAAuC;AACxC,YAAY,EACV,0DAA0D,EAC1D,0DAA0D,EAC1D,yDAAyD,GAC1D,4DAA2D;AAC5D,YAAY,EAAE,uCAAuC,EAAE,wCAAuC;AAC9F,OAAO,EAAE,+BAA+B,EAAE,wCAAuC"}
package/dist/index.mjs DELETED
@@ -1,3 +0,0 @@
1
- export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, METAMASK_DOMAIN } from "./SelectedNetworkController.mjs";
2
- export { createSelectedNetworkMiddleware } from "./SelectedNetworkMiddleware.mjs";
3
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,EAChB,wCAAuC;AAOxC,OAAO,EAAE,+BAA+B,EAAE,wCAAuC","sourcesContent":["export type {\n SelectedNetworkControllerState,\n SelectedNetworkControllerStateChangeEvent,\n SelectedNetworkControllerGetStateAction,\n SelectedNetworkControllerGetSelectedNetworkStateAction,\n SelectedNetworkControllerActions,\n SelectedNetworkControllerEvents,\n SelectedNetworkControllerMessenger,\n SelectedNetworkControllerOptions,\n NetworkProxy,\n Domain,\n} from './SelectedNetworkController.js';\nexport {\n SelectedNetworkControllerActionTypes,\n SelectedNetworkControllerEventTypes,\n SelectedNetworkController,\n METAMASK_DOMAIN,\n} from './SelectedNetworkController.js';\nexport type {\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetProviderAndBlockTrackerAction,\n} from './SelectedNetworkController-method-action-types.js';\nexport type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware.js';\nexport { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware.js';\n"]}