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

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 +69 -14
  3. package/dist/AssetsController.cjs.map +1 -1
  4. package/dist/AssetsController.d.cts +7 -2
  5. package/dist/AssetsController.d.cts.map +1 -1
  6. package/dist/AssetsController.d.mts +7 -2
  7. package/dist/AssetsController.d.mts.map +1 -1
  8. package/dist/AssetsController.mjs +70 -15
  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 +79 -9
  29. package/dist/data-sources/RpcDataSource.cjs.map +1 -1
  30. package/dist/data-sources/RpcDataSource.d.cts +8 -47
  31. package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
  32. package/dist/data-sources/RpcDataSource.d.mts +8 -47
  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 +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/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 +47 -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 +25 -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 +25 -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 +39 -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 +68 -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 +62 -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 +3 -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_pricePollInterval, _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,
@@ -199,6 +200,8 @@ class AssetsController extends base_controller_1.BaseController {
199
200
  _AssetsController_isBasicFunctionality.set(this, void 0);
200
201
  /** Default update interval hint passed to data sources */
201
202
  _AssetsController_defaultUpdateInterval.set(this, void 0);
203
+ /** Price subscription poll interval from priceDataSourceConfig (used when subscribeAssetsPrice gets no updateInterval). */
204
+ _AssetsController_pricePollInterval.set(this, void 0);
202
205
  /** Optional callback for first init/fetch MetaMetrics (duration). */
203
206
  _AssetsController_trackMetaMetricsEvent.set(this, void 0);
204
207
  /** Whether we have already reported first init fetch for this session (reset on #stop). */
@@ -217,16 +220,24 @@ class AssetsController extends base_controller_1.BaseController {
217
220
  _AssetsController_accountsApiDataSource.set(this, void 0);
218
221
  _AssetsController_snapDataSource.set(this, void 0);
219
222
  _AssetsController_rpcDataSource.set(this, void 0);
223
+ _AssetsController_stakedBalanceDataSource.set(this, void 0);
220
224
  _AssetsController_priceDataSource.set(this, void 0);
221
225
  _AssetsController_detectionMiddleware.set(this, void 0);
222
226
  _AssetsController_tokenDataSource.set(this, void 0);
223
227
  _AssetsController_unsubscribeBasicFunctionality.set(this, null);
228
+ _AssetsController_constructionState.set(this, { initialized: false });
224
229
  __classPrivateFieldSet(this, _AssetsController_isEnabled, isEnabled(), "f");
225
230
  __classPrivateFieldSet(this, _AssetsController_isBasicFunctionality, isBasicFunctionality ?? (() => true), "f");
226
231
  __classPrivateFieldSet(this, _AssetsController_defaultUpdateInterval, defaultUpdateInterval, "f");
232
+ __classPrivateFieldSet(this, _AssetsController_pricePollInterval, priceDataSourceConfig?.pollInterval, "f");
227
233
  __classPrivateFieldSet(this, _AssetsController_trackMetaMetricsEvent, trackMetaMetricsEvent, "f");
228
234
  const rpcConfig = rpcDataSourceConfig ?? {};
229
- const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
235
+ const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => {
236
+ if (!__classPrivateFieldGet(this, _AssetsController_constructionState, "f").initialized) {
237
+ return;
238
+ }
239
+ this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
240
+ };
230
241
  __classPrivateFieldSet(this, _AssetsController_backendWebsocketDataSource, new BackendWebsocketDataSource_1.BackendWebsocketDataSource({
231
242
  messenger: this.messenger,
232
243
  queryApiClient,
@@ -246,6 +257,11 @@ class AssetsController extends base_controller_1.BaseController {
246
257
  onActiveChainsUpdated,
247
258
  ...rpcConfig,
248
259
  }), "f");
260
+ __classPrivateFieldSet(this, _AssetsController_stakedBalanceDataSource, new StakedBalanceDataSource_1.StakedBalanceDataSource({
261
+ messenger: this.messenger,
262
+ onActiveChainsUpdated,
263
+ ...stakedBalanceDataSourceConfig,
264
+ }), "f");
249
265
  __classPrivateFieldSet(this, _AssetsController_tokenDataSource, new TokenDataSource_1.TokenDataSource({
250
266
  queryApiClient,
251
267
  }), "f");
@@ -264,6 +280,8 @@ class AssetsController extends base_controller_1.BaseController {
264
280
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
265
281
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
266
282
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
283
+ __classPrivateFieldGet(this, _AssetsController_constructionState, "f").initialized = true;
284
+ // Subscriptions start only on KeyringController:unlock -> #start(), not here.
267
285
  // Subscribe to basic-functionality changes after construction so a synchronous
268
286
  // onChange during subscribe cannot run before data sources are initialized.
269
287
  if (subscribeToBasicFunctionalityChange) {
@@ -290,6 +308,9 @@ class AssetsController extends base_controller_1.BaseController {
290
308
  * @param previousChains - Previous chains; used to compute added/removed.
291
309
  */
292
310
  handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
311
+ if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
312
+ return;
313
+ }
293
314
  log('Data source active chains changed', {
294
315
  dataSourceId,
295
316
  chainCount: activeChains.length,
@@ -343,11 +364,16 @@ class AssetsController extends base_controller_1.BaseController {
343
364
  __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
344
365
  __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
345
366
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
367
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
346
368
  __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
347
369
  __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
348
370
  __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
349
371
  ]
350
- : [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f")];
372
+ : [
373
+ __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
374
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
375
+ __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
376
+ ];
351
377
  const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
352
378
  await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
353
379
  if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
@@ -527,7 +553,7 @@ class AssetsController extends base_controller_1.BaseController {
527
553
  if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
528
554
  return;
529
555
  }
530
- const { updateInterval = __classPrivateFieldGet(this, _AssetsController_defaultUpdateInterval, "f") } = options;
556
+ const { updateInterval = __classPrivateFieldGet(this, _AssetsController_pricePollInterval, "f") ?? __classPrivateFieldGet(this, _AssetsController_defaultUpdateInterval, "f"), } = options;
531
557
  const subscriptionKey = 'ds:PriceDataSource';
532
558
  const existingSubscription = __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").get(subscriptionKey);
533
559
  const isUpdate = existingSubscription !== undefined;
@@ -615,6 +641,7 @@ class AssetsController extends base_controller_1.BaseController {
615
641
  __classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f")?.destroy?.();
616
642
  __classPrivateFieldGet(this, _AssetsController_snapDataSource, "f")?.destroy?.();
617
643
  __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")?.destroy?.();
644
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f")?.destroy?.();
618
645
  // Stop all active subscriptions
619
646
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
620
647
  if (__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f")) {
@@ -634,7 +661,7 @@ class AssetsController extends base_controller_1.BaseController {
634
661
  }
635
662
  }
636
663
  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() {
664
+ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_pricePollInterval = 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
665
  return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
639
666
  }, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
640
667
  return [
@@ -670,7 +697,7 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
670
697
  }
671
698
  return chains;
672
699
  }, _AssetsController_normalizeChainReference = function _AssetsController_normalizeChainReference(namespace, reference) {
673
- if (namespace === 'eip155' && reference.startsWith('0x')) {
700
+ if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
674
701
  // Convert hex to decimal for EIP155 chains
675
702
  return parseInt(reference, 16).toString();
676
703
  }
@@ -949,13 +976,17 @@ async function _AssetsController_updateState(response) {
949
976
  this.unsubscribeAssetsPrice();
950
977
  // Stop balance subscriptions by properly notifying data sources via messenger
951
978
  // 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).
979
+ // Use #allBalanceDataSources + staked balance source so we unsubscribe from
980
+ // every source that may have been subscribed.
981
+ const allSources = [
982
+ ...__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get),
983
+ __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
984
+ ];
954
985
  const subscriptionKeys = [...__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").keys()];
955
986
  for (const subscriptionKey of subscriptionKeys) {
956
987
  if (subscriptionKey.startsWith('ds:')) {
957
988
  const sourceId = subscriptionKey.slice(3);
958
- const source = __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get).find((ds) => ds.getName() === sourceId);
989
+ const source = allSources.find((ds) => ds.getName() === sourceId);
959
990
  if (source) {
960
991
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
961
992
  }
@@ -970,6 +1001,10 @@ async function _AssetsController_updateState(response) {
970
1001
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
971
1002
  ...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
972
1003
  ]);
1004
+ // Subscribe to staked balance updates (separate from regular balance chain-claiming)
1005
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeStakedBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
1006
+ ...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
1007
+ ]);
973
1008
  // Subscribe to price updates for all assets held by selected accounts
974
1009
  this.subscribeAssetsPrice(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
975
1010
  }, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
@@ -1000,6 +1035,18 @@ async function _AssetsController_updateState(response) {
1000
1035
  __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accountsForSource, assignedChains);
1001
1036
  }
1002
1037
  }
1038
+ }, _AssetsController_subscribeStakedBalance = function _AssetsController_subscribeStakedBalance(accounts, chainIds) {
1039
+ const source = __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f");
1040
+ if (!source) {
1041
+ return;
1042
+ }
1043
+ const availableChains = new Set(source.getActiveChainsSync());
1044
+ const assignedChains = chainIds.filter((chainId) => availableChains.has(chainId));
1045
+ if (assignedChains.length === 0) {
1046
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
1047
+ return;
1048
+ }
1049
+ __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accounts, assignedChains);
1003
1050
  }, _AssetsController_buildChainToAccountsMap = function _AssetsController_buildChainToAccountsMap(accounts, chainsToSubscribe) {
1004
1051
  const chainToAccounts = new Map();
1005
1052
  for (const account of accounts) {
@@ -1076,16 +1123,24 @@ async function _AssetsController_updateState(response) {
1076
1123
  const scopes = account.scopes ?? [];
1077
1124
  const result = [];
1078
1125
  for (const scope of scopes) {
1079
- const [namespace, reference] = scope.split(':');
1126
+ const scopeStr = scope;
1127
+ if (!(0, utils_1.isCaipChainId)(scopeStr)) {
1128
+ result.push(scope);
1129
+ continue;
1130
+ }
1131
+ const { namespace, reference } = (0, utils_1.parseCaipChainId)(scopeStr);
1080
1132
  // Wildcard scope (e.g., "eip155:0" means all enabled chains in that namespace)
1081
1133
  if (reference === '0') {
1082
1134
  for (const chain of __classPrivateFieldGet(this, _AssetsController_enabledChains, "f")) {
1083
- if (chain.startsWith(`${namespace}:`)) {
1084
- result.push(chain);
1135
+ if ((0, utils_1.isCaipChainId)(chain)) {
1136
+ const chainParsed = (0, utils_1.parseCaipChainId)(chain);
1137
+ if (chainParsed.namespace === namespace) {
1138
+ result.push(chain);
1139
+ }
1085
1140
  }
1086
1141
  }
1087
1142
  }
1088
- else if (namespace === 'eip155' && reference?.startsWith('0x')) {
1143
+ else if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
1089
1144
  // Normalize hex to decimal for EIP155
1090
1145
  result.push(`eip155:${parseInt(reference, 16)}`);
1091
1146
  }