@metamask-previews/assets-controller 2.0.2-preview-3d4d0d0ef → 2.0.2-preview-0866a6f

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 (90) hide show
  1. package/CHANGELOG.md +17 -1
  2. package/dist/AssetsController-method-action-types.cjs.map +1 -1
  3. package/dist/AssetsController-method-action-types.d.cts +5 -0
  4. package/dist/AssetsController-method-action-types.d.cts.map +1 -1
  5. package/dist/AssetsController-method-action-types.d.mts +5 -0
  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 +148 -29
  9. package/dist/AssetsController.cjs.map +1 -1
  10. package/dist/AssetsController.d.cts +37 -5
  11. package/dist/AssetsController.d.cts.map +1 -1
  12. package/dist/AssetsController.d.mts +37 -5
  13. package/dist/AssetsController.d.mts.map +1 -1
  14. package/dist/AssetsController.mjs +148 -29
  15. package/dist/AssetsController.mjs.map +1 -1
  16. package/dist/data-sources/AccountsApiDataSource.cjs +1 -0
  17. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
  18. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
  19. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
  20. package/dist/data-sources/AccountsApiDataSource.mjs +1 -0
  21. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
  22. package/dist/data-sources/BackendWebsocketDataSource.cjs +16 -4
  23. package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
  24. package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
  25. package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
  26. package/dist/data-sources/BackendWebsocketDataSource.mjs +13 -4
  27. package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
  28. package/dist/data-sources/PriceDataSource.cjs +20 -14
  29. package/dist/data-sources/PriceDataSource.cjs.map +1 -1
  30. package/dist/data-sources/PriceDataSource.d.cts +2 -2
  31. package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
  32. package/dist/data-sources/PriceDataSource.d.mts +2 -2
  33. package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
  34. package/dist/data-sources/PriceDataSource.mjs +20 -14
  35. package/dist/data-sources/PriceDataSource.mjs.map +1 -1
  36. package/dist/data-sources/RpcDataSource.cjs +2 -0
  37. package/dist/data-sources/RpcDataSource.cjs.map +1 -1
  38. package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
  39. package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
  40. package/dist/data-sources/RpcDataSource.mjs +2 -0
  41. package/dist/data-sources/RpcDataSource.mjs.map +1 -1
  42. package/dist/data-sources/SnapDataSource.cjs +3 -2
  43. package/dist/data-sources/SnapDataSource.cjs.map +1 -1
  44. package/dist/data-sources/SnapDataSource.d.cts.map +1 -1
  45. package/dist/data-sources/SnapDataSource.d.mts.map +1 -1
  46. package/dist/data-sources/SnapDataSource.mjs +3 -2
  47. package/dist/data-sources/SnapDataSource.mjs.map +1 -1
  48. package/dist/data-sources/TokenDataSource.cjs +1 -0
  49. package/dist/data-sources/TokenDataSource.cjs.map +1 -1
  50. package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
  51. package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
  52. package/dist/data-sources/TokenDataSource.mjs +1 -0
  53. package/dist/data-sources/TokenDataSource.mjs.map +1 -1
  54. package/dist/index.cjs.map +1 -1
  55. package/dist/index.d.cts +2 -1
  56. package/dist/index.d.cts.map +1 -1
  57. package/dist/index.d.mts +2 -1
  58. package/dist/index.d.mts.map +1 -1
  59. package/dist/index.mjs.map +1 -1
  60. package/dist/middlewares/DetectionMiddleware.cjs +44 -27
  61. package/dist/middlewares/DetectionMiddleware.cjs.map +1 -1
  62. package/dist/middlewares/DetectionMiddleware.d.cts +15 -9
  63. package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -1
  64. package/dist/middlewares/DetectionMiddleware.d.mts +15 -9
  65. package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -1
  66. package/dist/middlewares/DetectionMiddleware.mjs +44 -27
  67. package/dist/middlewares/DetectionMiddleware.mjs.map +1 -1
  68. package/dist/middlewares/ParallelMiddleware.cjs +216 -0
  69. package/dist/middlewares/ParallelMiddleware.cjs.map +1 -0
  70. package/dist/middlewares/ParallelMiddleware.d.cts +45 -0
  71. package/dist/middlewares/ParallelMiddleware.d.cts.map +1 -0
  72. package/dist/middlewares/ParallelMiddleware.d.mts +45 -0
  73. package/dist/middlewares/ParallelMiddleware.d.mts.map +1 -0
  74. package/dist/middlewares/ParallelMiddleware.mjs +214 -0
  75. package/dist/middlewares/ParallelMiddleware.mjs.map +1 -0
  76. package/dist/middlewares/index.cjs +5 -1
  77. package/dist/middlewares/index.cjs.map +1 -1
  78. package/dist/middlewares/index.d.cts +2 -0
  79. package/dist/middlewares/index.d.cts.map +1 -1
  80. package/dist/middlewares/index.d.mts +2 -0
  81. package/dist/middlewares/index.d.mts.map +1 -1
  82. package/dist/middlewares/index.mjs +1 -0
  83. package/dist/middlewares/index.mjs.map +1 -1
  84. package/dist/types.cjs.map +1 -1
  85. package/dist/types.d.cts +16 -0
  86. package/dist/types.d.cts.map +1 -1
  87. package/dist/types.d.mts +16 -0
  88. package/dist/types.d.mts.map +1 -1
  89. package/dist/types.mjs.map +1 -1
  90. package/package.json +6 -5
