@metamask/assets-controller 1.0.0 → 2.0.1
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 +36 -1
- package/dist/AssetsController.cjs +175 -64
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +68 -9
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +68 -9
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +176 -65
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +70 -15
- 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 +66 -12
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/BackendWebsocketDataSource.cjs +7 -5
- 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 +7 -5
- 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 +123 -44
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts +16 -62
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts +16 -62
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +124 -45
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/SnapDataSource.cjs +22 -10
- 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 +22 -10
- package/dist/data-sources/SnapDataSource.mjs.map +1 -1
- package/dist/data-sources/StakedBalanceDataSource.cjs +597 -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 +593 -0
- package/dist/data-sources/StakedBalanceDataSource.mjs.map +1 -0
- package/dist/data-sources/TokenDataSource.cjs +12 -5
- 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 +12 -5
- 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 +80 -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 +80 -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/types/state.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.d.cts +3 -3
- package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.d.mts +3 -3
- package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/types/state.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 +47 -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 +25 -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 +25 -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 +39 -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 +68 -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 +62 -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 +4 -1
- 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 +4 -1
- package/dist/middlewares/DetectionMiddleware.mjs.map +1 -1
- package/dist/selectors/balance.cjs +2 -2
- package/dist/selectors/balance.cjs.map +1 -1
- package/dist/selectors/balance.d.cts.map +1 -1
- package/dist/selectors/balance.d.mts.map +1 -1
- package/dist/selectors/balance.mjs +2 -2
- package/dist/selectors/balance.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +3 -3
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +3 -3
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +17 -12
|
@@ -9,9 +9,9 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
11
|
};
|
|
12
|
-
var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_defaultUpdateInterval, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_selectedAccounts_get, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource,
|
|
12
|
+
var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trackMetaMetricsEvent, _AssetsController_firstInitFetchReported, _AssetsController_controllerMutex, _AssetsController_activeSubscriptions, _AssetsController_enabledChains, _AssetsController_selectedAccounts_get, _AssetsController_backendWebsocketDataSource, _AssetsController_accountsApiDataSource, _AssetsController_snapDataSource, _AssetsController_rpcDataSource, _AssetsController_stakedBalanceDataSource, _AssetsController_allBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_tokenDataSource, _AssetsController_unsubscribeBasicFunctionality, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_registerActionHandlers, _AssetsController_executeMiddlewares, _AssetsController_updateState, _AssetsController_getAssetsFromState, _AssetsController_tokenStandardToAssetType, _AssetsController_start, _AssetsController_stop, _AssetsController_subscribeAssets, _AssetsController_subscribeAssetsBalance, _AssetsController_subscribeStakedBalance, _AssetsController_buildChainToAccountsMap, _AssetsController_subscribeDataSource, _AssetsController_unsubscribeDataSource, _AssetsController_buildDataRequest, _AssetsController_getEnabledChainsForAccount, _AssetsController_handleAccountGroupChanged, _AssetsController_handleEnabledNetworksChanged;
|
|
13
13
|
import { BaseController } from "@metamask/base-controller";
|
|
14
|
-
import { parseCaipAssetType } from "@metamask/utils";
|
|
14
|
+
import { isCaipChainId, isStrictHexString, parseCaipAssetType, parseCaipChainId } from "@metamask/utils";
|
|
15
15
|
import { Mutex } from "async-mutex";
|
|
16
16
|
import BigNumberJS from "bignumber.js";
|
|
17
17
|
import $lodash from "lodash";
|
|
@@ -21,6 +21,7 @@ import { BackendWebsocketDataSource } from "./data-sources/BackendWebsocketDataS
|
|
|
21
21
|
import { PriceDataSource } from "./data-sources/PriceDataSource.mjs";
|
|
22
22
|
import { RpcDataSource } from "./data-sources/RpcDataSource.mjs";
|
|
23
23
|
import { SnapDataSource } from "./data-sources/SnapDataSource.mjs";
|
|
24
|
+
import { StakedBalanceDataSource } from "./data-sources/StakedBalanceDataSource.mjs";
|
|
24
25
|
import { TokenDataSource } from "./data-sources/TokenDataSource.mjs";
|
|
25
26
|
import { projectLogger, createModuleLogger } from "./logger.mjs";
|
|
26
27
|
import { DetectionMiddleware } from "./middlewares/DetectionMiddleware.mjs";
|
|
@@ -51,7 +52,7 @@ const log = createModuleLogger(projectLogger, CONTROLLER_NAME);
|
|
|
51
52
|
*/
|
|
52
53
|
export function getDefaultAssetsControllerState() {
|
|
53
54
|
return {
|
|
54
|
-
|
|
55
|
+
assetsInfo: {},
|
|
55
56
|
assetsBalance: {},
|
|
56
57
|
assetsPrice: {},
|
|
57
58
|
customAssets: {},
|
|
@@ -62,7 +63,7 @@ export function getDefaultAssetsControllerState() {
|
|
|
62
63
|
// STATE METADATA
|
|
63
64
|
// ============================================================================
|
|
64
65
|
const stateMetadata = {
|
|
65
|
-
|
|
66
|
+
assetsInfo: {
|
|
66
67
|
persist: true,
|
|
67
68
|
includeInStateLogs: false,
|
|
68
69
|
includeInDebugSnapshot: false,
|
|
@@ -110,11 +111,11 @@ function extractChainId(assetId) {
|
|
|
110
111
|
*/
|
|
111
112
|
function normalizeResponse(response) {
|
|
112
113
|
const normalized = {};
|
|
113
|
-
if (response.
|
|
114
|
-
normalized.
|
|
115
|
-
for (const [assetId, metadata] of Object.entries(response.
|
|
114
|
+
if (response.assetsInfo) {
|
|
115
|
+
normalized.assetsInfo = {};
|
|
116
|
+
for (const [assetId, metadata] of Object.entries(response.assetsInfo)) {
|
|
116
117
|
const normalizedId = normalizeAssetId(assetId);
|
|
117
|
-
normalized.
|
|
118
|
+
normalized.assetsInfo[normalizedId] = metadata;
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
121
|
if (response.assetsPrice) {
|
|
@@ -176,7 +177,7 @@ function normalizeResponse(response) {
|
|
|
176
177
|
* - The controller does NOT manage polling - it simply receives pushed updates
|
|
177
178
|
*/
|
|
178
179
|
export class AssetsController extends BaseController {
|
|
179
|
-
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, queryApiClient, rpcDataSourceConfig, }) {
|
|
180
|
+
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trackMetaMetricsEvent, accountsApiDataSourceConfig, priceDataSourceConfig, stakedBalanceDataSourceConfig, }) {
|
|
180
181
|
super({
|
|
181
182
|
name: CONTROLLER_NAME,
|
|
182
183
|
messenger,
|
|
@@ -189,8 +190,14 @@ export class AssetsController extends BaseController {
|
|
|
189
190
|
_AssetsController_instances.add(this);
|
|
190
191
|
/** Whether the controller is enabled */
|
|
191
192
|
_AssetsController_isEnabled.set(this, void 0);
|
|
193
|
+
/** Getter for basic functionality (only balance fetch/subscribe use RPC; token/price API not used). No attribute stored. */
|
|
194
|
+
_AssetsController_isBasicFunctionality.set(this, void 0);
|
|
192
195
|
/** Default update interval hint passed to data sources */
|
|
193
196
|
_AssetsController_defaultUpdateInterval.set(this, void 0);
|
|
197
|
+
/** Optional callback for first init/fetch MetaMetrics (duration). */
|
|
198
|
+
_AssetsController_trackMetaMetricsEvent.set(this, void 0);
|
|
199
|
+
/** Whether we have already reported first init fetch for this session (reset on #stop). */
|
|
200
|
+
_AssetsController_firstInitFetchReported.set(this, false);
|
|
194
201
|
_AssetsController_controllerMutex.set(this, new Mutex());
|
|
195
202
|
/**
|
|
196
203
|
* Active balance subscriptions keyed by account ID.
|
|
@@ -205,13 +212,19 @@ export class AssetsController extends BaseController {
|
|
|
205
212
|
_AssetsController_accountsApiDataSource.set(this, void 0);
|
|
206
213
|
_AssetsController_snapDataSource.set(this, void 0);
|
|
207
214
|
_AssetsController_rpcDataSource.set(this, void 0);
|
|
215
|
+
_AssetsController_stakedBalanceDataSource.set(this, void 0);
|
|
208
216
|
_AssetsController_priceDataSource.set(this, void 0);
|
|
209
217
|
_AssetsController_detectionMiddleware.set(this, void 0);
|
|
210
218
|
_AssetsController_tokenDataSource.set(this, void 0);
|
|
219
|
+
_AssetsController_unsubscribeBasicFunctionality.set(this, null);
|
|
211
220
|
__classPrivateFieldSet(this, _AssetsController_isEnabled, isEnabled(), "f");
|
|
221
|
+
__classPrivateFieldSet(this, _AssetsController_isBasicFunctionality, isBasicFunctionality ?? (() => true), "f");
|
|
212
222
|
__classPrivateFieldSet(this, _AssetsController_defaultUpdateInterval, defaultUpdateInterval, "f");
|
|
223
|
+
__classPrivateFieldSet(this, _AssetsController_trackMetaMetricsEvent, trackMetaMetricsEvent, "f");
|
|
213
224
|
const rpcConfig = rpcDataSourceConfig ?? {};
|
|
214
|
-
const onActiveChainsUpdated = (dataSourceName, chains, previousChains) =>
|
|
225
|
+
const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => {
|
|
226
|
+
this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
|
|
227
|
+
};
|
|
215
228
|
__classPrivateFieldSet(this, _AssetsController_backendWebsocketDataSource, new BackendWebsocketDataSource({
|
|
216
229
|
messenger: this.messenger,
|
|
217
230
|
queryApiClient,
|
|
@@ -220,6 +233,7 @@ export class AssetsController extends BaseController {
|
|
|
220
233
|
__classPrivateFieldSet(this, _AssetsController_accountsApiDataSource, new AccountsApiDataSource({
|
|
221
234
|
queryApiClient,
|
|
222
235
|
onActiveChainsUpdated,
|
|
236
|
+
...accountsApiDataSourceConfig,
|
|
223
237
|
}), "f");
|
|
224
238
|
__classPrivateFieldSet(this, _AssetsController_snapDataSource, new SnapDataSource({
|
|
225
239
|
messenger: this.messenger,
|
|
@@ -230,11 +244,17 @@ export class AssetsController extends BaseController {
|
|
|
230
244
|
onActiveChainsUpdated,
|
|
231
245
|
...rpcConfig,
|
|
232
246
|
}), "f");
|
|
247
|
+
__classPrivateFieldSet(this, _AssetsController_stakedBalanceDataSource, new StakedBalanceDataSource({
|
|
248
|
+
messenger: this.messenger,
|
|
249
|
+
onActiveChainsUpdated,
|
|
250
|
+
...stakedBalanceDataSourceConfig,
|
|
251
|
+
}), "f");
|
|
233
252
|
__classPrivateFieldSet(this, _AssetsController_tokenDataSource, new TokenDataSource({
|
|
234
253
|
queryApiClient,
|
|
235
254
|
}), "f");
|
|
236
255
|
__classPrivateFieldSet(this, _AssetsController_priceDataSource, new PriceDataSource({
|
|
237
256
|
queryApiClient,
|
|
257
|
+
...priceDataSourceConfig,
|
|
238
258
|
}), "f");
|
|
239
259
|
__classPrivateFieldSet(this, _AssetsController_detectionMiddleware, new DetectionMiddleware(), "f");
|
|
240
260
|
if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
|
|
@@ -247,6 +267,15 @@ export class AssetsController extends BaseController {
|
|
|
247
267
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
|
|
248
268
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
|
|
249
269
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
|
|
270
|
+
// Subscriptions start only on KeyringController:unlock -> #start(), not here.
|
|
271
|
+
// Subscribe to basic-functionality changes after construction so a synchronous
|
|
272
|
+
// onChange during subscribe cannot run before data sources are initialized.
|
|
273
|
+
if (subscribeToBasicFunctionalityChange) {
|
|
274
|
+
const unsubscribe = subscribeToBasicFunctionalityChange((isBasic) => this.handleBasicFunctionalityChange(isBasic));
|
|
275
|
+
if (typeof unsubscribe === 'function') {
|
|
276
|
+
__classPrivateFieldSet(this, _AssetsController_unsubscribeBasicFunctionality, unsubscribe, "f");
|
|
277
|
+
}
|
|
278
|
+
}
|
|
250
279
|
}
|
|
251
280
|
// ============================================================================
|
|
252
281
|
// DATA SOURCE CHAIN MANAGEMENT
|
|
@@ -265,6 +294,9 @@ export class AssetsController extends BaseController {
|
|
|
265
294
|
* @param previousChains - Previous chains; used to compute added/removed.
|
|
266
295
|
*/
|
|
267
296
|
handleActiveChainsUpdate(dataSourceId, activeChains, previousChains) {
|
|
297
|
+
if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
268
300
|
log('Data source active chains changed', {
|
|
269
301
|
dataSourceId,
|
|
270
302
|
chainCount: activeChains.length,
|
|
@@ -306,21 +338,39 @@ export class AssetsController extends BaseController {
|
|
|
306
338
|
customAssets.push(...accountCustomAssets);
|
|
307
339
|
}
|
|
308
340
|
if (options?.forceUpdate) {
|
|
341
|
+
const startTime = Date.now();
|
|
309
342
|
const request = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildDataRequest).call(this, accounts, chainIds, {
|
|
310
343
|
assetTypes,
|
|
311
344
|
dataTypes,
|
|
312
345
|
customAssets: customAssets.length > 0 ? customAssets : undefined,
|
|
313
346
|
forceUpdate: true,
|
|
314
347
|
});
|
|
315
|
-
const
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
348
|
+
const sources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
349
|
+
? [
|
|
350
|
+
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
|
|
351
|
+
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f"),
|
|
352
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
353
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
354
|
+
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
355
|
+
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"),
|
|
356
|
+
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f"),
|
|
357
|
+
]
|
|
358
|
+
: [
|
|
359
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"),
|
|
360
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
361
|
+
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"),
|
|
362
|
+
];
|
|
363
|
+
const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
|
|
323
364
|
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
|
|
365
|
+
if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
|
|
366
|
+
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, true, "f");
|
|
367
|
+
const durationMs = Date.now() - startTime;
|
|
368
|
+
__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f").call(this, {
|
|
369
|
+
durationMs,
|
|
370
|
+
chainIds,
|
|
371
|
+
durationByDataSource,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
324
374
|
}
|
|
325
375
|
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
|
|
326
376
|
}
|
|
@@ -345,7 +395,7 @@ export class AssetsController extends BaseController {
|
|
|
345
395
|
return result;
|
|
346
396
|
}
|
|
347
397
|
getAssetMetadata(assetId) {
|
|
348
|
-
return this.state.
|
|
398
|
+
return this.state.assetsInfo[assetId];
|
|
349
399
|
}
|
|
350
400
|
async getAssetsPrice(accounts, options) {
|
|
351
401
|
const assets = await this.getAssets(accounts, {
|
|
@@ -482,18 +532,17 @@ export class AssetsController extends BaseController {
|
|
|
482
532
|
*
|
|
483
533
|
* @param accounts - Accounts to subscribe price updates for.
|
|
484
534
|
* @param chainIds - Chain IDs to filter prices for.
|
|
485
|
-
* @param options - Subscription options.
|
|
486
|
-
* @param options.updateInterval - Polling interval in ms.
|
|
487
535
|
*/
|
|
488
|
-
subscribeAssetsPrice(accounts, chainIds
|
|
489
|
-
|
|
536
|
+
subscribeAssetsPrice(accounts, chainIds) {
|
|
537
|
+
if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
490
540
|
const subscriptionKey = 'ds:PriceDataSource';
|
|
491
541
|
const existingSubscription = __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").get(subscriptionKey);
|
|
492
542
|
const isUpdate = existingSubscription !== undefined;
|
|
493
543
|
const subscribeReq = {
|
|
494
544
|
request: __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildDataRequest).call(this, accounts, chainIds, {
|
|
495
545
|
dataTypes: ['price'],
|
|
496
|
-
updateInterval,
|
|
497
546
|
}),
|
|
498
547
|
subscriptionId: subscriptionKey,
|
|
499
548
|
isUpdate,
|
|
@@ -525,6 +574,18 @@ export class AssetsController extends BaseController {
|
|
|
525
574
|
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f").unsubscribe(subscriptionKey).catch(console.error);
|
|
526
575
|
existingSubscription.unsubscribe();
|
|
527
576
|
}
|
|
577
|
+
/**
|
|
578
|
+
* Handle basic functionality toggle change. Call this from the consumer (extension or mobile)
|
|
579
|
+
* when the user changes the "Basic functionality" setting. Refreshes subscriptions so the
|
|
580
|
+
* current {@link AssetsControllerOptions.isBasicFunctionality} getter is used (true = APIs on,
|
|
581
|
+
* false = RPC only).
|
|
582
|
+
*
|
|
583
|
+
* @param _isBasic - The new value (for call-site clarity; the getter is the source of truth).
|
|
584
|
+
*/
|
|
585
|
+
handleBasicFunctionalityChange(_isBasic) {
|
|
586
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
587
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
588
|
+
}
|
|
528
589
|
/**
|
|
529
590
|
* Handle assets updated from a data source.
|
|
530
591
|
* Called via the onAssetsUpdate callback passed in SubscriptionRequest when the controller subscribes to a data source.
|
|
@@ -542,11 +603,7 @@ export class AssetsController extends BaseController {
|
|
|
542
603
|
});
|
|
543
604
|
// Run through enrichment middlewares (Event Stack: Detection → Token → Price)
|
|
544
605
|
// Include 'metadata' in dataTypes so TokenDataSource runs to enrich detected assets
|
|
545
|
-
const enrichedResponse = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [
|
|
546
|
-
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f").assetsMiddleware,
|
|
547
|
-
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f").assetsMiddleware,
|
|
548
|
-
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f").assetsMiddleware,
|
|
549
|
-
], request ?? {
|
|
606
|
+
const { response: enrichedResponse } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f"), __classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_priceDataSource, "f")], request ?? {
|
|
550
607
|
accountsWithSupportedChains: [],
|
|
551
608
|
chainIds: [],
|
|
552
609
|
dataTypes: ['balance', 'metadata', 'price'],
|
|
@@ -558,21 +615,21 @@ export class AssetsController extends BaseController {
|
|
|
558
615
|
// ============================================================================
|
|
559
616
|
destroy() {
|
|
560
617
|
log('Destroying AssetsController', {
|
|
561
|
-
dataSourceCount: __classPrivateFieldGet(this, _AssetsController_instances, "a",
|
|
618
|
+
dataSourceCount: __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get).length,
|
|
562
619
|
subscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
|
|
563
620
|
});
|
|
564
621
|
// Destroy instantiated data sources
|
|
565
622
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f")?.destroy?.();
|
|
566
623
|
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f")?.destroy?.();
|
|
567
624
|
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f")?.destroy?.();
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
typeof __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").destroy ===
|
|
571
|
-
'function') {
|
|
572
|
-
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").destroy();
|
|
573
|
-
}
|
|
625
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")?.destroy?.();
|
|
626
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f")?.destroy?.();
|
|
574
627
|
// Stop all active subscriptions
|
|
575
628
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
629
|
+
if (__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f")) {
|
|
630
|
+
__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f").call(this);
|
|
631
|
+
__classPrivateFieldSet(this, _AssetsController_unsubscribeBasicFunctionality, null, "f");
|
|
632
|
+
}
|
|
576
633
|
// Unregister action handlers
|
|
577
634
|
this.messenger.unregisterActionHandler('AssetsController:getAssets');
|
|
578
635
|
this.messenger.unregisterActionHandler('AssetsController:getAssetsBalance');
|
|
@@ -585,9 +642,9 @@ export class AssetsController extends BaseController {
|
|
|
585
642
|
this.messenger.unregisterActionHandler('AssetsController:unhideAsset');
|
|
586
643
|
}
|
|
587
644
|
}
|
|
588
|
-
_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() {
|
|
645
|
+
_AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctionality = new WeakMap(), _AssetsController_defaultUpdateInterval = new WeakMap(), _AssetsController_trackMetaMetricsEvent = new WeakMap(), _AssetsController_firstInitFetchReported = new WeakMap(), _AssetsController_controllerMutex = new WeakMap(), _AssetsController_activeSubscriptions = new WeakMap(), _AssetsController_enabledChains = new WeakMap(), _AssetsController_backendWebsocketDataSource = new WeakMap(), _AssetsController_accountsApiDataSource = new WeakMap(), _AssetsController_snapDataSource = new WeakMap(), _AssetsController_rpcDataSource = new WeakMap(), _AssetsController_stakedBalanceDataSource = new WeakMap(), _AssetsController_priceDataSource = new WeakMap(), _AssetsController_detectionMiddleware = new WeakMap(), _AssetsController_tokenDataSource = new WeakMap(), _AssetsController_unsubscribeBasicFunctionality = new WeakMap(), _AssetsController_instances = new WeakSet(), _AssetsController_selectedAccounts_get = function _AssetsController_selectedAccounts_get() {
|
|
589
646
|
return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
|
|
590
|
-
},
|
|
647
|
+
}, _AssetsController_allBalanceDataSources_get = function _AssetsController_allBalanceDataSources_get() {
|
|
591
648
|
return [
|
|
592
649
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f"),
|
|
593
650
|
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
|
|
@@ -621,7 +678,7 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_defaultUpdateInte
|
|
|
621
678
|
}
|
|
622
679
|
return chains;
|
|
623
680
|
}, _AssetsController_normalizeChainReference = function _AssetsController_normalizeChainReference(namespace, reference) {
|
|
624
|
-
if (namespace === 'eip155' && reference
|
|
681
|
+
if (namespace === 'eip155' && isStrictHexString(reference)) {
|
|
625
682
|
// Convert hex to decimal for EIP155 chains
|
|
626
683
|
return parseInt(reference, 16).toString();
|
|
627
684
|
}
|
|
@@ -646,14 +703,27 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_defaultUpdateInte
|
|
|
646
703
|
// ============================================================================
|
|
647
704
|
/**
|
|
648
705
|
* Execute middlewares with request/response context.
|
|
706
|
+
* Returns response and exclusive duration per source (sum ≈ wall time).
|
|
649
707
|
*
|
|
650
|
-
* @param
|
|
708
|
+
* @param sources - Data sources or middlewares with getName() and assetsMiddleware (executed in order).
|
|
651
709
|
* @param request - The data request.
|
|
652
710
|
* @param initialResponse - Optional initial response (for enriching existing data).
|
|
653
|
-
* @returns
|
|
711
|
+
* @returns Response and durationByDataSource (exclusive ms per source name).
|
|
654
712
|
*/
|
|
655
|
-
async function _AssetsController_executeMiddlewares(
|
|
656
|
-
const
|
|
713
|
+
async function _AssetsController_executeMiddlewares(sources, request, initialResponse = {}) {
|
|
714
|
+
const names = sources.map((source) => source.getName());
|
|
715
|
+
const middlewares = sources.map((source) => source.assetsMiddleware);
|
|
716
|
+
const inclusive = [];
|
|
717
|
+
const wrapped = middlewares.map((middleware, i) => (async (ctx, next) => {
|
|
718
|
+
const start = Date.now();
|
|
719
|
+
try {
|
|
720
|
+
return await middleware(ctx, next);
|
|
721
|
+
}
|
|
722
|
+
finally {
|
|
723
|
+
inclusive[i] = Date.now() - start;
|
|
724
|
+
}
|
|
725
|
+
}));
|
|
726
|
+
const chain = wrapped.reduceRight((next, middleware) => async (ctx) => {
|
|
657
727
|
try {
|
|
658
728
|
return await middleware(ctx, next);
|
|
659
729
|
}
|
|
@@ -667,7 +737,16 @@ async function _AssetsController_executeMiddlewares(middlewares, request, initia
|
|
|
667
737
|
response: initialResponse,
|
|
668
738
|
getAssetsState: () => this.state,
|
|
669
739
|
});
|
|
670
|
-
|
|
740
|
+
const durationByDataSource = {};
|
|
741
|
+
for (let i = 0; i < inclusive.length; i++) {
|
|
742
|
+
const nextInc = i + 1 < inclusive.length ? (inclusive[i + 1] ?? 0) : 0;
|
|
743
|
+
const exclusive = Math.max(0, (inclusive[i] ?? 0) - nextInc);
|
|
744
|
+
const name = names[i];
|
|
745
|
+
if (name !== undefined) {
|
|
746
|
+
durationByDataSource[name] = exclusive;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
return { response: result.response, durationByDataSource };
|
|
671
750
|
}, _AssetsController_updateState =
|
|
672
751
|
// ============================================================================
|
|
673
752
|
// STATE MANAGEMENT
|
|
@@ -686,12 +765,12 @@ async function _AssetsController_updateState(response) {
|
|
|
686
765
|
const changedMetadata = [];
|
|
687
766
|
this.update((state) => {
|
|
688
767
|
// Use type assertions to avoid deep type instantiation issues with Immer Draft types
|
|
689
|
-
const metadata = state.
|
|
768
|
+
const metadata = state.assetsInfo;
|
|
690
769
|
const balances = state.assetsBalance;
|
|
691
770
|
const prices = state.assetsPrice;
|
|
692
|
-
if (normalizedResponse.
|
|
693
|
-
for (const [key, value] of Object.entries(normalizedResponse.
|
|
694
|
-
if (!isEqual(previousState.
|
|
771
|
+
if (normalizedResponse.assetsInfo) {
|
|
772
|
+
for (const [key, value] of Object.entries(normalizedResponse.assetsInfo)) {
|
|
773
|
+
if (!isEqual(previousState.assetsInfo[key], value)) {
|
|
695
774
|
changedMetadata.push(key);
|
|
696
775
|
}
|
|
697
776
|
metadata[key] = value;
|
|
@@ -796,7 +875,7 @@ async function _AssetsController_updateState(response) {
|
|
|
796
875
|
const accountBalances = this.state.assetsBalance[account.id] ?? {};
|
|
797
876
|
for (const [assetId, balance] of Object.entries(accountBalances)) {
|
|
798
877
|
const typedAssetId = assetId;
|
|
799
|
-
const metadataRaw = this.state.
|
|
878
|
+
const metadataRaw = this.state.assetsInfo[typedAssetId];
|
|
800
879
|
// Skip assets without metadata
|
|
801
880
|
if (!metadataRaw) {
|
|
802
881
|
continue;
|
|
@@ -862,29 +941,33 @@ async function _AssetsController_updateState(response) {
|
|
|
862
941
|
enabledChainCount: __classPrivateFieldGet(this, _AssetsController_enabledChains, "f").size,
|
|
863
942
|
});
|
|
864
943
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
});
|
|
872
|
-
}
|
|
944
|
+
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), {
|
|
945
|
+
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
946
|
+
forceUpdate: true,
|
|
947
|
+
}).catch((error) => {
|
|
948
|
+
log('Failed to fetch assets', error);
|
|
949
|
+
});
|
|
873
950
|
}, _AssetsController_stop = function _AssetsController_stop() {
|
|
874
951
|
log('Stopping asset tracking', {
|
|
875
952
|
activeSubscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
|
|
876
953
|
hasPriceSubscription: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").has('ds:PriceDataSource'),
|
|
877
954
|
});
|
|
955
|
+
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, false, "f");
|
|
878
956
|
// Stop price subscription first (uses direct messenger call)
|
|
879
957
|
this.unsubscribeAssetsPrice();
|
|
880
958
|
// Stop balance subscriptions by properly notifying data sources via messenger
|
|
881
|
-
// This ensures data sources stop their polling timers
|
|
882
|
-
//
|
|
959
|
+
// This ensures data sources stop their polling timers.
|
|
960
|
+
// Use #allBalanceDataSources + staked balance source so we unsubscribe from
|
|
961
|
+
// every source that may have been subscribed.
|
|
962
|
+
const allSources = [
|
|
963
|
+
...__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get),
|
|
964
|
+
__classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f"),
|
|
965
|
+
];
|
|
883
966
|
const subscriptionKeys = [...__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").keys()];
|
|
884
967
|
for (const subscriptionKey of subscriptionKeys) {
|
|
885
968
|
if (subscriptionKey.startsWith('ds:')) {
|
|
886
969
|
const sourceId = subscriptionKey.slice(3);
|
|
887
|
-
const source =
|
|
970
|
+
const source = allSources.find((ds) => ds.getName() === sourceId);
|
|
888
971
|
if (source) {
|
|
889
972
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
|
|
890
973
|
}
|
|
@@ -899,12 +982,20 @@ async function _AssetsController_updateState(response) {
|
|
|
899
982
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssetsBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
|
|
900
983
|
...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
|
|
901
984
|
]);
|
|
985
|
+
// Subscribe to staked balance updates (separate from regular balance chain-claiming)
|
|
986
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeStakedBalance).call(this, __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [
|
|
987
|
+
...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f"),
|
|
988
|
+
]);
|
|
902
989
|
// Subscribe to price updates for all assets held by selected accounts
|
|
903
990
|
this.subscribeAssetsPrice(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")]);
|
|
904
991
|
}, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
|
|
905
992
|
const chainToAccounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildChainToAccountsMap).call(this, accounts, new Set(chainIds));
|
|
906
993
|
const remainingChains = new Set(chainToAccounts.keys());
|
|
907
|
-
|
|
994
|
+
// When basic functionality is on (getter true), use all balance data sources; when off (getter false), RPC only.
|
|
995
|
+
const balanceDataSources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
996
|
+
? __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get)
|
|
997
|
+
: [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")];
|
|
998
|
+
for (const source of balanceDataSources) {
|
|
908
999
|
const availableChains = new Set(source.getActiveChainsSync());
|
|
909
1000
|
const assignedChains = [];
|
|
910
1001
|
for (const chainId of remainingChains) {
|
|
@@ -925,6 +1016,18 @@ async function _AssetsController_updateState(response) {
|
|
|
925
1016
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accountsForSource, assignedChains);
|
|
926
1017
|
}
|
|
927
1018
|
}
|
|
1019
|
+
}, _AssetsController_subscribeStakedBalance = function _AssetsController_subscribeStakedBalance(accounts, chainIds) {
|
|
1020
|
+
const source = __classPrivateFieldGet(this, _AssetsController_stakedBalanceDataSource, "f");
|
|
1021
|
+
if (!source) {
|
|
1022
|
+
return;
|
|
1023
|
+
}
|
|
1024
|
+
const availableChains = new Set(source.getActiveChainsSync());
|
|
1025
|
+
const assignedChains = chainIds.filter((chainId) => availableChains.has(chainId));
|
|
1026
|
+
if (assignedChains.length === 0) {
|
|
1027
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
|
|
1028
|
+
return;
|
|
1029
|
+
}
|
|
1030
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeDataSource).call(this, source, accounts, assignedChains);
|
|
928
1031
|
}, _AssetsController_buildChainToAccountsMap = function _AssetsController_buildChainToAccountsMap(accounts, chainsToSubscribe) {
|
|
929
1032
|
const chainToAccounts = new Map();
|
|
930
1033
|
for (const account of accounts) {
|
|
@@ -1001,16 +1104,24 @@ async function _AssetsController_updateState(response) {
|
|
|
1001
1104
|
const scopes = account.scopes ?? [];
|
|
1002
1105
|
const result = [];
|
|
1003
1106
|
for (const scope of scopes) {
|
|
1004
|
-
const
|
|
1107
|
+
const scopeStr = scope;
|
|
1108
|
+
if (!isCaipChainId(scopeStr)) {
|
|
1109
|
+
result.push(scope);
|
|
1110
|
+
continue;
|
|
1111
|
+
}
|
|
1112
|
+
const { namespace, reference } = parseCaipChainId(scopeStr);
|
|
1005
1113
|
// Wildcard scope (e.g., "eip155:0" means all enabled chains in that namespace)
|
|
1006
1114
|
if (reference === '0') {
|
|
1007
1115
|
for (const chain of __classPrivateFieldGet(this, _AssetsController_enabledChains, "f")) {
|
|
1008
|
-
if (chain
|
|
1009
|
-
|
|
1116
|
+
if (isCaipChainId(chain)) {
|
|
1117
|
+
const chainParsed = parseCaipChainId(chain);
|
|
1118
|
+
if (chainParsed.namespace === namespace) {
|
|
1119
|
+
result.push(chain);
|
|
1120
|
+
}
|
|
1010
1121
|
}
|
|
1011
1122
|
}
|
|
1012
1123
|
}
|
|
1013
|
-
else if (namespace === 'eip155' && reference
|
|
1124
|
+
else if (namespace === 'eip155' && isStrictHexString(reference)) {
|
|
1014
1125
|
// Normalize hex to decimal for EIP155
|
|
1015
1126
|
result.push(`eip155:${parseInt(reference, 16)}`);
|
|
1016
1127
|
}
|