@metamask-previews/assets-controller 1.0.0-preview-e7b1aa6 → 1.0.0-preview-27e39dd44
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 +0 -8
- package/dist/AssetsController.cjs +41 -109
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +2 -56
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +2 -56
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +41 -109
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.cjs +4 -61
- package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.cts +3 -22
- package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.d.mts +3 -22
- package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -1
- package/dist/data-sources/AccountsApiDataSource.mjs +3 -59
- package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -1
- package/dist/data-sources/PriceDataSource.cjs +1 -4
- package/dist/data-sources/PriceDataSource.cjs.map +1 -1
- package/dist/data-sources/PriceDataSource.d.cts +4 -8
- package/dist/data-sources/PriceDataSource.d.cts.map +1 -1
- package/dist/data-sources/PriceDataSource.d.mts +4 -8
- package/dist/data-sources/PriceDataSource.d.mts.map +1 -1
- package/dist/data-sources/PriceDataSource.mjs +1 -4
- package/dist/data-sources/PriceDataSource.mjs.map +1 -1
- package/dist/data-sources/RpcDataSource.cjs +9 -19
- package/dist/data-sources/RpcDataSource.cjs.map +1 -1
- package/dist/data-sources/RpcDataSource.d.cts +3 -8
- package/dist/data-sources/RpcDataSource.d.cts.map +1 -1
- package/dist/data-sources/RpcDataSource.d.mts +3 -8
- package/dist/data-sources/RpcDataSource.d.mts.map +1 -1
- package/dist/data-sources/RpcDataSource.mjs +9 -19
- package/dist/data-sources/RpcDataSource.mjs.map +1 -1
- package/dist/data-sources/TokenDataSource.cjs +0 -3
- package/dist/data-sources/TokenDataSource.cjs.map +1 -1
- package/dist/data-sources/TokenDataSource.d.cts +0 -1
- package/dist/data-sources/TokenDataSource.d.cts.map +1 -1
- package/dist/data-sources/TokenDataSource.d.mts +0 -1
- package/dist/data-sources/TokenDataSource.d.mts.map +1 -1
- package/dist/data-sources/TokenDataSource.mjs +0 -3
- package/dist/data-sources/TokenDataSource.mjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs +0 -16
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts +1 -5
- 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 +1 -5
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +1 -1
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs +0 -16
- package/dist/data-sources/evm-rpc-services/services/TokenDetector.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 +0 -4
- 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 +0 -4
- 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/index.cjs.map +1 -1
- package/dist/data-sources/index.d.cts +2 -2
- package/dist/data-sources/index.d.cts.map +1 -1
- package/dist/data-sources/index.d.mts +2 -2
- package/dist/data-sources/index.d.mts.map +1 -1
- 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 +0 -3
- package/dist/middlewares/DetectionMiddleware.cjs.map +1 -1
- package/dist/middlewares/DetectionMiddleware.d.cts +0 -1
- package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -1
- package/dist/middlewares/DetectionMiddleware.d.mts +0 -1
- package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -1
- package/dist/middlewares/DetectionMiddleware.mjs +0 -3
- package/dist/middlewares/DetectionMiddleware.mjs.map +1 -1
- package/package.json +1 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,16 +7,8 @@ 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 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
|
-
- 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
|
-
- 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))
|
|
15
|
-
- 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))
|
|
16
|
-
|
|
17
10
|
### Changed
|
|
18
11
|
|
|
19
|
-
- **BREAKING:** `AccountsApiDataSourceConfig.tokenDetectionEnabled` is now a getter `() => boolean` (was `boolean`) so the Accounts API data source reacts when the user toggles token detection at runtime, consistent with `RpcDataSourceConfig.tokenDetectionEnabled`. Pass a function, e.g. `tokenDetectionEnabled: () => preferenceController.state.useTokenDetection`.
|
|
20
12
|
- **BREAKING:** Rename state and `DataResponse` property from `assetsMetadata` to `assetsInfo`. Update consumers that read `state.assetsMetadata` or set `response.assetsMetadata` to use `assetsInfo` instead ([#7902](https://github.com/MetaMask/core/pull/7902))
|
|
21
13
|
- Bump `@metamask/keyring-api` from `^21.0.0` to `^21.5.0` ([#7857](https://github.com/MetaMask/core/pull/7857))
|
|
22
14
|
- 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,
|
|
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, _AssetsController_subscriptionBalanceDataSources_get, _AssetsController_priceDataSource, _AssetsController_detectionMiddleware, _AssetsController_tokenDataSource, _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;
|
|
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");
|
|
@@ -182,7 +182,7 @@ function normalizeResponse(response) {
|
|
|
182
182
|
* - The controller does NOT manage polling - it simply receives pushed updates
|
|
183
183
|
*/
|
|
184
184
|
class AssetsController extends base_controller_1.BaseController {
|
|
185
|
-
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true,
|
|
185
|
+
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, queryApiClient, rpcDataSourceConfig, }) {
|
|
186
186
|
super({
|
|
187
187
|
name: CONTROLLER_NAME,
|
|
188
188
|
messenger,
|
|
@@ -195,14 +195,8 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
195
195
|
_AssetsController_instances.add(this);
|
|
196
196
|
/** Whether the controller is enabled */
|
|
197
197
|
_AssetsController_isEnabled.set(this, void 0);
|
|
198
|
-
/** Getter for basic functionality (only balance fetch/subscribe use RPC; token/price API not used). No attribute stored. */
|
|
199
|
-
_AssetsController_isBasicFunctionality.set(this, void 0);
|
|
200
198
|
/** Default update interval hint passed to data sources */
|
|
201
199
|
_AssetsController_defaultUpdateInterval.set(this, void 0);
|
|
202
|
-
/** Optional callback for first init/fetch MetaMetrics (duration). */
|
|
203
|
-
_AssetsController_trackMetaMetricsEvent.set(this, void 0);
|
|
204
|
-
/** Whether we have already reported first init fetch for this session (reset on #stop). */
|
|
205
|
-
_AssetsController_firstInitFetchReported.set(this, false);
|
|
206
200
|
_AssetsController_controllerMutex.set(this, new async_mutex_1.Mutex());
|
|
207
201
|
/**
|
|
208
202
|
* Active balance subscriptions keyed by account ID.
|
|
@@ -220,11 +214,8 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
220
214
|
_AssetsController_priceDataSource.set(this, void 0);
|
|
221
215
|
_AssetsController_detectionMiddleware.set(this, void 0);
|
|
222
216
|
_AssetsController_tokenDataSource.set(this, void 0);
|
|
223
|
-
_AssetsController_unsubscribeBasicFunctionality.set(this, null);
|
|
224
217
|
__classPrivateFieldSet(this, _AssetsController_isEnabled, isEnabled(), "f");
|
|
225
|
-
__classPrivateFieldSet(this, _AssetsController_isBasicFunctionality, isBasicFunctionality ?? (() => true), "f");
|
|
226
218
|
__classPrivateFieldSet(this, _AssetsController_defaultUpdateInterval, defaultUpdateInterval, "f");
|
|
227
|
-
__classPrivateFieldSet(this, _AssetsController_trackMetaMetricsEvent, trackMetaMetricsEvent, "f");
|
|
228
219
|
const rpcConfig = rpcDataSourceConfig ?? {};
|
|
229
220
|
const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
|
|
230
221
|
__classPrivateFieldSet(this, _AssetsController_backendWebsocketDataSource, new BackendWebsocketDataSource_1.BackendWebsocketDataSource({
|
|
@@ -235,7 +226,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
235
226
|
__classPrivateFieldSet(this, _AssetsController_accountsApiDataSource, new AccountsApiDataSource_1.AccountsApiDataSource({
|
|
236
227
|
queryApiClient,
|
|
237
228
|
onActiveChainsUpdated,
|
|
238
|
-
...accountsApiDataSourceConfig,
|
|
239
229
|
}), "f");
|
|
240
230
|
__classPrivateFieldSet(this, _AssetsController_snapDataSource, new SnapDataSource_1.SnapDataSource({
|
|
241
231
|
messenger: this.messenger,
|
|
@@ -251,7 +241,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
251
241
|
}), "f");
|
|
252
242
|
__classPrivateFieldSet(this, _AssetsController_priceDataSource, new PriceDataSource_1.PriceDataSource({
|
|
253
243
|
queryApiClient,
|
|
254
|
-
...priceDataSourceConfig,
|
|
255
244
|
}), "f");
|
|
256
245
|
__classPrivateFieldSet(this, _AssetsController_detectionMiddleware, new DetectionMiddleware_1.DetectionMiddleware(), "f");
|
|
257
246
|
if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
|
|
@@ -264,14 +253,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
264
253
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
|
|
265
254
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
|
|
266
255
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
|
|
267
|
-
// Subscribe to basic-functionality changes after construction so a synchronous
|
|
268
|
-
// onChange during subscribe cannot run before data sources are initialized.
|
|
269
|
-
if (subscribeToBasicFunctionalityChange) {
|
|
270
|
-
const unsubscribe = subscribeToBasicFunctionalityChange((isBasic) => this.handleBasicFunctionalityChange(isBasic));
|
|
271
|
-
if (typeof unsubscribe === 'function') {
|
|
272
|
-
__classPrivateFieldSet(this, _AssetsController_unsubscribeBasicFunctionality, unsubscribe, "f");
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
256
|
}
|
|
276
257
|
// ============================================================================
|
|
277
258
|
// DATA SOURCE CHAIN MANAGEMENT
|
|
@@ -331,34 +312,21 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
331
312
|
customAssets.push(...accountCustomAssets);
|
|
332
313
|
}
|
|
333
314
|
if (options?.forceUpdate) {
|
|
334
|
-
const startTime = Date.now();
|
|
335
315
|
const request = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildDataRequest).call(this, accounts, chainIds, {
|
|
336
316
|
assetTypes,
|
|
337
317
|
dataTypes,
|
|
338
318
|
customAssets: customAssets.length > 0 ? customAssets : undefined,
|
|
339
319
|
forceUpdate: true,
|
|
340
320
|
});
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
]
|
|
350
|
-
: [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f")];
|
|
351
|
-
const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
|
|
321
|
+
const response = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [
|
|
322
|
+
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f").assetsMiddleware,
|
|
323
|
+
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f").assetsMiddleware,
|
|
324
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").assetsMiddleware,
|
|
325
|
+
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f").assetsMiddleware,
|
|
326
|
+
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f").assetsMiddleware,
|
|
327
|
+
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f").assetsMiddleware,
|
|
328
|
+
], request);
|
|
352
329
|
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
|
|
353
|
-
if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
|
|
354
|
-
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, true, "f");
|
|
355
|
-
const durationMs = Date.now() - startTime;
|
|
356
|
-
__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f").call(this, {
|
|
357
|
-
durationMs,
|
|
358
|
-
chainIds,
|
|
359
|
-
durationByDataSource,
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
330
|
}
|
|
363
331
|
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
|
|
364
332
|
}
|
|
@@ -524,9 +492,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
524
492
|
* @param options.updateInterval - Polling interval in ms.
|
|
525
493
|
*/
|
|
526
494
|
subscribeAssetsPrice(accounts, chainIds, options = {}) {
|
|
527
|
-
if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
|
|
528
|
-
return;
|
|
529
|
-
}
|
|
530
495
|
const { updateInterval = __classPrivateFieldGet(this, _AssetsController_defaultUpdateInterval, "f") } = options;
|
|
531
496
|
const subscriptionKey = 'ds:PriceDataSource';
|
|
532
497
|
const existingSubscription = __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").get(subscriptionKey);
|
|
@@ -566,18 +531,6 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
566
531
|
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f").unsubscribe(subscriptionKey).catch(console.error);
|
|
567
532
|
existingSubscription.unsubscribe();
|
|
568
533
|
}
|
|
569
|
-
/**
|
|
570
|
-
* Handle basic functionality toggle change. Call this from the consumer (extension or mobile)
|
|
571
|
-
* when the user changes the "Basic functionality" setting. Refreshes subscriptions so the
|
|
572
|
-
* current {@link AssetsControllerOptions.isBasicFunctionality} getter is used (true = APIs on,
|
|
573
|
-
* false = RPC only).
|
|
574
|
-
*
|
|
575
|
-
* @param _isBasic - The new value (for call-site clarity; the getter is the source of truth).
|
|
576
|
-
*/
|
|
577
|
-
handleBasicFunctionalityChange(_isBasic) {
|
|
578
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
579
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
580
|
-
}
|
|
581
534
|
/**
|
|
582
535
|
* Handle assets updated from a data source.
|
|
583
536
|
* Called via the onAssetsUpdate callback passed in SubscriptionRequest when the controller subscribes to a data source.
|
|
@@ -595,7 +548,11 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
595
548
|
});
|
|
596
549
|
// Run through enrichment middlewares (Event Stack: Detection → Token → Price)
|
|
597
550
|
// Include 'metadata' in dataTypes so TokenDataSource runs to enrich detected assets
|
|
598
|
-
const
|
|
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 ?? {
|
|
599
556
|
accountsWithSupportedChains: [],
|
|
600
557
|
chainIds: [],
|
|
601
558
|
dataTypes: ['balance', 'metadata', 'price'],
|
|
@@ -607,20 +564,21 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
607
564
|
// ============================================================================
|
|
608
565
|
destroy() {
|
|
609
566
|
log('Destroying AssetsController', {
|
|
610
|
-
dataSourceCount: __classPrivateFieldGet(this, _AssetsController_instances, "a",
|
|
567
|
+
dataSourceCount: __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_subscriptionBalanceDataSources_get).length,
|
|
611
568
|
subscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
|
|
612
569
|
});
|
|
613
570
|
// Destroy instantiated data sources
|
|
614
571
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f")?.destroy?.();
|
|
615
572
|
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f")?.destroy?.();
|
|
616
573
|
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f")?.destroy?.();
|
|
617
|
-
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")
|
|
574
|
+
if (__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f") &&
|
|
575
|
+
'destroy' in __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f") &&
|
|
576
|
+
typeof __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").destroy ===
|
|
577
|
+
'function') {
|
|
578
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").destroy();
|
|
579
|
+
}
|
|
618
580
|
// Stop all active subscriptions
|
|
619
581
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
620
|
-
if (__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f")) {
|
|
621
|
-
__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f").call(this);
|
|
622
|
-
__classPrivateFieldSet(this, _AssetsController_unsubscribeBasicFunctionality, null, "f");
|
|
623
|
-
}
|
|
624
582
|
// Unregister action handlers
|
|
625
583
|
this.messenger.unregisterActionHandler('AssetsController:getAssets');
|
|
626
584
|
this.messenger.unregisterActionHandler('AssetsController:getAssetsBalance');
|
|
@@ -634,9 +592,9 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
634
592
|
}
|
|
635
593
|
}
|
|
636
594
|
exports.AssetsController = AssetsController;
|
|
637
|
-
_AssetsController_isEnabled = new WeakMap(),
|
|
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() {
|
|
638
596
|
return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
|
|
639
|
-
},
|
|
597
|
+
}, _AssetsController_subscriptionBalanceDataSources_get = function _AssetsController_subscriptionBalanceDataSources_get() {
|
|
640
598
|
return [
|
|
641
599
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f"),
|
|
642
600
|
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
|
|
@@ -695,27 +653,14 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
695
653
|
// ============================================================================
|
|
696
654
|
/**
|
|
697
655
|
* Execute middlewares with request/response context.
|
|
698
|
-
* Returns response and exclusive duration per source (sum ≈ wall time).
|
|
699
656
|
*
|
|
700
|
-
* @param
|
|
657
|
+
* @param middlewares - Middlewares to execute in order.
|
|
701
658
|
* @param request - The data request.
|
|
702
659
|
* @param initialResponse - Optional initial response (for enriching existing data).
|
|
703
|
-
* @returns
|
|
660
|
+
* @returns The final DataResponse after all middlewares have processed.
|
|
704
661
|
*/
|
|
705
|
-
async function _AssetsController_executeMiddlewares(
|
|
706
|
-
const
|
|
707
|
-
const middlewares = sources.map((source) => source.assetsMiddleware);
|
|
708
|
-
const inclusive = [];
|
|
709
|
-
const wrapped = middlewares.map((middleware, i) => (async (ctx, next) => {
|
|
710
|
-
const start = Date.now();
|
|
711
|
-
try {
|
|
712
|
-
return await middleware(ctx, next);
|
|
713
|
-
}
|
|
714
|
-
finally {
|
|
715
|
-
inclusive[i] = Date.now() - start;
|
|
716
|
-
}
|
|
717
|
-
}));
|
|
718
|
-
const chain = wrapped.reduceRight((next, middleware) => async (ctx) => {
|
|
662
|
+
async function _AssetsController_executeMiddlewares(middlewares, request, initialResponse = {}) {
|
|
663
|
+
const chain = middlewares.reduceRight((next, middleware) => async (ctx) => {
|
|
719
664
|
try {
|
|
720
665
|
return await middleware(ctx, next);
|
|
721
666
|
}
|
|
@@ -729,16 +674,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
729
674
|
response: initialResponse,
|
|
730
675
|
getAssetsState: () => this.state,
|
|
731
676
|
});
|
|
732
|
-
|
|
733
|
-
for (let i = 0; i < inclusive.length; i++) {
|
|
734
|
-
const nextInc = i + 1 < inclusive.length ? (inclusive[i + 1] ?? 0) : 0;
|
|
735
|
-
const exclusive = Math.max(0, (inclusive[i] ?? 0) - nextInc);
|
|
736
|
-
const name = names[i];
|
|
737
|
-
if (name !== undefined) {
|
|
738
|
-
durationByDataSource[name] = exclusive;
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
return { response: result.response, durationByDataSource };
|
|
677
|
+
return result.response;
|
|
742
678
|
}, _AssetsController_updateState =
|
|
743
679
|
// ============================================================================
|
|
744
680
|
// STATE MANAGEMENT
|
|
@@ -933,29 +869,29 @@ async function _AssetsController_updateState(response) {
|
|
|
933
869
|
enabledChainCount: __classPrivateFieldGet(this, _AssetsController_enabledChains, "f").size,
|
|
934
870
|
});
|
|
935
871
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
872
|
+
if (__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).length > 0) {
|
|
873
|
+
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), {
|
|
874
|
+
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
875
|
+
forceUpdate: true,
|
|
876
|
+
}).catch((error) => {
|
|
877
|
+
log('Failed to fetch assets', error);
|
|
878
|
+
});
|
|
879
|
+
}
|
|
942
880
|
}, _AssetsController_stop = function _AssetsController_stop() {
|
|
943
881
|
log('Stopping asset tracking', {
|
|
944
882
|
activeSubscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
|
|
945
883
|
hasPriceSubscription: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").has('ds:PriceDataSource'),
|
|
946
884
|
});
|
|
947
|
-
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, false, "f");
|
|
948
885
|
// Stop price subscription first (uses direct messenger call)
|
|
949
886
|
this.unsubscribeAssetsPrice();
|
|
950
887
|
// Stop balance subscriptions by properly notifying data sources via messenger
|
|
951
|
-
// This ensures data sources stop their polling timers
|
|
952
|
-
//
|
|
953
|
-
// been subscribed (e.g. when switching from full to basic functionality).
|
|
888
|
+
// This ensures data sources stop their polling timers
|
|
889
|
+
// Convert to array first to avoid modifying map during iteration
|
|
954
890
|
const subscriptionKeys = [...__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").keys()];
|
|
955
891
|
for (const subscriptionKey of subscriptionKeys) {
|
|
956
892
|
if (subscriptionKey.startsWith('ds:')) {
|
|
957
893
|
const sourceId = subscriptionKey.slice(3);
|
|
958
|
-
const source = __classPrivateFieldGet(this, _AssetsController_instances, "a",
|
|
894
|
+
const source = __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_subscriptionBalanceDataSources_get).find((ds) => ds.getName() === sourceId);
|
|
959
895
|
if (source) {
|
|
960
896
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
|
|
961
897
|
}
|
|
@@ -975,11 +911,7 @@ async function _AssetsController_updateState(response) {
|
|
|
975
911
|
}, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
|
|
976
912
|
const chainToAccounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildChainToAccountsMap).call(this, accounts, new Set(chainIds));
|
|
977
913
|
const remainingChains = new Set(chainToAccounts.keys());
|
|
978
|
-
|
|
979
|
-
const balanceDataSources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
980
|
-
? __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get)
|
|
981
|
-
: [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")];
|
|
982
|
-
for (const source of balanceDataSources) {
|
|
914
|
+
for (const source of __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_subscriptionBalanceDataSources_get)) {
|
|
983
915
|
const availableChains = new Set(source.getActiveChainsSync());
|
|
984
916
|
const assignedChains = [];
|
|
985
917
|
for (const chainId of remainingChains) {
|