@@ -2,7 +2,8 @@ import type { AccountTreeControllerGetAccountsFromSelectedAccountGroupAction, Ac
2
2
  import type { GetTokenListState } from "@metamask/assets-controllers";
3
3
  import { BaseController } from "@metamask/base-controller";
4
4
  import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
5
- import type { ApiPlatformClient, BackendWebSocketServiceActions, BackendWebSocketServiceEvents } from "@metamask/core-backend";
5
+ import type { ClientControllerStateChangeEvent } from "@metamask/client-controller";
6
+ import type { ApiPlatformClient, BackendWebSocketServiceActions, BackendWebSocketServiceEvents, SupportedCurrency } from "@metamask/core-backend";
6
7
  import type { KeyringControllerLockEvent, KeyringControllerUnlockEvent } from "@metamask/keyring-controller";
7
8
  import type { InternalAccount } from "@metamask/keyring-internal-api";
8
9
  import type { Messenger } from "@metamask/messenger";
@@ -19,6 +20,21 @@ import type { RpcDataSourceConfig } from "./data-sources/RpcDataSource.cjs";
19
20
  import type { AccountsControllerAccountBalancesUpdatedEvent } from "./data-sources/SnapDataSource.cjs";
20
21
  import type { StakedBalanceDataSourceConfig } from "./data-sources/StakedBalanceDataSource.cjs";
21
22
  import type { AccountId, AssetPreferences, ChainId, Caip19AssetId, AssetMetadata, AssetPrice, AssetBalance, AssetType, DataType, DataRequest, DataResponse, Asset } from "./types.cjs";
23
+ /**
24
+ * Metadata format passed from the UI when adding a custom token.
25
+ * Mirrors the "pendingTokens" shape used by the extension.
26
+ */
27
+ export type PendingTokenMetadata = {
28
+ address: string;
29
+ symbol: string;
30
+ name: string;
31
+ decimals: number;
32
+ iconUrl?: string;
33
+ aggregators?: string[];
34
+ occurrences?: number;
35
+ chainId: string;
36
+ unlisted?: boolean;
37
+ };
22
38
  declare const CONTROLLER_NAME: "AssetsController";
23
39
  /**
24
40
  * State structure for AssetsController.
@@ -51,6 +67,8 @@ export type AssetsControllerState = {
51
67
  assetPreferences: {
52
68
  [assetId: string]: AssetPreferences;
53
69
  };
70
+ /** Currently-active ISO 4217 currency code */
71
+ selectedCurrency: SupportedCurrency;
54
72
  };
