@metamask/selected-network-controller 26.0.2 → 26.1.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 +35 -1
- package/dist/SelectedNetworkController-method-action-types.cjs +7 -0
- package/dist/SelectedNetworkController-method-action-types.cjs.map +1 -0
- package/dist/SelectedNetworkController-method-action-types.d.cts +28 -0
- package/dist/SelectedNetworkController-method-action-types.d.cts.map +1 -0
- package/dist/SelectedNetworkController-method-action-types.d.mts +28 -0
- package/dist/SelectedNetworkController-method-action-types.d.mts.map +1 -0
- package/dist/SelectedNetworkController-method-action-types.mjs +6 -0
- package/dist/SelectedNetworkController-method-action-types.mjs.map +1 -0
- package/dist/SelectedNetworkController.cjs +8 -6
- package/dist/SelectedNetworkController.cjs.map +1 -1
- package/dist/SelectedNetworkController.d.cts +8 -11
- package/dist/SelectedNetworkController.d.cts.map +1 -1
- package/dist/SelectedNetworkController.d.mts +8 -11
- package/dist/SelectedNetworkController.d.mts.map +1 -1
- package/dist/SelectedNetworkController.mjs +8 -6
- package/dist/SelectedNetworkController.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -12
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [26.1.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Expose missing public `SelectedNetworkController` methods through its messenger ([#8201](https://github.com/MetaMask/core/pull/8201))
|
|
15
|
+
- The following actions are now available:
|
|
16
|
+
- `SelectedNetworkController:getProviderAndBlockTracker`
|
|
17
|
+
- Corresponding action types
|
|
18
|
+
(e.g. `SelectedNetworkControllerGetProviderAndBlockTrackerAction`) are
|
|
19
|
+
available as well.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Bump `@metamask/base-controller` from `^9.0.0` to `^9.0.1` ([#8317](https://github.com/MetaMask/core/pull/8317))
|
|
24
|
+
- Bump `@metamask/messenger` from `^0.3.0` to `^1.0.0` ([#8317](https://github.com/MetaMask/core/pull/8317))
|
|
25
|
+
- Bump `@metamask/network-controller` from `^30.0.0` to `^30.0.1` ([#8317](https://github.com/MetaMask/core/pull/8317))
|
|
26
|
+
- Bump `@metamask/permission-controller` from `^12.2.0` to `^12.3.0` ([#8225](https://github.com/MetaMask/core/pull/8225), [#8317](https://github.com/MetaMask/core/pull/8317))
|
|
27
|
+
- Bump `@metamask/json-rpc-engine` from `^10.2.2` to `^10.2.4` ([#8078](https://github.com/MetaMask/core/pull/8078), [#8317](https://github.com/MetaMask/core/pull/8317))
|
|
28
|
+
|
|
29
|
+
### Deprecated
|
|
30
|
+
|
|
31
|
+
- Deprecate `SelectedNetworkControllerGetSelectedNetworkStateAction` type in favor of `SelectedNetworkControllerGetStateAction` ([#8201](https://github.com/MetaMask/core/pull/8201))
|
|
32
|
+
- The old types is still exported but is now marked as deprecated and will
|
|
33
|
+
be removed in a future release.
|
|
34
|
+
|
|
35
|
+
## [26.0.3]
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- Bump `@metamask/network-controller` from `^29.0.0` to `^30.0.0` ([#7996](https://github.com/MetaMask/core/pull/7996))
|
|
40
|
+
- Bump `@metamask/json-rpc-engine` from `^10.2.1` to `^10.2.2` ([#7856](https://github.com/MetaMask/core/pull/7856))
|
|
41
|
+
|
|
10
42
|
## [26.0.2]
|
|
11
43
|
|
|
12
44
|
### Changed
|
|
@@ -437,7 +469,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
437
469
|
|
|
438
470
|
- Initial Release ([#1643](https://github.com/MetaMask/core/pull/1643))
|
|
439
471
|
|
|
440
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@26.0
|
|
472
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@26.1.0...HEAD
|
|
473
|
+
[26.1.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@26.0.3...@metamask/selected-network-controller@26.1.0
|
|
474
|
+
[26.0.3]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@26.0.2...@metamask/selected-network-controller@26.0.3
|
|
441
475
|
[26.0.2]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@26.0.1...@metamask/selected-network-controller@26.0.2
|
|
442
476
|
[26.0.1]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@26.0.0...@metamask/selected-network-controller@26.0.1
|
|
443
477
|
[26.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@25.0.0...@metamask/selected-network-controller@26.0.0
|
|
@@ -0,0 +1 @@
|
|
|
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';\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"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,wCAAoC;AAE7E,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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file is auto generated.
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
*/
|
|
5
|
+
import type { SelectedNetworkController } from "./SelectedNetworkController.mjs";
|
|
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.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,wCAAoC;AAE7E,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"}
|
|
@@ -0,0 +1 @@
|
|
|
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';\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"]}
|
|
@@ -10,12 +10,17 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
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
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _SelectedNetworkController_instances, _SelectedNetworkController_domainProxyMap,
|
|
13
|
+
var _SelectedNetworkController_instances, _SelectedNetworkController_domainProxyMap, _SelectedNetworkController_setNetworkClientIdForDomain, _SelectedNetworkController_unsetNetworkClientIdForDomain, _SelectedNetworkController_domainHasPermissions;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = exports.METAMASK_DOMAIN = void 0;
|
|
16
16
|
const base_controller_1 = require("@metamask/base-controller");
|
|
17
17
|
const swappable_obj_proxy_1 = require("@metamask/swappable-obj-proxy");
|
|
18
18
|
const controllerName = 'SelectedNetworkController';
|
|
19
|
+
const MESSENGER_EXPOSED_METHODS = [
|
|
20
|
+
'setNetworkClientIdForDomain',
|
|
21
|
+
'getNetworkClientIdForDomain',
|
|
22
|
+
'getProviderAndBlockTracker',
|
|
23
|
+
];
|
|
19
24
|
const stateMetadata = {
|
|
20
25
|
domains: {
|
|
21
26
|
includeInStateLogs: true,
|
|
@@ -56,7 +61,7 @@ class SelectedNetworkController extends base_controller_1.BaseController {
|
|
|
56
61
|
_SelectedNetworkController_instances.add(this);
|
|
57
62
|
_SelectedNetworkController_domainProxyMap.set(this, void 0);
|
|
58
63
|
__classPrivateFieldSet(this, _SelectedNetworkController_domainProxyMap, domainProxyMap, "f");
|
|
59
|
-
|
|
64
|
+
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
60
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)
|
|
61
66
|
this.messenger
|
|
62
67
|
.call('PermissionController:getSubjectNames')
|
|
@@ -161,10 +166,7 @@ class SelectedNetworkController extends base_controller_1.BaseController {
|
|
|
161
166
|
}
|
|
162
167
|
}
|
|
163
168
|
exports.SelectedNetworkController = SelectedNetworkController;
|
|
164
|
-
_SelectedNetworkController_domainProxyMap = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(),
|
|
165
|
-
this.messenger.registerActionHandler(exports.SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, this.getNetworkClientIdForDomain.bind(this));
|
|
166
|
-
this.messenger.registerActionHandler(exports.SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain, this.setNetworkClientIdForDomain.bind(this));
|
|
167
|
-
}, _SelectedNetworkController_setNetworkClientIdForDomain = function _SelectedNetworkController_setNetworkClientIdForDomain(domain, networkClientId) {
|
|
169
|
+
_SelectedNetworkController_domainProxyMap = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_setNetworkClientIdForDomain = function _SelectedNetworkController_setNetworkClientIdForDomain(domain, networkClientId) {
|
|
168
170
|
const networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
|
|
169
171
|
// This needs to happen before getProviderAndBlockTracker,
|
|
170
172
|
// otherwise we may be referencing a network client ID that no longer exists.
|
|
@@ -1 +1 @@
|
|
|
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 GetSubjects as PermissionControllerGetSubjectsAction,\n HasPermissions 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\nconst controllerName = 'SelectedNetworkController';\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 SelectedNetworkControllerGetSelectedNetworkStateAction =\n ControllerGetStateAction<\n typeof controllerName,\n 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\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.#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.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 #registerMessageHandlers(): void {\n this.messenger.registerActionHandler(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n this.getNetworkClientIdForDomain.bind(this),\n );\n this.messenger.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.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
|
+
{"version":3,"file":"SelectedNetworkController.cjs","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+DAA2D;AAoB3D,uEAGuC;AAKvC,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD,MAAM,yBAAyB,GAAG;IAChC,6BAA6B;IAC7B,6BAA6B;IAC7B,4BAA4B;CACpB,CAAC;AAEX,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE;QACP,kBAAkB,EAAE,IAAI;QACxB,OAAO,EAAE,IAAI;QACb,sBAAsB,EAAE,KAAK;QAC7B,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAInC,QAAA,eAAe,GAAG,UAAmB,CAAC;AAEtC,QAAA,oCAAoC,GAAG;IAClD,QAAQ,EAAE,GAAG,cAAc,WAAoB;IAC/C,2BAA2B,EACzB,GAAG,cAAc,8BAAuC;IAC1D,2BAA2B,EACzB,GAAG,cAAc,8BAAuC;CAC3D,CAAC;AAEW,QAAA,mCAAmC,GAAG;IACjD,WAAW,EAAE,GAAG,cAAc,cAAuB;CACtD,CAAC;AA0DF;;GAEG;AACH,MAAa,yBAA0B,SAAQ,gCAI9C;IAGC;;;;;;;OAOG;IACH,YAAY,EACV,SAAS,EACT,KAAK,GAAG,eAAe,EAAE,EACzB,cAAc,GACmB;QACjC,KAAK,CAAC;YACJ,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,aAAa;YACvB,SAAS;YACT,KAAK;SACN,CAAC,CAAC;;QApBI,4DAA2C;QAqBlD,uBAAA,IAAI,6CAAmB,cAAc,MAAA,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,4BAA4B,CACzC,IAAI,EACJ,yBAAyB,CAC1B,CAAC;QAEF,iTAAiT;QACjT,IAAI,CAAC,SAAS;aACX,IAAI,CAAC,sCAAsC,CAAC;aAC5C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;aAC5D,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClB,IAAI,CAAC,2BAA2B,CAC9B,MAAM,EACN,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC;aAC9C,uBAAuB,CAC3B,CACF,CAAC;QAEJ,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,kCAAkC,EAClC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YACb,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC/B,MAAM,iBAAiB,GACrB,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;gBAClD,IAAI,iBAAiB,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;oBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;wBAC7D,IAAI,CAAC,2BAA2B,CAC9B,MAAM,EACN,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC;6BAC9C,uBAAuB,CAC3B,CAAC;oBACJ,CAAC;yBAAM,IACL,EAAE,KAAK,QAAQ;wBACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,EACxC,CAAC;wBACD,uBAAA,IAAI,sGAA+B,MAAnC,IAAI,EAAgC,MAAM,CAAC,CAAC;oBAC9C,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,+BAA+B,EAC/B,CACE,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,EAC3D,OAAO,EACP,EAAE;YACF,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACf,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,QAAQ,CAAC;gBACrC,IAAI,CAAC,CAAC,CAAC,KAAK,gCAAgC,CAC/C,CAAC;YAEF,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAC5C,8BAA8B,CAC/B,CAAC,MAAM,CAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;oBAC7C,OAAO,CAAC,YAAY,CAAC,OAAO,CAC1B,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAClE,CAAC;oBACF,OAAO,GAAG,CAAC;gBACb,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEP,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CACxC,CAAC,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE,EAAE;oBACrC,MAAM,gBAAgB,GACpB,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;oBAErD,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBAC/C,yEAAyE;wBACzE,IAAI,CAAC,2BAA2B,CAC9B,MAAM,EACN,uBAAuB,CACxB,CAAC;oBACJ,CAAC;yBAAM,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;wBAClC,yEAAyE;wBACzE,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAQ,CAAC;wBAC5C,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,cAAc,EAAE,CAAC;4BAC7D,MAAM,OAAO,GACX,8BAA8B,CAAC,cAAc,CAAC,CAAC;4BAEjD,MAAM,EAAE,eAAe,EAAE,sBAAsB,EAAE,GAC/C,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;4BAExD,IAAI,wBAAwB,KAAK,sBAAsB,EAAE,CAAC;gCACxD,IAAI,CAAC,2BAA2B,CAC9B,MAAM,EACN,sBAAsB,CACvB,CAAC;4BACJ,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAkDD,2BAA2B,CACzB,MAAc,EACd,eAAgC;QAEhC,IAAI,MAAM,KAAK,uBAAe,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,+BAA+B,uBAAe,kDAAkD,CACjG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,uBAAA,IAAI,6FAAsB,MAA1B,IAAI,EAAuB,MAAM,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAC;QACJ,CAAC;QAED,uBAAA,IAAI,oGAA6B,MAAjC,IAAI,EAA8B,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7D,CAAC;IAED,2BAA2B,CAAC,MAAc;QACxC,MAAM,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,GAChE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,+BAA+B,CAAC;IACvE,CAAC;IAED;;;;;OAKG;IACH,0BAA0B,CAAC,MAAc;QACvC,qGAAqG;QACrG,IAAI,MAAM,KAAK,uBAAe,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACvC,4CAA4C,CAC7C,CAAC;YACF,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,IAAI,YAAY,GAAG,uBAAA,IAAI,iDAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,aAAa,CAAC;YAClB,IAAI,uBAAA,IAAI,6FAAsB,MAA1B,IAAI,EAAuB,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,eAAe,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;gBACjE,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACjC,wCAAwC,EACxC,eAAe,CAChB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACjC,4CAA4C,CAC7C,CAAC;gBACF,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YACD,YAAY,GAAG;gBACb,QAAQ,EAAE,IAAA,0CAAoB,EAAC,aAAa,CAAC,QAAQ,CAAC;gBACtD,YAAY,EAAE,IAAA,6CAAuB,EAAC,aAAa,CAAC,YAAY,EAAE;oBAChE,WAAW,EAAE,cAAc;iBAC5B,CAAC;aACH,CAAC;YACF,uBAAA,IAAI,iDAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF;AAtPD,8DAsPC;0OAtHG,MAAc,EACd,eAAgC;IAEhC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACvC,wCAAwC,EACxC,eAAe,CAChB,CAAC;IAEF,0DAA0D;IAC1D,6EAA6E;IAC7E,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACpB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC7D,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxD,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AAClE,CAAC,+HAQ8B,MAAc;IAC3C,MAAM,6BAA6B,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACvD,4CAA4C,CAC7C,CAAC;IACF,MAAM,YAAY,GAAG,uBAAA,IAAI,iDAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,YAAY,IAAI,6BAA6B,EAAE,CAAC;QAClD,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QACxE,YAAY,CAAC,YAAY,CAAC,SAAS,CACjC,6BAA6B,CAAC,YAAY,CAC3C,CAAC;IACJ,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACxB,uBAAA,IAAI,iDAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACpB,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,6GAEqB,MAAc;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;AAC5E,CAAC","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';\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"]}
|
|
@@ -2,7 +2,8 @@ import { BaseController } from "@metamask/base-controller";
|
|
|
2
2
|
import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
|
|
3
3
|
import type { Messenger } from "@metamask/messenger";
|
|
4
4
|
import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetSelectedNetworkClientAction, NetworkControllerGetStateAction, NetworkControllerStateChangeEvent, ProviderProxy } from "@metamask/network-controller";
|
|
5
|
-
import type { PermissionControllerStateChange,
|
|
5
|
+
import type { PermissionControllerStateChange, PermissionControllerGetSubjectNamesAction as PermissionControllerGetSubjectsAction, PermissionControllerHasPermissionsAction as PermissionControllerHasPermissions } from "@metamask/permission-controller";
|
|
6
|
+
import type { SelectedNetworkControllerMethodActions } from "./SelectedNetworkController-method-action-types.cjs";
|
|
6
7
|
declare const controllerName = "SelectedNetworkController";
|
|
7
8
|
export type Domain = string;
|
|
8
9
|
export declare const METAMASK_DOMAIN: "metamask";
|
|
@@ -18,16 +19,12 @@ export type SelectedNetworkControllerState = {
|
|
|
18
19
|
domains: Record<Domain, NetworkClientId>;
|
|
19
20
|
};
|
|
20
21
|
export type SelectedNetworkControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, SelectedNetworkControllerState>;
|
|
21
|
-
export type
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
export type
|
|
27
|
-
type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain;
|
|
28
|
-
handler: SelectedNetworkController['setNetworkClientIdForDomain'];
|
|
29
|
-
};
|
|
30
|
-
export type SelectedNetworkControllerActions = SelectedNetworkControllerGetSelectedNetworkStateAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction;
|
|
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;
|
|
31
28
|
type AllowedActions = NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetSelectedNetworkClientAction | NetworkControllerGetStateAction | PermissionControllerHasPermissions | PermissionControllerGetSubjectsAction;
|
|
32
29
|
export type SelectedNetworkControllerEvents = SelectedNetworkControllerStateChangeEvent;
|
|
33
30
|
type AllowedEvents = NetworkControllerStateChangeEvent | PermissionControllerStateChange;
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,4DAAwD;AAE9G,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"}
|
|
@@ -2,7 +2,8 @@ import { BaseController } from "@metamask/base-controller";
|
|
|
2
2
|
import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
|
|
3
3
|
import type { Messenger } from "@metamask/messenger";
|
|
4
4
|
import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerGetSelectedNetworkClientAction, NetworkControllerGetStateAction, NetworkControllerStateChangeEvent, ProviderProxy } from "@metamask/network-controller";
|
|
5
|
-
import type { PermissionControllerStateChange,
|
|
5
|
+
import type { PermissionControllerStateChange, PermissionControllerGetSubjectNamesAction as PermissionControllerGetSubjectsAction, PermissionControllerHasPermissionsAction as PermissionControllerHasPermissions } from "@metamask/permission-controller";
|
|
6
|
+
import type { SelectedNetworkControllerMethodActions } from "./SelectedNetworkController-method-action-types.mjs";
|
|
6
7
|
declare const controllerName = "SelectedNetworkController";
|
|
7
8
|
export type Domain = string;
|
|
8
9
|
export declare const METAMASK_DOMAIN: "metamask";
|
|
@@ -18,16 +19,12 @@ export type SelectedNetworkControllerState = {
|
|
|
18
19
|
domains: Record<Domain, NetworkClientId>;
|
|
19
20
|
};
|
|
20
21
|
export type SelectedNetworkControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, SelectedNetworkControllerState>;
|
|
21
|
-
export type
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
export type
|
|
27
|
-
type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain;
|
|
28
|
-
handler: SelectedNetworkController['setNetworkClientIdForDomain'];
|
|
29
|
-
};
|
|
30
|
-
export type SelectedNetworkControllerActions = SelectedNetworkControllerGetSelectedNetworkStateAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction;
|
|
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;
|
|
31
28
|
type AllowedActions = NetworkControllerGetNetworkClientByIdAction | NetworkControllerGetSelectedNetworkClientAction | NetworkControllerGetStateAction | PermissionControllerHasPermissions | PermissionControllerGetSubjectsAction;
|
|
32
29
|
export type SelectedNetworkControllerEvents = SelectedNetworkControllerStateChangeEvent;
|
|
33
30
|
type AllowedEvents = NetworkControllerStateChangeEvent | PermissionControllerStateChange;
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,4DAAwD;AAE9G,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"}
|
|
@@ -9,10 +9,15 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
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
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _SelectedNetworkController_instances, _SelectedNetworkController_domainProxyMap,
|
|
12
|
+
var _SelectedNetworkController_instances, _SelectedNetworkController_domainProxyMap, _SelectedNetworkController_setNetworkClientIdForDomain, _SelectedNetworkController_unsetNetworkClientIdForDomain, _SelectedNetworkController_domainHasPermissions;
|
|
13
13
|
import { BaseController } from "@metamask/base-controller";
|
|
14
14
|
import { createEventEmitterProxy, createSwappableProxy } from "@metamask/swappable-obj-proxy";
|
|
15
15
|
const controllerName = 'SelectedNetworkController';
|
|
16
|
+
const MESSENGER_EXPOSED_METHODS = [
|
|
17
|
+
'setNetworkClientIdForDomain',
|
|
18
|
+
'getNetworkClientIdForDomain',
|
|
19
|
+
'getProviderAndBlockTracker',
|
|
20
|
+
];
|
|
16
21
|
const stateMetadata = {
|
|
17
22
|
domains: {
|
|
18
23
|
includeInStateLogs: true,
|
|
@@ -53,7 +58,7 @@ export class SelectedNetworkController extends BaseController {
|
|
|
53
58
|
_SelectedNetworkController_instances.add(this);
|
|
54
59
|
_SelectedNetworkController_domainProxyMap.set(this, void 0);
|
|
55
60
|
__classPrivateFieldSet(this, _SelectedNetworkController_domainProxyMap, domainProxyMap, "f");
|
|
56
|
-
|
|
61
|
+
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
57
62
|
// 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)
|
|
58
63
|
this.messenger
|
|
59
64
|
.call('PermissionController:getSubjectNames')
|
|
@@ -157,10 +162,7 @@ export class SelectedNetworkController extends BaseController {
|
|
|
157
162
|
return networkProxy;
|
|
158
163
|
}
|
|
159
164
|
}
|
|
160
|
-
_SelectedNetworkController_domainProxyMap = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(),
|
|
161
|
-
this.messenger.registerActionHandler(SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, this.getNetworkClientIdForDomain.bind(this));
|
|
162
|
-
this.messenger.registerActionHandler(SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain, this.setNetworkClientIdForDomain.bind(this));
|
|
163
|
-
}, _SelectedNetworkController_setNetworkClientIdForDomain = function _SelectedNetworkController_setNetworkClientIdForDomain(domain, networkClientId) {
|
|
165
|
+
_SelectedNetworkController_domainProxyMap = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_setNetworkClientIdForDomain = function _SelectedNetworkController_setNetworkClientIdForDomain(domain, networkClientId) {
|
|
164
166
|
const networkClient = this.messenger.call('NetworkController:getNetworkClientById', networkClientId);
|
|
165
167
|
// This needs to happen before getProviderAndBlockTracker,
|
|
166
168
|
// otherwise we may be referencing a network client ID that no longer exists.
|
|
@@ -1 +1 @@
|
|
|
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 GetSubjects as PermissionControllerGetSubjectsAction,\n HasPermissions 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\nconst controllerName = 'SelectedNetworkController';\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 SelectedNetworkControllerGetSelectedNetworkStateAction =\n ControllerGetStateAction<\n typeof controllerName,\n 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\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.#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.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 #registerMessageHandlers(): void {\n this.messenger.registerActionHandler(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n this.getNetworkClientIdForDomain.bind(this),\n );\n this.messenger.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.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
|
+
{"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';\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"]}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAYA,6EAKqC;AAJnC,iJAAA,oCAAoC,OAAA;AACpC,gJAAA,mCAAmC,OAAA;AACnC,sIAAA,yBAAyB,OAAA;AACzB,4HAAA,eAAe,OAAA;AAQjB,6EAA8E;AAArE,4IAAA,+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';\nexport {\n SelectedNetworkControllerActionTypes,\n SelectedNetworkControllerEventTypes,\n SelectedNetworkController,\n METAMASK_DOMAIN,\n} from './SelectedNetworkController';\nexport type {\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetProviderAndBlockTrackerAction,\n} from './SelectedNetworkController-method-action-types';\nexport type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware';\nexport { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent,
|
|
1
|
+
export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent, SelectedNetworkControllerGetStateAction, SelectedNetworkControllerGetSelectedNetworkStateAction, SelectedNetworkControllerActions, SelectedNetworkControllerEvents, SelectedNetworkControllerMessenger, SelectedNetworkControllerOptions, NetworkProxy, Domain, } from "./SelectedNetworkController.cjs";
|
|
2
2
|
export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, METAMASK_DOMAIN, } from "./SelectedNetworkController.cjs";
|
|
3
|
+
export type { SelectedNetworkControllerSetNetworkClientIdForDomainAction, SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerGetProviderAndBlockTrackerAction, } from "./SelectedNetworkController-method-action-types.cjs";
|
|
3
4
|
export type { SelectedNetworkMiddlewareJsonRpcRequest } from "./SelectedNetworkMiddleware.cjs";
|
|
4
5
|
export { createSelectedNetworkMiddleware } from "./SelectedNetworkMiddleware.cjs";
|
|
5
6
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,sDAAsD,EACtD,
|
|
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,wCAAoC;AACrC,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,GAChB,wCAAoC;AACrC,YAAY,EACV,0DAA0D,EAC1D,0DAA0D,EAC1D,yDAAyD,GAC1D,4DAAwD;AACzD,YAAY,EAAE,uCAAuC,EAAE,wCAAoC;AAC3F,OAAO,EAAE,+BAA+B,EAAE,wCAAoC"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent,
|
|
1
|
+
export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent, SelectedNetworkControllerGetStateAction, SelectedNetworkControllerGetSelectedNetworkStateAction, SelectedNetworkControllerActions, SelectedNetworkControllerEvents, SelectedNetworkControllerMessenger, SelectedNetworkControllerOptions, NetworkProxy, Domain, } from "./SelectedNetworkController.mjs";
|
|
2
2
|
export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, METAMASK_DOMAIN, } from "./SelectedNetworkController.mjs";
|
|
3
|
+
export type { SelectedNetworkControllerSetNetworkClientIdForDomainAction, SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerGetProviderAndBlockTrackerAction, } from "./SelectedNetworkController-method-action-types.mjs";
|
|
3
4
|
export type { SelectedNetworkMiddlewareJsonRpcRequest } from "./SelectedNetworkMiddleware.mjs";
|
|
4
5
|
export { createSelectedNetworkMiddleware } from "./SelectedNetworkMiddleware.mjs";
|
|
5
6
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,sDAAsD,EACtD,
|
|
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,wCAAoC;AACrC,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,GAChB,wCAAoC;AACrC,YAAY,EACV,0DAA0D,EAC1D,0DAA0D,EAC1D,yDAAyD,GAC1D,4DAAwD;AACzD,YAAY,EAAE,uCAAuC,EAAE,wCAAoC;AAC3F,OAAO,EAAE,+BAA+B,EAAE,wCAAoC"}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,EACzB,eAAe,EAChB,wCAAoC;AAOrC,OAAO,EAAE,+BAA+B,EAAE,wCAAoC","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';\nexport {\n SelectedNetworkControllerActionTypes,\n SelectedNetworkControllerEventTypes,\n SelectedNetworkController,\n METAMASK_DOMAIN,\n} from './SelectedNetworkController';\nexport type {\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerGetProviderAndBlockTrackerAction,\n} from './SelectedNetworkController-method-action-types';\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": "26.0
|
|
3
|
+
"version": "26.1.0",
|
|
4
4
|
"description": "Provides an interface to the currently selected networkClientId for a given domain",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"build:docs": "typedoc",
|
|
41
41
|
"changelog:update": "../../scripts/update-changelog.sh @metamask/selected-network-controller",
|
|
42
42
|
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/selected-network-controller",
|
|
43
|
-
"
|
|
43
|
+
"generate-method-action-types": "tsx ../../scripts/generate-method-action-types.ts",
|
|
44
44
|
"since-latest-release": "../../scripts/since-latest-release.sh",
|
|
45
45
|
"test": "NODE_OPTIONS=--experimental-vm-modules jest --reporters=jest-silent-reporter",
|
|
46
46
|
"test:clean": "NODE_OPTIONS=--experimental-vm-modules jest --clearCache",
|
|
@@ -48,26 +48,27 @@
|
|
|
48
48
|
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@metamask/base-controller": "^9.0.
|
|
52
|
-
"@metamask/json-rpc-engine": "^10.2.
|
|
53
|
-
"@metamask/messenger": "^0.
|
|
54
|
-
"@metamask/network-controller": "^
|
|
55
|
-
"@metamask/permission-controller": "^12.
|
|
51
|
+
"@metamask/base-controller": "^9.0.1",
|
|
52
|
+
"@metamask/json-rpc-engine": "^10.2.4",
|
|
53
|
+
"@metamask/messenger": "^1.0.0",
|
|
54
|
+
"@metamask/network-controller": "^30.0.1",
|
|
55
|
+
"@metamask/permission-controller": "^12.3.0",
|
|
56
56
|
"@metamask/swappable-obj-proxy": "^2.3.0",
|
|
57
57
|
"@metamask/utils": "^11.9.0"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@metamask/auto-changelog": "^3.4.4",
|
|
61
61
|
"@ts-bridge/cli": "^0.6.4",
|
|
62
|
-
"@types/jest": "^
|
|
62
|
+
"@types/jest": "^29.5.14",
|
|
63
63
|
"deepmerge": "^4.2.2",
|
|
64
64
|
"immer": "^9.0.6",
|
|
65
|
-
"jest": "^
|
|
65
|
+
"jest": "^29.7.0",
|
|
66
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
66
67
|
"lodash": "^4.17.21",
|
|
67
68
|
"nock": "^13.3.1",
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"typedoc": "^0.
|
|
69
|
+
"ts-jest": "^29.2.5",
|
|
70
|
+
"tsx": "^4.20.5",
|
|
71
|
+
"typedoc": "^0.25.13",
|
|
71
72
|
"typedoc-plugin-missing-exports": "^2.0.0",
|
|
72
73
|
"typescript": "~5.3.3"
|
|
73
74
|
},
|