@metamask-previews/assets-controller 1.0.0-preview-1346d4756 → 1.0.0-preview-d7935cb09

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 (114) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/dist/AssetsController.cjs +65 -13
  3. package/dist/AssetsController.cjs.map +1 -1
  4. package/dist/AssetsController.d.cts +31 -2
  5. package/dist/AssetsController.d.cts.map +1 -1
  6. package/dist/AssetsController.d.mts +31 -2
  7. package/dist/AssetsController.d.mts.map +1 -1
  8. package/dist/AssetsController.mjs +66 -14
  9. package/dist/AssetsController.mjs.map +1 -1
  10. package/dist/data-sources/AccountsApiDataSource.cjs +6 -8
  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 +4 -6
  15. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
  16. package/dist/data-sources/BackendWebsocketDataSource.cjs +4 -2
  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 +4 -2
  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 +79 -9
  29. package/dist/data-sources/RpcDataSource.cjs.map +1 -1
  30. package/dist/data-sources/RpcDataSource.d.cts +21 -1
  31. package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
  32. package/dist/data-sources/RpcDataSource.d.mts +21 -1
  33. package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
  34. package/dist/data-sources/RpcDataSource.mjs +80 -10
  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 +613 -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 +609 -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/utils/index.cjs +9 -1
  83. package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +1 -1
  84. package/dist/data-sources/evm-rpc-services/utils/index.d.cts +2 -0
  85. package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +1 -1
  86. package/dist/data-sources/evm-rpc-services/utils/index.d.mts +2 -0
  87. package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +1 -1
  88. package/dist/data-sources/evm-rpc-services/utils/index.mjs +2 -0
  89. package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +1 -1
  90. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs +39 -0
  91. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs.map +1 -0
  92. package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts +19 -0
  93. package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts.map +1 -0
  94. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts +19 -0
  95. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts.map +1 -0
  96. package/dist/data-sources/evm-rpc-services/utils/parsing.mjs +34 -0
  97. package/dist/data-sources/evm-rpc-services/utils/parsing.mjs.map +1 -0
  98. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs +70 -0
  99. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs.map +1 -0
  100. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts +25 -0
  101. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts.map +1 -0
  102. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts +25 -0
  103. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts.map +1 -0
  104. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs +64 -0
  105. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs.map +1 -0
  106. package/dist/data-sources/index.cjs +3 -1
  107. package/dist/data-sources/index.cjs.map +1 -1
  108. package/dist/data-sources/index.d.cts +1 -0
  109. package/dist/data-sources/index.d.cts.map +1 -1
  110. package/dist/data-sources/index.d.mts +1 -0
  111. package/dist/data-sources/index.d.mts.map +1 -1
  112. package/dist/data-sources/index.mjs +1 -0
  113. package/dist/data-sources/index.mjs.map +1 -1
  114. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ### Added
11
11
 
12
+ - 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
13
  - 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
14
  - 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
15
  - 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))
@@ -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_constructionState, _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,16 +218,23 @@ 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);
223
225
  _AssetsController_unsubscribeBasicFunctionality.set(this, null);
226
+ _AssetsController_constructionState.set(this, { initialized: false });
224
227
  __classPrivateFieldSet(this, _AssetsController_isEnabled, isEnabled(), "f");
225
228
  __classPrivateFieldSet(this, _AssetsController_isBasicFunctionality, isBasicFunctionality ?? (() => true), "f");
226
229
  __classPrivateFieldSet(this, _AssetsController_defaultUpdateInterval, defaultUpdateInterval, "f");
227
230
  __classPrivateFieldSet(this, _AssetsController_trackMetaMetricsEvent, trackMetaMetricsEvent, "f");
228
231
  const rpcConfig = rpcDataSourceConfig ?? {};