55
73
  /**
56
74
  * Returns the default state for AssetsController.
@@ -87,7 +105,7 @@ export type AssetsControllerAssetsDetectedEvent = {
87
105
  };
88
106
  export type AssetsControllerEvents = AssetsControllerStateChangeEvent | AssetsControllerBalanceChangedEvent | AssetsControllerPriceChangedEvent | AssetsControllerAssetsDetectedEvent;
89
107
  type AllowedActions = AccountTreeControllerGetAccountsFromSelectedAccountGroupAction | GetTokenListState | NetworkControllerGetStateAction | NetworkControllerGetNetworkClientByIdAction | NetworkEnablementControllerGetStateAction | GetRunnableSnaps | HandleSnapRequest | GetPermissions | BackendWebSocketServiceActions;
90
- type AllowedEvents = AccountTreeControllerSelectedAccountGroupChangeEvent | KeyringControllerLockEvent | KeyringControllerUnlockEvent | PreferencesControllerStateChangeEvent | NetworkControllerStateChangeEvent | TransactionControllerTransactionConfirmedEvent | TransactionControllerIncomingTransactionsReceivedEvent | NetworkEnablementControllerEvents | AccountsControllerAccountBalancesUpdatedEvent | PermissionControllerStateChange | BackendWebSocketServiceEvents;
108
+ type AllowedEvents = AccountTreeControllerSelectedAccountGroupChangeEvent | ClientControllerStateChangeEvent | KeyringControllerLockEvent | KeyringControllerUnlockEvent | PreferencesControllerStateChangeEvent | NetworkControllerStateChangeEvent | TransactionControllerTransactionConfirmedEvent | TransactionControllerIncomingTransactionsReceivedEvent | NetworkEnablementControllerEvents | AccountsControllerAccountBalancesUpdatedEvent | PermissionControllerStateChange | BackendWebSocketServiceEvents;
91
109
  export type AssetsControllerMessenger = Messenger<typeof CONTROLLER_NAME, AssetsControllerActions | AllowedActions, AssetsControllerEvents | AllowedEvents>;
92
110
  /**
93
111
  * Payload for the first init/fetch MetaMetrics event.
@@ -164,8 +182,10 @@ export type AssetsControllerOptions = {
164
182
  * based on which chains they support. When active chains change, the controller
165
183
  * dynamically adjusts subscriptions.
166
184
  *
167
- * 4. **Keyring Lifecycle**: Listens to KeyringController unlock/lock events to
168
- * start/stop subscriptions when the wallet is unlocked or locked.
185
+ * 4. **Client + Keyring Lifecycle**: Starts subscriptions only when both the UI is
186
+ * open (ClientController) and the wallet is unlocked (KeyringController).
187
+ * Stops when either the UI closes or the keyring locks. See client-controller
188
+ * README for the combined pattern.
169
189
  *
170
190
  * ## Architecture
171
191
  *
@@ -195,6 +215,7 @@ export declare class AssetsController extends BaseController<typeof CONTROLLER_N
195
215
  assetTypes?: AssetType[];
196
216
  forceUpdate?: boolean;
197
217
  dataTypes?: DataType[];
218
+ assetsForPriceUpdate?: Caip19AssetId[];
198
219
  }): Promise<Record<AccountId, Record<Caip19AssetId, Asset>>>;
199
220
  getAssetsBalance(accounts: InternalAccount[], options?: {
200
221
  chainIds?: ChainId[];
@@ -212,10 +233,15 @@ export declare class AssetsController extends BaseController<typeof CONTROLLER_N
212
233
  * Custom assets are included in subscription and fetch operations.
213
234
  * Adding a custom asset also unhides it if it was previously hidden.
214
235
  *
236
+ * When `pendingMetadata` is provided (e.g. from the extension's pending-tokens
237
+ * flow), the token metadata is persisted immediately into `assetsInfo` so the
238
+ * UI can render it without waiting for the next pipeline fetch.
239
+ *
215
240
  * @param accountId - The account ID to add the custom asset for.
216
241
  * @param assetId - The CAIP-19 asset ID to add.
242
+ * @param pendingMetadata - Optional token metadata from the UI (pendingTokens format).
217
243
  */
218
- addCustomAsset(accountId: AccountId, assetId: Caip19AssetId): Promise<void>;
244
+ addCustomAsset(accountId: AccountId, assetId: Caip19AssetId, pendingMetadata?: PendingTokenMetadata): Promise<void>;
219
245
  /**
220
246
  * Remove a custom asset from an account.
221
247
  *
@@ -244,6 +270,12 @@ export declare class AssetsController extends BaseController<typeof CONTROLLER_N
244
270
  * @param assetId - The CAIP-19 asset ID to unhide.
245
271
  */
246
272
  unhideAsset(assetId: Caip19AssetId): void;
273
+ /**
274
+ * Set the current currency.
275
+ *
276
+ * @param selectedCurrency - The ISO 4217 currency code to set.
277
+ */
278
+ setSelectedCurrency(selectedCurrency: SupportedCurrency): void;
247
279
  /**
248
280
  * Subscribe to price updates for all assets held by the given accounts.
249
281
  * Polls PriceDataSource which fetches prices from balance state.
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsController.d.cts","sourceRoot":"","sources":["../src/AssetsController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssetsController.d.cts","sourceRoot":"","sources":["../src/AssetsController.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import type { AccountTreeControllerGetAccountsFromSelectedAccountGroupAction, Ac
2
2
  import type { GetTokenListState } from "@metamask/assets-controllers";
3
3
  import { BaseController } from "@metamask/base-controller";
4
4
  import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
5
- import type { ApiPlatformClient, BackendWebSocketServiceActions, BackendWebSocketServiceEvents } from "@metamask/core-backend";
5
+ import type { ClientControllerStateChangeEvent } from "@metamask/client-controller";
6
+ import type { ApiPlatformClient, BackendWebSocketServiceActions, BackendWebSocketServiceEvents, SupportedCurrency } from "@metamask/core-backend";
6
7
  import type { KeyringControllerLockEvent, KeyringControllerUnlockEvent } from "@metamask/keyring-controller";
7
8
  import type { InternalAccount } from "@metamask/keyring-internal-api";
8
9
  import type { Messenger } from "@metamask/messenger";
@@ -19,6 +20,21 @@ import type { RpcDataSourceConfig } from "./data-sources/RpcDataSource.mjs";
19
20
  import type { AccountsControllerAccountBalancesUpdatedEvent } from "./data-sources/SnapDataSource.mjs";
20
21
  import type { StakedBalanceDataSourceConfig } from "./data-sources/StakedBalanceDataSource.mjs";
21
22
  import type { AccountId, AssetPreferences, ChainId, Caip19AssetId, AssetMetadata, AssetPrice, AssetBalance, AssetType, DataType, DataRequest, DataResponse, Asset } from "./types.mjs";
23
+ /**
24
+ * Metadata format passed from the UI when adding a custom token.
25
+ * Mirrors the "pendingTokens" shape used by the extension.
26
+ */
27
+ export type PendingTokenMetadata = {
28
+ address: string;
29
+ symbol: string;
30
+ name: string;
31
+ decimals: number;
32
+ iconUrl?: string;
33
+ aggregators?: string[];
34
+ occurrences?: number;
35
+ chainId: string;
36
+ unlisted?: boolean;
37
+ };
22
38
  declare const CONTROLLER_NAME: "AssetsController";
