@metamask/selected-network-controller 3.0.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [3.1.1]
|
|
10
|
+
### Changed
|
|
11
|
+
- Bump `@metamask/json-rpc-engine` from `^7.1.0` to `^7.2.0` ([#1895](https://github.com/MetaMask/core/pull/1895))
|
|
12
|
+
|
|
13
|
+
## [3.1.0]
|
|
14
|
+
### Added
|
|
15
|
+
- Add `getProviderAndBlockTracker` method to get a proxy provider from `NetworkController` for a given origin/domain. ([#1806](https://github.com/MetaMask/core/pull/1806))
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- No longer update `selectedNetworkClientId` when the `NetworkController` provider changes. ([#1806](https://github.com/MetaMask/core/pull/1806))
|
|
19
|
+
- Bump dependency and peer dependency on `@metamask/network-controller` to ^15.1.0
|
|
20
|
+
|
|
9
21
|
## [3.0.0]
|
|
10
22
|
### Changed
|
|
11
23
|
- **BREAKING:** Bump dependency and peer dependency on `@metamask/network-controller` to ^14.0.0 ([#1747](https://github.com/MetaMask/core/pull/1747))
|
|
@@ -28,7 +40,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
28
40
|
### Added
|
|
29
41
|
- Initial Release ([#1643](https://github.com/MetaMask/core/pull/1643))
|
|
30
42
|
|
|
31
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.
|
|
43
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.1.1...HEAD
|
|
44
|
+
[3.1.1]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.1.0...@metamask/selected-network-controller@3.1.1
|
|
45
|
+
[3.1.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.0.0...@metamask/selected-network-controller@3.1.0
|
|
32
46
|
[3.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@2.0.1...@metamask/selected-network-controller@3.0.0
|
|
33
47
|
[2.0.1]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@2.0.0...@metamask/selected-network-controller@2.0.1
|
|
34
48
|
[2.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@1.0.0...@metamask/selected-network-controller@2.0.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RestrictedControllerMessenger } from '@metamask/base-controller';
|
|
2
2
|
import { BaseControllerV2 } from '@metamask/base-controller';
|
|
3
|
-
import type { NetworkClientId, NetworkControllerStateChangeEvent } from '@metamask/network-controller';
|
|
3
|
+
import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerStateChangeEvent, ProviderProxy } from '@metamask/network-controller';
|
|
4
4
|
import type { Patch } from 'immer';
|
|
5
5
|
declare const controllerName = "SelectedNetworkController";
|
|
6
6
|
declare type Domain = string;
|
|
@@ -37,12 +37,16 @@ export declare type SelectedNetworkControllerSetNetworkClientIdForDomainAction =
|
|
|
37
37
|
type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain;
|
|
38
38
|
handler: (domain: string, NetworkClientId: NetworkClientId) => void;
|
|
39
39
|
};
|
|
40
|
-
export declare type SelectedNetworkControllerAction = SelectedNetworkControllerGetSelectedNetworkStateAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction;
|
|
40
|
+
export declare type SelectedNetworkControllerAction = SelectedNetworkControllerGetSelectedNetworkStateAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction | NetworkControllerGetNetworkClientByIdAction;
|
|
41
41
|
export declare type SelectedNetworkControllerEvent = SelectedNetworkControllerStateChangeEvent;
|
|
42
42
|
export declare type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<typeof controllerName, SelectedNetworkControllerAction, NetworkControllerStateChangeEvent | SelectedNetworkControllerEvent, string, string>;
|
|
43
43
|
export declare type SelectedNetworkControllerOptions = {
|
|
44
44
|
messenger: SelectedNetworkControllerMessenger;
|
|
45
45
|
};
|
|
46
|
+
export declare type NetworkProxy = {
|
|
47
|
+
provider: ProviderProxy;
|
|
48
|
+
blockTracker: BlockTrackerProxy;
|
|
49
|
+
};
|
|
46
50
|
/**
|
|
47
51
|
* Controller for getting and setting the network for a particular domain.
|
|
48
52
|
*/
|
|
@@ -58,6 +62,13 @@ export declare class SelectedNetworkController extends BaseControllerV2<typeof c
|
|
|
58
62
|
setNetworkClientIdForMetamask(networkClientId: NetworkClientId): void;
|
|
59
63
|
setNetworkClientIdForDomain(domain: Domain, networkClientId: NetworkClientId): void;
|
|
60
64
|
getNetworkClientIdForDomain(domain: Domain): string;
|
|
65
|
+
/**
|
|
66
|
+
* Accesses the provider and block tracker for the currently selected network.
|
|
67
|
+
*
|
|
68
|
+
* @param domain - the domain for the provider
|
|
69
|
+
* @returns The proxy and block tracker proxies.
|
|
70
|
+
*/
|
|
71
|
+
getProviderAndBlockTracker(domain: Domain): NetworkProxy;
|
|
61
72
|
}
|
|
62
73
|
export {};
|
|
63
74
|
//# sourceMappingURL=SelectedNetworkController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectedNetworkController.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EACf,iCAAiC,
|
|
1
|
+
{"version":3,"file":"SelectedNetworkController.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,2CAA2C,EAC3C,iCAAiC,EACjC,aAAa,EACd,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,QAAA,MAAM,cAAc,8BAA8B,CAAC;AAYnD,aAAK,MAAM,GAAG,MAAM,CAAC;AAIrB,eAAO,MAAM,oCAAoC;;;;CAMhD,CAAC;AAEF,eAAO,MAAM,mCAAmC;;CAE/C,CAAC;AAEF,oBAAY,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,yCAAyC,GAAG;IACtD,IAAI,EAAE,OAAO,mCAAmC,CAAC,WAAW,CAAC;IAC7D,OAAO,EAAE,CAAC,8BAA8B,EAAE,KAAK,EAAE,CAAC,CAAC;CACpD,CAAC;AAEF,oBAAY,sDAAsD,GAAG;IACnE,IAAI,EAAE,OAAO,oCAAoC,CAAC,QAAQ,CAAC;IAC3D,OAAO,EAAE,MAAM,8BAA8B,CAAC;CAC/C,CAAC;AAEF,oBAAY,0DAA0D,GAAG;IACvE,IAAI,EAAE,OAAO,oCAAoC,CAAC,2BAA2B,CAAC;IAC9E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,CAAC;CAC9C,CAAC;AAEF,oBAAY,0DAA0D,GAAG;IACvE,IAAI,EAAE,OAAO,oCAAoC,CAAC,2BAA2B,CAAC;IAC9E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,KAAK,IAAI,CAAC;CACrE,CAAC;AAEF,oBAAY,+BAA+B,GACvC,sDAAsD,GACtD,0DAA0D,GAC1D,0DAA0D,GAC1D,2CAA2C,CAAC;AAEhD,oBAAY,8BAA8B,GACxC,yCAAyC,CAAC;AAE5C,oBAAY,kCAAkC,GAAG,6BAA6B,CAC5E,OAAO,cAAc,EACrB,+BAA+B,EAC/B,iCAAiC,GAAG,8BAA8B,EAClE,MAAM,EACN,MAAM,CACP,CAAC;AAEF,oBAAY,gCAAgC,GAAG;IAC7C,SAAS,EAAE,kCAAkC,CAAC;CAC/C,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB,CAC7D,OAAO,cAAc,EACrB,8BAA8B,EAC9B,kCAAkC,CACnC;;IAGC;;;;;OAKG;gBACS,EAAE,SAAS,EAAE,EAAE,gCAAgC;IAsB3D,6BAA6B,CAAC,eAAe,EAAE,eAAe;IAI9D,2BAA2B,CACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe;IA4BlC,2BAA2B,CAAC,MAAM,EAAE,MAAM;IAO1C;;;;;OAKG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;CAkBzD"}
|
|
@@ -4,10 +4,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
4
4
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
5
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
6
|
};
|
|
7
|
-
var _SelectedNetworkController_instances, _SelectedNetworkController_registerMessageHandlers;
|
|
7
|
+
var _SelectedNetworkController_instances, _SelectedNetworkController_proxies, _SelectedNetworkController_registerMessageHandlers;
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = void 0;
|
|
10
10
|
const base_controller_1 = require("@metamask/base-controller");
|
|
11
|
+
const swappable_obj_proxy_1 = require("@metamask/swappable-obj-proxy");
|
|
11
12
|
const controllerName = 'SelectedNetworkController';
|
|
12
13
|
const stateMetadata = {
|
|
13
14
|
domains: { persist: true, anonymous: false },
|
|
@@ -44,12 +45,27 @@ class SelectedNetworkController extends base_controller_1.BaseControllerV2 {
|
|
|
44
45
|
state: getDefaultState(),
|
|
45
46
|
});
|
|
46
47
|
_SelectedNetworkController_instances.add(this);
|
|
48
|
+
_SelectedNetworkController_proxies.set(this, new Map());
|
|
47
49
|
__classPrivateFieldGet(this, _SelectedNetworkController_instances, "m", _SelectedNetworkController_registerMessageHandlers).call(this);
|
|
48
50
|
}
|
|
49
51
|
setNetworkClientIdForMetamask(networkClientId) {
|
|
50
52
|
this.setNetworkClientIdForDomain(METAMASK_DOMAIN, networkClientId);
|
|
51
53
|
}
|
|
52
54
|
setNetworkClientIdForDomain(domain, networkClientId) {
|
|
55
|
+
const networkClient = this.messagingSystem.call('NetworkController:getNetworkClientById', networkClientId);
|
|
56
|
+
const networkProxy = __classPrivateFieldGet(this, _SelectedNetworkController_proxies, "f").get(domain);
|
|
57
|
+
if (networkProxy === undefined) {
|
|
58
|
+
__classPrivateFieldGet(this, _SelectedNetworkController_proxies, "f").set(domain, {
|
|
59
|
+
provider: (0, swappable_obj_proxy_1.createEventEmitterProxy)(networkClient.provider),
|
|
60
|
+
blockTracker: (0, swappable_obj_proxy_1.createEventEmitterProxy)(networkClient.blockTracker, {
|
|
61
|
+
eventFilter: 'skipInternal',
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
networkProxy.provider.setTarget(networkClient.provider);
|
|
67
|
+
networkProxy.blockTracker.setTarget(networkClient.blockTracker);
|
|
68
|
+
}
|
|
53
69
|
this.update((state) => {
|
|
54
70
|
if (state.perDomainNetwork) {
|
|
55
71
|
state.domains[domain] = networkClientId;
|
|
@@ -64,21 +80,30 @@ class SelectedNetworkController extends base_controller_1.BaseControllerV2 {
|
|
|
64
80
|
}
|
|
65
81
|
return this.state.domains[METAMASK_DOMAIN];
|
|
66
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Accesses the provider and block tracker for the currently selected network.
|
|
85
|
+
*
|
|
86
|
+
* @param domain - the domain for the provider
|
|
87
|
+
* @returns The proxy and block tracker proxies.
|
|
88
|
+
*/
|
|
89
|
+
getProviderAndBlockTracker(domain) {
|
|
90
|
+
let networkProxy = __classPrivateFieldGet(this, _SelectedNetworkController_proxies, "f").get(domain);
|
|
91
|
+
if (networkProxy === undefined) {
|
|
92
|
+
const networkClient = this.messagingSystem.call('NetworkController:getNetworkClientById', this.getNetworkClientIdForDomain(domain));
|
|
93
|
+
networkProxy = {
|
|
94
|
+
provider: (0, swappable_obj_proxy_1.createEventEmitterProxy)(networkClient.provider),
|
|
95
|
+
blockTracker: (0, swappable_obj_proxy_1.createEventEmitterProxy)(networkClient.blockTracker, {
|
|
96
|
+
eventFilter: 'skipInternal',
|
|
97
|
+
}),
|
|
98
|
+
};
|
|
99
|
+
__classPrivateFieldGet(this, _SelectedNetworkController_proxies, "f").set(domain, networkProxy);
|
|
100
|
+
}
|
|
101
|
+
return networkProxy;
|
|
102
|
+
}
|
|
67
103
|
}
|
|
68
104
|
exports.SelectedNetworkController = SelectedNetworkController;
|
|
69
|
-
_SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_registerMessageHandlers = function _SelectedNetworkController_registerMessageHandlers() {
|
|
105
|
+
_SelectedNetworkController_proxies = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_registerMessageHandlers = function _SelectedNetworkController_registerMessageHandlers() {
|
|
70
106
|
this.messagingSystem.registerActionHandler(exports.SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain, this.getNetworkClientIdForDomain.bind(this));
|
|
71
107
|
this.messagingSystem.registerActionHandler(exports.SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain, this.setNetworkClientIdForDomain.bind(this));
|
|
72
|
-
// subscribe to networkController statechange:: selectedNetworkClientId changed
|
|
73
|
-
// update the value for the domain 'metamask'
|
|
74
|
-
this.messagingSystem.subscribe('NetworkController:stateChange', (state, patch) => {
|
|
75
|
-
const isChangingNetwork = patch.some((p) => p.path[0] === 'selectedNetworkClientId');
|
|
76
|
-
if (!isChangingNetwork) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
// set it for the 'global' network to preserve functionality for the
|
|
80
|
-
// selectedNetworkController.perDomainNetwork feature flag being off
|
|
81
|
-
this.setNetworkClientIdForMetamask(state.selectedNetworkClientId);
|
|
82
|
-
});
|
|
83
108
|
};
|
|
84
109
|
//# sourceMappingURL=SelectedNetworkController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectedNetworkController.js","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":";;;;;;;;;AACA,+DAA6D;AAQ7D,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE;IAC5C,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE;CACtD,CAAC;AAEF,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,CAAC;IAC7B,OAAO,EAAE,EAAE;IACX,gBAAgB,EAAE,KAAK;CACxB,CAAC,CAAC;AAIH,MAAM,eAAe,GAAG,UAAmB,CAAC;AAE/B,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;
|
|
1
|
+
{"version":3,"file":"SelectedNetworkController.js","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseControllerV2 } from '@metamask/base-controller';\nimport type {\n BlockTrackerProxy,\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerStateChangeEvent,\n ProviderProxy,\n} from '@metamask/network-controller';\nimport { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';\nimport type { Patch } from 'immer';\n\nconst controllerName = 'SelectedNetworkController';\n\nconst stateMetadata = {\n domains: { persist: true, anonymous: false },\n perDomainNetwork: { persist: true, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n domains: {},\n perDomainNetwork: false,\n});\n\ntype Domain = string;\n\nconst METAMASK_DOMAIN = 'metamask' as const;\n\nexport const SelectedNetworkControllerActionTypes = {\n getState: `${controllerName}:getState` as const,\n getNetworkClientIdForDomain:\n `${controllerName}:getNetworkClientIdForDomain` as const,\n setNetworkClientIdForDomain:\n `${controllerName}:setNetworkClientIdForDomain` as const,\n};\n\nexport const SelectedNetworkControllerEventTypes = {\n stateChange: `${controllerName}:stateChange` as const,\n};\n\nexport type SelectedNetworkControllerState = {\n domains: Record<Domain, NetworkClientId>;\n /**\n * Feature flag to start returning networkClientId based on the domain.\n * when the flag is false, the 'metamask' domain will always be used.\n * defaults to false\n */\n perDomainNetwork: boolean;\n};\n\nexport type SelectedNetworkControllerStateChangeEvent = {\n type: typeof SelectedNetworkControllerEventTypes.stateChange;\n payload: [SelectedNetworkControllerState, Patch[]];\n};\n\nexport type SelectedNetworkControllerGetSelectedNetworkStateAction = {\n type: typeof SelectedNetworkControllerActionTypes.getState;\n handler: () => SelectedNetworkControllerState;\n};\n\nexport type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain;\n handler: (domain: string) => NetworkClientId;\n};\n\nexport type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain;\n handler: (domain: string, NetworkClientId: NetworkClientId) => void;\n};\n\nexport type SelectedNetworkControllerAction =\n | SelectedNetworkControllerGetSelectedNetworkStateAction\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction\n | NetworkControllerGetNetworkClientByIdAction;\n\nexport type SelectedNetworkControllerEvent =\n SelectedNetworkControllerStateChangeEvent;\n\nexport type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SelectedNetworkControllerAction,\n NetworkControllerStateChangeEvent | SelectedNetworkControllerEvent,\n string,\n string\n>;\n\nexport type SelectedNetworkControllerOptions = {\n messenger: SelectedNetworkControllerMessenger;\n};\n\nexport type NetworkProxy = {\n provider: ProviderProxy;\n blockTracker: BlockTrackerProxy;\n};\n\n/**\n * Controller for getting and setting the network for a particular domain.\n */\nexport class SelectedNetworkController extends BaseControllerV2<\n typeof controllerName,\n SelectedNetworkControllerState,\n SelectedNetworkControllerMessenger\n> {\n #proxies = new Map<Domain, NetworkProxy>();\n\n /**\n * Construct a SelectedNetworkController controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.\n */\n constructor({ messenger }: SelectedNetworkControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: getDefaultState(),\n });\n this.#registerMessageHandlers();\n }\n\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n this.getNetworkClientIdForDomain.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,\n this.setNetworkClientIdForDomain.bind(this),\n );\n }\n\n setNetworkClientIdForMetamask(networkClientId: NetworkClientId) {\n this.setNetworkClientIdForDomain(METAMASK_DOMAIN, networkClientId);\n }\n\n setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n const networkProxy = this.#proxies.get(domain);\n if (networkProxy === undefined) {\n this.#proxies.set(domain, {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n });\n } else {\n networkProxy.provider.setTarget(networkClient.provider);\n networkProxy.blockTracker.setTarget(networkClient.blockTracker);\n }\n\n this.update((state) => {\n if (state.perDomainNetwork) {\n state.domains[domain] = networkClientId;\n return;\n }\n state.domains[METAMASK_DOMAIN] = networkClientId;\n });\n }\n\n getNetworkClientIdForDomain(domain: Domain) {\n if (this.state.perDomainNetwork) {\n return this.state.domains[domain];\n }\n return this.state.domains[METAMASK_DOMAIN];\n }\n\n /**\n * Accesses the provider and block tracker for the currently selected network.\n *\n * @param domain - the domain for the provider\n * @returns The proxy and block tracker proxies.\n */\n getProviderAndBlockTracker(domain: Domain): NetworkProxy {\n let networkProxy = this.#proxies.get(domain);\n if (networkProxy === undefined) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n this.getNetworkClientIdForDomain(domain),\n );\n networkProxy = {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n };\n this.#proxies.set(domain, networkProxy);\n }\n\n return networkProxy;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/selected-network-controller",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "Provides an interface to the currently selected networkClientId for a given domain",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -24,17 +24,19 @@
|
|
|
24
24
|
"build:docs": "typedoc",
|
|
25
25
|
"changelog:validate": "../../scripts/validate-changelog.sh @metamask/selected-network-controller",
|
|
26
26
|
"publish:preview": "yarn npm publish --tag preview",
|
|
27
|
-
"test": "jest",
|
|
27
|
+
"test": "jest --reporters=jest-silent-reporter",
|
|
28
28
|
"test:clean": "jest --clearCache",
|
|
29
|
+
"test:verbose": "jest --verbose",
|
|
29
30
|
"test:watch": "jest --watch"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
33
|
"@metamask/base-controller": "^3.2.3",
|
|
33
|
-
"@metamask/json-rpc-engine": "^7.
|
|
34
|
-
"@metamask/network-controller": "^15.
|
|
34
|
+
"@metamask/json-rpc-engine": "^7.3.0",
|
|
35
|
+
"@metamask/network-controller": "^15.2.0",
|
|
36
|
+
"@metamask/swappable-obj-proxy": "^2.1.0"
|
|
35
37
|
},
|
|
36
38
|
"devDependencies": {
|
|
37
|
-
"@metamask/auto-changelog": "^3.
|
|
39
|
+
"@metamask/auto-changelog": "^3.4.3",
|
|
38
40
|
"@types/jest": "^27.4.1",
|
|
39
41
|
"deepmerge": "^4.2.2",
|
|
40
42
|
"immer": "^9.0.6",
|
|
@@ -48,7 +50,7 @@
|
|
|
48
50
|
"typescript": "~4.8.4"
|
|
49
51
|
},
|
|
50
52
|
"peerDependencies": {
|
|
51
|
-
"@metamask/network-controller": "^15.
|
|
53
|
+
"@metamask/network-controller": "^15.2.0"
|
|
52
54
|
},
|
|
53
55
|
"engines": {
|
|
54
56
|
"node": ">=16.0.0"
|