diff --git a/packages/assets-controller/CHANGELOG.md b/packages/assets-controller/CHANGELOG.md index d1175291c6a..8244f1a007a 100644 --- a/packages/assets-controller/CHANGELOG.md +++ b/packages/assets-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- `AccountsApiDataSource` `forceUpdate` balance fetches now use `staleTime`/`gcTime` of `100`ms (previously `0`/`0`) so bursts of near-simultaneous forced refreshes are de-duplicated by TanStack Query into a single Accounts API request instead of one request per trigger ([#9591](https://github.com/MetaMask/core/pull/9591)) + ## [11.1.1] ### Changed diff --git a/packages/assets-controller/src/data-sources/AccountsApiDataSource.test.ts b/packages/assets-controller/src/data-sources/AccountsApiDataSource.test.ts index f01829bf159..120b29a9100 100644 --- a/packages/assets-controller/src/data-sources/AccountsApiDataSource.test.ts +++ b/packages/assets-controller/src/data-sources/AccountsApiDataSource.test.ts @@ -377,7 +377,7 @@ describe('AccountsApiDataSource', () => { controller.destroy(); }); - it('fetch bypasses TanStack cache when forceUpdate is true', async () => { + it('uses a short-lived TanStack cache window when forceUpdate is true', async () => { const { controller, apiClient } = await setupController(); await controller.fetch(createDataRequest({ forceUpdate: true })); @@ -385,7 +385,7 @@ describe('AccountsApiDataSource', () => { expect(apiClient.accounts.fetchV5MultiAccountBalances).toHaveBeenCalledWith( [`eip155:1:${MOCK_ADDRESS}`], undefined, - { staleTime: 0, gcTime: 0 }, + { staleTime: 100, gcTime: 100 }, ); controller.destroy(); diff --git a/packages/assets-controller/src/data-sources/AccountsApiDataSource.ts b/packages/assets-controller/src/data-sources/AccountsApiDataSource.ts index 6ac6167b0e4..9ed297f39f6 100644 --- a/packages/assets-controller/src/data-sources/AccountsApiDataSource.ts +++ b/packages/assets-controller/src/data-sources/AccountsApiDataSource.ts @@ -376,7 +376,7 @@ export class AccountsApiDataSource extends AbstractDataSource< } const fetchOptions = request.forceUpdate - ? { staleTime: 0, gcTime: 0 } + ? { staleTime: 100, gcTime: 100 } : undefined; // Feature-flagged: v6 endpoint with a fallback to legacy v5. The flag is