23
39
  /**
24
40
  * State structure for AssetsController.
@@ -51,6 +67,8 @@ export type AssetsControllerState = {
51
67
  assetPreferences: {
52
68
  [assetId: string]: AssetPreferences;
53
69
  };
70
+ /** Currently-active ISO 4217 currency code */
71
+ selectedCurrency: SupportedCurrency;
54
72
  };
55
73
  /**
56
74
  * Returns the default state for AssetsController.
@@ -87,7 +105,7 @@ export type AssetsControllerAssetsDetectedEvent = {
87
105
  };
88
106
  export type AssetsControllerEvents = AssetsControllerStateChangeEvent | AssetsControllerBalanceChangedEvent | AssetsControllerPriceChangedEvent | AssetsControllerAssetsDetectedEvent;
89
107
  type AllowedActions = AccountTreeControllerGetAccountsFromSelectedAccountGroupAction | GetTokenListState | NetworkControllerGetStateAction | NetworkControllerGetNetworkClientByIdAction | NetworkEnablementControllerGetStateAction | GetRunnableSnaps | HandleSnapRequest | GetPermissions | BackendWebSocketServiceActions;
90
- type AllowedEvents = AccountTreeControllerSelectedAccountGroupChangeEvent | KeyringControllerLockEvent | KeyringControllerUnlockEvent | PreferencesControllerStateChangeEvent | NetworkControllerStateChangeEvent | TransactionControllerTransactionConfirmedEvent | TransactionControllerIncomingTransactionsReceivedEvent | NetworkEnablementControllerEvents | AccountsControllerAccountBalancesUpdatedEvent | PermissionControllerStateChange | BackendWebSocketServiceEvents;
108
+ type AllowedEvents = AccountTreeControllerSelectedAccountGroupChangeEvent | ClientControllerStateChangeEvent | KeyringControllerLockEvent | KeyringControllerUnlockEvent | PreferencesControllerStateChangeEvent | NetworkControllerStateChangeEvent | TransactionControllerTransactionConfirmedEvent | TransactionControllerIncomingTransactionsReceivedEvent | NetworkEnablementControllerEvents | AccountsControllerAccountBalancesUpdatedEvent | PermissionControllerStateChange | BackendWebSocketServiceEvents;
91
109
  export type AssetsControllerMessenger = Messenger<typeof CONTROLLER_NAME, AssetsControllerActions | AllowedActions, AssetsControllerEvents | AllowedEvents>;
92
110
  /**
93
111
  * Payload for the first init/fetch MetaMetrics event.
@@ -164,8 +182,10 @@ export type AssetsControllerOptions = {
164
182
  * based on which chains they support. When active chains change, the controller
165
183
  * dynamically adjusts subscriptions.
166
184
  *
167
- * 4. **Keyring Lifecycle**: Listens to KeyringController unlock/lock events to
168
- * start/stop subscriptions when the wallet is unlocked or locked.
185
+ * 4. **Client + Keyring Lifecycle**: Starts subscriptions only when both the UI is
186
+ * open (ClientController) and the wallet is unlocked (KeyringController).
187
+ * Stops when either the UI closes or the keyring locks. See client-controller
188
+ * README for the combined pattern.
169
189
  *
170
190
  * ## Architecture
171
191
  *
@@ -195,6 +215,7 @@ export declare class AssetsController extends BaseController<typeof CONTROLLER_N
195
215
  assetTypes?: AssetType[];
196
216
  forceUpdate?: boolean;
197
217
  dataTypes?: DataType[];
218
+ assetsForPriceUpdate?: Caip19AssetId[];
198
219
  }): Promise<Record<AccountId, Record<Caip19AssetId, Asset>>>;
199
220
  getAssetsBalance(accounts: InternalAccount[], options?: {
200
221
  chainIds?: ChainId[];
@@ -212,10 +233,15 @@ export declare class AssetsController extends BaseController<typeof CONTROLLER_N
212
233
  * Custom assets are included in subscription and fetch operations.
213
234
  * Adding a custom asset also unhides it if it was previously hidden.
214
235
  *
236
+ * When `pendingMetadata` is provided (e.g. from the extension's pending-tokens
237
+ * flow), the token metadata is persisted immediately into `assetsInfo` so the
238
+ * UI can render it without waiting for the next pipeline fetch.
239
+ *
215
240
  * @param accountId - The account ID to add the custom asset for.
216
241
  * @param assetId - The CAIP-19 asset ID to add.
242
+ * @param pendingMetadata - Optional token metadata from the UI (pendingTokens format).
217
243
  */
