@metamask-previews/assets-controller 10.0.2-preview-4c12f04 → 10.1.0-preview-d52465c2b
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 +12 -5
- package/dist/AssetsController.cjs +30 -5
- package/dist/AssetsController.cjs.map +1 -1
- package/dist/AssetsController.d.cts +7 -1
- package/dist/AssetsController.d.cts.map +1 -1
- package/dist/AssetsController.d.mts +7 -1
- package/dist/AssetsController.d.mts.map +1 -1
- package/dist/AssetsController.mjs +30 -5
- package/dist/AssetsController.mjs.map +1 -1
- package/dist/migrations/healAssetsInfoMetadata.cjs +385 -0
- package/dist/migrations/healAssetsInfoMetadata.cjs.map +1 -0
- package/dist/migrations/healAssetsInfoMetadata.d.cts +106 -0
- package/dist/migrations/healAssetsInfoMetadata.d.cts.map +1 -0
- package/dist/migrations/healAssetsInfoMetadata.d.mts +106 -0
- package/dist/migrations/healAssetsInfoMetadata.d.mts.map +1 -0
- package/dist/migrations/healAssetsInfoMetadata.mjs +381 -0
- package/dist/migrations/healAssetsInfoMetadata.mjs.map +1 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +3 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +3 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,12 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [10.0
|
|
10
|
+
## [10.1.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add temporary `tempMigrateAssetsInfoMetadataAssets3346` constructor option that heals `assetsInfo` metadata (and custom-asset tracking) wiped by a prior defect for tokens on niche EVM chains, using legacy `TokensController` state provided by the host ([#9393](https://github.com/MetaMask/core/pull/9393))
|
|
11
15
|
|
|
12
16
|
### Changed
|
|
13
17
|
|
|
14
|
-
- Bump `@metamask/
|
|
15
|
-
|
|
18
|
+
- Bump `@metamask/messenger` from `^1.2.0` to `^2.0.0` ([#9392](https://github.com/MetaMask/core/pull/9392))
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Fetch balances when switching account groups, enabling RPC-only networks, or after a new account is added to the account tree ([#9388](https://github.com/MetaMask/core/pull/9388))
|
|
16
23
|
|
|
17
24
|
## [10.0.1]
|
|
18
25
|
|
|
@@ -690,8 +697,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
690
697
|
- Refactor `RpcDataSource` to delegate polling to `BalanceFetcher` and `TokenDetector` services ([#7709](https://github.com/MetaMask/core/pull/7709))
|
|
691
698
|
- Refactor `BalanceFetcher` and `TokenDetector` to extend `StaticIntervalPollingControllerOnly` for independent polling management ([#7709](https://github.com/MetaMask/core/pull/7709))
|
|
692
699
|
|
|
693
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@10.0
|
|
694
|
-
[10.0
|
|
700
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@10.1.0...HEAD
|
|
701
|
+
[10.1.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@10.0.1...@metamask/assets-controller@10.1.0
|
|
695
702
|
[10.0.1]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@10.0.0...@metamask/assets-controller@10.0.1
|
|
696
703
|
[10.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@9.1.0...@metamask/assets-controller@10.0.0
|
|
697
704
|
[9.1.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@9.0.2...@metamask/assets-controller@9.1.0
|
|
@@ -37,6 +37,7 @@ const CustomAssetGraduationMiddleware_1 = require("./middlewares/CustomAssetGrad
|
|
|
37
37
|
const DetectionMiddleware_1 = require("./middlewares/DetectionMiddleware.cjs");
|
|
38
38
|
const ParallelMiddleware_1 = require("./middlewares/ParallelMiddleware.cjs");
|
|
39
39
|
const RpcFallbackMiddleware_1 = require("./middlewares/RpcFallbackMiddleware.cjs");
|
|
40
|
+
const healAssetsInfoMetadata_1 = require("./migrations/healAssetsInfoMetadata.cjs");
|
|
40
41
|
const utils_2 = require("./utils/index.cjs");
|
|
41
42
|
const constants_1 = require("./utils/constants.cjs");
|
|
42
43
|
const customAssetsRpcSupplement_1 = require("./utils/customAssetsRpcSupplement.cjs");
|
|
@@ -259,7 +260,7 @@ function mergeAccountBalances(previousBalances, accountBalances, customAssetIds,
|
|
|
259
260
|
* - The controller does NOT manage polling - it simply receives pushed updates
|
|
260
261
|
*/
|
|
261
262
|
class AssetsController extends base_controller_1.BaseController {
|
|
262
|
-
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trace, captureException, accountsApiDataSourceConfig, priceDataSourceConfig, stakedBalanceDataSourceConfig, isOnboarded, }) {
|
|
263
|
+
constructor({ messenger, state = {}, defaultUpdateInterval = DEFAULT_POLLING_INTERVAL_MS, isEnabled = () => true, isBasicFunctionality, subscribeToBasicFunctionalityChange, queryApiClient, rpcDataSourceConfig, trace, captureException, accountsApiDataSourceConfig, priceDataSourceConfig, stakedBalanceDataSourceConfig, isOnboarded, tempMigrateAssetsInfoMetadataAssets3346, }) {
|
|
263
264
|
super({
|
|
264
265
|
name: CONTROLLER_NAME,
|
|
265
266
|
messenger,
|
|
@@ -326,6 +327,15 @@ class AssetsController extends base_controller_1.BaseController {
|
|
|
326
327
|
__classPrivateFieldSet(this, _AssetsController_captureException, captureException, "f");
|
|
327
328
|
__classPrivateFieldSet(this, _AssetsController_queryApiClient, queryApiClient, "f");
|
|
328
329
|
const rpcConfig = rpcDataSourceConfig ?? {};
|
|
330
|
+
// TEMPORARY: heal assetsInfo metadata wiped by a prior defect
|
|
331
|
+
// (see extension migration #215 / ASSETS-3346). Remove in a future release.
|
|
332
|
+
if (tempMigrateAssetsInfoMetadataAssets3346) {
|
|
333
|
+
this.update(() => (0, healAssetsInfoMetadata_1.tempHealAssetsInfoMetadata)({
|
|
334
|
+
state: this.state,
|
|
335
|
+
getMigrationState: tempMigrateAssetsInfoMetadataAssets3346,
|
|
336
|
+
captureException,
|
|
337
|
+
}));
|
|
338
|
+
}
|
|
329
339
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_initializeNativeAssetsMap).call(this, queryApiClient);
|
|
330
340
|
__classPrivateFieldSet(this, _AssetsController_onActiveChainsUpdated, (dataSourceName, chains, previousChains) => {
|
|
331
341
|
try {
|
|
@@ -1237,17 +1247,18 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1237
1247
|
previousCount: __classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").size,
|
|
1238
1248
|
currentCount: currentIds.size,
|
|
1239
1249
|
});
|
|
1250
|
+
const newAccounts = accounts.filter((account) => !__classPrivateFieldGet(this, _AssetsController_lastKnownAccountIds, "f").has(account.id));
|
|
1240
1251
|
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, currentIds, "f");
|
|
1241
1252
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureNativeBalancesDefaultZero).call(this);
|
|
1242
1253
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_ensureDefaultTrackedAssetsSeeded).call(this);
|
|
1243
|
-
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_runAccountTreeRefresh).call(this, accounts).catch((error) => {
|
|
1254
|
+
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_runAccountTreeRefresh).call(this, accounts, newAccounts).catch((error) => {
|
|
1244
1255
|
log('Failed to refresh assets after tree change', error);
|
|
1245
1256
|
});
|
|
1246
1257
|
}
|
|
1247
1258
|
else {
|
|
1248
1259
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_start).call(this);
|
|
1249
1260
|
}
|
|
1250
|
-
}, _AssetsController_runAccountTreeRefresh = async function _AssetsController_runAccountTreeRefresh(accounts) {
|
|
1261
|
+
}, _AssetsController_runAccountTreeRefresh = async function _AssetsController_runAccountTreeRefresh(accounts, newAccounts = []) {
|
|
1251
1262
|
const releaseLock = await __classPrivateFieldGet(this, _AssetsController_accountRefreshMutex, "f").acquire();
|
|
1252
1263
|
try {
|
|
1253
1264
|
await this.getAssets(accounts, {
|
|
@@ -1255,6 +1266,12 @@ _AssetsController_isEnabled = new WeakMap(), _AssetsController_isBasicFunctional
|
|
|
1255
1266
|
forceUpdate: true,
|
|
1256
1267
|
});
|
|
1257
1268
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
1269
|
+
if (newAccounts.length > 0) {
|
|
1270
|
+
await this.getAssets(newAccounts, {
|
|
1271
|
+
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
1272
|
+
forceUpdate: true,
|
|
1273
|
+
});
|
|
1274
|
+
}
|
|
1258
1275
|
}
|
|
1259
1276
|
catch (error) {
|
|
1260
1277
|
log('Failed to fetch assets after tree change', error);
|
|
@@ -2090,19 +2107,25 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
|
|
|
2090
2107
|
// EVENT HANDLERS
|
|
2091
2108
|
// ============================================================================
|
|
2092
2109
|
async function _AssetsController_handleAccountGroupChanged() {
|
|
2110
|
+
const gutoStart = Date.now();
|
|
2111
|
+
console.log('[GUTO PERFORMANCE LOG] AssetsController.#handleAccountGroupChanged START');
|
|
2093
2112
|
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
2094
2113
|
log('Account group changed', {
|
|
2095
2114
|
accountCount: accounts.length,
|
|
2096
2115
|
accountIds: accounts.map((a) => a.id),
|
|
2097
2116
|
});
|
|
2098
2117
|
__classPrivateFieldSet(this, _AssetsController_lastKnownAccountIds, new Set(accounts.map((a) => a.id)), "f");
|
|
2118
|
+
const gutoMutexStart = Date.now();
|
|
2099
2119
|
const releaseLock = await __classPrivateFieldGet(this, _AssetsController_accountRefreshMutex, "f").acquire();
|
|
2120
|
+
console.log(`[GUTO PERFORMANCE LOG] AssetsController accountRefreshMutex wait took ${Date.now() - gutoMutexStart}ms`);
|
|
2100
2121
|
try {
|
|
2101
2122
|
if (accounts.length > 0) {
|
|
2123
|
+
const gutoGetAssetsStart = Date.now();
|
|
2102
2124
|
await this.getAssets(accounts, {
|
|
2103
2125
|
chainIds: [...__classPrivateFieldGet(this, _AssetsController_enabledChains, "f")],
|
|
2104
2126
|
forceUpdate: true,
|
|
2105
2127
|
});
|
|
2128
|
+
console.log(`[GUTO PERFORMANCE LOG] AssetsController.getAssets (accounts=${accounts.length}, chains=${__classPrivateFieldGet(this, _AssetsController_enabledChains, "f").size}) took ${Date.now() - gutoGetAssetsStart}ms`);
|
|
2106
2129
|
}
|
|
2107
2130
|
// Subscribe after fetch so WS notifications can recover state
|
|
2108
2131
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
@@ -2112,6 +2135,7 @@ async function _AssetsController_handleAccountGroupChanged() {
|
|
|
2112
2135
|
finally {
|
|
2113
2136
|
releaseLock();
|
|
2114
2137
|
}
|
|
2138
|
+
console.log(`[GUTO PERFORMANCE LOG] AssetsController.#handleAccountGroupChanged END (total) took ${Date.now() - gutoStart}ms`);
|
|
2115
2139
|
}, _AssetsController_handleEnabledNetworksChanged = async function _AssetsController_handleEnabledNetworksChanged(enabledNetworkMap) {
|
|
2116
2140
|
const previousChains = __classPrivateFieldGet(this, _AssetsController_enabledChains, "f");
|
|
2117
2141
|
__classPrivateFieldSet(this, _AssetsController_enabledChains, __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_extractEnabledChains).call(this, enabledNetworkMap), "f");
|
|
@@ -2141,8 +2165,9 @@ async function _AssetsController_handleAccountGroupChanged() {
|
|
|
2141
2165
|
// Refresh subscriptions for new chain set
|
|
2142
2166
|
__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_subscribeAssets).call(this);
|
|
2143
2167
|
// Do one-time fetch for newly enabled chains; merge so we keep existing chain balances
|
|
2144
|
-
|
|
2145
|
-
|
|
2168
|
+
const accounts = __classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_getSelectedAccounts).call(this);
|
|
2169
|
+
if (addedChains.length > 0 && accounts.length > 0) {
|
|
2170
|
+
await this.getAssets(accounts, {
|
|
2146
2171
|
chainIds: addedChains,
|
|
2147
2172
|
forceUpdate: true,
|
|
2148
2173
|
updateMode: 'merge',
|