@metamask-previews/assets-controller 2.0.2-preview-d1f62d044 → 2.0.2-preview-06d68e653
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -6
- package/dist/AssetsController.cjs +27 -81
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +3 -6
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +3 -6
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +27 -81
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +0 -1
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs +0 -1
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.cjs +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.mjs +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
- package/dist/data-sources/PriceDataSource.cjs +1 -4
- package/dist/data-sources/PriceDataSource.cjs.map +1 -1
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
- package/dist/data-sources/PriceDataSource.mjs +1 -4
- package/dist/data-sources/PriceDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +0 -2
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +0 -2
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/SnapDataSource.cjs +2 -3
- package/dist/data-sources/SnapDataSource.cjs.map +1 -1
- package/dist/data-sources/SnapDataSource.d.cts.map +1 -1
- package/dist/data-sources/SnapDataSource.d.mts.map +1 -1
- package/dist/data-sources/SnapDataSource.mjs +2 -3
- package/dist/data-sources/SnapDataSource.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/middlewares/index.cjs +1 -5
- package/dist/middlewares/index.cjs.map +1 -1
- package/dist/middlewares/index.d.cts +0 -2
- package/dist/middlewares/index.d.cts.map +1 -1
- package/dist/middlewares/index.d.mts +0 -2
- package/dist/middlewares/index.d.mts.map +1 -1
- package/dist/middlewares/index.mjs +0 -1
- package/dist/middlewares/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +0 -14
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +0 -14
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +2 -4
- package/dist/middlewares/ParallelMiddleware.cjs +0 -216
- package/dist/middlewares/ParallelMiddleware.cjs.map +0 -1
- package/dist/middlewares/ParallelMiddleware.d.cts +0 -45
- package/dist/middlewares/ParallelMiddleware.d.cts.map +0 -1
- package/dist/middlewares/ParallelMiddleware.d.mts +0 -45
- package/dist/middlewares/ParallelMiddleware.d.mts.map +0 -1
- package/dist/middlewares/ParallelMiddleware.mjs +0 -214
- package/dist/middlewares/ParallelMiddleware.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,12 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
### Added
|
|
11
|
-
|
|
12
|
-
- Add parallel middlewares in `ParallelMiddleware.ts`: `createParallelBalanceMiddleware` runs balance data sources (Accounts API, Snap, RPC) in parallel with chain partitioning and a fallback round for failed chains; `createParallelMiddleware` runs TokenDataSource and PriceDataSource in parallel (same request, merged response). Both use `mergeDataResponses` and limited concurrency via `p-limit` ([#7950](https://github.com/MetaMask/core/pull/7950))
|
|
13
|
-
- Add `@metamask/client-controller` dependency and subscribe to `ClientController: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](https://github.com/MetaMask/core/pull/7950))
|
|
14
|
-
- Add full and merge update modes: `DataResponse.updateMode` and type `AssetsUpdateMode` (`'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](https://github.com/MetaMask/core/pull/7950))
|
|
15
|
-
|
|
16
10
|
### Changed
|
|
17
11
|
|
|
18
12
|
- Bump `@metamask/transaction-controller` from `^62.17.1` to `^62.18.0` ([#8005](https://github.com/MetaMask/core/pull/8005))
|
|
@@ -13,11 +13,10 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
|
-
var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trackMetaMetricsEvent, _AssetsController_firstInitFetchReported,
|
|
16
|
+
var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trackMetaMetricsEvent, _AssetsController_firstInitFetchReported, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_selectedAccounts_get, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _AssetsController_stakedBalanceDataSource, _AssetsController_allBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_registerActionHandlers, _AssetsController_executeMiddlewares, _AssetsController_updateState, _AssetsController_getAssetsFromState, _AssetsController_tokenStandardToAssetType, _AssetsController_start, _AssetsController_stop, _AssetsController_subscribeAssets, _AssetsController_subscribeAssetsBalance, _AssetsController_subscribeStakedBalance, _AssetsController_buildChainToAccountsMap, _AssetsController_subscribeDataSource, _AssetsController_unsubscribeDataSource, _AssetsController_buildDataRequest, _AssetsController_getEnabledChainsForAccount, _AssetsController_handleAccountGroupChanged, _AssetsController_handleEnabledNetworksChanged;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.AssetsController = exports.getDefaultAssetsControllerState = void 0;
|
|
19
19
|
const base_controller_1 = require("@metamask/base-controller");
|
|
20
|
-
const client_controller_1 = require("@metamask/client-controller");
|
|
21
20
|
const utils_1 = require("@metamask/utils");
|
|
22
21
|
const async_mutex_1 = require("async-mutex");
|
|
23
22
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
@@ -31,7 +30,6 @@ const StakedBalanceDataSource_1 = require("./data-sources/StakedBalanceDataSourc
|
|
|
31
30
|
const TokenDataSource_1 = require("./data-sources/TokenDataSource.cjs");
|
|
32
31
|
const logger_1 = require("./logger.cjs");
|
|
33
32
|
const DetectionMiddleware_1 = require("./middlewares/DetectionMiddleware.cjs");
|
|
34
|
-
const ParallelMiddleware_1 = require("./middlewares/ParallelMiddleware.cjs");
|
|
35
33
|
const utils_2 = require("./utils.cjs");
|
|
36
34
|
// ============================================================================
|
|
37
35
|
// CONTROLLER CONSTANTS
|
|
@@ -154,9 +152,6 @@ function normalizeResponse(response) {
|
|
|
154
152
|
if (response.errors) {
|
|
155
153
|
normalized.errors = { ...response.errors };
|
|
156
154
|
}
|
|
157
|
-
if (response.updateMode) {
|
|
158
|
-
normalized.updateMode = response.updateMode;
|
|
159
|
-
}
|
|
160
155
|
return normalized;
|
|
161
156
|
}
|
|
162
157
|
// ============================================================================
|
|
@@ -178,10 +173,8 @@ function normalizeResponse(response) {
|
|
|
178
173
|
* based on which chains they support. When active chains change, the controller
|
|
179
174
|
* dynamically adjusts subscriptions.
|
|
180
175
|
*
|
|
181
|
-
* 4. **
|
|
182
|
-
*
|
|
183
|
-
* Stops when either the UI closes or the keyring locks. See client-controller
|
|
184
|
-
* README for the combined pattern.
|
|
176
|
+
* 4. **Keyring Lifecycle**: Listens to KeyringController unlock/lock events to
|
|
177
|
+
* start/stop subscriptions when the wallet is unlocked or locked.
|
|
185
178
|
*
|
|
186
179
|
* ## Architecture
|
|
187
180
|
*
|
|
@@ -211,10 +204,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
211
204
|
_AssetsController_trackMetaMetricsEvent.set(this, void 0);
|
|
212
205
|
/** Whether we have already reported first init fetch for this session (reset on #stop). */
|
|
213
206
|
_AssetsController_firstInitFetchReported.set(this, false);
|
|
214
|
-
/** Whether the client (UI) is open. Combined with #keyringUnlocked for #updateActive. */
|
|
215
|
-
_AssetsController_uiOpen.set(this, false);
|
|
216
|
-
/** Whether the keyring is unlocked. Combined with #uiOpen for #updateActive. */
|
|
217
|
-
_AssetsController_keyringUnlocked.set(this, false);
|
|
218
207
|
_AssetsController_controllerMutex.set(this, new async_mutex_1.Mutex());
|
|
219
208
|
/**
|
|
220
209
|
* Active balance subscriptions keyed by account ID.
|
|
@@ -284,7 +273,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
284
273
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
|
|
285
274
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
|
|
286
275
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
|
|
287
|
-
// Subscriptions start only
|
|
276
|
+
// Subscriptions start only on KeyringController:unlock -> #start(), not here.
|
|
288
277
|
// Subscribe to basic-functionality changes after construction so a synchronous
|
|
289
278
|
// onChange during subscribe cannot run before data sources are initialized.
|
|
290
279
|
if (subscribeToBasicFunctionalityChange) {
|
|
@@ -348,9 +337,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
348
337
|
const chainIds = options?.chainIds ?? [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")];
|
|
349
338
|
const assetTypes = options?.assetTypes ?? ['fungible'];
|
|
350
339
|
const dataTypes = options?.dataTypes ?? ['balance', 'metadata', 'price'];
|
|
351
|
-
if (accounts.length === 0 || chainIds.length === 0) {
|
|
352
|
-
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
|
|
353
|
-
}
|
|
354
340
|
// Collect custom assets for all requested accounts
|
|
355
341
|
const customAssets = [];
|
|
356
342
|
for (const account of accounts) {
|
|
@@ -367,17 +353,13 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
367
353
|
});
|
|
368
354
|
const sources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
369
355
|
? [
|
|
370
|
-
(
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
375
|
-
]),
|
|
356
|
+
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
|
|
357
|
+
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
|
|
358
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
359
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
376
360
|
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
377
|
-
(
|
|
378
|
-
|
|
379
|
-
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
|
|
380
|
-
]),
|
|
361
|
+
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
|
|
362
|
+
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
|
|
381
363
|
]
|
|
382
364
|
: [
|
|
383
365
|
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
@@ -385,7 +367,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
385
367
|
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
386
368
|
];
|
|
387
369
|
const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
|
|
388
|
-
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this,
|
|
370
|
+
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
|
|
389
371
|
if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
|
|
390
372
|
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, true, "f");
|
|
391
373
|
const durationMs = Date.now() - startTime;
|
|
@@ -625,15 +607,9 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
625
607
|
hasBalance: Boolean(response.assetsBalance),
|
|
626
608
|
hasPrice: Boolean(response.assetsPrice),
|
|
627
609
|
});
|
|
628
|
-
// Run through enrichment middlewares (Detection
|
|
610
|
+
// Run through enrichment middlewares (Event Stack: Detection → Token → Price)
|
|
629
611
|
// Include 'metadata' in dataTypes so TokenDataSource runs to enrich detected assets
|
|
630
|
-
const { response: enrichedResponse } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [
|
|
631
|
-
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
632
|
-
(0, ParallelMiddleware_1.createParallelMiddleware)([
|
|
633
|
-
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
|
|
634
|
-
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
|
|
635
|
-
]),
|
|
636
|
-
], request ?? {
|
|
612
|
+
const { response: enrichedResponse } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"), __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f")], request ?? {
|
|
637
613
|
accountsWithSupportedChains: [],
|
|
638
614
|
chainIds: [],
|
|
639
615
|
dataTypes: ['balance', 'metadata', 'price'],
|
|
@@ -673,7 +649,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
673
649
|
}
|
|
674
650
|
}
|
|
675
651
|
exports.AssetsController = AssetsController;
|
|
676
|
-
_AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trackMetaMetricsEvent = new WeakMap(), _AssetsController_firstInitFetchReported = new WeakMap(),
|
|
652
|
+
_AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trackMetaMetricsEvent = new WeakMap(), _AssetsController_firstInitFetchReported = new WeakMap(), _AssetsController_controllerMutex = new WeakMap(), _AssetsController_activeSubscriptions = new WeakMap(), _AssetsController_enabledChains = new WeakMap(), _AssetsController_backendWebsocketDataSource = new WeakMap(), _AssetsController_accountsApiDataSource = new WeakMap(), _AssetsController_snapDataSource = new WeakMap(), _AssetsController_rpcDataSource = new WeakMap(), _AssetsController_stakedBalanceDataSource = new WeakMap(), _AssetsController_priceDataSource = new WeakMap(), _AssetsController_detectionMiddleware = new WeakMap(), _AssetsController_tokenDataSource = new WeakMap(), _AssetsController_unsubscribeBasicFunctionality = new WeakMap(), _AssetsController_instances = new WeakSet(), _AssetsController_selectedAccounts_get = function _AssetsController_selectedAccounts_get() {
|
|
677
653
|
return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
|
|
678
654
|
}, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
|
|
679
655
|
return [
|
|
@@ -723,27 +699,9 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
723
699
|
this.messenger.subscribe('NetworkEnablementController:stateChange', ({ enabledNetworkMap }) => {
|
|
724
700
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleEnabledNetworksChanged).call(this, enabledNetworkMap).catch(console.error);
|
|
725
701
|
});
|
|
726
|
-
//
|
|
727
|
-
this.messenger.subscribe('
|
|
728
|
-
|
|
729
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
730
|
-
}, client_controller_1.clientControllerSelectors.selectIsUiOpen);
|
|
731
|
-
this.messenger.subscribe('KeyringController:unlock', () => {
|
|
732
|
-
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, true, "f");
|
|
733
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
734
|
-
});
|
|
735
|
-
this.messenger.subscribe('KeyringController:lock', () => {
|
|
736
|
-
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, false, "f");
|
|
737
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
738
|
-
});
|
|
739
|
-
}, _AssetsController_updateActive = function _AssetsController_updateActive() {
|
|
740
|
-
const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") && __classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f");
|
|
741
|
-
if (shouldRun) {
|
|
742
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this);
|
|
743
|
-
}
|
|
744
|
-
else {
|
|
745
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
746
|
-
}
|
|
702
|
+
// Keyring lifecycle: start when unlocked, stop when locked
|
|
703
|
+
this.messenger.subscribe('KeyringController:unlock', () => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this));
|
|
704
|
+
this.messenger.subscribe('KeyringController:lock', () => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this));
|
|
747
705
|
}, _AssetsController_registerActionHandlers = function _AssetsController_registerActionHandlers() {
|
|
748
706
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
749
707
|
}, _AssetsController_executeMiddlewares =
|
|
@@ -801,8 +759,8 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
801
759
|
// STATE MANAGEMENT
|
|
802
760
|
// ============================================================================
|
|
803
761
|
async function _AssetsController_updateState(response) {
|
|
762
|
+
// Normalize asset IDs (checksum EVM addresses) before storing in state
|
|
804
763
|
const normalizedResponse = normalizeResponse(response);
|
|
805
|
-
const mode = normalizedResponse.updateMode ?? 'merge';
|
|
806
764
|
const releaseLock = await __classPrivateFieldGet(this, _AssetsController_controllerMutex, "f").acquire();
|
|
807
765
|
try {
|
|
808
766
|
const previousState = this.state;
|
|
@@ -828,27 +786,15 @@ async function _AssetsController_updateState(response) {
|
|
|
828
786
|
if (normalizedResponse.assetsBalance) {
|
|
829
787
|
for (const [accountId, accountBalances] of Object.entries(normalizedResponse.assetsBalance)) {
|
|
830
788
|
const previousBalances = previousState.assetsBalance[accountId] ?? {};
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
const next = {
|
|
836
|
-
...accountBalances,
|
|
837
|
-
};
|
|
838
|
-
for (const customId of customAssetIds) {
|
|
839
|
-
if (!(customId in next)) {
|
|
840
|
-
const prev = previousBalances[customId];
|
|
841
|
-
next[customId] =
|
|
842
|
-
prev ?? { amount: '0' };
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
return next;
|
|
846
|
-
})()
|
|
847
|
-
: { ...previousBalances, ...accountBalances };
|
|
848
|
-
for (const [assetId, balance] of Object.entries(effective)) {
|
|
789
|
+
if (!balances[accountId]) {
|
|
790
|
+
balances[accountId] = {};
|
|
791
|
+
}
|
|
792
|
+
for (const [assetId, balance] of Object.entries(accountBalances)) {
|
|
849
793
|
const previousBalance = previousBalances[assetId];
|
|
850
|
-
const
|
|
794
|
+
const balanceData = balance;
|
|
795
|
+
const newAmount = balanceData.amount;
|
|
851
796
|
const oldAmount = previousBalance?.amount;
|
|
797
|
+
// Track if balance actually changed
|
|
852
798
|
if (oldAmount !== newAmount) {
|
|
853
799
|
changedBalances.push({
|
|
854
800
|
accountId,
|
|
@@ -858,7 +804,7 @@ async function _AssetsController_updateState(response) {
|
|
|
858
804
|
});
|
|
859
805
|
}
|
|
860
806
|
}
|
|
861
|
-
balances[accountId]
|
|
807
|
+
Object.assign(balances[accountId], accountBalances);
|
|
862
808
|
}
|
|
863
809
|
}
|
|
864
810
|
// Update prices in state
|
|
@@ -1036,7 +982,7 @@ async function _AssetsController_updateState(response) {
|
|
|
1036
982
|
}
|
|
1037
983
|
__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").clear();
|
|
1038
984
|
}, _AssetsController_subscribeAssets = function _AssetsController_subscribeAssets() {
|
|
1039
|
-
if (__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).length === 0
|
|
985
|
+
if (__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).length === 0) {
|
|
1040
986
|
return;
|
|
1041
987
|
}
|
|
1042
988
|
// Subscribe to balance updates (batched by data source)
|