Skip to content
Merged
12 changes: 11 additions & 1 deletion app/scripts/controller-init/network-controller-init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -287,19 +287,29 @@ export const NetworkControllerInit: ControllerInitFunction<

initMessenger.subscribe(
'NetworkController:rpcEndpointDegraded',
async ({ chainId, endpointUrl, error }) => {
async ({
chainId,
endpointUrl,
error,
rpcMethodName,
type,
retryReason,
}) => {
onRpcEndpointDegraded({
chainId,
endpointUrl,
error,
infuraProjectId,
retryReason,
rpcMethodName,
trackEvent: initMessenger.call.bind(
initMessenger,
'MetaMetricsController:trackEvent',
),
metaMetricsId: initMessenger.call(
'MetaMetricsController:getMetaMetricsId',
),
type,
});
},
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,10 @@ describe('onRpcEndpointDegraded', () => {
endpointUrl: 'https://example.com',
error: new HttpError(420),
infuraProjectId: 'the-infura-project-id',
rpcMethodName: 'eth_blockNumber',
trackEvent,
type: 'retries_exhausted',
retryReason: 'non_successful_http_status',
metaMetricsId:
'0x86bacb9b2bf9a7e8d2b147eadb95ac9aaa26842327cd24afc8bd4b3c1d136420',
});
Expand All @@ -213,7 +216,9 @@ describe('onRpcEndpointDegraded', () => {
endpointUrl: 'https://example.com',
error: undefined,
infuraProjectId: 'the-infura-project-id',
rpcMethodName: 'eth_blockNumber',
trackEvent,
type: 'slow_success',
metaMetricsId:
'0x86bacb9b2bf9a7e8d2b147eadb95ac9aaa26842327cd24afc8bd4b3c1d136420',
});
Expand All @@ -225,8 +230,10 @@ describe('onRpcEndpointDegraded', () => {
event: 'RPC Service Degraded',
properties: {
chain_id_caip: 'eip155:11155111',
type: 'slow_success',
rpc_domain: 'example.com',
rpc_endpoint_url: 'example.com',
rpc_method_name: 'eth_blockNumber',
},
});
/* eslint-enable @typescript-eslint/naming-convention */
Expand All @@ -242,7 +249,10 @@ describe('onRpcEndpointDegraded', () => {
endpointUrl: 'https://example.com',
error: new HttpError(420),
infuraProjectId: 'the-infura-project-id',
rpcMethodName: 'eth_blockNumber',
trackEvent,
type: 'retries_exhausted',
retryReason: 'non_successful_http_status',
metaMetricsId:
'0x86bacb9b2bf9a7e8d2b147eadb95ac9aaa26842327cd24afc8bd4b3c1d136420',
});
Expand All @@ -254,9 +264,12 @@ describe('onRpcEndpointDegraded', () => {
event: 'RPC Service Degraded',
properties: {
chain_id_caip: 'eip155:11155111',
type: 'retries_exhausted',
http_status: 420,
retry_reason: 'non_successful_http_status',
rpc_domain: 'example.com',
rpc_endpoint_url: 'example.com',
rpc_method_name: 'eth_blockNumber',
},
});
/* eslint-enable @typescript-eslint/naming-convention */
Expand All @@ -272,7 +285,9 @@ describe('onRpcEndpointDegraded', () => {
endpointUrl: 'https://custom-endpoint.com',
error: undefined,
infuraProjectId: 'the-infura-project-id',
rpcMethodName: 'eth_blockNumber',
trackEvent,
type: 'slow_success',
metaMetricsId:
'0x86bacb9b2bf9a7e8d2b147eadb95ac9aaa26842327cd24afc8bd4b3c1d136420',
});
Expand All @@ -284,8 +299,10 @@ describe('onRpcEndpointDegraded', () => {
event: 'RPC Service Degraded',
properties: {
chain_id_caip: 'eip155:11155111',
type: 'slow_success',
rpc_domain: 'custom',
rpc_endpoint_url: 'custom',
rpc_method_name: 'eth_blockNumber',
},
});
/* eslint-enable @typescript-eslint/naming-convention */
Expand All @@ -302,7 +319,9 @@ describe('onRpcEndpointDegraded', () => {
endpointUrl: 'https://example.com',
error: new Error('some error'),
infuraProjectId: 'the-infura-project-id',
rpcMethodName: 'eth_blockNumber',
trackEvent,
type: 'retries_exhausted',
metaMetricsId:
'0x86bacb9b2bf9a7e8d2b147eadb95ac9aaa26842327cd24afc8bd4b3c1d136420',
});
Expand Down
33 changes: 33 additions & 0 deletions app/scripts/lib/network-controller/messenger-action-handlers.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import log from 'loglevel';
import type {
DegradedEventType,
RetryReason,
} from '@metamask/network-controller';
import { type Hex, hexToNumber, isObject, isValidJson } from '@metamask/utils';
import {
MetaMetricsEventCategory,
Expand Down Expand Up @@ -69,30 +73,44 @@ export function onRpcEndpointUnavailable({
* a request to the RPC endpoint.
* @param args.infuraProjectId - Our Infura project ID.
* @param args.metaMetricsId - The MetaMetrics ID of the user.
* @param args.retryReason - The category of error that was retried (only
* present when `type` is `'retries_exhausted'`).
* @param args.rpcMethodName - The JSON-RPC method that was being executed.
* @param args.trackEvent - The function that will create the Segment event.
* @param args.type - Why the endpoint became degraded (`'slow_success'` or
* `'retries_exhausted'`).
*/
export function onRpcEndpointDegraded({
chainId,
endpointUrl,
error,
infuraProjectId,
metaMetricsId,
retryReason,
rpcMethodName,
trackEvent,
type,
}: {
chainId: Hex;
endpointUrl: string;
error: unknown;
infuraProjectId: string;
metaMetricsId: string | null | undefined;
retryReason?: RetryReason;
rpcMethodName: string;
trackEvent: MetaMetricsController['trackEvent'];
type: DegradedEventType;
}): void {
trackRpcEndpointEvent(MetaMetricsEventName.RpcServiceDegraded, {
chainId,
endpointUrl,
error,
infuraProjectId,
metaMetricsId,
retryReason,
rpcMethodName,
trackEvent,
type,
});
}

Expand All @@ -108,7 +126,13 @@ export function onRpcEndpointDegraded({
* a request to the RPC endpoint.
* @param args.infuraProjectId - Our Infura project ID.
* @param args.metaMetricsId - The MetaMetrics ID of the user.
* @param args.retryReason - The category of error that was retried (only
* present for degraded events when `type` is `'retries_exhausted'`).
* @param args.rpcMethodName - The JSON-RPC method that was being executed
* (only present for degraded events).
* @param args.trackEvent - The function that will create the Segment event.
* @param args.type - Why the endpoint became degraded (only present for
* degraded events).
*/
export function trackRpcEndpointEvent(
event: string,
Expand All @@ -117,14 +141,20 @@ export function trackRpcEndpointEvent(
endpointUrl,
error,
infuraProjectId,
retryReason,
rpcMethodName,
trackEvent,
type,
metaMetricsId,
}: {
chainId: Hex;
endpointUrl: string;
error: unknown;
infuraProjectId: string;
retryReason?: RetryReason;
rpcMethodName?: string;
trackEvent: MetaMetricsController['trackEvent'];
type?: DegradedEventType;
metaMetricsId: string | null | undefined;
},
): void {
Expand All @@ -147,6 +177,9 @@ export function trackRpcEndpointEvent(
chain_id_caip: `eip155:${hexToNumber(chainId)}`,
rpc_domain: sanitizedUrl,
rpc_endpoint_url: sanitizedUrl, // @deprecated - Will be removed in a future release.
...(rpcMethodName ? { rpc_method_name: rpcMethodName } : {}),
...(type ? { type } : {}),
...(retryReason ? { retry_reason: retryReason } : {}),
...(isObject(error) &&
'httpStatus' in error &&
isValidJson(error.httpStatus)
Expand Down
93 changes: 90 additions & 3 deletions lavamoat/browserify/beta/policy.json
Original file line number Diff line number Diff line change
Expand Up @@ -1724,7 +1724,7 @@
"packages": {
"@metamask/base-controller": true,
"@metamask/keyring-api": true,
"@metamask/network-controller": true,
"@metamask/bridge-controller>@metamask/network-controller": true,
"@metamask/superstruct": true,
"@metamask/utils": true,
"lodash": true
Expand All @@ -1750,7 +1750,7 @@
"packages": {
"@metamask/base-controller": true,
"@metamask/keyring-api": true,
"@metamask/network-controller": true,
"@metamask/network-enablement-controller>@metamask/network-controller": true,
"@metamask/superstruct": true,
"@metamask/utils": true,
"lodash": true
Expand Down Expand Up @@ -1807,6 +1807,35 @@
"uuid": true
}
},
"@metamask/bridge-controller>@metamask/network-controller": {
"globals": {
"Intl.NumberFormat": true,
"URL": true,
"setTimeout": true
},
"packages": {
"@metamask/base-controller": true,
"@metamask/connectivity-controller": true,
"@metamask/controller-utils": true,
"@metamask/network-controller>@metamask/eth-block-tracker": true,
"@metamask/network-controller>@metamask/eth-json-rpc-infura": true,
"@metamask/eth-json-rpc-middleware": true,
"@metamask/eth-json-rpc-provider": true,
"@metamask/controller-utils>@metamask/eth-query": true,
"@metamask/json-rpc-engine": true,
"@metamask/rpc-errors": true,
"@metamask/network-controller>@metamask/swappable-obj-proxy": true,
"@metamask/utils": true,
"cockatiel": true,
"addons-linter>deepmerge": true,
"eslint>fast-deep-equal": true,
"immer": true,
"lodash": true,
"reselect": true,
"uri-js": true,
"uuid": true
}
},
"@metamask/bridge-status-controller>@metamask/bridge-controller>@metamask/multichain-network-controller>@metamask/network-controller": {
"globals": {
"Intl.NumberFormat": true,
Expand Down Expand Up @@ -1836,6 +1865,64 @@
"uuid": true
}
},
"@metamask/network-enablement-controller>@metamask/network-controller": {
"globals": {
"Intl.NumberFormat": true,
"URL": true,
"setTimeout": true
},
"packages": {
"@metamask/base-controller": true,
"@metamask/connectivity-controller": true,
"@metamask/controller-utils": true,
"@metamask/network-controller>@metamask/eth-block-tracker": true,
"@metamask/network-controller>@metamask/eth-json-rpc-infura": true,
"@metamask/eth-json-rpc-middleware": true,
"@metamask/eth-json-rpc-provider": true,
"@metamask/controller-utils>@metamask/eth-query": true,
"@metamask/json-rpc-engine": true,
"@metamask/rpc-errors": true,
"@metamask/network-controller>@metamask/swappable-obj-proxy": true,
"@metamask/utils": true,
"cockatiel": true,
"addons-linter>deepmerge": true,
"eslint>fast-deep-equal": true,
"immer": true,
"lodash": true,
"reselect": true,
"uri-js": true,
"uuid": true
}
},
"@metamask/transaction-controller>@metamask/network-controller": {
"globals": {
"Intl.NumberFormat": true,
"URL": true,
"setTimeout": true
},
"packages": {
"@metamask/base-controller": true,
"@metamask/connectivity-controller": true,
"@metamask/controller-utils": true,
"@metamask/network-controller>@metamask/eth-block-tracker": true,
"@metamask/network-controller>@metamask/eth-json-rpc-infura": true,
"@metamask/eth-json-rpc-middleware": true,
"@metamask/eth-json-rpc-provider": true,
"@metamask/controller-utils>@metamask/eth-query": true,
"@metamask/json-rpc-engine": true,
"@metamask/rpc-errors": true,
"@metamask/network-controller>@metamask/swappable-obj-proxy": true,
"@metamask/utils": true,
"cockatiel": true,
"addons-linter>deepmerge": true,
"eslint>fast-deep-equal": true,
"immer": true,
"lodash": true,
"reselect": true,
"uri-js": true,
"uuid": true
}
},
"@metamask/network-enablement-controller": {
"packages": {
"@metamask/base-controller": true,
Expand Down Expand Up @@ -2596,7 +2683,7 @@
"@metamask/controller-utils>@metamask/eth-query": true,
"@metamask/transaction-controller>@metamask/gas-fee-controller": true,
"@metamask/metamask-eth-abis": true,
"@metamask/network-controller": true,
"@metamask/transaction-controller>@metamask/network-controller": true,
"@metamask/transaction-controller>@metamask/nonce-tracker": true,
"@metamask/rpc-errors": true,
"@metamask/utils": true,
Expand Down
Loading
Loading