@metamask-previews/assets-controller 11.3.1-preview-a42e8d0d2 → 13.1.0-preview-5a03e1b92

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.
Files changed (80) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/dist/AssetsController-method-action-types.cjs.map +1 -1
  3. package/dist/AssetsController-method-action-types.d.cts +45 -4
  4. package/dist/AssetsController-method-action-types.d.cts.map +1 -1
  5. package/dist/AssetsController-method-action-types.d.mts +45 -4
  6. package/dist/AssetsController-method-action-types.d.mts.map +1 -1
  7. package/dist/AssetsController-method-action-types.mjs.map +1 -1
  8. package/dist/AssetsController.cjs +109 -65
  9. package/dist/AssetsController.cjs.map +1 -1
  10. package/dist/AssetsController.d.cts +40 -4
  11. package/dist/AssetsController.d.cts.map +1 -1
  12. package/dist/AssetsController.d.mts +40 -4
  13. package/dist/AssetsController.d.mts.map +1 -1
  14. package/dist/AssetsController.mjs +109 -65
  15. package/dist/AssetsController.mjs.map +1 -1
  16. package/dist/data-sources/AccountActivityDataSource.cjs +262 -0
  17. package/dist/data-sources/AccountActivityDataSource.cjs.map +1 -0
  18. package/dist/data-sources/AccountActivityDataSource.d.cts +80 -0
  19. package/dist/data-sources/AccountActivityDataSource.d.cts.map +1 -0
  20. package/dist/data-sources/AccountActivityDataSource.d.mts +80 -0
  21. package/dist/data-sources/AccountActivityDataSource.d.mts.map +1 -0
  22. package/dist/data-sources/AccountActivityDataSource.mjs +254 -0
  23. package/dist/data-sources/AccountActivityDataSource.mjs.map +1 -0
  24. package/dist/data-sources/AccountsApiDataSource.cjs +22 -0
  25. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
  26. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
  27. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
  28. package/dist/data-sources/AccountsApiDataSource.mjs +22 -0
  29. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
  30. package/dist/data-sources/RpcDataSource.cjs +10 -2
  31. package/dist/data-sources/RpcDataSource.cjs.map +1 -1
  32. package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
  33. package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
  34. package/dist/data-sources/RpcDataSource.mjs +11 -3
  35. package/dist/data-sources/RpcDataSource.mjs.map +1 -1
  36. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +9 -4
  37. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -1
  38. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts +16 -1
  39. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -1
  40. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts +16 -1
  41. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -1
  42. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs +9 -4
  43. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -1
  44. package/dist/data-sources/index.cjs +4 -4
  45. package/dist/data-sources/index.cjs.map +1 -1
  46. package/dist/data-sources/index.d.cts +1 -1
  47. package/dist/data-sources/index.d.cts.map +1 -1
  48. package/dist/data-sources/index.d.mts +1 -1
  49. package/dist/data-sources/index.d.mts.map +1 -1
  50. package/dist/data-sources/index.mjs +1 -1
  51. package/dist/data-sources/index.mjs.map +1 -1
  52. package/dist/index.cjs +22 -26
  53. package/dist/index.cjs.map +1 -1
  54. package/dist/index.d.cts +1 -3
  55. package/dist/index.d.cts.map +1 -1
  56. package/dist/index.d.mts +1 -3
  57. package/dist/index.d.mts.map +1 -1
  58. package/dist/index.mjs +0 -2
  59. package/dist/index.mjs.map +1 -1
  60. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs +1 -1
  61. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs.map +1 -1
  62. package/dist/middlewares/CustomAssetGraduationMiddleware.mjs +1 -1
  63. package/dist/middlewares/CustomAssetGraduationMiddleware.mjs.map +1 -1
  64. package/package.json +11 -10
  65. package/dist/data-sources/BackendWebsocketDataSource.cjs +0 -597
  66. package/dist/data-sources/BackendWebsocketDataSource.cjs.map +0 -1
  67. package/dist/data-sources/BackendWebsocketDataSource.d.cts +0 -65
  68. package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +0 -1
  69. package/dist/data-sources/BackendWebsocketDataSource.d.mts +0 -65
  70. package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +0 -1
  71. package/dist/data-sources/BackendWebsocketDataSource.mjs +0 -592
  72. package/dist/data-sources/BackendWebsocketDataSource.mjs.map +0 -1
  73. package/dist/utils/processAccountActivityBalanceUpdates.cjs +0 -54
  74. package/dist/utils/processAccountActivityBalanceUpdates.cjs.map +0 -1
  75. package/dist/utils/processAccountActivityBalanceUpdates.d.cts +0 -13
  76. package/dist/utils/processAccountActivityBalanceUpdates.d.cts.map +0 -1
  77. package/dist/utils/processAccountActivityBalanceUpdates.d.mts +0 -13
  78. package/dist/utils/processAccountActivityBalanceUpdates.d.mts.map +0 -1
  79. package/dist/utils/processAccountActivityBalanceUpdates.mjs +0 -47
  80. package/dist/utils/processAccountActivityBalanceUpdates.mjs.map +0 -1
