Skip to content

Releases: MetaMask/core

1332.0.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 13:03
466d604

@metamask/perps-controller 20.1.0

Added

  • Add PERPS_EVENT_VALUE.SECTION_NAME.EXPLORE (explore) and RECENTLY_ADDED (recently_added) so home impressions for the Explore table and the Recently added rail use controller constants (#10824)
  • Add PERPS_ERROR_CODES.PRICE_MOVED and optional errorCode and errorDetails on OrderResult, so a failed placement can be localized without parsing OrderResult.error (#10385)
    • Export isPerpsErrorCode, PriceMovedErrorDetails, and PerpsErrorDetails. PriceMovedErrorDetails carries unformatted priceDeltaBps, maxSlippageBps, expectedPrice, and currentPrice
    • createErrorResult copies errorCode and errorDetails when the failure is a structured controller error. HyperLiquid mapped rejections, including an immediate-match rejection (IOC_CANCEL) and EXCHANGE_ACCOUNT_NOT_FOUND, now set errorCode; OrderResult.error stays the same message
    • A USD-derived order whose price moved past maxSlippageBps (or the default market slippage) reports PRICE_MOVED. The message still starts with Price moved too much:; the expected and current prices in it use HyperLiquid price formatting
  • Add PERPS_EVENT_PROPERTY.PRICE_DELTA_BPS (price_delta_bps) and export PerpsMaxSlippageSource. Trade and close analytics now include failure_reason from errorCode when one is present, price_delta_bps for a PRICE_MOVED rejection, and max_slippage_pct, max_slippage_source, and estimated_slippage_pct from the caller's tracking data. Raw error_message is still sent. Failed close events also include close_type, derived from the requested size, including when the provider throws. That property previously appeared only on executed closes (#10385)

Changed

  • Bump reselect from ^5.1.1 to ^5.3.0 (#10532)
  • Bump @metamask/abi-utils from ^2.0.3 to ^2.0.4 (#10715)
  • Perps error logs include bounded feature, operation, action, and component tags for connection, order, position, deposit, and withdrawal failures, while retaining diagnostic values in the log context (#10681)
  • Trade traces pass an explicit ok or error status to PerpsTracer.endTrace, the place-order payment-token attribute is named pay_token_symbol so Sentry does not scrub its value, and Lighter trading failures are forwarded to Sentry with their original provider message and bounded operation/action tags (#10685)

Fixed

  • Log deposit transaction failures that reject after confirmation, for both deposit-only and deposit-and-order, with financial_operations / financial_deposit tags, and leave user cancellation unlogged (#10681)
  • Log flip results that resolve success: false with position_management / flip_position tags, and leave KEYRING_LOCKED and EXCHANGE_ACCOUNT_NOT_FOUND unlogged (#10681)
  • Add optional OrderParams.deferProviderErrorReport. A flip sets it so HyperLiquid and Lighter do not log place_order for that failure, and flipPosition logs it once as position_management / flip_position. Delegated close failures likewise log once as position_management / close_position. Expected signer, account, session, and selected local-validation outcomes stay unlogged (#10681)
  • Skip the calculation-time price guard for exact-size HyperLiquid orders, including a full close that submits the live position size. Those orders are no longer rejected locally when priceAtCalculation is stale; the venue's slippage-capped limit still applies. The guard still runs for USD-derived sizing (#10385)

1331.0.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 13:00
0f93889

@metamask/transaction-controller 72.2.1

Changed

  • Bump @metamask/rpc-errors from ^7.0.2 to ^7.0.3 (#10718)
  • Bump @metamask/core-backend from ^12.0.1 to ^12.1.0 (#10788)

Fixed

  • Count confirmed transactions when choosing the next nonce, so a mined transaction is not reused when eth_getTransactionCount is still behind that transaction (#10803)

1330.0.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 07:09
8f91cb7

@metamask/kyc-controller 0.9.0

Added

  • Add KycService.resetWrappingKeys, which posts POST /sessions/{sessionId}/wrapping-keys with sessionClientPublicKey and returns UkycSessionResponse (#10692)
  • Export CAPABILITY_AUTHORIZATION_STATUSES, CAPABILITY_AUTHORIZATION_STATUSES_TO_REFRESH, FINAL_STATUSES_TO_SKIP_AUTH_REFRESH, needsCapabilityAuthorizationRefresh, KYC_STATUSES, and FINAL_STATUSES_TO_STOP_POLLING (#10692)

Changed

  • Refresh and resubmit the UKYC capability authorization when capabilityAuthorizationStatus is new or expired while resuming a session in startSession (skipped when finalStatus is approved or rejected) (#10692)
  • Space KycController session-status polls with a linear backoff. The first poll is immediate, the next waits 10 seconds, and each later wait grows by 10 seconds. Starting polling again resets the delay (#10764)

1329.0.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 06:55
a7be4d8

@metamask/phishing-controller 18.2.1

Changed

  • Bump @metamask/transaction-controller from ^72.0.1 to ^72.2.0 (#10652, #10772)
  • Bump ethereum-cryptography from ^2.2.1 to ^3.2.0 (#10599)

Fixed

  • Fix Node.js 24 compatibility by accessing toASCII through the CommonJS punycode module default export. (#10812)

1328.0.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 17:52
0250840

@metamask/subscription-controller 14.0.0

Changed

  • BREAKING: SubscriptionDelegationServiceMessenger now requires SubscriptionController:isUserEligibleForTrial (#10795)
    • Clients that construct this messenger must delegate SubscriptionController:isUserEligibleForTrial.
  • Bump @metamask/profile-sync-controller from ^34.0.2 to ^34.0.3 (#10761)
  • Require Subscription.currentPeriodStart, currentPeriodEnd, cancelType, and isEligibleForSupport in the subscription response and runtime validation. (#10765)
  • Bump @metamask/transaction-controller from ^72.1.0 to ^72.2.0 (#10772)

Fixed

  • Fixed Money Account Plus checkout requesting a trial for a user isUserEligibleForTrial rejects (#10795)
  • SubscriptionController:unCancelSubscription refreshes subscriptions after a successful uncancel. (#10802)
    • The stored subscription is replaced with the uncancel response instead of merged with it, so optional fields the response omits (such as cancelAtPeriodEnd and canceledAt) no longer keep stale values, including when the subscription refresh fails.

@metamask/wallet 17.1.0

Changed

  • Delegate SubscriptionController:isUserEligibleForTrial to SubscriptionDelegationService so Money Account Plus checkout uses the controller trial rule (#10795)
  • Bump @metamask/transaction-controller from ^72.1.0 to ^72.2.0 (#10772)
  • Bump @metamask/subscription-controller from ^13.0.0 to ^14.0.0 (#10810)

1327.0.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 14:03
28e27db

@metamask/profile-controller 1.1.0

Added

  • Add ProfileServiceMock for mocking profile-api responses (#10745)
  • Add getXAuthorizationUrl method to ProfileController for initiating the X OAuth flow. It fetches the authorization URL via ProfileService:getXAuthUrl (the profile is resolved server-side from the verified bearer token), and returns the authorization URL and state parameter as ephemeral session data, without storing them in controller state (#10668, #10793)
  • Add disconnectX method to ProfileController for unlinking the X account from a profile. It delegates to ProfileService:disconnectX, and when the disconnected profile matches the profile in state, clears xProfile from controller state and sets connectedToX to false (#10668)
  • Add disconnectX method to ProfileService for sending an authenticated DELETE request to the profiles/{profileId}/x endpoint; a 404 response is treated as success (the X account is already disconnected) (#10668)
  • Add fetchAndUpdateProfile method to the ProfileController to fetch a profile from the profile-api and update the controller's state (#10793)

Changed

  • getXAuthorizationUrl no longer accepts a linkedAddress parameter (#10668)
  • connectX updates controller state (xProfile) on success (#10668, #10793)
  • Bump @metamask/profile-sync-controller from ^34.0.0 to ^34.0.3 (#10752, #10756, #10761)

Fixed

  • Fix the ProfileController messenger event type: the controller exposes ProfileController:stateChanged (emitted on state changes), not ProfileController:stateChange (#10668)
  • Fix the ProfileService's response type to not have avatar_url as nullable (#10793)

1326.0.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 07:07
93f4402

@metamask/assets-controller 19.0.0

Added

  • Add a transient, non-persisted per-account assets loading state (assetsLoadingStatus) that marks an account as loading from its first user-visible assets fetch until that fetch settles, and never re-marks it on later refreshes, with selectors to read it (#10230)

Changed

  • BREAKING: RpcDataSource requires queryApiClient and no longer accepts queryClient. AssetsController passes its existing queryApiClient (#10672)
    • RPC token detection now loads supported networks, occurrence floors, and per-chain token lists through queryApiClient.token (GET /v2/supportedNetworks, GET /v1/suggestedOccurrenceFloors, GET /tokens/{chainId}), replacing the local TokensApiClient.
  • Bump @metamask/account-tree-controller from ^11.0.0 to ^11.0.1 (#10662)
  • Bump @metamask/assets-controllers from ^112.1.1 to ^112.1.2 (#10662)
  • Bump @metamask/core-backend from ^12.0.0 to ^12.1.0 (#10662, #10788)
  • Bump @metamask/keyring-internal-api from ^12.0.0 to ^12.1.0 (#10733)
  • Bump @metamask/snaps-controllers from ^19.0.0 to ^19.0.1 (#10719)
  • Bump @metamask/transaction-controller from ^72.1.0 to ^72.2.0 (#10772)
  • Bump @metamask/keyring-api from ^24.0.0 to ^24.1.0 (#10717)

@metamask/bridge-controller 82.0.3

Changed

  • Bump reselect from ^5.1.1 to ^5.3.0 (#10532)
  • Bump @metamask/profile-sync-controller from ^34.0.0 to ^34.0.3 (#10752, #10756, #10761)
  • Bump @metamask/snaps-controllers from ^19.0.0 to ^19.0.1 (#10719)
  • Bump @metamask/transaction-controller from ^72.1.0 to ^72.2.0 (#10772)
  • Bump @metamask/keyring-api from ^24.0.0 to ^24.1.0 (#10717)
  • Bump @metamask/assets-controller from ^18.0.1 to ^19.0.0 (#10788)

@metamask/core-backend 12.1.0

Added

  • Add occurrenceFloor, includeNativeAssets, and includeRwaData query options to TokenApiClient.fetchTokenList (GET /tokens/{chainId}) (#10672)
  • Add TokenApiClient.fetchV2SupportedNetworks for Token API GET /v2/supportedNetworks (#10672)

Changed

  • Bump @metamask/profile-sync-controller from ^34.0.0 to ^34.0.3 (#10752, #10756, #10761)
  • BackendWebSocketService routes notifications by exact channel name and subscriptionId. Account-activity chain-wildcard matching, stale-subscription channel fallback, and nested payload unwrapping have been removed (#10754)

@metamask/transaction-pay-controller 30.1.0

Added

  • Support submitting target calls as a separate second leg when the quote provider cannot execute them (#10501)
    • Add requiresSecondLeg to TransactionPayQuote.
    • ServerStrategy now supports non-atomic requests.
    • Non-atomic quotes settle funds on the account that executes the calls.

Changed

  • Bump @metamask/transaction-controller from ^72.1.0 to ^72.2.0 (#10772)
  • Fail fiat and second-leg submissions when the settled amount cannot be read from an on-chain transaction, rather than falling back to order.cryptoAmount or the quote minimum (#10501)
  • Bump @metamask/assets-controller from ^18.0.1 to ^19.0.0 (#10788)

Fixed

  • Zero source network fees for Relay quotes on Polymarket deposit-wallet Predict withdraws, as the Polymarket relayer pays origin gas (#10501)
  • Set isIntentComplete on the parent transaction only after the non-atomic second leg of a Relay quote is submitted, so a failed second leg no longer leaves a failed transaction flagged as complete (#10501)

1325.0.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 20:51
d407021

@metamask/kyc-controller 0.8.0

Added

  • Added exported KYC_STATUSES and TERMINAL_SESSION_STATUSES, so consumers can reuse the KYC status vocabulary and the terminal session-status set (approved, rejected, retry) from the package entry point instead of redefining them locally (#10771)

Changed

  • KycController.hasCompletedSessionDisclaimers now reports completion from session consentStatus === 'given' instead of fetching the session disclaimer catalog (#10760)
    • This no longer throws a 409 when the session is already in a terminal state
  • Bump @metamask/profile-sync-controller from ^34.0.2 to ^34.0.3 (#10761)

1324.0.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 15:07
b6e51e2

@metamask/social-controllers 3.7.0

Added

  • Add optional mutuals flag to fetchFollowers (FetchFollowersOptions). When true, calls bearer-authenticated GET /traders/:addressOrId/followers?mutuals=true (social-api #386); count is the mutual total. Omitted or false keeps the full follower list (#10770)
  • Add fetchMyFollowing method to SocialService (and the SocialService:fetchMyFollowing messenger action) as an alias of fetchFollowing. Both call GET /users/me/following. Prefer fetchMyFollowing in new code so it pairs with fetchMyFollowers; fetchFollowing is unchanged (#10701)
  • Add fetchTraderFollowing method to SocialService (and the SocialService:fetchTraderFollowing messenger action) for another trader's outbound follows. Calls bearer-authenticated GET /traders/:addressOrId/following (social-api #380) and returns FollowingResponse (following profile summaries plus total count). Distinct from fetchFollowing, which loads the current user's list via GET /users/me/following. fetchFollowers uses the same auth model for GET /traders/:addressOrId/followers (#10689)
  • Add fetchMyFollowers method to SocialService (and the SocialService:fetchMyFollowers messenger action) for the authenticated user's inbound followers. Calls GET /users/me/followers and returns FollowersResponse (followers profile summaries plus total count) (#10649)

Changed

  • Allow boughtUsd, soldUsd, realizedPnl, and costBasis to be null on Position / feed items, matching incomplete Clicker metrics the social-api may serialize as JSON null (#10753)
  • Drop individual fetchFeed, fetchTraderFeed, and fetchTokenFeed items that fail validation instead of rejecting the whole page (#10753)
  • Update SocialRealtimeService to subscribe to the trending Social feed channel and forward every valid event from batched notifications (#10751)
  • Bump @metamask/profile-sync-controller from ^34.0.0 to ^34.0.3 (#10752, #10756, #10761)

1323.0.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 14:13
6c33efe

@metamask/transaction-controller 72.2.0

Added

  • Add isTransactionTrusted to TransactionControllerOptions to limit future-block re-simulation to untrusted transactions (#10747)

Changed

  • Bump @metamask/network-controller from ^37.0.0 to ^37.0.1 (#10658)
  • Bump @metamask/core-backend from ^12.0.0 to ^12.0.1 (#10662)
  • Bump @metamask/nonce-tracker from ^6.0.0 to ^6.1.0 (#10735)
  • Bump ethereum-cryptography from ^2.2.1 to ^3.2.0 (#10599)

Fixed

  • Recognize Ink Mainnet and Ink Sepolia as OP Stack networks when estimating Layer 1 gas fees (#10707)