Skip to content

feat: refetch defi positions if they are still loading - #9711

Open
bergarces wants to merge 7 commits into
mainfrom
refetch-loading-defi
Open

feat: refetch defi positions if they are still loading#9711
bergarces wants to merge 7 commits into
mainfrom
refetch-loading-defi

Conversation

@bergarces

@bergarces bergarces commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Explanation

References

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
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Medium Risk
Changes fetch lifecycle and timing (longer-running promises, background polls on account/currency switches) for DeFi portfolio state; behavior is well covered by new tests but affects wallet balance/DeFi UX paths.

Overview
DeFiPositionsControllerV2.fetchDeFiPositions no longer stops when the Accounts API returns processingDefiPositions: true. It polls (5s interval, up to 5 attempts), invalidates the v6 balances TanStack cache between retries, and uses staleTime: 0 on follow-up attempts so polls are not stuck on a cached “still processing” snapshot. forceRefresh only bypasses cache on the first attempt.

Ready accounts are merged into state immediately on each response; still-indexing accounts keep prior positions until they become ready or the attempt cap is hit. The method resolves only after the fetch and any polls finish.

Concurrency: one in-flight promise per sorted selected-account IDs + vsCurrency. Same selection/currency joins the existing poll; a different account group or fiat currency starts a separate fetch while earlier polls keep running (switching back can rejoin an earlier in-flight poll for that key).

Reviewed by Cursor Bugbot for commit d77c814. Bugbot is set up for automated code reviews on this repo. Configure here.

@bergarces
bergarces requested review from a team as code owners July 30, 2026 13:19
@bergarces

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@bergarces

Copy link
Copy Markdown
Contributor Author