@@ -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, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _AssetsController_controllerMutex, _AssetsController_accountRefreshMutex, _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_customAssetGraduationMiddleware, _AssetsController_rpcFallbackMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_queryApiClient, _AssetsController_onActiveChainsUpdated, _AssetsController_initializeNativeAssetsMap, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_onUnapprovedTransactionAdded, _AssetsController_onTransactionConfirmed, _AssetsController_onAccountActivityBalanceUpdated, _AssetsController_updateActive, _AssetsController_handleAccountTreeStateChange, _AssetsController_runAccountTreeRefresh, _AssetsController_runStartupRefresh, _AssetsController_registerActionHandlers, _AssetsController_handleActiveChainsUpdate, _AssetsController_executeMiddlewares, _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;
16
+ var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trace, _AssetsController_captureException, _AssetsController_firstInitFetchReported, _AssetsController_stateSizeReported, _AssetsController_emitStateSizeTrace, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _AssetsController_controllerMutex, _AssetsController_accountRefreshMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_lastKnownAccountIds, _AssetsController_getSelectedAccounts, _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_onUnapprovedTransactionAdded, _AssetsController_onTransactionConfirmed, _AssetsController_updateActive, _AssetsController_handleAccountTreeStateChange, _AssetsController_runAccountTreeRefresh, _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");
@@ -22,8 +22,8 @@ const utils_1 = require("@metamask/utils");
22
22
  const async_mutex_1 = require("async-mutex");
23
23
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
24
24
  const lodash_1 = require("lodash");
25
+ const AccountActivityDataSource_js_1 = require("./data-sources/AccountActivityDataSource.cjs");
25
26
  const AccountsApiDataSource_js_1 = require("./data-sources/AccountsApiDataSource.cjs");
26
- const BackendWebsocketDataSource_js_1 = require("./data-sources/BackendWebsocketDataSource.cjs");
27
27
  const assets_js_1 = require("./data-sources/evm-rpc-services/utils/assets.cjs");
28
28
  const PriceDataSource_js_1 = require("./data-sources/PriceDataSource.cjs");
29
29
  const RpcDataSource_js_1 = require("./data-sources/RpcDataSource.cjs");
@@ -41,7 +41,6 @@ const healAssetsInfoMetadata_js_1 = require("./migrations/healAssetsInfoMetadata
41
41
  const constants_js_1 = require("./utils/constants.cjs");
42
42
  const customAssetsRpcSupplement_js_1 = require("./utils/customAssetsRpcSupplement.cjs");
43
43
  const index_js_1 = require("./utils/index.cjs");
44
- const processAccountActivityBalanceUpdates_js_1 = require("./utils/processAccountActivityBalanceUpdates.cjs");
45
44
  const trace_js_1 = require("./utils/trace.cjs");
46
45
  const NATIVE_ASSETS_QUERY_KEY = ['nativeAssets'];
47
46
  /** Stable empty map so memoized formatters are not busted by `?? {}` identity churn. */
@@ -55,7 +54,9 @@ const MESSENGER_EXPOSED_METHODS = [
55
54
  'getAssets',
56
55
  'getAssetsBalance',
57
56
  'getAssetMetadata',
58
- 'getAsset',
57
+ 'getAccountAssetByID',
58
+ 'getAccountAssetsByIDs',
59
+ 'getAccountAssetsByScope',
59
60
  'getAssetsPrice',
60
61
  'getExchangeRatesForBridge',
61
62
  'getStateForTransactionPay',
@@ -316,7 +317,7 @@ class AssetsController extends base_controller_1.BaseController {
316
317
  * re-subscriptions when the account set hasn't actually changed.
317
318
  */
318
319
  _AssetsController_lastKnownAccountIds.set(this, new Set());
319
- _AssetsController_backendWebsocketDataSource.set(this, void 0);
320
+ _AssetsController_accountActivityDataSource.set(this, void 0);
320
321
  _AssetsController_accountsApiDataSource.set(this, void 0);
321
322
  _AssetsController_snapDataSource.set(this, void 0);
322
323
  _AssetsController_rpcDataSource.set(this, void 0);
@@ -357,11 +358,11 @@ class AssetsController extends base_controller_1.BaseController {
357
358
  });
358
359
  }
359
360
  }, "f");