218
- addCustomAsset(accountId: AccountId, assetId: Caip19AssetId): Promise<void>;
244
+ addCustomAsset(accountId: AccountId, assetId: Caip19AssetId, pendingMetadata?: PendingTokenMetadata): Promise<void>;
219
245
  /**
220
246
  * Remove a custom asset from an account.
221
247
  *
@@ -244,6 +270,12 @@ export declare class AssetsController extends BaseController<typeof CONTROLLER_N
244
270
  * @param assetId - The CAIP-19 asset ID to unhide.
245
271
  */
246
272
  unhideAsset(assetId: Caip19AssetId): void;
273
+ /**
274
+ * Set the current currency.
275
+ *
276
+ * @param selectedCurrency - The ISO 4217 currency code to set.
277
+ */
278
+ setSelectedCurrency(selectedCurrency: SupportedCurrency): void;
247
279
  /**
248
280
  * Subscribe to price updates for all assets held by the given accounts.
249
281
  * Polls PriceDataSource which fetches prices from balance state.
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsController.d.mts","sourceRoot":"","sources":["../src/AssetsController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AssetsController.d.mts","sourceRoot":"","sources":["../src/AssetsController.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,9 @@ 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_trackMetaMetricsEvent, _AssetsController_firstInitFetchReported, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_selectedAccounts_get, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _AssetsController_stakedBalanceDataSource, _AssetsController_allBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_registerActionHandlers, _AssetsController_executeMiddlewares, _AssetsController_updateState, _AssetsController_getAssetsFromState, _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;
12
+ var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trackMetaMetricsEvent, _AssetsController_firstInitFetchReported, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_selectedAccounts_get, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _AssetsController_stakedBalanceDataSource, _AssetsController_allBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_updateActive, _AssetsController_registerActionHandlers, _AssetsController_executeMiddlewares, _AssetsController_updateState, _AssetsController_getAssetsFromState, _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
+ import { clientControllerSelectors } from "@metamask/client-controller";
14
15
  import { isCaipChainId, isStrictHexString, parseCaipAssetType, parseCaipChainId } from "@metamask/utils";
15
16
  import { Mutex } from "async-mutex";
16
17
  import BigNumberJS from "bignumber.js";
@@ -25,6 +26,7 @@ import { StakedBalanceDataSource } from "./data-sources/StakedBalanceDataSource.
25
26
  import { TokenDataSource } from "./data-sources/TokenDataSource.mjs";
26
27
  import { projectLogger, createModuleLogger } from "./logger.mjs";
27
28
  import { DetectionMiddleware } from "./middlewares/DetectionMiddleware.mjs";
29
+ import { createParallelBalanceMiddleware, createParallelMiddleware } from "./middlewares/ParallelMiddleware.mjs";
28
30
  import { normalizeAssetId } from "./utils.mjs";
29
31
  // ============================================================================
30
32
  // CONTROLLER CONSTANTS
@@ -57,6 +59,7 @@ export function getDefaultAssetsControllerState() {
57
59
  assetsPrice: {},
58
60
  customAssets: {},
59
61
  assetPreferences: {},
62
+ selectedCurrency: 'usd',
60
63
  };
61
64
  }
62
65
  // ============================================================================
@@ -93,6 +96,12 @@ const stateMetadata = {
93
96
  includeInDebugSnapshot: false,
94
97
  usedInUi: true,
95
98
  },
99
+ selectedCurrency: {
100
+ persist: true,
101
+ includeInStateLogs: false,
102
+ includeInDebugSnapshot: false,
103
+ usedInUi: true,
104
+ },
96
105
  };
97
106
  // ============================================================================
98
107
  // HELPER FUNCTIONS
@@ -146,6 +155,9 @@ function normalizeResponse(response) {
146
155
  if (response.errors) {
147
156
  normalized.errors = { ...response.errors };
148
157
  }
158
+ if (response.updateMode) {
159
+ normalized.updateMode = response.updateMode;
160
+ }
149
161
  return normalized;
150
162
  }
151
163
  // ============================================================================
@@ -167,8 +179,10 @@ function normalizeResponse(response) {
167
179
  * based on which chains they support. When active chains change, the controller
168
180
  * dynamically adjusts subscriptions.
169
181
  *
170
- * 4. **Keyring Lifecycle**: Listens to KeyringController unlock/lock events to
171
- * start/stop subscriptions when the wallet is unlocked or locked.
182
+ * 4. **Client + Keyring Lifecycle**: Starts subscriptions only when both the UI is
183
+ * open (ClientController) and the wallet is unlocked (KeyringController).
184
+ * Stops when either the UI closes or the keyring locks. See client-controller
185
+ * README for the combined pattern.
172
186
  *
173
187
  * ## Architecture
174
188
  *
@@ -198,6 +212,10 @@ export class AssetsController extends BaseController {
198
212
  _AssetsController_trackMetaMetricsEvent.set(this, void 0);
199
213
  /** Whether we have already reported first init fetch for this session (reset on #stop). */
200
214
  _AssetsController_firstInitFetchReported.set(this, false);
215
+ /** Whether the client (UI) is open. Combined with #keyringUnlocked for #updateActive. */
216
+ _AssetsController_uiOpen.set(this, false);
217
+ /** Whether the keyring is unlocked. Combined with #uiOpen for #updateActive. */
218
+ _AssetsController_keyringUnlocked.set(this, false);
201
219
  _AssetsController_controllerMutex.set(this, new Mutex());
202
220
  /**
203
221
  * Active balance subscriptions keyed by account ID.
@@ -254,6 +272,7 @@ export class AssetsController extends BaseController {
254
272
  }), "f");
255
273
  __classPrivateFieldSet(this, _AssetsController_priceDataSource, new PriceDataSource({
256
274
  queryApiClient,
275
+ getSelectedCurrency: () => this.state.selectedCurrency,
257
276
  ...priceDataSourceConfig,
258
277
  }), "f");
259
278
  __classPrivateFieldSet(this, _AssetsController_detectionMiddleware, new DetectionMiddleware(), "f");
@@ -267,7 +286,7 @@ export class AssetsController extends BaseController {
267
286
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
268
287
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
269
288
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
270
- // Subscriptions start only on KeyringController:unlock -> #start(), not here.
289
+ // Subscriptions start only when both UI is open and keyring unlocked -> #updateActive().
271
290
  // Subscribe to basic-functionality changes after construction so a synchronous
272
291
  // onChange during subscribe cannot run before data sources are initialized.
273
292
  if (subscribeToBasicFunctionalityChange) {
@@ -331,6 +350,9 @@ export class AssetsController extends BaseController {
331
350
  const chainIds = options?.chainIds ?? [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")];
332
351
  const assetTypes = options?.assetTypes ?? ['fungible'];
333
352
  const dataTypes = options?.dataTypes ?? ['balance', 'metadata', 'price'];
353
+ if (accounts.length === 0 || chainIds.length === 0) {
354
+ return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
355
+ }
334
356
  // Collect custom assets for all requested accounts
335
357
  const customAssets = [];
336
358
  for (const account of accounts) {
@@ -344,16 +366,21 @@ export class AssetsController extends BaseController {
344
366
  dataTypes,
345
367
  customAssets: customAssets.length > 0 ? customAssets : undefined,
346
368
  forceUpdate: true,
369
+ assetsForPriceUpdate: options?.assetsForPriceUpdate,
347
370
  });
348
371
  const sources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
349
372
  ? [
350
- __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
351
- __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
352
- __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
353
- __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
373
+ createParallelBalanceMiddleware([
374
+ __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
375
+ __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
376
+ __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
377
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
378
+ ]),
354
379
  __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
355
- __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
356
- __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
380
+ createParallelMiddleware([
381
+ __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
382
+ __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
383
+ ]),
357
384
  ]
358
385
  : [
359
386
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
@@ -361,7 +388,7 @@ export class AssetsController extends BaseController {
361
388
  __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
362
389
  ];
363
390
  const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
364
- await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
391
+ await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, { ...response, updateMode: 'full' });
365
392
  if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
366
393
  __classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, true, "f");
367
394
  const durationMs = Date.now() - startTime;
@@ -372,7 +399,8 @@ export class AssetsController extends BaseController {
372
399
  });
373
400
  }
374
401
  }
375
- return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
402
+ const result = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
403
+ return result;
376
404
  }
377
405
  async getAssetsBalance(accounts, options) {
378
406
  // Reuse getAssets with dataTypes: ['balance'] only
@@ -423,10 +451,15 @@ export class AssetsController extends BaseController {
423
451
  * Custom assets are included in subscription and fetch operations.
424
452
  * Adding a custom asset also unhides it if it was previously hidden.
425
453
  *
454
+ * When `pendingMetadata` is provided (e.g. from the extension's pending-tokens
455
+ * flow), the token metadata is persisted immediately into `assetsInfo` so the
456
+ * UI can render it without waiting for the next pipeline fetch.
457
+ *
426
458
  * @param accountId - The account ID to add the custom asset for.
427
459
  * @param assetId - The CAIP-19 asset ID to add.
460
+ * @param pendingMetadata - Optional token metadata from the UI (pendingTokens format).
428
461
  */
429
- async addCustomAsset(accountId, assetId) {
462
+ async addCustomAsset(accountId, assetId, pendingMetadata) {
430
463
  const normalizedAssetId = normalizeAssetId(assetId);
431
464
  log('Adding custom asset', { accountId, assetId: normalizedAssetId });
432
465
  this.update((state) => {
@@ -446,6 +479,28 @@ export class AssetsController extends BaseController {
446
479
  delete state.assetPreferences[normalizedAssetId];
447
480
  }
448
481
  }
482
+ // Persist metadata from the UI so the token is immediately renderable
483
+ if (pendingMetadata) {
484
+ const parsed = parseCaipAssetType(normalizedAssetId);
485
+ let tokenType = 'erc20';
486
+ if (parsed.assetNamespace === 'slip44') {
487
+ tokenType = 'native';
488
+ }
489
+ else if (parsed.assetNamespace === 'spl') {
490
+ tokenType = 'spl';
491
+ }
492
+ const assetMetadata = {
493
+ type: tokenType,
494
+ symbol: pendingMetadata.symbol,
495
+ name: pendingMetadata.name,
496
+ decimals: pendingMetadata.decimals,
497
+ image: pendingMetadata.iconUrl,
498
+ aggregators: pendingMetadata.aggregators,
499
+ occurrences: pendingMetadata.occurrences,
500
+ };
501
+ state.assetsInfo[normalizedAssetId] =
502
+ assetMetadata;
503
+ }
449
504
  });
450
505
  // Fetch data for the newly added custom asset
451
506
  const account = __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).find((a) => a.id === accountId);
@@ -524,6 +579,34 @@ export class AssetsController extends BaseController {
524
579
  });
525
580
  }
526
581
  // ============================================================================
582
+ // CURRENT CURRENCY MANAGEMENT
583
+ // ============================================================================
584
+ /**
585
+ * Set the current currency.
586
+ *
587
+ * @param selectedCurrency - The ISO 4217 currency code to set.
588
+ */
589
+ setSelectedCurrency(selectedCurrency) {
590
+ const previousCurrency = this.state.selectedCurrency;
591
+ if (previousCurrency === selectedCurrency) {
592
+ return;
593
+ }
594
+ this.update((state) => {
595
+ state.selectedCurrency = selectedCurrency;
596
+ });
597
+ log('Current currency changed', {
598
+ previousCurrency,
599
+ selectedCurrency,
600
+ });
601
+ this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), {
602
+ forceUpdate: true,
603
+ dataTypes: ['price'],
604
+ assetsForPriceUpdate: Object.values(this.state.assetsBalance).flatMap((balances) => Object.keys(balances)),
605
+ }).catch((error) => {
606
+ log('Failed to fetch asset prices after current currency change', error);
607
+ });
608
+ }
609
+ // ============================================================================
527
610
  // SUBSCRIPTIONS
528
611
  // ============================================================================
