Skip to content

feat: add degradedType and retriedError to degraded events#7988

Open
cryptodev-2s wants to merge 7 commits intomainfrom
add-degraded-type-to-events
Open

feat: add degradedType and retriedError to degraded events#7988
cryptodev-2s wants to merge 7 commits intomainfrom
add-degraded-type-to-events

Conversation

@cryptodev-2s
Copy link
Contributor

@cryptodev-2s cryptodev-2s commented Feb 18, 2026

Explanation

Degraded events fire when an RPC endpoint is slow or its retries are exhausted, but we can't distinguish between these two cases in Segment analytics.

This adds two new fields to degraded events:

  • degradedType ('slow_success' | 'retries_exhausted') — why degradation happened
  • retriedError ('request_not_initiated' | 'response_not_json' | 'non_success_http_status' | 'timed_out' | 'connection_reset' | undefined) — when retries are exhausted, what kind of error was retried

These fields flow through RpcServiceRpcServiceChaincreate-network-clientNetworkController event payloads (rpcEndpointChainDegraded and rpcEndpointDegraded).

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Changes and extends degraded-event payload contracts and adds new error-classification logic; main risk is downstream consumers depending on event shapes or relying on prior retry error heuristics.

Overview
Enriches NetworkController:rpcEndpointDegraded and NetworkController:rpcEndpointChainDegraded event payloads with a new type (slow success vs retries exhausted) plus an optional retryReason classification when retries are exhausted, and exports these new types (DegradedEventType, RetryReason).

Refactors RpcService retry error detection into exported helpers (isJsonParseError, plus new isHttpServerError/isTimeoutError/isConnectionResetError) and uses them to classify the final error when emitting degraded events; updates the degraded event test suite and changelog accordingly.

Written by Cursor Bugbot for commit 1821148. This will update automatically on new commits. Configure here.

@cryptodev-2s cryptodev-2s requested review from a team as code owners February 18, 2026 22:17
@cryptodev-2s cryptodev-2s changed the title feat: add degradedType and retriedError to degraded events feat: add degradedType and retriedError to degraded events Feb 18, 2026
@cryptodev-2s cryptodev-2s self-assigned this Feb 18, 2026
@cryptodev-2s cryptodev-2s requested a review from mcmire February 18, 2026 22:17
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