360
- __classPrivateFieldSet(this, _AssetsController_backendWebsocketDataSource, new BackendWebsocketDataSource_js_1.BackendWebsocketDataSource({
361
+ __classPrivateFieldSet(this, _AssetsController_accountActivityDataSource, new AccountActivityDataSource_js_1.AccountActivityDataSource({
361
362
  messenger: this.messenger,
362
- queryApiClient,
363
363
  onActiveChainsUpdated: __classPrivateFieldGet(this, _AssetsController_onActiveChainsUpdated, "f"),
364
364
  getAssetType: (assetId) => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetType).call(this, assetId),
365
+ onAssetsUpdate: (response, request) => this.handleAssetsUpdate(response, __classPrivateFieldGet(this, _AssetsController_accountActivityDataSource, "f").getName(), request),
365
366
  }), "f");
366
367
  __classPrivateFieldSet(this, _AssetsController_accountsApiDataSource, new AccountsApiDataSource_js_1.AccountsApiDataSource({
367
368
  messenger: this.messenger,
@@ -641,21 +642,81 @@ class AssetsController extends base_controller_1.BaseController {
641
642
  * renderable asset (balance + metadata) exists for the account/asset pair.
642
643
  * @throws If `accountId` is empty or `assetId` is not a valid CAIP-19 asset ID.
643
644
  */
644
- getAsset(accountId, assetId) {
645
- if (typeof accountId !== 'string' || accountId.length === 0) {
646
- throw new Error('AssetsController.getAsset: accountId must be a non-empty string');
647
- }
648
- let normalizedAssetId;
649
- try {
650
- normalizedAssetId = (0, index_js_1.normalizeAssetId)(assetId);
651
- }
652
- catch {
653
- throw new Error(`AssetsController.getAsset: invalid CAIP-19 assetId "${assetId}"`);
654
- }
645
+ getAccountAssetByID(accountId, assetId) {
646
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_assertNonEmptyAccountId).call(this, accountId, 'getAccountAssetByID');
647
+ const normalizedAssetId = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_normalizeAssetIdOrThrow).call(this, assetId, 'getAccountAssetByID');
655
648
  return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetFromState).call(this, accountId, normalizedAssetId, {
656
649
  assetTypeSet: new Set(['fungible']),
657
650
  });
658
651
  }
652
+ /**
653
+ * Get multiple combined assets (balance + metadata + price + computed
654
+ * `fiatValue`) for an account directly from controller state.
655
+ *
656
+ * Applies the same state-composition and filtering rules as
657
+ * `getAccountAssetByID` to each requested asset ID. Asset IDs that do not
658
+ * resolve to a complete renderable asset (missing balance/metadata, hidden,
659
+ * or otherwise filtered out) are omitted from the result. Reads from
660
+ * current state only and does not trigger a data-source refresh.
661
+ *
662
+ * @param accountId - The account ID (`InternalAccount.id`, not an address).
663
+ * @param assetIds - The CAIP-19 asset IDs including chain scope
664
+ * (e.g. `eip155:1/erc20:0x...`).
665
+ * @returns A record of combined `Asset`s keyed by normalized CAIP-19 asset
666
+ * ID, containing only the requested assets that resolved.
667
+ * @throws If `accountId` is empty or any `assetIds` entry is not a valid
668
+ * CAIP-19 asset ID.
669
+ */
670
+ getAccountAssetsByIDs(accountId, assetIds) {
671
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_assertNonEmptyAccountId).call(this, accountId, 'getAccountAssetsByIDs');
672
+ const result = Object.create(null);
673
+ for (const assetId of assetIds) {
674
+ const normalizedAssetId = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_normalizeAssetIdOrThrow).call(this, assetId, 'getAccountAssetsByIDs');
675
+ const asset = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetFromState).call(this, accountId, normalizedAssetId, {
676
+ assetTypeSet: new Set(['fungible']),
677
+ });
678
+ if (asset) {
679
+ result[normalizedAssetId] = asset;
680
+ }
681
+ }
682
+ return result;
683
+ }
684
+ /**
685
+ * Get all combined assets (balance + metadata + price + computed
686
+ * `fiatValue`) an account holds on a given chain scope, directly from
687
+ * controller state.
688
+ *
689
+ * Applies the same state-composition and filtering rules as
690
+ * `getAccountAssetByID` (hidden or otherwise filtered assets are excluded).
691
+ * Reads from current state only and does not trigger a data-source refresh.
692
+ *
693
+ * @param accountId - The account ID (`InternalAccount.id`, not an address).
694
+ * @param scope - The CAIP-2 chain ID to filter by (e.g. `eip155:1`).
695
+ * @returns A record of combined `Asset`s keyed by CAIP-19 asset ID,
696
+ * containing only the account's assets on the given scope.
697
+ * @throws If `accountId` is empty or `scope` is not a valid CAIP-2 chain ID.
698
+ */
699
+ getAccountAssetsByScope(accountId, scope) {
700
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_assertNonEmptyAccountId).call(this, accountId, 'getAccountAssetsByScope');
701
+ if (!(0, utils_1.isCaipChainId)(scope)) {
702
+ throw new Error(`AssetsController.getAccountAssetsByScope: invalid CAIP-2 scope "${String(scope)}"`);
703
+ }
704
+ const result = Object.create(null);
705
+ const chainIdSet = new Set([scope]);
706
+ const assetTypeSet = new Set(['fungible']);
707
+ const accountBalances = this.state.assetsBalance[accountId] ?? {};
708
+ for (const assetId of Object.keys(accountBalances)) {
709
+ const typedAssetId = assetId;
710
+ const asset = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetFromState).call(this, accountId, typedAssetId, {
711
+ chainIdSet,
712
+ assetTypeSet,
713
+ });
714
+ if (asset) {
715
+ result[typedAssetId] = asset;
716
+ }
717
+ }
718
+ return result;
719
+ }
659
720
  async getAssetsPrice(accounts, options) {
660
721
  const assets = await this.getAssets(accounts, {
661
722
  chainIds: options?.chainIds,
@@ -1009,12 +1070,12 @@ class AssetsController extends base_controller_1.BaseController {
1009
1070
  ...resolvedRequest,
1010
1071
  dataTypes: resolvedRequest.dataTypes.filter((dt) => dt !== 'metadata' && dt !== 'price'),
1011
1072
  };
1012
- // Graduate custom assets only when AccountsAPI / Websocket reports them.
1013
- // RPC already fetches custom assets on purpose, and Snap handles non-EVM
1014
- // chains the rule does not apply to, so skip the middleware for those.
1073
+ // Graduate custom assets only when AccountsAPI / AccountActivity reports
1074
+ // them. RPC already fetches custom assets on purpose, and Snap handles
1075
+ // non-EVM chains the rule does not apply to, so skip the middleware for
1076
+ // those.
1015
1077
  const shouldGraduateCustomAssets = sourceId === 'AccountsApiDataSource' ||
1016
- sourceId === 'BackendWebsocketDataSource' ||
1017
- sourceId === 'AccountActivityService';
1078
+ sourceId === 'AccountActivityDataSource';
1018
1079
  const enrichmentSources = [
1019
1080
  ...(shouldGraduateCustomAssets
1020
1081
  ? [__classPrivateFieldGet(this, _AssetsController_customAssetGraduationMiddleware, "f")]
@@ -1066,7 +1127,7 @@ class AssetsController extends base_controller_1.BaseController {
1066
1127
  subscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
1067
1128
  });
1068
1129
  // Destroy instantiated data sources
1069
- __classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f")?.destroy?.();
1130
+ __classPrivateFieldGet(this, _AssetsController_accountActivityDataSource, "f")?.destroy?.();
1070
1131
  __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f")?.destroy?.();
1071
1132
  __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f")?.destroy?.();
1072
1133
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")?.destroy?.();
@@ -1081,7 +1142,9 @@ class AssetsController extends base_controller_1.BaseController {
1081
1142
  this.messenger.unregisterActionHandler('AssetsController:getAssets');
1082
1143
  this.messenger.unregisterActionHandler('AssetsController:getAssetsBalance');
1083
1144
  this.messenger.unregisterActionHandler('AssetsController:getAssetMetadata');
1084
- this.messenger.unregisterActionHandler('AssetsController:getAsset');
1145
+ this.messenger.unregisterActionHandler('AssetsController:getAccountAssetByID');
1146
+ this.messenger.unregisterActionHandler('AssetsController:getAccountAssetsByIDs');
1147
+ this.messenger.unregisterActionHandler('AssetsController:getAccountAssetsByScope');
1085
1148
  this.messenger.unregisterActionHandler('AssetsController:getAssetsPrice');
1086
1149
  this.messenger.unregisterActionHandler('AssetsController:getExchangeRatesForBridge');
1087
1150
  this.messenger.unregisterActionHandler('AssetsController:getStateForTransactionPay');
@@ -1094,7 +1157,7 @@ class AssetsController extends base_controller_1.BaseController {
1094
1157
  }
1095
1158
  }
1096
1159
  exports.AssetsController = AssetsController;
1097
- _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_uiOpen = new WeakMap(), _AssetsController_keyringUnlocked = new WeakMap(), _AssetsController_controllerMutex = new WeakMap(), _AssetsController_accountRefreshMutex = 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_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() {
1160
+ _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_uiOpen = new WeakMap(), _AssetsController_keyringUnlocked = new WeakMap(), _AssetsController_controllerMutex = new WeakMap(), _AssetsController_accountRefreshMutex = new WeakMap(), _AssetsController_activeSubscriptions = new WeakMap(), _AssetsController_enabledChains = new WeakMap(), _AssetsController_lastKnownAccountIds = 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() {
1098
1161
  if (!__classPrivateFieldGet(this, _AssetsController_trace, "f") || __classPrivateFieldGet(this, _AssetsController_stateSizeReported, "f")) {
1099
1162
  return;
1100
1163
  }
@@ -1149,7 +1212,7 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
1149
1212
  return [];
1150
1213
  }, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
1151
1214
  return [
1152
- __classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f"),
1215
+ __classPrivateFieldGet(this, _AssetsController_accountActivityDataSource, "f"),
1153
1216
  __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
1154
1217
  __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
1155
1218
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
@@ -1268,12 +1331,6 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
1268
1331
  this.messenger.subscribe('TransactionController:transactionConfirmed', (transactionMeta) => {
1269
1332
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_onTransactionConfirmed).call(this, transactionMeta);
1270
1333
  });
1271
- // Real-time post-tx balances from AccountActivityService (same WS payload as
1272
- // TokenBalancesController; BackendWebsocketDataSource may not receive the
1273
- // callback when AccountActivityService owns the server subscription).
1274
- this.messenger.subscribe('AccountActivityService:balanceUpdated', (event) => {
1275
- __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_onAccountActivityBalanceUpdated).call(this, event);
1276
- });
1277
1334
  }, _AssetsController_onUnapprovedTransactionAdded = function _AssetsController_onUnapprovedTransactionAdded(transactionMeta) {
1278
1335
  const hexChainId = transactionMeta.chainId;
1279
1336
  if (!hexChainId) {
@@ -1316,26 +1373,6 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
1316
1373
  }).catch((error) => {
1317
1374
  log('Failed to refresh assets after transaction confirmed', { error });
1318
1375
  });
1319
- }, _AssetsController_onAccountActivityBalanceUpdated = function _AssetsController_onAccountActivityBalanceUpdated({ address, chain, updates, }) {
1320
- const account = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this).find((a) => a.address.startsWith('0x')
1321
- ? a.address.toLowerCase() === address.toLowerCase()
1322
- : a.address === address);
1323
- if (!account) {
1324
- return;
1325
- }
1326
- const chainId = chain;
1327
- const response = (0, processAccountActivityBalanceUpdates_js_1.processAccountActivityBalanceUpdates)(updates, account.id, (assetId) => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetType).call(this, assetId));
1328
- if (!response.assetsBalance) {
1329
- return;
1330
- }
1331
- const request = {
1332
- accountsWithSupportedChains: [{ account, supportedChains: [chainId] }],
1333
- chainIds: [chainId],
1334
- dataTypes: ['balance', 'metadata'],
1335
- };
1336
- this.handleAssetsUpdate(response, 'AccountActivityService', request).catch((error) => {
1337
- log('Failed to apply AccountActivityService balance update', { error });
1338
- });
1339
1376
  }, _AssetsController_updateActive = function _AssetsController_updateActive() {
1340
1377
  const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") && __classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f");
