@metamask-previews/network-controller 23.2.0-preview-28cd3de3 → 23.3.0-preview-f603e07

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/CHANGELOG.md +9 -2
  2. package/dist/NetworkController.cjs +52 -22
  3. package/dist/NetworkController.cjs.map +1 -1
  4. package/dist/NetworkController.d.cts +17 -0
  5. package/dist/NetworkController.d.cts.map +1 -1
  6. package/dist/NetworkController.d.mts +17 -0
  7. package/dist/NetworkController.d.mts.map +1 -1
  8. package/dist/NetworkController.mjs +53 -23
  9. package/dist/NetworkController.mjs.map +1 -1
  10. package/dist/create-auto-managed-network-client.cjs +34 -35
  11. package/dist/create-auto-managed-network-client.cjs.map +1 -1
  12. package/dist/create-auto-managed-network-client.d.cts +7 -1
  13. package/dist/create-auto-managed-network-client.d.cts.map +1 -1
  14. package/dist/create-auto-managed-network-client.d.mts +7 -1
  15. package/dist/create-auto-managed-network-client.d.mts.map +1 -1
  16. package/dist/create-auto-managed-network-client.mjs +34 -35
  17. package/dist/create-auto-managed-network-client.mjs.map +1 -1
  18. package/dist/create-network-client.cjs +15 -11
  19. package/dist/create-network-client.cjs.map +1 -1
  20. package/dist/create-network-client.d.cts +7 -1
  21. package/dist/create-network-client.d.cts.map +1 -1
  22. package/dist/create-network-client.d.mts +7 -1
  23. package/dist/create-network-client.d.mts.map +1 -1
  24. package/dist/create-network-client.mjs +15 -11
  25. package/dist/create-network-client.mjs.map +1 -1
  26. package/dist/types.cjs.map +1 -1
  27. package/dist/types.d.cts +2 -2
  28. package/dist/types.d.cts.map +1 -1
  29. package/dist/types.d.mts +2 -2
  30. package/dist/types.d.mts.map +1 -1
  31. package/dist/types.mjs.map +1 -1
  32. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,14 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [23.3.0]
11
+
10
12
  ### Added
11
13
 
