@metamask/assets-controller 5.0.0 → 6.0.0
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 +45 -1
- package/dist/AssetsController.cjs +138 -33
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +13 -5
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +13 -5
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +138 -33
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.cts +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.mts +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.cjs +46 -30
- package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.cts +2 -2
- package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.mts +2 -2
- package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.mjs +46 -30
- package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
- package/dist/data-sources/PriceDataSource.cjs +1 -1
- package/dist/data-sources/PriceDataSource.cjs.map +1 -1
- package/dist/data-sources/PriceDataSource.d.cts +1 -1
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
- package/dist/data-sources/PriceDataSource.d.mts +1 -1
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
- package/dist/data-sources/PriceDataSource.mjs +1 -1
- package/dist/data-sources/PriceDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +14 -4
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts +6 -2
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts +6 -2
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +14 -4
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/SnapDataSource.cjs +1 -1
- package/dist/data-sources/SnapDataSource.cjs.map +1 -1
- package/dist/data-sources/SnapDataSource.d.cts +2 -2
- package/dist/data-sources/SnapDataSource.d.cts.map +1 -1
- package/dist/data-sources/SnapDataSource.d.mts +2 -2
- package/dist/data-sources/SnapDataSource.d.mts.map +1 -1
- package/dist/data-sources/SnapDataSource.mjs +1 -1
- package/dist/data-sources/SnapDataSource.mjs.map +1 -1
- package/dist/data-sources/StakedBalanceDataSource.cjs +1 -1
- package/dist/data-sources/StakedBalanceDataSource.cjs.map +1 -1
- package/dist/data-sources/StakedBalanceDataSource.d.cts +2 -2
- package/dist/data-sources/StakedBalanceDataSource.d.cts.map +1 -1
- package/dist/data-sources/StakedBalanceDataSource.d.mts +2 -2
- package/dist/data-sources/StakedBalanceDataSource.d.mts.map +1 -1
- package/dist/data-sources/StakedBalanceDataSource.mjs +1 -1
- package/dist/data-sources/StakedBalanceDataSource.mjs.map +1 -1
- package/dist/data-sources/TokenDataSource.cjs +13 -4
- package/dist/data-sources/TokenDataSource.cjs.map +1 -1
- package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
- package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
- package/dist/data-sources/TokenDataSource.mjs +13 -4
- package/dist/data-sources/TokenDataSource.mjs.map +1 -1
- package/dist/utils/formatStateForTransactionPay.cjs.map +1 -1
- package/dist/utils/formatStateForTransactionPay.d.cts +1 -1
- package/dist/utils/formatStateForTransactionPay.d.cts.map +1 -1
- package/dist/utils/formatStateForTransactionPay.d.mts +1 -1
- package/dist/utils/formatStateForTransactionPay.d.mts.map +1 -1
- package/dist/utils/formatStateForTransactionPay.mjs.map +1 -1
- package/package.json +19 -18
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,48 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [6.0.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **BREAKING:** `AssetsControllerMessenger` now requires the `AccountsControllerGetSelectedAccountAction` allowed action ([#8430](https://github.com/MetaMask/core/pull/8430))
|
|
15
|
+
- Used as a fallback in `#getSelectedAccounts()` when `AccountTreeController` has not yet initialized.
|
|
16
|
+
- Consumers must register `AccountsController:getSelectedAccount` on the messenger.
|
|
17
|
+
- **BREAKING:** `AssetsControllerMessenger` now requires the `TransactionControllerUnapprovedTransactionAddedEvent` allowed event ([#8430](https://github.com/MetaMask/core/pull/8430))
|
|
18
|
+
- `AssetsController` subscribes to `TransactionController:unapprovedTransactionAdded` to refresh balances for the account initiating a transaction (e.g. for gas estimations).
|
|
19
|
+
- Consumers must allow `TransactionController:unapprovedTransactionAdded` on the messenger.
|
|
20
|
+
- Added `isOnboarded` option to `AssetsControllerOptions` and `RpcDataSourceConfig` ([#8430](https://github.com/MetaMask/core/pull/8430))
|
|
21
|
+
- When `isOnboarded` returns `false`, `RpcDataSource` skips `fetch` and `subscribe` calls, preventing on-chain RPC calls before onboarding is complete.
|
|
22
|
+
- Defaults to `() => true` so existing consumers are unaffected.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Bump `@metamask/account-tree-controller` from `^7.0.0` to `^7.1.0` ([#8472](https://github.com/MetaMask/core/pull/8472))
|
|
27
|
+
|
|
28
|
+
## [5.0.1]
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Bump `@metamask/transaction-controller` from `^64.0.0` to `^64.2.0` ([#8432](https://github.com/MetaMask/core/pull/8432), [#8447](https://github.com/MetaMask/core/pull/8447))
|
|
33
|
+
- Bump `@metamask/base-controller` from `^9.0.1` to `^9.1.0` ([#8457](https://github.com/MetaMask/core/pull/8457))
|
|
34
|
+
- Bump `@metamask/assets-controllers` from `^103.1.1` to `^104.0.0` ([#8466](https://github.com/MetaMask/core/pull/8466))
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- `AssetsController` now re-subscribes to all data sources when `AccountTreeController` state changes after initial startup, ensuring snap accounts and their chains are included ([#8430](https://github.com/MetaMask/core/pull/8430))
|
|
39
|
+
- Previously, `#start()` would create subscriptions before snap accounts were available, and its idempotency guard prevented re-subscription when the full account list arrived.
|
|
40
|
+
- Added `#handleAccountTreeStateChange()` which forces a full re-subscription and re-fetch when the account tree updates, picking up all accounts including snaps.
|
|
41
|
+
- Added `AccountsController:getSelectedAccount` as a fallback in `#getSelectedAccounts()` for when the account tree is not yet initialized.
|
|
42
|
+
- `TokenDataSource` no longer filters out user-imported custom assets with the `MIN_TOKEN_OCCURRENCES` spam filter or Blockaid bulk scan ([#8430](https://github.com/MetaMask/core/pull/8430))
|
|
43
|
+
- Tokens present in `customAssets` state now bypass the EVM occurrence threshold and non-EVM Blockaid scan, ensuring manually imported assets always appear.
|
|
44
|
+
- `BackendWebsocketDataSource` now properly releases chains to `AccountsApiDataSource` when the websocket is disconnected or disabled ([#8430](https://github.com/MetaMask/core/pull/8430))
|
|
45
|
+
- Previously, `BackendWebsocketDataSource` eagerly claimed all supported chains on initialization regardless of connection state, preventing `AccountsApiDataSource` from polling.
|
|
46
|
+
- Chains are now only claimed when the websocket is connected. On disconnect, chains are released so the chain-claiming loop assigns them to `AccountsApiDataSource` for polling fallback. On reconnect, chains are reclaimed.
|
|
47
|
+
- `AssetsController` no longer silently skips asset fetching on startup for returning users ([#8412](https://github.com/MetaMask/core/pull/8412))
|
|
48
|
+
- Previously, `#start()` was called at keyring unlock before `AccountTreeController.init()` had built the account tree, causing `#selectedAccounts` to return an empty array and all subscriptions and fetches to be skipped. `selectedAccountGroupChange` does not fire when the persisted selected group is unchanged, leaving the controller idle.
|
|
49
|
+
- Now subscribes to `AccountTreeController:stateChange` (the base-controller event guaranteed to fire when `init()` calls `this.update()`), so the controller re-evaluates its active state once accounts are available.
|
|
50
|
+
- `#start()` is now idempotent: it returns early when accounts or chains are not yet available, and when subscriptions are already active, preventing duplicate fetches from repeated events.
|
|
51
|
+
|
|
10
52
|
## [5.0.0]
|
|
11
53
|
|
|
12
54
|
### Changed
|
|
@@ -287,7 +329,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
287
329
|
- Refactor `RpcDataSource` to delegate polling to `BalanceFetcher` and `TokenDetector` services ([#7709](https://github.com/MetaMask/core/pull/7709))
|
|
288
330
|
- Refactor `BalanceFetcher` and `TokenDetector` to extend `StaticIntervalPollingControllerOnly` for independent polling management ([#7709](https://github.com/MetaMask/core/pull/7709))
|
|
289
331
|
|
|
290
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@
|
|
332
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@6.0.0...HEAD
|
|
333
|
+
[6.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@5.0.1...@metamask/assets-controller@6.0.0
|
|
334
|
+
[5.0.1]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@5.0.0...@metamask/assets-controller@5.0.1
|
|
291
335
|
[5.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@4.0.0...@metamask/assets-controller@5.0.0
|
|
292
336
|
[4.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@3.3.0...@metamask/assets-controller@4.0.0
|
|
293
337
|
[3.3.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@3.2.1...@metamask/assets-controller@3.3.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_firstInitFetchReported, _AssetsController_stateSizeReported, _AssetsController_emitTrace, _AssetsController_emitStateSizeTrace, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains,
|
|
16
|
+
var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trace, _AssetsController_firstInitFetchReported, _AssetsController_stateSizeReported, _AssetsController_emitTrace, _AssetsController_emitStateSizeTrace, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_lastKnownAccountIds, _AssetsController_getSelectedAccounts, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _AssetsController_stakedBalanceDataSource, _AssetsController_allBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_onActiveChainsUpdated, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_onUnapprovedTransactionAdded, _AssetsController_updateActive, _AssetsController_handleAccountTreeStateChange, _AssetsController_registerActionHandlers, _AssetsController_handleActiveChainsUpdate, _AssetsController_executeMiddlewares, _AssetsController_resolveNativeAssetIds, _AssetsController_getNativeAssetIdsForEnabledChains, _AssetsController_getNativeAssetIdsForAccount, _AssetsController_ensureNativeBalancesDefaultZero, _AssetsController_updateState, _AssetsController_getAssetsFromState, _AssetsController_shouldHideNativeToken, _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");
|
|
@@ -210,7 +210,7 @@ function normalizeResponse(response) {
|
|
|
210
210
|
* - The controller does NOT manage polling - it simply receives pushed updates
|
|
211
211
|
*/
|
|
212
212
|
class AssetsController extends base_controller_1.BaseController {
|
|
213
|
-
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trace, accountsApiDataSourceConfig, priceDataSourceConfig, stakedBalanceDataSourceConfig, }) {
|
|
213
|
+
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trace, accountsApiDataSourceConfig, priceDataSourceConfig, stakedBalanceDataSourceConfig, isOnboarded, }) {
|
|
214
214
|
super({
|
|
215
215
|
name: CONTROLLER_NAME,
|
|
216
216
|
messenger,
|
|
@@ -247,6 +247,12 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
247
247
|
_AssetsController_activeSubscriptions.set(this, new Map());
|
|
248
248
|
/** Currently enabled chains from NetworkEnablementController */
|
|
249
249
|
_AssetsController_enabledChains.set(this, new Set());
|
|
250
|
+
/**
|
|
251
|
+
* Snapshot of account IDs that were active when the last subscription/fetch
|
|
252
|
+
* cycle ran. Used by #handleAccountTreeStateChange to skip redundant
|
|
253
|
+
* re-subscriptions when the account set hasn't actually changed.
|
|
254
|
+
*/
|
|
255
|
+
_AssetsController_lastKnownAccountIds.set(this, new Set());
|
|
250
256
|
_AssetsController_backendWebsocketDataSource.set(this, void 0);
|
|
251
257
|
_AssetsController_accountsApiDataSource.set(this, void 0);
|
|
252
258
|
_AssetsController_snapDataSource.set(this, void 0);
|
|
@@ -291,6 +297,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
291
297
|
messenger: this.messenger,
|
|
292
298
|
onActiveChainsUpdated: __classPrivateFieldGet(this, _AssetsController_onActiveChainsUpdated, "f"),
|
|
293
299
|
...rpcConfig,
|
|
300
|
+
isOnboarded: rpcConfig.isOnboarded ?? isOnboarded,
|
|
294
301
|
}), "f");
|
|
295
302
|
__classPrivateFieldSet(this, _AssetsController_stakedBalanceDataSource, new StakedBalanceDataSource_1.StakedBalanceDataSource({
|
|
296
303
|
messenger: this.messenger,
|
|
@@ -508,7 +515,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
508
515
|
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
509
516
|
*/
|
|
510
517
|
getStateForTransactionPay() {
|
|
511
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
518
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
512
519
|
const { nativeAssetIdentifiers } = this.messenger.call('NetworkEnablementController:getState');
|
|
513
520
|
const { networkConfigurationsByChainId } = this.messenger.call('NetworkController:getState');
|
|
514
521
|
return (0, utils_2.formatStateForTransactionPay)({
|
|
@@ -581,7 +588,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
581
588
|
}
|
|
582
589
|
});
|
|
583
590
|
// Fetch data for the newly added custom asset (merge to preserve other chains)
|
|
584
|
-
const account = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
591
|
+
const account = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).find((a) => a.id === accountId);
|
|
585
592
|
if (account) {
|
|
586
593
|
const chainId = extractChainId(normalizedAssetId);
|
|
587
594
|
await this.getAssets([account], {
|
|
@@ -680,7 +687,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
680
687
|
if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
|
|
681
688
|
return;
|
|
682
689
|
}
|
|
683
|
-
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "
|
|
690
|
+
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this), {
|
|
684
691
|
forceUpdate: true,
|
|
685
692
|
dataTypes: ['price'],
|
|
686
693
|
assetsForPriceUpdate: Object.values(this.state.assetsBalance).flatMap((balances) => Object.keys(balances)),
|
|
@@ -705,10 +712,11 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
705
712
|
const subscriptionKey = 'ds:PriceDataSource';
|
|
706
713
|
const existingSubscription = __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").get(subscriptionKey);
|
|
707
714
|
const isUpdate = existingSubscription !== undefined;
|
|
715
|
+
const request = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildDataRequest).call(this, accounts, chainIds, {
|
|
716
|
+
dataTypes: ['price'],
|
|
717
|
+
});
|
|
708
718
|
const subscribeReq = {
|
|
709
|
-
request
|
|
710
|
-
dataTypes: ['price'],
|
|
711
|
-
}),
|
|
719
|
+
request,
|
|
712
720
|
subscriptionId: subscriptionKey,
|
|
713
721
|
isUpdate,
|
|
714
722
|
onAssetsUpdate: (response) => this.handleAssetsUpdate(response, 'PriceDataSource'),
|
|
@@ -836,7 +844,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
836
844
|
}
|
|
837
845
|
}
|
|
838
846
|
exports.AssetsController = AssetsController;
|
|
839
|
-
_AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trace = new WeakMap(), _AssetsController_firstInitFetchReported = new WeakMap(), _AssetsController_stateSizeReported = new WeakMap(), _AssetsController_uiOpen = new WeakMap(), _AssetsController_keyringUnlocked = 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_onActiveChainsUpdated = new WeakMap(), _AssetsController_instances = new WeakSet(), _AssetsController_emitTrace = function _AssetsController_emitTrace(name, data, tags = {
|
|
847
|
+
_AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trace = new WeakMap(), _AssetsController_firstInitFetchReported = new WeakMap(), _AssetsController_stateSizeReported = new WeakMap(), _AssetsController_uiOpen = new WeakMap(), _AssetsController_keyringUnlocked = new WeakMap(), _AssetsController_controllerMutex = new WeakMap(), _AssetsController_activeSubscriptions = new WeakMap(), _AssetsController_enabledChains = new WeakMap(), _AssetsController_lastKnownAccountIds = 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_onActiveChainsUpdated = new WeakMap(), _AssetsController_instances = new WeakSet(), _AssetsController_emitTrace = function _AssetsController_emitTrace(name, data, tags = {
|
|
840
848
|
controller: 'AssetsController',
|
|
841
849
|
}) {
|
|
842
850
|
if (!__classPrivateFieldGet(this, _AssetsController_trace, "f")) {
|
|
@@ -882,8 +890,16 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
882
890
|
price_entries: Object.keys(assetsPrice).length,
|
|
883
891
|
custom_asset_entries: customAssetEntries,
|
|
884
892
|
});
|
|
885
|
-
},
|
|
886
|
-
|
|
893
|
+
}, _AssetsController_getSelectedAccounts = function _AssetsController_getSelectedAccounts() {
|
|
894
|
+
const accounts = this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
|
|
895
|
+
if (accounts.length > 0) {
|
|
896
|
+
return accounts;
|
|
897
|
+
}
|
|
898
|
+
const selectedAccount = this.messenger.call('AccountsController:getSelectedAccount');
|
|
899
|
+
if (selectedAccount) {
|
|
900
|
+
return [selectedAccount];
|
|
901
|
+
}
|
|
902
|
+
return [];
|
|
887
903
|
}, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
|
|
888
904
|
return [
|
|
889
905
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f"),
|
|
@@ -928,6 +944,16 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
928
944
|
this.messenger.subscribe('AccountTreeController:selectedAccountGroupChange', () => {
|
|
929
945
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleAccountGroupChanged).call(this).catch(console.error);
|
|
930
946
|
});
|
|
947
|
+
// Catch the initial tree build. On returning users,
|
|
948
|
+
// `selectedAccountGroupChange` does NOT fire when the persisted group
|
|
949
|
+
// is unchanged, and `accountTreeChange` doesn't fire either (init()
|
|
950
|
+
// rebuilds from persisted accounts without publishing it).
|
|
951
|
+
// The base-controller `:stateChange` event is guaranteed to fire
|
|
952
|
+
// when init() calls this.update(). #start() is idempotent so
|
|
953
|
+
// repeated fires are safe.
|
|
954
|
+
this.messenger.subscribe('AccountTreeController:stateChange', () => {
|
|
955
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleAccountTreeStateChange).call(this);
|
|
956
|
+
});
|
|
931
957
|
// Subscribe to network enablement changes (only enabledNetworkMap)
|
|
932
958
|
this.messenger.subscribe('NetworkEnablementController:stateChange', ({ enabledNetworkMap }) => {
|
|
933
959
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleEnabledNetworksChanged).call(this, enabledNetworkMap).catch(console.error);
|
|
@@ -945,6 +971,33 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
945
971
|
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, false, "f");
|
|
946
972
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
947
973
|
});
|
|
974
|
+
// Subscribe to unapproved transactions - TXs that need confirmation
|
|
975
|
+
// Ensures that balances for the account making transaction are updated (e.g. for gas estimations)
|
|
976
|
+
this.messenger.subscribe('TransactionController:unapprovedTransactionAdded', (transactionMeta) => {
|
|
977
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_onUnapprovedTransactionAdded).call(this, transactionMeta);
|
|
978
|
+
});
|
|
979
|
+
}, _AssetsController_onUnapprovedTransactionAdded = function _AssetsController_onUnapprovedTransactionAdded(transactionMeta) {
|
|
980
|
+
const hexChainId = transactionMeta.chainId;
|
|
981
|
+
if (!hexChainId) {
|
|
982
|
+
return;
|
|
983
|
+
}
|
|
984
|
+
const caipChainId = `eip155:${parseInt(hexChainId, 16)}`;
|
|
985
|
+
const fromAddress = transactionMeta.txParams.from?.toLowerCase();
|
|
986
|
+
if (!fromAddress) {
|
|
987
|
+
return;
|
|
988
|
+
}
|
|
989
|
+
const matchedAccount = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).find((account) => account.address.toLowerCase() === fromAddress);
|
|
990
|
+
if (!matchedAccount) {
|
|
991
|
+
return;
|
|
992
|
+
}
|
|
993
|
+
this.getAssets([matchedAccount], {
|
|
994
|
+
chainIds: [caipChainId],
|
|
995
|
+
forceUpdate: true,
|
|
996
|
+
}).catch((error) => {
|
|
997
|
+
log('Failed to refresh assets after unapproved transaction added', {
|
|
998
|
+
error,
|
|
999
|
+
});
|
|
1000
|
+
});
|
|
948
1001
|
}, _AssetsController_updateActive = function _AssetsController_updateActive() {
|
|
949
1002
|
const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") && __classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f");
|
|
950
1003
|
if (shouldRun) {
|
|
@@ -953,6 +1006,36 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
953
1006
|
else {
|
|
954
1007
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
955
1008
|
}
|
|
1009
|
+
}, _AssetsController_handleAccountTreeStateChange = function _AssetsController_handleAccountTreeStateChange() {
|
|
1010
|
+
const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") && __classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f");
|
|
1011
|
+
if (!shouldRun) {
|
|
1012
|
+
return;
|
|
1013
|
+
}
|
|
1014
|
+
if (__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size > 0) {
|
|
1015
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1016
|
+
const currentIds = new Set(accounts.map((a) => a.id));
|
|
1017
|
+
const accountsChanged = currentIds.size !== __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size ||
|
|
1018
|
+
[...currentIds].some((id) => !__classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(id));
|
|
1019
|
+
if (!accountsChanged) {
|
|
1020
|
+
return;
|
|
1021
|
+
}
|
|
1022
|
+
log('Account tree changed with new accounts, re-subscribing', {
|
|
1023
|
+
previousCount: __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size,
|
|
1024
|
+
currentCount: currentIds.size,
|
|
1025
|
+
});
|
|
1026
|
+
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, currentIds, "f");
|
|
1027
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1028
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
1029
|
+
this.getAssets(accounts, {
|
|
1030
|
+
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
1031
|
+
forceUpdate: true,
|
|
1032
|
+
}).catch((error) => {
|
|
1033
|
+
log('Failed to fetch assets after tree change', error);
|
|
1034
|
+
});
|
|
1035
|
+
}
|
|
1036
|
+
else {
|
|
1037
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this);
|
|
1038
|
+
}
|
|
956
1039
|
}, _AssetsController_registerActionHandlers = function _AssetsController_registerActionHandlers() {
|
|
957
1040
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
958
1041
|
}, _AssetsController_handleActiveChainsUpdate = function _AssetsController_handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
|
|
@@ -973,11 +1056,11 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
973
1056
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
974
1057
|
}
|
|
975
1058
|
// If chains were added and we have selected accounts, do one-time fetch
|
|
976
|
-
if (addedChains.length > 0 && __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1059
|
+
if (addedChains.length > 0 && __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).length > 0) {
|
|
977
1060
|
const addedEnabledChains = addedChains.filter((chain) => __classPrivateFieldGet(this, _AssetsController_enabledChains, "f").has(chain));
|
|
978
1061
|
if (addedEnabledChains.length > 0) {
|
|
979
1062
|
log('Fetching balances for newly added chains', { addedEnabledChains });
|
|
980
|
-
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1063
|
+
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this), {
|
|
981
1064
|
chainIds: addedEnabledChains,
|
|
982
1065
|
forceUpdate: true,
|
|
983
1066
|
updateMode: 'merge',
|
|
@@ -1076,7 +1159,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1076
1159
|
}, _AssetsController_getNativeAssetIdsForAccount = function _AssetsController_getNativeAssetIdsForAccount(account) {
|
|
1077
1160
|
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_resolveNativeAssetIds).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getEnabledChainsForAccount).call(this, account));
|
|
1078
1161
|
}, _AssetsController_ensureNativeBalancesDefaultZero = function _AssetsController_ensureNativeBalancesDefaultZero() {
|
|
1079
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1162
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1080
1163
|
if (accounts.length === 0) {
|
|
1081
1164
|
return;
|
|
1082
1165
|
}
|
|
@@ -1165,7 +1248,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1165
1248
|
return next;
|
|
1166
1249
|
})();
|
|
1167
1250
|
// Ensure native tokens have an entry (0 if missing) for chains this account supports
|
|
1168
|
-
const account = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1251
|
+
const account = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).find((a) => a.id === accountId);
|
|
1169
1252
|
const nativeAssetIdsForAccount = account
|
|
1170
1253
|
? __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetIdsForAccount).call(this, account)
|
|
1171
1254
|
: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetIdsForEnabledChains).call(this);
|
|
@@ -1343,14 +1426,23 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1343
1426
|
return 'fungible';
|
|
1344
1427
|
}
|
|
1345
1428
|
}, _AssetsController_start = function _AssetsController_start() {
|
|
1429
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1430
|
+
const chainIds = [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")];
|
|
1431
|
+
if (accounts.length === 0 || chainIds.length === 0) {
|
|
1432
|
+
return;
|
|
1433
|
+
}
|
|
1434
|
+
if (__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size > 0) {
|
|
1435
|
+
return;
|
|
1436
|
+
}
|
|
1346
1437
|
log('Starting asset tracking', {
|
|
1347
|
-
selectedAccountCount:
|
|
1348
|
-
enabledChainCount:
|
|
1438
|
+
selectedAccountCount: accounts.length,
|
|
1439
|
+
enabledChainCount: chainIds.length,
|
|
1349
1440
|
});
|
|
1441
|
+
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
1350
1442
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1351
1443
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
1352
|
-
this.getAssets(
|
|
1353
|
-
chainIds
|
|
1444
|
+
this.getAssets(accounts, {
|
|
1445
|
+
chainIds,
|
|
1354
1446
|
forceUpdate: true,
|
|
1355
1447
|
}).catch((error) => {
|
|
1356
1448
|
log('Failed to fetch assets', error);
|
|
@@ -1362,6 +1454,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1362
1454
|
});
|
|
1363
1455
|
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, false, "f");
|
|
1364
1456
|
__classPrivateFieldSet(this, _AssetsController_stateSizeReported, false, "f");
|
|
1457
|
+
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(), "f");
|
|
1365
1458
|
// Stop price subscription first (uses direct messenger call)
|
|
1366
1459
|
this.unsubscribeAssetsPrice();
|
|
1367
1460
|
// Stop balance subscriptions by properly notifying data sources via messenger
|
|
@@ -1384,23 +1477,21 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1384
1477
|
}
|
|
1385
1478
|
__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").clear();
|
|
1386
1479
|
}, _AssetsController_subscribeAssets = function _AssetsController_subscribeAssets() {
|
|
1387
|
-
|
|
1480
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1481
|
+
const enabledChains = [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")];
|
|
1482
|
+
if (accounts.length === 0 || enabledChains.length === 0) {
|
|
1388
1483
|
return;
|
|
1389
1484
|
}
|
|
1390
1485
|
// Subscribe to balance updates (batched by data source)
|
|
1391
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this,
|
|
1392
|
-
...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
|
|
1393
|
-
]);
|
|
1486
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this, accounts, enabledChains);
|
|
1394
1487
|
// Subscribe to staked balance updates (separate from regular balance chain-claiming)
|
|
1395
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeStakedBalance).call(this,
|
|
1396
|
-
...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
|
|
1397
|
-
]);
|
|
1488
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeStakedBalance).call(this, accounts, enabledChains);
|
|
1398
1489
|
// Subscribe to price updates for all assets held by selected accounts
|
|
1399
|
-
this.subscribeAssetsPrice(
|
|
1490
|
+
this.subscribeAssetsPrice(accounts, enabledChains);
|
|
1400
1491
|
}, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
|
|
1401
1492
|
const chainToAccounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildChainToAccountsMap).call(this, accounts, new Set(chainIds));
|
|
1402
1493
|
const remainingChains = new Set(chainToAccounts.keys());
|
|
1403
|
-
// When basic functionality is on
|
|
1494
|
+
// When basic functionality is on, use all balance data sources; when off, RPC only.
|
|
1404
1495
|
const balanceDataSources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
1405
1496
|
? __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get)
|
|
1406
1497
|
: [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")];
|
|
@@ -1503,16 +1594,19 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1503
1594
|
}
|
|
1504
1595
|
}, _AssetsController_buildDataRequest = function _AssetsController_buildDataRequest(accounts, chainIds, partial = {}) {
|
|
1505
1596
|
const chainIdSet = new Set(chainIds);
|
|
1597
|
+
// Force update will pass in additional chains for wildcard account scope
|
|
1598
|
+
// Enables updates for chains that are not selected (e.g. for unapproved transactions)
|
|
1599
|
+
const forceUpdateChains = partial.forceUpdate ? chainIds : undefined;
|
|
1506
1600
|
const accountsWithSupportedChains = accounts.map((account) => ({
|
|
1507
1601
|
account,
|
|
1508
|
-
supportedChains: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getEnabledChainsForAccount).call(this, account).filter((chain) => chainIdSet.has(chain)),
|
|
1602
|
+
supportedChains: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getEnabledChainsForAccount).call(this, account, forceUpdateChains).filter((chain) => chainIdSet.has(chain)),
|
|
1509
1603
|
}));
|
|
1510
1604
|
return {
|
|
1511
1605
|
accountsWithSupportedChains,
|
|
1512
1606
|
chainIds,
|
|
1513
1607
|
...partial,
|
|
1514
1608
|
};
|
|
1515
|
-
}, _AssetsController_getEnabledChainsForAccount = function _AssetsController_getEnabledChainsForAccount(account) {
|
|
1609
|
+
}, _AssetsController_getEnabledChainsForAccount = function _AssetsController_getEnabledChainsForAccount(account, additionalChains) {
|
|
1516
1610
|
// Account scopes are CAIP-2 chain IDs like "eip155:1", "solana:mainnet", "bip122:..."
|
|
1517
1611
|
const scopes = account.scopes ?? [];
|
|
1518
1612
|
const result = [];
|
|
@@ -1525,6 +1619,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1525
1619
|
const { namespace, reference } = (0, utils_1.parseCaipChainId)(scopeStr);
|
|
1526
1620
|
// Wildcard scope (e.g., "eip155:0" means all enabled chains in that namespace)
|
|
1527
1621
|
if (reference === '0') {
|
|
1622
|
+
// Add enabled chains
|
|
1528
1623
|
for (const chain of __classPrivateFieldGet(this, _AssetsController_enabledChains, "f")) {
|
|
1529
1624
|
if ((0, utils_1.isCaipChainId)(chain)) {
|
|
1530
1625
|
const chainParsed = (0, utils_1.parseCaipChainId)(chain);
|
|
@@ -1533,6 +1628,15 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1533
1628
|
}
|
|
1534
1629
|
}
|
|
1535
1630
|
}
|
|
1631
|
+
// Add additional chains
|
|
1632
|
+
for (const chain of additionalChains ?? []) {
|
|
1633
|
+
if ((0, utils_1.isCaipChainId)(chain)) {
|
|
1634
|
+
const chainParsed = (0, utils_1.parseCaipChainId)(chain);
|
|
1635
|
+
if (chainParsed.namespace === namespace) {
|
|
1636
|
+
result.push(chain);
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1536
1640
|
}
|
|
1537
1641
|
else if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
|
|
1538
1642
|
// Normalize hex to decimal for EIP155
|
|
@@ -1548,11 +1652,12 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1548
1652
|
// EVENT HANDLERS
|
|
1549
1653
|
// ============================================================================
|
|
1550
1654
|
async function _AssetsController_handleAccountGroupChanged() {
|
|
1551
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1655
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1552
1656
|
log('Account group changed', {
|
|
1553
1657
|
accountCount: accounts.length,
|
|
1554
1658
|
accountIds: accounts.map((a) => a.id),
|
|
1555
1659
|
});
|
|
1660
|
+
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
1556
1661
|
// Subscribe and fetch for the new account group
|
|
1557
1662
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1558
1663
|
if (accounts.length > 0) {
|
|
@@ -1591,8 +1696,8 @@ async function _AssetsController_handleAccountGroupChanged() {
|
|
|
1591
1696
|
// Refresh subscriptions for new chain set
|
|
1592
1697
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1593
1698
|
// Do one-time fetch for newly enabled chains; merge so we keep existing chain balances
|
|
1594
|
-
if (addedChains.length > 0 && __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1595
|
-
await this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1699
|
+
if (addedChains.length > 0 && __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).length > 0) {
|
|
1700
|
+
await this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this), {
|
|
1596
1701
|
chainIds: addedChains,
|
|
1597
1702
|
forceUpdate: true,
|
|
1598
1703
|
updateMode: 'merge',
|