1341
1378
  if (shouldRun) {
@@ -1433,7 +1470,7 @@ async function _AssetsController_runStartupRefresh(accounts) {
1433
1470
  }, _AssetsController_registerActionHandlers = function _AssetsController_registerActionHandlers() {
1434
1471
  this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
1435
1472
  }, _AssetsController_handleActiveChainsUpdate = function _AssetsController_handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
1436
- if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f").call(this)) {
1473
+ if (!__classPrivateFieldGet(this, _AssetsController_uiOpen, "f") || !__classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f") || !__classPrivateFieldGet(this, _AssetsController_isEnabled, "f").call(this)) {
1437
1474
  return;
1438
1475
  }
1439
1476
  log('Data source active chains changed', {
@@ -1445,11 +1482,8 @@ async function _AssetsController_runStartupRefresh(accounts) {
1445
1482
  const previousSet = new Set(previous);
1446
1483
  const addedChains = activeChains.filter((ch) => !previousSet.has(ch));
1447
1484
  const removedChains = previous.filter((ch) => !activeChains.includes(ch));
1485
+ // Refresh subscriptions to use updated data source availability.
1448
1486
  if (addedChains.length > 0 || removedChains.length > 0) {
1449
- // Refresh subscriptions to use updated data source availability.
1450
- // No one-time fetch needed here — #handleEnabledNetworksChanged
1451
- // handles fetches when the user enables a network, and
1452
- // #subscribeAssets re-subscribes with the correct chain assignment.
1453
1487
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
1454
1488
  }
1455
1489
  }, _AssetsController_executeMiddlewares =
@@ -1564,6 +1598,17 @@ async function _AssetsController_executeMiddlewares(params) {
1564
1598
  });
1565
1599
  }
1566
1600
  return { response: result.response, durationByDataSource };
1601
+ }, _AssetsController_assertNonEmptyAccountId = function _AssetsController_assertNonEmptyAccountId(accountId, methodName) {
1602
+ if (typeof accountId !== 'string' || accountId.length === 0) {
1603
+ throw new Error(`AssetsController.${methodName}: accountId must be a non-empty string`);
1604
+ }
1605
+ }, _AssetsController_normalizeAssetIdOrThrow = function _AssetsController_normalizeAssetIdOrThrow(assetId, methodName) {
1606
+ try {
1607
+ return (0, index_js_1.normalizeAssetId)(assetId);
1608
+ }
1609
+ catch {
1610
+ throw new Error(`AssetsController.${methodName}: invalid CAIP-19 assetId "${assetId}"`);
1611
+ }
1567
1612
  }, _AssetsController_fetchMissingPricesWithoutCache = function _AssetsController_fetchMissingPricesWithoutCache(accounts, chainIds) {
1568
1613
  if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this) || accounts.length === 0) {
1569
1614
  return;
@@ -2054,8 +2099,10 @@ async function _AssetsController_executeMiddlewares(params) {
2054
2099
  }, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
2055
2100
  const chainToAccounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildChainToAccountsMap).call(this, accounts, new Set(chainIds));
