Skip to content

Latest commit

 

History

History
882 lines (587 loc) · 50.7 KB

File metadata and controls

882 lines (587 loc) · 50.7 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Added

  • Expose missing public UserStorageController methods through its messenger (#7976)
    • The following actions are now available:
      • UserStorageController:performDeleteStorageAllFeatureEntries
      • UserStorageController:listEntropySources
      • UserStorageController:setIsBackupAndSyncFeatureEnabled
      • UserStorageController:setIsContactSyncingInProgress
      • UserStorageController:syncContactsWithUserStorage
    • Corresponding action types (e.g. UserStorageControllerPerformDeleteStorageAllFeatureEntriesAction) are available as well.

Changed

  • BREAKING: Standardize names of AuthenticationController and UserStorageController messenger action types (#7976)
    • All existing types for messenger actions have been renamed so they end in Action (e.g. AuthenticationControllerPerformSignIn -> AuthenticationControllerPerformSignInAction). You will need to update imports appropriately.
    • This change only affects the types. The action type strings themselves have not changed, so you do not need to update the list of actions you pass when initializing AuthenticationController and UserStorageController messengers.

Changed

  • Centralize authentication error handling into a single throwServiceError helper for consistent error management across all service functions (#7721)
    • This fixes authentication services crashing when server returns non-JSON error responses.
  • Bump @metamask/snaps-controllers from ^14.0.1 to ^17.2.0 (#7550)
  • Bump @metamask/snaps-sdk from ^9.0.0 to ^10.3.0 (#7550)
  • Bump @metamask/snaps-utils from ^11.0.0 to ^11.7.0 (#7550)
  • Upgrade @metamask/utils from ^11.8.1 to ^11.9.0 (#7511)
  • Move peer dependencies for controller and service packages to direct dependencies (#7209, #7713)
    • The dependencies moved are:
      • @metamask/address-book-controller (^7.0.1)
      • @metamask/keyring-controller (^25.1.0)
      • @metamask/snaps-controllers (^14.0.1)
    • In clients, it is now possible for multiple versions of these packages to exist in the dependency tree.
      • For example, this scenario would be valid: a client relies on @metamask/controller-a 1.0.0 and @metamask/controller-b 1.0.0, and @metamask/controller-b depends on @metamask/controller-a 1.1.0.
    • Note, however, that the versions specified in the client's package.json always "win", and you are expected to keep them up to date so as not to break controller and service intercommunication.

Changed

  • BREAKING: Bump @metamask/keyring-controller from ^24.0.0 to ^25.0.0 (#7202)
  • Bump @metamask/address-book-controller from ^7.0.0 to ^7.0.1 (#7202)
  • Add rate limit (429) handling with automatic retry in authentication flow (#6993)
    • Update authentication services to throw RateLimitedError when encountering 429 responses.
    • Improve Authentication errors by adding the HTTP code in error messages.
    • Add rate limit retry logic to SRPJwtBearerAuth with configurable cooldown via rateLimitRetry.cooldownDefaultMs option (defaults to 10 seconds).
    • Non-429 errors are thrown immediately without retry, delegating retry logic to consumers.

Changed

  • BREAKING: Use new Messenger from @metamask/messenger (#6533)
    • Previously, AuthenticationController and UserStorageController accepted a RestrictedMessenger instance from @metamask/base-controller.
  • BREAKING: Metadata property anonymous renamed to includeInDebugSnapshot (#6533)
  • BREAKING: Bump @metamask/address-book-controller from ^6.1.1 to ^7.0.0 (#6962)
  • BREAKING: Bump @metamask/keyring-controller from ^23.0.0 to ^24.0.0 (#6962)
  • Bump @metamask/base-controller from ^8.4.2 to ^9.0.0 (#6962)

Changed

  • Bump @metamask/base-controller from ^8.4.1 to ^8.4.2 (#6917)

Changed

  • Bump @metamask/base-controller from ^8.4.0 to ^8.4.1 (#6807)

Changed

  • Use deferred promises for encryption/decryption KDF operations (#6736)
    • That will prevent duplicate KDF operations from being computed if one with the same options is already in progress.
    • For operations that already completed, we use the already existing cache.
  • Bump @metamask/utils from ^11.8.0 to ^11.8.1 (#6708)
  • Bump @metamask/keyring-api from ^20.1.0 to ^21.0.0 (#6560)
  • Bump @metamask/keyring-internal-api from ^8.1.0 to ^9.0.0 (#6560)
  • Strip srpSessionData.token.accessToken from state logs (#6553)
    • We haven't started using the includeInStateLogs metadata yet in clients, so this will have no functional impact. This change brings this metadata into alignment with the hard-coded state log generation performed by clients.today.
  • Add dependency on @metamask/utils (#6553)
  • Bump @metamask/base-controller from ^8.3.0 to ^8.4.0 (#6632)

Added

  • BREAKING: Add missing @metamask/address-book-controller peer dependency (#6344)
  • Add two new controller state metadata properties: includeInStateLogs and usedInUi (#6470)

Changed

  • Implement deferred login pattern in SRPJwtBearerAuth to prevent race conditions during concurrent authentication attempts (#6353)
    • Add #deferredLogin method that ensures only one login operation executes at a time using Promise map caching
  • Bump @metamask/base-controller from ^8.1.0 to ^8.3.0 (#6355, #6465)

Removed

  • BREAKING: Remove @metamask/accounts-controller peer dependency (#6344)
  • BREAKING: Remove all account syncing code & logic (#6344)
    • UserStorageController now only holds the account syncing enablement status, but the logic itself has been moved to @metamask/account-tree-controller
  • Remove UserStorageController optional config callback getIsMultichainAccountSyncingEnabled, and getIsMultichainAccountSyncingEnabled public method / messenger action (#6344)

Added

  • UserStorageController optional config callback getIsMultichainAccountSyncingEnabled, and getIsMultichainAccountSyncingEnabled public method / messenger action (#6215)
    • This callback needs to be wired to client specific selectors in order to fetch the value of the feature flag dynamically
    • If true, Account syncing will stop pushing new data to the user storage and only act as an account restoration method that will be fired before multichain account syncing for legacy compatibility
    • This is done because AccountTreeController will become responsible for Multichain Account syncing

Changed

  • BREAKING: Bump peer dependency @metamask/accounts-controller from ^32.0.0 to ^33.0.0 (#6345)
  • BREAKING: Bump peer dependency @metamask/keyring-controller from ^22.0.0 to ^23.0.0 (#6345)
  • Bump @noble/hashes from ^1.4.0 to ^1.8.0 (#6101)
  • Bump @noble/ciphers from ^0.5.2 to ^1.3.0 (#6101)
  • Bump @metamask/base-controller from ^8.0.1 to ^8.1.0 (#6284)
  • Bump accounts related packages (#6309)
    • Bump @metamask/keyring-api from ^20.0.0 to ^20.1.0
    • Bump @metamask/keyring-internal-api from ^8.0.0 to ^8.1.0

Removed

  • BREAKING: Remove UserStorageController:saveInternalAccountToUserStorage public method (#6215)

Changed

  • BREAKING: Rename AuthenticationController:getUserProfileMetaMetrics to AuthenticationController:getUserProfileLineage (#6211)
    • Rename API endpoint from /api/v2/profile/metametrics to /api/v2/profile/lineage

Changed

  • BREAKING: Bump peer dependency @metamask/accounts-controller from ^31.0.0 to ^32.0.0 (#6171)

Added

  • Add performance tracing to user storage syncing operations (contacts and accounts) (#6050)
  • Add env options in both AuthenticationController and UserStorageController's config constructor param (#6082)
    • This will let consumers choose to use prod, dev or UAT environments for Identity operations

Removed

  • BREAKING: Remove schema enforcement for user storage paths (#6075)
    • This will improve DX by preventing developers from having to update the schema before using the SDK or Controllers for their features.
  • BREAKING: Remove network syncing code (#6081)
    • This code has never been used in production, and won't likely be used in the future
    • Remove @metamask/network-controller dependency and peerDependency

Added

  • Add new AuthenticationController:getUserProfileMetaMetrics method (#6068)
    • This method fetches data using the Authentication API, returning all MetaMetrics sessions related to the currently authenticated user, in the form of typeof UserProfileMetaMetrics

Changed

  • BREAKING: Bump peer dependency @metamask/snaps-controllers from ^12.0.0 to ^14.0.0 (#6035)
  • Bump @metamask/snaps-sdk from ^7.1.0 to ^9.0.0 (#6035)
  • Bump @metamask/snaps-utils from ^9.4.0 to ^11.0.0 (#6035)

Changed

  • BREAKING: Bump peer dependency @metamask/accounts-controller to ^31.0.0 (#5999)
  • BREAKING: Bump peer dependency @metamask/network-controller to ^24.0.0 (#5999)

Added

  • BREAKING: Add Contacts Syncing, a Backup and Sync feature (#5776)
    • React to contacts update and deletion events from AddressBookController and update the corresponding entries in user storage
    • Dispatch downward "Big sync" after onboarding & wallet unlock
      • Big sync will download contacts from user storage and resolve potential conflicts

Added

  • Add EventQueue class util to guarantee the order of some user-storage updates (#5937)
    • Add an instance of EventQueue to UserStorageController
    • Event subscriptions for AccountsController:accountAdded and AccountsController:accountRenamed are now pushing their callbacks to the UserStorageController instance of EventQueue, so that we stay in control of the order these callbacks are fulfilled.

Added

  • BREAKING: Add multi-SRP support for authentication and user storage (#5753)
    • Add entropySource based authentication support for multiple SRPs
    • Add entropySource optional parameter for UserStorageController CRUD methods
    • Rename sessionData in AuthenticationControllerState to srpSessionData
    • Update AuthenticationController.performSignIn to return string[] rather than string
    • Add AccountsController:updateAccounts as a required allowed action to the UserStorageController messenger
    • Add listEntropySources to UserStorageController
    • Render UserStorageController.syncInternalAccountsWithUserStorage compatible with multi-SRP

Changed

  • BREAKING: bump @metamask/accounts-controller peer dependency to ^30.0.0 (#5888)
  • BREAKING: bump @metamask/snaps-controllers peer dependency to ^12.0.0 (#5871)
  • BREAKING: bump @metamask/providers peer dependency to ^22.0.0 (#5871)

Changed

  • BREAKING: bump @metamask/keyring-controller peer dependency to ^22.0.0 (#5802)
  • BREAKING: bump @metamask/accounts-controller peer dependency to ^29.0.0 (#5802)

Changed

  • BREAKING: Replace all "Profile Syncing" mentions to "Backup & Sync" (#5686)
    • Replaces state properties isProfileSyncingEnabled to isBackupAndSyncEnabled, and isProfileSyncingUpdateLoading to isBackupAndSyncUpdateLoading

Fixed

  • Remove metadata for unsupported keyrings (#5725)

Changed

  • BREAKING: Bump @metamask/accounts-controller peer dependency from ^27.0.0 to ^28.0.0 (#5763)
  • BREAKING: Bump @metamask/snaps-controllers peer dependency from ^9.19.0 to ^11.0.0 (#5639)
  • BREAKING: Bump @metamask/providers peer dependency from ^18.1.1 to ^21.0.0 (#5639)
  • Bump @metamask/base-controller from ^8.0.0 to ^8.0.1 (#5722)
  • Bump @metamask/snaps-sdk from ^6.17.1 to ^6.22.0 (#5639)
  • Bump @metamask/snaps-utils from ^8.10.0 to ^9.2.0 (#5639)

Added

  • BREAKING: Add new public method setIsBackupAndSyncFeatureEnabled to UserStorageController (#5636)
    • This replaces enableProfileSyncing and disableProfileSyncing and will be used as the main method to enable and disable backup and sync features from now on.
  • BREAKING: Add new isAccountSyncingEnabled state property to UserStorageController (#5636)
    • This property is true by default.

Removed

  • BREAKING: Remove isAccountSyncingEnabled env property from UserStorageController constructor (#5629)
  • BREAKING: Remove unused action handlers: setIsBackupAndSyncFeatureEnabled, syncInternalAccountsWithUserStorage and saveInternalAccountToUserStorage. (#5638)
    • These actions should not be callable through the messaging system.

Changed

  • Bump accounts dependencies (#5565)

Fixed

  • Update origin used for SnapController:handleRequest (#5616)

Changed

  • BREAKING: Bump peer dependency @metamask/accounts-controller to ^27.0.0 (#5507)
  • BREAKING: Bump peer dependency @metamask/network-controller to ^23.0.0 (#5507)

Fixed

  • Peer dependencies @metamask/keyring-controller and @metamask/network-controller are no longer also direct dependencies (#5464))

Added

  • Add primary SRP switching support for AuthenticationController and UserStorageController (#5478)

Changed

  • BREAKING: Bump @metamask/keyring-controller peer dependency to ^21.0.0 (#5439)
  • BREAKING: Bump @metamask/accounts-controller peer dependency to ^26.0.0 (#5439)
  • BREAKING UserStorageController and AuthenticationController now use the SDK under the hood (#5413)
    • BREAKING AuthenticationController state entry sessionData has changed shape to fully reflect the LoginResponse SDK type.
    • BREAKING UserStorageController cannot use the AuthenticationController:performSignOut action anymore.
  • BREAKING: Bump @metamask/keyring-internal-api from ^5.0.0 to ^6.0.0 (#5347)

Changed

  • BREAKING: Bump @metamask/keyring-controller peer dependency to ^20.0.0 (#5426)
  • BREAKING: Bump @metamask/accounts-controller peer dependency to ^25.0.0 (#5426)
  • Bump @metamask/keyring-internal-api from ^4.0.3 to ^5.0.0 (#5405)

Changed

  • Bump @metamask/keyring-controller" from ^19.2.0 to ^19.2.1 (#5373)
  • Bump @metamask/keyring-api" from ^17.0.0 to ^17.2.0 (#5366)

Added

  • Create RPC middleware using RPC services (#5290)

Changed

  • Use KeyringController:withKeyring for account syncing operations (#5345)
    • Add accounts in bulk during big sync
    • Filter and keep only HD accounts from the primary SRP for all account sync operations
  • Bump @metamask/keyring-controller dependency from ^19.1.0 to ^19.2.0 (#5357)

Added

  • Add perform{BatchSetStorage,DeleteStorage,BatchDeleteStorage} as messenger actions (#5311)
  • Add optional validateAgainstSchema option when creating user storage entry paths (#5326)

Changed

  • BREAKING: Bump @metamask/accounts-controller peer dependency from ^23.0.0 to ^24.0.0 (#5318)
  • Change maxNumberOfAccountsToAdd default value from 100 to Infinity (#5322)

Removed

  • Removed unused events from UserStorageController (#5324)

Changed

  • Bump @metamask/base-controller from ^7.1.1 to ^8.0.0 (#5305)
  • Bump @metamask/keyring-controller from ^19.0.6 to ^19.0.7 (#5305)
  • Bump @metamask/network-controller from ^22.2.0 to ^22.2.1 (#5305)

Changed

  • BREAKING: Bump @metamask/accounts-controller peer dependency from ^22.0.0 to ^23.0.0 (#5292)

Changed

  • Improve logic & dependencies between profile sync, auth, user storage & notifications (#5275)
  • Mark @metamask/snaps-controllers peer dependency bump as breaking in CHANGELOG (#5267)
  • Fix eslint warnings & errors (#5261)
  • Rename ControllerMessenger to Messenger (#5244)
  • Bump snaps-sdk to v6.16.0 (#5220)
  • BREAKING: Bump @metamask/snaps-controllers peer dependency from ^9.10.0 to ^9.19.0 (#5265)
  • Bump @metamask/snaps-sdk from ^6.16.0 to ^6.17.1 (#5265)
  • Bump @metamask/snaps-utils from ^8.9.0 to ^8.10.0 (#5265)
  • Bump @metamask/keyring-api" from ^16.1.0 to ^17.0.0 (#5280)

Removed

  • BREAKING: Remove metametrics dependencies in UserStorageController (#5278)

Changed

  • BREAKING: Bump @metamask/accounts-controller peer dependency from ^21.0.0 to ^22.0.0 (#5218)
  • Bump @metamask/keyring-api from ^14.0.0 to ^16.1.0 (#5190), (#5208)

Changed

  • Bump @metamask/keyring-api from ^13.0.0 to ^14.0.0 (#5177)

Changed

  • Persist isAccountSyncingReadyToBeDispatched state value (#5147)

Added

  • Add optional sentry context parameter to erroneous situation callbacks (#5139)

Changed

  • BREAKING: Bump @metamask/accounts-controller peer dependency from ^20.0.0 to ^21.0.0 (#5140)
  • Bump @metamask/base-controller from 7.1.0 to ^7.1.1 (#5135)
  • Bump @metamask/keyring-api from ^12.0.0 to ^13.0.0 (#5066)
  • Bump @metamask/keyring-internal-api from ^1.0.0 to ^2.0.0 (#5066), (#5136)
  • Bump @metamask/keyring-controller from ^19.0.2 to ^19.0.3 (#5140)

Added

  • Add a customProvider option to the sdk JwtBearerAuth class (#5105)

Changed

  • Bump eslint to ^9.11.1 and migrate to flat config (#4727)
  • Bump @metamask/keyring-api from ^12.0.0 to ^13.0.0 and @metamask/keyring-internal-api from ^1.0.0 to ^1.1.0 (#5066)

Added

  • feat: improve profile sync services logs (#5101)

Changed

  • feat: decouple account sync logic from UserStorageController (#5078)
  • Bump @metamask/base-controller from ^7.0.0 to ^7.1.0 (#5079)

Changed

  • Use new @metamask/keyring-internal-api@^1.0.0( #4695)
    • This package has been split out from the Keyring API.
  • Bump @metamask/keyring-api from ^10.1.0 to ^12.0.0 (#4695)

Changed

  • Revamp user storage encryption process (#4981)
    • Stop using a random salt when generating scrypt keys and use a shared one
    • Re-encrypt data fetched by getUserStorageAllFeatureEntries and getUserStorage with the shared salt if fetched entries were encrypted with random salts

Fixed

  • Remove #assertLoggedIn() assertion when signing out a user, ensuring performSignOut does not error when a user is already signed out (#5013)

Added

  • Add optional constructor arguments for config.networkSyncing to UserStorageController: maxNumberOfAccountsToAdd, onNetworkAdded, onNetworkUpdated, onNetworkRemoved (#4701)
  • Add new UserStorageController method syncNetworks, which can be used to initiate the main network sync (#4701)
  • Add optional property hasNetworkSyncingSyncedAtLeastOnce to UserStorageController state (#4701)

Changed

  • BREAKING: The controller messenger must now allow the actions NetworkController:getState, NetworkController:addNetwork, NetworkController:removeNetwork, and NetworkController:updateNetwork (#4701)
  • BREAKING: The controller messenger must now allow the event NetworkController:networkRemoved (#4701)
  • Bump @metamask/keyring-controller from ^19.0.0 to ^19.0.1 (#5012)
  • Bump @metamask/network-controller from ^22.0.2 to ^22.1.0 (#5012)

Fixed

  • Make implicit peer dependencies explicit (#4974)
    • Add the following packages as peer dependencies of this package to satisfy peer dependency requirements from other dependencies:
      • @metamask/providers ^18.1.0 (required by @metamask/keyring-api)
      • webextension-polyfill ^0.10.0 || ^0.11.0 || ^0.12.0 (required by @metamask/providers)
    • These dependencies really should be present in projects that consume this package (e.g. MetaMask clients), and this change ensures that they now are.
    • Furthermore, we are assuming that clients already use these dependencies, since otherwise it would be impossible to consume this package in its entirety or even create a working build. Hence, the addition of these peer dependencies is really a formality and should not be breaking.
  • Fix user storage controller to use the user-storage batch API to upsert remote networks rather than upserting them one at a time (#4701)
  • Correct ESM-compatible build so that imports of the following packages that re-export other modules via export * are no longer corrupted: (#5011)
    • @metamask/keyring-api
    • loglevel
    • nock
    • siwe

Changed

  • BREAKING: Bump @metamask/keyring-controller peer dependency from ^18.0.0 to ^19.0.0 (#4195)
  • BREAKING: Bump @metamask/accounts-controller peer dependency from ^19.0.0 to ^20.0.0 (#4195)

Added

  • new analytics callback and various helpers & improvements (#4944)
    • new UserStorageController state keys: hasAccountSyncingSyncedAtLeastOnce and isAccountSyncingReadyToBeDispatched
    • new onAccountSyncErroneousSituation analytics callback to track how often erroneous situations happen during account syncing

Changed

  • set hasAccountSyncingSyncedAtLeastOnce also for a profile id that has never synced accounts before (#4944)

Added

  • add batch delete endpoint support for both UserStorageController & SDK (#4938)

Changed

  • use better type system for user storage (#4907)

Fixed

  • account sync infinite account creation bug (#4933)

Changed

  • BREAKING: Bump @metamask/keyring-controller peer dependency from ^17.2.0 to ^18.0.0 (#4915)
  • BREAKING: Bump @metamask/accounts-controller peer dependency from ^18.1.1 to ^19.0.0 (#4915)

Changed

  • BREAKING: Bump @metamask/network-controller peer dependency to ^22.0.0 (#4841)

Fixed

  • prevent multiple parallel account syncs by checking the value of isAccountSyncingInProgress before dispatching account syncing (#4901)

Added

  • add support for DELETE ONE endpoint (#4776)

Fixed

  • imported accounts won't be synced anymore by account syncing (#4777)

Added

  • add DELETE endpoint support (#4758)

Fixed

  • BREAKING react native scrypt now takes a UInt8Array password argument instead of a string (#4755)

Fixed

  • Account syncing performance issues and bugs (#4746)
    • Batch GET / PUT will now encrypt and decrypt sequentially in order to leverage the in-memory cache
    • nameLastUpdatedAt will stop being saved to user storage if account name is a default name
    • waitForExpectedValue has been removed and will stop waiting for AccountsController:accountAdded callback
    • randomBytes leftover from sync -> async encryption migration was removed

Fixed

  • Only fire onAccountNameUpdated when account name has changed (#4735)

Changed

  • Bump accounts related packages (#4713), (#4728)
    • Those packages are now built slightly differently and are part of the accounts monorepo.
    • Bump @metamask/keyring-api from ^8.1.0 to ^8.1.4

Changed

  • improve account syncing performance (#4726)
    • check if isEvmAccountType before saving an account in user storage in account syncing
    • check for correct KeyringType before saving an account in user storage in account syncing
    • wait for AccountsController:accountAdded event to fire before adding another account in account syncing
  • update 'eth-{simple,hd,snap}-keyring' + 'keyring-api' (#4713)

Added

  • add batch PUT endpoint for account syncing (#4724)
  • add batch PUT endpoint support (#4723)

Changed

  • move and organize shared profile sync dependencies (#4717)

Fixed

  • fix: profile-sync-controller mobile compilation issues (#4721)
    • mobile does not support exported async arrow functions, so needed to convert these into normal async functions

Fixed

  • BREAKING update profile-sync notification settings path hash (#4711)
    • changing this path also means the underlying storage hash has changed. But this will align with our existing solutions that are in prod.

Changed

  • update subpath exports to use new .d.cts definition files. (#4709)
  • move profile-sync-sdk snap methods to snap auth class (#4708)
    • move and validate connectSnap and isSnapConnected methods to only be available for SRP auth.

Removed

  • test: remove unused test mock (#4703)

Added

  • Add network synchronisation logic (#4694, #4687, #4685, #4684)
  • Add a canSync check for account synchronisation (#4690)
  • Add onAccountAdded and onAccountNameUpdated events to UserStorageController (#4707)

Changed

  • Bump @metamask/snaps-sdk from ^6.1.1 to ^6.5.0 (#4689)
  • Bump @metamask/snaps-utils from ^7.8.1 to ^8.1.1 (#4689)
  • Bump peer dependency @metamask/snaps-controllers from ^9.3.0 to ^9.7.0 (#4689)

Removed

  • BREAKING: Remove getAccountByAddress action (#4693)

Fixed

  • Produce and export ESM-compatible TypeScript type declaration files in addition to CommonJS-compatible declaration files (#4648)
    • Previously, this package shipped with only one variant of type declaration files, and these files were only CommonJS-compatible, and the exports field in package.json linked to these files. This is an anti-pattern and was rightfully flagged by the "Are the Types Wrong?" tool as "masquerading as CJS". All of the ATTW checks now pass.
  • Remove chunk files (#4648).
    • Previously, the build tool we used to generate JavaScript files extracted common code to "chunk" files. While this was intended to make this package more tree-shakeable, it also made debugging more difficult for our development teams. These chunk files are no longer present.
  • Remove extra slash when constructing user storage url (#4702)
  • Await encryption promise (#4705)

Added

  • add isSnapConnected method to the Authentication SDK (#4668)
  • add accountAdded and accountRenamed events when triggering account syncing (#4665)
  • prevent accounts controller events being used when sync is in progress (#4675)
    • add isAccountSyncingInProgress to UserStorageController
    • add isAccountSyncingInProgress checks to abort processing accountAdded and accountRenamed events.

Removed

  • account sync throttling (#4675)
    • remove maxSyncInterval; lastSyncedAt; shouldSync from UserStorageController

Added

  • add maxSyncInterval for account syncing to UserStorageController prevent multiple sync requests (#4659)
  • add optional NativeScrypt property to UserStorageController to allow the scrypt implementation to be swapped out for a native version. Improving mobile performance (#4656)

Added

  • add granular account syncing (#4629)
    • add accounts user storage schema
    • add method saveInternalAccountToUserStorage to UserStorageController
    • add method syncInternalAccountsWithUserStorage to UserStorageController
    • add @metamask/accounts-controller dev dependency
    • add @metamask/keyring-api dev dependency
  • add infura OIDC identifier (#4654)
  • define and export new types: AuthenticationControllerGetStateAction, AuthenticationControllerStateChangeEvent, Events (#4633)
  • SDK and controller support for GET /api/v1/userstorage/:feature endpoint (#4626)
    • add method performGetStorageAllFeatureEntries to UserStorageController
    • add ALLOW_ARBITRARY_KEYS to USER_STORAGE_SCHEMA to allow wildcard/getAll for entries for a feature
  • add subpath exports to @metamask/profile-sync-controller (#4604)
    • add @metamask/profile-sync-controller/sdk export
    • add @metamask/profile-sync-controller/user-storage export
    • add @metamask/profile-sync-controller/auth export

Changed

  • Bump typescript from ~5.1.6 to ~5.2.2 (#4584)
  • Fix controllers with missing or incorrect messenger action/event types (#4633)
  • BREAKING: AuthenticationControllerMessenger must allow internal events defined in the Events type (#4633)
  • AuthenticationControllerActions is widened to include the AuthenticationController:getState action (#4633)
  • Replaced @metamask/profile-sync-controller/sdk to use the same encryption file as UserStorageController (#4649)

Fixed

  • update subpath exports internal package.json files to resolve jest-haste-map errors (#4650)

Added

  • unlock checks for when controller methods are called (#4569)

Changed

  • BREAKING made MOCK_ENCRYPTED_STORAGE_DATA fixture a function to be lazily evaluated (#4592)
  • Bump typescript from ~5.0.4 to ~5.1.6 (#4576)

Added

  • Add and export object USER_STORAGE_SCHEMA, function getFeatureAndKeyFromPath, and type UserStoragePath (#4543)
  • Add connectSnap method to the JwtBearerAuth class for connecting to snap after initializing the Profile Sync SDK (#4560)

Changed

  • BREAKING: Enforce UserStorageSchema usage in all functions that get or set user storage (#4543)
    • Keeps user storage entries consistent, and improves DX for consumers of user storage.
    • BREAKING: Remove entryKey function parameter from performGetStorage and performSetStorage methods of UserStorageController, and replace with path parameter of type UserStoragePath.
    • BREAKING: Remove entryKey function parameter from createEntryPath, and replace with path parameter of type UserStoragePath.
    • BREAKING: Remove entryKey property from type UserStorageOptions, and replace with path property of type UserStoragePath.
  • BREAKING: Bump peerDependency @metamask/snaps-controllers from ^8.1.1 to ^9.3.0 (#3645)
  • Remove @metamask/snaps-controllers dependency #4556
    • This was listed under peerDependencies already, so it was redundant as a dependency.
  • Widen isProfileSyncingEnabled property of the UserStorageControllerState type from boolean to boolean | null (#4551)
  • Upgrade TypeScript version to ~5.0.4 and set moduleResolution option to Node16 (#3645)
  • Bump @metamask/base-controller from ^6.0.1 to ^6.0.2 (#4544)
  • Bump @metamask/snaps-sdk from ^4.2.0 to ^6.1.1 (#3645, #4547)
  • Add new dependency @metamask/snaps-utils (#3645, #4547)

Removed

  • Remove object USER_STORAGE_ENTRIES and type UserStorageEntryKeys (#4543)

Added

  • added LoginResponse validation in profile syncing SDK (#4541)

  • added snap caching when calling the message signing snap (#4532)

Removed

  • removed a server-side node dependency from profile-sync-sdk (#4539)

Fixed

  • removed a catch statement call in AuthenticationController to prevent infinite crashes. (#4533)

Changed

  • Switch ethers to a devDependency (#4518)

Added

  • added platform field when logging in to receive correct OIDC access token (#4480)

  • added metametrics validation in constructor (#4480)

Changed

  • updated the getMetaMetricsId interface to support async calls to metametrics ID (#4477)

Added

  • export defaultState for AuthenticationController and UserStorageController. (#4441)

Changed

  • AuthType, Env, Platform are changed from const enums to enums (#4441)

Added

  • Initial release