@metamask-previews/assets-controller 2.0.2-preview-980f677 → 2.0.2-preview-3d4d0d0ef
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 -8
- package/dist/AssetsController.cjs +27 -118
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +4 -16
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +4 -16
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +27 -118
- 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 +14 -20
- package/dist/data-sources/PriceDataSource.cjs.map +1 -1
- package/dist/data-sources/PriceDataSource.d.cts +2 -2
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
- package/dist/data-sources/PriceDataSource.d.mts +2 -2
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
- package/dist/data-sources/PriceDataSource.mjs +14 -20
- 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 -16
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +0 -16
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +3 -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,14 +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 `currentCurrency` state (ISO 4217 code, default `'usd'`) and `setCurrentCurrency(currentCurrency)` to `AssetsController`. Changing the currency updates state and triggers a one-off price refetch so displayed prices use the new currency ([#7991](https://github.com/MetaMask/core/pull/7991))
|
|
13
|
-
- Add support for forcibly updating prices ([#7991](https://github.com/MetaMask/core/pull/7991))
|
|
14
|
-
- 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))
|
|
15
|
-
- 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))
|
|
16
|
-
- 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))
|
|
17
|
-
|
|
18
10
|
### Changed
|
|
19
11
|
|
|
20
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
|
|
@@ -64,7 +62,6 @@ function getDefaultAssetsControllerState() {
|
|
|
64
62
|
assetsPrice: {},
|
|
65
63
|
customAssets: {},
|
|
66
64
|
assetPreferences: {},
|
|
67
|
-
selectedCurrency: 'usd',
|
|
68
65
|
};
|
|
69
66
|
}
|
|
70
67
|
exports.getDefaultAssetsControllerState = getDefaultAssetsControllerState;
|
|
@@ -102,12 +99,6 @@ const stateMetadata = {
|
|
|
102
99
|
includeInDebugSnapshot: false,
|
|
103
100
|
usedInUi: true,
|
|
104
101
|
},
|
|
105
|
-
selectedCurrency: {
|
|
106
|
-
persist: true,
|
|
107
|
-
includeInStateLogs: false,
|
|
108
|
-
includeInDebugSnapshot: false,
|
|
109
|
-
usedInUi: true,
|
|
110
|
-
},
|
|
111
102
|
};
|
|
112
103
|
// ============================================================================
|
|
113
104
|
// HELPER FUNCTIONS
|
|
@@ -161,9 +152,6 @@ function normalizeResponse(response) {
|
|
|
161
152
|
if (response.errors) {
|
|
162
153
|
normalized.errors = { ...response.errors };
|
|
163
154
|
}
|
|
164
|
-
if (response.updateMode) {
|
|
165
|
-
normalized.updateMode = response.updateMode;
|
|
166
|
-
}
|
|
167
155
|
return normalized;
|
|
168
156
|
}
|
|
169
157
|
// ============================================================================
|
|
@@ -185,10 +173,8 @@ function normalizeResponse(response) {
|
|
|
185
173
|
* based on which chains they support. When active chains change, the controller
|
|
186
174
|
* dynamically adjusts subscriptions.
|
|
187
175
|
*
|
|
188
|
-
* 4. **
|
|
189
|
-
*
|
|
190
|
-
* Stops when either the UI closes or the keyring locks. See client-controller
|
|
191
|
-
* 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.
|
|
192
178
|
*
|
|
193
179
|
* ## Architecture
|
|
194
180
|
*
|
|
@@ -218,10 +204,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
218
204
|
_AssetsController_trackMetaMetricsEvent.set(this, void 0);
|
|
219
205
|
/** Whether we have already reported first init fetch for this session (reset on #stop). */
|
|
220
206
|
_AssetsController_firstInitFetchReported.set(this, false);
|
|
221
|
-
/** Whether the client (UI) is open. Combined with #keyringUnlocked for #updateActive. */
|
|
222
|
-
_AssetsController_uiOpen.set(this, false);
|
|
223
|
-
/** Whether the keyring is unlocked. Combined with #uiOpen for #updateActive. */
|
|
224
|
-
_AssetsController_keyringUnlocked.set(this, false);
|
|
225
207
|
_AssetsController_controllerMutex.set(this, new async_mutex_1.Mutex());
|
|
226
208
|
/**
|
|
227
209
|
* Active balance subscriptions keyed by account ID.
|
|
@@ -278,7 +260,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
278
260
|
}), "f");
|
|
279
261
|
__classPrivateFieldSet(this, _AssetsController_priceDataSource, new PriceDataSource_1.PriceDataSource({
|
|
280
262
|
queryApiClient,
|
|
281
|
-
getSelectedCurrency: () => this.state.selectedCurrency,
|
|
282
263
|
...priceDataSourceConfig,
|
|
283
264
|
}), "f");
|
|
284
265
|
__classPrivateFieldSet(this, _AssetsController_detectionMiddleware, new DetectionMiddleware_1.DetectionMiddleware(), "f");
|
|
@@ -292,7 +273,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
292
273
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
|
|
293
274
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
|
|
294
275
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
|
|
295
|
-
// Subscriptions start only
|
|
276
|
+
// Subscriptions start only on KeyringController:unlock -> #start(), not here.
|
|
296
277
|
// Subscribe to basic-functionality changes after construction so a synchronous
|
|
297
278
|
// onChange during subscribe cannot run before data sources are initialized.
|
|
298
279
|
if (subscribeToBasicFunctionalityChange) {
|
|
@@ -356,9 +337,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
356
337
|
const chainIds = options?.chainIds ?? [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")];
|
|
357
338
|
const assetTypes = options?.assetTypes ?? ['fungible'];
|
|
358
339
|
const dataTypes = options?.dataTypes ?? ['balance', 'metadata', 'price'];
|
|
359
|
-
if (accounts.length === 0 || chainIds.length === 0) {
|
|
360
|
-
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
|
|
361
|
-
}
|
|
362
340
|
// Collect custom assets for all requested accounts
|
|
363
341
|
const customAssets = [];
|
|
364
342
|
for (const account of accounts) {
|
|
@@ -372,21 +350,16 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
372
350
|
dataTypes,
|
|
373
351
|
customAssets: customAssets.length > 0 ? customAssets : undefined,
|
|
374
352
|
forceUpdate: true,
|
|
375
|
-
assetsForPriceUpdate: options?.assetsForPriceUpdate,
|
|
376
353
|
});
|
|
377
354
|
const sources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
378
355
|
? [
|
|
379
|
-
(
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
384
|
-
]),
|
|
356
|
+
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
|
|
357
|
+
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
|
|
358
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
359
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
385
360
|
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
386
|
-
(
|
|
387
|
-
|
|
388
|
-
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
|
|
389
|
-
]),
|
|
361
|
+
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
|
|
362
|
+
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
|
|
390
363
|
]
|
|
391
364
|
: [
|
|
392
365
|
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
@@ -394,7 +367,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
394
367
|
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
395
368
|
];
|
|
396
369
|
const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
|
|
397
|
-
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this,
|
|
370
|
+
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
|
|
398
371
|
if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
|
|
399
372
|
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, true, "f");
|
|
400
373
|
const durationMs = Date.now() - startTime;
|
|
@@ -557,34 +530,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
557
530
|
});
|
|
558
531
|
}
|
|
559
532
|
// ============================================================================
|
|
560
|
-
// CURRENT CURRENCY MANAGEMENT
|
|
561
|
-
// ============================================================================
|
|
562
|
-
/**
|
|
563
|
-
* Set the current currency.
|
|
564
|
-
*
|
|
565
|
-
* @param selectedCurrency - The ISO 4217 currency code to set.
|
|
566
|
-
*/
|
|
567
|
-
setSelectedCurrency(selectedCurrency) {
|
|
568
|
-
const previousCurrency = this.state.selectedCurrency;
|
|
569
|
-
if (previousCurrency === selectedCurrency) {
|
|
570
|
-
return;
|
|
571
|
-
}
|
|
572
|
-
this.update((state) => {
|
|
573
|
-
state.selectedCurrency = selectedCurrency;
|
|
574
|
-
});
|
|
575
|
-
log('Current currency changed', {
|
|
576
|
-
previousCurrency,
|
|
577
|
-
selectedCurrency,
|
|
578
|
-
});
|
|
579
|
-
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), {
|
|
580
|
-
forceUpdate: true,
|
|
581
|
-
dataTypes: ['price'],
|
|
582
|
-
assetsForPriceUpdate: Object.values(this.state.assetsBalance).flatMap((balances) => Object.keys(balances)),
|
|
583
|
-
}).catch((error) => {
|
|
584
|
-
log('Failed to fetch asset prices after current currency change', error);
|
|
585
|
-
});
|
|
586
|
-
}
|
|
587
|
-
// ============================================================================
|
|
588
533
|
// SUBSCRIPTIONS
|
|
589
534
|
// ============================================================================
|
|
590
535
|
/**
|
|
@@ -662,15 +607,9 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
662
607
|
hasBalance: Boolean(response.assetsBalance),
|
|
663
608
|
hasPrice: Boolean(response.assetsPrice),
|
|
664
609
|
});
|
|
665
|
-
// Run through enrichment middlewares (Detection
|
|
610
|
+
// Run through enrichment middlewares (Event Stack: Detection → Token → Price)
|
|
666
611
|
// Include 'metadata' in dataTypes so TokenDataSource runs to enrich detected assets
|
|
667
|
-
const { response: enrichedResponse } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [
|
|
668
|
-
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
669
|
-
(0, ParallelMiddleware_1.createParallelMiddleware)([
|
|
670
|
-
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
|
|
671
|
-
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
|
|
672
|
-
]),
|
|
673
|
-
], 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 ?? {
|
|
674
613
|
accountsWithSupportedChains: [],
|
|
675
614
|
chainIds: [],
|
|
676
615
|
dataTypes: ['balance', 'metadata', 'price'],
|
|
@@ -710,7 +649,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
710
649
|
}
|
|
711
650
|
}
|
|
712
651
|
exports.AssetsController = AssetsController;
|
|
713
|
-
_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() {
|
|
714
653
|
return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
|
|
715
654
|
}, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
|
|
716
655
|
return [
|
|
@@ -760,27 +699,9 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
760
699
|
this.messenger.subscribe('NetworkEnablementController:stateChange', ({ enabledNetworkMap }) => {
|
|
761
700
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleEnabledNetworksChanged).call(this, enabledNetworkMap).catch(console.error);
|
|
762
701
|
});
|
|
763
|
-
//
|
|
764
|
-
this.messenger.subscribe('
|
|
765
|
-
|
|
766
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
767
|
-
}, client_controller_1.clientControllerSelectors.selectIsUiOpen);
|
|
768
|
-
this.messenger.subscribe('KeyringController:unlock', () => {
|
|
769
|
-
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, true, "f");
|
|
770
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
771
|
-
});
|
|
772
|
-
this.messenger.subscribe('KeyringController:lock', () => {
|
|
773
|
-
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, false, "f");
|
|
774
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
775
|
-
});
|
|
776
|
-
}, _AssetsController_updateActive = function _AssetsController_updateActive() {
|
|
777
|
-
const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") && __classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f");
|
|
778
|
-
if (shouldRun) {
|
|
779
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this);
|
|
780
|
-
}
|
|
781
|
-
else {
|
|
782
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
783
|
-
}
|
|
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));
|
|
784
705
|
}, _AssetsController_registerActionHandlers = function _AssetsController_registerActionHandlers() {
|
|
785
706
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
786
707
|
}, _AssetsController_executeMiddlewares =
|
|
@@ -838,8 +759,8 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
838
759
|
// STATE MANAGEMENT
|
|
839
760
|
// ============================================================================
|
|
840
761
|
async function _AssetsController_updateState(response) {
|
|
762
|
+
// Normalize asset IDs (checksum EVM addresses) before storing in state
|
|
841
763
|
const normalizedResponse = normalizeResponse(response);
|
|
842
|
-
const mode = normalizedResponse.updateMode ?? 'merge';
|
|
843
764
|
const releaseLock = await __classPrivateFieldGet(this, _AssetsController_controllerMutex, "f").acquire();
|
|
844
765
|
try {
|
|
845
766
|
const previousState = this.state;
|
|
@@ -865,27 +786,15 @@ async function _AssetsController_updateState(response) {
|
|
|
865
786
|
if (normalizedResponse.assetsBalance) {
|
|
866
787
|
for (const [accountId, accountBalances] of Object.entries(normalizedResponse.assetsBalance)) {
|
|
867
788
|
const previousBalances = previousState.assetsBalance[accountId] ?? {};
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
const next = {
|
|
873
|
-
...accountBalances,
|
|
874
|
-
};
|
|
875
|
-
for (const customId of customAssetIds) {
|
|
876
|
-
if (!(customId in next)) {
|
|
877
|
-
const prev = previousBalances[customId];
|
|
878
|
-
next[customId] =
|
|
879
|
-
prev ?? { amount: '0' };
|
|
880
|
-
}
|
|
881
|
-
}
|
|
882
|
-
return next;
|
|
883
|
-
})()
|
|
884
|
-
: { ...previousBalances, ...accountBalances };
|
|
885
|
-
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)) {
|
|
886
793
|
const previousBalance = previousBalances[assetId];
|
|
887
|
-
const
|
|
794
|
+
const balanceData = balance;
|
|
795
|
+
const newAmount = balanceData.amount;
|
|
888
796
|
const oldAmount = previousBalance?.amount;
|
|
797
|
+
// Track if balance actually changed
|
|
889
798
|
if (oldAmount !== newAmount) {
|
|
890
799
|
changedBalances.push({
|
|
891
800
|
accountId,
|
|
@@ -895,7 +804,7 @@ async function _AssetsController_updateState(response) {
|
|
|
895
804
|
});
|
|
896
805
|
}
|
|
897
806
|
}
|
|
898
|
-
balances[accountId]
|
|
807
|
+
Object.assign(balances[accountId], accountBalances);
|
|
899
808
|
}
|
|
900
809
|
}
|
|
901
810
|
// Update prices in state
|
|
@@ -1073,7 +982,7 @@ async function _AssetsController_updateState(response) {
|
|
|
1073
982
|
}
|
|
1074
983
|
__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").clear();
|
|
1075
984
|
}, _AssetsController_subscribeAssets = function _AssetsController_subscribeAssets() {
|
|
1076
|
-
if (__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).length === 0
|
|
985
|
+
if (__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).length === 0) {
|
|
1077
986
|
return;
|
|
1078
987
|
}
|
|
1079
988
|
// Subscribe to balance updates (batched by data source)
|