Releases: MetaMask/core
Releases · MetaMask/core
838.0.0
837.0.0
@metamask/bridge-controller 67.3.0
Added
- Added optional
ab_testsproperty toRequiredEventContextFromClientandCrossChainSwapsEventPropertiestypes for A/B test experiment attribution (#8007)
Changed
836.0.0
@metamask/assets-controller 2.1.0
Added
- Add
PendingTokenMetadatatype and optionalpendingMetadataparameter toaddCustomAsset(accountId, assetId, pendingMetadata?). When provided (e.g. from the extension's pending-tokens flow), token metadata is written toassetsInfoimmediately so the UI can render the token without waiting for the pipeline (#8021) - Add
currentCurrencystate (ISO 4217 code, default'usd') andsetCurrentCurrency(currentCurrency)toAssetsController. Changing the currency updates state and triggers a one-off price refetch so displayed prices use the new currency (#7991) - Add support for forcibly updating prices (#7991)
- Add parallel middlewares in
ParallelMiddleware.ts:createParallelBalanceMiddlewareruns balance data sources (Accounts API, Snap, RPC) in parallel with chain partitioning and a fallback round for failed chains;createParallelMiddlewareruns TokenDataSource and PriceDataSource in parallel (same request, merged response). Both usemergeDataResponsesand limited concurrency viap-limit(#7950) - Add
@metamask/client-controllerdependency and subscribe toClientController:stateChange. Asset tracking runs only when the UI is open (ClientController) and the keyring is unlocked (KeyringController), and stops when either the UI closes or the keyring locks (Client + Keyring lifecycle) (#7950) - Add full and merge update modes:
DataResponse.updateModeand typeAssetsUpdateMode('full'|'merge'). Fetch uses'full'(response is authoritative for scope; custom assets not in response are preserved). Subscriptions could use'merge'or'full'depending on data sources. Default is'merge'when omitted (#7950)
Changed
- Bump
@metamask/transaction-controllerfrom^62.17.1to^62.19.0(#8005, #8031) - Bump
@metamask/assets-controllersfrom^100.0.1to^100.0.2(#8004) - Bump
@metamask/assets-controllersfrom^100.0.2to^100.0.3(#8029)
Fixed
- Avoid unnecessary price and token API requests when data sources report balance-only updates. The controller now forwards the optional
requestfrom the subscribe callback intohandleAssetsUpdate; when a data source callsonAssetsUpdate(response, request)withrequest.dataTypes: ['balance'](e.g. RpcDataSource balance polling, StakedBalanceDataSource), the controller skips Token and Price enrichment so the price API is not called. Previously every update triggered enrichment and could reset or overwrite existing state (#8043) - Default
assetsBalanceto0for native tokens of each account's supported chains usingNetworkEnablementController.nativeAssetIdentifiers, so native entries are always present in state even before data sources respond (#8036) - Auto-select
'merge'update mode ingetAssetswhenchainIdsis a subset of enabled chains, preventing partial-chain fetches (e.g. after a swap, adding a custom asset, or data-source chain changes) from wiping balances of other chains (#8036) - Convert WebSocket balance updates in
BackendWebsocketDataSourcefrom raw smallest-units to human-readable amounts using asset decimals (same behavior as RPC/Accounts API), soassetsBalanceremains consistent across data sources (#8032) - Include all assets from balance and each account's custom assets from state in
detectedAssets, so prices and metadata are fetched for existing assets and custom tokens (previously only assets without metadata were included, so existing assets did not get prices) (#8021) - Request
includeAggregators: truewhen fetching token metadata from the v3 assets API so aggregator data is returned and stored inassetsInfo(#8021)
835.0.0
834.0.0
833.0.0
832.0.0
@metamask/assets-controllers 100.0.3
Changed
- Bump
@metamask/transaction-controllerfrom^62.17.1to^62.18.0(#8005)
Fixed
- Fix token search API parameter to use
firstinstead oflimitfor pagination (#8019)- Clamp limit to a maximum of 50 results for regular queries
- Allow up to 500 results for Ondo token queries; limits exceeding 500 are clamped to 50
831.0.0
@metamask/bridge-controller 67.2.0
Changed
830.0.0
@metamask/ramps-controller 10.0.0
Changed
- BREAKING: Remove
state.quotesandstate.widgetUrlfrom RampsController state. Quote and widget URL data are now managed by consuming components (#8013) - BREAKING: Remove
fetchQuotesForSelection()andsetSelectedQuote(). Components callgetQuotes()directly and manage selection locally (#8013) - Simplify
getWidgetUrl()to a pure fetch-and-return API; it no longer reads or writes controller state (#8013) - Improve
TransakServiceerror handling (#8010) - BREAKING: Replace
startQuotePolling()/stopQuotePolling()withfetchQuotesForSelection()— quotes are now fetched once per call instead of polling on a 15-second interval (#7999)
Removed
- Remove
stopQuotePolling()method (no interval to stop) (#7999) - Remove internal polling restart logic (
#restartPollingIfActive) fromsetSelectedProvider,setSelectedToken, andsetSelectedPaymentMethod(#7999)
Fixed
- Fix RampsController flaky test (#8018)
829.0.0
@metamask/compliance-controller 1.0.1
@metamask/seedless-onboarding-controller 8.1.0
Changed
refreshAuthTokensnow coalesces concurrent calls — if a refresh is already in-flight, subsequent callers share the same promise rather than issuing duplicate HTTP requests with the same token (#7989)refreshAuthTokensnow uses the livestate.refreshTokenvalue when callingauthenticateafter a successful HTTP refresh, preventing a stale-capture bug that could overwrite a concurrently-renewed token with an older one (#7989)renewRefreshTokennow queues the old token for revocation only after#createNewVaultWithAuthDatasucceeds, ensuring tokens are not queued if vault creation fails (#7989)
Fixed
- Fixed
refreshAuthTokensthrowing the genericFailedToRefreshJWTTokenserror for all HTTP failures — a 401 response (permanently revoked token) now throwsInvalidRefreshTokeninstead, giving callers a distinct signal to distinguish permanent from transient failures (#7989)