@metamask/assets-controller 7.1.0 → 7.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.mts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,OAAO,EAER,oBAAgB;AA+BjB;;;;;;;;;GASG;AACH,eAAO,MAAM,+BAA+B,EAAE,WAAW,CACvD,OAAO,EACP,SAAS,aAAa,EAAE,CAKxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kCAAkC,EAAE,WAAW,CAAC,OAAO,CAEnE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAKlE,CAAC;AAEL;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,OAAO,GACf,SAAS,aAAa,EAAE,CAE1B;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,GACrB,aAAa,GAAG,SAAS,CAE3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAQ7E"}
1
+ {"version":3,"file":"defaults.d.mts","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,OAAO,EAER,oBAAgB;AAuCjB;;;;;;;;;GASG;AACH,eAAO,MAAM,+BAA+B,EAAE,WAAW,CACvD,OAAO,EACP,SAAS,aAAa,EAAE,CAKxB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kCAAkC,EAAE,WAAW,CAAC,OAAO,CAEnE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAKlE,CAAC;AAEL;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,OAAO,GACf,SAAS,aAAa,EAAE,CAE1B;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,GACrB,aAAa,GAAG,SAAS,CAE3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAQ7E"}
package/dist/defaults.mjs CHANGED
@@ -1,8 +1,16 @@
1
1
  /**
2
- * Address of MetaMask USD (mUSD) — same canonical contract address
3
- * across every chain we deploy it to.
2
+ * EIP-55 checksummed address of MetaMask USD (mUSD) — same canonical contract
3
+ * address across every chain we deploy it to.
4
+ *
5
+ * Must be checksummed so that the CAIP-19 asset IDs produced by
6
+ * `musdAssetId()` (and therefore the keys seeded into `assetsInfo` by
7
+ * `buildDefaultAssetsInfo()`) match the keys written by data sources, which
8
+ * always pass IDs through `normalizeAssetId` → `toChecksumAddress` before
9
+ * emitting a `DataResponse`. Using a lowercase address would cause the
10
+ * pre-seeded keys to diverge from the data-source keys, leaving a duplicate
11
+ * entry in `assetsInfo` after the first balance or token-data poll.
4
12
  */
5
- const MUSD_ADDRESS = '0xaca92e438df0b2401ff60da7e4337b687a2435da';
13
+ const MUSD_ADDRESS = '0xacA92E438df0B2401fF60dA7E4337B687a2435DA';
6
14
  /**
7
15
  * Hardcoded metadata for MetaMask USD. Pre-seeding this in default
8
16
  * state makes the token immediately renderable in the UI before any
@@ -46,13 +54,13 @@ export const DEFAULT_TRACKED_ASSETS_BY_CHAIN = new Map([
46
54
  export const CHAINS_WITH_DEFAULT_TRACKED_ASSETS = new Set(DEFAULT_TRACKED_ASSETS_BY_CHAIN.keys());
47
55
  /**
48
56
  * Pre-seeded metadata for every default tracked asset, keyed by the
49
- * lowercase CAIP-19 id so callers can look up without worrying about
50
- * checksum case.
57
+ * checksummed CAIP-19 id. All callers must pass a checksummed asset ID;
58
+ * use `normalizeAssetId` to ensure the correct format before looking up.
51
59
  */
52
60
  export const DEFAULT_ASSET_METADATA = new Map([
53
- [musdAssetId('eip155:1').toLowerCase(), MUSD_METADATA],
54
- [musdAssetId('eip155:59144').toLowerCase(), MUSD_METADATA],
55
- [musdAssetId('eip155:143').toLowerCase(), MUSD_METADATA],
61
+ [musdAssetId('eip155:1'), MUSD_METADATA],
62
+ [musdAssetId('eip155:59144'), MUSD_METADATA],
63
+ [musdAssetId('eip155:143'), MUSD_METADATA],
56
64
  ]);
