@metamask-previews/network-controller 26.0.0-preview-bc80feb8 → 27.0.0-preview-84f90603

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 (68) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/dist/NetworkController.cjs +37 -10
  3. package/dist/NetworkController.cjs.map +1 -1
  4. package/dist/NetworkController.d.cts +135 -12
  5. package/dist/NetworkController.d.cts.map +1 -1
  6. package/dist/NetworkController.d.mts +135 -12
  7. package/dist/NetworkController.d.mts.map +1 -1
  8. package/dist/NetworkController.mjs +37 -10
  9. package/dist/NetworkController.mjs.map +1 -1
  10. package/dist/constants.cjs +18 -10
  11. package/dist/constants.cjs.map +1 -1
  12. package/dist/constants.d.cts +18 -10
  13. package/dist/constants.d.cts.map +1 -1
  14. package/dist/constants.d.mts +18 -10
  15. package/dist/constants.d.mts.map +1 -1
  16. package/dist/constants.mjs +18 -10
  17. package/dist/constants.mjs.map +1 -1
  18. package/dist/create-auto-managed-network-client.cjs +4 -1
  19. package/dist/create-auto-managed-network-client.cjs.map +1 -1
  20. package/dist/create-auto-managed-network-client.d.cts +5 -2
  21. package/dist/create-auto-managed-network-client.d.cts.map +1 -1
  22. package/dist/create-auto-managed-network-client.d.mts +5 -2
  23. package/dist/create-auto-managed-network-client.d.mts.map +1 -1
  24. package/dist/create-auto-managed-network-client.mjs +4 -1
  25. package/dist/create-auto-managed-network-client.mjs.map +1 -1
  26. package/dist/create-network-client.cjs +132 -42
  27. package/dist/create-network-client.cjs.map +1 -1
  28. package/dist/create-network-client.d.cts +5 -2
  29. package/dist/create-network-client.d.cts.map +1 -1
  30. package/dist/create-network-client.d.mts +5 -2
  31. package/dist/create-network-client.d.mts.map +1 -1
  32. package/dist/create-network-client.mjs +132 -42
  33. package/dist/create-network-client.mjs.map +1 -1
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +1 -1
  36. package/dist/index.d.cts.map +1 -1
  37. package/dist/index.d.mts +1 -1
  38. package/dist/index.d.mts.map +1 -1
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/rpc-service/rpc-service-chain.cjs +247 -39
  41. package/dist/rpc-service/rpc-service-chain.cjs.map +1 -1
  42. package/dist/rpc-service/rpc-service-chain.d.cts +106 -25
  43. package/dist/rpc-service/rpc-service-chain.d.cts.map +1 -1
  44. package/dist/rpc-service/rpc-service-chain.d.mts +106 -25
  45. package/dist/rpc-service/rpc-service-chain.d.mts.map +1 -1
  46. package/dist/rpc-service/rpc-service-chain.mjs +247 -39
  47. package/dist/rpc-service/rpc-service-chain.mjs.map +1 -1
  48. package/dist/rpc-service/rpc-service-requestable.cjs.map +1 -1
  49. package/dist/rpc-service/rpc-service-requestable.d.cts +15 -5
  50. package/dist/rpc-service/rpc-service-requestable.d.cts.map +1 -1
  51. package/dist/rpc-service/rpc-service-requestable.d.mts +15 -5
  52. package/dist/rpc-service/rpc-service-requestable.d.mts.map +1 -1
  53. package/dist/rpc-service/rpc-service-requestable.mjs.map +1 -1
  54. package/dist/rpc-service/rpc-service.cjs +65 -33
  55. package/dist/rpc-service/rpc-service.cjs.map +1 -1
  56. package/dist/rpc-service/rpc-service.d.cts +33 -24
  57. package/dist/rpc-service/rpc-service.d.cts.map +1 -1
  58. package/dist/rpc-service/rpc-service.d.mts +33 -24
  59. package/dist/rpc-service/rpc-service.d.mts.map +1 -1
  60. package/dist/rpc-service/rpc-service.mjs +66 -34
  61. package/dist/rpc-service/rpc-service.mjs.map +1 -1
  62. package/dist/rpc-service/shared.cjs.map +1 -1
  63. package/dist/rpc-service/shared.d.cts +25 -3
  64. package/dist/rpc-service/shared.d.cts.map +1 -1
  65. package/dist/rpc-service/shared.d.mts +25 -3
  66. package/dist/rpc-service/shared.d.mts.map +1 -1
  67. package/dist/rpc-service/shared.mjs.map +1 -1
  68. package/package.json +2 -1