2056
2101
  const remainingChains = new Set(chainToAccounts.keys());
2057
- // When basic functionality is on, use all balance data sources; when off, RPC only.
2058
- const balanceDataSources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
2102
+ // When basic functionality is on, use all balance data sources; when off,
2103
+ // RPC only.
2104
+ const isBasicFunctionality = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this);
2105
+ const balanceDataSources = isBasicFunctionality
2059
2106
  ? __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get)
2060
2107
  : [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")];
2061
2108
  let rpcAssignedChains = new Set();
@@ -2357,14 +2404,11 @@ async function _AssetsController_handleAccountGroupChanged() {
2357
2404
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_fetchMissingPricesWithoutCache).call(this, accounts, [caipChainId]);
2358
2405
  }, _AssetsController_refreshActiveChainsOnNetworkSwitch =
2359
2406
  /**
2360
- * Refresh data-source `activeChains` after an EVM network switch so API/WS/Rpc
2407
+ * Refresh data-source `activeChains` after an EVM network switch so API/Rpc
2361
2408
  * chain claiming is not stuck on an empty or stale init-time list.
2362
2409
  */
2363
2410
  async function _AssetsController_refreshActiveChainsOnNetworkSwitch() {
2364
- await Promise.all([
2365
- __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f").refreshActiveChains(),
2366
- __classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f").refreshActiveChains(),
2367
- ]);
2411
+ await __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f").refreshActiveChains();
2368
2412
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").refreshActiveChainsFromNetworkState();
2369
2413
  }, _AssetsController_getSelectedEvmChainIdFromNetworkState = function _AssetsController_getSelectedEvmChainIdFromNetworkState(networkState) {
2370
2414
  try {