Skip to content

feat(snap-account-service): forward selected account group accounts#8763

Merged
ccharly merged 21 commits into
mainfrom
cc/feat/snap-account-service-selected-account-group
May 11, 2026
Merged

feat(snap-account-service): forward selected account group accounts#8763
ccharly merged 21 commits into
mainfrom
cc/feat/snap-account-service-selected-account-group

Conversation

@ccharly
Copy link
Copy Markdown
Contributor

@ccharly ccharly commented May 11, 2026

Explanation

We used to have have this logic on the clients directly, but now it's the responsibility of this service to forward the selected accounts to the Snap keyring (and in the future, to each Snap keyring v2 instances).

References

N/A

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
Moderate risk because it adds event-driven behavior that forwards selected accounts into the Snap keyring on group changes/unlock, which could affect account selection state and error handling in keyring interactions.

Overview
Moves selected-account forwarding into @metamask/snap-account-service: it now subscribes to AccountTreeController:selectedAccountGroupChange and KeyringController:unlock, looks up the selected AccountGroupObject, and calls snapKeyring.setSelectedAccounts() for that group.

Adds local mirrored AccountTreeController action/event types (src/types.ts) and updates build refs to avoid a TS project-reference cycle, plus adds dependencies and tests covering no-op and error paths; changelog and dependency graph are updated accordingly.

Reviewed by Cursor Bugbot for commit cb54cae. Bugbot is set up for automated code reviews on this repo. Configure here.

@ccharly ccharly requested review from a team as code owners May 11, 2026 13:12
@ccharly
Copy link
Copy Markdown
Contributor Author

ccharly commented May 11, 2026

@metamaskbot publish-preview

@ccharly
Copy link
Copy Markdown
Contributor Author

ccharly commented May 11, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.3.0-preview-2c98bc214
@metamask-previews/accounts-controller@38.0.0-preview-2c98bc214
@metamask-previews/address-book-controller@7.1.1-preview-2c98bc214
@metamask-previews/ai-controllers@0.6.3-preview-2c98bc214
@metamask-previews/analytics-controller@1.0.1-preview-2c98bc214
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-2c98bc214
@metamask-previews/announcement-controller@8.1.0-preview-2c98bc214
@metamask-previews/app-metadata-controller@2.0.1-preview-2c98bc214
@metamask-previews/approval-controller@9.0.1-preview-2c98bc214
@metamask-previews/assets-controller@7.0.0-preview-2c98bc214
@metamask-previews/assets-controllers@106.0.0-preview-2c98bc214
@metamask-previews/authenticated-user-storage@1.0.0-preview-2c98bc214
@metamask-previews/base-controller@9.1.0-preview-2c98bc214
@metamask-previews/base-data-service@0.1.1-preview-2c98bc214
@metamask-previews/bridge-controller@72.0.1-preview-2c98bc214
@metamask-previews/bridge-status-controller@71.1.1-preview-2c98bc214
@metamask-previews/build-utils@3.0.4-preview-2c98bc214
@metamask-previews/chain-agnostic-permission@1.6.0-preview-2c98bc214
@metamask-previews/chomp-api-service@3.0.0-preview-2c98bc214
@metamask-previews/claims-controller@0.5.0-preview-2c98bc214
@metamask-previews/client-controller@1.0.1-preview-2c98bc214
@metamask-previews/compliance-controller@2.0.0-preview-2c98bc214
@metamask-previews/composable-controller@12.0.1-preview-2c98bc214
@metamask-previews/config-registry-controller@0.3.0-preview-2c98bc214
@metamask-previews/connectivity-controller@0.2.0-preview-2c98bc214
@metamask-previews/controller-utils@11.20.0-preview-2c98bc214
@metamask-previews/core-backend@6.2.1-preview-2c98bc214
@metamask-previews/delegation-controller@3.0.0-preview-2c98bc214
@metamask-previews/earn-controller@12.1.0-preview-2c98bc214
@metamask-previews/eip-5792-middleware@3.0.3-preview-2c98bc214
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-2c98bc214
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-2c98bc214
@metamask-previews/ens-controller@19.1.1-preview-2c98bc214
@metamask-previews/eth-block-tracker@15.0.1-preview-2c98bc214
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-2c98bc214
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-2c98bc214
@metamask-previews/foundryup@1.0.1-preview-2c98bc214
@metamask-previews/gas-fee-controller@26.2.0-preview-2c98bc214
@metamask-previews/gator-permissions-controller@4.1.0-preview-2c98bc214
@metamask-previews/geolocation-controller@0.1.2-preview-2c98bc214
@metamask-previews/json-rpc-engine@10.5.0-preview-2c98bc214
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-2c98bc214
@metamask-previews/keyring-controller@25.5.0-preview-2c98bc214
@metamask-previews/logging-controller@8.0.1-preview-2c98bc214
@metamask-previews/message-manager@14.1.1-preview-2c98bc214
@metamask-previews/messenger@1.2.0-preview-2c98bc214
@metamask-previews/messenger-cli@0.2.0-preview-2c98bc214
@metamask-previews/money-account-balance-service@1.0.0-preview-2c98bc214
@metamask-previews/money-account-controller@0.3.0-preview-2c98bc214
@metamask-previews/money-account-upgrade-controller@1.3.1-preview-2c98bc214
@metamask-previews/multichain-account-service@9.0.0-preview-2c98bc214
@metamask-previews/multichain-api-middleware@3.1.0-preview-2c98bc214
@metamask-previews/multichain-network-controller@3.1.0-preview-2c98bc214
@metamask-previews/multichain-transactions-controller@7.1.0-preview-2c98bc214
@metamask-previews/name-controller@9.1.1-preview-2c98bc214
@metamask-previews/network-controller@30.1.0-preview-2c98bc214
@metamask-previews/network-enablement-controller@5.1.0-preview-2c98bc214
@metamask-previews/notification-services-controller@23.1.0-preview-2c98bc214
@metamask-previews/passkey-controller@2.0.1-preview-2c98bc214
@metamask-previews/permission-controller@13.1.0-preview-2c98bc214
@metamask-previews/permission-log-controller@5.1.0-preview-2c98bc214
@metamask-previews/perps-controller@6.0.0-preview-2c98bc214
@metamask-previews/phishing-controller@17.1.1-preview-2c98bc214
@metamask-previews/polling-controller@16.0.4-preview-2c98bc214
@metamask-previews/preferences-controller@23.1.0-preview-2c98bc214
@metamask-previews/profile-metrics-controller@3.1.3-preview-2c98bc214
@metamask-previews/profile-sync-controller@28.0.2-preview-2c98bc214
@metamask-previews/ramps-controller@13.3.0-preview-2c98bc214
@metamask-previews/rate-limit-controller@7.0.1-preview-2c98bc214
@metamask-previews/react-data-query@0.2.0-preview-2c98bc214
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-2c98bc214
@metamask-previews/sample-controllers@4.0.4-preview-2c98bc214
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-2c98bc214
@metamask-previews/selected-network-controller@26.1.1-preview-2c98bc214
@metamask-previews/shield-controller@5.1.1-preview-2c98bc214
@metamask-previews/signature-controller@39.2.0-preview-2c98bc214
@metamask-previews/snap-account-service@0.0.0-preview-2c98bc214
@metamask-previews/social-controllers@2.2.0-preview-2c98bc214
@metamask-previews/storage-service@1.0.1-preview-2c98bc214
@metamask-previews/subscription-controller@6.1.2-preview-2c98bc214
@metamask-previews/transaction-controller@65.2.0-preview-2c98bc214
@metamask-previews/transaction-pay-controller@22.1.0-preview-2c98bc214
@metamask-previews/user-operation-controller@41.2.0-preview-2c98bc214

