@metamask/assets-controller 5.0.1 → 6.1.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 +54 -1
- package/dist/AssetsController.cjs +172 -45
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +12 -4
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +12 -4
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +173 -46
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.cjs +48 -30
- package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.cts +3 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.mts +3 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.mjs +48 -30
- package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +26 -8
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts +8 -3
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts +8 -3
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +26 -8
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/TokenDataSource.cjs +27 -12
- 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 +27 -12
- package/dist/data-sources/TokenDataSource.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +8 -0
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs +8 -0
- package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +8 -6
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts +4 -2
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +4 -2
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs +8 -6
- package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs.map +1 -1
- package/dist/utils/formatExchangeRatesForBridge.cjs +10 -8
- package/dist/utils/formatExchangeRatesForBridge.cjs.map +1 -1
- package/dist/utils/formatExchangeRatesForBridge.d.cts +5 -3
- package/dist/utils/formatExchangeRatesForBridge.d.cts.map +1 -1
- package/dist/utils/formatExchangeRatesForBridge.d.mts +5 -3
- package/dist/utils/formatExchangeRatesForBridge.d.mts.map +1 -1
- package/dist/utils/formatExchangeRatesForBridge.mjs +11 -9
- package/dist/utils/formatExchangeRatesForBridge.mjs.map +1 -1
- package/dist/utils/formatStateForTransactionPay.cjs +8 -6
- package/dist/utils/formatStateForTransactionPay.cjs.map +1 -1
- package/dist/utils/formatStateForTransactionPay.d.cts +2 -2
- package/dist/utils/formatStateForTransactionPay.d.cts.map +1 -1
- package/dist/utils/formatStateForTransactionPay.d.mts +2 -2
- package/dist/utils/formatStateForTransactionPay.d.mts.map +1 -1
- package/dist/utils/formatStateForTransactionPay.mjs +8 -6
- package/dist/utils/formatStateForTransactionPay.mjs.map +1 -1
- package/dist/utils/index.cjs +4 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.cts +1 -0
- package/dist/utils/index.d.cts.map +1 -1
- package/dist/utils/index.d.mts +1 -0
- package/dist/utils/index.d.mts.map +1 -1
- package/dist/utils/index.mjs +1 -0
- package/dist/utils/index.mjs.map +1 -1
- package/dist/utils/native-assets.cjs +63 -0
- package/dist/utils/native-assets.cjs.map +1 -0
- package/dist/utils/native-assets.d.cts +19 -0
- package/dist/utils/native-assets.d.cts.map +1 -0
- package/dist/utils/native-assets.d.mts +19 -0
- package/dist/utils/native-assets.d.mts.map +1 -0
- package/dist/utils/native-assets.mjs +58 -0
- package/dist/utils/native-assets.mjs.map +1 -0
- package/package.json +11 -10
|
@@ -9,7 +9,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
11
|
};
|
|
12
|
-
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,
|
|
12
|
+
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_queryApiClient, _AssetsController_onActiveChainsUpdated, _AssetsController_initializeNativeAssetsMap, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_onUnapprovedTransactionAdded, _AssetsController_updateActive, _AssetsController_handleAccountTreeStateChange, _AssetsController_registerActionHandlers, _AssetsController_handleActiveChainsUpdate, _AssetsController_executeMiddlewares, _AssetsController_getNativeAssetMap, _AssetsController_isNativeAsset, _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;
|
|
13
13
|
import { BaseController } from "@metamask/base-controller";
|
|
14
14
|
import { clientControllerSelectors } from "@metamask/client-controller";
|
|
15
15
|
import { CHAIN_IDS_WITH_NO_NATIVE_TOKEN } from "@metamask/controller-utils";
|
|
@@ -28,7 +28,9 @@ import { TokenDataSource } from "./data-sources/TokenDataSource.mjs";
|
|
|
28
28
|
import { projectLogger, createModuleLogger } from "./logger.mjs";
|
|
29
29
|
import { DetectionMiddleware } from "./middlewares/DetectionMiddleware.mjs";
|
|
30
30
|
import { createParallelBalanceMiddleware, createParallelMiddleware } from "./middlewares/ParallelMiddleware.mjs";
|
|
31
|
-
import { normalizeAssetId, formatExchangeRatesForBridge, formatStateForTransactionPay } from "./utils/index.mjs";
|
|
31
|
+
import { normalizeAssetId, formatExchangeRatesForBridge, formatStateForTransactionPay, buildNativeAssetsFromConstant, buildNativeAssetsFromApi } from "./utils/index.mjs";
|
|
32
|
+
import { ZERO_ADDRESS } from "./utils/constants.mjs";
|
|
33
|
+
const NATIVE_ASSETS_QUERY_KEY = ['nativeAssets'];
|
|
32
34
|
// ============================================================================
|
|
33
35
|
// CONTROLLER CONSTANTS
|
|
34
36
|
// ============================================================================
|
|
@@ -204,7 +206,7 @@ function normalizeResponse(response) {
|
|
|
204
206
|
* - The controller does NOT manage polling - it simply receives pushed updates
|
|
205
207
|
*/
|
|
206
208
|
export class AssetsController extends BaseController {
|
|
207
|
-
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trace, accountsApiDataSourceConfig, priceDataSourceConfig, stakedBalanceDataSourceConfig, }) {
|
|
209
|
+
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trace, accountsApiDataSourceConfig, priceDataSourceConfig, stakedBalanceDataSourceConfig, isOnboarded, }) {
|
|
208
210
|
super({
|
|
209
211
|
name: CONTROLLER_NAME,
|
|
210
212
|
messenger,
|
|
@@ -241,6 +243,12 @@ export class AssetsController extends BaseController {
|
|
|
241
243
|
_AssetsController_activeSubscriptions.set(this, new Map());
|
|
242
244
|
/** Currently enabled chains from NetworkEnablementController */
|
|
243
245
|
_AssetsController_enabledChains.set(this, new Set());
|
|
246
|
+
/**
|
|
247
|
+
* Snapshot of account IDs that were active when the last subscription/fetch
|
|
248
|
+
* cycle ran. Used by #handleAccountTreeStateChange to skip redundant
|
|
249
|
+
* re-subscriptions when the account set hasn't actually changed.
|
|
250
|
+
*/
|
|
251
|
+
_AssetsController_lastKnownAccountIds.set(this, new Set());
|
|
244
252
|
_AssetsController_backendWebsocketDataSource.set(this, void 0);
|
|
245
253
|
_AssetsController_accountsApiDataSource.set(this, void 0);
|
|
246
254
|
_AssetsController_snapDataSource.set(this, void 0);
|
|
@@ -250,12 +258,15 @@ export class AssetsController extends BaseController {
|
|
|
250
258
|
_AssetsController_detectionMiddleware.set(this, void 0);
|
|
251
259
|
_AssetsController_tokenDataSource.set(this, void 0);
|
|
252
260
|
_AssetsController_unsubscribeBasicFunctionality.set(this, null);
|
|
261
|
+
_AssetsController_queryApiClient.set(this, void 0);
|
|
253
262
|
_AssetsController_onActiveChainsUpdated.set(this, void 0);
|
|
254
263
|
__classPrivateFieldSet(this, _AssetsController_isEnabled, isEnabled(), "f");
|
|
255
264
|
__classPrivateFieldSet(this, _AssetsController_isBasicFunctionality, isBasicFunctionality ?? (() => true), "f");
|
|
256
265
|
__classPrivateFieldSet(this, _AssetsController_defaultUpdateInterval, defaultUpdateInterval, "f");
|
|
257
266
|
__classPrivateFieldSet(this, _AssetsController_trace, trace, "f");
|
|
267
|
+
__classPrivateFieldSet(this, _AssetsController_queryApiClient, queryApiClient, "f");
|
|
258
268
|
const rpcConfig = rpcDataSourceConfig ?? {};
|
|
269
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeNativeAssetsMap).call(this, queryApiClient);
|
|
259
270
|
__classPrivateFieldSet(this, _AssetsController_onActiveChainsUpdated, (dataSourceName, chains, previousChains) => {
|
|
260
271
|
try {
|
|
261
272
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleActiveChainsUpdate).call(this, dataSourceName, chains, previousChains);
|
|
@@ -271,6 +282,7 @@ export class AssetsController extends BaseController {
|
|
|
271
282
|
messenger: this.messenger,
|
|
272
283
|
queryApiClient,
|
|
273
284
|
onActiveChainsUpdated: __classPrivateFieldGet(this, _AssetsController_onActiveChainsUpdated, "f"),
|
|
285
|
+
isNativeAsset: (assetId) => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isNativeAsset).call(this, assetId),
|
|
274
286
|
}), "f");
|
|
275
287
|
__classPrivateFieldSet(this, _AssetsController_accountsApiDataSource, new AccountsApiDataSource({
|
|
276
288
|
queryApiClient,
|
|
@@ -284,7 +296,10 @@ export class AssetsController extends BaseController {
|
|
|
284
296
|
__classPrivateFieldSet(this, _AssetsController_rpcDataSource, new RpcDataSource({
|
|
285
297
|
messenger: this.messenger,
|
|
286
298
|
onActiveChainsUpdated: __classPrivateFieldGet(this, _AssetsController_onActiveChainsUpdated, "f"),
|
|
299
|
+
getNativeAssetForChain: (chainId) => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetMap).call(this)[chainId] ??
|
|
300
|
+
`${chainId}/erc20:${ZERO_ADDRESS}`,
|
|
287
301
|
...rpcConfig,
|
|
302
|
+
isOnboarded: rpcConfig.isOnboarded ?? isOnboarded,
|
|
288
303
|
}), "f");
|
|
289
304
|
__classPrivateFieldSet(this, _AssetsController_stakedBalanceDataSource, new StakedBalanceDataSource({
|
|
290
305
|
messenger: this.messenger,
|
|
@@ -294,8 +309,7 @@ export class AssetsController extends BaseController {
|
|
|
294
309
|
__classPrivateFieldSet(this, _AssetsController_tokenDataSource, new TokenDataSource(this.messenger, {
|
|
295
310
|
queryApiClient,
|
|
296
311
|
getNativeAssetIds: () => {
|
|
297
|
-
|
|
298
|
-
return Object.values(nativeAssetIdentifiers);
|
|
312
|
+
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetIdsForEnabledChains).call(this);
|
|
299
313
|
},
|
|
300
314
|
}), "f");
|
|
301
315
|
__classPrivateFieldSet(this, _AssetsController_priceDataSource, new PriceDataSource({
|
|
@@ -483,12 +497,12 @@ export class AssetsController extends BaseController {
|
|
|
483
497
|
* @returns Bridge-compatible exchange rate state derived from assetsPrice and selectedCurrency.
|
|
484
498
|
*/
|
|
485
499
|
getExchangeRatesForBridge() {
|
|
486
|
-
const { nativeAssetIdentifiers } = this.messenger.call('NetworkEnablementController:getState');
|
|
487
500
|
const { networkConfigurationsByChainId } = this.messenger.call('NetworkController:getState');
|
|
488
501
|
return formatExchangeRatesForBridge({
|
|
502
|
+
assetsInfo: this.state.assetsInfo,
|
|
489
503
|
assetsPrice: this.state.assetsPrice,
|
|
490
504
|
selectedCurrency: this.state.selectedCurrency,
|
|
491
|
-
nativeAssetIdentifiers,
|
|
505
|
+
nativeAssetIdentifiers: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetMap).call(this),
|
|
492
506
|
networkConfigurationsByChainId,
|
|
493
507
|
});
|
|
494
508
|
}
|
|
@@ -502,8 +516,7 @@ export class AssetsController extends BaseController {
|
|
|
502
516
|
* @returns Legacy-compatible state for transaction-pay-controller.
|
|
503
517
|
*/
|
|
504
518
|
getStateForTransactionPay() {
|
|
505
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
506
|
-
const { nativeAssetIdentifiers } = this.messenger.call('NetworkEnablementController:getState');
|
|
519
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
507
520
|
const { networkConfigurationsByChainId } = this.messenger.call('NetworkController:getState');
|
|
508
521
|
return formatStateForTransactionPay({
|
|
509
522
|
assetsBalance: this.state.assetsBalance,
|
|
@@ -511,7 +524,7 @@ export class AssetsController extends BaseController {
|
|
|
511
524
|
assetsPrice: this.state.assetsPrice,
|
|
512
525
|
selectedCurrency: this.state.selectedCurrency,
|
|
513
526
|
accounts: accounts.map((a) => ({ id: a.id, address: a.address })),
|
|
514
|
-
nativeAssetIdentifiers,
|
|
527
|
+
nativeAssetIdentifiers: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetMap).call(this),
|
|
515
528
|
networkConfigurationsByChainId,
|
|
516
529
|
});
|
|
517
530
|
}
|
|
@@ -555,7 +568,7 @@ export class AssetsController extends BaseController {
|
|
|
555
568
|
if (pendingMetadata) {
|
|
556
569
|
const parsed = parseCaipAssetType(normalizedAssetId);
|
|
557
570
|
let tokenType = 'erc20';
|
|
558
|
-
if (
|
|
571
|
+
if (__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_isNativeAsset).call(this, normalizedAssetId)) {
|
|
559
572
|
tokenType = 'native';
|
|
560
573
|
}
|
|
561
574
|
else if (parsed.assetNamespace === 'spl') {
|
|
@@ -575,7 +588,7 @@ export class AssetsController extends BaseController {
|
|
|
575
588
|
}
|
|
576
589
|
});
|
|
577
590
|
// Fetch data for the newly added custom asset (merge to preserve other chains)
|
|
578
|
-
const account = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
591
|
+
const account = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).find((a) => a.id === accountId);
|
|
579
592
|
if (account) {
|
|
580
593
|
const chainId = extractChainId(normalizedAssetId);
|
|
581
594
|
await this.getAssets([account], {
|
|
@@ -674,7 +687,7 @@ export class AssetsController extends BaseController {
|
|
|
674
687
|
if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
|
|
675
688
|
return;
|
|
676
689
|
}
|
|
677
|
-
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "
|
|
690
|
+
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this), {
|
|
678
691
|
forceUpdate: true,
|
|
679
692
|
dataTypes: ['price'],
|
|
680
693
|
assetsForPriceUpdate: Object.values(this.state.assetsBalance).flatMap((balances) => Object.keys(balances)),
|
|
@@ -699,10 +712,11 @@ export class AssetsController extends BaseController {
|
|
|
699
712
|
const subscriptionKey = 'ds:PriceDataSource';
|
|
700
713
|
const existingSubscription = __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").get(subscriptionKey);
|
|
701
714
|
const isUpdate = existingSubscription !== undefined;
|
|
715
|
+
const request = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildDataRequest).call(this, accounts, chainIds, {
|
|
716
|
+
dataTypes: ['price'],
|
|
717
|
+
});
|
|
702
718
|
const subscribeReq = {
|
|
703
|
-
request
|
|
704
|
-
dataTypes: ['price'],
|
|
705
|
-
}),
|
|
719
|
+
request,
|
|
706
720
|
subscriptionId: subscriptionKey,
|
|
707
721
|
isUpdate,
|
|
708
722
|
onAssetsUpdate: (response) => this.handleAssetsUpdate(response, 'PriceDataSource'),
|
|
@@ -829,7 +843,7 @@ export class AssetsController extends BaseController {
|
|
|
829
843
|
this.messenger.unregisterActionHandler('AssetsController:unhideAsset');
|
|
830
844
|
}
|
|
831
845
|
}
|
|
832
|
-
_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 = {
|
|
846
|
+
_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_queryApiClient = new WeakMap(), _AssetsController_onActiveChainsUpdated = new WeakMap(), _AssetsController_instances = new WeakSet(), _AssetsController_emitTrace = function _AssetsController_emitTrace(name, data, tags = {
|
|
833
847
|
controller: 'AssetsController',
|
|
834
848
|
}) {
|
|
835
849
|
if (!__classPrivateFieldGet(this, _AssetsController_trace, "f")) {
|
|
@@ -875,8 +889,16 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
875
889
|
price_entries: Object.keys(assetsPrice).length,
|
|
876
890
|
custom_asset_entries: customAssetEntries,
|
|
877
891
|
});
|
|
878
|
-
},
|
|
879
|
-
|
|
892
|
+
}, _AssetsController_getSelectedAccounts = function _AssetsController_getSelectedAccounts() {
|
|
893
|
+
const accounts = this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
|
|
894
|
+
if (accounts.length > 0) {
|
|
895
|
+
return accounts;
|
|
896
|
+
}
|
|
897
|
+
const selectedAccount = this.messenger.call('AccountsController:getSelectedAccount');
|
|
898
|
+
if (selectedAccount) {
|
|
899
|
+
return [selectedAccount];
|
|
900
|
+
}
|
|
901
|
+
return [];
|
|
880
902
|
}, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
|
|
881
903
|
return [
|
|
882
904
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f"),
|
|
@@ -884,6 +906,25 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
884
906
|
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
|
|
885
907
|
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
886
908
|
];
|
|
909
|
+
}, _AssetsController_initializeNativeAssetsMap = function _AssetsController_initializeNativeAssetsMap(queryApiClient) {
|
|
910
|
+
queryApiClient.queryClient
|
|
911
|
+
.fetchQuery({
|
|
912
|
+
queryKey: NATIVE_ASSETS_QUERY_KEY,
|
|
913
|
+
queryFn: buildNativeAssetsFromApi,
|
|
914
|
+
staleTime: Infinity,
|
|
915
|
+
gcTime: Infinity,
|
|
916
|
+
})
|
|
917
|
+
.catch((error) => {
|
|
918
|
+
// Failure to populate native asset cache is non-fatal;
|
|
919
|
+
// #isNativeAsset falls back to the seed data from buildNativeAssetsFromConstant.
|
|
920
|
+
log('Failed to populate native asset cache, falling back to seed data', error);
|
|
921
|
+
});
|
|
922
|
+
// Seed the cache synchronously so that synchronous consumers (e.g.
|
|
923
|
+
// #isNativeAsset, #resolveNativeAssetIds) have data available immediately.
|
|
924
|
+
// When fetchQuery resolves (currently instant, future: API), it overwrites
|
|
925
|
+
// this with potentially fresher data.
|
|
926
|
+
const initialNativeAssetMap = buildNativeAssetsFromConstant();
|
|
927
|
+
queryApiClient.setCachedData(NATIVE_ASSETS_QUERY_KEY, initialNativeAssetMap);
|
|
887
928
|
}, _AssetsController_initializeState = function _AssetsController_initializeState() {
|
|
888
929
|
const { enabledNetworkMap } = this.messenger.call('NetworkEnablementController:getState');
|
|
889
930
|
__classPrivateFieldSet(this, _AssetsController_enabledChains, __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_extractEnabledChains).call(this, enabledNetworkMap), "f");
|
|
@@ -929,7 +970,7 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
929
970
|
// when init() calls this.update(). #start() is idempotent so
|
|
930
971
|
// repeated fires are safe.
|
|
931
972
|
this.messenger.subscribe('AccountTreeController:stateChange', () => {
|
|
932
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m",
|
|
973
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleAccountTreeStateChange).call(this);
|
|
933
974
|
});
|
|
934
975
|
// Subscribe to network enablement changes (only enabledNetworkMap)
|
|
935
976
|
this.messenger.subscribe('NetworkEnablementController:stateChange', ({ enabledNetworkMap }) => {
|
|
@@ -948,6 +989,33 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
948
989
|
__classPrivateFieldSet(this, _AssetsController_keyringUnlocked, false, "f");
|
|
949
990
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
|
|
950
991
|
});
|
|
992
|
+
// Subscribe to unapproved transactions - TXs that need confirmation
|
|
993
|
+
// Ensures that balances for the account making transaction are updated (e.g. for gas estimations)
|
|
994
|
+
this.messenger.subscribe('TransactionController:unapprovedTransactionAdded', (transactionMeta) => {
|
|
995
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_onUnapprovedTransactionAdded).call(this, transactionMeta);
|
|
996
|
+
});
|
|
997
|
+
}, _AssetsController_onUnapprovedTransactionAdded = function _AssetsController_onUnapprovedTransactionAdded(transactionMeta) {
|
|
998
|
+
const hexChainId = transactionMeta.chainId;
|
|
999
|
+
if (!hexChainId) {
|
|
1000
|
+
return;
|
|
1001
|
+
}
|
|
1002
|
+
const caipChainId = `eip155:${parseInt(hexChainId, 16)}`;
|
|
1003
|
+
const fromAddress = transactionMeta.txParams.from?.toLowerCase();
|
|
1004
|
+
if (!fromAddress) {
|
|
1005
|
+
return;
|
|
1006
|
+
}
|
|
1007
|
+
const matchedAccount = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).find((account) => account.address.toLowerCase() === fromAddress);
|
|
1008
|
+
if (!matchedAccount) {
|
|
1009
|
+
return;
|
|
1010
|
+
}
|
|
1011
|
+
this.getAssets([matchedAccount], {
|
|
1012
|
+
chainIds: [caipChainId],
|
|
1013
|
+
forceUpdate: true,
|
|
1014
|
+
}).catch((error) => {
|
|
1015
|
+
log('Failed to refresh assets after unapproved transaction added', {
|
|
1016
|
+
error,
|
|
1017
|
+
});
|
|
1018
|
+
});
|
|
951
1019
|
}, _AssetsController_updateActive = function _AssetsController_updateActive() {
|
|
952
1020
|
const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") && __classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f");
|
|
953
1021
|
if (shouldRun) {
|
|
@@ -956,6 +1024,36 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
956
1024
|
else {
|
|
957
1025
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
958
1026
|
}
|
|
1027
|
+
}, _AssetsController_handleAccountTreeStateChange = function _AssetsController_handleAccountTreeStateChange() {
|
|
1028
|
+
const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") && __classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f");
|
|
1029
|
+
if (!shouldRun) {
|
|
1030
|
+
return;
|
|
1031
|
+
}
|
|
1032
|
+
if (__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size > 0) {
|
|
1033
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1034
|
+
const currentIds = new Set(accounts.map((a) => a.id));
|
|
1035
|
+
const accountsChanged = currentIds.size !== __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size ||
|
|
1036
|
+
[...currentIds].some((id) => !__classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(id));
|
|
1037
|
+
if (!accountsChanged) {
|
|
1038
|
+
return;
|
|
1039
|
+
}
|
|
1040
|
+
log('Account tree changed with new accounts, re-subscribing', {
|
|
1041
|
+
previousCount: __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size,
|
|
1042
|
+
currentCount: currentIds.size,
|
|
1043
|
+
});
|
|
1044
|
+
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, currentIds, "f");
|
|
1045
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1046
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
1047
|
+
this.getAssets(accounts, {
|
|
1048
|
+
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
1049
|
+
forceUpdate: true,
|
|
1050
|
+
}).catch((error) => {
|
|
1051
|
+
log('Failed to fetch assets after tree change', error);
|
|
1052
|
+
});
|
|
1053
|
+
}
|
|
1054
|
+
else {
|
|
1055
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this);
|
|
1056
|
+
}
|
|
959
1057
|
}, _AssetsController_registerActionHandlers = function _AssetsController_registerActionHandlers() {
|
|
960
1058
|
this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
961
1059
|
}, _AssetsController_handleActiveChainsUpdate = function _AssetsController_handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
|
|
@@ -976,11 +1074,11 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
976
1074
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
977
1075
|
}
|
|
978
1076
|
// If chains were added and we have selected accounts, do one-time fetch
|
|
979
|
-
if (addedChains.length > 0 && __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1077
|
+
if (addedChains.length > 0 && __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).length > 0) {
|
|
980
1078
|
const addedEnabledChains = addedChains.filter((chain) => __classPrivateFieldGet(this, _AssetsController_enabledChains, "f").has(chain));
|
|
981
1079
|
if (addedEnabledChains.length > 0) {
|
|
982
1080
|
log('Fetching balances for newly added chains', { addedEnabledChains });
|
|
983
|
-
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1081
|
+
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this), {
|
|
984
1082
|
chainIds: addedEnabledChains,
|
|
985
1083
|
forceUpdate: true,
|
|
986
1084
|
updateMode: 'merge',
|
|
@@ -1064,11 +1162,28 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1064
1162
|
});
|
|
1065
1163
|
}
|
|
1066
1164
|
return { response: result.response, durationByDataSource };
|
|
1165
|
+
}, _AssetsController_getNativeAssetMap = function _AssetsController_getNativeAssetMap() {
|
|
1166
|
+
return (__classPrivateFieldGet(this, _AssetsController_queryApiClient, "f").getCachedData(NATIVE_ASSETS_QUERY_KEY) ?? {});
|
|
1167
|
+
}, _AssetsController_isNativeAsset = function _AssetsController_isNativeAsset(assetId) {
|
|
1168
|
+
const parsed = parseCaipAssetType(assetId);
|
|
1169
|
+
if (parsed.assetNamespace === 'slip44') {
|
|
1170
|
+
return true;
|
|
1171
|
+
}
|
|
1172
|
+
const lower = assetId.toLowerCase();
|
|
1173
|
+
const isInNativeAssetMap = Object.values(__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetMap).call(this)).some((id) => id.toLowerCase() === lower);
|
|
1174
|
+
if (isInNativeAssetMap) {
|
|
1175
|
+
return true;
|
|
1176
|
+
}
|
|
1177
|
+
if (parsed.assetNamespace === 'erc20' &&
|
|
1178
|
+
parsed.assetReference === ZERO_ADDRESS) {
|
|
1179
|
+
return true;
|
|
1180
|
+
}
|
|
1181
|
+
return false;
|
|
1067
1182
|
}, _AssetsController_resolveNativeAssetIds = function _AssetsController_resolveNativeAssetIds(chains) {
|
|
1068
|
-
const
|
|
1183
|
+
const nativeAssetMap = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetMap).call(this);
|
|
1069
1184
|
const ids = [];
|
|
1070
1185
|
for (const chainId of chains) {
|
|
1071
|
-
const nativeId =
|
|
1186
|
+
const nativeId = nativeAssetMap[chainId];
|
|
1072
1187
|
if (nativeId) {
|
|
1073
1188
|
ids.push(nativeId);
|
|
1074
1189
|
}
|
|
@@ -1079,7 +1194,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1079
1194
|
}, _AssetsController_getNativeAssetIdsForAccount = function _AssetsController_getNativeAssetIdsForAccount(account) {
|
|
1080
1195
|
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_resolveNativeAssetIds).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getEnabledChainsForAccount).call(this, account));
|
|
1081
1196
|
}, _AssetsController_ensureNativeBalancesDefaultZero = function _AssetsController_ensureNativeBalancesDefaultZero() {
|
|
1082
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1197
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1083
1198
|
if (accounts.length === 0) {
|
|
1084
1199
|
return;
|
|
1085
1200
|
}
|
|
@@ -1168,7 +1283,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1168
1283
|
return next;
|
|
1169
1284
|
})();
|
|
1170
1285
|
// Ensure native tokens have an entry (0 if missing) for chains this account supports
|
|
1171
|
-
const account = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1286
|
+
const account = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).find((a) => a.id === accountId);
|
|
1172
1287
|
const nativeAssetIdsForAccount = account
|
|
1173
1288
|
? __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetIdsForAccount).call(this, account)
|
|
1174
1289
|
: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getNativeAssetIdsForEnabledChains).call(this);
|
|
@@ -1286,7 +1401,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1286
1401
|
}
|
|
1287
1402
|
const assetChainId = extractChainId(typedAssetId);
|
|
1288
1403
|
// Skip native tokens on Tempo networks
|
|
1289
|
-
if (__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_shouldHideNativeToken).call(this, assetChainId,
|
|
1404
|
+
if (__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_shouldHideNativeToken).call(this, assetChainId, metadata)) {
|
|
1290
1405
|
continue;
|
|
1291
1406
|
}
|
|
1292
1407
|
if (!chainIdSet.has(assetChainId)) {
|
|
@@ -1322,14 +1437,12 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1322
1437
|
}
|
|
1323
1438
|
}
|
|
1324
1439
|
return result;
|
|
1325
|
-
}, _AssetsController_shouldHideNativeToken = function _AssetsController_shouldHideNativeToken(chainId,
|
|
1440
|
+
}, _AssetsController_shouldHideNativeToken = function _AssetsController_shouldHideNativeToken(chainId, metadata) {
|
|
1326
1441
|
// Check if it's a chain that should skip native tokens
|
|
1327
1442
|
if (!CHAIN_IDS_WITH_NO_NATIVE_TOKEN.includes(chainId)) {
|
|
1328
1443
|
return false;
|
|
1329
1444
|
}
|
|
1330
|
-
|
|
1331
|
-
const isNative = metadata.type === 'native' || assetId.includes('/slip44:');
|
|
1332
|
-
return isNative;
|
|
1445
|
+
return metadata.type === 'native';
|
|
1333
1446
|
}, _AssetsController_tokenStandardToAssetType = function _AssetsController_tokenStandardToAssetType(tokenStandard) {
|
|
1334
1447
|
switch (tokenStandard) {
|
|
1335
1448
|
case 'native':
|
|
@@ -1346,7 +1459,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1346
1459
|
return 'fungible';
|
|
1347
1460
|
}
|
|
1348
1461
|
}, _AssetsController_start = function _AssetsController_start() {
|
|
1349
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1462
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1350
1463
|
const chainIds = [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")];
|
|
1351
1464
|
if (accounts.length === 0 || chainIds.length === 0) {
|
|
1352
1465
|
return;
|
|
@@ -1358,6 +1471,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1358
1471
|
selectedAccountCount: accounts.length,
|
|
1359
1472
|
enabledChainCount: chainIds.length,
|
|
1360
1473
|
});
|
|
1474
|
+
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
1361
1475
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1362
1476
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
1363
1477
|
this.getAssets(accounts, {
|
|
@@ -1373,6 +1487,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1373
1487
|
});
|
|
1374
1488
|
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, false, "f");
|
|
1375
1489
|
__classPrivateFieldSet(this, _AssetsController_stateSizeReported, false, "f");
|
|
1490
|
+
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(), "f");
|
|
1376
1491
|
// Stop price subscription first (uses direct messenger call)
|
|
1377
1492
|
this.unsubscribeAssetsPrice();
|
|
1378
1493
|
// Stop balance subscriptions by properly notifying data sources via messenger
|
|
@@ -1395,23 +1510,21 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1395
1510
|
}
|
|
1396
1511
|
__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").clear();
|
|
1397
1512
|
}, _AssetsController_subscribeAssets = function _AssetsController_subscribeAssets() {
|
|
1398
|
-
|
|
1513
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1514
|
+
const enabledChains = [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")];
|
|
1515
|
+
if (accounts.length === 0 || enabledChains.length === 0) {
|
|
1399
1516
|
return;
|
|
1400
1517
|
}
|
|
1401
1518
|
// Subscribe to balance updates (batched by data source)
|
|
1402
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this,
|
|
1403
|
-
...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
|
|
1404
|
-
]);
|
|
1519
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this, accounts, enabledChains);
|
|
1405
1520
|
// Subscribe to staked balance updates (separate from regular balance chain-claiming)
|
|
1406
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeStakedBalance).call(this,
|
|
1407
|
-
...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
|
|
1408
|
-
]);
|
|
1521
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeStakedBalance).call(this, accounts, enabledChains);
|
|
1409
1522
|
// Subscribe to price updates for all assets held by selected accounts
|
|
1410
|
-
this.subscribeAssetsPrice(
|
|
1523
|
+
this.subscribeAssetsPrice(accounts, enabledChains);
|
|
1411
1524
|
}, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
|
|
1412
1525
|
const chainToAccounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildChainToAccountsMap).call(this, accounts, new Set(chainIds));
|
|
1413
1526
|
const remainingChains = new Set(chainToAccounts.keys());
|
|
1414
|
-
// When basic functionality is on
|
|
1527
|
+
// When basic functionality is on, use all balance data sources; when off, RPC only.
|
|
1415
1528
|
const balanceDataSources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
1416
1529
|
? __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get)
|
|
1417
1530
|
: [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")];
|
|
@@ -1514,16 +1627,19 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1514
1627
|
}
|
|
1515
1628
|
}, _AssetsController_buildDataRequest = function _AssetsController_buildDataRequest(accounts, chainIds, partial = {}) {
|
|
1516
1629
|
const chainIdSet = new Set(chainIds);
|
|
1630
|
+
// Force update will pass in additional chains for wildcard account scope
|
|
1631
|
+
// Enables updates for chains that are not selected (e.g. for unapproved transactions)
|
|
1632
|
+
const forceUpdateChains = partial.forceUpdate ? chainIds : undefined;
|
|
1517
1633
|
const accountsWithSupportedChains = accounts.map((account) => ({
|
|
1518
1634
|
account,
|
|
1519
|
-
supportedChains: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getEnabledChainsForAccount).call(this, account).filter((chain) => chainIdSet.has(chain)),
|
|
1635
|
+
supportedChains: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getEnabledChainsForAccount).call(this, account, forceUpdateChains).filter((chain) => chainIdSet.has(chain)),
|
|
1520
1636
|
}));
|
|
1521
1637
|
return {
|
|
1522
1638
|
accountsWithSupportedChains,
|
|
1523
1639
|
chainIds,
|
|
1524
1640
|
...partial,
|
|
1525
1641
|
};
|
|
1526
|
-
}, _AssetsController_getEnabledChainsForAccount = function _AssetsController_getEnabledChainsForAccount(account) {
|
|
1642
|
+
}, _AssetsController_getEnabledChainsForAccount = function _AssetsController_getEnabledChainsForAccount(account, additionalChains) {
|
|
1527
1643
|
// Account scopes are CAIP-2 chain IDs like "eip155:1", "solana:mainnet", "bip122:..."
|
|
1528
1644
|
const scopes = account.scopes ?? [];
|
|
1529
1645
|
const result = [];
|
|
@@ -1536,6 +1652,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1536
1652
|
const { namespace, reference } = parseCaipChainId(scopeStr);
|
|
1537
1653
|
// Wildcard scope (e.g., "eip155:0" means all enabled chains in that namespace)
|
|
1538
1654
|
if (reference === '0') {
|
|
1655
|
+
// Add enabled chains
|
|
1539
1656
|
for (const chain of __classPrivateFieldGet(this, _AssetsController_enabledChains, "f")) {
|
|
1540
1657
|
if (isCaipChainId(chain)) {
|
|
1541
1658
|
const chainParsed = parseCaipChainId(chain);
|
|
@@ -1544,6 +1661,15 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1544
1661
|
}
|
|
1545
1662
|
}
|
|
1546
1663
|
}
|
|
1664
|
+
// Add additional chains
|
|
1665
|
+
for (const chain of additionalChains ?? []) {
|
|
1666
|
+
if (isCaipChainId(chain)) {
|
|
1667
|
+
const chainParsed = parseCaipChainId(chain);
|
|
1668
|
+
if (chainParsed.namespace === namespace) {
|
|
1669
|
+
result.push(chain);
|
|
1670
|
+
}
|
|
1671
|
+
}
|
|
1672
|
+
}
|
|
1547
1673
|
}
|
|
1548
1674
|
else if (namespace === 'eip155' && isStrictHexString(reference)) {
|
|
1549
1675
|
// Normalize hex to decimal for EIP155
|
|
@@ -1559,11 +1685,12 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
1559
1685
|
// EVENT HANDLERS
|
|
1560
1686
|
// ============================================================================
|
|
1561
1687
|
async function _AssetsController_handleAccountGroupChanged() {
|
|
1562
|
-
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1688
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
1563
1689
|
log('Account group changed', {
|
|
1564
1690
|
accountCount: accounts.length,
|
|
1565
1691
|
accountIds: accounts.map((a) => a.id),
|
|
1566
1692
|
});
|
|
1693
|
+
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
1567
1694
|
// Subscribe and fetch for the new account group
|
|
1568
1695
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1569
1696
|
if (accounts.length > 0) {
|
|
@@ -1602,8 +1729,8 @@ async function _AssetsController_handleAccountGroupChanged() {
|
|
|
1602
1729
|
// Refresh subscriptions for new chain set
|
|
1603
1730
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1604
1731
|
// Do one-time fetch for newly enabled chains; merge so we keep existing chain balances
|
|
1605
|
-
if (addedChains.length > 0 && __classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1606
|
-
await this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "
|
|
1732
|
+
if (addedChains.length > 0 && __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).length > 0) {
|
|
1733
|
+
await this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this), {
|
|
1607
1734
|
chainIds: addedChains,
|
|
1608
1735
|
forceUpdate: true,
|
|
1609
1736
|
updateMode: 'merge',
|