57
65
  /**
58
66
  * Return the default tracked assets for a CAIP-2 chain id. Empty when
@@ -67,12 +75,12 @@ export function getDefaultTrackedAssetsForChain(chainId) {
67
75
  /**
68
76
  * Look up pre-seeded metadata for a default tracked asset.
69
77
  *
70
- * @param assetId - CAIP-19 asset id (any case).
78
+ * @param assetId - CAIP-19 asset id (must be EIP-55 checksummed for EVM tokens).
71
79
  * @returns The metadata if the asset is a default tracked asset,
72
80
  * otherwise `undefined`.
73
81
  */
74
82
  export function getDefaultAssetMetadata(assetId) {
75
- return DEFAULT_ASSET_METADATA.get(assetId.toLowerCase());
83
+ return DEFAULT_ASSET_METADATA.get(assetId);
76
84
  }
77
85
  /**
78
86
  * Build the `assetsInfo` map to use in default controller state —
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.mjs","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAElE;;;;GAIG;AACH,MAAM,aAAa,GAA0B;IAC3C,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,OAAgB;IACnC,OAAO,GAAG,OAAO,UAAU,YAAY,EAAmB,CAAC;AAC7D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAGxC,IAAI,GAAG,CAAoC;IAC7C,CAAC,UAAqB,EAAE,CAAC,WAAW,CAAC,UAAqB,CAAC,CAAC,CAAC;IAC7D,CAAC,cAAyB,EAAE,CAAC,WAAW,CAAC,cAAyB,CAAC,CAAC,CAAC;IACrE,CAAC,YAAuB,EAAE,CAAC,WAAW,CAAC,YAAuB,CAAC,CAAC,CAAC;CAClE,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAyB,IAAI,GAAG,CAC7E,+BAA+B,CAAC,IAAI,EAAE,CACvC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GACjC,IAAI,GAAG,CAAwB;IAC7B,CAAC,WAAW,CAAC,UAAqB,CAAC,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC;IACjE,CAAC,WAAW,CAAC,cAAyB,CAAC,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC;IACrE,CAAC,WAAW,CAAC,YAAuB,CAAC,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC;CACpE,CAAC,CAAC;AAEL;;;;;;GAMG;AACH,MAAM,UAAU,+BAA+B,CAC7C,OAAgB;IAEhB,OAAO,+BAA+B,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAsB;IAEtB,OAAO,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,IAAI,GAAyC,EAAE,CAAC;IACtD,KAAK,MAAM,QAAQ,IAAI,+BAA+B,CAAC,MAAM,EAAE,EAAE,CAAC;QAChE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import type {\n AssetMetadata,\n Caip19AssetId,\n ChainId,\n FungibleAssetMetadata,\n} from './types';\n\n/**\n * Address of MetaMask USD (mUSD) — same canonical contract address\n * across every chain we deploy it to.\n */\nconst MUSD_ADDRESS = '0xaca92e438df0b2401ff60da7e4337b687a2435da';\n\n/**\n * Hardcoded metadata for MetaMask USD. Pre-seeding this in default\n * state makes the token immediately renderable in the UI before any\n * on-chain balance has been fetched.\n */\nconst MUSD_METADATA: FungibleAssetMetadata = {\n type: 'erc20',\n symbol: 'mUSD',\n name: 'MetaMask USD',\n decimals: 6,\n};\n\n/**\n * Build the CAIP-19 asset ID for the mUSD ERC-20 token on a given EVM\n * chain.\n *\n * @param chainId - The CAIP-2 chain identifier (e.g. `eip155:1`).\n * @returns The CAIP-19 asset ID for mUSD on that chain.\n */\nfunction musdAssetId(chainId: ChainId): Caip19AssetId {\n return `${chainId}/erc20:${MUSD_ADDRESS}` as Caip19AssetId;\n}\n\n/**\n * Default tracked tokens — assets the controller surfaces in state for\n * every account on the listed chain even when the on-chain balance is\n * still zero. Keyed by CAIP-2 chain id.\n *\n * To extend mUSD coverage to a new chain, add an entry here. To add a\n * different default token, append its CAIP-19 asset id to the\n * appropriate chain entry and provide its metadata in\n * {@link DEFAULT_ASSET_METADATA}.\n */\nexport const DEFAULT_TRACKED_ASSETS_BY_CHAIN: ReadonlyMap<\n ChainId,\n readonly Caip19AssetId[]\n> = new Map<ChainId, readonly Caip19AssetId[]>([\n ['eip155:1' as ChainId, [musdAssetId('eip155:1' as ChainId)]],\n ['eip155:59144' as ChainId, [musdAssetId('eip155:59144' as ChainId)]],\n ['eip155:143' as ChainId, [musdAssetId('eip155:143' as ChainId)]],\n]);\n\n/**\n * Chains that have at least one default tracked asset. Useful for\n * quickly answering \"should we seed defaults for this chain?\".\n */\nexport const CHAINS_WITH_DEFAULT_TRACKED_ASSETS: ReadonlySet<ChainId> = new Set(\n DEFAULT_TRACKED_ASSETS_BY_CHAIN.keys(),\n);\n\n/**\n * Pre-seeded metadata for every default tracked asset, keyed by the\n * lowercase CAIP-19 id so callers can look up without worrying about\n * checksum case.\n */\nexport const DEFAULT_ASSET_METADATA: ReadonlyMap<string, AssetMetadata> =\n new Map<string, AssetMetadata>([\n [musdAssetId('eip155:1' as ChainId).toLowerCase(), MUSD_METADATA],\n [musdAssetId('eip155:59144' as ChainId).toLowerCase(), MUSD_METADATA],\n [musdAssetId('eip155:143' as ChainId).toLowerCase(), MUSD_METADATA],\n ]);\n\n/**\n * Return the default tracked assets for a CAIP-2 chain id. Empty when\n * the chain has no defaults.\n *\n * @param chainId - CAIP-2 chain id to look up.\n * @returns The default asset ids for that chain.\n */\nexport function getDefaultTrackedAssetsForChain(\n chainId: ChainId,\n): readonly Caip19AssetId[] {\n return DEFAULT_TRACKED_ASSETS_BY_CHAIN.get(chainId) ?? [];\n}\n\n/**\n * Look up pre-seeded metadata for a default tracked asset.\n *\n * @param assetId - CAIP-19 asset id (any case).\n * @returns The metadata if the asset is a default tracked asset,\n * otherwise `undefined`.\n */\nexport function getDefaultAssetMetadata(\n assetId: Caip19AssetId,\n): AssetMetadata | undefined {\n return DEFAULT_ASSET_METADATA.get(assetId.toLowerCase());\n}\n\n/**\n * Build the `assetsInfo` map to use in default controller state —\n * pre-populated with metadata for every default tracked asset across\n * every default tracked chain. This is what makes `assetsInfo[mUSD]`\n * exist from the very first render, before any RPC poll completes.\n *\n * @returns A new map keyed by CAIP-19 id (canonical case from the\n * defaults registry) with the corresponding metadata.\n */\nexport function buildDefaultAssetsInfo(): Record<Caip19AssetId, AssetMetadata> {\n const info: Record<Caip19AssetId, AssetMetadata> = {};\n for (const assetIds of DEFAULT_TRACKED_ASSETS_BY_CHAIN.values()) {\n for (const assetId of assetIds) {\n info[assetId] = MUSD_METADATA;\n }\n }\n return info;\n}\n"]}
1
+ {"version":3,"file":"defaults.mjs","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;GAWG;AACH,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAElE;;;;GAIG;AACH,MAAM,aAAa,GAA0B;IAC3C,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,OAAgB;IACnC,OAAO,GAAG,OAAO,UAAU,YAAY,EAAmB,CAAC;AAC7D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAGxC,IAAI,GAAG,CAAoC;IAC7C,CAAC,UAAqB,EAAE,CAAC,WAAW,CAAC,UAAqB,CAAC,CAAC,CAAC;IAC7D,CAAC,cAAyB,EAAE,CAAC,WAAW,CAAC,cAAyB,CAAC,CAAC,CAAC;IACrE,CAAC,YAAuB,EAAE,CAAC,WAAW,CAAC,YAAuB,CAAC,CAAC,CAAC;CAClE,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAyB,IAAI,GAAG,CAC7E,+BAA+B,CAAC,IAAI,EAAE,CACvC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GACjC,IAAI,GAAG,CAAwB;IAC7B,CAAC,WAAW,CAAC,UAAqB,CAAC,EAAE,aAAa,CAAC;IACnD,CAAC,WAAW,CAAC,cAAyB,CAAC,EAAE,aAAa,CAAC;IACvD,CAAC,WAAW,CAAC,YAAuB,CAAC,EAAE,aAAa,CAAC;CACtD,CAAC,CAAC;AAEL;;;;;;GAMG;AACH,MAAM,UAAU,+BAA+B,CAC7C,OAAgB;IAEhB,OAAO,+BAA+B,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAsB;IAEtB,OAAO,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,IAAI,GAAyC,EAAE,CAAC;IACtD,KAAK,MAAM,QAAQ,IAAI,+BAA+B,CAAC,MAAM,EAAE,EAAE,CAAC;QAChE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import type {\n AssetMetadata,\n Caip19AssetId,\n ChainId,\n FungibleAssetMetadata,\n} from './types';\n\n/**\n * EIP-55 checksummed address of MetaMask USD (mUSD) — same canonical contract\n * address across every chain we deploy it to.\n *\n * Must be checksummed so that the CAIP-19 asset IDs produced by\n * `musdAssetId()` (and therefore the keys seeded into `assetsInfo` by\n * `buildDefaultAssetsInfo()`) match the keys written by data sources, which\n * always pass IDs through `normalizeAssetId` → `toChecksumAddress` before\n * emitting a `DataResponse`. Using a lowercase address would cause the\n * pre-seeded keys to diverge from the data-source keys, leaving a duplicate\n * entry in `assetsInfo` after the first balance or token-data poll.\n */\nconst MUSD_ADDRESS = '0xacA92E438df0B2401fF60dA7E4337B687a2435DA';\n\n/**\n * Hardcoded metadata for MetaMask USD. Pre-seeding this in default\n * state makes the token immediately renderable in the UI before any\n * on-chain balance has been fetched.\n */\nconst MUSD_METADATA: FungibleAssetMetadata = {\n type: 'erc20',\n symbol: 'mUSD',\n name: 'MetaMask USD',\n decimals: 6,\n};\n\n/**\n * Build the CAIP-19 asset ID for the mUSD ERC-20 token on a given EVM\n * chain.\n *\n * @param chainId - The CAIP-2 chain identifier (e.g. `eip155:1`).\n * @returns The CAIP-19 asset ID for mUSD on that chain.\n */\nfunction musdAssetId(chainId: ChainId): Caip19AssetId {\n return `${chainId}/erc20:${MUSD_ADDRESS}` as Caip19AssetId;\n}\n\n/**\n * Default tracked tokens — assets the controller surfaces in state for\n * every account on the listed chain even when the on-chain balance is\n * still zero. Keyed by CAIP-2 chain id.\n *\n * To extend mUSD coverage to a new chain, add an entry here. To add a\n * different default token, append its CAIP-19 asset id to the\n * appropriate chain entry and provide its metadata in\n * {@link DEFAULT_ASSET_METADATA}.\n */\nexport const DEFAULT_TRACKED_ASSETS_BY_CHAIN: ReadonlyMap<\n ChainId,\n readonly Caip19AssetId[]\n> = new Map<ChainId, readonly Caip19AssetId[]>([\n ['eip155:1' as ChainId, [musdAssetId('eip155:1' as ChainId)]],\n ['eip155:59144' as ChainId, [musdAssetId('eip155:59144' as ChainId)]],\n ['eip155:143' as ChainId, [musdAssetId('eip155:143' as ChainId)]],\n]);\n\n/**\n * Chains that have at least one default tracked asset. Useful for\n * quickly answering \"should we seed defaults for this chain?\".\n */\nexport const CHAINS_WITH_DEFAULT_TRACKED_ASSETS: ReadonlySet<ChainId> = new Set(\n DEFAULT_TRACKED_ASSETS_BY_CHAIN.keys(),\n);\n\n/**\n * Pre-seeded metadata for every default tracked asset, keyed by the\n * checksummed CAIP-19 id. All callers must pass a checksummed asset ID;\n * use `normalizeAssetId` to ensure the correct format before looking up.\n */\nexport const DEFAULT_ASSET_METADATA: ReadonlyMap<string, AssetMetadata> =\n new Map<string, AssetMetadata>([\n [musdAssetId('eip155:1' as ChainId), MUSD_METADATA],\n [musdAssetId('eip155:59144' as ChainId), MUSD_METADATA],\n [musdAssetId('eip155:143' as ChainId), MUSD_METADATA],\n ]);\n\n/**\n * Return the default tracked assets for a CAIP-2 chain id. Empty when\n * the chain has no defaults.\n *\n * @param chainId - CAIP-2 chain id to look up.\n * @returns The default asset ids for that chain.\n */\nexport function getDefaultTrackedAssetsForChain(\n chainId: ChainId,\n): readonly Caip19AssetId[] {\n return DEFAULT_TRACKED_ASSETS_BY_CHAIN.get(chainId) ?? [];\n}\n\n/**\n * Look up pre-seeded metadata for a default tracked asset.\n *\n * @param assetId - CAIP-19 asset id (must be EIP-55 checksummed for EVM tokens).\n * @returns The metadata if the asset is a default tracked asset,\n * otherwise `undefined`.\n */\nexport function getDefaultAssetMetadata(\n assetId: Caip19AssetId,\n): AssetMetadata | undefined {\n return DEFAULT_ASSET_METADATA.get(assetId);\n}\n\n/**\n * Build the `assetsInfo` map to use in default controller state —\n * pre-populated with metadata for every default tracked asset across\n * every default tracked chain. This is what makes `assetsInfo[mUSD]`\n * exist from the very first render, before any RPC poll completes.\n *\n * @returns A new map keyed by CAIP-19 id (canonical case from the\n * defaults registry) with the corresponding metadata.\n */\nexport function buildDefaultAssetsInfo(): Record<Caip19AssetId, AssetMetadata> {\n const info: Record<Caip19AssetId, AssetMetadata> = {};\n for (const assetIds of DEFAULT_TRACKED_ASSETS_BY_CHAIN.values()) {\n for (const assetId of assetIds) {\n info[assetId] = MUSD_METADATA;\n }\n }\n return info;\n}\n"]}
@@ -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;AAIrD,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,aAAa,CAAC;IAC3C,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';\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] = 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
+ {"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;AASvD;;;;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
+ {"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;AASvD;;;;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
+ {"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;AAIrD,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,aAAa,CAAC;IAC3C,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';\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] = 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
+ {"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/assets-controller",
3
- "version": "7.1.0",
3
+ "version": "7.1.2",
4
4
  "description": "Tracks assets balances/prices and handles token detection across all digital assets",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -56,19 +56,19 @@
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.3.0",
60
- "@metamask/accounts-controller": "^38.1.0",
61
- "@metamask/assets-controllers": "^107.0.0",
59
+ "@metamask/account-tree-controller": "^7.4.0",
60
+ "@metamask/accounts-controller": "^38.1.1",
61
+ "@metamask/assets-controllers": "^108.1.0",
62
62
  "@metamask/base-controller": "^9.1.0",
63
63
  "@metamask/client-controller": "^1.0.1",
64
- "@metamask/controller-utils": "^12.0.0",
64
+ "@metamask/controller-utils": "^12.1.0",
65
65
  "@metamask/core-backend": "^6.2.2",
66
66
  "@metamask/keyring-api": "^23.1.0",
67
67
  "@metamask/keyring-controller": "^25.5.0",
68
68
  "@metamask/keyring-internal-api": "^11.0.1",
69
69
  "@metamask/keyring-snap-client": "^9.0.2",
70
70
  "@metamask/messenger": "^1.2.0",
71
- "@metamask/network-controller": "^31.1.0",
71
+ "@metamask/network-controller": "^32.0.0",
72
72
  "@metamask/network-enablement-controller": "^5.1.1",
73
73
  "@metamask/permission-controller": "^13.1.1",
74
74
  "@metamask/phishing-controller": "^17.1.2",