@metamask-previews/assets-controller 1.0.0-preview-27e39dd44 → 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.
- package/CHANGELOG.md +9 -0
- package/dist/AssetsController.cjs +167 -47
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +85 -2
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +85 -2
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +168 -48
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +67 -12
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.cts +22 -3
- package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.mts +22 -3
- package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs +63 -9
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.cjs +4 -2
- package/dist/data-sources/BackendWebsocketDataSource.cjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.cts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.d.mts.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.mjs +4 -2
- package/dist/data-sources/BackendWebsocketDataSource.mjs.map +1 -1
- package/dist/data-sources/PriceDataSource.cjs +17 -4
- package/dist/data-sources/PriceDataSource.cjs.map +1 -1
- package/dist/data-sources/PriceDataSource.d.cts +8 -4
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
- package/dist/data-sources/PriceDataSource.d.mts +8 -4
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
- package/dist/data-sources/PriceDataSource.mjs +17 -4
- package/dist/data-sources/PriceDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +96 -16
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts +29 -4
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts +29 -4
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +97 -17
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/SnapDataSource.cjs +16 -4
- package/dist/data-sources/SnapDataSource.cjs.map +1 -1
- package/dist/data-sources/SnapDataSource.d.cts +2 -1
- package/dist/data-sources/SnapDataSource.d.cts.map +1 -1
- package/dist/data-sources/SnapDataSource.d.mts +2 -1
- package/dist/data-sources/SnapDataSource.d.mts.map +1 -1
- package/dist/data-sources/SnapDataSource.mjs +16 -4
- package/dist/data-sources/SnapDataSource.mjs.map +1 -1
- package/dist/data-sources/StakedBalanceDataSource.cjs +613 -0
- package/dist/data-sources/StakedBalanceDataSource.cjs.map +1 -0
- package/dist/data-sources/StakedBalanceDataSource.d.cts +72 -0
- package/dist/data-sources/StakedBalanceDataSource.d.cts.map +1 -0
- package/dist/data-sources/StakedBalanceDataSource.d.mts +72 -0
- package/dist/data-sources/StakedBalanceDataSource.d.mts.map +1 -0
- package/dist/data-sources/StakedBalanceDataSource.mjs +609 -0
- package/dist/data-sources/StakedBalanceDataSource.mjs.map +1 -0
- package/dist/data-sources/TokenDataSource.cjs +8 -0
- package/dist/data-sources/TokenDataSource.cjs.map +1 -1
- package/dist/data-sources/TokenDataSource.d.cts +1 -0
- package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
- package/dist/data-sources/TokenDataSource.d.mts +1 -0
- package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
- package/dist/data-sources/TokenDataSource.mjs +8 -0
- package/dist/data-sources/TokenDataSource.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/index.cjs +5 -1
- package/dist/data-sources/evm-rpc-services/index.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/index.d.cts +1 -1
- package/dist/data-sources/evm-rpc-services/index.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/index.d.mts +1 -1
- package/dist/data-sources/evm-rpc-services/index.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/index.mjs +1 -1
- package/dist/data-sources/evm-rpc-services/index.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs +132 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts +78 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts +78 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs +126 -0
- package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs +16 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts +5 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts +5 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs +16 -0
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/index.cjs +6 -1
- package/dist/data-sources/evm-rpc-services/services/index.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/index.d.cts +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/index.d.mts +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/index.mjs +1 -0
- package/dist/data-sources/evm-rpc-services/services/index.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/services.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/services.d.cts +4 -0
- package/dist/data-sources/evm-rpc-services/types/services.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/services.d.mts +4 -0
- package/dist/data-sources/evm-rpc-services/types/services.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/services.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/index.cjs +9 -1
- package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/index.d.cts +2 -0
- package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/index.d.mts +2 -0
- package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/index.mjs +2 -0
- package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/utils/parsing.cjs +39 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts +19 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts +19 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.mjs +34 -0
- package/dist/data-sources/evm-rpc-services/utils/parsing.mjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs +70 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts +25 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts +25 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts.map +1 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs +64 -0
- package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs.map +1 -0
- package/dist/data-sources/index.cjs +3 -1
- package/dist/data-sources/index.cjs.map +1 -1
- package/dist/data-sources/index.d.cts +3 -2
- package/dist/data-sources/index.d.cts.map +1 -1
- package/dist/data-sources/index.d.mts +3 -2
- package/dist/data-sources/index.d.mts.map +1 -1
- package/dist/data-sources/index.mjs +1 -0
- package/dist/data-sources/index.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/middlewares/DetectionMiddleware.cjs +3 -0
- package/dist/middlewares/DetectionMiddleware.cjs.map +1 -1
- package/dist/middlewares/DetectionMiddleware.d.cts +1 -0
- package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -1
- package/dist/middlewares/DetectionMiddleware.d.mts +1 -0
- package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -1
- package/dist/middlewares/DetectionMiddleware.mjs +3 -0
- package/dist/middlewares/DetectionMiddleware.mjs.map +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,8 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
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))
|
|
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))
|
|
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))
|
|
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))
|
|
16
|
+
- Add basic functionality toggle: `isBasicFunctionality` (getter `() => boolean`); no value is stored in the controller. When the getter returns true (matches UI "Basic functionality" ON), token and price APIs are used; when false, only RPC is used. Optional `subscribeToBasicFunctionalityChange(onChange)` lets the consumer register for toggle changes (e.g. extension subscribes to PreferencesController:stateChange, mobile uses its own mechanism); may return an unsubscribe function for controller destroy ([#7904](https://github.com/MetaMask/core/pull/7904))
|
|
17
|
+
|
|
10
18
|
### Changed
|
|
11
19
|
|
|
20
|
+
- **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`.
|
|
12
21
|
- **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))
|
|
13
22
|
- Bump `@metamask/keyring-api` from `^21.0.0` to `^21.5.0` ([#7857](https://github.com/MetaMask/core/pull/7857))
|
|
14
23
|
- Bump `@metamask/keyring-internal-api` from `^9.0.0` to `^10.0.0` ([#7857](https://github.com/MetaMask/core/pull/7857))
|
|
@@ -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_defaultUpdateInterval, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_selectedAccounts_get, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource,
|
|
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, queryApiClient, rpcDataSourceConfig, }) {
|
|
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,
|
|
@@ -195,8 +196,14 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
195
196
|
_AssetsController_instances.add(this);
|
|
196
197
|
/** Whether the controller is enabled */
|
|
197
198
|
_AssetsController_isEnabled.set(this, void 0);
|
|
199
|
+
/** Getter for basic functionality (only balance fetch/subscribe use RPC; token/price API not used). No attribute stored. */
|
|
200
|
+
_AssetsController_isBasicFunctionality.set(this, void 0);
|
|
198
201
|
/** Default update interval hint passed to data sources */
|
|
199
202
|
_AssetsController_defaultUpdateInterval.set(this, void 0);
|
|
203
|
+
/** Optional callback for first init/fetch MetaMetrics (duration). */
|
|
204
|
+
_AssetsController_trackMetaMetricsEvent.set(this, void 0);
|
|
205
|
+
/** Whether we have already reported first init fetch for this session (reset on #stop). */
|
|
206
|
+
_AssetsController_firstInitFetchReported.set(this, false);
|
|
200
207
|
_AssetsController_controllerMutex.set(this, new async_mutex_1.Mutex());
|
|
201
208
|
/**
|
|
202
209
|
* Active balance subscriptions keyed by account ID.
|
|
@@ -211,13 +218,23 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
211
218
|
_AssetsController_accountsApiDataSource.set(this, void 0);
|
|
212
219
|
_AssetsController_snapDataSource.set(this, void 0);
|
|
213
220
|
_AssetsController_rpcDataSource.set(this, void 0);
|
|
221
|
+
_AssetsController_stakedBalanceDataSource.set(this, void 0);
|
|
214
222
|
_AssetsController_priceDataSource.set(this, void 0);
|
|
215
223
|
_AssetsController_detectionMiddleware.set(this, void 0);
|
|
216
224
|
_AssetsController_tokenDataSource.set(this, void 0);
|
|
225
|
+
_AssetsController_unsubscribeBasicFunctionality.set(this, null);
|
|
226
|
+
_AssetsController_constructionState.set(this, { initialized: false });
|
|
217
227
|
__classPrivateFieldSet(this, _AssetsController_isEnabled, isEnabled(), "f");
|
|
228
|
+
__classPrivateFieldSet(this, _AssetsController_isBasicFunctionality, isBasicFunctionality ?? (() => true), "f");
|
|
218
229
|
__classPrivateFieldSet(this, _AssetsController_defaultUpdateInterval, defaultUpdateInterval, "f");
|
|
230
|
+
__classPrivateFieldSet(this, _AssetsController_trackMetaMetricsEvent, trackMetaMetricsEvent, "f");
|
|
219
231
|
const rpcConfig = rpcDataSourceConfig ?? {};
|
|
220
|
-
const onActiveChainsUpdated = (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
|
+
};
|
|
221
238
|
__classPrivateFieldSet(this, _AssetsController_backendWebsocketDataSource, new BackendWebsocketDataSource_1.BackendWebsocketDataSource({
|
|
222
239
|
messenger: this.messenger,
|
|
223
240
|
queryApiClient,
|
|
@@ -226,6 +243,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
226
243
|
__classPrivateFieldSet(this, _AssetsController_accountsApiDataSource, new AccountsApiDataSource_1.AccountsApiDataSource({
|
|
227
244
|
queryApiClient,
|
|
228
245
|
onActiveChainsUpdated,
|
|
246
|
+
...accountsApiDataSourceConfig,
|
|
229
247
|
}), "f");
|
|
230
248
|
__classPrivateFieldSet(this, _AssetsController_snapDataSource, new SnapDataSource_1.SnapDataSource({
|
|
231
249
|
messenger: this.messenger,
|
|
@@ -236,11 +254,17 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
236
254
|
onActiveChainsUpdated,
|
|
237
255
|
...rpcConfig,
|
|
238
256
|
}), "f");
|
|
257
|
+
__classPrivateFieldSet(this, _AssetsController_stakedBalanceDataSource, new StakedBalanceDataSource_1.StakedBalanceDataSource({
|
|
258
|
+
messenger: this.messenger,
|
|
259
|
+
onActiveChainsUpdated,
|
|
260
|
+
...stakedBalanceDataSourceConfig,
|
|
261
|
+
}), "f");
|
|
239
262
|
__classPrivateFieldSet(this, _AssetsController_tokenDataSource, new TokenDataSource_1.TokenDataSource({
|
|
240
263
|
queryApiClient,
|
|
241
264
|
}), "f");
|
|
242
265
|
__classPrivateFieldSet(this, _AssetsController_priceDataSource, new PriceDataSource_1.PriceDataSource({
|
|
243
266
|
queryApiClient,
|
|
267
|
+
...priceDataSourceConfig,
|
|
244
268
|
}), "f");
|
|
245
269
|
__classPrivateFieldSet(this, _AssetsController_detectionMiddleware, new DetectionMiddleware_1.DetectionMiddleware(), "f");
|
|
246
270
|
if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
|
|
@@ -253,6 +277,16 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
253
277
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
|
|
254
278
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
|
|
255
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.
|
|
282
|
+
// Subscribe to basic-functionality changes after construction so a synchronous
|
|
283
|
+
// onChange during subscribe cannot run before data sources are initialized.
|
|
284
|
+
if (subscribeToBasicFunctionalityChange) {
|
|
285
|
+
const unsubscribe = subscribeToBasicFunctionalityChange((isBasic) => this.handleBasicFunctionalityChange(isBasic));
|
|
286
|
+
if (typeof unsubscribe === 'function') {
|
|
287
|
+
__classPrivateFieldSet(this, _AssetsController_unsubscribeBasicFunctionality, unsubscribe, "f");
|
|
288
|
+
}
|
|
289
|
+
}
|
|
256
290
|
}
|
|
257
291
|
// ============================================================================
|
|
258
292
|
// DATA SOURCE CHAIN MANAGEMENT
|
|
@@ -271,6 +305,9 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
271
305
|
* @param previousChains - Previous chains; used to compute added/removed.
|
|
272
306
|
*/
|
|
273
307
|
handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
|
|
308
|
+
if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
274
311
|
log('Data source active chains changed', {
|
|
275
312
|
dataSourceId,
|
|
276
313
|
chainCount: activeChains.length,
|
|
@@ -312,21 +349,39 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
312
349
|
customAssets.push(...accountCustomAssets);
|
|
313
350
|
}
|
|
314
351
|
if (options?.forceUpdate) {
|
|
352
|
+
const startTime = Date.now();
|
|
315
353
|
const request = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildDataRequest).call(this, accounts, chainIds, {
|
|
316
354
|
assetTypes,
|
|
317
355
|
dataTypes,
|
|
318
356
|
customAssets: customAssets.length > 0 ? customAssets : undefined,
|
|
319
357
|
forceUpdate: true,
|
|
320
358
|
});
|
|
321
|
-
const
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
359
|
+
const sources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
360
|
+
? [
|
|
361
|
+
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
|
|
362
|
+
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
|
|
363
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
364
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
365
|
+
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
366
|
+
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
|
|
367
|
+
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
|
|
368
|
+
]
|
|
369
|
+
: [
|
|
370
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
371
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
372
|
+
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
373
|
+
];
|
|
374
|
+
const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
|
|
329
375
|
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
|
|
376
|
+
if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
|
|
377
|
+
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, true, "f");
|
|
378
|
+
const durationMs = Date.now() - startTime;
|
|
379
|
+
__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f").call(this, {
|
|
380
|
+
durationMs,
|
|
381
|
+
chainIds,
|
|
382
|
+
durationByDataSource,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
330
385
|
}
|
|
331
386
|
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
|
|
332
387
|
}
|
|
@@ -492,6 +547,9 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
492
547
|
* @param options.updateInterval - Polling interval in ms.
|
|
493
548
|
*/
|
|
494
549
|
subscribeAssetsPrice(accounts, chainIds, options = {}) {
|
|
550
|
+
if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
495
553
|
const { updateInterval = __classPrivateFieldGet(this, _AssetsController_defaultUpdateInterval, "f") } = options;
|
|
496
554
|
const subscriptionKey = 'ds:PriceDataSource';
|
|
497
555
|
const existingSubscription = __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").get(subscriptionKey);
|
|
@@ -531,6 +589,18 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
531
589
|
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f").unsubscribe(subscriptionKey).catch(console.error);
|
|
532
590
|
existingSubscription.unsubscribe();
|
|
533
591
|
}
|
|
592
|
+
/**
|
|
593
|
+
* Handle basic functionality toggle change. Call this from the consumer (extension or mobile)
|
|
594
|
+
* when the user changes the "Basic functionality" setting. Refreshes subscriptions so the
|
|
595
|
+
* current {@link AssetsControllerOptions.isBasicFunctionality} getter is used (true = APIs on,
|
|
596
|
+
* false = RPC only).
|
|
597
|
+
*
|
|
598
|
+
* @param _isBasic - The new value (for call-site clarity; the getter is the source of truth).
|
|
599
|
+
*/
|
|
600
|
+
handleBasicFunctionalityChange(_isBasic) {
|
|
601
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
602
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
603
|
+
}
|
|
534
604
|
/**
|
|
535
605
|
* Handle assets updated from a data source.
|
|
536
606
|
* Called via the onAssetsUpdate callback passed in SubscriptionRequest when the controller subscribes to a data source.
|
|
@@ -548,11 +618,7 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
548
618
|
});
|
|
549
619
|
// Run through enrichment middlewares (Event Stack: Detection → Token → Price)
|
|
550
620
|
// Include 'metadata' in dataTypes so TokenDataSource runs to enrich detected assets
|
|
551
|
-
const enrichedResponse = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [
|
|
552
|
-
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f").assetsMiddleware,
|
|
553
|
-
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f").assetsMiddleware,
|
|
554
|
-
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f").assetsMiddleware,
|
|
555
|
-
], request ?? {
|
|
621
|
+
const { response: enrichedResponse } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"), __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f")], request ?? {
|
|
556
622
|
accountsWithSupportedChains: [],
|
|
557
623
|
chainIds: [],
|
|
558
624
|
dataTypes: ['balance', 'metadata', 'price'],
|
|
@@ -564,21 +630,21 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
564
630
|
// ============================================================================
|
|
565
631
|
destroy() {
|
|
566
632
|
log('Destroying AssetsController', {
|
|
567
|
-
dataSourceCount: __classPrivateFieldGet(this, _AssetsController_instances, "a",
|
|
633
|
+
dataSourceCount: __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get).length,
|
|
568
634
|
subscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
|
|
569
635
|
});
|
|
570
636
|
// Destroy instantiated data sources
|
|
571
637
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f")?.destroy?.();
|
|
572
638
|
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f")?.destroy?.();
|
|
573
639
|
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f")?.destroy?.();
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
typeof __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").destroy ===
|
|
577
|
-
'function') {
|
|
578
|
-
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").destroy();
|
|
579
|
-
}
|
|
640
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")?.destroy?.();
|
|
641
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f")?.destroy?.();
|
|
580
642
|
// Stop all active subscriptions
|
|
581
643
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
644
|
+
if (__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f")) {
|
|
645
|
+
__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f").call(this);
|
|
646
|
+
__classPrivateFieldSet(this, _AssetsController_unsubscribeBasicFunctionality, null, "f");
|
|
647
|
+
}
|
|
582
648
|
// Unregister action handlers
|
|
583
649
|
this.messenger.unregisterActionHandler('AssetsController:getAssets');
|
|
584
650
|
this.messenger.unregisterActionHandler('AssetsController:getAssetsBalance');
|
|
@@ -592,9 +658,9 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
592
658
|
}
|
|
593
659
|
}
|
|
594
660
|
exports.AssetsController = AssetsController;
|
|
595
|
-
_AssetsController_isEnabled = new WeakMap(), _AssetsController_defaultUpdateInterval = 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_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() {
|
|
596
662
|
return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
|
|
597
|
-
},
|
|
663
|
+
}, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
|
|
598
664
|
return [
|
|
599
665
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f"),
|
|
600
666
|
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
|
|
@@ -628,7 +694,7 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_defaultUpdateInte
|
|
|
628
694
|
}
|
|
629
695
|
return chains;
|
|
630
696
|
}, _AssetsController_normalizeChainReference = function _AssetsController_normalizeChainReference(namespace, reference) {
|
|
631
|
-
if (namespace === 'eip155' &&
|
|
697
|
+
if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
|
|
632
698
|
// Convert hex to decimal for EIP155 chains
|
|
633
699
|
return parseInt(reference, 16).toString();
|
|
634
700
|
}
|
|
@@ -653,14 +719,27 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_defaultUpdateInte
|
|
|
653
719
|
// ============================================================================
|
|
654
720
|
/**
|
|
655
721
|
* Execute middlewares with request/response context.
|
|
722
|
+
* Returns response and exclusive duration per source (sum ≈ wall time).
|
|
656
723
|
*
|
|
657
|
-
* @param
|
|
724
|
+
* @param sources - Data sources or middlewares with getName() and assetsMiddleware (executed in order).
|
|
658
725
|
* @param request - The data request.
|
|
659
726
|
* @param initialResponse - Optional initial response (for enriching existing data).
|
|
660
|
-
* @returns
|
|
727
|
+
* @returns Response and durationByDataSource (exclusive ms per source name).
|
|
661
728
|
*/
|
|
662
|
-
async function _AssetsController_executeMiddlewares(
|
|
663
|
-
const
|
|
729
|
+
async function _AssetsController_executeMiddlewares(sources, request, initialResponse = {}) {
|
|
730
|
+
const names = sources.map((source) => source.getName());
|
|
731
|
+
const middlewares = sources.map((source) => source.assetsMiddleware);
|
|
732
|
+
const inclusive = [];
|
|
733
|
+
const wrapped = middlewares.map((middleware, i) => (async (ctx, next) => {
|
|
734
|
+
const start = Date.now();
|
|
735
|
+
try {
|
|
736
|
+
return await middleware(ctx, next);
|
|
737
|
+
}
|
|
738
|
+
finally {
|
|
739
|
+
inclusive[i] = Date.now() - start;
|
|
740
|
+
}
|
|
741
|
+
}));
|
|
742
|
+
const chain = wrapped.reduceRight((next, middleware) => async (ctx) => {
|
|
664
743
|
try {
|
|
665
744
|
return await middleware(ctx, next);
|
|
666
745
|
}
|
|
@@ -674,7 +753,16 @@ async function _AssetsController_executeMiddlewares(middlewares, request, initia
|
|
|
674
753
|
response: initialResponse,
|
|
675
754
|
getAssetsState: () => this.state,
|
|
676
755
|
});
|
|
677
|
-
|
|
756
|
+
const durationByDataSource = {};
|
|
757
|
+
for (let i = 0; i < inclusive.length; i++) {
|
|
758
|
+
const nextInc = i + 1 < inclusive.length ? (inclusive[i + 1] ?? 0) : 0;
|
|
759
|
+
const exclusive = Math.max(0, (inclusive[i] ?? 0) - nextInc);
|
|
760
|
+
const name = names[i];
|
|
761
|
+
if (name !== undefined) {
|
|
762
|
+
durationByDataSource[name] = exclusive;
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
return { response: result.response, durationByDataSource };
|
|
678
766
|
}, _AssetsController_updateState =
|
|
679
767
|
// ============================================================================
|
|
680
768
|
// STATE MANAGEMENT
|
|
@@ -869,29 +957,33 @@ async function _AssetsController_updateState(response) {
|
|
|
869
957
|
enabledChainCount: __classPrivateFieldGet(this, _AssetsController_enabledChains, "f").size,
|
|
870
958
|
});
|
|
871
959
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
});
|
|
879
|
-
}
|
|
960
|
+
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), {
|
|
961
|
+
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
962
|
+
forceUpdate: true,
|
|
963
|
+
}).catch((error) => {
|
|
964
|
+
log('Failed to fetch assets', error);
|
|
965
|
+
});
|
|
880
966
|
}, _AssetsController_stop = function _AssetsController_stop() {
|
|
881
967
|
log('Stopping asset tracking', {
|
|
882
968
|
activeSubscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
|
|
883
969
|
hasPriceSubscription: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").has('ds:PriceDataSource'),
|
|
884
970
|
});
|
|
971
|
+
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, false, "f");
|
|
885
972
|
// Stop price subscription first (uses direct messenger call)
|
|
886
973
|
this.unsubscribeAssetsPrice();
|
|
887
974
|
// Stop balance subscriptions by properly notifying data sources via messenger
|
|
888
|
-
// This ensures data sources stop their polling timers
|
|
889
|
-
//
|
|
975
|
+
// This ensures data sources stop their polling timers.
|
|
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
|
+
];
|
|
890
982
|
const subscriptionKeys = [...__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").keys()];
|
|
891
983
|
for (const subscriptionKey of subscriptionKeys) {
|
|
892
984
|
if (subscriptionKey.startsWith('ds:')) {
|
|
893
985
|
const sourceId = subscriptionKey.slice(3);
|
|
894
|
-
const source =
|
|
986
|
+
const source = allSources.find((ds) => ds.getName() === sourceId);
|
|
895
987
|
if (source) {
|
|
896
988
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
|
|
897
989
|
}
|
|
@@ -906,12 +998,20 @@ async function _AssetsController_updateState(response) {
|
|
|
906
998
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
|
|
907
999
|
...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
|
|
908
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
|
+
]);
|
|
909
1005
|
// Subscribe to price updates for all assets held by selected accounts
|
|
910
1006
|
this.subscribeAssetsPrice(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
|
|
911
1007
|
}, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
|
|
912
1008
|
const chainToAccounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildChainToAccountsMap).call(this, accounts, new Set(chainIds));
|
|
913
1009
|
const remainingChains = new Set(chainToAccounts.keys());
|
|
914
|
-
|
|
1010
|
+
// When basic functionality is on (getter true), use all balance data sources; when off (getter false), RPC only.
|
|
1011
|
+
const balanceDataSources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
1012
|
+
? __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get)
|
|
1013
|
+
: [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")];
|
|
1014
|
+
for (const source of balanceDataSources) {
|
|
915
1015
|
const availableChains = new Set(source.getActiveChainsSync());
|
|
916
1016
|
const assignedChains = [];
|
|
917
1017
|
for (const chainId of remainingChains) {
|
|
@@ -932,6 +1032,18 @@ async function _AssetsController_updateState(response) {
|
|
|
932
1032
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accountsForSource, assignedChains);
|
|
933
1033
|
}
|
|
934
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);
|
|
935
1047
|
}, _AssetsController_buildChainToAccountsMap = function _AssetsController_buildChainToAccountsMap(accounts, chainsToSubscribe) {
|
|
936
1048
|
const chainToAccounts = new Map();
|
|
937
1049
|
for (const account of accounts) {
|
|
@@ -1008,16 +1120,24 @@ async function _AssetsController_updateState(response) {
|
|
|
1008
1120
|
const scopes = account.scopes ?? [];
|
|
1009
1121
|
const result = [];
|
|
1010
1122
|
for (const scope of scopes) {
|
|
1011
|
-
const
|
|
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);
|
|
1012
1129
|
// Wildcard scope (e.g., "eip155:0" means all enabled chains in that namespace)
|
|
1013
1130
|
if (reference === '0') {
|
|
1014
1131
|
for (const chain of __classPrivateFieldGet(this, _AssetsController_enabledChains, "f")) {
|
|
1015
|
-
if (
|
|
1016
|
-
|
|
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
|
+
}
|
|
1017
1137
|
}
|
|
1018
1138
|
}
|
|
1019
1139
|
}
|
|
1020
|
-
else if (namespace === 'eip155' &&
|
|
1140
|
+
else if (namespace === 'eip155' && (0, utils_1.isStrictHexString)(reference)) {
|
|
1021
1141
|
// Normalize hex to decimal for EIP155
|
|
1022
1142
|
result.push(`eip155:${parseInt(reference, 16)}`);
|
|
1023
1143
|
}
|