@ccharly
Copy link
Copy Markdown
Contributor Author

ccharly commented May 11, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.3.0-preview-1e129f1d5
@metamask-previews/accounts-controller@38.0.0-preview-1e129f1d5
@metamask-previews/address-book-controller@7.1.1-preview-1e129f1d5
@metamask-previews/ai-controllers@0.6.3-preview-1e129f1d5
@metamask-previews/analytics-controller@1.0.1-preview-1e129f1d5
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-1e129f1d5
@metamask-previews/announcement-controller@8.1.0-preview-1e129f1d5
@metamask-previews/app-metadata-controller@2.0.1-preview-1e129f1d5
@metamask-previews/approval-controller@9.0.1-preview-1e129f1d5
@metamask-previews/assets-controller@7.0.0-preview-1e129f1d5
@metamask-previews/assets-controllers@106.0.0-preview-1e129f1d5
@metamask-previews/authenticated-user-storage@1.0.0-preview-1e129f1d5
@metamask-previews/base-controller@9.1.0-preview-1e129f1d5
@metamask-previews/base-data-service@0.1.1-preview-1e129f1d5
@metamask-previews/bridge-controller@72.0.1-preview-1e129f1d5
@metamask-previews/bridge-status-controller@71.1.1-preview-1e129f1d5
@metamask-previews/build-utils@3.0.4-preview-1e129f1d5
@metamask-previews/chain-agnostic-permission@1.6.0-preview-1e129f1d5
@metamask-previews/chomp-api-service@3.0.0-preview-1e129f1d5
@metamask-previews/claims-controller@0.5.0-preview-1e129f1d5
@metamask-previews/client-controller@1.0.1-preview-1e129f1d5
@metamask-previews/compliance-controller@2.0.0-preview-1e129f1d5
@metamask-previews/composable-controller@12.0.1-preview-1e129f1d5
@metamask-previews/config-registry-controller@0.3.0-preview-1e129f1d5
@metamask-previews/connectivity-controller@0.2.0-preview-1e129f1d5
@metamask-previews/controller-utils@11.20.0-preview-1e129f1d5
@metamask-previews/core-backend@6.2.1-preview-1e129f1d5
@metamask-previews/delegation-controller@3.0.0-preview-1e129f1d5
@metamask-previews/earn-controller@12.1.0-preview-1e129f1d5
@metamask-previews/eip-5792-middleware@3.0.3-preview-1e129f1d5
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.0-preview-1e129f1d5
@metamask-previews/eip1193-permission-middleware@2.0.0-preview-1e129f1d5
@metamask-previews/ens-controller@19.1.1-preview-1e129f1d5
@metamask-previews/eth-block-tracker@15.0.1-preview-1e129f1d5
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-1e129f1d5
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-1e129f1d5
@metamask-previews/foundryup@1.0.1-preview-1e129f1d5
@metamask-previews/gas-fee-controller@26.2.0-preview-1e129f1d5
@metamask-previews/gator-permissions-controller@4.1.0-preview-1e129f1d5
@metamask-previews/geolocation-controller@0.1.2-preview-1e129f1d5
@metamask-previews/json-rpc-engine@10.5.0-preview-1e129f1d5
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-1e129f1d5
@metamask-previews/keyring-controller@25.5.0-preview-1e129f1d5
@metamask-previews/logging-controller@8.0.1-preview-1e129f1d5
@metamask-previews/message-manager@14.1.1-preview-1e129f1d5
@metamask-previews/messenger@1.2.0-preview-1e129f1d5
@metamask-previews/messenger-cli@0.2.0-preview-1e129f1d5
@metamask-previews/money-account-balance-service@1.0.0-preview-1e129f1d5
@metamask-previews/money-account-controller@0.3.0-preview-1e129f1d5
@metamask-previews/money-account-upgrade-controller@1.3.1-preview-1e129f1d5
@metamask-previews/multichain-account-service@9.0.0-preview-1e129f1d5
@metamask-previews/multichain-api-middleware@3.1.0-preview-1e129f1d5
@metamask-previews/multichain-network-controller@3.1.0-preview-1e129f1d5
@metamask-previews/multichain-transactions-controller@7.1.0-preview-1e129f1d5
@metamask-previews/name-controller@9.1.1-preview-1e129f1d5
@metamask-previews/network-controller@30.1.0-preview-1e129f1d5
@metamask-previews/network-enablement-controller@5.1.0-preview-1e129f1d5
@metamask-previews/notification-services-controller@23.1.0-preview-1e129f1d5
@metamask-previews/passkey-controller@2.0.1-preview-1e129f1d5
@metamask-previews/permission-controller@13.1.0-preview-1e129f1d5
@metamask-previews/permission-log-controller@5.1.0-preview-1e129f1d5
@metamask-previews/perps-controller@6.0.0-preview-1e129f1d5
@metamask-previews/phishing-controller@17.1.1-preview-1e129f1d5
@metamask-previews/polling-controller@16.0.4-preview-1e129f1d5
@metamask-previews/preferences-controller@23.1.0-preview-1e129f1d5
@metamask-previews/profile-metrics-controller@3.1.3-preview-1e129f1d5
@metamask-previews/profile-sync-controller@28.0.2-preview-1e129f1d5
@metamask-previews/ramps-controller@13.3.0-preview-1e129f1d5
@metamask-previews/rate-limit-controller@7.0.1-preview-1e129f1d5
@metamask-previews/react-data-query@0.2.0-preview-1e129f1d5
@metamask-previews/remote-feature-flag-controller@4.2.0-preview-1e129f1d5
@metamask-previews/sample-controllers@4.0.4-preview-1e129f1d5
@metamask-previews/seedless-onboarding-controller@9.1.0-preview-1e129f1d5
@metamask-previews/selected-network-controller@26.1.1-preview-1e129f1d5
@metamask-previews/shield-controller@5.1.1-preview-1e129f1d5
@metamask-previews/signature-controller@39.2.0-preview-1e129f1d5
@metamask-previews/snap-account-service@0.0.0-preview-1e129f1d5
@metamask-previews/social-controllers@2.2.0-preview-1e129f1d5
@metamask-previews/storage-service@1.0.1-preview-1e129f1d5
@metamask-previews/subscription-controller@6.1.2-preview-1e129f1d5
@metamask-previews/transaction-controller@65.2.0-preview-1e129f1d5
@metamask-previews/transaction-pay-controller@22.1.0-preview-1e129f1d5
@metamask-previews/user-operation-controller@41.2.0-preview-1e129f1d5

Comment on lines +272 to +277
handleKeyringSnapMessage?: jest.MockedFunction<
SnapKeyring['handleKeyringSnapMessage']
>;
setSelectedAccounts?: jest.MockedFunction<
SnapKeyring['setSelectedAccounts']
>;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

why are these optional now?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That depends on the test. We sometimes need to mock or the other

hmalik88
hmalik88 previously approved these changes May 11, 2026
Base automatically changed from cc/feat/snap-account-service-snap-keyring-messages to main May 11, 2026 21:52
@ccharly ccharly dismissed hmalik88’s stale review May 11, 2026 21:52

The base branch was changed.

@ccharly ccharly enabled auto-merge May 11, 2026 21:59
@ccharly ccharly added this pull request to the merge queue May 11, 2026
Merged via the queue into main with commit e1f408e May 11, 2026
366 checks passed
@ccharly ccharly deleted the cc/feat/snap-account-service-selected-account-group branch May 11, 2026 22:16
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.

2 participants