@cryptodev-2s
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-9848b08",
  "@metamask-previews/accounts-controller": "36.0.0-preview-9848b08",
  "@metamask-previews/address-book-controller": "7.0.1-preview-9848b08",
  "@metamask-previews/ai-controllers": "0.1.0-preview-9848b08",
  "@metamask-previews/analytics-controller": "1.0.0-preview-9848b08",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-9848b08",
  "@metamask-previews/announcement-controller": "8.0.0-preview-9848b08",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-9848b08",
  "@metamask-previews/approval-controller": "8.0.0-preview-9848b08",
  "@metamask-previews/assets-controller": "2.0.0-preview-9848b08",
  "@metamask-previews/assets-controllers": "99.4.0-preview-9848b08",
  "@metamask-previews/base-controller": "9.0.0-preview-9848b08",
  "@metamask-previews/bridge-controller": "67.0.0-preview-9848b08",
  "@metamask-previews/bridge-status-controller": "67.0.0-preview-9848b08",
  "@metamask-previews/build-utils": "3.0.4-preview-9848b08",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-9848b08",
  "@metamask-previews/claims-controller": "0.4.2-preview-9848b08",
  "@metamask-previews/client-controller": "1.0.0-preview-9848b08",
  "@metamask-previews/compliance-controller": "0.0.0-preview-9848b08",
  "@metamask-previews/composable-controller": "12.0.0-preview-9848b08",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-9848b08",
  "@metamask-previews/controller-utils": "11.18.0-preview-9848b08",
  "@metamask-previews/core-backend": "5.1.1-preview-9848b08",
  "@metamask-previews/delegation-controller": "2.0.1-preview-9848b08",
  "@metamask-previews/earn-controller": "11.1.0-preview-9848b08",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-9848b08",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-9848b08",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-9848b08",
  "@metamask-previews/ens-controller": "19.0.2-preview-9848b08",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-9848b08",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-9848b08",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-9848b08",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-9848b08",
  "@metamask-previews/foundryup": "1.0.1-preview-9848b08",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-9848b08",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-9848b08",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-9848b08",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-9848b08",
  "@metamask-previews/keyring-controller": "25.1.0-preview-9848b08",
  "@metamask-previews/logging-controller": "7.0.1-preview-9848b08",
  "@metamask-previews/message-manager": "14.1.0-preview-9848b08",
  "@metamask-previews/messenger": "0.3.0-preview-9848b08",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-9848b08",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-9848b08",
  "@metamask-previews/multichain-network-controller": "3.0.3-preview-9848b08",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-9848b08",
  "@metamask-previews/name-controller": "9.0.0-preview-9848b08",
  "@metamask-previews/network-controller": "29.0.0-preview-9848b08",
  "@metamask-previews/network-enablement-controller": "4.1.1-preview-9848b08",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-9848b08",
  "@metamask-previews/permission-controller": "12.2.0-preview-9848b08",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-9848b08",
  "@metamask-previews/perps-controller": "0.0.0-preview-9848b08",
  "@metamask-previews/phishing-controller": "16.3.0-preview-9848b08",
  "@metamask-previews/polling-controller": "16.0.2-preview-9848b08",
  "@metamask-previews/preferences-controller": "22.1.0-preview-9848b08",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-9848b08",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-9848b08",
  "@metamask-previews/ramps-controller": "8.1.0-preview-9848b08",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-9848b08",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-9848b08",
  "@metamask-previews/sample-controllers": "4.0.2-preview-9848b08",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-9848b08",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-9848b08",
  "@metamask-previews/shield-controller": "5.0.1-preview-9848b08",
  "@metamask-previews/signature-controller": "39.0.3-preview-9848b08",
  "@metamask-previews/storage-service": "1.0.0-preview-9848b08",
  "@metamask-previews/subscription-controller": "6.0.0-preview-9848b08",
  "@metamask-previews/transaction-controller": "62.17.0-preview-9848b08",
  "@metamask-previews/transaction-pay-controller": "15.1.0-preview-9848b08",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-9848b08"
}

Copy link
Contributor

@mcmire mcmire left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had some suggestions below. I made some comments on lines that I also suggested be moved, so hopefully that isn't too confusing.

…and fields

- Move DegradedType/RetriedError out of RpcService into create-network-client
  as DegradedEventType/RetryReason (keeps RpcService simple)
- Rename degradedType -> type, retriedError -> retryReason
- Rename values: request_not_initiated -> connection_failed,
  non_success_http_status -> non_successful_response
- Split isTimeoutOrResetError into isTimeoutError + isConnectionResetError
- Export isJsonParseError, isServerHttpError, isTimeoutError, isConnectionResetError
@cryptodev-2s cryptodev-2s requested a review from mcmire February 18, 2026 23:34
@cryptodev-2s
Copy link
Contributor Author

@metamaskbot publish-preview

@cryptodev-2s cryptodev-2s force-pushed the add-degraded-type-to-events branch from e3ea422 to 8f4342f Compare February 18, 2026 23:37
@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-f29efd1",
  "@metamask-previews/accounts-controller": "36.0.0-preview-f29efd1",
  "@metamask-previews/address-book-controller": "7.0.1-preview-f29efd1",
  "@metamask-previews/ai-controllers": "0.1.0-preview-f29efd1",
  "@metamask-previews/analytics-controller": "1.0.0-preview-f29efd1",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-f29efd1",
  "@metamask-previews/announcement-controller": "8.0.0-preview-f29efd1",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-f29efd1",
  "@metamask-previews/approval-controller": "8.0.0-preview-f29efd1",
  "@metamask-previews/assets-controller": "2.0.0-preview-f29efd1",
  "@metamask-previews/assets-controllers": "99.4.0-preview-f29efd1",
  "@metamask-previews/base-controller": "9.0.0-preview-f29efd1",
  "@metamask-previews/bridge-controller": "67.0.0-preview-f29efd1",
  "@metamask-previews/bridge-status-controller": "67.0.0-preview-f29efd1",
  "@metamask-previews/build-utils": "3.0.4-preview-f29efd1",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-f29efd1",
  "@metamask-previews/claims-controller": "0.4.2-preview-f29efd1",
  "@metamask-previews/client-controller": "1.0.0-preview-f29efd1",
  "@metamask-previews/compliance-controller": "0.0.0-preview-f29efd1",
  "@metamask-previews/composable-controller": "12.0.0-preview-f29efd1",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-f29efd1",
  "@metamask-previews/controller-utils": "11.18.0-preview-f29efd1",
  "@metamask-previews/core-backend": "5.1.1-preview-f29efd1",
  "@metamask-previews/delegation-controller": "2.0.1-preview-f29efd1",
  "@metamask-previews/earn-controller": "11.1.0-preview-f29efd1",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-f29efd1",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-f29efd1",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-f29efd1",
  "@metamask-previews/ens-controller": "19.0.2-preview-f29efd1",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-f29efd1",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-f29efd1",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-f29efd1",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-f29efd1",
  "@metamask-previews/foundryup": "1.0.1-preview-f29efd1",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-f29efd1",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-f29efd1",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-f29efd1",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-f29efd1",
  "@metamask-previews/keyring-controller": "25.1.0-preview-f29efd1",
  "@metamask-previews/logging-controller": "7.0.1-preview-f29efd1",
  "@metamask-previews/message-manager": "14.1.0-preview-f29efd1",
  "@metamask-previews/messenger": "0.3.0-preview-f29efd1",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-f29efd1",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-f29efd1",
  "@metamask-previews/multichain-network-controller": "3.0.3-preview-f29efd1",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-f29efd1",
  "@metamask-previews/name-controller": "9.0.0-preview-f29efd1",
  "@metamask-previews/network-controller": "29.0.0-preview-f29efd1",
  "@metamask-previews/network-enablement-controller": "4.1.1-preview-f29efd1",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-f29efd1",
  "@metamask-previews/permission-controller": "12.2.0-preview-f29efd1",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-f29efd1",
  "@metamask-previews/perps-controller": "0.0.0-preview-f29efd1",
  "@metamask-previews/phishing-controller": "16.3.0-preview-f29efd1",
  "@metamask-previews/polling-controller": "16.0.2-preview-f29efd1",
  "@metamask-previews/preferences-controller": "22.1.0-preview-f29efd1",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-f29efd1",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-f29efd1",
  "@metamask-previews/ramps-controller": "8.1.0-preview-f29efd1",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-f29efd1",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-f29efd1",
  "@metamask-previews/sample-controllers": "4.0.2-preview-f29efd1",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-f29efd1",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-f29efd1",
  "@metamask-previews/shield-controller": "5.0.1-preview-f29efd1",
  "@metamask-previews/signature-controller": "39.0.3-preview-f29efd1",
  "@metamask-previews/storage-service": "1.0.0-preview-f29efd1",
  "@metamask-previews/subscription-controller": "6.0.0-preview-f29efd1",
  "@metamask-previews/transaction-controller": "62.17.0-preview-f29efd1",
  "@metamask-previews/transaction-pay-controller": "15.1.0-preview-f29efd1",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-f29efd1"
}

