@metamask-previews/network-controller 22.2.1-preview-f15cb863 → 23.0.0-preview-29fe07c
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 +39 -18
- package/dist/NetworkController.cjs +19 -15
- package/dist/NetworkController.cjs.map +1 -1
- package/dist/NetworkController.d.cts +72 -8
- package/dist/NetworkController.d.cts.map +1 -1
- package/dist/NetworkController.d.mts +72 -8
- package/dist/NetworkController.d.mts.map +1 -1
- package/dist/NetworkController.mjs +19 -15
- package/dist/NetworkController.mjs.map +1 -1
- package/dist/create-auto-managed-network-client.cjs +12 -13
- package/dist/create-auto-managed-network-client.cjs.map +1 -1
- package/dist/create-auto-managed-network-client.d.cts +8 -7
- package/dist/create-auto-managed-network-client.d.cts.map +1 -1
- package/dist/create-auto-managed-network-client.d.mts +8 -7
- package/dist/create-auto-managed-network-client.d.mts.map +1 -1
- package/dist/create-auto-managed-network-client.mjs +12 -13
- package/dist/create-auto-managed-network-client.mjs.map +1 -1
- package/dist/create-network-client.cjs +33 -10
- package/dist/create-network-client.cjs.map +1 -1
- package/dist/create-network-client.d.cts +9 -7
- package/dist/create-network-client.d.cts.map +1 -1
- package/dist/create-network-client.d.mts +9 -7
- package/dist/create-network-client.d.mts.map +1 -1
- package/dist/create-network-client.mjs +33 -10
- package/dist/create-network-client.mjs.map +1 -1
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/dist/rpc-service/abstract-rpc-service.cjs.map +1 -1
- package/dist/rpc-service/abstract-rpc-service.d.cts +5 -39
- package/dist/rpc-service/abstract-rpc-service.d.cts.map +1 -1
- package/dist/rpc-service/abstract-rpc-service.d.mts +5 -39
- package/dist/rpc-service/abstract-rpc-service.d.mts.map +1 -1
- package/dist/rpc-service/abstract-rpc-service.mjs.map +1 -1
- package/dist/rpc-service/rpc-service-chain.cjs +10 -23
- package/dist/rpc-service/rpc-service-chain.cjs.map +1 -1
- package/dist/rpc-service/rpc-service-chain.d.cts +10 -35
- package/dist/rpc-service/rpc-service-chain.d.cts.map +1 -1
- package/dist/rpc-service/rpc-service-chain.d.mts +10 -35
- package/dist/rpc-service/rpc-service-chain.d.mts.map +1 -1
- package/dist/rpc-service/rpc-service-chain.mjs +10 -23
- package/dist/rpc-service/rpc-service-chain.mjs.map +1 -1
- package/dist/rpc-service/rpc-service-requestable.cjs +3 -0
- package/dist/rpc-service/rpc-service-requestable.cjs.map +1 -0
- package/dist/rpc-service/rpc-service-requestable.d.cts +47 -0
- package/dist/rpc-service/rpc-service-requestable.d.cts.map +1 -0
- package/dist/rpc-service/rpc-service-requestable.d.mts +47 -0
- package/dist/rpc-service/rpc-service-requestable.d.mts.map +1 -0
- package/dist/rpc-service/rpc-service-requestable.mjs +2 -0
- package/dist/rpc-service/rpc-service-requestable.mjs.map +1 -0
- package/dist/rpc-service/rpc-service.cjs +34 -31
- package/dist/rpc-service/rpc-service.cjs.map +1 -1
- package/dist/rpc-service/rpc-service.d.cts +56 -23
- package/dist/rpc-service/rpc-service.d.cts.map +1 -1
- package/dist/rpc-service/rpc-service.d.mts +56 -23
- package/dist/rpc-service/rpc-service.d.mts.map +1 -1
- package/dist/rpc-service/rpc-service.mjs +33 -30
- package/dist/rpc-service/rpc-service.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,33 +7,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [23.0.0]
|
|
11
|
+
|
|
10
12
|
### Added
|
|
11
13
|
|
|
12
14
|
- Implement circuit breaker pattern when retrying requests to Infura and custom RPC endpoints ([#5290](https://github.com/MetaMask/core/pull/5290))
|
|
13
|
-
- If the network is perceived to be
|
|
14
|
-
- "
|
|
15
|
+
- If the network is perceived to be unavailable after 5 attempts, further retries will be paused for 30 seconds.
|
|
16
|
+
- "Unavailable" means the following:
|
|
15
17
|
- A failure to reach the network (exact error depending on platform / HTTP client)
|
|
16
18
|
- The request responds with a non-JSON-parseable or non-JSON-RPC-compatible body
|
|
17
19
|
- The request returns a non-200 response
|
|
18
20
|
- Use exponential backoff / jitter when retrying requests to Infura and custom RPC endpoints ([#5290](https://github.com/MetaMask/core/pull/5290))
|
|
19
|
-
- As requests are retried, the delay between retries will increase exponentially (using random variance to prevent bursts)
|
|
20
|
-
- Add support for automatic failover when Infura is
|
|
21
|
+
- As requests are retried, the delay between retries will increase exponentially (using random variance to prevent bursts).
|
|
22
|
+
- Add support for automatic failover when Infura is unavailable ([#5360](https://github.com/MetaMask/core/pull/5360))
|
|
21
23
|
- An Infura RPC endpoint can now be configured with a list of failover URLs via `failoverUrls`.
|
|
22
24
|
- If, after many attempts, an Infura network is perceived to be down, the list of failover URLs will be tried in turn.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
25
|
+
- 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))
|
|
26
|
+
- Also add associated type `NetworkControllerRpcEndpointUnavailableEvent`.
|
|
27
|
+
- Add messenger action `NetworkController:rpcEndpointDegraded` for responding to when a RPC endpoint becomes degraded ([#5492](https://github.com/MetaMask/core/pull/5492))
|
|
28
|
+
- Also add associated type `NetworkControllerRpcEndpointDegradedEvent`.
|
|
29
|
+
- 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))
|
|
30
|
+
- Also add associated type `NetworkControllerRpcEndpointRequestRetriedEvent`.
|
|
31
|
+
- This is mainly useful for tests when mocking timers.
|
|
32
|
+
- Export `RpcServiceRequestable` type, which was previously named `AbstractRpcService` ([#5492](https://github.com/MetaMask/core/pull/5492))
|
|
33
|
+
- Export `isConnectionError` utility function ([#5501](https://github.com/MetaMask/core/pull/5501))
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- **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))
|
|
38
|
+
- This can be used to customize how RPC services (which eventually hit RPC endpoints) are constructed.
|
|
39
|
+
- For instance, you could set one `circuitBreakDuration` for one class of endpoints, and another `circuitBreakDuration` for another class.
|
|
40
|
+
- At minimum you will need to pass `fetch` and `btoa`.
|
|
41
|
+
- The `NetworkControllerOptions` also reflects this change.
|
|
42
|
+
- **BREAKING:** Add required property `failoverUrls` to `RpcEndpoint` ([#5360](https://github.com/MetaMask/core/pull/5360))
|
|
43
|
+
- The `NetworkControllerState` and the `state` option to `NetworkController` also reflect this change.
|
|
44
|
+
- **BREAKING:** Add required property `failoverRpcUrls` to `NetworkClientConfiguration` ([#5360](https://github.com/MetaMask/core/pull/5360))
|
|
45
|
+
- The `configuration` property in the `AutoManagedNetworkClient` and `NetworkClient` types also reflect this change.
|
|
46
|
+
- **BREAKING:** The `AbstractRpcService` type now has a non-optional `endpointUrl` property ([#5492](https://github.com/MetaMask/core/pull/5492))
|
|
47
|
+
- The old version of `AbstractRpcService` is now called `RpcServiceRequestable`
|
|
30
48
|
- Synchronize retry logic and error handling behavior between Infura and custom RPC endpoints ([#5290](https://github.com/MetaMask/core/pull/5290))
|
|
31
|
-
- 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"
|
|
32
|
-
- 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"
|
|
33
|
-
- A request to a custom endpoint that throws an "ECONNRESET" error will now be retried up to 5 times
|
|
34
|
-
- 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"
|
|
35
|
-
- 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
|
|
36
|
-
- 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
|
|
49
|
+
- 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".
|
|
50
|
+
- 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".
|
|
51
|
+
- A request to a custom endpoint that throws an "ECONNRESET" error will now be retried up to 5 times.
|
|
52
|
+
- 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".
|
|
53
|
+
- 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.
|
|
54
|
+
- 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.
|
|
37
55
|
- A "retriable error" is now regarded as the following:
|
|
38
56
|
- A failure to reach the network (exact error depending on platform / HTTP client)
|
|
39
57
|
- The request responds with a non-JSON-parseable or non-JSON-RPC-compatible body
|
|
@@ -41,6 +59,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
41
59
|
- Bump dependencies to support usage of RPC services internally for network requests ([#5290](https://github.com/MetaMask/core/pull/5290))
|
|
42
60
|
- Bump `@metamask/eth-json-rpc-infura` to `^10.1.0`
|
|
43
61
|
- Bump `@metamask/eth-json-rpc-middleware` to `^15.1.0`
|
|
62
|
+
- Bump `@metamask/controller-utils` to `^11.5.0` ([#5439](https://github.com/MetaMask/core/pull/5439))
|
|
63
|
+
- Bump `@metamask/utils` to `^11.2.0` ([#5301](https://github.com/MetaMask/core/pull/5301))
|
|
44
64
|
|
|
45
65
|
### Fixed
|
|
46
66
|
|
|
@@ -761,7 +781,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
761
781
|
|
|
762
782
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
|
763
783
|
|
|
764
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/network-controller@
|
|
784
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/network-controller@23.0.0...HEAD
|
|
785
|
+
[23.0.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.2.1...@metamask/network-controller@23.0.0
|
|
765
786
|
[22.2.1]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.2.0...@metamask/network-controller@22.2.1
|
|
766
787
|
[22.2.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@22.1.1...@metamask/network-controller@22.2.0
|
|
767
788
|
[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,
|
|
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");
|
|
@@ -287,7 +287,13 @@ function buildNetworkConfigurationsByNetworkClientId(networkConfigurationsByChai
|
|
|
287
287
|
* Controller that creates and manages an Ethereum network provider.
|
|
288
288
|
*/
|
|
289
289
|
class NetworkController extends base_controller_1.BaseController {
|
|
290
|
-
|
|
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;
|
|
291
297
|
const initialState = { ...getDefaultNetworkControllerState(), ...state };
|
|
292
298
|
validateNetworkControllerState(initialState);
|
|
293
299
|
if (!infuraProjectId || typeof infuraProjectId !== 'string') {
|
|
@@ -321,13 +327,11 @@ class NetworkController extends base_controller_1.BaseController {
|
|
|
321
327
|
_NetworkController_autoManagedNetworkClientRegistry.set(this, void 0);
|
|
322
328
|
_NetworkController_autoManagedNetworkClient.set(this, void 0);
|
|
323
329
|
_NetworkController_log.set(this, void 0);
|
|
324
|
-
|
|
325
|
-
_NetworkController_btoa.set(this, void 0);
|
|
330
|
+
_NetworkController_getRpcServiceOptions.set(this, void 0);
|
|
326
331
|
_NetworkController_networkConfigurationsByNetworkClientId.set(this, void 0);
|
|
327
332
|
__classPrivateFieldSet(this, _NetworkController_infuraProjectId, infuraProjectId, "f");
|
|
328
333
|
__classPrivateFieldSet(this, _NetworkController_log, log, "f");
|
|
329
|
-
__classPrivateFieldSet(this,
|
|
330
|
-
__classPrivateFieldSet(this, _NetworkController_btoa, givenBtoa, "f");
|
|
334
|
+
__classPrivateFieldSet(this, _NetworkController_getRpcServiceOptions, getRpcServiceOptions, "f");
|
|
331
335
|
__classPrivateFieldSet(this, _NetworkController_previouslySelectedNetworkClientId, this.state.selectedNetworkClientId, "f");
|
|
332
336
|
__classPrivateFieldSet(this, _NetworkController_networkConfigurationsByNetworkClientId, buildNetworkConfigurationsByNetworkClientId(this.state.networkConfigurationsByChainId), "f");
|
|
333
337
|
this.messagingSystem.registerActionHandler(
|
|
@@ -1112,7 +1116,7 @@ class NetworkController extends base_controller_1.BaseController {
|
|
|
1112
1116
|
}
|
|
1113
1117
|
}
|
|
1114
1118
|
exports.NetworkController = NetworkController;
|
|
1115
|
-
_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(),
|
|
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 =
|
|
1116
1120
|
/**
|
|
1117
1121
|
* Executes a series of steps to switch the network:
|
|
1118
1122
|
*
|
|
@@ -1330,8 +1334,8 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
|
|
|
1330
1334
|
infuraProjectId: __classPrivateFieldGet(this, _NetworkController_infuraProjectId, "f"),
|
|
1331
1335
|
ticker: networkFields.nativeCurrency,
|
|
1332
1336
|
},
|
|
1333
|
-
|
|
1334
|
-
|
|
1337
|
+
getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
|
|
1338
|
+
messenger: this.messagingSystem,
|
|
1335
1339
|
});
|
|
1336
1340
|
}
|
|
1337
1341
|
else {
|
|
@@ -1343,8 +1347,8 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
|
|
|
1343
1347
|
rpcUrl: addedRpcEndpoint.url,
|
|
1344
1348
|
ticker: networkFields.nativeCurrency,
|
|
1345
1349
|
},
|
|
1346
|
-
|
|
1347
|
-
|
|
1350
|
+
getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
|
|
1351
|
+
messenger: this.messagingSystem,
|
|
1348
1352
|
});
|
|
1349
1353
|
}
|
|
1350
1354
|
}
|
|
@@ -1400,8 +1404,8 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
|
|
|
1400
1404
|
chainId: networkConfiguration.chainId,
|
|
1401
1405
|
ticker: networkConfiguration.nativeCurrency,
|
|
1402
1406
|
},
|
|
1403
|
-
|
|
1404
|
-
|
|
1407
|
+
getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
|
|
1408
|
+
messenger: this.messagingSystem,
|
|
1405
1409
|
}),
|
|
1406
1410
|
];
|
|
1407
1411
|
}
|
|
@@ -1415,8 +1419,8 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
|
|
|
1415
1419
|
rpcUrl: rpcEndpoint.url,
|
|
1416
1420
|
ticker: networkConfiguration.nativeCurrency,
|
|
1417
1421
|
},
|
|
1418
|
-
|
|
1419
|
-
|
|
1422
|
+
getRpcServiceOptions: __classPrivateFieldGet(this, _NetworkController_getRpcServiceOptions, "f"),
|
|
1423
|
+
messenger: this.messagingSystem,
|
|
1420
1424
|
}),
|
|
1421
1425
|
];
|
|
1422
1426
|
});
|