@metamask-previews/assets-controller 14.0.2-preview-36bc195a7 → 14.0.3-preview-a38f058
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 +13 -1
- package/dist/AssetsController.cjs +33 -129
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +5 -5
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +5 -5
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +33 -129
- package/dist/AssetsController.mjs.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -9,11 +9,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Changed
|
|
11
11
|
|
|
12
|
+
- **BREAKING:** `AssetsControllerMessenger` now requires `AccountTreeController:isInitialized`, `ClientController:getState`, and `KeyringController:isUnlocked` so lifecycle checks read controller state on demand instead of mirroring it from events ([#10059](https://github.com/MetaMask/core/pull/10059))
|
|
13
|
+
- Hosts that restrict which actions flow through the `AssetsController` messenger must delegate these three actions
|
|
14
|
+
- `AccountTreeController:stateChange` is no longer subscribed to; remove it from allowed events if your messenger wiring lists events explicitly
|
|
15
|
+
- Revert to `selectedAccountGroupChange` for account-group switches; snap accounts added mid-session are picked up on restart ([#10059](https://github.com/MetaMask/core/pull/10059))
|
|
16
|
+
- Bump `@metamask/transaction-controller` from `^69.6.1` to `^69.7.0` ([#10046](https://github.com/MetaMask/core/pull/10046))
|
|
17
|
+
|
|
18
|
+
## [14.0.3]
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
12
22
|
- Bump `@metamask/remote-feature-flag-controller` from `^6.0.0` to `^6.1.0` ([#9980](https://github.com/MetaMask/core/pull/9980))
|
|
13
23
|
|
|
14
24
|
### Fixed
|
|
15
25
|
|
|
16
26
|
- Clean up spam assets on keyring unlock, gated behind the `assetsUnifyState` remote feature flag's `useUnlockCleanup` property (disabled unless the flag explicitly enables it) ([#9973](https://github.com/MetaMask/core/pull/9973))
|
|
27
|
+
- Skip transaction-driven force `getAssets` refreshes on chains where AccountActivity already provides live WebSocket balance updates, avoiding a race with the Accounts API that could overwrite correct balances ([#10030](https://github.com/MetaMask/core/pull/10030))
|
|
17
28
|
|
|
18
29
|
## [14.0.2]
|
|
19
30
|
|
|
@@ -960,7 +971,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
960
971
|
- Refactor `RpcDataSource` to delegate polling to `BalanceFetcher` and `TokenDetector` services ([#7709](https://github.com/MetaMask/core/pull/7709))
|
|
961
972
|
- Refactor `BalanceFetcher` and `TokenDetector` to extend `StaticIntervalPollingControllerOnly` for independent polling management ([#7709](https://github.com/MetaMask/core/pull/7709))
|
|
962
973
|
|
|
963
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@14.0.
|
|
974
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@14.0.3...HEAD
|
|
975
|
+
[14.0.3]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@14.0.2...@metamask/assets-controller@14.0.3
|
|
964
976
|
[14.0.2]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@14.0.1...@metamask/assets-controller@14.0.2
|
|
965
977
|
[14.0.1]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@14.0.0...@metamask/assets-controller@14.0.1
|
|
966
978
|
[14.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@13.1.4...@metamask/assets-controller@14.0.0
|
|
@@ -13,7 +13,7 @@ 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_trace, _AssetsController_captureException, _AssetsController_firstInitFetchReported, _AssetsController_stateSizeReported, _AssetsController_emitStateSizeTrace,
|
|
16
|
+
var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trace, _AssetsController_captureException, _AssetsController_firstInitFetchReported, _AssetsController_stateSizeReported, _AssetsController_emitStateSizeTrace, _AssetsController_controllerMutex, _AssetsController_accountRefreshMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_getSelectedAccounts, _AssetsController_isAccountTreeInitialized, _AssetsController_isUiOpen, _AssetsController_isKeyringUnlocked, _AssetsController_accountActivityDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _AssetsController_stakedBalanceDataSource, _AssetsController_allBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_customAssetGraduationMiddleware, _AssetsController_rpcFallbackMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_queryApiClient, _AssetsController_onActiveChainsUpdated, _AssetsController_initializeNativeAssetsMap, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_refreshAssetsForTransaction, _AssetsController_runSpamCleanup, _AssetsController_updateActive, _AssetsController_runStartupRefresh, _AssetsController_registerActionHandlers, _AssetsController_handleActiveChainsUpdate, _AssetsController_executeMiddlewares, _AssetsController_assertNonEmptyAccountId, _AssetsController_normalizeAssetIdOrThrow, _AssetsController_fetchMissingPricesWithoutCache, _AssetsController_getNativeAssetMap, _AssetsController_isNativeAsset, _AssetsController_getAssetType, _AssetsController_resolveNativeAssetIds, _AssetsController_getNativeAssetIdsForEnabledChains, _AssetsController_getNativeAssetIdsForAccount, _AssetsController_getSlowPipelineChainIds, _AssetsController_ensureNativeBalancesDefaultZero, _AssetsController_ensureDefaultTrackedAssetsSeeded, _AssetsController_updateState, _AssetsController_getAssetsFromState, _AssetsController_getAssetFromState, _AssetsController_shouldHideNativeToken, _AssetsController_tokenStandardToAssetType, _AssetsController_start, _AssetsController_stop, _AssetsController_subscribeAssets, _AssetsController_subscribeAssetsBalance, _AssetsController_subscribeRpcCustomAssetsSupplement, _AssetsController_unsubscribeBySubscriptionKey, _AssetsController_subscribeStakedBalance, _AssetsController_buildChainToAccountsMap, _AssetsController_subscribeDataSource, _AssetsController_unsubscribeDataSource, _AssetsController_buildDataRequest, _AssetsController_getEnabledChainsForAccount, _AssetsController_handleAccountGroupChanged, _AssetsController_handleEnabledNetworksChanged, _AssetsController_handleNetworkAdded, _AssetsController_refreshActiveChainsOnNetworkSwitch, _AssetsController_getSelectedEvmChainIdFromNetworkState, _AssetsController_handleNetworkDidChange, _AssetsController_refreshAssetsAfterNetworkChange, _AssetsController_refreshAssetsAfterNetworkAdded;
|
|
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");
|
|
@@ -305,15 +305,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
305
305
|
_AssetsController_firstInitFetchReported.set(this, false);
|
|
306
306
|
/** Whether we have already reported state size for this session (reset on #stop). */
|
|
307
307
|
_AssetsController_stateSizeReported.set(this, false);
|
|
308
|
-
/** Whether the client (UI) is open. Combined with #keyringUnlocked for #updateActive. */
|
|
309
|
-
_AssetsController_uiOpen.set(this, false);
|
|
310
|
-
/** Whether the keyring is unlocked. Combined with #uiOpen for #updateActive. */
|
|
311
|
-
_AssetsController_keyringUnlocked.set(this, false);
|
|
312
|
-
/**
|
|
313
|
-
* Whether `AccountTreeController` has finished `init()`. Unlock / UI-open
|
|
314
|
-
* alone must not start fetches — the tree can still be mid-build.
|
|
315
|
-
*/
|
|
316
|
-
_AssetsController_accountTreeInitialized.set(this, false);
|
|
317
308
|
_AssetsController_controllerMutex.set(this, new async_mutex_1.Mutex());
|
|
318
309
|
/** Serializes account-switch fetch + subscribe to prevent overlapping races. */
|
|
319
310
|
_AssetsController_accountRefreshMutex.set(this, new async_mutex_1.Mutex());
|
|
@@ -326,12 +317,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
326
317
|
_AssetsController_activeSubscriptions.set(this, new Map());
|
|
327
318
|
/** Currently enabled chains from NetworkEnablementController */
|
|
328
319
|
_AssetsController_enabledChains.set(this, new Set());
|
|
329
|
-
/**
|
|
330
|
-
* Snapshot of account IDs that were active when the last subscription/fetch
|
|
331
|
-
* cycle ran. Used by #handleAccountTreeStateChange to skip redundant
|
|
332
|
-
* re-subscriptions when the account set hasn't actually changed.
|
|
333
|
-
*/
|
|
334
|
-
_AssetsController_lastKnownAccountIds.set(this, new Set());
|
|
335
320
|
_AssetsController_accountActivityDataSource.set(this, void 0);
|
|
336
321
|
_AssetsController_accountsApiDataSource.set(this, void 0);
|
|
337
322
|
_AssetsController_snapDataSource.set(this, void 0);
|
|
@@ -1185,7 +1170,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
1185
1170
|
}
|
|
1186
1171
|
}
|
|
1187
1172
|
exports.AssetsController = AssetsController;
|
|
1188
|
-
_AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trace = new WeakMap(), _AssetsController_captureException = new WeakMap(), _AssetsController_firstInitFetchReported = new WeakMap(), _AssetsController_stateSizeReported = new WeakMap(),
|
|
1173
|
+
_AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trace = new WeakMap(), _AssetsController_captureException = new WeakMap(), _AssetsController_firstInitFetchReported = new WeakMap(), _AssetsController_stateSizeReported = new WeakMap(), _AssetsController_controllerMutex = new WeakMap(), _AssetsController_accountRefreshMutex = new WeakMap(), _AssetsController_activeSubscriptions = new WeakMap(), _AssetsController_enabledChains = new WeakMap(), _AssetsController_accountActivityDataSource = 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_customAssetGraduationMiddleware = new WeakMap(), _AssetsController_rpcFallbackMiddleware = new WeakMap(), _AssetsController_tokenDataSource = new WeakMap(), _AssetsController_unsubscribeBasicFunctionality = new WeakMap(), _AssetsController_queryApiClient = new WeakMap(), _AssetsController_onActiveChainsUpdated = new WeakMap(), _AssetsController_instances = new WeakSet(), _AssetsController_emitStateSizeTrace = function _AssetsController_emitStateSizeTrace() {
|
|
1189
1174
|
if (!__classPrivateFieldGet(this, _AssetsController_trace, "f") || __classPrivateFieldGet(this, _AssetsController_stateSizeReported, "f")) {
|
|
1190
1175
|
return;
|
|
1191
1176
|
}
|
|
@@ -1238,6 +1223,12 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1238
1223
|
return [selectedAccount];
|
|
1239
1224
|
}
|
|
1240
1225
|
return [];
|
|
1226
|
+
}, _AssetsController_isAccountTreeInitialized = function _AssetsController_isAccountTreeInitialized() {
|
|
1227
|
+
return this.messenger.call('AccountTreeController:isInitialized');
|
|
1228
|
+
}, _AssetsController_isUiOpen = function _AssetsController_isUiOpen() {
|
|
1229
|
+
return client_controller_1.clientControllerSelectors.selectIsUiOpen(this.messenger.call('ClientController:getState'));
|
|
1230
|
+
}, _AssetsController_isKeyringUnlocked = function _AssetsController_isKeyringUnlocked() {
|
|
1231
|
+
return this.messenger.call('KeyringController:isUnlocked');
|
|
1241
1232
|
}, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
|
|
1242
1233
|
return [
|
|
1243
1234
|
__classPrivateFieldGet(this, _AssetsController_accountActivityDataSource, "f"),
|
|
@@ -1297,16 +1288,14 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1297
1288
|
}
|
|
1298
1289
|
return reference;
|
|
1299
1290
|
}, _AssetsController_subscribeToEvents = function _AssetsController_subscribeToEvents() {
|
|
1300
|
-
// Subscribe to account group changes (when user switches between account groups like Account 1 -> Account 2)
|
|
1301
1291
|
this.messenger.subscribe('AccountTreeController:selectedAccountGroupChange', (groupId, previousGroupId) => {
|
|
1302
1292
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleAccountGroupChanged).call(this, groupId, previousGroupId).catch(console.error);
|
|
1303
1293
|
});
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleAccountTreeStateChange).call(this);
|
|
1294
|
+
this.messenger.subscribe('AccountTreeController:initialized', () => {
|
|
1295
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1296
|
+
});
|
|
1297
|
+
this.messenger.subscribe('AccountTreeController:uninitialized', () => {
|
|
1298
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1310
1299
|
});
|
|
1311
1300
|
// Subscribe to network enablement changes (only enabledNetworkMap)
|
|
1312
1301
|
this.messenger.subscribe('NetworkEnablementController:stateChange', ({ enabledNetworkMap }) => {
|
|
@@ -1333,72 +1322,45 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1333
1322
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleNetworkDidChange).call(this, networkState).catch(console.error);
|
|
1334
1323
|
});
|
|
1335
1324
|
// Client + Keyring lifecycle: only run when UI is open AND keyring is unlocked
|
|
1336
|
-
this.messenger.subscribe('ClientController:stateChange', (
|
|
1337
|
-
__classPrivateFieldSet(this, _AssetsController_uiOpen, isUiOpen, "f");
|
|
1325
|
+
this.messenger.subscribe('ClientController:stateChange', () => {
|
|
1338
1326
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1339
1327
|
}, client_controller_1.clientControllerSelectors.selectIsUiOpen);
|
|
1340
1328
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
1341
1329
|
this.messenger.subscribe('KeyringController:unlock', async () => {
|
|
1342
|
-
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, true, "f");
|
|
1343
1330
|
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_runSpamCleanup).call(this).catch(() => {
|
|
1344
1331
|
/* Do nothing */
|
|
1345
1332
|
});
|
|
1346
1333
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1347
1334
|
});
|
|
1348
1335
|
this.messenger.subscribe('KeyringController:lock', () => {
|
|
1349
|
-
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, false, "f");
|
|
1350
1336
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1351
1337
|
});
|
|
1352
|
-
// Subscribe to unapproved transactions - TXs that need confirmation
|
|
1353
|
-
// Ensures
|
|
1338
|
+
// Subscribe to unapproved transactions - TXs that need confirmation.
|
|
1339
|
+
// Ensures balances for the account making the transaction are updated
|
|
1340
|
+
// (e.g. for gas estimations), except on AccountActivity-active chains.
|
|
1354
1341
|
this.messenger.subscribe('TransactionController:unapprovedTransactionAdded', (transactionMeta) => {
|
|
1355
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m",
|
|
1342
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_refreshAssetsForTransaction).call(this, transactionMeta);
|
|
1356
1343
|
});
|
|
1357
1344
|
// Post-tx refresh via the full fetch pipeline (Accounts API + RPC fallback).
|
|
1345
|
+
// Skipped for chains covered by AccountActivity (real-time WS updates).
|
|
1358
1346
|
// RpcDataSource also listens for transactionConfirmed, but only refreshes
|
|
1359
1347
|
// chains it owns via an active subscription.
|
|
1360
1348
|
this.messenger.subscribe('TransactionController:transactionConfirmed', (transactionMeta) => {
|
|
1361
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m",
|
|
1362
|
-
});
|
|
1363
|
-
// Start tracking only after the account tree is fully built. Unlock can
|
|
1364
|
-
// happen before `AccountTreeController.init()`, and `:stateChange` fires
|
|
1365
|
-
// for intermediate mutations during that build.
|
|
1366
|
-
this.messenger.subscribe('AccountTreeController:initialized', () => {
|
|
1367
|
-
__classPrivateFieldSet(this, _AssetsController_accountTreeInitialized, true, "f");
|
|
1368
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1349
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_refreshAssetsForTransaction).call(this, transactionMeta);
|
|
1369
1350
|
});
|
|
1370
|
-
|
|
1371
|
-
__classPrivateFieldSet(this, _AssetsController_accountTreeInitialized, false, "f");
|
|
1372
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1373
|
-
});
|
|
1374
|
-
}, _AssetsController_onUnapprovedTransactionAdded = function _AssetsController_onUnapprovedTransactionAdded(transactionMeta) {
|
|
1351
|
+
}, _AssetsController_refreshAssetsForTransaction = function _AssetsController_refreshAssetsForTransaction(transactionMeta) {
|
|
1375
1352
|
const hexChainId = transactionMeta.chainId;
|
|
1376
1353
|
if (!hexChainId) {
|
|
1377
1354
|
return;
|
|
1378
1355
|
}
|
|
1379
1356
|
const caipChainId = `eip155:${parseInt(hexChainId, 16)}`;
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
if (!matchedAccount) {
|
|
1386
|
-
return;
|
|
1387
|
-
}
|
|
1388
|
-
this.getAssets([matchedAccount], {
|
|
1389
|
-
chainIds: [caipChainId],
|
|
1390
|
-
forceUpdate: true,
|
|
1391
|
-
}).catch((error) => {
|
|
1392
|
-
log('Failed to refresh assets after unapproved transaction added', {
|
|
1393
|
-
error,
|
|
1394
|
-
});
|
|
1395
|
-
});
|
|
1396
|
-
}, _AssetsController_onTransactionConfirmed = function _AssetsController_onTransactionConfirmed(transactionMeta) {
|
|
1397
|
-
const hexChainId = transactionMeta.chainId;
|
|
1398
|
-
if (!hexChainId) {
|
|
1357
|
+
// AccountActivity pushes live balance updates for its active chains; a
|
|
1358
|
+
// force getAssets would be redundant and can race the WebSocket path.
|
|
1359
|
+
if (__classPrivateFieldGet(this, _AssetsController_accountActivityDataSource, "f")
|
|
1360
|
+
.getActiveChainsSync()
|
|
1361
|
+
.includes(caipChainId)) {
|
|
1399
1362
|
return;
|
|
1400
1363
|
}
|
|
1401
|
-
const caipChainId = `eip155:${parseInt(hexChainId, 16)}`;
|
|
1402
1364
|
const fromAddress = transactionMeta.txParams.from?.toLowerCase();
|
|
1403
1365
|
if (!fromAddress) {
|
|
1404
1366
|
return;
|
|
@@ -1411,11 +1373,11 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1411
1373
|
chainIds: [caipChainId],
|
|
1412
1374
|
forceUpdate: true,
|
|
1413
1375
|
}).catch((error) => {
|
|
1414
|
-
log('Failed to refresh assets after transaction
|
|
1376
|
+
log('Failed to refresh assets after transaction event', { error });
|
|
1415
1377
|
});
|
|
1416
1378
|
}, _AssetsController_runSpamCleanup = async function _AssetsController_runSpamCleanup() {
|
|
1417
1379
|
try {
|
|
1418
|
-
const shouldRun = __classPrivateFieldGet(this,
|
|
1380
|
+
const shouldRun = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isKeyringUnlocked).call(this) &&
|
|
1419
1381
|
__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this) &&
|
|
1420
1382
|
(0, healAssetsInfoMetadata_js_1.isUnlockCleanupEnabled)(this.messenger.call('RemoteFeatureFlagController:getState')
|
|
1421
1383
|
?.remoteFeatureFlags);
|
|
@@ -1447,67 +1409,15 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1447
1409
|
log('Failed to run spam cleanup', { error });
|
|
1448
1410
|
}
|
|
1449
1411
|
}, _AssetsController_updateActive = function _AssetsController_updateActive() {
|
|
1450
|
-
const shouldRun = __classPrivateFieldGet(this,
|
|
1412
|
+
const shouldRun = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isUiOpen).call(this) &&
|
|
1413
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isKeyringUnlocked).call(this) &&
|
|
1414
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isAccountTreeInitialized).call(this);
|
|
1451
1415
|
if (shouldRun) {
|
|
1452
1416
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this);
|
|
1453
1417
|
}
|
|
1454
1418
|
else {
|
|
1455
1419
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
1456
1420
|
}
|
|
1457
|
-
}, _AssetsController_handleAccountTreeStateChange = function _AssetsController_handleAccountTreeStateChange() {
|
|
1458
|
-
const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") &&
|
|
1459
|
-
__classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f") &&
|
|
1460
|
-
__classPrivateFieldGet(this, _AssetsController_accountTreeInitialized, "f") &&
|
|
1461
|
-
__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size > 0;
|
|
1462
|
-
if (!shouldRun) {
|
|
1463
|
-
return;
|
|
1464
|
-
}
|
|
1465
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1466
|
-
const currentIds = new Set(accounts.map((a) => a.id));
|
|
1467
|
-
const accountsChanged = currentIds.size !== __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size ||
|
|
1468
|
-
[...currentIds].some((id) => !__classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(id));
|
|
1469
|
-
if (!accountsChanged) {
|
|
1470
|
-
return;
|
|
1471
|
-
}
|
|
1472
|
-
const hasOverlap = [...currentIds].some((id) => __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(id));
|
|
1473
|
-
if (!hasOverlap && __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size > 0) {
|
|
1474
|
-
return;
|
|
1475
|
-
}
|
|
1476
|
-
log('Account tree changed with new accounts, re-subscribing', {
|
|
1477
|
-
previousCount: __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size,
|
|
1478
|
-
currentCount: currentIds.size,
|
|
1479
|
-
});
|
|
1480
|
-
const newAccounts = accounts.filter((account) => !__classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(account.id));
|
|
1481
|
-
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, currentIds, "f");
|
|
1482
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
1483
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureDefaultTrackedAssetsSeeded).call(this);
|
|
1484
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_runAccountTreeRefresh).call(this, accounts, newAccounts).catch((error) => {
|
|
1485
|
-
log('Failed to refresh assets after tree change', error);
|
|
1486
|
-
});
|
|
1487
|
-
}, _AssetsController_runAccountTreeRefresh = async function _AssetsController_runAccountTreeRefresh(accounts, newAccounts = []) {
|
|
1488
|
-
const releaseLock = await __classPrivateFieldGet(this, _AssetsController_accountRefreshMutex, "f").acquire();
|
|
1489
|
-
try {
|
|
1490
|
-
await this.getAssets(accounts, {
|
|
1491
|
-
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
1492
|
-
forceUpdate: true,
|
|
1493
|
-
});
|
|
1494
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this, { skipInitialFetch: true });
|
|
1495
|
-
if (newAccounts.length > 0) {
|
|
1496
|
-
await this.getAssets(newAccounts, {
|
|
1497
|
-
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
1498
|
-
forceUpdate: true,
|
|
1499
|
-
});
|
|
1500
|
-
}
|
|
1501
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_fetchMissingPricesWithoutCache).call(this, accounts, [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
|
|
1502
|
-
}
|
|
1503
|
-
catch (error) {
|
|
1504
|
-
log('Failed to fetch assets after tree change', error);
|
|
1505
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this, { skipInitialFetch: true });
|
|
1506
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_fetchMissingPricesWithoutCache).call(this, accounts, [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
|
|
1507
|
-
}
|
|
1508
|
-
finally {
|
|
1509
|
-
releaseLock();
|
|
1510
|
-
}
|
|
1511
1421
|
}, _AssetsController_runStartupRefresh =
|
|
1512
1422
|
/**
|
|
1513
1423
|
* Force-fetch balances then subscribe. Used on unlock / first startup.
|
|
@@ -1542,7 +1452,7 @@ async function _AssetsController_runStartupRefresh(accounts) {
|
|
|
1542
1452
|
}, _AssetsController_registerActionHandlers = function _AssetsController_registerActionHandlers() {
|
|
1543
1453
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
1544
1454
|
}, _AssetsController_handleActiveChainsUpdate = function _AssetsController_handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
|
|
1545
|
-
if (!__classPrivateFieldGet(this,
|
|
1455
|
+
if (!__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isUiOpen).call(this) || !__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isKeyringUnlocked).call(this) || !__classPrivateFieldGet(this, _AssetsController_isEnabled, "f").call(this)) {
|
|
1546
1456
|
return;
|
|
1547
1457
|
}
|
|
1548
1458
|
log('Data source active chains changed', {
|
|
@@ -2115,7 +2025,6 @@ async function _AssetsController_executeMiddlewares(params) {
|
|
|
2115
2025
|
selectedAccountCount: accounts.length,
|
|
2116
2026
|
enabledChainCount: chainIds.length,
|
|
2117
2027
|
});
|
|
2118
|
-
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
2119
2028
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_runStartupRefresh).call(this, accounts).catch((error) => {
|
|
2120
2029
|
log('Failed to start asset tracking', error);
|
|
2121
2030
|
});
|
|
@@ -2126,7 +2035,6 @@ async function _AssetsController_executeMiddlewares(params) {
|
|
|
2126
2035
|
});
|
|
2127
2036
|
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, false, "f");
|
|
2128
2037
|
__classPrivateFieldSet(this, _AssetsController_stateSizeReported, false, "f");
|
|
2129
|
-
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(), "f");
|
|
2130
2038
|
// Stop price subscription first (uses direct messenger call)
|
|
2131
2039
|
this.unsubscribeAssetsPrice();
|
|
2132
2040
|
// Stop balance subscriptions by properly notifying data sources via messenger
|
|
@@ -2395,7 +2303,6 @@ async function _AssetsController_executeMiddlewares(params) {
|
|
|
2395
2303
|
// EVENT HANDLERS
|
|
2396
2304
|
// ============================================================================
|
|
2397
2305
|
async function _AssetsController_handleAccountGroupChanged(groupId, previousGroupId = '') {
|
|
2398
|
-
// The selected account group can be empty during onboarding or wallet reset.
|
|
2399
2306
|
if (!groupId) {
|
|
2400
2307
|
return;
|
|
2401
2308
|
}
|
|
@@ -2416,7 +2323,6 @@ async function _AssetsController_handleAccountGroupChanged(groupId, previousGrou
|
|
|
2416
2323
|
groupId,
|
|
2417
2324
|
previousGroupId,
|
|
2418
2325
|
});
|
|
2419
|
-
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
2420
2326
|
const releaseLock = await __classPrivateFieldGet(this, _AssetsController_accountRefreshMutex, "f").acquire();
|
|
2421
2327
|
try {
|
|
2422
2328
|
if (accounts.length > 0) {
|
|
@@ -2427,8 +2333,6 @@ async function _AssetsController_handleAccountGroupChanged(groupId, previousGrou
|
|
|
2427
2333
|
}
|
|
2428
2334
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
2429
2335
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureDefaultTrackedAssetsSeeded).call(this);
|
|
2430
|
-
// Subscribe after seed so the price poll sees natives / defaults.
|
|
2431
|
-
// Balances were just force-fetched — skip AccountsApi's subscribe-time poll.
|
|
2432
2336
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this, { skipInitialFetch: true });
|
|
2433
2337
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_fetchMissingPricesWithoutCache).call(this, accounts, [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
|
|
2434
2338
|
}
|
|
@@ -2526,7 +2430,7 @@ async function _AssetsController_refreshActiveChainsOnNetworkSwitch() {
|
|
|
2526
2430
|
* @param networkState - NetworkController state after the switch.
|
|
2527
2431
|
*/
|
|
2528
2432
|
async function _AssetsController_handleNetworkDidChange(networkState) {
|
|
2529
|
-
if (!__classPrivateFieldGet(this,
|
|
2433
|
+
if (!__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isUiOpen).call(this) || !__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isKeyringUnlocked).call(this) || !__classPrivateFieldGet(this, _AssetsController_isEnabled, "f").call(this)) {
|
|
2530
2434
|
return;
|
|
2531
2435
|
}
|
|
2532
2436
|
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|