@metamask/selected-network-controller 3.1.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [5.0.0]
10
+ ### Added
11
+ - Add `SelectedNetworkMiddlewareJsonRpcRequest` type ([#1970](https://github.com/MetaMask/core/pull/1970)).
12
+ - Add `setPerDomainNetwork` method to reset proxies when flag toggled ([#3593](https://github.com/MetaMask/core/pull/3593)).
13
+ - Add `state` as a constructor argument ([#3585](https://github.com/MetaMask/core/pull/3585)).
14
+
15
+ ### Changed
16
+ - **BREAKING:** Rename `SelectedNetworkControllerAction` to `SelectedNetworkControllerActions` and `SelectedNetworkControllerEvent` to `SelectedNetworkControllerEvents` for consistency with corresponding type exports from other controllers ([#1970](https://github.com/MetaMask/core/pull/1970)).
17
+ - **BREAKING:** `createSelectedNetworkMiddleware` return type is constrained to satisfy `JsonRpcMiddleware<JsonRpcParams, Json>`, and its `req` parameter is constrained to satisfy `SelectedNetworkMiddlewareJsonRpcRequest` ([#1970](https://github.com/MetaMask/core/pull/1970)).
18
+
19
+ ## [4.0.0]
20
+ ### Changed
21
+ - **BREAKING:** Bump `@metamask/base-controller` to ^4.0.0 ([#2063](https://github.com/MetaMask/core/pull/2063))
22
+ - This is breaking because the type of the `messenger` has backward-incompatible changes. See the changelog for this package for more.
23
+ - Bump `@metamask/network-controller` to ^17.0.0 ([#2063](https://github.com/MetaMask/core/pull/2063))
24
+
9
25
  ## [3.1.2]
10
26
  ### Changed
11
27
  - **BREAKING:** Bump dependency and peer dependency on `@metamask/network-controller` to ^16.0.0
@@ -44,7 +60,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
44
60
  ### Added
45
61
  - Initial Release ([#1643](https://github.com/MetaMask/core/pull/1643))
46
62
 
47
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.1.2...HEAD
63
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@5.0.0...HEAD
64
+ [5.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@4.0.0...@metamask/selected-network-controller@5.0.0
65
+ [4.0.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.1.2...@metamask/selected-network-controller@4.0.0
48
66
  [3.1.2]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.1.1...@metamask/selected-network-controller@3.1.2
49
67
  [3.1.1]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.1.0...@metamask/selected-network-controller@3.1.1
50
68
  [3.1.0]: https://github.com/MetaMask/core/compare/@metamask/selected-network-controller@3.0.0...@metamask/selected-network-controller@3.1.0
@@ -1,8 +1,8 @@
1
1
  import type { RestrictedControllerMessenger } from '@metamask/base-controller';
2
- import { BaseControllerV2 } from '@metamask/base-controller';
2
+ import { BaseController } from '@metamask/base-controller';
3
3
  import type { BlockTrackerProxy, NetworkClientId, NetworkControllerGetNetworkClientByIdAction, NetworkControllerStateChangeEvent, ProviderProxy } from '@metamask/network-controller';
4
4
  import type { Patch } from 'immer';
5
- declare const controllerName = "SelectedNetworkController";
5
+ export declare const controllerName = "SelectedNetworkController";
6
6
  declare type Domain = string;
7
7
  export declare const SelectedNetworkControllerActionTypes: {
8
8
  getState: "SelectedNetworkController:getState";
@@ -37,10 +37,13 @@ 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 | NetworkControllerGetNetworkClientByIdAction;
41
- export declare type SelectedNetworkControllerEvent = SelectedNetworkControllerStateChangeEvent;
42
- export declare type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<typeof controllerName, SelectedNetworkControllerAction, NetworkControllerStateChangeEvent | SelectedNetworkControllerEvent, string, string>;
40
+ export declare type SelectedNetworkControllerActions = SelectedNetworkControllerGetSelectedNetworkStateAction | SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction;
41
+ export declare type AllowedActions = NetworkControllerGetNetworkClientByIdAction;
42
+ export declare type SelectedNetworkControllerEvents = SelectedNetworkControllerStateChangeEvent;
43
+ export declare type AllowedEvents = NetworkControllerStateChangeEvent;
44
+ export declare type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<typeof controllerName, SelectedNetworkControllerActions | AllowedActions, SelectedNetworkControllerEvents | AllowedEvents, AllowedActions['type'], AllowedEvents['type']>;
43
45
  export declare type SelectedNetworkControllerOptions = {
46
+ state?: SelectedNetworkControllerState;
44
47
  messenger: SelectedNetworkControllerMessenger;
45
48
  };
46
49
  export declare type NetworkProxy = {
@@ -50,15 +53,16 @@ export declare type NetworkProxy = {
50
53
  /**
51
54
  * Controller for getting and setting the network for a particular domain.
52
55
  */
53
- export declare class SelectedNetworkController extends BaseControllerV2<typeof controllerName, SelectedNetworkControllerState, SelectedNetworkControllerMessenger> {
56
+ export declare class SelectedNetworkController extends BaseController<typeof controllerName, SelectedNetworkControllerState, SelectedNetworkControllerMessenger> {
54
57
  #private;
55
58
  /**
56
59
  * Construct a SelectedNetworkController controller.
57
60
  *
58
61
  * @param options - The controller options.
59
62
  * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.
63
+ * @param options.state - The controllers initial state.
60
64
  */
61
- constructor({ messenger }: SelectedNetworkControllerOptions);
65
+ constructor({ messenger, state, }: SelectedNetworkControllerOptions);
62
66
  setNetworkClientIdForMetamask(networkClientId: NetworkClientId): void;
63
67
  setNetworkClientIdForDomain(domain: Domain, networkClientId: NetworkClientId): void;
64
68
  getNetworkClientIdForDomain(domain: Domain): string;
@@ -69,6 +73,7 @@ export declare class SelectedNetworkController extends BaseControllerV2<typeof c
69
73
  * @returns The proxy and block tracker proxies.
70
74
  */
71
75
  getProviderAndBlockTracker(domain: Domain): NetworkProxy;
76
+ setPerDomainNetwork(enabled: boolean): void;
72
77
  }
73
78
  export {};
74
79
  //# 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,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"}
1
+ {"version":3,"file":"SelectedNetworkController.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,2CAA2C,EAC3C,iCAAiC,EACjC,aAAa,EACd,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,eAAO,MAAM,cAAc,8BAA8B,CAAC;AAY1D,aAAK,MAAM,GAAG,MAAM,CAAC;AAIrB,eAAO,MAAM,oCAAoC;;;;CAMhD,CAAC;AAEF,eAAO,MAAM,mCAAmC;;CAE/C,CAAC;AAEF,oBAAY,8BAA8B,GAAG;IAC3C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC;;;;OAIG;IACH,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,oBAAY,yCAAyC,GAAG;IACtD,IAAI,EAAE,OAAO,mCAAmC,CAAC,WAAW,CAAC;IAC7D,OAAO,EAAE,CAAC,8BAA8B,EAAE,KAAK,EAAE,CAAC,CAAC;CACpD,CAAC;AAEF,oBAAY,sDAAsD,GAAG;IACnE,IAAI,EAAE,OAAO,oCAAoC,CAAC,QAAQ,CAAC;IAC3D,OAAO,EAAE,MAAM,8BAA8B,CAAC;CAC/C,CAAC;AAEF,oBAAY,0DAA0D,GAAG;IACvE,IAAI,EAAE,OAAO,oCAAoC,CAAC,2BAA2B,CAAC;IAC9E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,CAAC;CAC9C,CAAC;AAEF,oBAAY,0DAA0D,GAAG;IACvE,IAAI,EAAE,OAAO,oCAAoC,CAAC,2BAA2B,CAAC;IAC9E,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,KAAK,IAAI,CAAC;CACrE,CAAC;AAEF,oBAAY,gCAAgC,GACxC,sDAAsD,GACtD,0DAA0D,GAC1D,0DAA0D,CAAC;AAE/D,oBAAY,cAAc,GAAG,2CAA2C,CAAC;AAEzE,oBAAY,+BAA+B,GACzC,yCAAyC,CAAC;AAE5C,oBAAY,aAAa,GAAG,iCAAiC,CAAC;AAE9D,oBAAY,kCAAkC,GAAG,6BAA6B,CAC5E,OAAO,cAAc,EACrB,gCAAgC,GAAG,cAAc,EACjD,+BAA+B,GAAG,aAAa,EAC/C,cAAc,CAAC,MAAM,CAAC,EACtB,aAAa,CAAC,MAAM,CAAC,CACtB,CAAC;AAEF,oBAAY,gCAAgC,GAAG;IAC7C,KAAK,CAAC,EAAE,8BAA8B,CAAC;IACvC,SAAS,EAAE,kCAAkC,CAAC;CAC/C,CAAC;AAEF,oBAAY,YAAY,GAAG;IACzB,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,iBAAiB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,cAAc,CAC3D,OAAO,cAAc,EACrB,8BAA8B,EAC9B,kCAAkC,CACnC;;IAGC;;;;;;OAMG;gBACS,EACV,SAAS,EACT,KAAyB,GAC1B,EAAE,gCAAgC;IAsBnC,6BAA6B,CAAC,eAAe,EAAE,eAAe;IAI9D,2BAA2B,CACzB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe;IA2BlC,2BAA2B,CAAC,MAAM,EAAE,MAAM;IAO1C;;;;;OAKG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAmBxD,mBAAmB,CAAC,OAAO,EAAE,OAAO;CAarC"}
@@ -6,10 +6,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
6
6
  };
7
7
  var _SelectedNetworkController_instances, _SelectedNetworkController_proxies, _SelectedNetworkController_registerMessageHandlers;
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = void 0;
9
+ exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = exports.controllerName = void 0;
10
10
  const base_controller_1 = require("@metamask/base-controller");
11
11
  const swappable_obj_proxy_1 = require("@metamask/swappable-obj-proxy");
12
- const controllerName = 'SelectedNetworkController';
12
+ exports.controllerName = 'SelectedNetworkController';
13
13
  const stateMetadata = {
14
14
  domains: { persist: true, anonymous: false },
15
15
  perDomainNetwork: { persist: true, anonymous: false },
@@ -20,29 +20,30 @@ const getDefaultState = () => ({
20
20
  });
21
21
  const METAMASK_DOMAIN = 'metamask';
22
22
  exports.SelectedNetworkControllerActionTypes = {
23
- getState: `${controllerName}:getState`,
24
- getNetworkClientIdForDomain: `${controllerName}:getNetworkClientIdForDomain`,
25
- setNetworkClientIdForDomain: `${controllerName}:setNetworkClientIdForDomain`,
23
+ getState: `${exports.controllerName}:getState`,
24
+ getNetworkClientIdForDomain: `${exports.controllerName}:getNetworkClientIdForDomain`,
25
+ setNetworkClientIdForDomain: `${exports.controllerName}:setNetworkClientIdForDomain`,
26
26
  };
27
27
  exports.SelectedNetworkControllerEventTypes = {
28
- stateChange: `${controllerName}:stateChange`,
28
+ stateChange: `${exports.controllerName}:stateChange`,
29
29
  };
30
30
  /**
31
31
  * Controller for getting and setting the network for a particular domain.
32
32
  */
33
- class SelectedNetworkController extends base_controller_1.BaseControllerV2 {
33
+ class SelectedNetworkController extends base_controller_1.BaseController {
34
34
  /**
35
35
  * Construct a SelectedNetworkController controller.
36
36
  *
37
37
  * @param options - The controller options.
38
38
  * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.
39
+ * @param options.state - The controllers initial state.
39
40
  */
40
- constructor({ messenger }) {
41
+ constructor({ messenger, state = getDefaultState(), }) {
41
42
  super({
42
- name: controllerName,
43
+ name: exports.controllerName,
43
44
  metadata: stateMetadata,
44
45
  messenger,
45
- state: getDefaultState(),
46
+ state,
46
47
  });
47
48
  _SelectedNetworkController_instances.add(this);
48
49
  _SelectedNetworkController_proxies.set(this, new Map());
@@ -67,11 +68,10 @@ class SelectedNetworkController extends base_controller_1.BaseControllerV2 {
67
68
  networkProxy.blockTracker.setTarget(networkClient.blockTracker);
68
69
  }
69
70
  this.update((state) => {
70
- if (state.perDomainNetwork) {
71
- state.domains[domain] = networkClientId;
72
- return;
71
+ state.domains[domain] = networkClientId;
72
+ if (!state.perDomainNetwork) {
73
+ state.domains[METAMASK_DOMAIN] = networkClientId;
73
74
  }
74
- state.domains[METAMASK_DOMAIN] = networkClientId;
75
75
  });
76
76
  }
77
77
  getNetworkClientIdForDomain(domain) {
@@ -100,6 +100,16 @@ class SelectedNetworkController extends base_controller_1.BaseControllerV2 {
100
100
  }
101
101
  return networkProxy;
102
102
  }
103
+ setPerDomainNetwork(enabled) {
104
+ this.update((state) => {
105
+ state.perDomainNetwork = enabled;
106
+ return state;
107
+ });
108
+ Object.keys(this.state.domains).forEach((domain) => {
109
+ // when perDomainNetwork is false, getNetworkClientIdForDomain always returns the networkClientId for the domain 'metamask'
110
+ this.setNetworkClientIdForDomain(domain, this.getNetworkClientIdForDomain(domain));
111
+ });
112
+ }
103
113
  }
104
114
  exports.SelectedNetworkController = SelectedNetworkController;
105
115
  _SelectedNetworkController_proxies = new WeakMap(), _SelectedNetworkController_instances = new WeakSet(), _SelectedNetworkController_registerMessageHandlers = function _SelectedNetworkController_registerMessageHandlers() {
@@ -1 +1 @@
1
- {"version":3,"file":"SelectedNetworkController.js","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { 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"]}
1
+ {"version":3,"file":"SelectedNetworkController.js","sourceRoot":"","sources":["../src/SelectedNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RestrictedControllerMessenger } from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n BlockTrackerProxy,\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerStateChangeEvent,\n ProviderProxy,\n} from '@metamask/network-controller';\nimport { createEventEmitterProxy } from '@metamask/swappable-obj-proxy';\nimport type { Patch } from 'immer';\n\nexport const controllerName = 'SelectedNetworkController';\n\nconst stateMetadata = {\n domains: { persist: true, anonymous: false },\n perDomainNetwork: { persist: true, anonymous: false },\n};\n\nconst getDefaultState = () => ({\n domains: {},\n perDomainNetwork: false,\n});\n\ntype Domain = string;\n\nconst METAMASK_DOMAIN = 'metamask' as const;\n\nexport const SelectedNetworkControllerActionTypes = {\n getState: `${controllerName}:getState` as const,\n getNetworkClientIdForDomain:\n `${controllerName}:getNetworkClientIdForDomain` as const,\n setNetworkClientIdForDomain:\n `${controllerName}:setNetworkClientIdForDomain` as const,\n};\n\nexport const SelectedNetworkControllerEventTypes = {\n stateChange: `${controllerName}:stateChange` as const,\n};\n\nexport type SelectedNetworkControllerState = {\n domains: Record<Domain, NetworkClientId>;\n /**\n * Feature flag to start returning networkClientId based on the domain.\n * when the flag is false, the 'metamask' domain will always be used.\n * defaults to false\n */\n perDomainNetwork: boolean;\n};\n\nexport type SelectedNetworkControllerStateChangeEvent = {\n type: typeof SelectedNetworkControllerEventTypes.stateChange;\n payload: [SelectedNetworkControllerState, Patch[]];\n};\n\nexport type SelectedNetworkControllerGetSelectedNetworkStateAction = {\n type: typeof SelectedNetworkControllerActionTypes.getState;\n handler: () => SelectedNetworkControllerState;\n};\n\nexport type SelectedNetworkControllerGetNetworkClientIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain;\n handler: (domain: string) => NetworkClientId;\n};\n\nexport type SelectedNetworkControllerSetNetworkClientIdForDomainAction = {\n type: typeof SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain;\n handler: (domain: string, NetworkClientId: NetworkClientId) => void;\n};\n\nexport type SelectedNetworkControllerActions =\n | SelectedNetworkControllerGetSelectedNetworkStateAction\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction;\n\nexport type AllowedActions = NetworkControllerGetNetworkClientByIdAction;\n\nexport type SelectedNetworkControllerEvents =\n SelectedNetworkControllerStateChangeEvent;\n\nexport type AllowedEvents = NetworkControllerStateChangeEvent;\n\nexport type SelectedNetworkControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SelectedNetworkControllerActions | AllowedActions,\n SelectedNetworkControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\nexport type SelectedNetworkControllerOptions = {\n state?: SelectedNetworkControllerState;\n messenger: SelectedNetworkControllerMessenger;\n};\n\nexport type NetworkProxy = {\n provider: ProviderProxy;\n blockTracker: BlockTrackerProxy;\n};\n\n/**\n * Controller for getting and setting the network for a particular domain.\n */\nexport class SelectedNetworkController extends BaseController<\n typeof controllerName,\n SelectedNetworkControllerState,\n SelectedNetworkControllerMessenger\n> {\n #proxies = new Map<Domain, NetworkProxy>();\n\n /**\n * Construct a SelectedNetworkController controller.\n *\n * @param options - The controller options.\n * @param options.messenger - The restricted controller messenger for the EncryptionPublicKey controller.\n * @param options.state - The controllers initial state.\n */\n constructor({\n messenger,\n state = getDefaultState(),\n }: SelectedNetworkControllerOptions) {\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state,\n });\n this.#registerMessageHandlers();\n }\n\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n this.getNetworkClientIdForDomain.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,\n this.setNetworkClientIdForDomain.bind(this),\n );\n }\n\n setNetworkClientIdForMetamask(networkClientId: NetworkClientId) {\n this.setNetworkClientIdForDomain(METAMASK_DOMAIN, networkClientId);\n }\n\n setNetworkClientIdForDomain(\n domain: Domain,\n networkClientId: NetworkClientId,\n ) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n networkClientId,\n );\n const networkProxy = this.#proxies.get(domain);\n if (networkProxy === undefined) {\n this.#proxies.set(domain, {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n });\n } else {\n networkProxy.provider.setTarget(networkClient.provider);\n networkProxy.blockTracker.setTarget(networkClient.blockTracker);\n }\n\n this.update((state) => {\n state.domains[domain] = networkClientId;\n if (!state.perDomainNetwork) {\n state.domains[METAMASK_DOMAIN] = networkClientId;\n }\n });\n }\n\n getNetworkClientIdForDomain(domain: Domain) {\n if (this.state.perDomainNetwork) {\n return this.state.domains[domain];\n }\n return this.state.domains[METAMASK_DOMAIN];\n }\n\n /**\n * Accesses the provider and block tracker for the currently selected network.\n *\n * @param domain - the domain for the provider\n * @returns The proxy and block tracker proxies.\n */\n getProviderAndBlockTracker(domain: Domain): NetworkProxy {\n let networkProxy = this.#proxies.get(domain);\n if (networkProxy === undefined) {\n const networkClient = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n this.getNetworkClientIdForDomain(domain),\n );\n networkProxy = {\n provider: createEventEmitterProxy(networkClient.provider),\n blockTracker: createEventEmitterProxy(networkClient.blockTracker, {\n eventFilter: 'skipInternal',\n }),\n };\n this.#proxies.set(domain, networkProxy);\n }\n\n return networkProxy;\n }\n\n setPerDomainNetwork(enabled: boolean) {\n this.update((state) => {\n state.perDomainNetwork = enabled;\n return state;\n });\n Object.keys(this.state.domains).forEach((domain) => {\n // when perDomainNetwork is false, getNetworkClientIdForDomain always returns the networkClientId for the domain 'metamask'\n this.setNetworkClientIdForDomain(\n domain,\n this.getNetworkClientIdForDomain(domain),\n );\n });\n }\n}\n"]}
@@ -1,6 +1,14 @@
1
1
  import type { ControllerMessenger } from '@metamask/base-controller';
2
2
  import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';
3
- import type { NetworkControllerGetStateAction } from '@metamask/network-controller';
3
+ import type { NetworkClientId, NetworkControllerGetStateAction, NetworkControllerStateChangeEvent } from '@metamask/network-controller';
4
+ import type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';
4
5
  import type { SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerSetNetworkClientIdForDomainAction } from './SelectedNetworkController';
5
- export declare const createSelectedNetworkMiddleware: (messenger: ControllerMessenger<SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction | NetworkControllerGetStateAction, never>) => JsonRpcMiddleware<any, any>;
6
+ export declare type MiddlewareAllowedActions = NetworkControllerGetStateAction;
7
+ export declare type MiddlewareAllowedEvents = NetworkControllerStateChangeEvent;
8
+ export declare type SelectedNetworkMiddlewareMessenger = ControllerMessenger<SelectedNetworkControllerGetNetworkClientIdForDomainAction | SelectedNetworkControllerSetNetworkClientIdForDomainAction | MiddlewareAllowedActions, MiddlewareAllowedEvents>;
9
+ export declare type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {
10
+ networkClientId?: NetworkClientId;
11
+ origin?: string;
12
+ };
13
+ export declare const createSelectedNetworkMiddleware: (messenger: SelectedNetworkMiddlewareMessenger) => JsonRpcMiddleware<JsonRpcParams, Json>;
6
14
  //# sourceMappingURL=SelectedNetworkMiddleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectedNetworkMiddleware.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAEV,+BAA+B,EAChC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EACV,0DAA0D,EAC1D,0DAA0D,EAC3D,MAAM,6BAA6B,CAAC;AAGrC,eAAO,MAAM,+BAA+B,cAC/B,oBACP,0DAA0D,GAC1D,0DAA0D,GAC1D,+BAA+B,EACjC,KAAK,CACN,KACA,kBAAkB,GAAG,EAAE,GAAG,CA4B5B,CAAC"}
1
+ {"version":3,"file":"SelectedNetworkMiddleware.d.ts","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EACV,eAAe,EACf,+BAA+B,EAC/B,iCAAiC,EAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,KAAK,EACV,0DAA0D,EAC1D,0DAA0D,EAC3D,MAAM,6BAA6B,CAAC;AAGrC,oBAAY,wBAAwB,GAAG,+BAA+B,CAAC;AACvE,oBAAY,uBAAuB,GAAG,iCAAiC,CAAC;AAExE,oBAAY,kCAAkC,GAAG,mBAAmB,CAChE,0DAA0D,GAC1D,0DAA0D,GAC1D,wBAAwB,EAC1B,uBAAuB,CACxB,CAAC;AAEF,oBAAY,uCAAuC,GAAG,cAAc,GAAG;IACrE,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,+BAA+B,qDAEzC,kBAAkB,aAAa,EAAE,IAAI,CAgCvC,CAAC"}
@@ -7,6 +7,9 @@ const createSelectedNetworkMiddleware = (messenger) => {
7
7
  const setNetworkClientIdForDomain = (origin, networkClientId) => messenger.call(SelectedNetworkController_1.SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain, origin, networkClientId);
8
8
  const getDefaultNetworkClientId = () => messenger.call('NetworkController:getState').selectedNetworkClientId;
9
9
  return (req, _, next) => {
10
+ if (!req.origin) {
11
+ throw new Error("Request object is lacking an 'origin'");
12
+ }
10
13
  if (getNetworkClientIdForDomain(req.origin) === undefined) {
11
14
  setNetworkClientIdForDomain(req.origin, getDefaultNetworkClientId());
12
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SelectedNetworkMiddleware.js","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":";;;AAWA,2EAAmF;AAE5E,MAAM,+BAA+B,GAAG,CAC7C,SAKC,EAC4B,EAAE;IAC/B,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAE,EAAE,CACrD,SAAS,CAAC,IAAI,CACZ,gEAAoC,CAAC,2BAA2B,EAChE,MAAM,CACP,CAAC;IAEJ,MAAM,2BAA2B,GAAG,CAClC,MAAc,EACd,eAAgC,EAChC,EAAE,CACF,SAAS,CAAC,IAAI,CACZ,gEAAoC,CAAC,2BAA2B,EAChE,MAAM,EACN,eAAe,CAChB,CAAC;IAEJ,MAAM,yBAAyB,GAAG,GAAG,EAAE,CACrC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,uBAAuB,CAAC;IAEvE,OAAO,CAAC,GAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;YACzD,2BAA2B,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;SACtE;QAED,GAAG,CAAC,eAAe,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,CAAC;AAnCW,QAAA,+BAA+B,mCAmC1C","sourcesContent":["import type { ControllerMessenger } from '@metamask/base-controller';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type {\n NetworkClientId,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\n\nimport type {\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n} from './SelectedNetworkController';\nimport { SelectedNetworkControllerActionTypes } from './SelectedNetworkController';\n\nexport const createSelectedNetworkMiddleware = (\n messenger: ControllerMessenger<\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction\n | NetworkControllerGetStateAction,\n never\n >,\n): JsonRpcMiddleware<any, any> => {\n const getNetworkClientIdForDomain = (origin: string) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n origin,\n );\n\n const setNetworkClientIdForDomain = (\n origin: string,\n networkClientId: NetworkClientId,\n ) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,\n origin,\n networkClientId,\n );\n\n const getDefaultNetworkClientId = () =>\n messenger.call('NetworkController:getState').selectedNetworkClientId;\n\n return (req: any, _, next) => {\n if (getNetworkClientIdForDomain(req.origin) === undefined) {\n setNetworkClientIdForDomain(req.origin, getDefaultNetworkClientId());\n }\n\n req.networkClientId = getNetworkClientIdForDomain(req.origin);\n return next();\n };\n};\n"]}
1
+ {"version":3,"file":"SelectedNetworkMiddleware.js","sourceRoot":"","sources":["../src/SelectedNetworkMiddleware.ts"],"names":[],"mappings":";;;AAaA,2EAAmF;AAiB5E,MAAM,+BAA+B,GAAG,CAC7C,SAA6C,EACL,EAAE;IAC1C,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAE,EAAE,CACrD,SAAS,CAAC,IAAI,CACZ,gEAAoC,CAAC,2BAA2B,EAChE,MAAM,CACP,CAAC;IAEJ,MAAM,2BAA2B,GAAG,CAClC,MAAc,EACd,eAAgC,EAChC,EAAE,CACF,SAAS,CAAC,IAAI,CACZ,gEAAoC,CAAC,2BAA2B,EAChE,MAAM,EACN,eAAe,CAChB,CAAC;IAEJ,MAAM,yBAAyB,GAAG,GAAG,EAAE,CACrC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,uBAAuB,CAAC;IAEvE,OAAO,CAAC,GAA4C,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QAED,IAAI,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;YACzD,2BAA2B,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;SACtE;QAED,GAAG,CAAC,eAAe,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC,CAAC;AAlCW,QAAA,+BAA+B,mCAkC1C","sourcesContent":["import type { ControllerMessenger } from '@metamask/base-controller';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine';\nimport type {\n NetworkClientId,\n NetworkControllerGetStateAction,\n NetworkControllerStateChangeEvent,\n} from '@metamask/network-controller';\nimport type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';\n\nimport type {\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n} from './SelectedNetworkController';\nimport { SelectedNetworkControllerActionTypes } from './SelectedNetworkController';\n\nexport type MiddlewareAllowedActions = NetworkControllerGetStateAction;\nexport type MiddlewareAllowedEvents = NetworkControllerStateChangeEvent;\n\nexport type SelectedNetworkMiddlewareMessenger = ControllerMessenger<\n | SelectedNetworkControllerGetNetworkClientIdForDomainAction\n | SelectedNetworkControllerSetNetworkClientIdForDomainAction\n | MiddlewareAllowedActions,\n MiddlewareAllowedEvents\n>;\n\nexport type SelectedNetworkMiddlewareJsonRpcRequest = JsonRpcRequest & {\n networkClientId?: NetworkClientId;\n origin?: string;\n};\n\nexport const createSelectedNetworkMiddleware = (\n messenger: SelectedNetworkMiddlewareMessenger,\n): JsonRpcMiddleware<JsonRpcParams, Json> => {\n const getNetworkClientIdForDomain = (origin: string) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.getNetworkClientIdForDomain,\n origin,\n );\n\n const setNetworkClientIdForDomain = (\n origin: string,\n networkClientId: NetworkClientId,\n ) =>\n messenger.call(\n SelectedNetworkControllerActionTypes.setNetworkClientIdForDomain,\n origin,\n networkClientId,\n );\n\n const getDefaultNetworkClientId = () =>\n messenger.call('NetworkController:getState').selectedNetworkClientId;\n\n return (req: SelectedNetworkMiddlewareJsonRpcRequest, _, next) => {\n if (!req.origin) {\n throw new Error(\"Request object is lacking an 'origin'\");\n }\n\n if (getNetworkClientIdForDomain(req.origin) === undefined) {\n setNetworkClientIdForDomain(req.origin, getDefaultNetworkClientId());\n }\n\n req.networkClientId = getNetworkClientIdForDomain(req.origin);\n return next();\n };\n};\n"]}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
- export * from './SelectedNetworkController';
2
- export * from './SelectedNetworkMiddleware';
1
+ export type { SelectedNetworkControllerState, SelectedNetworkControllerStateChangeEvent, SelectedNetworkControllerGetSelectedNetworkStateAction, SelectedNetworkControllerGetNetworkClientIdForDomainAction, SelectedNetworkControllerSetNetworkClientIdForDomainAction, SelectedNetworkControllerActions, SelectedNetworkControllerEvents, SelectedNetworkControllerMessenger, SelectedNetworkControllerOptions, NetworkProxy, } from './SelectedNetworkController';
2
+ export { SelectedNetworkControllerActionTypes, SelectedNetworkControllerEventTypes, SelectedNetworkController, } from './SelectedNetworkController';
3
+ export type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware';
4
+ export { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,8BAA8B,EAC9B,yCAAyC,EACzC,sDAAsD,EACtD,0DAA0D,EAC1D,0DAA0D,EAC1D,gCAAgC,EAChC,+BAA+B,EAC/B,kCAAkC,EAClC,gCAAgC,EAChC,YAAY,GACb,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oCAAoC,EACpC,mCAAmC,EACnC,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,uCAAuC,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -1,19 +1,10 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./SelectedNetworkController"), exports);
18
- __exportStar(require("./SelectedNetworkMiddleware"), exports);
3
+ exports.createSelectedNetworkMiddleware = exports.SelectedNetworkController = exports.SelectedNetworkControllerEventTypes = exports.SelectedNetworkControllerActionTypes = void 0;
4
+ var SelectedNetworkController_1 = require("./SelectedNetworkController");
5
+ Object.defineProperty(exports, "SelectedNetworkControllerActionTypes", { enumerable: true, get: function () { return SelectedNetworkController_1.SelectedNetworkControllerActionTypes; } });
6
+ Object.defineProperty(exports, "SelectedNetworkControllerEventTypes", { enumerable: true, get: function () { return SelectedNetworkController_1.SelectedNetworkControllerEventTypes; } });
7
+ Object.defineProperty(exports, "SelectedNetworkController", { enumerable: true, get: function () { return SelectedNetworkController_1.SelectedNetworkController; } });
8
+ var SelectedNetworkMiddleware_1 = require("./SelectedNetworkMiddleware");
9
+ Object.defineProperty(exports, "createSelectedNetworkMiddleware", { enumerable: true, get: function () { return SelectedNetworkMiddleware_1.createSelectedNetworkMiddleware; } });
19
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA4C;AAC5C,8DAA4C","sourcesContent":["export * from './SelectedNetworkController';\nexport * from './SelectedNetworkMiddleware';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAYA,yEAIqC;AAHnC,iJAAA,oCAAoC,OAAA;AACpC,gJAAA,mCAAmC,OAAA;AACnC,sIAAA,yBAAyB,OAAA;AAG3B,yEAA8E;AAArE,4IAAA,+BAA+B,OAAA","sourcesContent":["export type {\n SelectedNetworkControllerState,\n SelectedNetworkControllerStateChangeEvent,\n SelectedNetworkControllerGetSelectedNetworkStateAction,\n SelectedNetworkControllerGetNetworkClientIdForDomainAction,\n SelectedNetworkControllerSetNetworkClientIdForDomainAction,\n SelectedNetworkControllerActions,\n SelectedNetworkControllerEvents,\n SelectedNetworkControllerMessenger,\n SelectedNetworkControllerOptions,\n NetworkProxy,\n} from './SelectedNetworkController';\nexport {\n SelectedNetworkControllerActionTypes,\n SelectedNetworkControllerEventTypes,\n SelectedNetworkController,\n} from './SelectedNetworkController';\nexport type { SelectedNetworkMiddlewareJsonRpcRequest } from './SelectedNetworkMiddleware';\nexport { createSelectedNetworkMiddleware } from './SelectedNetworkMiddleware';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/selected-network-controller",
3
- "version": "3.1.2",
3
+ "version": "5.0.0",
4
4
  "description": "Provides an interface to the currently selected networkClientId for a given domain",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -30,10 +30,11 @@
30
30
  "test:watch": "jest --watch"
31
31
  },
32
32
  "dependencies": {
33
- "@metamask/base-controller": "^3.2.3",
33
+ "@metamask/base-controller": "^4.0.0",
34
34
  "@metamask/json-rpc-engine": "^7.3.0",
35
- "@metamask/network-controller": "^16.0.0",
36
- "@metamask/swappable-obj-proxy": "^2.1.0"
35
+ "@metamask/network-controller": "^17.0.0",
36
+ "@metamask/swappable-obj-proxy": "^2.1.0",
37
+ "@metamask/utils": "^8.2.0"
37
38
  },
38
39
  "devDependencies": {
39
40
  "@metamask/auto-changelog": "^3.4.3",
@@ -50,7 +51,7 @@
50
51
  "typescript": "~4.8.4"
51
52
  },
52
53
  "peerDependencies": {
53
- "@metamask/network-controller": "^16.0.0"
54
+ "@metamask/network-controller": "^17.0.0"
54
55
  },
55
56
  "engines": {
56
57
  "node": ">=16.0.0"