@metamask/network-controller 22.2.1 → 23.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +69 -2
  2. package/dist/NetworkController.cjs +63 -30
  3. package/dist/NetworkController.cjs.map +1 -1
  4. package/dist/NetworkController.d.cts +90 -5
  5. package/dist/NetworkController.d.cts.map +1 -1
  6. package/dist/NetworkController.d.mts +90 -5
  7. package/dist/NetworkController.d.mts.map +1 -1
  8. package/dist/NetworkController.mjs +63 -30
  9. package/dist/NetworkController.mjs.map +1 -1
  10. package/dist/create-auto-managed-network-client.cjs +26 -6
  11. package/dist/create-auto-managed-network-client.cjs.map +1 -1
  12. package/dist/create-auto-managed-network-client.d.cts +12 -2
  13. package/dist/create-auto-managed-network-client.d.cts.map +1 -1
  14. package/dist/create-auto-managed-network-client.d.mts +12 -2
  15. package/dist/create-auto-managed-network-client.d.mts.map +1 -1
  16. package/dist/create-auto-managed-network-client.mjs +26 -6
  17. package/dist/create-auto-managed-network-client.mjs.map +1 -1
  18. package/dist/create-network-client.cjs +57 -17
  19. package/dist/create-network-client.cjs.map +1 -1
  20. package/dist/create-network-client.d.cts +13 -2
  21. package/dist/create-network-client.d.cts.map +1 -1
  22. package/dist/create-network-client.d.mts +13 -2
  23. package/dist/create-network-client.d.mts.map +1 -1
  24. package/dist/create-network-client.mjs +57 -17
  25. package/dist/create-network-client.mjs.map +1 -1
  26. package/dist/index.cjs +3 -1
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.d.cts +3 -1
  29. package/dist/index.d.cts.map +1 -1
  30. package/dist/index.d.mts +3 -1
  31. package/dist/index.d.mts.map +1 -1
  32. package/dist/index.mjs +1 -0
  33. package/dist/index.mjs.map +1 -1
  34. package/dist/rpc-service/abstract-rpc-service.cjs.map +1 -1
  35. package/dist/rpc-service/abstract-rpc-service.d.cts +5 -39
  36. package/dist/rpc-service/abstract-rpc-service.d.cts.map +1 -1
  37. package/dist/rpc-service/abstract-rpc-service.d.mts +5 -39
  38. package/dist/rpc-service/abstract-rpc-service.d.mts.map +1 -1
  39. package/dist/rpc-service/abstract-rpc-service.mjs.map +1 -1
  40. package/dist/rpc-service/rpc-service-chain.cjs +10 -23
  41. package/dist/rpc-service/rpc-service-chain.cjs.map +1 -1
  42. package/dist/rpc-service/rpc-service-chain.d.cts +10 -35
  43. package/dist/rpc-service/rpc-service-chain.d.cts.map +1 -1
  44. package/dist/rpc-service/rpc-service-chain.d.mts +10 -35
  45. package/dist/rpc-service/rpc-service-chain.d.mts.map +1 -1
  46. package/dist/rpc-service/rpc-service-chain.mjs +10 -23
  47. package/dist/rpc-service/rpc-service-chain.mjs.map +1 -1
  48. package/dist/rpc-service/rpc-service-requestable.cjs +3 -0
  49. package/dist/rpc-service/rpc-service-requestable.cjs.map +1 -0
  50. package/dist/rpc-service/rpc-service-requestable.d.cts +47 -0
  51. package/dist/rpc-service/rpc-service-requestable.d.cts.map +1 -0
  52. package/dist/rpc-service/rpc-service-requestable.d.mts +47 -0
  53. package/dist/rpc-service/rpc-service-requestable.d.mts.map +1 -0
  54. package/dist/rpc-service/rpc-service-requestable.mjs +2 -0
  55. package/dist/rpc-service/rpc-service-requestable.mjs.map +1 -0
  56. package/dist/rpc-service/rpc-service.cjs +108 -47
  57. package/dist/rpc-service/rpc-service.cjs.map +1 -1
  58. package/dist/rpc-service/rpc-service.d.cts +63 -27
  59. package/dist/rpc-service/rpc-service.d.cts.map +1 -1
  60. package/dist/rpc-service/rpc-service.d.mts +63 -27
  61. package/dist/rpc-service/rpc-service.d.mts.map +1 -1
  62. package/dist/rpc-service/rpc-service.mjs +106 -45
  63. package/dist/rpc-service/rpc-service.mjs.map +1 -1
  64. package/dist/types.cjs.map +1 -1
  65. package/dist/types.d.cts +11 -6
  66. package/dist/types.d.cts.map +1 -1
  67. package/dist/types.d.mts +11 -6
  68. package/dist/types.d.mts.map +1 -1
  69. package/dist/types.mjs.map +1 -1
  70. package/package.json +7 -5
