@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
|
@@ -6,10 +6,7 @@ import type { KeyringControllerLockEvent, KeyringControllerUnlockEvent } from "@
|
|
|
6
6
|
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
7
7
|
import type { Messenger } from "@metamask/messenger";
|
|
8
8
|
import type { NetworkEnablementControllerGetStateAction, NetworkEnablementControllerEvents } from "@metamask/network-enablement-controller";
|
|
9
|
-
import type { PreferencesControllerStateChangeEvent } from "@metamask/preferences-controller";
|
|
10
9
|
import type { AssetsControllerMethodActions } from "./AssetsController-method-action-types.mjs";
|
|
11
|
-
import type { AccountsApiDataSourceConfig } from "./data-sources/AccountsApiDataSource.mjs";
|
|
12
|
-
import type { PriceDataSourceConfig } from "./data-sources/PriceDataSource.mjs";
|
|
13
10
|
import type { RpcDataSourceConfig } from "./data-sources/RpcDataSource.mjs";
|
|
14
11
|
import type { AccountId, AssetPreferences, ChainId, Caip19AssetId, AssetMetadata, AssetPrice, AssetBalance, AssetType, DataType, DataRequest, DataResponse, Asset } from "./types.mjs";
|
|
15
12
|
declare const CONTROLLER_NAME: "AssetsController";
|
|
@@ -80,24 +77,8 @@ export type AssetsControllerAssetsDetectedEvent = {
|
|
|
80
77
|
};
|
|
81
78
|
export type AssetsControllerEvents = AssetsControllerStateChangeEvent | AssetsControllerBalanceChangedEvent | AssetsControllerPriceChangedEvent | AssetsControllerAssetsDetectedEvent;
|
|
82
79
|
type AllowedActions = AccountTreeControllerGetAccountsFromSelectedAccountGroupAction | NetworkEnablementControllerGetStateAction | BackendWebSocketServiceActions;
|
|
83
|
-
type AllowedEvents = AccountTreeControllerSelectedAccountGroupChangeEvent | NetworkEnablementControllerEvents | BackendWebSocketServiceEvents | KeyringControllerLockEvent | KeyringControllerUnlockEvent
|
|
80
|
+
type AllowedEvents = AccountTreeControllerSelectedAccountGroupChangeEvent | NetworkEnablementControllerEvents | BackendWebSocketServiceEvents | KeyringControllerLockEvent | KeyringControllerUnlockEvent;
|
|
84
81
|
export type AssetsControllerMessenger = Messenger<typeof CONTROLLER_NAME, AssetsControllerActions | AllowedActions, AssetsControllerEvents | AllowedEvents>;
|
|
85
|
-
/**
|
|
86
|
-
* Payload for the first init/fetch MetaMetrics event.
|
|
87
|
-
* Passed to the optional trackMetaMetricsEvent callback when the initial
|
|
88
|
-
* asset fetch completes after unlock or app open.
|
|
89
|
-
*/
|
|
90
|
-
export type AssetsControllerFirstInitFetchMetaMetricsPayload = {
|
|
91
|
-
/** Duration of the first init fetch in milliseconds (wall-clock). */
|
|
92
|
-
durationMs: number;
|
|
93
|
-
/** Chain IDs requested in the fetch (e.g. ['eip155:1', 'eip155:137']). */
|
|
94
|
-
chainIds: string[];
|
|
95
|
-
/**
|
|
96
|
-
* Exclusive latency in ms per data source (time spent in that source only).
|
|
97
|
-
* Sum of values approximates durationMs. Order: same as middleware chain.
|
|
98
|
-
*/
|
|
99
|
-
durationByDataSource: Record<string, number>;
|
|
100
|
-
};
|
|
101
82
|
export type AssetsControllerOptions = {
|
|
102
83
|
messenger: AssetsControllerMessenger;
|
|
103
84
|
state?: Partial<AssetsControllerState>;
|
|
@@ -105,23 +86,6 @@ export type AssetsControllerOptions = {
|
|
|
105
86
|
defaultUpdateInterval?: number;
|
|
106
87
|
/** Function to determine if the controller is enabled. Defaults to true. */
|
|
107
88
|
isEnabled?: () => boolean;
|
|
108
|
-
/**
|
|
109
|
-
* Getter for basic functionality (matches the "Basic functionality" setting in the UI).
|
|
110
|
-
* When it returns true, internet services are on: token/price APIs are used for metadata, price,
|
|
111
|
-
* and price subscription. When false, only RPC is used (no token/price APIs).
|
|
112
|
-
* No value is stored; the getter is invoked when needed.
|
|
113
|
-
* Defaults to () => true when not provided (APIs enabled).
|
|
114
|
-
*/
|
|
115
|
-
isBasicFunctionality?: () => boolean;
|
|
116
|
-
/**
|
|
117
|
-
* Called by the controller with an onChange callback. The consumer subscribes to its own
|
|
118
|
-
* basic-functionality source (e.g. PreferencesController:stateChange in extension, or a
|
|
119
|
-
* different mechanism in mobile) and invokes onChange(isBasic) when the value changes.
|
|
120
|
-
* The controller will then refresh its subscriptions. May return an unsubscribe function
|
|
121
|
-
* called on controller destroy. Optional; when omitted, basic-functionality changes are not
|
|
122
|
-
* subscribed to (e.g. host can notify via root messenger or another path).
|
|
123
|
-
*/
|
|
124
|
-
subscribeToBasicFunctionalityChange?: (onChange: (isBasic: boolean) => void) => void | (() => void);
|
|
125
89
|
/**
|
|
126
90
|
* API client for balance/price/metadata. The controller instantiates data sources
|
|
127
91
|
* and uses them directly when this is provided.
|
|
@@ -129,15 +93,6 @@ export type AssetsControllerOptions = {
|
|
|
129
93
|
queryApiClient: ApiPlatformClient;
|
|
130
94
|
/** Optional configuration for RpcDataSource. */
|
|
131
95
|
rpcDataSourceConfig?: RpcDataSourceConfig;
|
|
132
|
-
/**
|
|
133
|
-
* Optional callback invoked when the first init/fetch completes (e.g. after unlock).
|
|
134
|
-
* Use this to track first init fetch duration in MetaMetrics.
|
|
135
|
-
*/
|
|
136
|
-
trackMetaMetricsEvent?: (payload: AssetsControllerFirstInitFetchMetaMetricsPayload) => void;
|
|
137
|
-
/** Optional configuration for AccountsApiDataSource. */
|
|
138
|
-
accountsApiDataSourceConfig?: AccountsApiDataSourceConfig;
|
|
139
|
-
/** Optional configuration for PriceDataSource. */
|
|
140
|
-
priceDataSourceConfig?: PriceDataSourceConfig;
|
|
141
96
|
};
|
|
142
97
|
/**
|
|
143
98
|
* AssetsController provides a unified interface for managing asset balances
|
|
@@ -166,7 +121,7 @@ export type AssetsControllerOptions = {
|
|
|
166
121
|
*/
|
|
167
122
|
export declare class AssetsController extends BaseController<typeof CONTROLLER_NAME, AssetsControllerState, AssetsControllerMessenger> {
|
|
168
123
|
#private;
|
|
169
|
-
constructor({ messenger, state, defaultUpdateInterval, isEnabled,
|
|
124
|
+
constructor({ messenger, state, defaultUpdateInterval, isEnabled, queryApiClient, rpcDataSourceConfig, }: AssetsControllerOptions);
|
|
170
125
|
/**
|
|
171
126
|
* Handle when a data source's supported chains change.
|
|
172
127
|
* Used to refresh balance subscriptions and run a one-time fetch when a new chain is supported.
|
|
@@ -251,15 +206,6 @@ export declare class AssetsController extends BaseController<typeof CONTROLLER_N
|
|
|
251
206
|
* Unsubscribe from price updates.
|
|
252
207
|
*/
|
|
253
208
|
unsubscribeAssetsPrice(): void;
|
|
254
|
-
/**
|
|
255
|
-
* Handle basic functionality toggle change. Call this from the consumer (extension or mobile)
|
|
256
|
-
* when the user changes the "Basic functionality" setting. Refreshes subscriptions so the
|
|
257
|
-
* current {@link AssetsControllerOptions.isBasicFunctionality} getter is used (true = APIs on,
|
|
258
|
-
* false = RPC only).
|
|
259
|
-
*
|
|
260
|
-
* @param _isBasic - The new value (for call-site clarity; the getter is the source of truth).
|
|
261
|
-
*/
|
|
262
|
-
handleBasicFunctionalityChange(_isBasic: boolean): void;
|
|
263
209
|
/**
|
|
264
210
|
* Handle assets updated from a data source.
|
|
265
211
|
* Called via the onAssetsUpdate callback passed in SubscriptionRequest when the controller subscribes to a data source.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetsController.d.mts","sourceRoot":"","sources":["../src/AssetsController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,8DAA8D,EAC9D,oDAAoD,EACrD,0CAA0C;AAC3C,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAE3B,kCAAkC;AACnC,OAAO,KAAK,EACV,iBAAiB,EACjB,8BAA8B,EAC9B,6BAA6B,EAC9B,+BAA+B;AAChC,OAAO,KAAK,EACV,0BAA0B,EAC1B,4BAA4B,EAC7B,qCAAqC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B;AACrD,OAAO,KAAK,EACV,yCAAyC,EACzC,iCAAiC,EAElC,gDAAgD;
|
|
1
|
+
{"version":3,"file":"AssetsController.d.mts","sourceRoot":"","sources":["../src/AssetsController.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ 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,
|
|
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, _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;
|
|
13
13
|
import { BaseController } from "@metamask/base-controller";
|
|
14
14
|
import { parseCaipAssetType } from "@metamask/utils";
|
|
15
15
|
import { Mutex } from "async-mutex";
|
|
@@ -176,7 +176,7 @@ function normalizeResponse(response) {
|
|
|
176
176
|
* - The controller does NOT manage polling - it simply receives pushed updates
|
|
177
177
|
*/
|
|
178
178
|
export class AssetsController extends BaseController {
|
|
179
|
-
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true,
|
|
179
|
+
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, queryApiClient, rpcDataSourceConfig, }) {
|
|
180
180
|
super({
|
|
181
181
|
name: CONTROLLER_NAME,
|
|
182
182
|
messenger,
|
|
@@ -189,14 +189,8 @@ export class AssetsController extends BaseController {
|
|
|
189
189
|
_AssetsController_instances.add(this);
|
|
190
190
|
/** Whether the controller is enabled */
|
|
191
191
|
_AssetsController_isEnabled.set(this, void 0);
|
|
192
|
-
/** Getter for basic functionality (only balance fetch/subscribe use RPC; token/price API not used). No attribute stored. */
|
|
193
|
-
_AssetsController_isBasicFunctionality.set(this, void 0);
|
|
194
192
|
/** Default update interval hint passed to data sources */
|
|
195
193
|
_AssetsController_defaultUpdateInterval.set(this, void 0);
|
|
196
|
-
/** Optional callback for first init/fetch MetaMetrics (duration). */
|
|
197
|
-
_AssetsController_trackMetaMetricsEvent.set(this, void 0);
|
|
198
|
-
/** Whether we have already reported first init fetch for this session (reset on #stop). */
|
|
199
|
-
_AssetsController_firstInitFetchReported.set(this, false);
|
|
200
194
|
_AssetsController_controllerMutex.set(this, new Mutex());
|
|
201
195
|
/**
|
|
202
196
|
* Active balance subscriptions keyed by account ID.
|
|
@@ -214,11 +208,8 @@ export class AssetsController extends BaseController {
|
|
|
214
208
|
_AssetsController_priceDataSource.set(this, void 0);
|
|
215
209
|
_AssetsController_detectionMiddleware.set(this, void 0);
|
|
216
210
|
_AssetsController_tokenDataSource.set(this, void 0);
|
|
217
|
-
_AssetsController_unsubscribeBasicFunctionality.set(this, null);
|
|
218
211
|
__classPrivateFieldSet(this, _AssetsController_isEnabled, isEnabled(), "f");
|
|
219
|
-
__classPrivateFieldSet(this, _AssetsController_isBasicFunctionality, isBasicFunctionality ?? (() => true), "f");
|
|
220
212
|
__classPrivateFieldSet(this, _AssetsController_defaultUpdateInterval, defaultUpdateInterval, "f");
|
|
221
|
-
__classPrivateFieldSet(this, _AssetsController_trackMetaMetricsEvent, trackMetaMetricsEvent, "f");
|
|
222
213
|
const rpcConfig = rpcDataSourceConfig ?? {};
|
|
223
214
|
const onActiveChainsUpdated = (dataSourceName, chains, previousChains) => this.handleActiveChainsUpdate(dataSourceName, chains, previousChains);
|
|
224
215
|
__classPrivateFieldSet(this, _AssetsController_backendWebsocketDataSource, new BackendWebsocketDataSource({
|
|
@@ -229,7 +220,6 @@ export class AssetsController extends BaseController {
|
|
|
229
220
|
__classPrivateFieldSet(this, _AssetsController_accountsApiDataSource, new AccountsApiDataSource({
|
|
230
221
|
queryApiClient,
|
|
231
222
|
onActiveChainsUpdated,
|
|
232
|
-
...accountsApiDataSourceConfig,
|
|
233
223
|
}), "f");
|
|
234
224
|
__classPrivateFieldSet(this, _AssetsController_snapDataSource, new SnapDataSource({
|
|
235
225
|
messenger: this.messenger,
|
|
@@ -245,7 +235,6 @@ export class AssetsController extends BaseController {
|
|
|
245
235
|
}), "f");
|
|
246
236
|
__classPrivateFieldSet(this, _AssetsController_priceDataSource, new PriceDataSource({
|
|
247
237
|
queryApiClient,
|
|
248
|
-
...priceDataSourceConfig,
|
|
249
238
|
}), "f");
|
|
250
239
|
__classPrivateFieldSet(this, _AssetsController_detectionMiddleware, new DetectionMiddleware(), "f");
|
|
251
240
|
if (!__classPrivateFieldGet(this, _AssetsController_isEnabled, "f")) {
|
|
@@ -258,14 +247,6 @@ export class AssetsController extends BaseController {
|
|
|
258
247
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeState).call(this);
|
|
259
248
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeToEvents).call(this);
|
|
260
249
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_registerActionHandlers).call(this);
|
|
261
|
-
// Subscribe to basic-functionality changes after construction so a synchronous
|
|
262
|
-
// onChange during subscribe cannot run before data sources are initialized.
|
|
263
|
-
if (subscribeToBasicFunctionalityChange) {
|
|
264
|
-
const unsubscribe = subscribeToBasicFunctionalityChange((isBasic) => this.handleBasicFunctionalityChange(isBasic));
|
|
265
|
-
if (typeof unsubscribe === 'function') {
|
|
266
|
-
__classPrivateFieldSet(this, _AssetsController_unsubscribeBasicFunctionality, unsubscribe, "f");
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
250
|
}
|
|
270
251
|
// ============================================================================
|
|
271
252
|
// DATA SOURCE CHAIN MANAGEMENT
|
|
@@ -325,34 +306,21 @@ export class AssetsController extends BaseController {
|
|
|
325
306
|
customAssets.push(...accountCustomAssets);
|
|
326
307
|
}
|
|
327
308
|
if (options?.forceUpdate) {
|
|
328
|
-
const startTime = Date.now();
|
|
329
309
|
const request = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildDataRequest).call(this, accounts, chainIds, {
|
|
330
310
|
assetTypes,
|
|
331
311
|
dataTypes,
|
|
332
312
|
customAssets: customAssets.length > 0 ? customAssets : undefined,
|
|
333
313
|
forceUpdate: true,
|
|
334
314
|
});
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
]
|
|
344
|
-
: [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f"), __classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f")];
|
|
345
|
-
const { response, durationByDataSource } = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, sources, request);
|
|
315
|
+
const response = await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_executeMiddlewares).call(this, [
|
|
316
|
+
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f").assetsMiddleware,
|
|
317
|
+
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f").assetsMiddleware,
|
|
318
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").assetsMiddleware,
|
|
319
|
+
__classPrivateFieldGet(this, _AssetsController_detectionMiddleware, "f").assetsMiddleware,
|
|
320
|
+
__classPrivateFieldGet(this, _AssetsController_tokenDataSource, "f").assetsMiddleware,
|
|
321
|
+
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f").assetsMiddleware,
|
|
322
|
+
], request);
|
|
346
323
|
await __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_updateState).call(this, response);
|
|
347
|
-
if (__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f") && !__classPrivateFieldGet(this, _AssetsController_firstInitFetchReported, "f")) {
|
|
348
|
-
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, true, "f");
|
|
349
|
-
const durationMs = Date.now() - startTime;
|
|
350
|
-
__classPrivateFieldGet(this, _AssetsController_trackMetaMetricsEvent, "f").call(this, {
|
|
351
|
-
durationMs,
|
|
352
|
-
chainIds,
|
|
353
|
-
durationByDataSource,
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
324
|
}
|
|
357
325
|
return __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getAssetsFromState).call(this, accounts, chainIds, assetTypes);
|
|
358
326
|
}
|
|
@@ -518,9 +486,6 @@ export class AssetsController extends BaseController {
|
|
|
518
486
|
* @param options.updateInterval - Polling interval in ms.
|
|
519
487
|
*/
|
|
520
488
|
subscribeAssetsPrice(accounts, chainIds, options = {}) {
|
|
521
|
-
if (!__classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)) {
|
|
522
|
-
return;
|
|
523
|
-
}
|
|
524
489
|
const { updateInterval = __classPrivateFieldGet(this, _AssetsController_defaultUpdateInterval, "f") } = options;
|
|
525
490
|
const subscriptionKey = 'ds:PriceDataSource';
|
|
526
491
|
const existingSubscription = __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").get(subscriptionKey);
|
|
@@ -560,18 +525,6 @@ export class AssetsController extends BaseController {
|
|
|
560
525
|
__classPrivateFieldGet(this, _AssetsController_priceDataSource, "f").unsubscribe(subscriptionKey).catch(console.error);
|
|
561
526
|
existingSubscription.unsubscribe();
|
|
562
527
|
}
|
|
563
|
-
/**
|
|
564
|
-
* Handle basic functionality toggle change. Call this from the consumer (extension or mobile)
|
|
565
|
-
* when the user changes the "Basic functionality" setting. Refreshes subscriptions so the
|
|
566
|
-
* current {@link AssetsControllerOptions.isBasicFunctionality} getter is used (true = APIs on,
|
|
567
|
-
* false = RPC only).
|
|
568
|
-
*
|
|
569
|
-
* @param _isBasic - The new value (for call-site clarity; the getter is the source of truth).
|
|
570
|
-
*/
|
|
571
|
-
handleBasicFunctionalityChange(_isBasic) {
|
|
572
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
573
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
574
|
-
}
|
|
575
528
|
/**
|
|
576
529
|
* Handle assets updated from a data source.
|
|
577
530
|
* Called via the onAssetsUpdate callback passed in SubscriptionRequest when the controller subscribes to a data source.
|
|
@@ -589,7 +542,11 @@ export class AssetsController extends BaseController {
|
|
|
589
542
|
});
|
|
590
543
|
// Run through enrichment middlewares (Event Stack: Detection → Token → Price)
|
|
591
544
|
// Include 'metadata' in dataTypes so TokenDataSource runs to enrich detected assets
|
|
592
|
-
const
|
|
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 ?? {
|
|
593
550
|
accountsWithSupportedChains: [],
|
|
594
551
|
chainIds: [],
|
|
595
552
|
dataTypes: ['balance', 'metadata', 'price'],
|
|
@@ -601,20 +558,21 @@ export class AssetsController extends BaseController {
|
|
|
601
558
|
// ============================================================================
|
|
602
559
|
destroy() {
|
|
603
560
|
log('Destroying AssetsController', {
|
|
604
|
-
dataSourceCount: __classPrivateFieldGet(this, _AssetsController_instances, "a",
|
|
561
|
+
dataSourceCount: __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_subscriptionBalanceDataSources_get).length,
|
|
605
562
|
subscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
|
|
606
563
|
});
|
|
607
564
|
// Destroy instantiated data sources
|
|
608
565
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f")?.destroy?.();
|
|
609
566
|
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f")?.destroy?.();
|
|
610
567
|
__classPrivateFieldGet(this, _AssetsController_snapDataSource, "f")?.destroy?.();
|
|
611
|
-
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")
|
|
568
|
+
if (__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f") &&
|
|
569
|
+
'destroy' in __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f") &&
|
|
570
|
+
typeof __classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").destroy ===
|
|
571
|
+
'function') {
|
|
572
|
+
__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f").destroy();
|
|
573
|
+
}
|
|
612
574
|
// Stop all active subscriptions
|
|
613
575
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_stop).call(this);
|
|
614
|
-
if (__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f")) {
|
|
615
|
-
__classPrivateFieldGet(this, _AssetsController_unsubscribeBasicFunctionality, "f").call(this);
|
|
616
|
-
__classPrivateFieldSet(this, _AssetsController_unsubscribeBasicFunctionality, null, "f");
|
|
617
|
-
}
|
|
618
576
|
// Unregister action handlers
|
|
619
577
|
this.messenger.unregisterActionHandler('AssetsController:getAssets');
|
|
620
578
|
this.messenger.unregisterActionHandler('AssetsController:getAssetsBalance');
|
|
@@ -627,9 +585,9 @@ export class AssetsController extends BaseController {
|
|
|
627
585
|
this.messenger.unregisterActionHandler('AssetsController:unhideAsset');
|
|
628
586
|
}
|
|
629
587
|
}
|
|
630
|
-
_AssetsController_isEnabled = new WeakMap(),
|
|
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() {
|
|
631
589
|
return this.messenger.call('AccountTreeController:getAccountsFromSelectedAccountGroup');
|
|
632
|
-
},
|
|
590
|
+
}, _AssetsController_subscriptionBalanceDataSources_get = function _AssetsController_subscriptionBalanceDataSources_get() {
|
|
633
591
|
return [
|
|
634
592
|
__classPrivateFieldGet(this, _AssetsController_backendWebsocketDataSource, "f"),
|
|
635
593
|
__classPrivateFieldGet(this, _AssetsController_accountsApiDataSource, "f"),
|
|
@@ -688,27 +646,14 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
688
646
|
// ============================================================================
|
|
689
647
|
/**
|
|
690
648
|
* Execute middlewares with request/response context.
|
|
691
|
-
* Returns response and exclusive duration per source (sum ≈ wall time).
|
|
692
649
|
*
|
|
693
|
-
* @param
|
|
650
|
+
* @param middlewares - Middlewares to execute in order.
|
|
694
651
|
* @param request - The data request.
|
|
695
652
|
* @param initialResponse - Optional initial response (for enriching existing data).
|
|
696
|
-
* @returns
|
|
653
|
+
* @returns The final DataResponse after all middlewares have processed.
|
|
697
654
|
*/
|
|
698
|
-
async function _AssetsController_executeMiddlewares(
|
|
699
|
-
const
|
|
700
|
-
const middlewares = sources.map((source) => source.assetsMiddleware);
|
|
701
|
-
const inclusive = [];
|
|
702
|
-
const wrapped = middlewares.map((middleware, i) => (async (ctx, next) => {
|
|
703
|
-
const start = Date.now();
|
|
704
|
-
try {
|
|
705
|
-
return await middleware(ctx, next);
|
|
706
|
-
}
|
|
707
|
-
finally {
|
|
708
|
-
inclusive[i] = Date.now() - start;
|
|
709
|
-
}
|
|
710
|
-
}));
|
|
711
|
-
const chain = wrapped.reduceRight((next, middleware) => async (ctx) => {
|
|
655
|
+
async function _AssetsController_executeMiddlewares(middlewares, request, initialResponse = {}) {
|
|
656
|
+
const chain = middlewares.reduceRight((next, middleware) => async (ctx) => {
|
|
712
657
|
try {
|
|
713
658
|
return await middleware(ctx, next);
|
|
714
659
|
}
|
|
@@ -722,16 +667,7 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
722
667
|
response: initialResponse,
|
|
723
668
|
getAssetsState: () => this.state,
|
|
724
669
|
});
|
|
725
|
-
|
|
726
|
-
for (let i = 0; i < inclusive.length; i++) {
|
|
727
|
-
const nextInc = i + 1 < inclusive.length ? (inclusive[i + 1] ?? 0) : 0;
|
|
728
|
-
const exclusive = Math.max(0, (inclusive[i] ?? 0) - nextInc);
|
|
729
|
-
const name = names[i];
|
|
730
|
-
if (name !== undefined) {
|
|
731
|
-
durationByDataSource[name] = exclusive;
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
|
-
return { response: result.response, durationByDataSource };
|
|
670
|
+
return result.response;
|
|
735
671
|
}, _AssetsController_updateState =
|
|
736
672
|
// ============================================================================
|
|
737
673
|
// STATE MANAGEMENT
|
|
@@ -926,29 +862,29 @@ async function _AssetsController_updateState(response) {
|
|
|
926
862
|
enabledChainCount: __classPrivateFieldGet(this, _AssetsController_enabledChains, "f").size,
|
|
927
863
|
});
|
|
928
864
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
865
|
+
if (__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get).length > 0) {
|
|
866
|
+
this.getAssets(__classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_selectedAccounts_get), {
|
|
867
|
+
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
868
|
+
forceUpdate: true,
|
|
869
|
+
}).catch((error) => {
|
|
870
|
+
log('Failed to fetch assets', error);
|
|
871
|
+
});
|
|
872
|
+
}
|
|
935
873
|
}, _AssetsController_stop = function _AssetsController_stop() {
|
|
936
874
|
log('Stopping asset tracking', {
|
|
937
875
|
activeSubscriptionCount: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").size,
|
|
938
876
|
hasPriceSubscription: __classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").has('ds:PriceDataSource'),
|
|
939
877
|
});
|
|
940
|
-
__classPrivateFieldSet(this, _AssetsController_firstInitFetchReported, false, "f");
|
|
941
878
|
// Stop price subscription first (uses direct messenger call)
|
|
942
879
|
this.unsubscribeAssetsPrice();
|
|
943
880
|
// Stop balance subscriptions by properly notifying data sources via messenger
|
|
944
|
-
// This ensures data sources stop their polling timers
|
|
945
|
-
//
|
|
946
|
-
// been subscribed (e.g. when switching from full to basic functionality).
|
|
881
|
+
// This ensures data sources stop their polling timers
|
|
882
|
+
// Convert to array first to avoid modifying map during iteration
|
|
947
883
|
const subscriptionKeys = [...__classPrivateFieldGet(this, _AssetsController_activeSubscriptions, "f").keys()];
|
|
948
884
|
for (const subscriptionKey of subscriptionKeys) {
|
|
949
885
|
if (subscriptionKey.startsWith('ds:')) {
|
|
950
886
|
const sourceId = subscriptionKey.slice(3);
|
|
951
|
-
const source = __classPrivateFieldGet(this, _AssetsController_instances, "a",
|
|
887
|
+
const source = __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_subscriptionBalanceDataSources_get).find((ds) => ds.getName() === sourceId);
|
|
952
888
|
if (source) {
|
|
953
889
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_unsubscribeDataSource).call(this, source);
|
|
954
890
|
}
|
|
@@ -968,11 +904,7 @@ async function _AssetsController_updateState(response) {
|
|
|
968
904
|
}, _AssetsController_subscribeAssetsBalance = function _AssetsController_subscribeAssetsBalance(accounts, chainIds) {
|
|
969
905
|
const chainToAccounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_buildChainToAccountsMap).call(this, accounts, new Set(chainIds));
|
|
970
906
|
const remainingChains = new Set(chainToAccounts.keys());
|
|
971
|
-
|
|
972
|
-
const balanceDataSources = __classPrivateFieldGet(this, _AssetsController_isBasicFunctionality, "f").call(this)
|
|
973
|
-
? __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_allBalanceDataSources_get)
|
|
974
|
-
: [__classPrivateFieldGet(this, _AssetsController_rpcDataSource, "f")];
|
|
975
|
-
for (const source of balanceDataSources) {
|
|
907
|
+
for (const source of __classPrivateFieldGet(this, _AssetsController_instances, "a", _AssetsController_subscriptionBalanceDataSources_get)) {
|
|
976
908
|
const availableChains = new Set(source.getActiveChainsSync());
|
|
977
909
|
const assignedChains = [];
|
|
978
910
|
for (const chainId of remainingChains) {
|