@metamask-previews/assets-controller 7.1.1-preview-ccdc8dcd5 → 7.1.2-preview-e5cef32c6
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 +14 -1
- package/dist/utils/native-assets.cjs +2 -1
- package/dist/utils/native-assets.cjs.map +1 -1
- package/dist/utils/native-assets.d.cts.map +1 -1
- package/dist/utils/native-assets.d.mts.map +1 -1
- package/dist/utils/native-assets.mjs +2 -1
- package/dist/utils/native-assets.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,8 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Bump `@metamask/transaction-controller` from `^65.3.0` to `^65.4.0` ([#8796](https://github.com/MetaMask/core/pull/8796))
|
|
13
|
+
|
|
14
|
+
## [7.1.2]
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Bump `@metamask/account-tree-controller` from `^7.3.0` to `^7.4.0` ([#8783](https://github.com/MetaMask/core/pull/8783))
|
|
19
|
+
- Bump `@metamask/assets-controllers` from `^108.0.0` to `^108.1.0` ([#8783](https://github.com/MetaMask/core/pull/8783))
|
|
20
|
+
|
|
10
21
|
### Fixed
|
|
11
22
|
|
|
23
|
+
- `buildNativeAssetsFromConstant` now normalizes each native asset ID via `normalizeAssetId`, ensuring ERC20 addresses are EIP-55 checksummed and consistent with IDs written by data sources ([#8789](https://github.com/MetaMask/core/pull/8789))
|
|
12
24
|
- `RpcDataSource` no longer writes `{ amount: "NaN" }` entries into `assetsBalance` when state holds malformed native metadata ([#8781](https://github.com/MetaMask/core/pull/8781))
|
|
13
25
|
- Existing native metadata in `assetsInfo` is now only reused when its `decimals` field is a finite, non-negative number (via a new `#hasValidDecimals` guard). Stale entries like `{ type: 'native', decimals: null, name: '', symbol: '' }` or `{ decimals: -1, ... }` are replaced with the chain-status stub (`{ type: 'native', symbol/name: chainStatus.nativeCurrency, decimals: 18 }`) so balance conversion has a usable `decimals` and consumers never see a negative `decimals` in `assetsInfo`.
|
|
14
26
|
- `decimals: 0` is treated as valid; `name` and `symbol` are not required.
|
|
@@ -489,7 +501,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
489
501
|
- Refactor `RpcDataSource` to delegate polling to `BalanceFetcher` and `TokenDetector` services ([#7709](https://github.com/MetaMask/core/pull/7709))
|
|
490
502
|
- Refactor `BalanceFetcher` and `TokenDetector` to extend `StaticIntervalPollingControllerOnly` for independent polling management ([#7709](https://github.com/MetaMask/core/pull/7709))
|
|
491
503
|
|
|
492
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@7.1.
|
|
504
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@7.1.2...HEAD
|
|
505
|
+
[7.1.2]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@7.1.1...@metamask/assets-controller@7.1.2
|
|
493
506
|
[7.1.1]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@7.1.0...@metamask/assets-controller@7.1.1
|
|
494
507
|
[7.1.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@7.0.1...@metamask/assets-controller@7.1.0
|
|
495
508
|
[7.0.1]: https://github.com/MetaMask/core/compare/@metamask/assets-controller@7.0.0...@metamask/assets-controller@7.0.1
|
|
@@ -4,6 +4,7 @@ exports.buildNativeAssetsFromApi = exports.buildNativeAssetsFromConstant = void
|
|
|
4
4
|
const assets_controllers_1 = require("@metamask/assets-controllers");
|
|
5
5
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
6
6
|
const utils_1 = require("@metamask/utils");
|
|
7
|
+
const normalizeAssetId_1 = require("./normalizeAssetId.cjs");
|
|
7
8
|
const CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';
|
|
8
9
|
/**
|
|
9
10
|
* Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
|
|
@@ -14,7 +15,7 @@ function buildNativeAssetsFromConstant() {
|
|
|
14
15
|
const nativeAssetsMap = {};
|
|
15
16
|
for (const nativeAssetId of Object.values(assets_controllers_1.SPOT_PRICES_SUPPORT_INFO)) {
|
|
16
17
|
const { chainId } = (0, utils_1.parseCaipAssetType)(nativeAssetId);
|
|
17
|
-
nativeAssetsMap[chainId] = nativeAssetId;
|
|
18
|
+
nativeAssetsMap[chainId] = (0, normalizeAssetId_1.normalizeAssetId)(nativeAssetId);
|
|
18
19
|
}
|
|
19
20
|
return nativeAssetsMap;
|
|
20
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-assets.cjs","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":";;;AAAA,qEAAwE;AACxE,iEAAoE;AACpE,2CAAqD;
|
|
1
|
+
{"version":3,"file":"native-assets.cjs","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":";;;AAAA,qEAAwE;AACxE,iEAAoE;AACpE,2CAAqD;AAGrD,6DAAsD;AAEtD,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAOlE;;;;GAIG;AACH,SAAgB,6BAA6B;IAI3C,MAAM,eAAe,GAAmC,EAAE,CAAC;IAC3D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,6CAAwB,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,0BAAkB,EAAC,aAAa,CAAC,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,GAAG,IAAA,mCAAgB,EAAC,aAAa,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAVD,sEAUC;AAED;;;;;;;;;GASG;AACI,KAAK,UAAU,wBAAwB;IAG5C,MAAM,eAAe,GAAG,6BAA6B,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GACV,MAAM,IAAA,yCAAsB,EAAC;YAC3B,GAAG,EAAE,mBAAmB;YACxB,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QAEL,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IACE,CAAC,KAAK,CAAC,OAAO;oBACd,CAAC,KAAK,CAAC,MAAM;oBACb,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;oBAChC,KAAK,CAAC,OAAO,GAAG,CAAC;oBACjB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,OAAO,EAAa,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClC,eAAe,CAAC,WAAW,CAAC;wBAC1B,UAAU,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAmB,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AArCD,4DAqCC","sourcesContent":["import { SPOT_PRICES_SUPPORT_INFO } from '@metamask/assets-controllers';\nimport { fetchWithErrorHandling } from '@metamask/controller-utils';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport type { Caip19AssetId, ChainId } from '../types';\nimport { normalizeAssetId } from './normalizeAssetId';\n\nconst CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';\n\ntype ChainIdNetworkEntry = {\n chainId: number;\n slip44?: number;\n};\n\n/**\n * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.\n *\n * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.\n */\nexport function buildNativeAssetsFromConstant(): Record<\n ChainId,\n Caip19AssetId\n> {\n const nativeAssetsMap: Record<ChainId, Caip19AssetId> = {};\n for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {\n const { chainId } = parseCaipAssetType(nativeAssetId);\n nativeAssetsMap[chainId] = normalizeAssetId(nativeAssetId);\n }\n return nativeAssetsMap;\n}\n\n/**\n * Fetches chain data from chainid.network and merges it with the seed\n * native asset map built from {@link buildNativeAssetsFromConstant}.\n *\n * Remote entries only fill gaps — chains already present in the seed map\n * are never overwritten. Invalid entries (missing/negative chainId or slip44)\n * are silently skipped.\n *\n * @returns The merged native asset map.\n */\nexport async function buildNativeAssetsFromApi(): Promise<\n Record<ChainId, Caip19AssetId>\n> {\n const nativeAssetsMap = buildNativeAssetsFromConstant();\n\n try {\n const chains: ChainIdNetworkEntry[] | undefined =\n await fetchWithErrorHandling({\n url: CHAINID_NETWORK_URL,\n timeout: 10_000,\n });\n\n if (chains && Array.isArray(chains)) {\n for (const chain of chains) {\n if (\n !chain.chainId ||\n !chain.slip44 ||\n !Number.isInteger(chain.chainId) ||\n chain.chainId < 1 ||\n !Number.isInteger(chain.slip44) ||\n chain.slip44 < 1\n ) {\n continue;\n }\n\n const caipChainId = `eip155:${chain.chainId}` as ChainId;\n if (!nativeAssetsMap[caipChainId]) {\n nativeAssetsMap[caipChainId] =\n `eip155:${chain.chainId}/slip44:${chain.slip44}` as Caip19AssetId;\n }\n }\n }\n } catch {\n // Non-fatal: caller should fall back to the seed map.\n }\n\n return nativeAssetsMap;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-assets.d.cts","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAiB;
|
|
1
|
+
{"version":3,"file":"native-assets.d.cts","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAiB;AAUvD;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CACrD,OAAO,EACP,aAAa,CACd,CAOA;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAC/B,CAmCA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-assets.d.mts","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAiB;
|
|
1
|
+
{"version":3,"file":"native-assets.d.mts","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAiB;AAUvD;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,MAAM,CACrD,OAAO,EACP,aAAa,CACd,CAOA;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAC/B,CAmCA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SPOT_PRICES_SUPPORT_INFO } from "@metamask/assets-controllers";
|
|
2
2
|
import { fetchWithErrorHandling } from "@metamask/controller-utils";
|
|
3
3
|
import { parseCaipAssetType } from "@metamask/utils";
|
|
4
|
+
import { normalizeAssetId } from "./normalizeAssetId.mjs";
|
|
4
5
|
const CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';
|
|
5
6
|
/**
|
|
6
7
|
* Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.
|
|
@@ -11,7 +12,7 @@ export function buildNativeAssetsFromConstant() {
|
|
|
11
12
|
const nativeAssetsMap = {};
|
|
12
13
|
for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {
|
|
13
14
|
const { chainId } = parseCaipAssetType(nativeAssetId);
|
|
14
|
-
nativeAssetsMap[chainId] = nativeAssetId;
|
|
15
|
+
nativeAssetsMap[chainId] = normalizeAssetId(nativeAssetId);
|
|
15
16
|
}
|
|
16
17
|
return nativeAssetsMap;
|
|
17
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-assets.mjs","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qCAAqC;AACxE,OAAO,EAAE,sBAAsB,EAAE,mCAAmC;AACpE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"native-assets.mjs","sourceRoot":"","sources":["../../src/utils/native-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,qCAAqC;AACxE,OAAO,EAAE,sBAAsB,EAAE,mCAAmC;AACpE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB;AAGrD,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AAEtD,MAAM,mBAAmB,GAAG,qCAAqC,CAAC;AAOlE;;;;GAIG;AACH,MAAM,UAAU,6BAA6B;IAI3C,MAAM,eAAe,GAAmC,EAAE,CAAC;IAC3D,KAAK,MAAM,aAAa,IAAI,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAG5C,MAAM,eAAe,GAAG,6BAA6B,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GACV,MAAM,sBAAsB,CAAC;YAC3B,GAAG,EAAE,mBAAmB;YACxB,OAAO,EAAE,KAAM;SAChB,CAAC,CAAC;QAEL,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IACE,CAAC,KAAK,CAAC,OAAO;oBACd,CAAC,KAAK,CAAC,MAAM;oBACb,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;oBAChC,KAAK,CAAC,OAAO,GAAG,CAAC;oBACjB,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,UAAU,KAAK,CAAC,OAAO,EAAa,CAAC;gBACzD,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClC,eAAe,CAAC,WAAW,CAAC;wBAC1B,UAAU,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC,MAAM,EAAmB,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC","sourcesContent":["import { SPOT_PRICES_SUPPORT_INFO } from '@metamask/assets-controllers';\nimport { fetchWithErrorHandling } from '@metamask/controller-utils';\nimport { parseCaipAssetType } from '@metamask/utils';\n\nimport type { Caip19AssetId, ChainId } from '../types';\nimport { normalizeAssetId } from './normalizeAssetId';\n\nconst CHAINID_NETWORK_URL = 'https://chainid.network/chains.json';\n\ntype ChainIdNetworkEntry = {\n chainId: number;\n slip44?: number;\n};\n\n/**\n * Builds a native asset map from the hardcoded SPOT_PRICES_SUPPORT_INFO constant.\n *\n * @returns A record mapping CAIP-2 chain IDs to their CAIP-19 native asset IDs.\n */\nexport function buildNativeAssetsFromConstant(): Record<\n ChainId,\n Caip19AssetId\n> {\n const nativeAssetsMap: Record<ChainId, Caip19AssetId> = {};\n for (const nativeAssetId of Object.values(SPOT_PRICES_SUPPORT_INFO)) {\n const { chainId } = parseCaipAssetType(nativeAssetId);\n nativeAssetsMap[chainId] = normalizeAssetId(nativeAssetId);\n }\n return nativeAssetsMap;\n}\n\n/**\n * Fetches chain data from chainid.network and merges it with the seed\n * native asset map built from {@link buildNativeAssetsFromConstant}.\n *\n * Remote entries only fill gaps — chains already present in the seed map\n * are never overwritten. Invalid entries (missing/negative chainId or slip44)\n * are silently skipped.\n *\n * @returns The merged native asset map.\n */\nexport async function buildNativeAssetsFromApi(): Promise<\n Record<ChainId, Caip19AssetId>\n> {\n const nativeAssetsMap = buildNativeAssetsFromConstant();\n\n try {\n const chains: ChainIdNetworkEntry[] | undefined =\n await fetchWithErrorHandling({\n url: CHAINID_NETWORK_URL,\n timeout: 10_000,\n });\n\n if (chains && Array.isArray(chains)) {\n for (const chain of chains) {\n if (\n !chain.chainId ||\n !chain.slip44 ||\n !Number.isInteger(chain.chainId) ||\n chain.chainId < 1 ||\n !Number.isInteger(chain.slip44) ||\n chain.slip44 < 1\n ) {\n continue;\n }\n\n const caipChainId = `eip155:${chain.chainId}` as ChainId;\n if (!nativeAssetsMap[caipChainId]) {\n nativeAssetsMap[caipChainId] =\n `eip155:${chain.chainId}/slip44:${chain.slip44}` as Caip19AssetId;\n }\n }\n }\n } catch {\n // Non-fatal: caller should fall back to the seed map.\n }\n\n return nativeAssetsMap;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/assets-controller",
|
|
3
|
-
"version": "7.1.
|
|
3
|
+
"version": "7.1.2-preview-e5cef32c6",
|
|
4
4
|
"description": "Tracks assets balances/prices and handles token detection across all digital assets",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
"@ethereumjs/util": "^9.1.0",
|
|
57
57
|
"@ethersproject/abi": "^5.7.0",
|
|
58
58
|
"@ethersproject/providers": "^5.7.0",
|
|
59
|
-
"@metamask/account-tree-controller": "^7.
|
|
59
|
+
"@metamask/account-tree-controller": "^7.4.0",
|
|
60
60
|
"@metamask/accounts-controller": "^38.1.1",
|
|
61
|
-
"@metamask/assets-controllers": "^108.
|
|
61
|
+
"@metamask/assets-controllers": "^108.1.0",
|
|
62
62
|
"@metamask/base-controller": "^9.1.0",
|
|
63
63
|
"@metamask/client-controller": "^1.0.1",
|
|
64
64
|
"@metamask/controller-utils": "^12.1.0",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"@metamask/preferences-controller": "^23.1.0",
|
|
77
77
|
"@metamask/snaps-controllers": "^19.0.0",
|
|
78
78
|
"@metamask/snaps-utils": "^12.1.2",
|
|
79
|
-
"@metamask/transaction-controller": "^65.
|
|
79
|
+
"@metamask/transaction-controller": "^65.4.0",
|
|
80
80
|
"@metamask/utils": "^11.9.0",
|
|
81
81
|
"async-mutex": "^0.5.0",
|
|
82
82
|
"bignumber.js": "^9.1.2",
|