@metamaskbot publish-preview

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d77c814. Configure here.

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.5-preview-d77c814bb
@metamask-previews/accounts-controller@39.0.5-preview-d77c814bb
@metamask-previews/address-book-controller@7.1.2-preview-d77c814bb
@metamask-previews/ai-controllers@0.8.0-preview-d77c814bb
@metamask-previews/analytics-controller@1.2.1-preview-d77c814bb
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-d77c814bb
@metamask-previews/announcement-controller@8.1.0-preview-d77c814bb
@metamask-previews/app-metadata-controller@2.0.1-preview-d77c814bb
@metamask-previews/approval-controller@9.0.2-preview-d77c814bb
@metamask-previews/assets-controller@11.3.1-preview-d77c814bb
@metamask-previews/assets-controllers@110.0.2-preview-d77c814bb
@metamask-previews/authenticated-user-storage@3.0.1-preview-d77c814bb
@metamask-previews/base-controller@9.1.0-preview-d77c814bb
@metamask-previews/base-data-service@0.1.3-preview-d77c814bb
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-d77c814bb
@metamask-previews/bridge-controller@78.0.1-preview-d77c814bb
@metamask-previews/bridge-status-controller@74.6.0-preview-d77c814bb
@metamask-previews/build-utils@3.0.4-preview-d77c814bb
@metamask-previews/chain-agnostic-permission@1.7.0-preview-d77c814bb
@metamask-previews/chomp-api-service@4.0.0-preview-d77c814bb
@metamask-previews/claims-controller@0.5.3-preview-d77c814bb
@metamask-previews/client-controller@1.0.1-preview-d77c814bb
@metamask-previews/client-utils@1.5.0-preview-d77c814bb
@metamask-previews/compliance-controller@2.1.0-preview-d77c814bb
@metamask-previews/composable-controller@12.0.1-preview-d77c814bb
@metamask-previews/config-registry-controller@1.0.0-preview-d77c814bb
@metamask-previews/connectivity-controller@0.3.0-preview-d77c814bb
@metamask-previews/controller-utils@12.3.0-preview-d77c814bb
@metamask-previews/core-backend@8.0.0-preview-d77c814bb
@metamask-previews/delegation-controller@3.0.2-preview-d77c814bb
@metamask-previews/earn-controller@12.2.2-preview-d77c814bb
@metamask-previews/eip-5792-middleware@3.0.5-preview-d77c814bb
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-d77c814bb
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-d77c814bb
@metamask-previews/ens-controller@19.1.5-preview-d77c814bb
@metamask-previews/eth-block-tracker@15.0.1-preview-d77c814bb
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-d77c814bb
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-d77c814bb
@metamask-previews/foundryup@1.0.1-preview-d77c814bb
@metamask-previews/gas-fee-controller@26.3.0-preview-d77c814bb
@metamask-previews/gator-permissions-controller@4.2.3-preview-d77c814bb
@metamask-previews/geolocation-controller@0.1.3-preview-d77c814bb
@metamask-previews/java-tron-up@1.0.0-preview-d77c814bb
@metamask-previews/json-rpc-engine@10.5.0-preview-d77c814bb
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-d77c814bb
@metamask-previews/keyring-controller@27.1.0-preview-d77c814bb
@metamask-previews/local-node-utils@1.0.0-preview-d77c814bb
@metamask-previews/logging-controller@8.0.2-preview-d77c814bb
@metamask-previews/message-manager@14.1.2-preview-d77c814bb
@metamask-previews/messenger@2.0.0-preview-d77c814bb
@metamask-previews/messenger-cli@0.2.0-preview-d77c814bb
@metamask-previews/money-account-api-data-service@0.4.0-preview-d77c814bb
@metamask-previews/money-account-balance-service@2.3.0-preview-d77c814bb
@metamask-previews/money-account-controller@0.3.3-preview-d77c814bb
@metamask-previews/money-account-upgrade-controller@3.0.0-preview-d77c814bb
@metamask-previews/money-account-utils@0.0.0-preview-d77c814bb
@metamask-previews/multichain-account-service@13.0.0-preview-d77c814bb
@metamask-previews/multichain-api-middleware@4.0.1-preview-d77c814bb
@metamask-previews/multichain-network-controller@3.2.1-preview-d77c814bb
@metamask-previews/multichain-transactions-controller@7.1.1-preview-d77c814bb
@metamask-previews/name-controller@9.1.2-preview-d77c814bb
@metamask-previews/network-connection-banner-controller@0.1.1-preview-d77c814bb
@metamask-previews/network-controller@34.0.0-preview-d77c814bb
@metamask-previews/network-enablement-controller@6.0.0-preview-d77c814bb
@metamask-previews/notification-services-controller@26.0.0-preview-d77c814bb
@metamask-previews/passkey-controller@3.0.0-preview-d77c814bb
@metamask-previews/permission-controller@13.1.1-preview-d77c814bb
@metamask-previews/permission-log-controller@5.1.0-preview-d77c814bb
@metamask-previews/perps-controller@10.0.0-preview-d77c814bb
@metamask-previews/phishing-controller@17.3.0-preview-d77c814bb
@metamask-previews/platform-api-docs@0.0.0-preview-d77c814bb
@metamask-previews/polling-controller@16.0.8-preview-d77c814bb
@metamask-previews/preferences-controller@23.1.0-preview-d77c814bb
@metamask-previews/profile-metrics-controller@4.0.2-preview-d77c814bb
@metamask-previews/profile-sync-controller@28.3.0-preview-d77c814bb
@metamask-previews/ramps-controller@18.0.0-preview-d77c814bb
@metamask-previews/rate-limit-controller@7.0.1-preview-d77c814bb
@metamask-previews/react-data-query@0.2.2-preview-d77c814bb
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-d77c814bb
@metamask-previews/sample-controllers@5.0.3-preview-d77c814bb
@metamask-previews/seedless-onboarding-controller@10.1.0-preview-d77c814bb
@metamask-previews/selected-network-controller@26.1.5-preview-d77c814bb
@metamask-previews/sentinel-api-service@1.0.0-preview-d77c814bb
@metamask-previews/shield-controller@5.1.3-preview-d77c814bb
@metamask-previews/signature-controller@39.2.7-preview-d77c814bb
@metamask-previews/smart-transactions-controller@25.0.1-preview-d77c814bb
@metamask-previews/snap-account-service@2.0.0-preview-d77c814bb
@metamask-previews/social-controllers@2.7.0-preview-d77c814bb
@metamask-previews/solana-test-validator-up@1.0.0-preview-d77c814bb
@metamask-previews/stellar-quickstart-up@0.0.0-preview-d77c814bb
@metamask-previews/storage-service@1.0.2-preview-d77c814bb
@metamask-previews/subscription-controller@6.2.1-preview-d77c814bb
@metamask-previews/transaction-controller@69.3.0-preview-d77c814bb
@metamask-previews/transaction-pay-controller@26.0.1-preview-d77c814bb
@metamask-previews/user-operation-controller@41.2.7-preview-d77c814bb
@metamask-previews/wallet@8.1.0-preview-d77c814bb
@metamask-previews/wallet-cli@0.0.0-preview-d77c814bb

Sign up for free to 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.

1 participant