229
- const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
232
+ const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => {
233
+ if (!__classPrivateFieldGet(this, _AssetsController_constructionState, "f").initialized) {
234
+ return;
235
+ }
236
+ this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
237
+ };
230
238
  __classPrivateFieldSet(this, _AssetsController_backendWebsocketDataSource, new BackendWebsocketDataSource_1.BackendWebsocketDataSource({
231
239
  messenger: this.messenger,
232
240
  queryApiClient,
@@ -246,6 +254,11 @@ class AssetsController extends base_controller_1.BaseController {
246
254
  onActiveChainsUpdated,
247
255
  ...rpcConfig,
248
256
  }), "f");
257
+ __classPrivateFieldSet(this, _AssetsController_stakedBalanceDataSource, new StakedBalanceDataSource_1.StakedBalanceDataSource({
258
+ messenger: this.messenger,
259
+ onActiveChainsUpdated,
260
+ ...stakedBalanceDataSourceConfig,
261
+ }), "f");
249
262
  __classPrivateFieldSet(this, _AssetsController_tokenDataSource, new TokenDataSource_1.TokenDataSource({
250
263
  queryApiClient,
251
264
  }), "f");
@@ -264,6 +277,8 @@ class AssetsController extends base_controller_1.BaseController {
264
277
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
265
278
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
266
279
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
280
+ __classPrivateFieldGet(this, _AssetsController_constructionState, "f").initialized = true;
281
+ // Subscriptions start only on KeyringController:unlock -> #start(), not here.
267
282
  // Subscribe to basic-functionality changes after construction so a synchronous
268
283
  // onChange during subscribe cannot run before data sources are initialized.
269
284
  if (subscribeToBasicFunctionalityChange) {
@@ -290,6 +305,9 @@ class AssetsController extends base_controller_1.BaseController {
290
305
  * @param previousChains - Previous chains; used to compute added/removed.
291
306
  */
292
307
  handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
308
+ if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
309
+ return;
310
+ }
293
311
  log('Data source active chains changed', {
294
312
  dataSourceId,
295
313
  chainCount: activeChains.length,
@@ -343,11 +361,16 @@ class AssetsController extends base_controller_1.BaseController {
343
361
  __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
344
362
  __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
345
363
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
364
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
346
365
  __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
347
366
  __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
348
367
  __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
349
368
  ]
350
- : [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f")];
369
+ : [
370
+ __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
371
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
372
+ __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
373
+ ];
351
374
  const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
352
375
  await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
353
376
  if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
@@ -615,6 +638,7 @@ class AssetsController extends base_controller_1.BaseController {
615
638
  __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f")?.destroy?.();
616
639
  __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f")?.destroy?.();
617
640
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")?.destroy?.();
641
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f")?.destroy?.();
618
642
  // Stop all active subscriptions
619
643
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
620
644
  if (__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f")) {
@@ -634,7 +658,7 @@ class AssetsController extends base_controller_1.BaseController {
634
658
  }
635
659
  }
636
660
  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() {
661
+ _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_constructionState = new WeakMap(), _AssetsController_instances = new WeakSet(), _AssetsController_selectedAccounts_get = function _AssetsController_selectedAccounts_get() {
638
662
  return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
639
663
  }, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
640
664
  return [
@@ -670,7 +694,7 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
670
694
  }
671
695
  return chains;
672
696
  }, _AssetsController_normalizeChainReference = function _AssetsController_normalizeChainReference(namespace, reference) {
673
- if (namespace === 'eip155' && reference.startsWith('0x')) {
697
+ if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
674
698
  // Convert hex to decimal for EIP155 chains
675
699
  return parseInt(reference, 16).toString();
676
700
  }
@@ -949,13 +973,17 @@ async function _AssetsController_updateState(response) {
949
973
  this.unsubscribeAssetsPrice();
950
974
  // Stop balance subscriptions by properly notifying data sources via messenger
951
975
  // 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).
976
+ // Use #allBalanceDataSources + staked balance source so we unsubscribe from
977
+ // every source that may have been subscribed.
978
+ const allSources = [
979
+ ...__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get),
980
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
981
+ ];
954
982
  const subscriptionKeys = [...__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").keys()];
955
983
  for (const subscriptionKey of subscriptionKeys) {
956
984
  if (subscriptionKey.startsWith('ds:')) {
957
985
  const sourceId = subscriptionKey.slice(3);
958
- const source = __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get).find((ds) => ds.getName() === sourceId);
986
+ const source = allSources.find((ds) => ds.getName() === sourceId);
959
987
  if (source) {
960
988
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
961
989
  }
@@ -970,6 +998,10 @@ async function _AssetsController_updateState(response) {
970
998
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
971
999
  ...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
972
1000
  ]);
1001
+ // Subscribe to staked balance updates (separate from regular balance chain-claiming)
1002
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeStakedBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
1003
+ ...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
1004
+ ]);
973
1005
  // Subscribe to price updates for all assets held by selected accounts
974
1006
  this.subscribeAssetsPrice(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
975
1007
  }, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
@@ -1000,6 +1032,18 @@ async function _AssetsController_updateState(response) {
1000
1032
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accountsForSource, assignedChains);
1001
1033
  }
1002
1034
  }
1035
+ }, _AssetsController_subscribeStakedBalance = function _AssetsController_subscribeStakedBalance(accounts, chainIds) {
1036
+ const source = __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f");
1037
+ if (!source) {
1038
+ return;
1039
+ }
1040
+ const availableChains = new Set(source.getActiveChainsSync());
1041
+ const assignedChains = chainIds.filter((chainId) => availableChains.has(chainId));
1042
+ if (assignedChains.length === 0) {
1043
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
1044
+ return;
1045
+ }
1046
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accounts, assignedChains);
1003
1047
  }, _AssetsController_buildChainToAccountsMap = function _AssetsController_buildChainToAccountsMap(accounts, chainsToSubscribe) {
1004
1048
  const chainToAccounts = new Map();
1005
1049
  for (const account of accounts) {
@@ -1076,16 +1120,24 @@ async function _AssetsController_updateState(response) {
1076
1120
  const scopes = account.scopes ?? [];
1077
1121
  const result = [];
1078
1122
  for (const scope of scopes) {
1079
- const [namespace, reference] = scope.split(':');
1123
+ const scopeStr = scope;
1124
+ if (!(0, utils_1.isCaipChainId)(scopeStr)) {
1125
+ result.push(scope);
1126
+ continue;
1127
+ }
1128
+ const { namespace, reference } = (0, utils_1.parseCaipChainId)(scopeStr);
1080
1129
  // Wildcard scope (e.g., "eip155:0" means all enabled chains in that namespace)
1081
1130
  if (reference === '0') {
1082
1131
  for (const chain of __classPrivateFieldGet(this, _AssetsController_enabledChains, "f")) {
1083
- if (chain.startsWith(`${namespace}:`)) {
1084
- result.push(chain);
1132
+ if ((0, utils_1.isCaipChainId)(chain)) {
1133
+ const chainParsed = (0, utils_1.parseCaipChainId)(chain);
1134
+ if (chainParsed.namespace === namespace) {
1135
+ result.push(chain);
1136
+ }
1085
1137
  }
1086
1138
  }
1087
1139
  }
1088
- else if (namespace === 'eip155' && reference?.startsWith('0x')) {
1140
+ else if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
1089
1141
  // Normalize hex to decimal for EIP155
1090
1142
  result.push(`eip155:${parseInt(reference, 16)}`);
1091
1143
  }