Skip to content

Conversation

@montelaidev
Copy link
Contributor

@montelaidev montelaidev commented Dec 15, 2025

Explanation

This PR introduces a new KeyringController error that will properly propagate errors from the keyring instances.

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

Introduces a unified error type and updates error handling across the keyring controller.

  • Add KeyringControllerError with code/context/cause support and JSON/string serialization (src/errors.ts), export via src/index.ts
  • Rename enum to KeyringControllerErrorMessage and refactor KeyringController to throw KeyringControllerError (wrapping keyring errors) instead of generic errors; normalize many error sites and messages
  • New tests covering error features, wrapping (incl. hardware wallet errors), and edge cases; update existing tests to expect KeyringControllerErrorMessage
  • Add mock hardware keyring for testing; minor test improvements (deadlock prevention pattern)
  • Changelog updated to note new error type

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

@montelaidev montelaidev requested review from a team as code owners December 15, 2025 15:14
@montelaidev
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

github-actions bot commented Jan 6, 2026

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.0.0-preview-6bed60a6",
  "@metamask-previews/accounts-controller": "35.0.0-preview-6bed60a6",
  "@metamask-previews/address-book-controller": "7.0.1-preview-6bed60a6",
  "@metamask-previews/analytics-controller": "0.0.0-preview-6bed60a6",
  "@metamask-previews/announcement-controller": "8.0.0-preview-6bed60a6",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-6bed60a6",
  "@metamask-previews/approval-controller": "8.0.0-preview-6bed60a6",
  "@metamask-previews/assets-controllers": "94.0.0-preview-6bed60a6",
  "@metamask-previews/base-controller": "9.0.0-preview-6bed60a6",
  "@metamask-previews/bridge-controller": "64.1.0-preview-6bed60a6",
  "@metamask-previews/bridge-status-controller": "64.1.0-preview-6bed60a6",
  "@metamask-previews/build-utils": "3.0.4-preview-6bed60a6",
  "@metamask-previews/chain-agnostic-permission": "1.3.0-preview-6bed60a6",
  "@metamask-previews/claims-controller": "0.2.0-preview-6bed60a6",
  "@metamask-previews/composable-controller": "12.0.0-preview-6bed60a6",
  "@metamask-previews/controller-utils": "11.16.0-preview-6bed60a6",
  "@metamask-previews/core-backend": "5.0.0-preview-6bed60a6",
  "@metamask-previews/delegation-controller": "2.0.0-preview-6bed60a6",
  "@metamask-previews/earn-controller": "11.0.0-preview-6bed60a6",
  "@metamask-previews/eip-5792-middleware": "2.0.0-preview-6bed60a6",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-6bed60a6",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-6bed60a6",
  "@metamask-previews/ens-controller": "19.0.0-preview-6bed60a6",
  "@metamask-previews/error-reporting-service": "3.0.0-preview-6bed60a6",
  "@metamask-previews/eth-block-tracker": "15.0.0-preview-6bed60a6",
  "@metamask-previews/eth-json-rpc-middleware": "22.0.1-preview-6bed60a6",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-6bed60a6",
  "@metamask-previews/foundryup": "1.0.1-preview-6bed60a6",
  "@metamask-previews/gas-fee-controller": "26.0.0-preview-6bed60a6",
  "@metamask-previews/gator-permissions-controller": "0.8.0-preview-6bed60a6",
  "@metamask-previews/json-rpc-engine": "10.2.0-preview-6bed60a6",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-6bed60a6",
  "@metamask-previews/keyring-controller": "25.0.0-preview-6bed60a6",
  "@metamask-previews/logging-controller": "7.0.1-preview-6bed60a6",
  "@metamask-previews/message-manager": "14.1.0-preview-6bed60a6",
  "@metamask-previews/messenger": "0.3.0-preview-6bed60a6",
  "@metamask-previews/multichain-account-service": "4.0.1-preview-6bed60a6",
  "@metamask-previews/multichain-api-middleware": "1.2.5-preview-6bed60a6",
  "@metamask-previews/multichain-network-controller": "3.0.0-preview-6bed60a6",
  "@metamask-previews/multichain-transactions-controller": "7.0.0-preview-6bed60a6",
  "@metamask-previews/name-controller": "9.0.0-preview-6bed60a6",
  "@metamask-previews/network-controller": "27.0.0-preview-6bed60a6",
  "@metamask-previews/network-enablement-controller": "4.0.0-preview-6bed60a6",
  "@metamask-previews/notification-services-controller": "21.0.0-preview-6bed60a6",
  "@metamask-previews/permission-controller": "12.1.1-preview-6bed60a6",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-6bed60a6",
  "@metamask-previews/phishing-controller": "16.1.0-preview-6bed60a6",
  "@metamask-previews/polling-controller": "16.0.0-preview-6bed60a6",
  "@metamask-previews/preferences-controller": "22.0.0-preview-6bed60a6",
  "@metamask-previews/profile-metrics-controller": "1.1.0-preview-6bed60a6",
  "@metamask-previews/profile-sync-controller": "27.0.0-preview-6bed60a6",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-6bed60a6",
  "@metamask-previews/remote-feature-flag-controller": "3.0.0-preview-6bed60a6",
  "@metamask-previews/sample-controllers": "4.0.0-preview-6bed60a6",
  "@metamask-previews/seedless-onboarding-controller": "7.1.0-preview-6bed60a6",
  "@metamask-previews/selected-network-controller": "26.0.0-preview-6bed60a6",
  "@metamask-previews/shield-controller": "4.0.0-preview-6bed60a6",
  "@metamask-previews/signature-controller": "38.0.0-preview-6bed60a6",
  "@metamask-previews/storage-service": "0.0.1-preview-6bed60a6",
  "@metamask-previews/subscription-controller": "5.4.0-preview-6bed60a6",
  "@metamask-previews/token-search-discovery-controller": "4.0.0-preview-6bed60a6",
  "@metamask-previews/transaction-controller": "62.6.0-preview-6bed60a6",
  "@metamask-previews/transaction-pay-controller": "10.5.0-preview-6bed60a6",
  "@metamask-previews/user-operation-controller": "41.0.0-preview-6bed60a6"
}

* Additional context data associated with the error.
* Useful for debugging and error reporting.
*/
data?: Record<string, unknown>;
Copy link
Contributor

Choose a reason for hiding this comment

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

WDYT about using context instead?

Suggested change
data?: Record<string, unknown>;
context?: Record<string, unknown>;

@montelaidev montelaidev enabled auto-merge January 8, 2026 01:59
Co-authored-by: Charly Chevalier <charly.chevalier@consensys.net>
Copy link
Contributor

@ccharly ccharly left a comment

Choose a reason for hiding this comment

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

LGTM

@montelaidev montelaidev added this pull request to the merge queue Jan 8, 2026
Merged via the queue into main with commit 28ec035 Jan 8, 2026
286 checks passed
@montelaidev montelaidev deleted the feat/keyringcontroller-errors branch January 8, 2026 10:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants