@metamask-previews/assets-controller 1.0.0-preview-ee8f1b28b → 2.0.0-preview-33dbba4f3

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 (120) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/dist/AssetsController.cjs +61 -18
  3. package/dist/AssetsController.cjs.map +1 -1
  4. package/dist/AssetsController.d.cts +13 -8
  5. package/dist/AssetsController.d.cts.map +1 -1
  6. package/dist/AssetsController.d.mts +13 -8
  7. package/dist/AssetsController.d.mts.map +1 -1
  8. package/dist/AssetsController.mjs +62 -19
  9. package/dist/AssetsController.mjs.map +1 -1
  10. package/dist/data-sources/AccountsApiDataSource.cjs +9 -11
  11. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
  12. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
  13. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
  14. package/dist/data-sources/AccountsApiDataSource.mjs +7 -9
  15. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
  16. package/dist/data-sources/BackendWebsocketDataSource.cjs +6 -4
  17. package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
  18. package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
  19. package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
  20. package/dist/data-sources/BackendWebsocketDataSource.mjs +6 -4
  21. package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
  22. package/dist/data-sources/PriceDataSource.cjs +13 -3
  23. package/dist/data-sources/PriceDataSource.cjs.map +1 -1
  24. package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
  25. package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
  26. package/dist/data-sources/PriceDataSource.mjs +13 -3
  27. package/dist/data-sources/PriceDataSource.mjs.map +1 -1
  28. package/dist/data-sources/RpcDataSource.cjs +80 -10
  29. package/dist/data-sources/RpcDataSource.cjs.map +1 -1
  30. package/dist/data-sources/RpcDataSource.d.cts +8 -59
  31. package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
  32. package/dist/data-sources/RpcDataSource.d.mts +8 -59
  33. package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
  34. package/dist/data-sources/RpcDataSource.mjs +81 -11
  35. package/dist/data-sources/RpcDataSource.mjs.map +1 -1
  36. package/dist/data-sources/SnapDataSource.cjs +16 -4
  37. package/dist/data-sources/SnapDataSource.cjs.map +1 -1
  38. package/dist/data-sources/SnapDataSource.d.cts +2 -1
  39. package/dist/data-sources/SnapDataSource.d.cts.map +1 -1
  40. package/dist/data-sources/SnapDataSource.d.mts +2 -1
  41. package/dist/data-sources/SnapDataSource.d.mts.map +1 -1
  42. package/dist/data-sources/SnapDataSource.mjs +16 -4
  43. package/dist/data-sources/SnapDataSource.mjs.map +1 -1
  44. package/dist/data-sources/StakedBalanceDataSource.cjs +609 -0
  45. package/dist/data-sources/StakedBalanceDataSource.cjs.map +1 -0
  46. package/dist/data-sources/StakedBalanceDataSource.d.cts +72 -0
  47. package/dist/data-sources/StakedBalanceDataSource.d.cts.map +1 -0
  48. package/dist/data-sources/StakedBalanceDataSource.d.mts +72 -0
  49. package/dist/data-sources/StakedBalanceDataSource.d.mts.map +1 -0
  50. package/dist/data-sources/StakedBalanceDataSource.mjs +605 -0
  51. package/dist/data-sources/StakedBalanceDataSource.mjs.map +1 -0
  52. package/dist/data-sources/TokenDataSource.cjs +5 -0
  53. package/dist/data-sources/TokenDataSource.cjs.map +1 -1
  54. package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
  55. package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
  56. package/dist/data-sources/TokenDataSource.mjs +5 -0
  57. package/dist/data-sources/TokenDataSource.mjs.map +1 -1
  58. package/dist/data-sources/evm-rpc-services/index.cjs +5 -1
  59. package/dist/data-sources/evm-rpc-services/index.cjs.map +1 -1
  60. package/dist/data-sources/evm-rpc-services/index.d.cts +1 -1
  61. package/dist/data-sources/evm-rpc-services/index.d.cts.map +1 -1
  62. package/dist/data-sources/evm-rpc-services/index.d.mts +1 -1
  63. package/dist/data-sources/evm-rpc-services/index.d.mts.map +1 -1
  64. package/dist/data-sources/evm-rpc-services/index.mjs +1 -1
  65. package/dist/data-sources/evm-rpc-services/index.mjs.map +1 -1
  66. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs +132 -0
  67. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs.map +1 -0
  68. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts +78 -0
  69. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts.map +1 -0
  70. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts +78 -0
  71. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts.map +1 -0
  72. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs +126 -0
  73. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs.map +1 -0
  74. package/dist/data-sources/evm-rpc-services/services/index.cjs +6 -1
  75. package/dist/data-sources/evm-rpc-services/services/index.cjs.map +1 -1
  76. package/dist/data-sources/evm-rpc-services/services/index.d.cts +1 -0
  77. package/dist/data-sources/evm-rpc-services/services/index.d.cts.map +1 -1
  78. package/dist/data-sources/evm-rpc-services/services/index.d.mts +1 -0
  79. package/dist/data-sources/evm-rpc-services/services/index.d.mts.map +1 -1
  80. package/dist/data-sources/evm-rpc-services/services/index.mjs +1 -0
  81. package/dist/data-sources/evm-rpc-services/services/index.mjs.map +1 -1
  82. package/dist/data-sources/evm-rpc-services/types/state.cjs.map +1 -1
  83. package/dist/data-sources/evm-rpc-services/types/state.d.cts +3 -3
  84. package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +1 -1
  85. package/dist/data-sources/evm-rpc-services/types/state.d.mts +3 -3
  86. package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +1 -1
  87. package/dist/data-sources/evm-rpc-services/types/state.mjs.map +1 -1
  88. package/dist/data-sources/evm-rpc-services/utils/index.cjs +9 -1
  89. package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +1 -1
  90. package/dist/data-sources/evm-rpc-services/utils/index.d.cts +2 -0
  91. package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +1 -1
  92. package/dist/data-sources/evm-rpc-services/utils/index.d.mts +2 -0
  93. package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +1 -1
  94. package/dist/data-sources/evm-rpc-services/utils/index.mjs +2 -0
  95. package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +1 -1
  96. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs +47 -0
  97. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs.map +1 -0
  98. package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts +25 -0
  99. package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts.map +1 -0
  100. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts +25 -0
  101. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts.map +1 -0
  102. package/dist/data-sources/evm-rpc-services/utils/parsing.mjs +39 -0
  103. package/dist/data-sources/evm-rpc-services/utils/parsing.mjs.map +1 -0
  104. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs +68 -0
  105. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs.map +1 -0
  106. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts +25 -0
  107. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts.map +1 -0
  108. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts +25 -0
  109. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts.map +1 -0
  110. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs +62 -0
  111. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs.map +1 -0
  112. package/dist/data-sources/index.cjs +3 -1
  113. package/dist/data-sources/index.cjs.map +1 -1
  114. package/dist/data-sources/index.d.cts +1 -0
  115. package/dist/data-sources/index.d.cts.map +1 -1
  116. package/dist/data-sources/index.d.mts +1 -0
  117. package/dist/data-sources/index.d.mts.map +1 -1
  118. package/dist/data-sources/index.mjs +1 -0
  119. package/dist/data-sources/index.mjs.map +1 -1
  120. package/package.json +3 -1
package/CHANGELOG.md CHANGED
@@ -7,8 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.0.0]
11
+
10
12
  ### Added
11
13
 
14
+ - Add `StakedBalanceDataSource` that polls supported staking contracts on enabled chains and merges staked balances into `assetsBalance`. Configurable via `stakedBalanceDataSourceConfig` (`enabled`, `pollInterval`); the controller subscribes to it when enabled and cleans up on destroy ([#7936](https://github.com/MetaMask/core/pull/7936))
12
15
  - Add optional `trackMetaMetricsEvent` callback to measure and report first init/fetch historical time (duration in ms) to MetaMetrics when the initial asset fetch completes after unlock or app open ([#7871](https://github.com/MetaMask/core/pull/7871))
13
16
  - Add `AccountsApiDataSourceConfig` and `PriceDataSourceConfig` types; add `accountsApiDataSourceConfig` and `priceDataSourceConfig` options to `AssetsControllerOptions` for per-data-source configuration (pollInterval, tokenDetectionEnabled, etc.). When `tokenDetectionEnabled` is false, `AccountsApiDataSource` only returns balances for tokens already in state and does not add new tokens ([#7926](https://github.com/MetaMask/core/pull/7926))
14
17
  - Add `useExternalService` option to `TokenDetector`, `TokenDetectionOptions`, `RpcDataSourceConfig`, and `RpcDataSourceOptions`. Token detection runs only when both `tokenDetectionEnabled` and `useExternalService` are true and stops when either is false ([#7924](https://github.com/MetaMask/core/pull/7924))
@@ -16,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
16
19
 
17
20
  ### Changed
18
21
 
22
+ - Refactor `AssetsControllerMessenger` type safety: remove `as unknown as` casts, import types instead of locally defining them, and add missing allowed actions/events ([#7952](https://github.com/MetaMask/core/pull/7952))
19
23
  - **BREAKING:** `AccountsApiDataSourceConfig.tokenDetectionEnabled` is now a getter `() => boolean` (was `boolean`) so the Accounts API data source reacts when the user toggles token detection at runtime, consistent with `RpcDataSourceConfig.tokenDetectionEnabled`. Pass a function, e.g. `tokenDetectionEnabled: () => preferenceController.state.useTokenDetection`.
20
24
  - **BREAKING:** Rename state and `DataResponse` property from `assetsMetadata` to `assetsInfo`. Update consumers that read `state.assetsMetadata` or set `response.assetsMetadata` to use `assetsInfo` instead ([#7902](https://github.com/MetaMask/core/pull/7902))
21
25
  - Bump `@metamask/keyring-api` from `^21.0.0` to `^21.5.0` ([#7857](https://github.com/MetaMask/core/pull/7857))
@@ -76,7 +80,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
76
80
  - Refactor `RpcDataSource` to delegate polling to `BalanceFetcher` and `TokenDetector` services ([#7709](https://github.com/MetaMask/core/pull/7709))
77
81
  - Refactor `BalanceFetcher` and `TokenDetector` to extend `StaticIntervalPollingControllerOnly` for independent polling management ([#7709](https://github.com/MetaMask/core/pull/7709))
78
82
 
79
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@1.0.0...HEAD
83
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@2.0.0...HEAD
84
+ [2.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@1.0.0...@metamask/assets-controller@2.0.0
80
85
  [1.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@0.2.0...@metamask/assets-controller@1.0.0
81
86
  [0.2.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@0.1.0...@metamask/assets-controller@0.2.0
82
87
  [0.1.0]: https://github.com/MetaMask/core/releases/tag/@metamask/assets-controller@0.1.0
@@ -13,7 +13,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
13
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
- var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trackMetaMetricsEvent, _AssetsController_firstInitFetchReported, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_selectedAccounts_get, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _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_buildChainToAccountsMap, _AssetsController_subscribeDataSource, _AssetsController_unsubscribeDataSource, _AssetsController_buildDataRequest, _AssetsController_getEnabledChainsForAccount, _AssetsController_handleAccountGroupChanged, _AssetsController_handleEnabledNetworksChanged;
16
+ 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;
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");
@@ -26,6 +26,7 @@ const BackendWebsocketDataSource_1 = require("./data-sources/BackendWebsocketDat
26
26
  const PriceDataSource_1 = require("./data-sources/PriceDataSource.cjs");
27
27
  const RpcDataSource_1 = require("./data-sources/RpcDataSource.cjs");
28
28
  const SnapDataSource_1 = require("./data-sources/SnapDataSource.cjs");
29
+ const StakedBalanceDataSource_1 = require("./data-sources/StakedBalanceDataSource.cjs");
29
30
  const TokenDataSource_1 = require("./data-sources/TokenDataSource.cjs");
30
31
  const logger_1 = require("./logger.cjs");
31
32
  const DetectionMiddleware_1 = require("./middlewares/DetectionMiddleware.cjs");
@@ -182,7 +183,7 @@ function normalizeResponse(response) {
182
183
  * - The controller does NOT manage polling - it simply receives pushed updates
183
184
  */
184
185
  class AssetsController extends base_controller_1.BaseController {
185
- constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trackMetaMetricsEvent, accountsApiDataSourceConfig, priceDataSourceConfig, }) {
186
+ constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trackMetaMetricsEvent, accountsApiDataSourceConfig, priceDataSourceConfig, stakedBalanceDataSourceConfig, }) {
186
187
  super({
187
188
  name: CONTROLLER_NAME,
188
189
  messenger,
@@ -217,6 +218,7 @@ class AssetsController extends base_controller_1.BaseController {
217
218
  _AssetsController_accountsApiDataSource.set(this, void 0);
218
219
  _AssetsController_snapDataSource.set(this, void 0);
219
220
  _AssetsController_rpcDataSource.set(this, void 0);
221
+ _AssetsController_stakedBalanceDataSource.set(this, void 0);
220
222
  _AssetsController_priceDataSource.set(this, void 0);
221
223
  _AssetsController_detectionMiddleware.set(this, void 0);
222
224
  _AssetsController_tokenDataSource.set(this, void 0);
@@ -226,7 +228,9 @@ class AssetsController extends base_controller_1.BaseController {
226
228
  __classPrivateFieldSet(this, _AssetsController_defaultUpdateInterval, defaultUpdateInterval, "f");
227
229
  __classPrivateFieldSet(this, _AssetsController_trackMetaMetricsEvent, trackMetaMetricsEvent, "f");
228
230
  const rpcConfig = rpcDataSourceConfig ?? {};
229
- const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
231
+ const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => {
232
+ this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
233
+ };
230
234
  __classPrivateFieldSet(this, _AssetsController_backendWebsocketDataSource, new BackendWebsocketDataSource_1.BackendWebsocketDataSource({
231
235
  messenger: this.messenger,
232
236
  queryApiClient,
@@ -246,6 +250,11 @@ class AssetsController extends base_controller_1.BaseController {
246
250
  onActiveChainsUpdated,
247
251
  ...rpcConfig,
248
252
  }), "f");
253
+ __classPrivateFieldSet(this, _AssetsController_stakedBalanceDataSource, new StakedBalanceDataSource_1.StakedBalanceDataSource({
254
+ messenger: this.messenger,
255
+ onActiveChainsUpdated,
256
+ ...stakedBalanceDataSourceConfig,
257
+ }), "f");
249
258
  __classPrivateFieldSet(this, _AssetsController_tokenDataSource, new TokenDataSource_1.TokenDataSource({
250
259
  queryApiClient,
251
260
  }), "f");
@@ -264,6 +273,7 @@ class AssetsController extends base_controller_1.BaseController {
264
273
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
265
274
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
266
275
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
276
+ // Subscriptions start only on KeyringController:unlock -> #start(), not here.
267
277
  // Subscribe to basic-functionality changes after construction so a synchronous
268
278
  // onChange during subscribe cannot run before data sources are initialized.
269
279
  if (subscribeToBasicFunctionalityChange) {
@@ -290,6 +300,9 @@ class AssetsController extends base_controller_1.BaseController {
290
300
  * @param previousChains - Previous chains; used to compute added/removed.
291
301
  */
292
302
  handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
303
+ if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
304
+ return;
305
+ }
293
306
  log('Data source active chains changed', {
294
307
  dataSourceId,
295
308
  chainCount: activeChains.length,
@@ -343,11 +356,16 @@ class AssetsController extends base_controller_1.BaseController {
343
356
  __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
344
357
  __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
345
358
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
359
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
346
360
  __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
347
361
  __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
348
362
  __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
349
363
  ]
350
- : [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f")];
364
+ : [
365
+ __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
366
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
367
+ __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
368
+ ];
351
369
  const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
352
370
  await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
353
371
  if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
@@ -520,21 +538,17 @@ class AssetsController extends base_controller_1.BaseController {
520
538
  *
521
539
  * @param accounts - Accounts to subscribe price updates for.
522
540
  * @param chainIds - Chain IDs to filter prices for.
523
- * @param options - Subscription options.
524
- * @param options.updateInterval - Polling interval in ms.
525
541
  */
526
- subscribeAssetsPrice(accounts, chainIds, options = {}) {
542
+ subscribeAssetsPrice(accounts, chainIds) {
527
543
  if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
528
544
  return;
529
545
  }
530
- const { updateInterval = __classPrivateFieldGet(this, _AssetsController_defaultUpdateInterval, "f") } = options;
531
546
  const subscriptionKey = 'ds:PriceDataSource';
532
547
  const existingSubscription = __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").get(subscriptionKey);
533
548
  const isUpdate = existingSubscription !== undefined;
534
549
  const subscribeReq = {
535
550
  request: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildDataRequest).call(this, accounts, chainIds, {
536
551
  dataTypes: ['price'],
537
- updateInterval,
538
552
  }),
539
553
  subscriptionId: subscriptionKey,
540
554
  isUpdate,
@@ -615,6 +629,7 @@ class AssetsController extends base_controller_1.BaseController {
615
629
  __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f")?.destroy?.();
616
630
  __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f")?.destroy?.();
617
631
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")?.destroy?.();
632
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f")?.destroy?.();
618
633
  // Stop all active subscriptions
619
634
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
620
635
  if (__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f")) {
@@ -634,7 +649,7 @@ class AssetsController extends base_controller_1.BaseController {
634
649
  }
635
650
  }
636
651
  exports.AssetsController = AssetsController;
637
- _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_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() {
652
+ _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() {
638
653
  return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
639
654
  }, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
640
655
  return [
@@ -670,7 +685,7 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
670
685
  }
671
686
  return chains;
672
687
  }, _AssetsController_normalizeChainReference = function _AssetsController_normalizeChainReference(namespace, reference) {
673
- if (namespace === 'eip155' && reference.startsWith('0x')) {
688
+ if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
674
689
  // Convert hex to decimal for EIP155 chains
675
690
  return parseInt(reference, 16).toString();
676
691
  }
@@ -949,13 +964,17 @@ async function _AssetsController_updateState(response) {
949
964
  this.unsubscribeAssetsPrice();
950
965
  // Stop balance subscriptions by properly notifying data sources via messenger
951
966
  // This ensures data sources stop their polling timers.
952
- // Use #allBalanceDataSources so we unsubscribe from every source that may have
953
- // been subscribed (e.g. when switching from full to basic functionality).
967
+ // Use #allBalanceDataSources + staked balance source so we unsubscribe from
968
+ // every source that may have been subscribed.
969
+ const allSources = [
970
+ ...__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get),
971
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
972
+ ];
954
973
  const subscriptionKeys = [...__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").keys()];
955
974
  for (const subscriptionKey of subscriptionKeys) {
956
975
  if (subscriptionKey.startsWith('ds:')) {
957
976
  const sourceId = subscriptionKey.slice(3);
958
- const source = __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get).find((ds) => ds.getName() === sourceId);
977
+ const source = allSources.find((ds) => ds.getName() === sourceId);
959
978
  if (source) {
960
979
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
961
980
  }
@@ -970,6 +989,10 @@ async function _AssetsController_updateState(response) {
970
989
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
971
990
  ...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
972
991
  ]);
992
+ // Subscribe to staked balance updates (separate from regular balance chain-claiming)
993
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeStakedBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
994
+ ...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
995
+ ]);
973
996
  // Subscribe to price updates for all assets held by selected accounts
974
997
  this.subscribeAssetsPrice(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
975
998
  }, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
@@ -1000,6 +1023,18 @@ async function _AssetsController_updateState(response) {
1000
1023
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accountsForSource, assignedChains);
1001
1024
  }
1002
1025
  }
1026
+ }, _AssetsController_subscribeStakedBalance = function _AssetsController_subscribeStakedBalance(accounts, chainIds) {
1027
+ const source = __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f");
1028
+ if (!source) {
1029
+ return;
1030
+ }
1031
+ const availableChains = new Set(source.getActiveChainsSync());
1032
+ const assignedChains = chainIds.filter((chainId) => availableChains.has(chainId));
1033
+ if (assignedChains.length === 0) {
1034
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
1035
+ return;
1036
+ }
1037
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accounts, assignedChains);
1003
1038
  }, _AssetsController_buildChainToAccountsMap = function _AssetsController_buildChainToAccountsMap(accounts, chainsToSubscribe) {
1004
1039
  const chainToAccounts = new Map();
1005
1040
  for (const account of accounts) {
@@ -1076,16 +1111,24 @@ async function _AssetsController_updateState(response) {
1076
1111
  const scopes = account.scopes ?? [];
1077
1112
  const result = [];
1078
1113
  for (const scope of scopes) {
1079
- const [namespace, reference] = scope.split(':');
1114
+ const scopeStr = scope;
1115
+ if (!(0, utils_1.isCaipChainId)(scopeStr)) {
1116
+ result.push(scope);
1117
+ continue;
1118
+ }
1119
+ const { namespace, reference } = (0, utils_1.parseCaipChainId)(scopeStr);
1080
1120
  // Wildcard scope (e.g., "eip155:0" means all enabled chains in that namespace)
1081
1121
  if (reference === '0') {
1082
1122
  for (const chain of __classPrivateFieldGet(this, _AssetsController_enabledChains, "f")) {
1083
- if (chain.startsWith(`${namespace}:`)) {
1084
- result.push(chain);
1123
+ if ((0, utils_1.isCaipChainId)(chain)) {
1124
+ const chainParsed = (0, utils_1.parseCaipChainId)(chain);
1125
+ if (chainParsed.namespace === namespace) {
1126
+ result.push(chain);
1127
+ }
1085
1128
  }
1086
1129
  }
1087
1130
  }
1088
- else if (namespace === 'eip155' && reference?.startsWith('0x')) {
1131
+ else if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
1089
1132
  // Normalize hex to decimal for EIP155
1090
1133
  result.push(`eip155:${parseInt(reference, 16)}`);
1091
1134
  }