package/CHANGELOG.md CHANGED
@@ -7,11 +7,76 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [23.1.0]
11
+
12
+ ### Added
13
+
14
+ - The `NetworkController:rpcEndpointDegraded` messenger event now has a new `chainId` property in its data, which is the ID of the chain that the endpoint represents ([#5517](https://github.com/MetaMask/core/pull/5517))
15
+
16
+ ## [23.0.0]
17
+
18
+ ### Added
19
+
20
+ - Implement circuit breaker pattern when retrying requests to Infura and custom RPC endpoints ([#5290](https://github.com/MetaMask/core/pull/5290))
21
+ - If the network is perceived to be unavailable after 5 attempts, further retries will be paused for 30 seconds.
22
+ - "Unavailable" means the following:
23
+ - A failure to reach the network (exact error depending on platform / HTTP client)
24
+ - The request responds with a non-JSON-parseable or non-JSON-RPC-compatible body
25
+ - The request returns a non-200 response
26
+ - Use exponential backoff / jitter when retrying requests to Infura and custom RPC endpoints ([#5290](https://github.com/MetaMask/core/pull/5290))
27
+ - As requests are retried, the delay between retries will increase exponentially (using random variance to prevent bursts).
28
+ - Add support for automatic failover when Infura is unavailable ([#5360](https://github.com/MetaMask/core/pull/5360))
29
+ - An Infura RPC endpoint can now be configured with a list of failover URLs via `failoverUrls`.
30
+ - If, after many attempts, an Infura network is perceived to be down, the list of failover URLs will be tried in turn.
31
+ - Add messenger action `NetworkController:rpcEndpointUnavailable` for responding to when a RPC endpoint becomes unavailable (see above) ([#5492](https://github.com/MetaMask/core/pull/5492), [#5501](https://github.com/MetaMask/core/pull/5501))
32
+ - Also add associated type `NetworkControllerRpcEndpointUnavailableEvent`.
33
+ - Add messenger action `NetworkController:rpcEndpointDegraded` for responding to when a RPC endpoint becomes degraded ([#5492](https://github.com/MetaMask/core/pull/5492))
34
+ - Also add associated type `NetworkControllerRpcEndpointDegradedEvent`.
35
+ - Add messenger action `NetworkController:rpcEndpointRequestRetried` for responding to when a RPC endpoint is retried following a retriable error ([#5492](https://github.com/MetaMask/core/pull/5492))
36
+ - Also add associated type `NetworkControllerRpcEndpointRequestRetriedEvent`.
37
+ - This is mainly useful for tests when mocking timers.
38
+ - Export `RpcServiceRequestable` type, which was previously named `AbstractRpcService` ([#5492](https://github.com/MetaMask/core/pull/5492))
39
+ - Export `isConnectionError` utility function ([#5501](https://github.com/MetaMask/core/pull/5501))
40
+
41
+ ### Changed
42
+
43
+ - **BREAKING:** `NetworkController` constructor now takes a new required option, `getRpcServiceOptions` ([#5290](https://github.com/MetaMask/core/pull/5290), [#5492](https://github.com/MetaMask/core/pull/5492))
44
+ - This can be used to customize how RPC services (which eventually hit RPC endpoints) are constructed.
45
+ - For instance, you could set one `circuitBreakDuration` for one class of endpoints, and another `circuitBreakDuration` for another class.
46
+ - At minimum you will need to pass `fetch` and `btoa`.
47
+ - The `NetworkControllerOptions` also reflects this change.
48
+ - **BREAKING:** Add required property `failoverUrls` to `RpcEndpoint` ([#5360](https://github.com/MetaMask/core/pull/5360))
49
+ - The `NetworkControllerState` and the `state` option to `NetworkController` also reflect this change.
50
+ - **BREAKING:** Add required property `failoverRpcUrls` to `NetworkClientConfiguration` ([#5360](https://github.com/MetaMask/core/pull/5360))
51
+ - The `configuration` property in the `AutoManagedNetworkClient` and `NetworkClient` types also reflect this change.
52
+ - **BREAKING:** The `AbstractRpcService` type now has a non-optional `endpointUrl` property ([#5492](https://github.com/MetaMask/core/pull/5492))
53
+ - The old version of `AbstractRpcService` is now called `RpcServiceRequestable`
54
+ - Synchronize retry logic and error handling behavior between Infura and custom RPC endpoints ([#5290](https://github.com/MetaMask/core/pull/5290))
55
+ - A request to a custom endpoint that returns a 418 response will no longer return a JSON-RPC response with the error "Request is being rate limited".
56
+ - A request to a custom endpoint that returns a 429 response now returns a JSON-RPC response with the error "Request is being rate limited".
57
+ - A request to a custom endpoint that throws an "ECONNRESET" error will now be retried up to 5 times.
58
+ - A request to a Infura endpoint that fails more than 5 times in a row will now respond with a JSON-RPC error that encompasses the failure instead of hiding it as "InfuraProvider - cannot complete request. All retries exhausted".
59
+ - A request to a Infura endpoint that returns a non-retriable, non-2xx response will now respond with a JSON-RPC error that has the underling message "Non-200 status code: '\<code\>'" rather than including the raw response from the endpoint.
60
+ - A request to a custom endpoint that fails with a retriable error more than 5 times in a row will now respond with a JSON-RPC error that encompasses the failure instead of returning an empty response.
61
+ - A "retriable error" is now regarded as the following:
62
+ - A failure to reach the network (exact error depending on platform / HTTP client)
63
+ - The request responds with a non-JSON-parseable or non-JSON-RPC-compatible body
64
+ - The request returns a 503 or 504 response
65
+ - Bump dependencies to support usage of RPC services internally for network requests ([#5290](https://github.com/MetaMask/core/pull/5290))
66
+ - Bump `@metamask/eth-json-rpc-infura` to `^10.1.0`
67
+ - Bump `@metamask/eth-json-rpc-middleware` to `^15.1.0`
68
+ - Bump `@metamask/controller-utils` to `^11.5.0` ([#5439](https://github.com/MetaMask/core/pull/5439))
69
+ - Bump `@metamask/utils` to `^11.2.0` ([#5301](https://github.com/MetaMask/core/pull/5301))
70
+
71
+ ### Fixed
72
+
73
+ - Fix `findNetworkClientIdByChainId` to return the network client ID for the chain's configured default RPC endpoint instead of its first listed RPC endpoint ([#5344](https://github.com/MetaMask/core/pull/5344))
74
+
10
75
  ## [22.2.1]
11
76
 
12
77
  ### Changed
13
78
 
14
- - Bump `@metamask/base-controller` from `^7.1.1` to `^8.0.0` [#5305](https://github.com/MetaMask/core/pull/5305))
79
+ - Bump `@metamask/base-controller` from `^7.1.1` to `^8.0.0` ([#5305](https://github.com/MetaMask/core/pull/5305))
15
80
 
16
81
  ## [22.2.0]
17
82
 
@@ -722,7 +787,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
722
787
 
723
788
  All changes listed after this point were applied to this package following the monorepo conversion.
724
789
 
725
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.2.1...HEAD
790
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/network-controller@23.1.0...HEAD
791
+ [23.1.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@23.0.0...@metamask/network-controller@23.1.0
792
+ [23.0.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.2.1...@metamask/network-controller@23.0.0
726
793
  [22.2.1]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.2.0...@metamask/network-controller@22.2.1
727
794
  [22.2.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.1.1...@metamask/network-controller@22.2.0
728
795
  [22.1.1]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.1.0...@metamask/network-controller@22.1.1
@@ -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_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_networkConfigurationsByNetworkClientId, _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");
@@ -123,6 +123,7 @@ function getDefaultNetworkConfigurationsByChainId() {
123
123
  nativeCurrency: controller_utils_1.NetworksTicker[infuraNetworkType],
124
124
  rpcEndpoints: [
125
125
  {
126
+ failoverUrls: [],
126
127
  networkClientId: infuraNetworkType,
127
128
  type: RpcEndpointType.Infura,
128
129
  url: rpcEndpointUrl,
@@ -286,7 +287,13 @@ function buildNetworkConfigurationsByNetworkClientId(networkConfigurationsByChai
286
287
  * Controller that creates and manages an Ethereum network provider.
287
288
  */
288
289
  class NetworkController extends base_controller_1.BaseController {
289
- constructor({ messenger, state, infuraProjectId, log, }) {
290
+ /**
291
+ * Constructs a NetworkController.
292
+ *
293
+ * @param options - The options; see {@link NetworkControllerOptions}.
294
+ */
295
+ constructor(options) {
296
+ const { messenger, state, infuraProjectId, log, getRpcServiceOptions } = options;
290
297
  const initialState = { ...getDefaultNetworkControllerState(), ...state };
291
298
  validateNetworkControllerState(initialState);
292
299
  if (!infuraProjectId || typeof infuraProjectId !== 'string') {
@@ -320,9 +327,11 @@ class NetworkController extends base_controller_1.BaseController {
320
327
  _NetworkController_autoManagedNetworkClientRegistry.set(this, void 0);
321
328
  _NetworkController_autoManagedNetworkClient.set(this, void 0);
322
329
  _NetworkController_log.set(this, void 0);
330
+ _NetworkController_getRpcServiceOptions.set(this, void 0);
323
331
  _NetworkController_networkConfigurationsByNetworkClientId.set(this, void 0);
324
332
  __classPrivateFieldSet(this, _NetworkController_infuraProjectId, infuraProjectId, "f");
325
333
  __classPrivateFieldSet(this, _NetworkController_log, log, "f");
334
+ __classPrivateFieldSet(this, _NetworkController_getRpcServiceOptions, getRpcServiceOptions, "f");
326
335
  __classPrivateFieldSet(this, _NetworkController_previouslySelectedNetworkClientId, this.state.selectedNetworkClientId, "f");
327
336
  __classPrivateFieldSet(this, _NetworkController_networkConfigurationsByNetworkClientId, buildNetworkConfigurationsByNetworkClientId(this.state.networkConfigurationsByChainId), "f");
328
337
  this.messagingSystem.registerActionHandler(
@@ -460,7 +469,8 @@ class NetworkController extends base_controller_1.BaseController {
460
469
  let updatedNetworkStatus;
461
470
  let updatedIsEIP1559Compatible;
462
471
  try {
463
- updatedIsEIP1559Compatible = await __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_determineEIP1559Compatibility).call(this, networkClientId);
472
+ updatedIsEIP1559Compatible =
473
+ await __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_determineEIP1559Compatibility).call(this, networkClientId);
464
474
  updatedNetworkStatus = constants_1.NetworkStatus.Available;
465
475
  }
466
476
  catch (error) {
@@ -1088,22 +1098,25 @@ class NetworkController extends base_controller_1.BaseController {
1088
1098
  });
1089
1099
  }
1090
1100
  /**
1091
- * Searches for a network configuration ID with the given ChainID and returns it.
1101
+ * Searches for the default RPC endpoint configured for the given chain and
1102
+ * returns its network client ID. This can then be passed to
1103
+ * {@link getNetworkClientById} to retrieve the network client.
1092
1104
  *
1093
- * @param chainId - ChainId to search for
1094
- * @returns networkClientId of the network configuration with the given chainId
1105
+ * @param chainId - Chain ID to search for.
1106
+ * @returns The ID of the network client created for the chain's default RPC
1107
+ * endpoint.
1095
1108
  */
1096
1109
  findNetworkClientIdByChainId(chainId) {
1097
- const networkClients = this.getNetworkClientRegistry();
1098
- const networkClientEntry = Object.entries(networkClients).find(([_, networkClient]) => networkClient.configuration.chainId === chainId);
1099
- if (networkClientEntry === undefined) {
1100
- throw new Error("Couldn't find networkClientId for chainId");
1110
+ const networkConfiguration = this.state.networkConfigurationsByChainId[chainId];
1111
+ if (!networkConfiguration) {
1112
+ throw new Error(`Invalid chain ID "${chainId}"`);
1101
1113
  }
1102
- return networkClientEntry[0];
1114
+ const { networkClientId } = networkConfiguration.rpcEndpoints[networkConfiguration.defaultRpcEndpointIndex];
1115
+ return networkClientId;
1103
1116
  }
1104
1117
  }
1105
1118
  exports.NetworkController = NetworkController;
1106
- _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_networkConfigurationsByNetworkClientId = new WeakMap(), _NetworkController_instances = new WeakSet(), _NetworkController_refreshNetwork =
1119
+ _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 =
1107
1120
  /**
1108
1121
  * Executes a series of steps to switch the network:
1109
1122
  *
@@ -1313,19 +1326,29 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1313
1326
  for (const addedRpcEndpoint of addedRpcEndpoints) {
1314
1327
  if (addedRpcEndpoint.type === RpcEndpointType.Infura) {
1315
1328
  autoManagedNetworkClientRegistry[types_1.NetworkClientType.Infura][addedRpcEndpoint.networkClientId] = (0, create_auto_managed_network_client_1.createAutoManagedNetworkClient)({
1316
- type: types_1.NetworkClientType.Infura,
1317
- chainId: networkFields.chainId,
1318
- network: addedRpcEndpoint.networkClientId,
1319
- infuraProjectId: __classPrivateFieldGet(this, _NetworkController_infuraProjectId, "f"),
1320
- ticker: networkFields.nativeCurrency,
1329
+ networkClientConfiguration: {
1330
+ type: types_1.NetworkClientType.Infura,
1331
+ chainId: networkFields.chainId,
1332
+ network: addedRpcEndpoint.networkClientId,
1333
+ failoverRpcUrls: addedRpcEndpoint.failoverUrls,
1334
+ infuraProjectId: __classPrivateFieldGet(this, _NetworkController_infuraProjectId, "f"),
1335
+ ticker: networkFields.nativeCurrency,
1336
+ },
1337
+ getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1338
+ messenger: this.messagingSystem,
1321
1339
  });
1322
1340
  }
1323
1341
  else {
1324
1342
  autoManagedNetworkClientRegistry[types_1.NetworkClientType.Custom][addedRpcEndpoint.networkClientId] = (0, create_auto_managed_network_client_1.createAutoManagedNetworkClient)({
1325
- type: types_1.NetworkClientType.Custom,
1326
- chainId: networkFields.chainId,
1327
- rpcUrl: addedRpcEndpoint.url,
1328
- ticker: networkFields.nativeCurrency,
1343
+ networkClientConfiguration: {
1344
+ type: types_1.NetworkClientType.Custom,
1345
+ chainId: networkFields.chainId,
1346
+ failoverRpcUrls: addedRpcEndpoint.failoverUrls,
1347
+ rpcUrl: addedRpcEndpoint.url,
1348
+ ticker: networkFields.nativeCurrency,
1349
+ },
1350
+ getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1351
+ messenger: this.messagingSystem,
1329
1352
  });
1330
1353
  }
1331
1354
  }
@@ -1373,21 +1396,31 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1373
1396
  return [
1374
1397
  rpcEndpoint.networkClientId,
1375
1398
  (0, create_auto_managed_network_client_1.createAutoManagedNetworkClient)({
1376
- type: types_1.NetworkClientType.Infura,
1377
- network: infuraNetworkName,
1378
- infuraProjectId: __classPrivateFieldGet(this, _NetworkController_infuraProjectId, "f"),
1379
- chainId: networkConfiguration.chainId,
1380
- ticker: networkConfiguration.nativeCurrency,
1399
+ networkClientConfiguration: {
1400
+ type: types_1.NetworkClientType.Infura,
1401
+ network: infuraNetworkName,
1402
+ failoverRpcUrls: rpcEndpoint.failoverUrls,
1403
+ infuraProjectId: __classPrivateFieldGet(this, _NetworkController_infuraProjectId, "f"),
1404
+ chainId: networkConfiguration.chainId,
1405
+ ticker: networkConfiguration.nativeCurrency,
1406
+ },
1407
+ getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1408
+ messenger: this.messagingSystem,
1381
1409
  }),
1382
1410
  ];
1383
1411
  }
1384
1412
  return [
1385
1413
  rpcEndpoint.networkClientId,
1386
1414
  (0, create_auto_managed_network_client_1.createAutoManagedNetworkClient)({
1387
- type: types_1.NetworkClientType.Custom,
1388
- chainId: networkConfiguration.chainId,
1389
- rpcUrl: rpcEndpoint.url,
1390
- ticker: networkConfiguration.nativeCurrency,
1415
+ networkClientConfiguration: {
1416
+ type: types_1.NetworkClientType.Custom,
1417
+ chainId: networkConfiguration.chainId,
1418
+ failoverRpcUrls: rpcEndpoint.failoverUrls,
1419
+ rpcUrl: rpcEndpoint.url,
1420
+ ticker: networkConfiguration.nativeCurrency,
1421
+ },
1422
+ getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
1423
+ messenger: this.messagingSystem,
1391
1424
  }),
1392
1425
  ];
1393
1426
  });