@metamask-previews/network-controller 23.2.0-preview-d11c4815 → 23.2.0-preview-66f06159

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ - Add optional `getBlockTrackerOptions` argument to NetworkController constructor ([#5679](https://github.com/MetaMask/core/pull/5679))
13
+ - Add optional `rpcFailoverEnabled` option to NetworkController constructor (`false` by default) ([#5679](https://github.com/MetaMask/core/pull/5679))
14
+ - Add `enableRpcFailover` and `disableRpcFailover` methods to NetworkController ([#5679](https://github.com/MetaMask/core/pull/5679))
15
+
16
+ ### Changed
17
+
18
+ - Disable the RPC failover behavior by default ([#5679](https://github.com/MetaMask/core/pull/5679))
19
+ - You are free to set the `failoverUrls` property on an RPC endpoint, but it won't have any effect
20
+ - To enable this behavior, either pass `rpcFailoverEnabled: true` to the constructor or call `enableRpcFailover` after initialization
21
+
10
22
  ## [23.2.0]
11
23
 
12
24
  ### Added
@@ -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_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");
@@ -342,7 +342,7 @@ class NetworkController extends base_controller_1.BaseController {
342
342
  * @param options - The options; see {@link NetworkControllerOptions}.
343
343
  */
344
344
  constructor(options) {
345
- const { messenger, state, infuraProjectId, log, getRpcServiceOptions, additionalDefaultNetworks, } = options;
345
+ const { messenger, state, infuraProjectId, log, getRpcServiceOptions, getBlockTrackerOptions = () => ({}), additionalDefaultNetworks, isRpcFailoverEnabled = false, } = options;
346
346
  const initialState = {
347
347
  ...getDefaultNetworkControllerState(additionalDefaultNetworks),
348
348
  ...state,
@@ -380,10 +380,14 @@ class NetworkController extends base_controller_1.BaseController {
380
380
  _NetworkController_autoManagedNetworkClient.set(this, void 0);
381
381
  _NetworkController_log.set(this, void 0);
382
382
  _NetworkController_getRpcServiceOptions.set(this, void 0);
383
+ _NetworkController_getBlockTrackerOptions.set(this, void 0);
383
384
  _NetworkController_networkConfigurationsByNetworkClientId.set(this, void 0);
385
+ _NetworkController_isRpcFailoverEnabled.set(this, void 0);
384
386
  __classPrivateFieldSet(this, _NetworkController_infuraProjectId, infuraProjectId, "f");
385
387
  __classPrivateFieldSet(this, _NetworkController_log, log, "f");
386
388
  __classPrivateFieldSet(this, _NetworkController_getRpcServiceOptions, getRpcServiceOptions, "f");
389
+ __classPrivateFieldSet(this, _NetworkController_getBlockTrackerOptions, getBlockTrackerOptions, "f");
390
+ __classPrivateFieldSet(this, _NetworkController_isRpcFailoverEnabled, isRpcFailoverEnabled, "f");
387
391
  __classPrivateFieldSet(this, _NetworkController_previouslySelectedNetworkClientId, this.state.selectedNetworkClientId, "f");
388
392
  __classPrivateFieldSet(this, _NetworkController_networkConfigurationsByNetworkClientId, buildNetworkConfigurationsByNetworkClientId(this.state.networkConfigurationsByChainId), "f");
389
393
  this.messagingSystem.registerActionHandler(
@@ -435,6 +439,22 @@ class NetworkController extends base_controller_1.BaseController {
435
439
  // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
436
440
  `${this.name}:updateNetwork`, this.updateNetwork.bind(this));
437
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
+ }
438
458
  /**
439
459
  * Accesses the provider and block tracker for the currently selected network.
440
460
  * @returns The proxy and block tracker proxies.
@@ -1175,7 +1195,27 @@ class NetworkController extends base_controller_1.BaseController {
1175
1195
  }
1176
1196
  }
1177
1197
  exports.NetworkController = NetworkController;
1178
- _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_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
+ networkClient.destroy();
1210
+ const newNetworkClient = newIsRpcFailoverEnabled
1211
+ ? networkClient.withRpcFailoverEnabled()
1212
+ : networkClient.withRpcFailoverDisabled();
1213
+ networkClientsById[networkClientId] = newNetworkClient;
1214
+ }
1215
+ }
1216
+ }
1217
+ __classPrivateFieldSet(this, _NetworkController_isRpcFailoverEnabled, newIsRpcFailoverEnabled, "f");
1218
+ }, _NetworkController_refreshNetwork =
1179
1219
  /**
1180
1220
  * Executes a series of steps to switch the network:
1181
1221
  *
@@ -1394,7 +1434,9 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1394
1434
  ticker: networkFields.nativeCurrency,
1395
1435
  },
1396
1436
  getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1437
+ getBlockTrackerOptions: __classPrivateFieldGet(this, _NetworkController_getBlockTrackerOptions, "f"),
1397
1438
  messenger: this.messagingSystem,
1439
+ isRpcFailoverEnabled: __classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f"),
1398
1440
  });
1399
1441
  }
1400
1442
  else {
@@ -1407,7 +1449,9 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1407
1449
  ticker: networkFields.nativeCurrency,
1408
1450
  },
1409
1451
  getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1452
+ getBlockTrackerOptions: __classPrivateFieldGet(this, _NetworkController_getBlockTrackerOptions, "f"),
1410
1453
  messenger: this.messagingSystem,
1454
+ isRpcFailoverEnabled: __classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f"),
1411
1455
  });
1412
1456
  }
1413
1457
  }
@@ -1464,7 +1508,9 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1464
1508
  ticker: networkConfiguration.nativeCurrency,
1465
1509
  },
1466
1510
  getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1511
+ getBlockTrackerOptions: __classPrivateFieldGet(this, _NetworkController_getBlockTrackerOptions, "f"),
1467
1512
  messenger: this.messagingSystem,
1513
+ isRpcFailoverEnabled: __classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f"),
1468
1514
  }),
1469
1515
  ];
1470
1516
  }
@@ -1479,7 +1525,9 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1479
1525
  ticker: networkConfiguration.nativeCurrency,
1480
1526
  },
1481
1527
  getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1528
+ getBlockTrackerOptions: __classPrivateFieldGet(this, _NetworkController_getBlockTrackerOptions, "f"),
1482
1529
  messenger: this.messagingSystem,
1530
+ isRpcFailoverEnabled: __classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f"),
1483
1531
  }),
1484
1532
  ];
1485
1533
  });