package/CHANGELOG.md CHANGED
@@ -7,14 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [27.0.0]
11
+
12
+ ### Added
13
+
14
+ - Add `NetworkController:rpcEndpointChainAvailable` messenger event ([#7166](https://github.com/MetaMask/core/pull/7166))
15
+ - This is a counterpart to the (new) `NetworkController:rpcEndpointChainUnavailable` and `NetworkController:rpcEndpointChainDegraded` events, but is published when a successful request to an endpoint within a chain of endpoints is made either initially or following a previously established degraded or unavailable status.
16
+
10
17
  ### Changed
11
18
 
19
+ - **BREAKING:** Split up and update payload data for `NetworkController:rpcEndpointDegraded` and `NetworkController:rpcEndpointUnavailable` ([#7166](https://github.com/MetaMask/core/pull/7166))
20
+ - `NetworkController:rpcEndpointDegraded` and `NetworkController:rpcEndpointUnavailable` still exist and retain the same behavior as before.
21
+ - New events are `NetworkController:rpcEndpointChainDegraded` and `NetworkController:rpcEndpointChainUnavailable`, and are designed to represent an entire chain of endpoints. They are also guaranteed to not be published multiple times in a row. In particular, `NetworkController:rpcEndpointChainUnavailable` is published only after trying all of the endpoints for a chain and when the underlying circuit for the last endpoint breaks, not as each primary's or failover's circuit breaks.
22
+ - The event payloads have been changed:
23
+ - For individual endpoint events (`NetworkController:rpcEndpointUnavailable`, `NetworkController:rpcEndpointDegraded`): `failoverEndpointUrl` has been removed, and `primaryEndpointUrl` has been added. In addition, `networkClientId` has been added to the payload.
24
+ - For chain-level events (`NetworkController:rpcEndpointChainUnavailable`, `NetworkController:rpcEndpointChainDegraded`, `NetworkController:rpcEndpointChainAvailable`): These include `chainId`, `networkClientId`, and event-specific fields (e.g., `error`, `endpointUrl`) but do not include `primaryEndpointUrl`. Consumers can derive endpoint information from the `networkClientId` using `NetworkController:getNetworkClientById` or `NetworkController:getNetworkConfigurationByNetworkClientId`.
25
+ - **BREAKING:** Rename and update payload data for `NetworkController:rpcEndpointRequestRetried` ([#7166](https://github.com/MetaMask/core/pull/7166))
26
+ - This event is now called `NetworkController:rpcEndpointRetried`.
27
+ - The event payload has been changed as well: `failoverEndpointUrl` has been removed, and `primaryEndpointUrl` has been added. In addition, `networkClientId` and `attempt` have been added to the payload.
28
+ - **BREAKING:** Update `AbstractRpcService`/`RpcServiceRequestable` to remove `{ isolated: true }` from the `onBreak` event data type ([#7166](https://github.com/MetaMask/core/pull/7166))
29
+ - This represented the error produced when `isolate` is called on a Cockatiel circuit breaker policy. This never happens for our service (we use `isolate` internally, but this error is suppressed and cannot trigger `onBreak`)
12
30
  - Move peer dependencies for controller and service packages to direct dependencies ([#7209](https://github.com/MetaMask/core/pull/7209))
13
31
  - The dependencies moved are:
14
32
  - `@metamask/error-reporting-service` (^3.0.0)
15
33
  - In clients, it is now possible for multiple versions of these packages to exist in the dependency tree.
16
34
  - For example, this scenario would be valid: a client relies on `@metamask/controller-a` 1.0.0 and `@metamask/controller-b` 1.0.0, and `@metamask/controller-b` depends on `@metamask/controller-a` 1.1.0.
17
35
  - Note, however, that the versions specified in the client's `package.json` always "win", and you are expected to keep them up to date so as not to break controller and service intercommunication.
36
+ - Automatically update network status metadata when chain-level RPC events are published ([#7186](https://github.com/MetaMask/core/pull/7186))
37
+ - `NetworkController` now automatically subscribes to `NetworkController:rpcEndpointChainUnavailable`, `NetworkController:rpcEndpointChainDegraded`, and `NetworkController:rpcEndpointChainAvailable` events and updates the corresponding network's status metadata in state when these events are published.
38
+ - This enables real-time network status updates without requiring explicit `lookupNetwork` calls, providing more accurate and timely network availability information.
18
39
 
19
40
  ## [26.0.0]
20
41
 
@@ -1024,7 +1045,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1024
1045
 
1025
1046
  All changes listed after this point were applied to this package following the monorepo conversion.
1026
1047
 
1027
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/network-controller@26.0.0...HEAD
1048
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/network-controller@27.0.0...HEAD
1049
+ [27.0.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@26.0.0...@metamask/network-controller@27.0.0
1028
1050
  [26.0.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@25.0.0...@metamask/network-controller@26.0.0
1029
1051
  [25.0.0]: https://github.com/MetaMask/core/compare/@metamask/network-controller@24.3.1...@metamask/network-controller@25.0.0
1030
1052
  [24.3.1]: https://github.com/MetaMask/core/compare/@metamask/network-controller@24.3.0...@metamask/network-controller@24.3.1
@@ -444,6 +444,21 @@ class NetworkController extends base_controller_1.BaseController {
444
444
  this.messenger.registerActionHandler(`${this.name}:addNetwork`, this.addNetwork.bind(this));
445
445
  this.messenger.registerActionHandler(`${this.name}:removeNetwork`, this.removeNetwork.bind(this));
446
446
  this.messenger.registerActionHandler(`${this.name}:updateNetwork`, this.updateNetwork.bind(this));
447
+ this.messenger.subscribe(`${this.name}:rpcEndpointChainUnavailable`, ({ networkClientId }) => {
448
+ __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateMetadataForNetwork).call(this, networkClientId, {
449
+ networkStatus: constants_1.NetworkStatus.Unavailable,
450
+ });
451
+ });
452
+ this.messenger.subscribe(`${this.name}:rpcEndpointChainDegraded`, ({ networkClientId }) => {
453
+ __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateMetadataForNetwork).call(this, networkClientId, {
454
+ networkStatus: constants_1.NetworkStatus.Degraded,
455
+ });
456
+ });
457
+ this.messenger.subscribe(`${this.name}:rpcEndpointChainAvailable`, ({ networkClientId }) => {
458
+ __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateMetadataForNetwork).call(this, networkClientId, {
459
+ networkStatus: constants_1.NetworkStatus.Available,
460
+ });
461
+ });
447
462
  }
448
463
  /**
449
464
  * Enables the RPC failover functionality. That is, if any RPC endpoints are
@@ -1144,7 +1159,10 @@ async function _NetworkController_determineNetworkMetadata(networkClientId) {
1144
1159
  */
1145
1160
  async function _NetworkController_lookupGivenNetwork(networkClientId) {
1146
1161
  const { networkStatus, isEIP1559Compatible } = await __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_determineNetworkMetadata).call(this, networkClientId);
1147
- __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateMetadataForNetwork).call(this, networkClientId, networkStatus, isEIP1559Compatible);
1162
+ __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateMetadataForNetwork).call(this, networkClientId, {
1163
+ networkStatus,
1164
+ isEIP1559Compatible,
1165
+ });
1148
1166
  }, _NetworkController_lookupSelectedNetwork =
1149
1167
  /**
1150
1168
  * Uses a request for the latest block to gather the following information on
@@ -1204,7 +1222,10 @@ async function _NetworkController_lookupSelectedNetwork() {
1204
1222
  throw error;
1205
1223
  }
1206
1224
  }
1207
- __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateMetadataForNetwork).call(this, this.state.selectedNetworkClientId, networkStatus, isEIP1559Compatible);
1225
+ __classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_updateMetadataForNetwork).call(this, this.state.selectedNetworkClientId, {
1226
+ networkStatus,
1227
+ isEIP1559Compatible,
1228
+ });
1208
1229
  if (isInfura) {
1209
1230
  if (networkStatus === constants_1.NetworkStatus.Available) {
1210
1231
  this.messenger.publish('NetworkController:infuraIsUnblocked');
@@ -1219,7 +1240,7 @@ async function _NetworkController_lookupSelectedNetwork() {
1219
1240
  // previously connected to an Infura network that was blocked
1220
1241
  this.messenger.publish('NetworkController:infuraIsUnblocked');
1221
1242
  }
1222
- }, _NetworkController_updateMetadataForNetwork = function _NetworkController_updateMetadataForNetwork(networkClientId, networkStatus, isEIP1559Compatible) {
1243
+ }, _NetworkController_updateMetadataForNetwork = function _NetworkController_updateMetadataForNetwork(networkClientId, metadata) {
1223
1244
  this.update((state) => {
1224
1245
  if (state.networksMetadata[networkClientId] === undefined) {
1225
1246
  state.networksMetadata[networkClientId] = {
@@ -1227,13 +1248,15 @@ async function _NetworkController_lookupSelectedNetwork() {
1227
1248
  EIPS: {},
1228
1249
  };
1229
1250
  }
1230
- const meta = state.networksMetadata[networkClientId];
1231
- meta.status = networkStatus;
1232
- if (isEIP1559Compatible === undefined) {
1233
- delete meta.EIPS[1559];
1234
- }
1235
- else {
1236
- meta.EIPS[1559] = isEIP1559Compatible;
1251
+ const newMetadata = state.networksMetadata[networkClientId];
1252
+ newMetadata.status = metadata.networkStatus;
1253
+ if ('isEIP1559Compatible' in metadata) {
1254
+ if (metadata.isEIP1559Compatible === undefined) {
1255
+ delete newMetadata.EIPS[1559];
1256
+ }
1257
+ else {
1258
+ newMetadata.EIPS[1559] = metadata.isEIP1559Compatible;
1259
+ }
1237
1260
  }
1238
1261
  });
1239
1262
  }, _NetworkController_getLatestBlock = function _NetworkController_getLatestBlock(networkClientId) {
@@ -1399,6 +1422,7 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1399
1422
  for (const addedRpcEndpoint of addedRpcEndpoints) {
1400
1423
  if (addedRpcEndpoint.type === RpcEndpointType.Infura) {
1401
1424
  autoManagedNetworkClientRegistry[types_1.NetworkClientType.Infura][addedRpcEndpoint.networkClientId] = (0, create_auto_managed_network_client_1.createAutoManagedNetworkClient)({
1425
+ networkClientId: addedRpcEndpoint.networkClientId,
1402
1426
  networkClientConfiguration: {
1403
1427
  type: types_1.NetworkClientType.Infura,
1404
1428
  chainId: networkFields.chainId,
@@ -1416,6 +1440,7 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1416
1440
  }
1417
1441
  else {
1418
1442
  autoManagedNetworkClientRegistry[types_1.NetworkClientType.Custom][addedRpcEndpoint.networkClientId] = (0, create_auto_managed_network_client_1.createAutoManagedNetworkClient)({
1443
+ networkClientId: addedRpcEndpoint.networkClientId,
1419
1444
  networkClientConfiguration: {
1420
1445
  type: types_1.NetworkClientType.Custom,
1421
1446
  chainId: networkFields.chainId,
@@ -1475,6 +1500,7 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1475
1500
  return [
1476
1501
  rpcEndpoint.networkClientId,
1477
1502
  (0, create_auto_managed_network_client_1.createAutoManagedNetworkClient)({
1503
+ networkClientId: rpcEndpoint.networkClientId,
1478
1504
  networkClientConfiguration: {
1479
1505
  type: types_1.NetworkClientType.Infura,
1480
1506
  network: infuraNetworkName,
@@ -1494,6 +1520,7 @@ async function _NetworkController_determineEIP1559Compatibility(networkClientId)
1494
1520
  return [
1495
1521
  rpcEndpoint.networkClientId,
1496
1522
  (0, create_auto_managed_network_client_1.createAutoManagedNetworkClient)({
1523
+ networkClientId: rpcEndpoint.networkClientId,
1497
1524
  networkClientConfiguration: {
1498
1525
  type: types_1.NetworkClientType.Custom,
1499
1526
  chainId: networkConfiguration.chainId,