@metamask-previews/assets-controller 14.0.3-preview-a302de5c3 → 14.0.3-preview-e12b5ece6
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 +24 -1
- package/dist/AssetsController.cjs +24 -103
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +12 -5
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +12 -5
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +24 -103
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +9 -2
- 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 +9 -2
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +9 -0
- 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 +9 -0
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.cjs +142 -14
- package/dist/middlewares/RpcFallbackMiddleware.cjs.map +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.d.cts +14 -6
- package/dist/middlewares/RpcFallbackMiddleware.d.cts.map +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.d.mts +14 -6
- package/dist/middlewares/RpcFallbackMiddleware.d.mts.map +1 -1
- package/dist/middlewares/RpcFallbackMiddleware.mjs +142 -14
- package/dist/middlewares/RpcFallbackMiddleware.mjs.map +1 -1
- package/dist/selectors/balance.cjs +9 -4
- package/dist/selectors/balance.cjs.map +1 -1
- package/dist/selectors/balance.d.cts.map +1 -1
- package/dist/selectors/balance.d.mts.map +1 -1
- package/dist/selectors/balance.mjs +9 -4
- package/dist/selectors/balance.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +8 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +8 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,9 +7,32 @@ 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 `bypassServerCache` option to `getAssets` ([#10068](https://github.com/MetaMask/core/pull/10068))
|
|
13
|
+
- When true (only meaningful together with `forceUpdate`), the Accounts API request also bypasses the API's server-side 60s cache via a random `bypassServerCache` query param, instead of only the client-side query cache.
|
|
14
|
+
|
|
10
15
|
### Changed
|
|
11
16
|
|
|
12
|
-
- Bump `@metamask/
|
|
17
|
+
- Bump `@metamask/phishing-controller` from `^17.4.0` to `^17.4.1` ([#10080](https://github.com/MetaMask/core/pull/10080))
|
|
18
|
+
- **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))
|
|
19
|
+
- Hosts that restrict which actions flow through the `AssetsController` messenger must delegate these three actions
|
|
20
|
+
- `AccountTreeController:stateChange` is no longer subscribed to; remove it from allowed events if your messenger wiring lists events explicitly
|
|
21
|
+
- 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))
|
|
22
|
+
- Bump `@metamask/transaction-controller` from `^69.6.1` to `^69.8.0` ([#10046](https://github.com/MetaMask/core/pull/10046), [#10080](https://github.com/MetaMask/core/pull/10080))
|
|
23
|
+
- Bump `@metamask/utils` from `^11.11.0` to `^11.12.0` ([#10076](https://github.com/MetaMask/core/pull/10076))
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Exclude assets that have no `assetsInfo` metadata from the aggregated balance selectors ([#10084](https://github.com/MetaMask/core/pull/10084))
|
|
28
|
+
- `getAggregatedBalanceForAccount`, `getAggregatedBalanceForAccountIds`, `calculateBalanceForAllWallets`, and `calculateBalanceChangeForAccountGroup` previously included such assets in `entries` (without `symbol`/`name`/`decimals`) and in fiat totals; a balance now only counts once its metadata is known
|
|
29
|
+
- Run `RpcFallbackMiddleware` on Accounts API poll updates (`handleAssetsUpdate`), not only in the forced `getAssets` fast pipeline, so a stale amount for tokens omitted from poll responses no longer survives between forced refreshes while the wallet sits open ([#10078](https://github.com/MetaMask/core/pull/10078))
|
|
30
|
+
- WebSocket, RPC, and Snap updates are excluded: WebSocket pushes are incremental single-asset updates where absence is not staleness, and RPC/Snap updates must not re-trigger RPC
|
|
31
|
+
- Fix stale balances shown right after a transaction confirms: the post-confirmation refresh now calls `getAssets` with `bypassServerCache: true`, since WebSocket events do not invalidate the Accounts API's server-side cache and a plain refetch within its 60s window returns the pre-transaction snapshot ([#10068](https://github.com/MetaMask/core/pull/10068))
|
|
32
|
+
- Fix stale balances surviving in state when the Accounts API returns no entry for an asset it does not index (or reports an untrusted `0`), which the `merge` update kept as the previous amount ([#10061](https://github.com/MetaMask/core/pull/10061))
|
|
33
|
+
- `RpcFallbackMiddleware` now re-reads EVM assets tracked in state (`assetsBalance` or `customAssets`) whose balance is empty in the current response, passing them to `RpcDataSource` as `customAssets`, in addition to its existing retry of chains in `response.errors`. Staking vault assets and assets on chains outside the request or the account's supported set are excluded.
|
|
34
|
+
- Balances from chains the RPC read itself failed on are discarded instead of merged, so a transient RPC failure can no longer overwrite a correct upstream balance with the failure stub's native `0` (or, previously, falsely clear the chain's error as "recovered"). The chain's error is kept only when it was already errored upstream.
|
|
35
|
+
- `RpcDataSource.assetsMiddleware` now propagates per-chain fetch errors onto the pipeline response (previously it only used them internally), which is what lets `RpcFallbackMiddleware` identify the failed chains.
|
|
13
36
|
|
|
14
37
|
## [14.0.3]
|
|
15
38
|
|
|
@@ -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);
|
|
@@ -488,6 +473,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
488
473
|
dataTypes,
|
|
489
474
|
customAssets: customAssets.length > 0 ? customAssets : undefined,
|
|
490
475
|
forceUpdate: true,
|
|
476
|
+
bypassServerCache: options?.bypassServerCache,
|
|
491
477
|
assetsForPriceUpdate: options?.assetsForPriceUpdate,
|
|
492
478
|
});
|
|
493
479
|
// Fast pipeline: accountsApi + stakedBalance → detection → token + price.
|
|
@@ -1096,6 +1082,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
1096
1082
|
// detection, so spam is never detected, enriched, priced or persisted.
|
|
1097
1083
|
const shouldFilterOccurrences = sourceId === 'AccountActivityDataSource' &&
|
|
1098
1084
|
__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this);
|
|
1085
|
+
const shouldRunRpcFallback = sourceId === 'AccountsApiDataSource';
|
|
1099
1086
|
const enrichmentSources = [
|
|
1100
1087
|
...(shouldGraduateCustomAssets
|
|
1101
1088
|
? [__classPrivateFieldGet(this, _AssetsController_customAssetGraduationMiddleware, "f")]
|
|
@@ -1108,6 +1095,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
1108
1095
|
},
|
|
1109
1096
|
]
|
|
1110
1097
|
: []),
|
|
1098
|
+
...(shouldRunRpcFallback ? [__classPrivateFieldGet(this, _AssetsController_rpcFallbackMiddleware, "f")] : []),
|
|
1111
1099
|
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
1112
1100
|
];
|
|
1113
1101
|
if (__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
|
|
@@ -1185,7 +1173,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
1185
1173
|
}
|
|
1186
1174
|
}
|
|
1187
1175
|
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(),
|
|
1176
|
+
_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
1177
|
if (!__classPrivateFieldGet(this, _AssetsController_trace, "f") || __classPrivateFieldGet(this, _AssetsController_stateSizeReported, "f")) {
|
|
1190
1178
|
return;
|
|
1191
1179
|
}
|
|
@@ -1238,6 +1226,12 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1238
1226
|
return [selectedAccount];
|
|
1239
1227
|
}
|
|
1240
1228
|
return [];
|
|
1229
|
+
}, _AssetsController_isAccountTreeInitialized = function _AssetsController_isAccountTreeInitialized() {
|
|
1230
|
+
return this.messenger.call('AccountTreeController:isInitialized');
|
|
1231
|
+
}, _AssetsController_isUiOpen = function _AssetsController_isUiOpen() {
|
|
1232
|
+
return client_controller_1.clientControllerSelectors.selectIsUiOpen(this.messenger.call('ClientController:getState'));
|
|
1233
|
+
}, _AssetsController_isKeyringUnlocked = function _AssetsController_isKeyringUnlocked() {
|
|
1234
|
+
return this.messenger.call('KeyringController:isUnlocked');
|
|
1241
1235
|
}, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
|
|
1242
1236
|
return [
|
|
1243
1237
|
__classPrivateFieldGet(this, _AssetsController_accountActivityDataSource, "f"),
|
|
@@ -1297,16 +1291,14 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1297
1291
|
}
|
|
1298
1292
|
return reference;
|
|
1299
1293
|
}, _AssetsController_subscribeToEvents = function _AssetsController_subscribeToEvents() {
|
|
1300
|
-
// Subscribe to account group changes (when user switches between account groups like Account 1 -> Account 2)
|
|
1301
1294
|
this.messenger.subscribe('AccountTreeController:selectedAccountGroupChange', (groupId, previousGroupId) => {
|
|
1302
1295
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleAccountGroupChanged).call(this, groupId, previousGroupId).catch(console.error);
|
|
1303
1296
|
});
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleAccountTreeStateChange).call(this);
|
|
1297
|
+
this.messenger.subscribe('AccountTreeController:initialized', () => {
|
|
1298
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1299
|
+
});
|
|
1300
|
+
this.messenger.subscribe('AccountTreeController:uninitialized', () => {
|
|
1301
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1310
1302
|
});
|
|
1311
1303
|
// Subscribe to network enablement changes (only enabledNetworkMap)
|
|
1312
1304
|
this.messenger.subscribe('NetworkEnablementController:stateChange', ({ enabledNetworkMap }) => {
|
|
@@ -1333,20 +1325,17 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1333
1325
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleNetworkDidChange).call(this, networkState).catch(console.error);
|
|
1334
1326
|
});
|
|
1335
1327
|
// 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");
|
|
1328
|
+
this.messenger.subscribe('ClientController:stateChange', () => {
|
|
1338
1329
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1339
1330
|
}, client_controller_1.clientControllerSelectors.selectIsUiOpen);
|
|
1340
1331
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
1341
1332
|
this.messenger.subscribe('KeyringController:unlock', async () => {
|
|
1342
|
-
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, true, "f");
|
|
1343
1333
|
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_runSpamCleanup).call(this).catch(() => {
|
|
1344
1334
|
/* Do nothing */
|
|
1345
1335
|
});
|
|
1346
1336
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1347
1337
|
});
|
|
1348
1338
|
this.messenger.subscribe('KeyringController:lock', () => {
|
|
1349
|
-
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, false, "f");
|
|
1350
1339
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1351
1340
|
});
|
|
1352
1341
|
// Subscribe to unapproved transactions - TXs that need confirmation.
|
|
@@ -1362,17 +1351,6 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1362
1351
|
this.messenger.subscribe('TransactionController:transactionConfirmed', (transactionMeta) => {
|
|
1363
1352
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_refreshAssetsForTransaction).call(this, transactionMeta);
|
|
1364
1353
|
});
|
|
1365
|
-
// Start tracking only after the account tree is fully built. Unlock can
|
|
1366
|
-
// happen before `AccountTreeController.init()`, and `:stateChange` fires
|
|
1367
|
-
// for intermediate mutations during that build.
|
|
1368
|
-
this.messenger.subscribe('AccountTreeController:initialized', () => {
|
|
1369
|
-
__classPrivateFieldSet(this, _AssetsController_accountTreeInitialized, true, "f");
|
|
1370
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1371
|
-
});
|
|
1372
|
-
this.messenger.subscribe('AccountTreeController:uninitialized', () => {
|
|
1373
|
-
__classPrivateFieldSet(this, _AssetsController_accountTreeInitialized, false, "f");
|
|
1374
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
1375
|
-
});
|
|
1376
1354
|
}, _AssetsController_refreshAssetsForTransaction = function _AssetsController_refreshAssetsForTransaction(transactionMeta) {
|
|
1377
1355
|
const hexChainId = transactionMeta.chainId;
|
|
1378
1356
|
if (!hexChainId) {
|
|
@@ -1397,12 +1375,13 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1397
1375
|
this.getAssets([matchedAccount], {
|
|
1398
1376
|
chainIds: [caipChainId],
|
|
1399
1377
|
forceUpdate: true,
|
|
1378
|
+
bypassServerCache: true,
|
|
1400
1379
|
}).catch((error) => {
|
|
1401
1380
|
log('Failed to refresh assets after transaction event', { error });
|
|
1402
1381
|
});
|
|
1403
1382
|
}, _AssetsController_runSpamCleanup = async function _AssetsController_runSpamCleanup() {
|
|
1404
1383
|
try {
|
|
1405
|
-
const shouldRun = __classPrivateFieldGet(this,
|
|
1384
|
+
const shouldRun = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isKeyringUnlocked).call(this) &&
|
|
1406
1385
|
__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this) &&
|
|
1407
1386
|
(0, healAssetsInfoMetadata_js_1.isUnlockCleanupEnabled)(this.messenger.call('RemoteFeatureFlagController:getState')
|
|
1408
1387
|
?.remoteFeatureFlags);
|
|
@@ -1434,67 +1413,15 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1434
1413
|
log('Failed to run spam cleanup', { error });
|
|
1435
1414
|
}
|
|
1436
1415
|
}, _AssetsController_updateActive = function _AssetsController_updateActive() {
|
|
1437
|
-
const shouldRun = __classPrivateFieldGet(this,
|
|
1416
|
+
const shouldRun = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isUiOpen).call(this) &&
|
|
1417
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isKeyringUnlocked).call(this) &&
|
|
1418
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isAccountTreeInitialized).call(this);
|
|
1438
1419
|
if (shouldRun) {
|
|
1439
1420
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this);
|
|
1440
1421
|
}
|
|
1441
1422
|
else {
|
|
1442
1423
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
1443
1424
|
}
|
|
1444
|
-
}, _AssetsController_handleAccountTreeStateChange = function _AssetsController_handleAccountTreeStateChange() {
|
|
1445
|
-
const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") &&
|
|
1446
|
-
__classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f") &&
|
|
1447
|
-
__classPrivateFieldGet(this, _AssetsController_accountTreeInitialized, "f") &&
|
|
1448
|
-
__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size > 0;
|
|
1449
|
-
if (!shouldRun) {
|
|
1450
|
-
return;
|
|
1451
|
-
}
|
|
1452
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1453
|
-
const currentIds = new Set(accounts.map((a) => a.id));
|
|
1454
|
-
const accountsChanged = currentIds.size !== __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size ||
|
|
1455
|
-
[...currentIds].some((id) => !__classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(id));
|
|
1456
|
-
if (!accountsChanged) {
|
|
1457
|
-
return;
|
|
1458
|
-
}
|
|
1459
|
-
const hasOverlap = [...currentIds].some((id) => __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(id));
|
|
1460
|
-
if (!hasOverlap && __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size > 0) {
|
|
1461
|
-
return;
|
|
1462
|
-
}
|
|
1463
|
-
log('Account tree changed with new accounts, re-subscribing', {
|
|
1464
|
-
previousCount: __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size,
|
|
1465
|
-
currentCount: currentIds.size,
|
|
1466
|
-
});
|
|
1467
|
-
const newAccounts = accounts.filter((account) => !__classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(account.id));
|
|
1468
|
-
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, currentIds, "f");
|
|
1469
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
1470
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureDefaultTrackedAssetsSeeded).call(this);
|
|
1471
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_runAccountTreeRefresh).call(this, accounts, newAccounts).catch((error) => {
|
|
1472
|
-
log('Failed to refresh assets after tree change', error);
|
|
1473
|
-
});
|
|
1474
|
-
}, _AssetsController_runAccountTreeRefresh = async function _AssetsController_runAccountTreeRefresh(accounts, newAccounts = []) {
|
|
1475
|
-
const releaseLock = await __classPrivateFieldGet(this, _AssetsController_accountRefreshMutex, "f").acquire();
|
|
1476
|
-
try {
|
|
1477
|
-
await this.getAssets(accounts, {
|
|
1478
|
-
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
1479
|
-
forceUpdate: true,
|
|
1480
|
-
});
|
|
1481
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this, { skipInitialFetch: true });
|
|
1482
|
-
if (newAccounts.length > 0) {
|
|
1483
|
-
await this.getAssets(newAccounts, {
|
|
1484
|
-
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
1485
|
-
forceUpdate: true,
|
|
1486
|
-
});
|
|
1487
|
-
}
|
|
1488
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_fetchMissingPricesWithoutCache).call(this, accounts, [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
|
|
1489
|
-
}
|
|
1490
|
-
catch (error) {
|
|
1491
|
-
log('Failed to fetch assets after tree change', error);
|
|
1492
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this, { skipInitialFetch: true });
|
|
1493
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_fetchMissingPricesWithoutCache).call(this, accounts, [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
|
|
1494
|
-
}
|
|
1495
|
-
finally {
|
|
1496
|
-
releaseLock();
|
|
1497
|
-
}
|
|
1498
1425
|
}, _AssetsController_runStartupRefresh =
|
|
1499
1426
|
/**
|
|
1500
1427
|
* Force-fetch balances then subscribe. Used on unlock / first startup.
|
|
@@ -1529,7 +1456,7 @@ async function _AssetsController_runStartupRefresh(accounts) {
|
|
|
1529
1456
|
}, _AssetsController_registerActionHandlers = function _AssetsController_registerActionHandlers() {
|
|
1530
1457
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
1531
1458
|
}, _AssetsController_handleActiveChainsUpdate = function _AssetsController_handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
|
|
1532
|
-
if (!__classPrivateFieldGet(this,
|
|
1459
|
+
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)) {
|
|
1533
1460
|
return;
|
|
1534
1461
|
}
|
|
1535
1462
|
log('Data source active chains changed', {
|
|
@@ -2102,7 +2029,6 @@ async function _AssetsController_executeMiddlewares(params) {
|
|
|
2102
2029
|
selectedAccountCount: accounts.length,
|
|
2103
2030
|
enabledChainCount: chainIds.length,
|
|
2104
2031
|
});
|
|
2105
|
-
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
2106
2032
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_runStartupRefresh).call(this, accounts).catch((error) => {
|
|
2107
2033
|
log('Failed to start asset tracking', error);
|
|
2108
2034
|
});
|
|
@@ -2113,7 +2039,6 @@ async function _AssetsController_executeMiddlewares(params) {
|
|
|
2113
2039
|
});
|
|
2114
2040
|
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, false, "f");
|
|
2115
2041
|
__classPrivateFieldSet(this, _AssetsController_stateSizeReported, false, "f");
|
|
2116
|
-
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(), "f");
|
|
2117
2042
|
// Stop price subscription first (uses direct messenger call)
|
|
2118
2043
|
this.unsubscribeAssetsPrice();
|
|
2119
2044
|
// Stop balance subscriptions by properly notifying data sources via messenger
|
|
@@ -2382,7 +2307,6 @@ async function _AssetsController_executeMiddlewares(params) {
|
|
|
2382
2307
|
// EVENT HANDLERS
|
|
2383
2308
|
// ============================================================================
|
|
2384
2309
|
async function _AssetsController_handleAccountGroupChanged(groupId, previousGroupId = '') {
|
|
2385
|
-
// The selected account group can be empty during onboarding or wallet reset.
|
|
2386
2310
|
if (!groupId) {
|
|
2387
2311
|
return;
|
|
2388
2312
|
}
|
|
@@ -2403,7 +2327,6 @@ async function _AssetsController_handleAccountGroupChanged(groupId, previousGrou
|
|
|
2403
2327
|
groupId,
|
|
2404
2328
|
previousGroupId,
|
|
2405
2329
|
});
|
|
2406
|
-
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
2407
2330
|
const releaseLock = await __classPrivateFieldGet(this, _AssetsController_accountRefreshMutex, "f").acquire();
|
|
2408
2331
|
try {
|
|
2409
2332
|
if (accounts.length > 0) {
|
|
@@ -2414,8 +2337,6 @@ async function _AssetsController_handleAccountGroupChanged(groupId, previousGrou
|
|
|
2414
2337
|
}
|
|
2415
2338
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
2416
2339
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureDefaultTrackedAssetsSeeded).call(this);
|
|
2417
|
-
// Subscribe after seed so the price poll sees natives / defaults.
|
|
2418
|
-
// Balances were just force-fetched — skip AccountsApi's subscribe-time poll.
|
|
2419
2340
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this, { skipInitialFetch: true });
|
|
2420
2341
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_fetchMissingPricesWithoutCache).call(this, accounts, [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
|
|
2421
2342
|
}
|
|
@@ -2513,7 +2434,7 @@ async function _AssetsController_refreshActiveChainsOnNetworkSwitch() {
|
|
|
2513
2434
|
* @param networkState - NetworkController state after the switch.
|
|
2514
2435
|
*/
|
|
2515
2436
|
async function _AssetsController_handleNetworkDidChange(networkState) {
|
|
2516
|
-
if (!__classPrivateFieldGet(this,
|
|
2437
|
+
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)) {
|
|
2517
2438
|
return;
|
|
2518
2439
|
}
|
|
2519
2440
|
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|