@metamask-previews/assets-controller 2.3.0-preview-0ae91e694 → 2.3.0-preview-efc1fb7

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 CHANGED
@@ -13,7 +13,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
13
  - Bump `@metamask/account-tree-controller` from `^5.0.0` to `^5.0.1` ([#8162](https://github.com/MetaMask/core/pull/8162))
14
14
  - Bump `@metamask/assets-controllers` from `^100.2.0` to `^100.2.1` ([#8162](https://github.com/MetaMask/core/pull/8162))
15
15
  - Bump `@metamask/core-backend` from `^6.1.0` to `^6.1.1` ([#8162](https://github.com/MetaMask/core/pull/8162))
16
- - Hide native tokens on Tempo networks (testnet and mainnet) in `getAssets` method ([#7882](https://github.com/MetaMask/core/pull/7882))
16
+
17
+ ### Fixed
18
+
19
+ - Preserve custom asset metadata (symbol, name, decimals, image) in `AssetsController` when the API returns an empty response for an unknown token, preventing incorrect balance calculations and display for user-deployed tokens added via `wallet_watchAsset` ([#8202](https://github.com/MetaMask/core/pull/8202))
20
+ - Include custom asset token addresses in `RpcDataSource` balance fetches so that on-chain balances are retrieved immediately after token import via `addCustomAsset` ([#8202](https://github.com/MetaMask/core/pull/8202))
17
21
 
18
22
  ## [2.3.0]
19
23
 
@@ -13,7 +13,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
13
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
- var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trackMetaMetricsEvent, _AssetsController_firstInitFetchReported, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _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_onActiveChainsUpdated, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_updateActive, _AssetsController_registerActionHandlers, _AssetsController_handleActiveChainsUpdate, _AssetsController_executeMiddlewares, _AssetsController_resolveNativeAssetIds, _AssetsController_getNativeAssetIdsForEnabledChains, _AssetsController_getNativeAssetIdsForAccount, _AssetsController_ensureNativeBalancesDefaultZero, _AssetsController_updateState, _AssetsController_getAssetsFromState, _AssetsController_shouldHideNativeToken, _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;
16
+ var _AssetsController_instances, _AssetsController_isEnabled, _AssetsController_isBasicFunctionality, _AssetsController_defaultUpdateInterval, _AssetsController_trackMetaMetricsEvent, _AssetsController_firstInitFetchReported, _AssetsController_uiOpen, _AssetsController_keyringUnlocked, _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_onActiveChainsUpdated, _AssetsController_initializeState, _AssetsController_extractEnabledChains, _AssetsController_normalizeChainReference, _AssetsController_subscribeToEvents, _AssetsController_updateActive, _AssetsController_registerActionHandlers, _AssetsController_handleActiveChainsUpdate, _AssetsController_executeMiddlewares, _AssetsController_resolveNativeAssetIds, _AssetsController_getNativeAssetIdsForEnabledChains, _AssetsController_getNativeAssetIdsForAccount, _AssetsController_ensureNativeBalancesDefaultZero, _AssetsController_updateState, _AssetsController_getAssetsFromState, _AssetsController_tokenStandardToAssetType, _AssetsController_start, _AssetsController_stop, _AssetsController_subscribeAssets, _AssetsController_subscribeAssetsBalance, _AssetsController_subscribeStakedBalance, _AssetsController_buildChainToAccountsMap, _AssetsController_subscribeDataSource, _AssetsController_unsubscribeDataSource, _AssetsController_buildDataRequest, _AssetsController_getEnabledChainsForAccount, _AssetsController_handleAccountGroupChanged, _AssetsController_handleEnabledNetworksChanged;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.AssetsController = exports.getDefaultAssetsControllerState = void 0;
19
19
  const base_controller_1 = require("@metamask/base-controller");
@@ -966,7 +966,26 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
966
966
  if (!(0, lodash_1.isEqual)(previousState.assetsInfo[key], value)) {
967
967
  changedMetadata.push(key);
968
968
  }
969
- metadata[key] = value;
969
+ const existing = metadata[key];
970
+ const incoming = value;
971
+ // When the API returns no symbol or name for this token, it has no
972
+ // real knowledge of it (e.g. a user-deployed token not indexed by
973
+ // the API). Preserve richer metadata already in state (e.g. from
974
+ // pendingMetadata set by addCustomAsset) so that the correct
975
+ // decimals/symbol/name/image are not overwritten with empty values.
976
+ if (existing && !incoming.symbol && !incoming.name) {
977
+ metadata[key] = {
978
+ ...existing,
979
+ ...incoming,
980
+ symbol: existing.symbol,
981
+ name: existing.name,
982
+ decimals: existing.decimals ?? incoming.decimals,
983
+ image: existing.image ?? incoming.image,
984
+ };
985
+ }
986
+ else {
987
+ metadata[key] = value;
988
+ }
970
989
  }
971
990
  }
972
991
  if (normalizedResponse.assetsBalance) {
@@ -1107,10 +1126,6 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
1107
1126
  continue;
1108
1127
  }
1109
1128
  const assetChainId = extractChainId(typedAssetId);
1110
- // Skip native tokens on Tempo networks
1111
- if (__classPrivateFieldGet(this, _AssetsController_instances, "m", _AssetsController_shouldHideNativeToken).call(this, assetChainId, typedAssetId, metadata)) {
1112
- continue;
1113
- }
1114
1129
  if (!chainIdSet.has(assetChainId)) {
1115
1130
  continue;
1116
1131
  }
@@ -1144,20 +1159,6 @@ async function _AssetsController_executeMiddlewares(sources, request, initialRes
1144
1159
  }
1145
1160
  }
1146
1161
  return result;
1147
- }, _AssetsController_shouldHideNativeToken = function _AssetsController_shouldHideNativeToken(chainId, assetId, metadata) {
1148
- // Chain IDs where native tokens should be skipped (Tempo networks)
1149
- // These networks return arbitrary large numbers for native token balances via eth_getBalance
1150
- const CHAIN_IDS_TO_SKIP_NATIVE_TOKEN = [
1151
- 'eip155:42431', // Tempo Testnet
1152
- 'eip155:4217', // Tempo Mainnet
1153
- ];
1154
- // Check if it's a chain that should skip native tokens
1155
- if (!CHAIN_IDS_TO_SKIP_NATIVE_TOKEN.includes(chainId)) {
1156
- return false;
1157
- }
1158
- // Check if it's a native token (either by metadata type or assetId format)
1159
- const isNative = metadata.type === 'native' || assetId.includes('/slip44:');
1160
- return isNative;
1161
1162
  }, _AssetsController_tokenStandardToAssetType = function _AssetsController_tokenStandardToAssetType(tokenStandard) {
1162
1163
  switch (tokenStandard) {
1163
1164
  case 'native':