12
14
  - Add optional `getBlockTrackerOptions` argument to NetworkController constructor ([#5702](https://github.com/MetaMask/core/pull/5702))
13
- - Add Monad Testnet as default network ([#5724](https://github.com/MetaMask/core/pull/5724))
15
+ - Add optional `rpcFailoverEnabled` option to NetworkController constructor (`false` by default) ([#5668](https://github.com/MetaMask/core/pull/5668))
16
+ - Add `enableRpcFailover` and `disableRpcFailover` methods to NetworkController ([#5668](https://github.com/MetaMask/core/pull/5668))
14
17
 
15
18
  ### Changed
16
19
 
17
20
  - Bump `@metamask/base-controller` from ^8.0.0 to ^8.0.1 ([#5722](https://github.com/MetaMask/core/pull/5722))
21
+ - Disable the RPC failover behavior by default ([#5668](https://github.com/MetaMask/core/pull/5668))
22
+ - You are free to set the `failoverUrls` property on an RPC endpoint, but it won't have any effect
23
+ - To enable this behavior, either pass `rpcFailoverEnabled: true` to the constructor or call `enableRpcFailover` after initialization
18
24
 
19
25
  ## [23.2.0]
20
26
 
@@ -823,7 +829,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
823
829
 
824
830
  All changes listed after this point were applied to this package following the monorepo conversion.
825
831
 
826
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/network-controller@23.2.0...HEAD
832
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/network-controller@23.3.0...HEAD
833
+ [23.3.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@23.2.0...@metamask/network-controller@23.3.0
827
834
  [23.2.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@23.1.0...@metamask/network-controller@23.2.0
828
835
  [23.1.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@23.0.0...@metamask/network-controller@23.1.0
829
836
  [23.0.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.2.1...@metamask/network-controller@23.0.0
@@ -36,7 +36,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
36
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
38
38
  };
39
- var _NetworkController_instances, _NetworkController_ethQuery, _NetworkController_infuraProjectId, _NetworkController_previouslySelectedNetworkClientId, _NetworkController_providerProxy, _NetworkController_blockTrackerProxy, _NetworkController_autoManagedNetworkClientRegistry, _NetworkController_autoManagedNetworkClient, _NetworkController_log, _NetworkController_getRpcServiceOptions, _NetworkController_getBlockTrackerOptions, _NetworkController_networkConfigurationsByNetworkClientId, _NetworkController_refreshNetwork, _NetworkController_getLatestBlock, _NetworkController_determineEIP1559Compatibility, _NetworkController_validateNetworkFields, _NetworkController_determineNetworkConfigurationToPersist, _NetworkController_registerNetworkClientsAsNeeded, _NetworkController_unregisterNetworkClientsAsNeeded, _NetworkController_updateNetworkConfigurations, _NetworkController_ensureAutoManagedNetworkClientRegistryPopulated, _NetworkController_createAutoManagedNetworkClientRegistry, _NetworkController_applyNetworkSelection;
39
+ var _NetworkController_instances, _NetworkController_ethQuery, _NetworkController_infuraProjectId, _NetworkController_previouslySelectedNetworkClientId, _NetworkController_providerProxy, _NetworkController_blockTrackerProxy, _NetworkController_autoManagedNetworkClientRegistry, _NetworkController_autoManagedNetworkClient, _NetworkController_log, _NetworkController_getRpcServiceOptions, _NetworkController_getBlockTrackerOptions, _NetworkController_networkConfigurationsByNetworkClientId, _NetworkController_isRpcFailoverEnabled, _NetworkController_updateRpcFailoverEnabled, _NetworkController_refreshNetwork, _NetworkController_getLatestBlock, _NetworkController_determineEIP1559Compatibility, _NetworkController_validateNetworkFields, _NetworkController_determineNetworkConfigurationToPersist, _NetworkController_registerNetworkClientsAsNeeded, _NetworkController_unregisterNetworkClientsAsNeeded, _NetworkController_updateNetworkConfigurations, _NetworkController_ensureAutoManagedNetworkClientRegistryPopulated, _NetworkController_createAutoManagedNetworkClientRegistry, _NetworkController_applyNetworkSelection;
40
40
  Object.defineProperty(exports, "__esModule", { value: true });
41
41
  exports.NetworkController = exports.selectAvailableNetworkClientIds = exports.getAvailableNetworkClientIds = exports.selectNetworkConfigurations = exports.getNetworkConfigurations = exports.getDefaultNetworkControllerState = exports.knownKeysOf = exports.RpcEndpointType = void 0;
42
42
  const base_controller_1 = require("@metamask/base-controller");
@@ -161,35 +161,25 @@ function getDefaultInfuraNetworkConfigurationsByChainId() {
161
161
  * @returns The `networkConfigurationsByChainId` object of all custom networks.
162
162
  */
163
163
  function getDefaultCustomNetworkConfigurationsByChainId() {
164
- return Object.values(controller_utils_1.CustomNetworkType).reduce((obj, customNetworkType) => {
165
- const chainId = controller_utils_1.ChainId[customNetworkType];
166
- const { ticker, rpcPrefs } = controller_utils_1.BUILT_IN_NETWORKS[customNetworkType];
167
- // It converts client id to upper case and replace '-' with '_'
168
- // to match the key in BUILT_IN_CUSTOM_NETWORKS_RPC
169
- // e.g. 'megaeth-testnet' to 'MEGAETH_TESTNET'
170
- // e.g. 'monad-testnet' to 'MONAD_TESTNET'
171
- // TODO: Refactor controller-utils to use the same format as others
172
- const rpcEndpointUrlKey = customNetworkType
173
- .toUpperCase()
174
- .replace('-', '_');
175
- const networkConfiguration = {
164
+ const { ticker, rpcPrefs } = controller_utils_1.BUILT_IN_NETWORKS[controller_utils_1.BuiltInNetworkName.MegaETHTestnet];
165
+ return {
166
+ [controller_utils_1.ChainId[controller_utils_1.BuiltInNetworkName.MegaETHTestnet]]: {
176
167
  blockExplorerUrls: [rpcPrefs.blockExplorerUrl],
177
- chainId: controller_utils_1.ChainId[customNetworkType],
168
+ chainId: controller_utils_1.ChainId[controller_utils_1.BuiltInNetworkName.MegaETHTestnet],
178
169
  defaultRpcEndpointIndex: 0,
179
170
  defaultBlockExplorerUrlIndex: 0,
180
- name: controller_utils_1.NetworkNickname[customNetworkType],
171
+ name: controller_utils_1.NetworkNickname[controller_utils_1.BuiltInNetworkName.MegaETHTestnet],
181
172
  nativeCurrency: ticker,
182
173
  rpcEndpoints: [
183
174
  {
184
175
  failoverUrls: [],
185
- networkClientId: customNetworkType,
176
+ networkClientId: controller_utils_1.BuiltInNetworkName.MegaETHTestnet,
186
177
  type: RpcEndpointType.Custom,
187
- url: controller_utils_1.BUILT_IN_CUSTOM_NETWORKS_RPC[rpcEndpointUrlKey],
178
+ url: controller_utils_1.BUILT_IN_CUSTOM_NETWORKS_RPC.MEGAETH_TESTNET,
188
179
  },
189
180
  ],
190
- };
191
- return { ...obj, [chainId]: networkConfiguration };
192
- }, {});
181
+ },
182
+ };
193
183
  }
194
184
  /**
195
185
  * Constructs properties for the NetworkController state whose values will be
@@ -352,7 +342,7 @@ class NetworkController extends base_controller_1.BaseController {
352
342
  * @param options - The options; see {@link NetworkControllerOptions}.
353
343
  */
354
344
  constructor(options) {
355
- const { messenger, state, infuraProjectId, log, getRpcServiceOptions, getBlockTrackerOptions, additionalDefaultNetworks, } = options;
345
+ const { messenger, state, infuraProjectId, log, getRpcServiceOptions, getBlockTrackerOptions, additionalDefaultNetworks, isRpcFailoverEnabled = false, } = options;
356
346
  const initialState = {
357
347
  ...getDefaultNetworkControllerState(additionalDefaultNetworks),
358
348
  ...state,
@@ -392,10 +382,12 @@ class NetworkController extends base_controller_1.BaseController {
392
382
  _NetworkController_getRpcServiceOptions.set(this, void 0);
393
383
  _NetworkController_getBlockTrackerOptions.set(this, void 0);
394
384
  _NetworkController_networkConfigurationsByNetworkClientId.set(this, void 0);
385
+ _NetworkController_isRpcFailoverEnabled.set(this, void 0);
395
386
  __classPrivateFieldSet(this, _NetworkController_infuraProjectId, infuraProjectId, "f");
396
387
  __classPrivateFieldSet(this, _NetworkController_log, log, "f");
397
388
  __classPrivateFieldSet(this, _NetworkController_getRpcServiceOptions, getRpcServiceOptions, "f");
398
389
  __classPrivateFieldSet(this, _NetworkController_getBlockTrackerOptions, getBlockTrackerOptions, "f");
390
+ __classPrivateFieldSet(this, _NetworkController_isRpcFailoverEnabled, isRpcFailoverEnabled, "f");
399
391
  __classPrivateFieldSet(this, _NetworkController_previouslySelectedNetworkClientId, this.state.selectedNetworkClientId, "f");
400
392
  __classPrivateFieldSet(this, _NetworkController_networkConfigurationsByNetworkClientId, buildNetworkConfigurationsByNetworkClientId(this.state.networkConfigurationsByChainId), "f");
401
393
  this.messagingSystem.registerActionHandler(
@@ -447,6 +439,22 @@ class NetworkController extends base_controller_1.BaseController {
447
439
  // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
448
440
  `${this.name}:updateNetwork`, this.updateNetwork.bind(this));
449
441
  }
442
+ /**
443
+ * Enables the RPC failover functionality. That is, if any RPC endpoints are
444
+ * configured with failover URLs, then traffic will automatically be diverted
445
+ * to them if those RPC endpoints are unavailable.
446
+ */
447
+ enableRpcFailover() {
448
+ __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateRpcFailoverEnabled).call(this, true);
449
+ }
450
+ /**
451
+ * Disables the RPC failover functionality. That is, even if any RPC endpoints
452
+ * are configured with failover URLs, then traffic will not automatically be
453
+ * diverted to them if those RPC endpoints are unavailable.
454
+ */
455
+ disableRpcFailover() {
456
+ __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateRpcFailoverEnabled).call(this, false);
457
+ }
450
458
  /**
451
459
  * Accesses the provider and block tracker for the currently selected network.
452
460
  * @returns The proxy and block tracker proxies.
@@ -1187,7 +1195,25 @@ class NetworkController extends base_controller_1.BaseController {
1187
1195
  }
1188
1196
  }
1189
1197
  exports.NetworkController = NetworkController;
1190
- _NetworkController_ethQuery = new WeakMap(), _NetworkController_infuraProjectId = new WeakMap(), _NetworkController_previouslySelectedNetworkClientId = new WeakMap(), _NetworkController_providerProxy = new WeakMap(), _NetworkController_blockTrackerProxy = new WeakMap(), _NetworkController_autoManagedNetworkClientRegistry = new WeakMap(), _NetworkController_autoManagedNetworkClient = new WeakMap(), _NetworkController_log = new WeakMap(), _NetworkController_getRpcServiceOptions = new WeakMap(), _NetworkController_getBlockTrackerOptions = new WeakMap(), _NetworkController_networkConfigurationsByNetworkClientId = new WeakMap(), _NetworkController_instances = new WeakSet(), _NetworkController_refreshNetwork =
1198
+ _NetworkController_ethQuery = new WeakMap(), _NetworkController_infuraProjectId = new WeakMap(), _NetworkController_previouslySelectedNetworkClientId = new WeakMap(), _NetworkController_providerProxy = new WeakMap(), _NetworkController_blockTrackerProxy = new WeakMap(), _NetworkController_autoManagedNetworkClientRegistry = new WeakMap(), _NetworkController_autoManagedNetworkClient = new WeakMap(), _NetworkController_log = new WeakMap(), _NetworkController_getRpcServiceOptions = new WeakMap(), _NetworkController_getBlockTrackerOptions = new WeakMap(), _NetworkController_networkConfigurationsByNetworkClientId = new WeakMap(), _NetworkController_isRpcFailoverEnabled = new WeakMap(), _NetworkController_instances = new WeakSet(), _NetworkController_updateRpcFailoverEnabled = function _NetworkController_updateRpcFailoverEnabled(newIsRpcFailoverEnabled) {
1199
+ if (__classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f") === newIsRpcFailoverEnabled) {
1200
+ return;
1201
+ }
1202
+ const autoManagedNetworkClientRegistry = __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_ensureAutoManagedNetworkClientRegistryPopulated).call(this);
1203
+ for (const networkClientsById of Object.values(autoManagedNetworkClientRegistry)) {
1204
+ for (const networkClientId of Object.keys(networkClientsById)) {
1205
+ // Type assertion: We can assume that `networkClientId` is valid here.
1206
+ const networkClient = networkClientsById[networkClientId];
1207
+ if (networkClient.configuration.failoverRpcUrls &&
1208
+ networkClient.configuration.failoverRpcUrls.length > 0) {
1209
+ newIsRpcFailoverEnabled
1210
+ ? networkClient.enableRpcFailover()
1211
+ : networkClient.disableRpcFailover();
1212
+ }
1213
+ }
1214
+ }
1215
+ __classPrivateFieldSet(this, _NetworkController_isRpcFailoverEnabled, newIsRpcFailoverEnabled, "f");
1216
+ }, _NetworkController_refreshNetwork =
1191
1217
  /**
1192
1218
  * Executes a series of steps to switch the network:
1193
1219
  *
@@ -1408,6 +1434,7 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1408
1434
  getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1409
1435
  getBlockTrackerOptions: __classPrivateFieldGet(this, _NetworkController_getBlockTrackerOptions, "f"),
1410
1436
  messenger: this.messagingSystem,
1437
+ isRpcFailoverEnabled: __classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f"),
1411
1438
  });
1412
1439
  }
1413
1440
  else {
@@ -1422,6 +1449,7 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1422
1449
  getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1423
1450
  getBlockTrackerOptions: __classPrivateFieldGet(this, _NetworkController_getBlockTrackerOptions, "f"),
1424
1451
  messenger: this.messagingSystem,
1452
+ isRpcFailoverEnabled: __classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f"),
1425
1453
  });
1426
1454
  }
1427
1455
  }
@@ -1480,6 +1508,7 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1480
1508
  getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1481
1509
  getBlockTrackerOptions: __classPrivateFieldGet(this, _NetworkController_getBlockTrackerOptions, "f"),
1482
1510
  messenger: this.messagingSystem,
1511
+ isRpcFailoverEnabled: __classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f"),
1483
1512
  }),
1484
1513
  ];
1485
1514
  }
@@ -1496,6 +1525,7 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1496
1525
  getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1497
1526
  getBlockTrackerOptions: __classPrivateFieldGet(this, _NetworkController_getBlockTrackerOptions, "f"),
1498
1527
  messenger: this.messagingSystem,
1528
+ isRpcFailoverEnabled: __classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f"),
1499
1529
  }),
1500
1530
  ];
1501
1531
  });