@metamask/selected-network-controller 7.0.1 → 9.0.0

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.
package/CHANGELOG.md CHANGED
@@ -7,11 +7,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [9.0.0]
11
+
12
+ ### Added
13
+
14
+ - Listen to permissions changes and add/remove `domains` ([#3969](https://github.com/MetaMask/core/pull/3969))
15
+
16
+ ### Changed
17
+
18
+ - **BREAKING** remove `perDomainNetwork` from state ([#3989](https://github.com/MetaMask/core/pull/3989))
19
+ - **BREAKING** Add dependency and peer dependency on `@metamask/permission-controller` ^8.0.1 ([#4000](https://github.com/MetaMask/core/pull/4000))
20
+
21
+ ## [8.0.0]
22
+
23
+ ### Changed
24
+
25
+ - **BREAKING:** `setNetworkClientIdForDomain` now throws an error if passed `metamask` for the domain param ([#3908](https://github.com/MetaMask/core/pull/3908)).
26
+ - **BREAKING:** `setNetworkClientIdForDomain` now fails and throws an error if the passed in `domain` is not currently permissioned in the `PermissionsController` ([#3908](https://github.com/MetaMask/core/pull/3908)).
27
+ - **BREAKING:** the `domains` state now no longer contains a `metamask` domain key. Consumers should instead use the `selectedNetworkClientId` from the `NetworkController` to get the selected network for the `metamask` domain ([#3908](https://github.com/MetaMask/core/pull/3908)).
28
+ - **BREAKING:** `getProviderAndBlockTracker` now throws an error if called with any domain while the `perDomainNetwork` flag is false. Consumers should instead use the `provider` and `blockTracker` from the `NetworkController` when the `perDomainNetwork` flag is false ([#3908](https://github.com/MetaMask/core/pull/3908)).
29
+ - **BREAKING:** `getProviderAndBlockTracker` now throws an error if called with a domain that does not have a networkClientId set ([#3908](https://github.com/MetaMask/core/pull/3908)).
30
+ - **BREAKING:** `getNetworkClientIdForDomain` now returns the `selectedNetworkClientId` for the globally selected network if the `perDomainNetwork` flag is false or if the domain is not in the `domains` state ([#3908](https://github.com/MetaMask/core/pull/3908)).
31
+
32
+ ### Removed
33
+
34
+ - **BREAKING:** Remove logic in `selectedNetworkMiddleware` to set a default `networkClientId` for the requesting origin in the `SelectedNetworkController` when not already set. Now if `networkClientId` is not already set for the requesting origin, the middleware will not set a default `networkClientId` for that origin in the `SelectedNetworkController` but will continue to add the `selectedNetworkClientId` from the `NetworkController` to the `networkClientId` property on the request object ([#3908](https://github.com/MetaMask/core/pull/3908)).
35
+
36
+ ### Fixed
37
+
38
+ - The `SelectedNetworkController` now listens for `networkConfiguration` removal events on the `NetworkController` and updates domains pointed at a removed `networkClientId` to the `selectedNetworkClientId` ([#3926](https://github.com/MetaMask/core/pull/3926)).
39
+
10
40
  ## [7.0.1]
11
41
 
12
42
  ### Changed
13
43
 
14
- - Selected network controller should update all domains when perDomainNetwork feature flag is off ([#3834](https://github.com/MetaMask/controllers/pull/3834))
44
+ - Selected network controller should update all domains when perDomainNetwork feature flag is off ([#3834](https://github.com/MetaMask/core/pull/3834))
15
45
 
16
46
  ## [7.0.0]
17
47
 
@@ -106,7 +136,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
106
136
 
107
137
  - Initial Release ([#1643](https://github.com/MetaMask/core/pull/1643))
108
138
 
109
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@7.0.1...HEAD
139
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@9.0.0...HEAD
140
+ [9.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@8.0.0...@metamask/selected-network-controller@9.0.0
141
+ [8.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@7.0.1...@metamask/selected-network-controller@8.0.0
110
142
  [7.0.1]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@7.0.0...@metamask/selected-network-controller@7.0.1
111
143
  [7.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@6.0.0...@metamask/selected-network-controller@7.0.0
112
144
  [6.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@5.0.0...@metamask/selected-network-controller@6.0.0
@@ -1,9 +1,11 @@
1
1
  import type { RestrictedControllerMessenger } from '@metamask/base-controller';
2
2
  import { BaseController } from '@metamask/base-controller';
3
- import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerStateChangeEvent, ProviderProxy } from '@metamask/network-controller';
3
+ import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetStateAction, NetworkControllerStateChangeEvent, ProviderProxy } from '@metamask/network-controller';
4
+ import type { PermissionControllerStateChange, GetSubjects as PermissionControllerGetSubjectsAction, HasPermissions as PermissionControllerHasPermissions } from '@metamask/permission-controller';
4
5
  import type { Patch } from 'immer';
5
6
  export declare const controllerName = "SelectedNetworkController";
6
7
  declare type Domain = string;
8
+ export declare const METAMASK_DOMAIN: "metamask";
7
9
  export declare const SelectedNetworkControllerActionTypes: {
8
10
  getState: "SelectedNetworkController:getState";
9
11
  getNetworkClientIdForDomain: "SelectedNetworkController:getNetworkClientIdForDomain";
@@ -14,12 +16,6 @@ export declare const SelectedNetworkControllerEventTypes: {
14
16
  };
15
17
  export declare type SelectedNetworkControllerState = {
16
18
  domains: Record<Domain, NetworkClientId>;
17
- /**
18
- * Feature flag to start returning networkClientId based on the domain.
19
- * when the flag is false, the 'metamask' domain will always be used.
20
- * defaults to false
21
- */
22
- perDomainNetwork: boolean;
23
19
  };
24
20
  export declare type SelectedNetworkControllerStateChangeEvent = {
25
21
  type: typeof SelectedNetworkControllerEventTypes.stateChange;
@@ -31,20 +27,22 @@ export declare type SelectedNetworkControllerGetSelectedNetworkStateAction = {
31
27
  };
32
28
  export declare type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {
33
29
  type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain;
34
- handler: (domain: string) => NetworkClientId;
30
+ handler: SelectedNetworkController['getNetworkClientIdForDomain'];
35
31
  };
36
32
  export declare type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {
37
33
  type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain;
38
- handler: (domain: string, NetworkClientId: NetworkClientId) => void;
34
+ handler: SelectedNetworkController['setNetworkClientIdForDomain'];
39
35
  };
40
36
  export declare type SelectedNetworkControllerActions = SelectedNetworkControllerGetSelectedNetworkStateAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction;
41
- export declare type AllowedActions = NetworkControllerGetNetworkClientByIdAction;
37
+ export declare type AllowedActions = NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetStateAction | PermissionControllerHasPermissions | PermissionControllerGetSubjectsAction;
42
38
  export declare type SelectedNetworkControllerEvents = SelectedNetworkControllerStateChangeEvent;
43
- export declare type AllowedEvents = NetworkControllerStateChangeEvent;
39
+ export declare type AllowedEvents = NetworkControllerStateChangeEvent | PermissionControllerStateChange;
44
40
  export declare type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<typeof controllerName, SelectedNetworkControllerActions | AllowedActions, SelectedNetworkControllerEvents | AllowedEvents, AllowedActions['type'], AllowedEvents['type']>;
41
+ export declare type GetUseRequestQueue = () => boolean;
45
42
  export declare type SelectedNetworkControllerOptions = {
46
43
  state?: SelectedNetworkControllerState;
47
44
  messenger: SelectedNetworkControllerMessenger;
45
+ getUseRequestQueue: GetUseRequestQueue;
48
46
  };
49
47
  export declare type NetworkProxy = {
50
48
  provider: ProviderProxy;
@@ -61,11 +59,11 @@ export declare class SelectedNetworkController extends BaseController<typeof con
61
59
  * @param options - The controller options.
62
60
  * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.
63
61
  * @param options.state - The controllers initial state.
62
+ * @param options.getUseRequestQueue - feature flag for perDappNetwork & request queueing features
64
63
  */
65
- constructor({ messenger, state, }: SelectedNetworkControllerOptions);
66
- setNetworkClientIdForMetamask(networkClientId: NetworkClientId): void;
64
+ constructor({ messenger, state, getUseRequestQueue, }: SelectedNetworkControllerOptions);
67
65
  setNetworkClientIdForDomain(domain: Domain, networkClientId: NetworkClientId): void;
68
- getNetworkClientIdForDomain(domain: Domain): string;
66
+ getNetworkClientIdForDomain(domain: Domain): NetworkClientId;
69
67
  /**
70
68
  * Accesses the provider and block tracker for the currently selected network.
71
69
  *
@@ -73,7 +71,6 @@ export declare class SelectedNetworkController extends BaseController<typeof con
73
71
  * @returns The proxy and block tracker proxies.
74
72
  */
75
73
  getProviderAndBlockTracker(domain: Domain): NetworkProxy;
76
- setPerDomainNetwork(enabled: boolean): void;
77
74
  }
78
75
  export {};
79
76
  //# sourceMappingURL=SelectedNetworkController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectedNetworkController.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,2CAA2C,EAC3C,iCAAiC,EACjC,aAAa,EACd,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,eAAO,MAAM,cAAc,8BAA8B,CAAC;AAY1D,aAAK,MAAM,GAAG,MAAM,CAAC;AAIrB,eAAO,MAAM,oCAAoC;;;;CAMhD,CAAC;AAEF,eAAO,MAAM,mCAAmC;;CAE/C,CAAC;AAEF,oBAAY,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,yCAAyC,GAAG;IACtD,IAAI,EAAE,OAAO,mCAAmC,CAAC,WAAW,CAAC;IAC7D,OAAO,EAAE,CAAC,8BAA8B,EAAE,KAAK,EAAE,CAAC,CAAC;CACpD,CAAC;AAEF,oBAAY,sDAAsD,GAAG;IACnE,IAAI,EAAE,OAAO,oCAAoC,CAAC,QAAQ,CAAC;IAC3D,OAAO,EAAE,MAAM,8BAA8B,CAAC;CAC/C,CAAC;AAEF,oBAAY,0DAA0D,GAAG;IACvE,IAAI,EAAE,OAAO,oCAAoC,CAAC,2BAA2B,CAAC;IAC9E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,CAAC;CAC9C,CAAC;AAEF,oBAAY,0DAA0D,GAAG;IACvE,IAAI,EAAE,OAAO,oCAAoC,CAAC,2BAA2B,CAAC;IAC9E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,KAAK,IAAI,CAAC;CACrE,CAAC;AAEF,oBAAY,gCAAgC,GACxC,sDAAsD,GACtD,0DAA0D,GAC1D,0DAA0D,CAAC;AAE/D,oBAAY,cAAc,GAAG,2CAA2C,CAAC;AAEzE,oBAAY,+BAA+B,GACzC,yCAAyC,CAAC;AAE5C,oBAAY,aAAa,GAAG,iCAAiC,CAAC;AAE9D,oBAAY,kCAAkC,GAAG,6BAA6B,CAC5E,OAAO,cAAc,EACrB,gCAAgC,GAAG,cAAc,EACjD,+BAA+B,GAAG,aAAa,EAC/C,cAAc,CAAC,MAAM,CAAC,EACtB,aAAa,CAAC,MAAM,CAAC,CACtB,CAAC;AAEF,oBAAY,gCAAgC,GAAG;IAC7C,KAAK,CAAC,EAAE,8BAA8B,CAAC;IACvC,SAAS,EAAE,kCAAkC,CAAC;CAC/C,CAAC;AAEF,oBAAY,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;;;;;;OAMG;gBACS,EACV,SAAS,EACT,KAAyB,GAC1B,EAAE,gCAAgC;IAsBnC,6BAA6B,CAAC,eAAe,EAAE,eAAe;IAiC9D,2BAA2B,CACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe;IAiBlC,2BAA2B,CAAC,MAAM,EAAE,MAAM;IAO1C;;;;;OAKG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAmBxD,mBAAmB,CAAC,OAAO,EAAE,OAAO;CAarC"}
1
+ {"version":3,"file":"SelectedNetworkController.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,26 @@
1
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
+ };
2
8
  var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
9
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
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");
5
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
12
  };
7
- var _SelectedNetworkController_instances, _SelectedNetworkController_proxies, _SelectedNetworkController_registerMessageHandlers, _SelectedNetworkController_setNetworkClientIdForDomain;
13
+ var _SelectedNetworkController_instances, _SelectedNetworkController_proxies, _SelectedNetworkController_getUseRequestQueue, _SelectedNetworkController_registerMessageHandlers, _SelectedNetworkController_setNetworkClientIdForDomain, _SelectedNetworkController_domainHasPermissions;
8
14
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = exports.controllerName = void 0;
15
+ exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = exports.METAMASK_DOMAIN = exports.controllerName = void 0;
10
16
  const base_controller_1 = require("@metamask/base-controller");
11
17
  const swappable_obj_proxy_1 = require("@metamask/swappable-obj-proxy");
12
18
  exports.controllerName = 'SelectedNetworkController';
13
19
  const stateMetadata = {
14
20
  domains: { persist: true, anonymous: false },
15
- perDomainNetwork: { persist: true, anonymous: false },
16
21
  };
17
- const getDefaultState = () => ({
18
- domains: {},
19
- perDomainNetwork: false,
20
- });
21
- const METAMASK_DOMAIN = 'metamask';
22
+ const getDefaultState = () => ({ domains: {} });
23
+ exports.METAMASK_DOMAIN = 'metamask';
22
24
  exports.SelectedNetworkControllerActionTypes = {
23
25
  getState: `${exports.controllerName}:getState`,
24
26
  getNetworkClientIdForDomain: `${exports.controllerName}:getNetworkClientIdForDomain`,
@@ -37,8 +39,9 @@ class SelectedNetworkController extends base_controller_1.BaseController {
37
39
  * @param options - The controller options.
38
40
  * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.
39
41
  * @param options.state - The controllers initial state.
42
+ * @param options.getUseRequestQueue - feature flag for perDappNetwork & request queueing features
40
43
  */
41
- constructor({ messenger, state = getDefaultState(), }) {
44
+ constructor({ messenger, state = getDefaultState(), getUseRequestQueue, }) {
42
45
  super({
43
46
  name: exports.controllerName,
44
47
  metadata: stateMetadata,
@@ -47,27 +50,63 @@ class SelectedNetworkController extends base_controller_1.BaseController {
47
50
  });
48
51
  _SelectedNetworkController_instances.add(this);
49
52
  _SelectedNetworkController_proxies.set(this, new Map());
53
+ _SelectedNetworkController_getUseRequestQueue.set(this, void 0);
54
+ __classPrivateFieldSet(this, _SelectedNetworkController_getUseRequestQueue, getUseRequestQueue, "f");
50
55
  __classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_registerMessageHandlers).call(this);
51
- }
52
- setNetworkClientIdForMetamask(networkClientId) {
53
- this.setNetworkClientIdForDomain(METAMASK_DOMAIN, networkClientId);
54
- }
55
- setNetworkClientIdForDomain(domain, networkClientId) {
56
- if (!this.state.perDomainNetwork) {
57
- Object.entries(this.state.domains).forEach(([entryDomain, networkClientIdForDomain]) => {
58
- if (networkClientIdForDomain !== networkClientId &&
59
- entryDomain !== domain) {
60
- __classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_setNetworkClientIdForDomain).call(this, entryDomain, networkClientId);
56
+ // 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)
57
+ this.messagingSystem
58
+ .call('PermissionController:getSubjectNames')
59
+ .filter((domain) => this.state.domains[domain] === undefined)
60
+ .forEach((domain) => this.setNetworkClientIdForDomain(domain, this.messagingSystem.call('NetworkController:getState')
61
+ .selectedNetworkClientId));
62
+ this.messagingSystem.subscribe('PermissionController:stateChange', (_, patches) => {
63
+ patches.forEach(({ op, path }) => {
64
+ const isChangingSubject = path[0] === 'subjects' && path[1] !== undefined;
65
+ if (isChangingSubject && typeof path[1] === 'string') {
66
+ const domain = path[1];
67
+ if (op === 'add' && this.state.domains[domain] === undefined) {
68
+ this.setNetworkClientIdForDomain(domain, this.messagingSystem.call('NetworkController:getState')
69
+ .selectedNetworkClientId);
70
+ }
71
+ else if (op === 'remove' &&
72
+ this.state.domains[domain] !== undefined) {
73
+ this.update(({ domains }) => {
74
+ delete domains[domain];
75
+ });
76
+ }
61
77
  }
62
78
  });
79
+ });
80
+ this.messagingSystem.subscribe('NetworkController:stateChange', ({ selectedNetworkClientId }, patches) => {
81
+ patches.forEach(({ op, path }) => {
82
+ // if a network is removed, update the networkClientId for all domains that were using it to the selected network
83
+ if (op === 'remove' && path[0] === 'networkConfigurations') {
84
+ const removedNetworkClientId = path[1];
85
+ Object.entries(this.state.domains).forEach(([domain, networkClientIdForDomain]) => {
86
+ if (networkClientIdForDomain === removedNetworkClientId) {
87
+ this.setNetworkClientIdForDomain(domain, selectedNetworkClientId);
88
+ }
89
+ });
90
+ }
91
+ });
92
+ });
93
+ }
94
+ setNetworkClientIdForDomain(domain, networkClientId) {
95
+ if (domain === exports.METAMASK_DOMAIN) {
96
+ throw new Error(`NetworkClientId for domain "${exports.METAMASK_DOMAIN}" cannot be set on the SelectedNetworkController`);
97
+ }
98
+ if (!__classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_domainHasPermissions).call(this, domain)) {
99
+ throw new Error('NetworkClientId for domain cannot be called with a domain that has not yet been granted permissions');
63
100
  }
64
101
  __classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_setNetworkClientIdForDomain).call(this, domain, networkClientId);
65
102
  }
66
103
  getNetworkClientIdForDomain(domain) {
67
- if (this.state.perDomainNetwork) {
68
- return this.state.domains[domain];
104
+ var _a;
105
+ const { selectedNetworkClientId: metamaskSelectedNetworkClientId } = this.messagingSystem.call('NetworkController:getState');
106
+ if (!__classPrivateFieldGet(this, _SelectedNetworkController_getUseRequestQueue, "f").call(this)) {
107
+ return metamaskSelectedNetworkClientId;
69
108
  }
70
- return this.state.domains[METAMASK_DOMAIN];
109
+ return (_a = this.state.domains[domain]) !== null && _a !== void 0 ? _a : metamaskSelectedNetworkClientId;
71
110
  }
72
111
  /**
73
112
  * Accesses the provider and block tracker for the currently selected network.
@@ -76,9 +115,16 @@ class SelectedNetworkController extends base_controller_1.BaseController {
76
115
  * @returns The proxy and block tracker proxies.
77
116
  */
78
117
  getProviderAndBlockTracker(domain) {
118
+ if (!__classPrivateFieldGet(this, _SelectedNetworkController_getUseRequestQueue, "f").call(this)) {
119
+ throw new Error('Provider and BlockTracker should be fetched from NetworkController when useRequestQueue is false');
120
+ }
121
+ const networkClientId = this.state.domains[domain];
122
+ if (!networkClientId) {
123
+ throw new Error('NetworkClientId has not been set for the requested domain');
124
+ }
79
125
  let networkProxy = __classPrivateFieldGet(this, _SelectedNetworkController_proxies, "f").get(domain);
80
126
  if (networkProxy === undefined) {
81
- const networkClient = this.messagingSystem.call('NetworkController:getNetworkClientById', this.getNetworkClientIdForDomain(domain));
127
+ const networkClient = this.messagingSystem.call('NetworkController:getNetworkClientById', networkClientId);
82
128
  networkProxy = {
83
129
  provider: (0, swappable_obj_proxy_1.createEventEmitterProxy)(networkClient.provider),
84
130
  blockTracker: (0, swappable_obj_proxy_1.createEventEmitterProxy)(networkClient.blockTracker, {
@@ -89,19 +135,9 @@ class SelectedNetworkController extends base_controller_1.BaseController {
89
135
  }
90
136
  return networkProxy;
91
137
  }
92
- setPerDomainNetwork(enabled) {
93
- this.update((state) => {
94
- state.perDomainNetwork = enabled;
95
- return state;
96
- });
97
- Object.keys(this.state.domains).forEach((domain) => {
98
- // when perDomainNetwork is false, getNetworkClientIdForDomain always returns the networkClientId for the domain 'metamask'
99
- this.setNetworkClientIdForDomain(domain, this.getNetworkClientIdForDomain(domain));
100
- });
101
- }
102
138
  }
103
139
  exports.SelectedNetworkController = SelectedNetworkController;
104
- _SelectedNetworkController_proxies = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_registerMessageHandlers = function _SelectedNetworkController_registerMessageHandlers() {
140
+ _SelectedNetworkController_proxies = new WeakMap(), _SelectedNetworkController_getUseRequestQueue = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_registerMessageHandlers = function _SelectedNetworkController_registerMessageHandlers() {
105
141
  this.messagingSystem.registerActionHandler(exports.SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, this.getNetworkClientIdForDomain.bind(this));
106
142
  this.messagingSystem.registerActionHandler(exports.SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain, this.setNetworkClientIdForDomain.bind(this));
107
143
  }, _SelectedNetworkController_setNetworkClientIdForDomain = function _SelectedNetworkController_setNetworkClientIdForDomain(domain, networkClientId) {
@@ -121,9 +157,8 @@ _SelectedNetworkController_proxies = new WeakMap(), _SelectedNetworkController_i
121
157
  }
122
158
  this.update((state) => {
123
159
  state.domains[domain] = networkClientId;
124
- if (!state.perDomainNetwork) {
125
- state.domains[METAMASK_DOMAIN] = networkClientId;
126
- }
127
160
  });
161
+ }, _SelectedNetworkController_domainHasPermissions = function _SelectedNetworkController_domainHasPermissions(domain) {
162
+ return this.messagingSystem.call('PermissionController:hasPermissions', domain);
128
163
  };
129
164
  //# sourceMappingURL=SelectedNetworkController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectedNetworkController.js","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n BlockTrackerProxy,\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerStateChangeEvent,\n ProviderProxy,\n} from '@metamask/network-controller';\nimport { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';\nimport type { Patch } from 'immer';\n\nexport const controllerName = 'SelectedNetworkController';\n\nconst stateMetadata = {\n domains: { persist: true, anonymous: false },\n perDomainNetwork: { persist: true, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n domains: {},\n perDomainNetwork: false,\n});\n\ntype Domain = string;\n\nconst 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 * Feature flag to start returning networkClientId based on the domain.\n * when the flag is false, the 'metamask' domain will always be used.\n * defaults to false\n */\n perDomainNetwork: boolean;\n};\n\nexport type SelectedNetworkControllerStateChangeEvent = {\n type: typeof SelectedNetworkControllerEventTypes.stateChange;\n payload: [SelectedNetworkControllerState, Patch[]];\n};\n\nexport type SelectedNetworkControllerGetSelectedNetworkStateAction = {\n type: typeof SelectedNetworkControllerActionTypes.getState;\n handler: () => SelectedNetworkControllerState;\n};\n\nexport type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain;\n handler: (domain: string) => NetworkClientId;\n};\n\nexport type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain;\n handler: (domain: string, NetworkClientId: NetworkClientId) => void;\n};\n\nexport type SelectedNetworkControllerActions =\n | SelectedNetworkControllerGetSelectedNetworkStateAction\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction;\n\nexport type AllowedActions = NetworkControllerGetNetworkClientByIdAction;\n\nexport type SelectedNetworkControllerEvents =\n SelectedNetworkControllerStateChangeEvent;\n\nexport type AllowedEvents = NetworkControllerStateChangeEvent;\n\nexport type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SelectedNetworkControllerActions | AllowedActions,\n SelectedNetworkControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\nexport type SelectedNetworkControllerOptions = {\n state?: SelectedNetworkControllerState;\n messenger: SelectedNetworkControllerMessenger;\n};\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 #proxies = new Map<Domain, NetworkProxy>();\n\n /**\n * Construct a SelectedNetworkController controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.\n * @param options.state - The controllers initial state.\n */\n constructor({\n messenger,\n state = getDefaultState(),\n }: SelectedNetworkControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state,\n });\n this.#registerMessageHandlers();\n }\n\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n this.getNetworkClientIdForDomain.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,\n this.setNetworkClientIdForDomain.bind(this),\n );\n }\n\n setNetworkClientIdForMetamask(networkClientId: NetworkClientId) {\n this.setNetworkClientIdForDomain(METAMASK_DOMAIN, networkClientId);\n }\n\n #setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n const networkProxy = this.#proxies.get(domain);\n if (networkProxy === undefined) {\n this.#proxies.set(domain, {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n });\n } else {\n networkProxy.provider.setTarget(networkClient.provider);\n networkProxy.blockTracker.setTarget(networkClient.blockTracker);\n }\n\n this.update((state) => {\n state.domains[domain] = networkClientId;\n if (!state.perDomainNetwork) {\n state.domains[METAMASK_DOMAIN] = networkClientId;\n }\n });\n }\n\n setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n if (!this.state.perDomainNetwork) {\n Object.entries(this.state.domains).forEach(\n ([entryDomain, networkClientIdForDomain]) => {\n if (\n networkClientIdForDomain !== networkClientId &&\n entryDomain !== domain\n ) {\n this.#setNetworkClientIdForDomain(entryDomain, networkClientId);\n }\n },\n );\n }\n this.#setNetworkClientIdForDomain(domain, networkClientId);\n }\n\n getNetworkClientIdForDomain(domain: Domain) {\n if (this.state.perDomainNetwork) {\n return this.state.domains[domain];\n }\n return this.state.domains[METAMASK_DOMAIN];\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 let networkProxy = this.#proxies.get(domain);\n if (networkProxy === undefined) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n this.getNetworkClientIdForDomain(domain),\n );\n networkProxy = {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n };\n this.#proxies.set(domain, networkProxy);\n }\n\n return networkProxy;\n }\n\n setPerDomainNetwork(enabled: boolean) {\n this.update((state) => {\n state.perDomainNetwork = enabled;\n return state;\n });\n Object.keys(this.state.domains).forEach((domain) => {\n // when perDomainNetwork is false, getNetworkClientIdForDomain always returns the networkClientId for the domain 'metamask'\n this.setNetworkClientIdForDomain(\n domain,\n this.getNetworkClientIdForDomain(domain),\n );\n });\n }\n}\n"]}
1
+ {"version":3,"file":"SelectedNetworkController.js","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n BlockTrackerProxy,\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n NetworkControllerStateChangeEvent,\n ProviderProxy,\n} from '@metamask/network-controller';\nimport type {\n PermissionControllerStateChange,\n GetSubjects as PermissionControllerGetSubjectsAction,\n HasPermissions as PermissionControllerHasPermissions,\n} from '@metamask/permission-controller';\nimport { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';\nimport type { Patch } from 'immer';\n\nexport const controllerName = 'SelectedNetworkController';\n\nconst stateMetadata = {\n domains: { persist: true, anonymous: false },\n};\n\nconst getDefaultState = () => ({ domains: {} });\n\ntype 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 type: typeof SelectedNetworkControllerEventTypes.stateChange;\n payload: [SelectedNetworkControllerState, Patch[]];\n};\n\nexport type SelectedNetworkControllerGetSelectedNetworkStateAction = {\n type: typeof SelectedNetworkControllerActionTypes.getState;\n handler: () => SelectedNetworkControllerState;\n};\n\nexport type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain;\n handler: SelectedNetworkController['getNetworkClientIdForDomain'];\n};\n\nexport type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain;\n handler: SelectedNetworkController['setNetworkClientIdForDomain'];\n};\n\nexport type SelectedNetworkControllerActions =\n | SelectedNetworkControllerGetSelectedNetworkStateAction\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction;\n\nexport type AllowedActions =\n | NetworkControllerGetNetworkClientByIdAction\n | NetworkControllerGetStateAction\n | PermissionControllerHasPermissions\n | PermissionControllerGetSubjectsAction;\n\nexport type SelectedNetworkControllerEvents =\n SelectedNetworkControllerStateChangeEvent;\n\nexport type AllowedEvents =\n | NetworkControllerStateChangeEvent\n | PermissionControllerStateChange;\n\nexport type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SelectedNetworkControllerActions | AllowedActions,\n SelectedNetworkControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\nexport type GetUseRequestQueue = () => boolean;\n\nexport type SelectedNetworkControllerOptions = {\n state?: SelectedNetworkControllerState;\n messenger: SelectedNetworkControllerMessenger;\n getUseRequestQueue: GetUseRequestQueue;\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 #proxies = new Map<Domain, NetworkProxy>();\n\n #getUseRequestQueue: GetUseRequestQueue;\n\n /**\n * Construct a SelectedNetworkController controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.\n * @param options.state - The controllers initial state.\n * @param options.getUseRequestQueue - feature flag for perDappNetwork & request queueing features\n */\n constructor({\n messenger,\n state = getDefaultState(),\n getUseRequestQueue,\n }: SelectedNetworkControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state,\n });\n this.#getUseRequestQueue = getUseRequestQueue;\n this.#registerMessageHandlers();\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.messagingSystem\n .call('PermissionController:getSubjectNames')\n .filter((domain) => this.state.domains[domain] === undefined)\n .forEach((domain) =>\n this.setNetworkClientIdForDomain(\n domain,\n this.messagingSystem.call('NetworkController:getState')\n .selectedNetworkClientId,\n ),\n );\n\n this.messagingSystem.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.messagingSystem.call('NetworkController:getState')\n .selectedNetworkClientId,\n );\n } else if (\n op === 'remove' &&\n this.state.domains[domain] !== undefined\n ) {\n this.update(({ domains }) => {\n delete domains[domain];\n });\n }\n }\n });\n },\n );\n\n this.messagingSystem.subscribe(\n 'NetworkController:stateChange',\n ({ selectedNetworkClientId }, patches) => {\n patches.forEach(({ op, path }) => {\n // if a network is removed, update the networkClientId for all domains that were using it to the selected network\n if (op === 'remove' && path[0] === 'networkConfigurations') {\n const removedNetworkClientId = path[1] as NetworkClientId;\n Object.entries(this.state.domains).forEach(\n ([domain, networkClientIdForDomain]) => {\n if (networkClientIdForDomain === removedNetworkClientId) {\n this.setNetworkClientIdForDomain(\n domain,\n selectedNetworkClientId,\n );\n }\n },\n );\n }\n });\n },\n );\n }\n\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n this.getNetworkClientIdForDomain.bind(this),\n );\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,\n this.setNetworkClientIdForDomain.bind(this),\n );\n }\n\n #setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n const networkProxy = this.#proxies.get(domain);\n if (networkProxy === undefined) {\n this.#proxies.set(domain, {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n });\n } else {\n networkProxy.provider.setTarget(networkClient.provider);\n networkProxy.blockTracker.setTarget(networkClient.blockTracker);\n }\n\n this.update((state) => {\n state.domains[domain] = networkClientId;\n });\n }\n\n #domainHasPermissions(domain: Domain): boolean {\n return this.messagingSystem.call(\n 'PermissionController:hasPermissions',\n domain,\n );\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.messagingSystem.call('NetworkController:getState');\n if (!this.#getUseRequestQueue()) {\n return metamaskSelectedNetworkClientId;\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 (!this.#getUseRequestQueue()) {\n throw new Error(\n 'Provider and BlockTracker should be fetched from NetworkController when useRequestQueue is false',\n );\n }\n const networkClientId = this.state.domains[domain];\n if (!networkClientId) {\n throw new Error(\n 'NetworkClientId has not been set for the requested domain',\n );\n }\n let networkProxy = this.#proxies.get(domain);\n if (networkProxy === undefined) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n networkProxy = {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n };\n this.#proxies.set(domain, networkProxy);\n }\n\n return networkProxy;\n }\n}\n"]}
@@ -1,14 +1,10 @@
1
- import type { ControllerMessenger } from '@metamask/base-controller';
2
1
  import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
3
- import type { NetworkClientId, NetworkControllerGetStateAction, NetworkControllerStateChangeEvent } from '@metamask/network-controller';
2
+ import type { NetworkClientId } from '@metamask/network-controller';
4
3
  import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
5
- import type { SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerSetNetworkClientIdForDomainAction } from './SelectedNetworkController';
6
- export declare type MiddlewareAllowedActions = NetworkControllerGetStateAction;
7
- export declare type MiddlewareAllowedEvents = NetworkControllerStateChangeEvent;
8
- export declare type SelectedNetworkMiddlewareMessenger = ControllerMessenger<SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction | MiddlewareAllowedActions, MiddlewareAllowedEvents>;
4
+ import type { SelectedNetworkControllerMessenger } from './SelectedNetworkController';
9
5
  export declare type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {
10
6
  networkClientId?: NetworkClientId;
11
7
  origin?: string;
12
8
  };
13
- export declare const createSelectedNetworkMiddleware: (messenger: SelectedNetworkMiddlewareMessenger) => JsonRpcMiddleware<JsonRpcParams, Json>;
9
+ export declare const createSelectedNetworkMiddleware: (messenger: SelectedNetworkControllerMessenger) => JsonRpcMiddleware<JsonRpcParams, Json>;
14
10
  //# sourceMappingURL=SelectedNetworkMiddleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectedNetworkMiddleware.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EACV,eAAe,EACf,+BAA+B,EAC/B,iCAAiC,EAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,KAAK,EACV,0DAA0D,EAC1D,0DAA0D,EAC3D,MAAM,6BAA6B,CAAC;AAGrC,oBAAY,wBAAwB,GAAG,+BAA+B,CAAC;AACvE,oBAAY,uBAAuB,GAAG,iCAAiC,CAAC;AAExE,oBAAY,kCAAkC,GAAG,mBAAmB,CAChE,0DAA0D,GAC1D,0DAA0D,GAC1D,wBAAwB,EAC1B,uBAAuB,CACxB,CAAC;AAEF,oBAAY,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,CAgCvC,CAAC"}
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,6BAA6B,CAAC;AAGtF,oBAAY,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"}
@@ -4,15 +4,10 @@ exports.createSelectedNetworkMiddleware = void 0;
4
4
  const SelectedNetworkController_1 = require("./SelectedNetworkController");
5
5
  const createSelectedNetworkMiddleware = (messenger) => {
6
6
  const getNetworkClientIdForDomain = (origin) => messenger.call(SelectedNetworkController_1.SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, origin);
7
- const setNetworkClientIdForDomain = (origin, networkClientId) => messenger.call(SelectedNetworkController_1.SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain, origin, networkClientId);
8
- const getDefaultNetworkClientId = () => messenger.call('NetworkController:getState').selectedNetworkClientId;
9
7
  return (req, _, next) => {
10
8
  if (!req.origin) {
11
9
  throw new Error("Request object is lacking an 'origin'");
12
10
  }
13
- if (getNetworkClientIdForDomain(req.origin) === undefined) {
14
- setNetworkClientIdForDomain(req.origin, getDefaultNetworkClientId());
15
- }
16
11
  req.networkClientId = getNetworkClientIdForDomain(req.origin);
17
12
  return next();
18
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SelectedNetworkMiddleware.js","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":";;;AAaA,2EAAmF;AAiB5E,MAAM,+BAA+B,GAAG,CAC7C,SAA6C,EACL,EAAE;IAC1C,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAE,EAAE,CACrD,SAAS,CAAC,IAAI,CACZ,gEAAoC,CAAC,2BAA2B,EAChE,MAAM,CACP,CAAC;IAEJ,MAAM,2BAA2B,GAAG,CAClC,MAAc,EACd,eAAgC,EAChC,EAAE,CACF,SAAS,CAAC,IAAI,CACZ,gEAAoC,CAAC,2BAA2B,EAChE,MAAM,EACN,eAAe,CAChB,CAAC;IAEJ,MAAM,yBAAyB,GAAG,GAAG,EAAE,CACrC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,uBAAuB,CAAC;IAEvE,OAAO,CAAC,GAA4C,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QAED,IAAI,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;YACzD,2BAA2B,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;SACtE;QAED,GAAG,CAAC,eAAe,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,CAAC;AAlCW,QAAA,+BAA+B,mCAkC1C","sourcesContent":["import type { ControllerMessenger } from '@metamask/base-controller';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type {\n NetworkClientId,\n NetworkControllerGetStateAction,\n NetworkControllerStateChangeEvent,\n} from '@metamask/network-controller';\nimport type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';\n\nimport type {\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n} from './SelectedNetworkController';\nimport { SelectedNetworkControllerActionTypes } from './SelectedNetworkController';\n\nexport type MiddlewareAllowedActions = NetworkControllerGetStateAction;\nexport type MiddlewareAllowedEvents = NetworkControllerStateChangeEvent;\n\nexport type SelectedNetworkMiddlewareMessenger = ControllerMessenger<\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction\n | MiddlewareAllowedActions,\n MiddlewareAllowedEvents\n>;\n\nexport type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {\n networkClientId?: NetworkClientId;\n origin?: string;\n};\n\nexport const createSelectedNetworkMiddleware = (\n messenger: SelectedNetworkMiddlewareMessenger,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n const getNetworkClientIdForDomain = (origin: string) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n origin,\n );\n\n const setNetworkClientIdForDomain = (\n origin: string,\n networkClientId: NetworkClientId,\n ) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,\n origin,\n networkClientId,\n );\n\n const getDefaultNetworkClientId = () =>\n messenger.call('NetworkController:getState').selectedNetworkClientId;\n\n return (req: SelectedNetworkMiddlewareJsonRpcRequest, _, next) => {\n if (!req.origin) {\n throw new Error(\"Request object is lacking an 'origin'\");\n }\n\n if (getNetworkClientIdForDomain(req.origin) === undefined) {\n setNetworkClientIdForDomain(req.origin, getDefaultNetworkClientId());\n }\n\n req.networkClientId = getNetworkClientIdForDomain(req.origin);\n return next();\n };\n};\n"]}
1
+ {"version":3,"file":"SelectedNetworkMiddleware.js","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":";;;AAKA,2EAAmF;AAO5E,MAAM,+BAA+B,GAAG,CAC7C,SAA6C,EACL,EAAE;IAC1C,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAE,EAAE,CACrD,SAAS,CAAC,IAAI,CACZ,gEAAoC,CAAC,2BAA2B,EAChE,MAAM,CACP,CAAC;IAEJ,OAAO,CAAC,GAA4C,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;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';\nimport { SelectedNetworkControllerActionTypes } from './SelectedNetworkController';\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.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent, SelectedNetworkControllerGetSelectedNetworkStateAction, SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerSetNetworkClientIdForDomainAction, SelectedNetworkControllerActions, SelectedNetworkControllerEvents, SelectedNetworkControllerMessenger, SelectedNetworkControllerOptions, NetworkProxy, } from './SelectedNetworkController';
2
- export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, } from './SelectedNetworkController';
2
+ export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, METAMASK_DOMAIN, } from './SelectedNetworkController';
3
3
  export type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware';
4
4
  export { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,sDAAsD,EACtD,0DAA0D,EAC1D,0DAA0D,EAC1D,gCAAgC,EAChC,+BAA+B,EAC/B,kCAAkC,EAClC,gCAAgC,EAChC,YAAY,GACb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,uCAAuC,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,sDAAsD,EACtD,0DAA0D,EAC1D,0DAA0D,EAC1D,gCAAgC,EAChC,+BAA+B,EAC/B,kCAAkC,EAClC,gCAAgC,EAChC,YAAY,GACb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,uCAAuC,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSelectedNetworkMiddleware = exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = void 0;
3
+ exports.createSelectedNetworkMiddleware = exports.METAMASK_DOMAIN = exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = void 0;
4
4
  var SelectedNetworkController_1 = require("./SelectedNetworkController");
5
5
  Object.defineProperty(exports, "SelectedNetworkControllerActionTypes", { enumerable: true, get: function () { return SelectedNetworkController_1.SelectedNetworkControllerActionTypes; } });
6
6
  Object.defineProperty(exports, "SelectedNetworkControllerEventTypes", { enumerable: true, get: function () { return SelectedNetworkController_1.SelectedNetworkControllerEventTypes; } });
7
7
  Object.defineProperty(exports, "SelectedNetworkController", { enumerable: true, get: function () { return SelectedNetworkController_1.SelectedNetworkController; } });
8
+ Object.defineProperty(exports, "METAMASK_DOMAIN", { enumerable: true, get: function () { return SelectedNetworkController_1.METAMASK_DOMAIN; } });
8
9
  var SelectedNetworkMiddleware_1 = require("./SelectedNetworkMiddleware");
9
10
  Object.defineProperty(exports, "createSelectedNetworkMiddleware", { enumerable: true, get: function () { return SelectedNetworkMiddleware_1.createSelectedNetworkMiddleware; } });
10
11
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAYA,yEAIqC;AAHnC,iJAAA,oCAAoC,OAAA;AACpC,gJAAA,mCAAmC,OAAA;AACnC,sIAAA,yBAAyB,OAAA;AAG3B,yEAA8E;AAArE,4IAAA,+BAA+B,OAAA","sourcesContent":["export type {\n SelectedNetworkControllerState,\n SelectedNetworkControllerStateChangeEvent,\n SelectedNetworkControllerGetSelectedNetworkStateAction,\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n SelectedNetworkControllerActions,\n SelectedNetworkControllerEvents,\n SelectedNetworkControllerMessenger,\n SelectedNetworkControllerOptions,\n NetworkProxy,\n} from './SelectedNetworkController';\nexport {\n SelectedNetworkControllerActionTypes,\n SelectedNetworkControllerEventTypes,\n SelectedNetworkController,\n} from './SelectedNetworkController';\nexport type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware';\nexport { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAYA,yEAKqC;AAJnC,iJAAA,oCAAoC,OAAA;AACpC,gJAAA,mCAAmC,OAAA;AACnC,sIAAA,yBAAyB,OAAA;AACzB,4HAAA,eAAe,OAAA;AAGjB,yEAA8E;AAArE,4IAAA,+BAA+B,OAAA","sourcesContent":["export type {\n SelectedNetworkControllerState,\n SelectedNetworkControllerStateChangeEvent,\n SelectedNetworkControllerGetSelectedNetworkStateAction,\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n SelectedNetworkControllerActions,\n SelectedNetworkControllerEvents,\n SelectedNetworkControllerMessenger,\n SelectedNetworkControllerOptions,\n NetworkProxy,\n} from './SelectedNetworkController';\nexport {\n SelectedNetworkControllerActionTypes,\n SelectedNetworkControllerEventTypes,\n SelectedNetworkController,\n METAMASK_DOMAIN,\n} from './SelectedNetworkController';\nexport type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware';\nexport { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/selected-network-controller",
3
- "version": "7.0.1",
3
+ "version": "9.0.0",
4
4
  "description": "Provides an interface to the currently selected networkClientId for a given domain",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -34,6 +34,7 @@
34
34
  "@metamask/base-controller": "^4.1.1",
35
35
  "@metamask/json-rpc-engine": "^7.3.2",
36
36
  "@metamask/network-controller": "^17.2.0",
37
+ "@metamask/permission-controller": "^8.0.1",
37
38
  "@metamask/swappable-obj-proxy": "^2.2.0",
38
39
  "@metamask/utils": "^8.3.0"
39
40
  },
@@ -52,7 +53,8 @@
52
53
  "typescript": "~4.8.4"
53
54
  },
54
55
  "peerDependencies": {
55
- "@metamask/network-controller": "^17.2.0"
56
+ "@metamask/network-controller": "^17.2.0",
57
+ "@metamask/permission-controller": "^8.0.1"
56
58
  },
57
59
  "engines": {
58
60
  "node": ">=16.0.0"