Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: decouple account sync logic from UserStorageController #5078

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

mathieuartu
Copy link
Contributor

@mathieuartu mathieuartu commented Dec 18, 2024

Explanation

This PR moves the logic related to account syncing from UserStorageController to separated files in the account-syncing folder.
It also improves test coverage related to account syncing to 100%.

References

Related to #4923

  • Extension draft PR: test: verify core PR 5078 metamask-extension#29316
    • CI & E2E Passes ✅
    • I needed to add the new isAccountSyncingInProgress state key at various places to make it pass CI (as expected)
    • Account syncing is enabled on extension
  • Mobile draft PR: test: verify core PR 5078 metamask-mobile#12755
    • CI passes BUT ✅ ☝️
      • I needed to add the new isAccountSyncingInProgress state key at various places to make it pass CI (as expected)
      • UTs were broken. It seems to be linked to the latest version of NetworkController and its NetworkController:networkDidChange event. This latest version is requested by our controller as part of the upcoming network syncing feature.
      • This will require a separate PR that bumps NetworkController to v22.1.1 (or another incriminated dependency TBD)
      • This has started to be addressed here: fix: Prevent Engine.destroy test intermittent failure metamask-mobile#12765
    • In any case, account syncing is NOT enabled on mobile yet

Changelog

@metamask/profile-sync-controller

  • CHANGED: moved account syncing logic to its own files
  • BREAKING: added a new isAccountSyncingInProgress state key

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 highlighted breaking changes using the "BREAKING" category above as appropriate
  • I've prepared draft pull requests for clients and consumer packages to resolve any breaking changes

@mathieuartu mathieuartu added the team-identity Identity Team changes. https://github.com/orgs/MetaMask/teams/identity label Dec 18, 2024
@mathieuartu mathieuartu self-assigned this Dec 18, 2024
@mathieuartu
Copy link
Contributor Author

@metamaskbot publish-preview

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/accounts-controller": "20.0.2-preview-e218ba33",
  "@metamask-previews/address-book-controller": "6.0.2-preview-e218ba33",
  "@metamask-previews/announcement-controller": "7.0.2-preview-e218ba33",
  "@metamask-previews/approval-controller": "7.1.1-preview-e218ba33",
  "@metamask-previews/assets-controllers": "45.1.2-preview-e218ba33",
  "@metamask-previews/base-controller": "7.0.2-preview-e218ba33",
  "@metamask-previews/build-utils": "3.0.2-preview-e218ba33",
  "@metamask-previews/chain-controller": "0.2.2-preview-e218ba33",
  "@metamask-previews/composable-controller": "10.0.0-preview-e218ba33",
  "@metamask-previews/controller-utils": "11.4.4-preview-e218ba33",
  "@metamask-previews/ens-controller": "15.0.1-preview-e218ba33",
  "@metamask-previews/eth-json-rpc-provider": "4.1.6-preview-e218ba33",
  "@metamask-previews/gas-fee-controller": "22.0.2-preview-e218ba33",
  "@metamask-previews/json-rpc-engine": "10.0.1-preview-e218ba33",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.5-preview-e218ba33",
  "@metamask-previews/keyring-controller": "19.0.2-preview-e218ba33",
  "@metamask-previews/logging-controller": "6.0.3-preview-e218ba33",
  "@metamask-previews/message-manager": "11.0.3-preview-e218ba33",
  "@metamask-previews/multichain": "2.0.0-preview-e218ba33",
  "@metamask-previews/name-controller": "8.0.2-preview-e218ba33",
  "@metamask-previews/network-controller": "22.1.1-preview-e218ba33",
  "@metamask-previews/notification-services-controller": "0.15.0-preview-e218ba33",
  "@metamask-previews/permission-controller": "11.0.4-preview-e218ba33",
  "@metamask-previews/permission-log-controller": "3.0.2-preview-e218ba33",
  "@metamask-previews/phishing-controller": "12.3.1-preview-e218ba33",
  "@metamask-previews/polling-controller": "12.0.2-preview-e218ba33",
  "@metamask-previews/preferences-controller": "15.0.1-preview-e218ba33",
  "@metamask-previews/profile-sync-controller": "3.1.1-preview-e218ba33",
  "@metamask-previews/queued-request-controller": "8.0.2-preview-e218ba33",
  "@metamask-previews/rate-limit-controller": "6.0.2-preview-e218ba33",
  "@metamask-previews/remote-feature-flag-controller": "1.2.0-preview-e218ba33",
  "@metamask-previews/selected-network-controller": "20.0.2-preview-e218ba33",
  "@metamask-previews/signature-controller": "23.1.0-preview-e218ba33",
  "@metamask-previews/transaction-controller": "42.0.0-preview-e218ba33",
  "@metamask-previews/user-operation-controller": "21.0.0-preview-e218ba33"
}

@mathieuartu mathieuartu marked this pull request as ready for review December 18, 2024 14:26
@mathieuartu mathieuartu requested review from a team as code owners December 18, 2024 14:26
const mappedAccount =
mapInternalAccountToUserStorageAccount(internalAccount);

await getUserStorageControllerInstance().performSetStorage(
Copy link
Contributor

Choose a reason for hiding this comment

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

(not actionable, just a comment) Oooh... I just realised, that if we have the messenger, then you don't need the controller instance..

const messenger = options.getMessenger();
await messenger.call('UserStorageController:performSetStorage', ..., ....)

Hmm need to weigh pros/cons.

Pro:

  • 1 less dependency to manage
  • We technically don't need the entire controller instance, just methods, which this has.

Cons:

  • I think tests (the messenger mock) may need to support this.

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah no need to action this. Can be a future refactor if we want it.

But maybe we can store the instance as a variable so it can be reused (only if we call this alot).

const messenger = options.getMessenger()
const controller - options.getUserStorageControllerInstance();

Copy link
Contributor

Choose a reason for hiding this comment

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

meh its fine

Copy link
Member

Choose a reason for hiding this comment

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

This is exactly the type of thing the messenger is intended for! it's also intended to be very easy to mock (much easier than a controller).

Copy link
Contributor

@Prithpal-Sooriya Prithpal-Sooriya left a comment

Choose a reason for hiding this comment

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

Nice cleanup and great test coverage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
team-identity Identity Team changes. https://github.com/orgs/MetaMask/teams/identity
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants