Skip to content

feat(account-tree-controller): add callbacks for hidden and pinned data - #6910

Merged
montelaidev merged 12 commits into
mainfrom
feat/pinned-hidden-migration
Oct 22, 2025
Merged

feat(account-tree-controller): add callbacks for hidden and pinned data#6910
montelaidev merged 12 commits into
mainfrom
feat/pinned-hidden-migration

Conversation

@montelaidev

@montelaidevmontelaidev commented Oct 22, 2025

Copy link
Copy Markdown
Contributor

Explanation

This PR adds a migration mechanism for pinned and hidden state from State 0 into the AccountTreeController.

References

Fixes: https://consensyssoftware.atlassian.net/browse/MUL-1174?atlOrigin=eyJpIjoiYTEwNTBkNDBmYjg4NDAzNzkzMDdjMWVlMDIxMWY4YjQiLCJwIjoiaiJ9

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, highlighting breaking changes as necessary
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

Note

Adds optional callbacks to migrate per-account hidden/pinned into group metadata during init, persists defaults when absent, and updates tests and changelog.

  • Account Tree Controller
    • Migration callbacks: Add optional config.accountOrderCallbacks with isHiddenAccount and isPinnedAccount to derive group hidden/pinned when no persisted metadata exists.
    • Metadata persistence: On init, default hidden/pinned are persisted to accountGroupsMetadata with lastUpdatedAt: 0; persisted values take precedence over callbacks.
    • Bug fix: Read persisted group metadata by groupId (not group.id) when applying names/states.
  • Tests
    • Expand expectations to include pinned/hidden entries in accountGroupsMetadata and group metadata.
    • New tests covering callback presence/absence, precedence vs persisted data, and default behaviors.
  • Config/Docs
    • Update types.ts to include accountOrderCallbacks in AccountTreeControllerConfig.
    • Changelog entry documenting the new optional callbacks.
    • Jest coverage threshold for branches adjusted to 98.34.

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

@montelaidev

