@metamask-previews/network-controller 33.0.0-preview-ba933fc1b → 33.0.0-preview-14cbc2873
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 +12 -0
- package/dist/NetworkController.cjs +59 -3
- package/dist/NetworkController.cjs.map +1 -1
- package/dist/NetworkController.d.cts +12 -1
- package/dist/NetworkController.d.cts.map +1 -1
- package/dist/NetworkController.d.mts +12 -1
- package/dist/NetworkController.d.mts.map +1 -1
- package/dist/NetworkController.mjs +59 -3
- package/dist/NetworkController.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/rpc-service-events.cjs +87 -0
- package/dist/rpc-service-events.cjs.map +1 -0
- package/dist/rpc-service-events.d.cts +85 -0
- package/dist/rpc-service-events.d.cts.map +1 -0
- package/dist/rpc-service-events.d.mts +85 -0
- package/dist/rpc-service-events.d.mts.map +1 -0
- package/dist/rpc-service-events.mjs +81 -0
- package/dist/rpc-service-events.mjs.map +1 -0
- package/package.json +2 -1
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 `analytics` constructor option that makes `NetworkController` emit `RPC Service Unavailable` and `RPC Service Degraded` analytics events via the `AnalyticsController:trackEvent` action when an RPC endpoint becomes unavailable or degraded ([#9270](https://github.com/MetaMask/core/pull/9270))
|
|
13
|
+
- The option takes `isRpcEndpointUrlPublic` (decides whether an endpoint URL is safe to report verbatim or as `'custom'`) and `rpcServiceEventsSampleRate` (the proportion of events to emit, between `0` and `1`).
|
|
14
|
+
- No analytics are emitted when the option is omitted.
|
|
15
|
+
- Adds the `NetworkControllerAnalyticsOptions` and `RpcServiceEventName` types.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- The `NetworkControllerMessenger` now allows the `AnalyticsController:getState` and `AnalyticsController:trackEvent` actions ([#9270](https://github.com/MetaMask/core/pull/9270))
|
|
20
|
+
- Consumers that pass the `analytics` option must delegate these actions to the network controller messenger.
|
|
21
|
+
|
|
10
22
|
## [33.0.0]
|
|
11
23
|
|
|
12
24
|
### Added
|
|
@@ -36,12 +36,13 @@ 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_failoverUrls, _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_determineNetworkMetadata, _NetworkController_lookupGivenNetwork, _NetworkController_lookupSelectedNetwork, _NetworkController_updateMetadataForNetwork, _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_failoverUrls, _NetworkController_previouslySelectedNetworkClientId, _NetworkController_providerProxy, _NetworkController_blockTrackerProxy, _NetworkController_autoManagedNetworkClientRegistry, _NetworkController_autoManagedNetworkClient, _NetworkController_log, _NetworkController_getRpcServiceOptions, _NetworkController_getBlockTrackerOptions, _NetworkController_analytics, _NetworkController_networkConfigurationsByNetworkClientId, _NetworkController_isRpcFailoverEnabled, _NetworkController_trackRpcServiceEvent, _NetworkController_updateRpcFailoverEnabled, _NetworkController_refreshNetwork, _NetworkController_determineNetworkMetadata, _NetworkController_lookupGivenNetwork, _NetworkController_lookupSelectedNetwork, _NetworkController_updateMetadataForNetwork, _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");
|
|
43
43
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
44
44
|
const eth_query_1 = __importDefault(require("@metamask/eth-query"));
|
|
45
|
+
const remote_feature_flag_controller_1 = require("@metamask/remote-feature-flag-controller");
|
|
45
46
|
const rpc_errors_1 = require("@metamask/rpc-errors");
|
|
46
47
|
const swappable_obj_proxy_1 = require("@metamask/swappable-obj-proxy");
|
|
47
48
|
const utils_1 = require("@metamask/utils");
|
|
@@ -54,6 +55,8 @@ const uuid_1 = require("uuid");
|
|
|
54
55
|
const constants_1 = require("./constants.cjs");
|
|
55
56
|
const create_auto_managed_network_client_1 = require("./create-auto-managed-network-client.cjs");
|
|
56
57
|
const logger_1 = require("./logger.cjs");
|
|
58
|
+
const rpc_service_events_1 = require("./rpc-service-events.cjs");
|
|
59
|
+
const rpc_service_1 = require("./rpc-service/rpc-service.cjs");
|
|
57
60
|
const selectors_1 = require("./selectors.cjs");
|
|
58
61
|
const types_1 = require("./types.cjs");
|
|
59
62
|
const debugLog = (0, logger_1.createModuleLogger)(logger_1.projectLogger, 'NetworkController');
|
|
@@ -393,7 +396,7 @@ class NetworkController extends base_controller_1.BaseController {
|
|
|
393
396
|
* @param options - The options; see {@link NetworkControllerOptions}.
|
|
394
397
|
*/
|
|
395
398
|
constructor(options) {
|
|
396
|
-
const { messenger, state, infuraProjectId, failoverUrls, log, getRpcServiceOptions, getBlockTrackerOptions, } = options;
|
|
399
|
+
const { messenger, state, infuraProjectId, failoverUrls, log, getRpcServiceOptions, getBlockTrackerOptions, analytics, } = options;
|
|
397
400
|
const initialState = {
|
|
398
401
|
...getDefaultNetworkControllerState(),
|
|
399
402
|
...state,
|
|
@@ -440,6 +443,7 @@ class NetworkController extends base_controller_1.BaseController {
|
|
|
440
443
|
_NetworkController_log.set(this, void 0);
|
|
441
444
|
_NetworkController_getRpcServiceOptions.set(this, void 0);
|
|
442
445
|
_NetworkController_getBlockTrackerOptions.set(this, void 0);
|
|
446
|
+
_NetworkController_analytics.set(this, void 0);
|
|
443
447
|
_NetworkController_networkConfigurationsByNetworkClientId.set(this, void 0);
|
|
444
448
|
_NetworkController_isRpcFailoverEnabled.set(this, false);
|
|
445
449
|
__classPrivateFieldSet(this, _NetworkController_infuraProjectId, infuraProjectId, "f");
|
|
@@ -447,6 +451,7 @@ class NetworkController extends base_controller_1.BaseController {
|
|
|
447
451
|
__classPrivateFieldSet(this, _NetworkController_log, log, "f");
|
|
448
452
|
__classPrivateFieldSet(this, _NetworkController_getRpcServiceOptions, getRpcServiceOptions, "f");
|
|
449
453
|
__classPrivateFieldSet(this, _NetworkController_getBlockTrackerOptions, getBlockTrackerOptions, "f");
|
|
454
|
+
__classPrivateFieldSet(this, _NetworkController_analytics, analytics, "f");
|
|
450
455
|
__classPrivateFieldSet(this, _NetworkController_previouslySelectedNetworkClientId, this.state.selectedNetworkClientId, "f");
|
|
451
456
|
__classPrivateFieldSet(this, _NetworkController_networkConfigurationsByNetworkClientId, buildNetworkConfigurationsByNetworkClientId(this.state.networkConfigurationsByChainId), "f");
|
|
452
457
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
@@ -465,6 +470,28 @@ class NetworkController extends base_controller_1.BaseController {
|
|
|
465
470
|
networkStatus: constants_1.NetworkStatus.Available,
|
|
466
471
|
});
|
|
467
472
|
});
|
|
473
|
+
if (__classPrivateFieldGet(this, _NetworkController_analytics, "f")) {
|
|
474
|
+
const analyticsOptions = __classPrivateFieldGet(this, _NetworkController_analytics, "f");
|
|
475
|
+
this.messenger.subscribe(`${this.name}:rpcEndpointUnavailable`, ({ chainId, endpointUrl, error }) => {
|
|
476
|
+
__classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_trackRpcServiceEvent).call(this, analyticsOptions, 'RPC Service Unavailable', {
|
|
477
|
+
chainId,
|
|
478
|
+
endpointUrl,
|
|
479
|
+
error,
|
|
480
|
+
});
|
|
481
|
+
});
|
|
482
|
+
this.messenger.subscribe(`${this.name}:rpcEndpointDegraded`, ({ chainId, duration, endpointUrl, error, retryReason, rpcMethodName, traceId, type, }) => {
|
|
483
|
+
__classPrivateFieldGet(this, _NetworkController_instances, "m", _NetworkController_trackRpcServiceEvent).call(this, analyticsOptions, 'RPC Service Degraded', {
|
|
484
|
+
chainId,
|
|
485
|
+
duration,
|
|
486
|
+
endpointUrl,
|
|
487
|
+
error,
|
|
488
|
+
retryReason,
|
|
489
|
+
rpcMethodName,
|
|
490
|
+
traceId,
|
|
491
|
+
type,
|
|
492
|
+
});
|
|
493
|
+
});
|
|
494
|
+
}
|
|
468
495
|
this.messenger.subscribe(
|
|
469
496
|
// eslint-disable-next-line no-restricted-syntax
|
|
470
497
|
'RemoteFeatureFlagController:stateChange', (isRpcFailoverEnabled) => {
|
|
@@ -1063,7 +1090,36 @@ class NetworkController extends base_controller_1.BaseController {
|
|
|
1063
1090
|
}
|
|
1064
1091
|
}
|
|
1065
1092
|
exports.NetworkController = NetworkController;
|
|
1066
|
-
_NetworkController_ethQuery = new WeakMap(), _NetworkController_infuraProjectId = new WeakMap(), _NetworkController_failoverUrls = 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(),
|
|
1093
|
+
_NetworkController_ethQuery = new WeakMap(), _NetworkController_infuraProjectId = new WeakMap(), _NetworkController_failoverUrls = 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_analytics = new WeakMap(), _NetworkController_networkConfigurationsByNetworkClientId = new WeakMap(), _NetworkController_isRpcFailoverEnabled = new WeakMap(), _NetworkController_instances = new WeakSet(), _NetworkController_trackRpcServiceEvent = function _NetworkController_trackRpcServiceEvent(analytics, name, payload) {
|
|
1094
|
+
try {
|
|
1095
|
+
if ((0, rpc_service_1.isConnectionError)(payload.error)) {
|
|
1096
|
+
return;
|
|
1097
|
+
}
|
|
1098
|
+
const { analyticsId } = this.messenger.call('AnalyticsController:getState');
|
|
1099
|
+
if (!analyticsId) {
|
|
1100
|
+
return;
|
|
1101
|
+
}
|
|
1102
|
+
if ((0, remote_feature_flag_controller_1.generateDeterministicRandomNumber)(analyticsId) >=
|
|
1103
|
+
analytics.rpcServiceEventsSampleRate) {
|
|
1104
|
+
return;
|
|
1105
|
+
}
|
|
1106
|
+
const properties = (0, rpc_service_events_1.buildRpcServiceEventProperties)({
|
|
1107
|
+
chainId: payload.chainId,
|
|
1108
|
+
endpointUrl: payload.endpointUrl,
|
|
1109
|
+
error: payload.error,
|
|
1110
|
+
isRpcEndpointUrlPublic: analytics.isRpcEndpointUrlPublic,
|
|
1111
|
+
duration: payload.duration,
|
|
1112
|
+
retryReason: payload.retryReason,
|
|
1113
|
+
rpcMethodName: payload.rpcMethodName,
|
|
1114
|
+
traceId: payload.traceId,
|
|
1115
|
+
type: payload.type,
|
|
1116
|
+
});
|
|
1117
|
+
this.messenger.call('AnalyticsController:trackEvent', (0, rpc_service_events_1.toAnalyticsTrackingEvent)(name, properties));
|
|
1118
|
+
}
|
|
1119
|
+
catch (error) {
|
|
1120
|
+
this.messenger.captureException?.(error);
|
|
1121
|
+
}
|
|
1122
|
+
}, _NetworkController_updateRpcFailoverEnabled = function _NetworkController_updateRpcFailoverEnabled(newIsRpcFailoverEnabled) {
|
|
1067
1123
|
if (__classPrivateFieldGet(this, _NetworkController_isRpcFailoverEnabled, "f") === newIsRpcFailoverEnabled) {
|
|
1068
1124
|
return;
|
|
1069
1125
|
}
|