529
612
  /**
@@ -601,9 +684,15 @@ export class AssetsController extends BaseController {
601
684
  hasBalance: Boolean(response.assetsBalance),
602
685
  hasPrice: Boolean(response.assetsPrice),
603
686
  });
604
- // Run through enrichment middlewares (Event Stack: Detection Token Price)
687
+ // Run through enrichment middlewares (Detection, then Token + Price in parallel)
605
688
  // Include 'metadata' in dataTypes so TokenDataSource runs to enrich detected assets
606
- const { response: enrichedResponse } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"), __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f")], request ?? {
689
+ const { response: enrichedResponse } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [
690
+ __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
691
+ createParallelMiddleware([
692
+ __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
693
+ __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
694
+ ]),
695
+ ], request ?? {
607
696
  accountsWithSupportedChains: [],
608
697
  chainIds: [],
609
698
  dataTypes: ['balance', 'metadata', 'price'],
@@ -642,7 +731,7 @@ export class AssetsController extends BaseController {
642
731
  this.messenger.unregisterActionHandler('AssetsController:unhideAsset');
643
732
  }
644
733
  }
645
- _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trackMetaMetricsEvent = new WeakMap(), _AssetsController_firstInitFetchReported = 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_instances = new WeakSet(), _AssetsController_selectedAccounts_get = function _AssetsController_selectedAccounts_get() {
734
+ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trackMetaMetricsEvent = new WeakMap(), _AssetsController_firstInitFetchReported = 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_instances = new WeakSet(), _AssetsController_selectedAccounts_get = function _AssetsController_selectedAccounts_get() {
646
735
  return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
647
736
  }, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
648
737
  return [
@@ -692,9 +781,27 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
692
781
  this.messenger.subscribe('NetworkEnablementController:stateChange', ({ enabledNetworkMap }) => {
693
782
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_handleEnabledNetworksChanged).call(this, enabledNetworkMap).catch(console.error);
694
783
  });
695
- // Keyring lifecycle: start when unlocked, stop when locked
696
- this.messenger.subscribe('KeyringController:unlock', () => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this));
697
- this.messenger.subscribe('KeyringController:lock', () => __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this));
784
+ // Client + Keyring lifecycle: only run when UI is open AND keyring is unlocked
785
+ this.messenger.subscribe('ClientController:stateChange', (isUiOpen) => {
786
+ __classPrivateFieldSet(this, _AssetsController_uiOpen, isUiOpen, "f");
787
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
788
+ }, clientControllerSelectors.selectIsUiOpen);
789
+ this.messenger.subscribe('KeyringController:unlock', () => {
790
+ __classPrivateFieldSet(this, _AssetsController_keyringUnlocked, true, "f");
791
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
792
+ });
793
+ this.messenger.subscribe('KeyringController:lock', () => {
794
+ __classPrivateFieldSet(this, _AssetsController_keyringUnlocked, false, "f");
795
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateActive).call(this);
796
+ });
797
+ }, _AssetsController_updateActive = function _AssetsController_updateActive() {
798
+ const shouldRun = __classPrivateFieldGet(this, _AssetsController_uiOpen, "f") && __classPrivateFieldGet(this, _AssetsController_keyringUnlocked, "f");
799
+ if (shouldRun) {
800
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this);
801
+ }
802
+ else {
803
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
804
+ }
698
805
  }, _AssetsController_registerActionHandlers = function _AssetsController_registerActionHandlers() {
699
806
  this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
700
807
  }, _AssetsController_executeMiddlewares =
@@ -752,8 +859,8 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
752
859
  // STATE MANAGEMENT
753
860
  // ============================================================================
754
861
  async function _AssetsController_updateState(response) {
755
- // Normalize asset IDs (checksum EVM addresses) before storing in state
756
862
  const normalizedResponse = normalizeResponse(response);
863
+ const mode = normalizedResponse.updateMode ?? 'merge';
757
864
  const releaseLock = await __classPrivateFieldGet(this, _AssetsController_controllerMutex, "f").acquire();
758
865
  try {
759
866
  const previousState = this.state;
@@ -779,15 +886,27 @@ async function _AssetsController_updateState(response) {
779
886
  if (normalizedResponse.assetsBalance) {
780
887
  for (const [accountId, accountBalances] of Object.entries(normalizedResponse.assetsBalance)) {
781
888
  const previousBalances = previousState.assetsBalance[accountId] ?? {};
782
- if (!balances[accountId]) {
783
- balances[accountId] = {};
784
- }
785
- for (const [assetId, balance] of Object.entries(accountBalances)) {
889
+ const customAssetIds = state.customAssets[accountId] ?? [];
890
+ // Full: response is authoritative; preserve custom assets not in response. Merge: response overlays previous.
891
+ const effective = mode === 'full'
892
+ ? (() => {
893
+ const next = {
894
+ ...accountBalances,
895
+ };
896
+ for (const customId of customAssetIds) {
897
+ if (!(customId in next)) {
898
+ const prev = previousBalances[customId];
899
+ next[customId] =
900
+ prev ?? { amount: '0' };
901
+ }
902
+ }
903
+ return next;
904
+ })()
905
+ : { ...previousBalances, ...accountBalances };
906
+ for (const [assetId, balance] of Object.entries(effective)) {
786
907
  const previousBalance = previousBalances[assetId];
787
- const balanceData = balance;
788
- const newAmount = balanceData.amount;
908
+ const newAmount = balance.amount;
789
909
  const oldAmount = previousBalance?.amount;
790
- // Track if balance actually changed
791
910
  if (oldAmount !== newAmount) {
792
911
  changedBalances.push({
793
912
  accountId,
@@ -797,7 +916,7 @@ async function _AssetsController_updateState(response) {
797
916
  });
798
917
  }
799
918
  }
800
- Object.assign(balances[accountId], accountBalances);
919
+ balances[accountId] = effective;
801
920
  }
802
921
  }
803
922
  // Update prices in state
@@ -975,7 +1094,7 @@ async function _AssetsController_updateState(response) {
975
1094
  }
976
1095
  __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").clear();
977
1096
  }, _AssetsController_subscribeAssets = function _AssetsController_subscribeAssets() {
978
- if (__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).length === 0) {
1097
+ if (__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).length === 0 || __classPrivateFieldGet(this, _AssetsController_enabledChains, "f").size === 0) {
979
1098
  return;
980
1099
  }
981
1100
  // Subscribe to balance updates (batched by data source)