Copy link
Copy Markdown
ContributorAuthor

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
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": "1.5.0-preview-887b5d5c",
"@metamask-previews/accounts-controller": "33.1.1-preview-887b5d5c",
"@metamask-previews/address-book-controller": "6.2.0-preview-887b5d5c",
"@metamask-previews/announcement-controller": "7.1.0-preview-887b5d5c",
"@metamask-previews/app-metadata-controller": "1.1.0-preview-887b5d5c",
"@metamask-previews/approval-controller": "7.2.0-preview-887b5d5c",
"@metamask-previews/assets-controllers": "82.0.0-preview-887b5d5c",
"@metamask-previews/base-controller": "8.4.1-preview-887b5d5c",
"@metamask-previews/bridge-controller": "54.0.0-preview-887b5d5c",
"@metamask-previews/bridge-status-controller": "54.0.0-preview-887b5d5c",
"@metamask-previews/build-utils": "3.0.4-preview-887b5d5c",
"@metamask-previews/chain-agnostic-permission": "1.2.0-preview-887b5d5c",
"@metamask-previews/composable-controller": "11.1.0-preview-887b5d5c",
"@metamask-previews/controller-utils": "11.14.1-preview-887b5d5c",
"@metamask-previews/core-backend": "2.1.0-preview-887b5d5c",
"@metamask-previews/delegation-controller": "0.8.0-preview-887b5d5c",
"@metamask-previews/earn-controller": "8.0.1-preview-887b5d5c",
"@metamask-previews/eip-5792-middleware": "1.2.3-preview-887b5d5c",
"@metamask-previews/eip-7702-internal-rpc-middleware": "0.0.0-preview-887b5d5c",
"@metamask-previews/eip1193-permission-middleware": "1.0.1-preview-887b5d5c",
"@metamask-previews/ens-controller": "17.1.0-preview-887b5d5c",
"@metamask-previews/error-reporting-service": "2.2.1-preview-887b5d5c",
"@metamask-previews/eth-block-tracker": "14.0.0-preview-887b5d5c",
"@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-887b5d5c",
"@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-887b5d5c",
"@metamask-previews/foundryup": "1.0.1-preview-887b5d5c",
"@metamask-previews/gas-fee-controller": "24.1.0-preview-887b5d5c",
"@metamask-previews/gator-permissions-controller": "0.2.1-preview-887b5d5c",
"@metamask-previews/json-rpc-engine": "10.1.1-preview-887b5d5c",
"@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-887b5d5c",
"@metamask-previews/keyring-controller": "23.1.1-preview-887b5d5c",
"@metamask-previews/logging-controller": "6.1.0-preview-887b5d5c",
"@metamask-previews/message-manager": "13.0.1-preview-887b5d5c",
"@metamask-previews/messenger": "0.3.0-preview-887b5d5c",
"@metamask-previews/multichain-account-service": "1.6.1-preview-887b5d5c",
"@metamask-previews/multichain-api-middleware": "1.2.1-preview-887b5d5c",
"@metamask-previews/multichain-network-controller": "1.0.1-preview-887b5d5c",
"@metamask-previews/multichain-transactions-controller": "5.1.0-preview-887b5d5c",
"@metamask-previews/name-controller": "8.1.0-preview-887b5d5c",
"@metamask-previews/network-controller": "24.3.0-preview-887b5d5c",
"@metamask-previews/network-enablement-controller": "2.1.1-preview-887b5d5c",
"@metamask-previews/notification-services-controller": "18.3.0-preview-887b5d5c",
"@metamask-previews/permission-controller": "11.1.0-preview-887b5d5c",
"@metamask-previews/permission-log-controller": "4.1.0-preview-887b5d5c",
"@metamask-previews/phishing-controller": "14.1.2-preview-887b5d5c",
"@metamask-previews/polling-controller": "14.0.1-preview-887b5d5c",
"@metamask-previews/preferences-controller": "20.0.2-preview-887b5d5c",
"@metamask-previews/profile-sync-controller": "25.1.1-preview-887b5d5c",
"@metamask-previews/rate-limit-controller": "6.1.0-preview-887b5d5c",
"@metamask-previews/remote-feature-flag-controller": "1.9.0-preview-887b5d5c",
"@metamask-previews/sample-controllers": "2.0.1-preview-887b5d5c",
"@metamask-previews/seedless-onboarding-controller": "4.1.0-preview-887b5d5c",
"@metamask-previews/selected-network-controller": "24.0.1-preview-887b5d5c",
"@metamask-previews/shield-controller": "0.3.2-preview-887b5d5c",
"@metamask-previews/signature-controller": "34.0.1-preview-887b5d5c",
"@metamask-previews/subscription-controller": "2.0.0-preview-887b5d5c",
"@metamask-previews/token-search-discovery-controller": "3.5.0-preview-887b5d5c",
"@metamask-previews/transaction-controller": "60.9.0-preview-887b5d5c",
"@metamask-previews/user-operation-controller": "39.2.0-preview-887b5d5c"
}

@montelaidevmontelaidev self-assigned this Oct 22, 2025
@montelaidev
montelaidev marked this pull request as ready for review October 22, 2025 13:37
@montelaidev
montelaidev requested a review from a team as a code ownerOctober 22, 2025 13:37
@montelaidev
montelaidev requested a review from a team as a code ownerOctober 22, 2025 13:39
Comment threadpackages/account-tree-controller/CHANGELOG.md Outdated
Comment threadpackages/account-tree-controller/src/AccountTreeController.test.ts Outdated
Comment threadpackages/account-tree-controller/src/AccountTreeController.test.ts Outdated
Comment threadpackages/account-tree-controller/src/AccountTreeController.test.ts Outdated
Comment threadpackages/account-tree-controller/CHANGELOG.md Outdated
Co-authored-by: Charly Chevalier <charly.chevalier@consensys.net>
Comment threadpackages/account-tree-controller/src/AccountTreeController.ts Outdated
Comment threadpackages/account-tree-controller/src/AccountTreeController.ts Outdated
@ccharlyccharly changed the title feat!: add callbacks for hidden and pinned datafeat(account-tree-controller): add callbacks for hidden and pinned dataOct 22, 2025
@montelaidev

Copy link
Copy Markdown
ContributorAuthor

@metamaskbot publish-preview

Comment threadpackages/account-tree-controller/src/AccountTreeController.test.ts Outdated

if (this.#accountOrderCallbacks?.isPinnedAccount) {
isPinned = group.accounts.some((account) =>
this.#accountOrderCallbacks?.isPinnedAccount?.(account),

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.

Nit: But that should be defined inside this if already

Suggested change
this.#accountOrderCallbacks?.isPinnedAccount?.(account),
this.#accountOrderCallbacks.isPinnedAccount(account),


if (this.#accountOrderCallbacks?.isHiddenAccount) {
isHidden = group.accounts.some((account) =>
this.#accountOrderCallbacks?.isHiddenAccount?.(account),

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.

Same here:

Suggested change
this.#accountOrderCallbacks?.isHiddenAccount?.(account),
this.#accountOrderCallbacks.isHiddenAccount(account),

},
});
});

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.

Nit: we could have add a test when both callbacks are provided, but coverage-wise we should be good for those.

@ccharlyccharly left a comment

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.

LGTM, left some nits, but we can take care of that later on. The logic is good anyway!

@montelaidev
montelaidev enabled auto-merge (squash) October 22, 2025 16:27
@github-actions

Copy link
Copy Markdown
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": "1.5.0-preview-a649a76b",
"@metamask-previews/accounts-controller": "33.1.1-preview-a649a76b",
"@metamask-previews/address-book-controller": "6.2.0-preview-a649a76b",
"@metamask-previews/announcement-controller": "7.1.0-preview-a649a76b",
"@metamask-previews/app-metadata-controller": "1.1.0-preview-a649a76b",
"@metamask-previews/approval-controller": "7.2.0-preview-a649a76b",
"@metamask-previews/assets-controllers": "82.0.0-preview-a649a76b",
"@metamask-previews/base-controller": "8.4.2-preview-a649a76b",
"@metamask-previews/bridge-controller": "54.0.0-preview-a649a76b",
"@metamask-previews/bridge-status-controller": "54.0.0-preview-a649a76b",
"@metamask-previews/build-utils": "3.0.4-preview-a649a76b",
"@metamask-previews/chain-agnostic-permission": "1.2.0-preview-a649a76b",
"@metamask-previews/composable-controller": "11.1.0-preview-a649a76b",
"@metamask-previews/controller-utils": "11.14.1-preview-a649a76b",
"@metamask-previews/core-backend": "2.1.0-preview-a649a76b",
"@metamask-previews/delegation-controller": "0.8.0-preview-a649a76b",
"@metamask-previews/earn-controller": "8.0.1-preview-a649a76b",
"@metamask-previews/eip-5792-middleware": "1.2.3-preview-a649a76b",
"@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-a649a76b",
"@metamask-previews/eip1193-permission-middleware": "1.0.1-preview-a649a76b",
"@metamask-previews/ens-controller": "17.1.0-preview-a649a76b",
"@metamask-previews/error-reporting-service": "2.2.1-preview-a649a76b",
"@metamask-previews/eth-block-tracker": "14.0.0-preview-a649a76b",
"@metamask-previews/eth-json-rpc-middleware": "21.0.0-preview-a649a76b",
"@metamask-previews/eth-json-rpc-provider": "5.0.1-preview-a649a76b",
"@metamask-previews/foundryup": "1.0.1-preview-a649a76b",
"@metamask-previews/gas-fee-controller": "24.1.0-preview-a649a76b",
"@metamask-previews/gator-permissions-controller": "0.2.1-preview-a649a76b",
"@metamask-previews/json-rpc-engine": "10.1.1-preview-a649a76b",
"@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-a649a76b",
"@metamask-previews/keyring-controller": "23.1.1-preview-a649a76b",
"@metamask-previews/logging-controller": "6.1.0-preview-a649a76b",
"@metamask-previews/message-manager": "13.0.1-preview-a649a76b",
"@metamask-previews/messenger": "0.3.0-preview-a649a76b",
"@metamask-previews/multichain-account-service": "1.6.1-preview-a649a76b",
"@metamask-previews/multichain-api-middleware": "1.2.1-preview-a649a76b",
"@metamask-previews/multichain-network-controller": "1.0.1-preview-a649a76b",
"@metamask-previews/multichain-transactions-controller": "5.1.0-preview-a649a76b",
"@metamask-previews/name-controller": "8.1.0-preview-a649a76b",
"@metamask-previews/network-controller": "24.3.0-preview-a649a76b",
"@metamask-previews/network-enablement-controller": "2.1.1-preview-a649a76b",
"@metamask-previews/notification-services-controller": "18.3.0-preview-a649a76b",
"@metamask-previews/permission-controller": "11.1.0-preview-a649a76b",
"@metamask-previews/permission-log-controller": "4.1.0-preview-a649a76b",
"@metamask-previews/phishing-controller": "14.1.2-preview-a649a76b",
"@metamask-previews/polling-controller": "14.0.1-preview-a649a76b",
"@metamask-previews/preferences-controller": "20.1.0-preview-a649a76b",
"@metamask-previews/profile-sync-controller": "25.1.1-preview-a649a76b",
"@metamask-previews/rate-limit-controller": "6.1.0-preview-a649a76b",
"@metamask-previews/remote-feature-flag-controller": "1.9.0-preview-a649a76b",
"@metamask-previews/sample-controllers": "2.0.1-preview-a649a76b",
"@metamask-previews/seedless-onboarding-controller": "4.1.0-preview-a649a76b",
"@metamask-previews/selected-network-controller": "24.0.1-preview-a649a76b",
"@metamask-previews/shield-controller": "0.3.2-preview-a649a76b",
"@metamask-previews/signature-controller": "34.0.1-preview-a649a76b",
"@metamask-previews/subscription-controller": "2.0.0-preview-a649a76b",
"@metamask-previews/token-search-discovery-controller": "3.5.0-preview-a649a76b",
"@metamask-previews/transaction-controller": "60.9.0-preview-a649a76b",
"@metamask-previews/user-operation-controller": "39.2.0-preview-a649a76b"
}

@montelaidev
montelaidev merged commit 3513a0f into mainOct 22, 2025
255 checks passed
@montelaidev
montelaidev deleted the feat/pinned-hidden-migration branch October 22, 2025 16:43
Gudahtt added a commit that referenced this pull request Oct 24, 2025
…r/multichain-transactions-controller
* origin/main: (35 commits)
feat: `JsonRpcEngineV2` (#6176)
Release 641.0.0 (#6940)
feat: Add transaction emulation actions (#6935)
Release/640.0.0 (#6934)
fix(core-backend): control randomness to fix flaky test (#6936)
chore: Add `@metamask-previews/*` to NPM age gate exceptions (#6937)
Release/639.0.0 (#6931)
feat: make getCryptoApproveTransactionParams synchronous (#6930)
feat: add new actions to `KeyringController` (#6928)
feat: add `getAccounts` to `AccountsController` (#6927)
chore: remove `Monad Mainnet` single call balance contract and add into account v4 (#6929)
Release/638.0.0 (#6923)
fix: Downgrade `multiformats` to `^9.9.0` to avoid ESM-only dependency (#6920)
Release/637.0.0 (#6919)
feat(account-tree-controller): add callbacks for hidden and pinned data (#6910)
Release 636.0.0 (#6918)
fix(core-backend): reconnection logic (#6861)
fix: Tx state listener and signature coverage (#6906)
Release/635.0.0 (#6917)
fix(base-controller): add TypeScript declaration file for legacy module resolution (#6915)
...
Sign up for freeto 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

@montelaidev@ccharly