@cryptodev-2s
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-1821148",
  "@metamask-previews/accounts-controller": "36.0.0-preview-1821148",
  "@metamask-previews/address-book-controller": "7.0.1-preview-1821148",
  "@metamask-previews/ai-controllers": "0.1.0-preview-1821148",
  "@metamask-previews/analytics-controller": "1.0.0-preview-1821148",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-1821148",
  "@metamask-previews/announcement-controller": "8.0.0-preview-1821148",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-1821148",
  "@metamask-previews/approval-controller": "8.0.0-preview-1821148",
  "@metamask-previews/assets-controller": "2.0.0-preview-1821148",
  "@metamask-previews/assets-controllers": "99.4.0-preview-1821148",
  "@metamask-previews/base-controller": "9.0.0-preview-1821148",
  "@metamask-previews/bridge-controller": "67.0.0-preview-1821148",
  "@metamask-previews/bridge-status-controller": "67.0.0-preview-1821148",
  "@metamask-previews/build-utils": "3.0.4-preview-1821148",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-1821148",
  "@metamask-previews/claims-controller": "0.4.2-preview-1821148",
  "@metamask-previews/client-controller": "1.0.0-preview-1821148",
  "@metamask-previews/compliance-controller": "0.0.0-preview-1821148",
  "@metamask-previews/composable-controller": "12.0.0-preview-1821148",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-1821148",
  "@metamask-previews/controller-utils": "11.18.0-preview-1821148",
  "@metamask-previews/core-backend": "5.1.1-preview-1821148",
  "@metamask-previews/delegation-controller": "2.0.1-preview-1821148",
  "@metamask-previews/earn-controller": "11.1.0-preview-1821148",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-1821148",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-1821148",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-1821148",
  "@metamask-previews/ens-controller": "19.0.2-preview-1821148",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-1821148",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-1821148",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-1821148",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-1821148",
  "@metamask-previews/foundryup": "1.0.1-preview-1821148",
  "@metamask-previews/gas-fee-controller": "26.0.2-preview-1821148",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-1821148",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-1821148",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-1821148",
  "@metamask-previews/keyring-controller": "25.1.0-preview-1821148",
  "@metamask-previews/logging-controller": "7.0.1-preview-1821148",
  "@metamask-previews/message-manager": "14.1.0-preview-1821148",
  "@metamask-previews/messenger": "0.3.0-preview-1821148",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-1821148",
  "@metamask-previews/multichain-api-middleware": "1.2.6-preview-1821148",
  "@metamask-previews/multichain-network-controller": "3.0.3-preview-1821148",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-1821148",
  "@metamask-previews/name-controller": "9.0.0-preview-1821148",
  "@metamask-previews/network-controller": "29.0.0-preview-1821148",
  "@metamask-previews/network-enablement-controller": "4.1.1-preview-1821148",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-1821148",
  "@metamask-previews/permission-controller": "12.2.0-preview-1821148",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-1821148",
  "@metamask-previews/perps-controller": "0.0.0-preview-1821148",
  "@metamask-previews/phishing-controller": "16.3.0-preview-1821148",
  "@metamask-previews/polling-controller": "16.0.2-preview-1821148",
  "@metamask-previews/preferences-controller": "22.1.0-preview-1821148",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-1821148",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-1821148",
  "@metamask-previews/ramps-controller": "8.1.0-preview-1821148",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-1821148",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-1821148",
  "@metamask-previews/sample-controllers": "4.0.2-preview-1821148",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-1821148",
  "@metamask-previews/selected-network-controller": "26.0.2-preview-1821148",
  "@metamask-previews/shield-controller": "5.0.1-preview-1821148",
  "@metamask-previews/signature-controller": "39.0.3-preview-1821148",
  "@metamask-previews/storage-service": "1.0.0-preview-1821148",
  "@metamask-previews/subscription-controller": "6.0.0-preview-1821148",
  "@metamask-previews/transaction-controller": "62.17.0-preview-1821148",
  "@metamask-previews/transaction-pay-controller": "15.1.0-preview-1821148",
  "@metamask-previews/user-operation-controller": "41.0.2-preview-1821148"
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments