@metamask-previews/client-utils 2.0.1-preview-e57e5c3dc → 2.0.1-preview-9efd0b754

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
@@ -7,6 +7,13 @@ 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
+ - Fall back to a zero-address ERC-20 CAIP-19 asset id (`eip155:<chainId>/erc20:0x000…000`) in `resolveNativeAssetId` and `getNativeAsset` when an EVM native has no SLIP-44 coin type (previously `undefined`) ([#9833](https://github.com/MetaMask/core/pull/9833))
13
+ - `resolveNativeAssetId` consults chainlist via `getNativeAsset` before that fallback so symbol-less calls stay aligned with `getNativeAsset`
14
+ - Non-EVM chains still return `undefined` when no slip44 entry is found
15
+ - Bump `@metamask/transaction-controller` from `^69.5.0` to `^69.5.2` ([#9798](https://github.com/MetaMask/core/pull/9798), [#9823](https://github.com/MetaMask/core/pull/9823))
16
+
10
17
  ## [2.0.1]
11
18
 
12
19
  ### Changed
@@ -18,14 +18,12 @@ const slip44BySymbol = (() => {
18
18
  coinTypeBySymbol.set(normalizedSymbol, coinType);
19
19
  }
20
20
  }
21
- const maticCoinType = coinTypeBySymbol.get('MATIC');
22
- if (maticCoinType && !coinTypeBySymbol.has('POL')) {
23
- coinTypeBySymbol.set('POL', maticCoinType);
24
- }
25
21
  return coinTypeBySymbol;
26
22
  })();
27
23
  function getCoinType(symbol) {
28
- return slip44BySymbol.get(symbol.toUpperCase());
24
+ const normalizedSymbol = symbol.toUpperCase();
25
+ return (slip44BySymbol.get(normalizedSymbol) ??
26
+ (normalizedSymbol === 'POL' ? slip44BySymbol.get('MATIC') : undefined));
29
27
  }
30
28
  /**
31
29
  * Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.
@@ -53,23 +51,27 @@ function formatChainIdToCaip(chainId) {
53
51
  }
54
52
  exports.formatChainIdToCaip = formatChainIdToCaip;
55
53
  function resolveNativeAssetId(chainId, symbol) {
56
- if (chainId === undefined || !symbol) {
54
+ if (chainId === undefined) {
57
55
  return undefined;
58
56
  }
59
57
  const caipChainId = formatChainIdToCaip(chainId);
60
58
  if (!caipChainId) {
61
59
  return undefined;
62
60
  }
63
- const assetReference = getCoinType(symbol);
64
- if (!assetReference) {
65
- return undefined;
66
- }
67
61
  const { namespace, reference } = (0, utils_1.parseCaipChainId)(caipChainId);
68
- return (0, utils_1.toCaipAssetType)(namespace, reference, 'slip44', assetReference);
62
+ const assetReference = symbol ? getCoinType(symbol) : undefined;
63
+ if (assetReference) {
64
+ return (0, utils_1.toCaipAssetType)(namespace, reference, 'slip44', assetReference);
65
+ }
66
+ if (namespace === utils_1.KnownCaipNamespace.Eip155) {
67
+ return (getNativeAsset(caipChainId)?.assetId ??
68
+ (0, utils_1.toCaipAssetType)(namespace, reference, 'erc20', constants_js_1.nativeTokenAddress));
69
+ }
70
+ return undefined;
69
71
  }
70
72
  exports.resolveNativeAssetId = resolveNativeAssetId;
71
73
  /**
72
- * Resolves EVM native symbol, decimals, and slip44 asset id for a chain.
74
+ * Resolves EVM native symbol, decimals, and CAIP asset id for a chain.
73
75
  * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to
74
76
  * `@metamask/slip44` by native symbol.
75
77
  *
@@ -93,13 +95,13 @@ function getNativeAsset(chainId) {
93
95
  const assetReference = typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType
94
96
  ? String(slip44)
95
97
  : getCoinType(nativeCurrency.symbol);
96
- if (!assetReference) {
97
- return undefined;
98
- }
98
+ const assetId = assetReference
99
+ ? (0, utils_1.toCaipAssetType)(namespace, reference, 'slip44', assetReference)
100
+ : (0, utils_1.toCaipAssetType)(namespace, reference, 'erc20', constants_js_1.nativeTokenAddress);
99
101
  return {
100
102
  symbol: nativeCurrency.symbol,
101
103
  decimals: nativeCurrency.decimals ?? constants_js_1.nativeTokenDecimals,
102
- assetId: (0, utils_1.toCaipAssetType)(namespace, reference, 'slip44', assetReference),
104
+ assetId,
103
105
  };
104
106
  }
105
107
  exports.getNativeAsset = getNativeAsset;
@@ -1 +1 @@
1
- {"version":3,"file":"caip.cjs","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumHexAddress } from '@metamask/controller-utils';\n// @ts-expect-error: No type definitions for '@metamask/slip44'\nimport slip44data from '@metamask/slip44';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport {\n isCaipAssetType,\n isStrictHexString,\n KnownCaipNamespace,\n parseCaipChainId,\n toCaipAssetType,\n} from '@metamask/utils';\nimport { getChainById } from 'eth-chainlist';\n\nimport { nativeTokenAddress, nativeTokenDecimals } from '../constants.js';\n\nconst slip44BySymbol = ((): Map<string, string> => {\n const coinTypeBySymbol = new Map<string, string>();\n\n for (const [coinType, entry] of Object.entries(\n slip44data as Record<string, { symbol: string }>,\n )) {\n const normalizedSymbol = entry.symbol.toUpperCase();\n\n if (!coinTypeBySymbol.has(normalizedSymbol)) {\n coinTypeBySymbol.set(normalizedSymbol, coinType);\n }\n }\n\n const maticCoinType = coinTypeBySymbol.get('MATIC');\n if (maticCoinType && !coinTypeBySymbol.has('POL')) {\n coinTypeBySymbol.set('POL', maticCoinType);\n }\n\n return coinTypeBySymbol;\n})();\n\nfunction getCoinType(symbol: string): string | undefined {\n return slip44BySymbol.get(symbol.toUpperCase());\n}\n\n/**\n * Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.\n * Only EVM (eip155) chains are normalized here; CAIP ids are returned as-is.\n *\n * @param chainId - Hex (`0x1`), numeric, decimal string, or CAIP chain id.\n * @returns The CAIP-2 chain id, or `undefined` when it can't be normalized.\n */\nexport function formatChainIdToCaip(\n chainId: string | number,\n): CaipChainId | undefined {\n if (typeof chainId === 'number') {\n return `eip155:${chainId}`;\n }\n\n if (chainId.includes(':')) {\n return chainId as CaipChainId;\n }\n\n if (chainId.startsWith('0x')) {\n const reference = Number.parseInt(chainId, 16);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n }\n\n if (chainId === '') {\n return undefined;\n }\n\n const reference = Number(chainId);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n}\n\nexport function resolveNativeAssetId(\n chainId: string | number | undefined,\n symbol: string | undefined,\n): CaipAssetType | undefined {\n if (chainId === undefined || !symbol) {\n return undefined;\n }\n\n const caipChainId = formatChainIdToCaip(chainId);\n\n if (!caipChainId) {\n return undefined;\n }\n\n const assetReference = getCoinType(symbol);\n\n if (!assetReference) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n\n return toCaipAssetType(namespace, reference, 'slip44', assetReference);\n}\n\n/**\n * Resolves EVM native symbol, decimals, and slip44 asset id for a chain.\n * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to\n * `@metamask/slip44` by native symbol.\n *\n * @param chainId - CAIP-2 chain id (eip155 only).\n * @returns Native asset metadata, or undefined when it cannot be resolved.\n */\nexport function getNativeAsset(chainId: CaipChainId):\n | {\n symbol: string;\n decimals: number;\n assetId: CaipAssetType;\n }\n | undefined {\n const { namespace, reference } = parseCaipChainId(chainId);\n if (namespace !== KnownCaipNamespace.Eip155) {\n return undefined;\n }\n\n const chain = getChainById(Number(reference));\n if (!chain) {\n return undefined;\n }\n\n const { nativeCurrency, slip44 } = chain;\n if (!nativeCurrency?.symbol) {\n return undefined;\n }\n\n const slip44TestnetCoinType = 1;\n const assetReference =\n typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType\n ? String(slip44)\n : getCoinType(nativeCurrency.symbol);\n\n if (!assetReference) {\n return undefined;\n }\n\n return {\n symbol: nativeCurrency.symbol,\n decimals: nativeCurrency.decimals ?? nativeTokenDecimals,\n assetId: toCaipAssetType(namespace, reference, 'slip44', assetReference),\n };\n}\n\nfunction isNativeAddress(address: string): boolean {\n const normalized = address.toLowerCase();\n return (\n normalized === nativeTokenAddress ||\n normalized === '0x0' ||\n /^0x0+$/u.test(normalized)\n );\n}\n\n/**\n * Encodes an EVM token address + chain id into a CAIP-19 asset id.\n *\n * @param address - Hex contract address, native sentinel, or CAIP asset id.\n * @param chainId - CAIP-2 or hex chain id.\n * @returns The CAIP-19 asset id, or `undefined` when it can't be encoded.\n */\nexport function formatAddressToAssetId(\n address: Hex | CaipAssetType | string,\n chainId?: CaipChainId | Hex,\n): CaipAssetType | undefined {\n if (isCaipAssetType(address)) {\n return address;\n }\n\n const caipChainId = chainId ? formatChainIdToCaip(chainId) : undefined;\n\n if (!caipChainId) {\n return undefined;\n }\n\n if (isNativeAddress(address)) {\n return undefined;\n }\n\n const checksummedAddress = toChecksumHexAddress(address);\n\n if (!isStrictHexString(checksummedAddress)) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n\n return toCaipAssetType(namespace, reference, 'erc20', checksummedAddress);\n}\n"]}
1
+ {"version":3,"file":"caip.cjs","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumHexAddress } from '@metamask/controller-utils';\n// @ts-expect-error: No type definitions for '@metamask/slip44'\nimport slip44data from '@metamask/slip44';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport {\n isCaipAssetType,\n isStrictHexString,\n KnownCaipNamespace,\n parseCaipChainId,\n toCaipAssetType,\n} from '@metamask/utils';\nimport { getChainById } from 'eth-chainlist';\n\nimport { nativeTokenAddress, nativeTokenDecimals } from '../constants.js';\n\nconst slip44BySymbol = ((): Map<string, string> => {\n const coinTypeBySymbol = new Map<string, string>();\n\n for (const [coinType, entry] of Object.entries(\n slip44data as Record<string, { symbol: string }>,\n )) {\n const normalizedSymbol = entry.symbol.toUpperCase();\n\n if (!coinTypeBySymbol.has(normalizedSymbol)) {\n coinTypeBySymbol.set(normalizedSymbol, coinType);\n }\n }\n\n return coinTypeBySymbol;\n})();\n\nfunction getCoinType(symbol: string): string | undefined {\n const normalizedSymbol = symbol.toUpperCase();\n return (\n slip44BySymbol.get(normalizedSymbol) ??\n (normalizedSymbol === 'POL' ? slip44BySymbol.get('MATIC') : undefined)\n );\n}\n\n/**\n * Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.\n * Only EVM (eip155) chains are normalized here; CAIP ids are returned as-is.\n *\n * @param chainId - Hex (`0x1`), numeric, decimal string, or CAIP chain id.\n * @returns The CAIP-2 chain id, or `undefined` when it can't be normalized.\n */\nexport function formatChainIdToCaip(\n chainId: string | number,\n): CaipChainId | undefined {\n if (typeof chainId === 'number') {\n return `eip155:${chainId}`;\n }\n\n if (chainId.includes(':')) {\n return chainId as CaipChainId;\n }\n\n if (chainId.startsWith('0x')) {\n const reference = Number.parseInt(chainId, 16);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n }\n\n if (chainId === '') {\n return undefined;\n }\n\n const reference = Number(chainId);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n}\n\nexport function resolveNativeAssetId(\n chainId: string | number | undefined,\n symbol: string | undefined,\n): CaipAssetType | undefined {\n if (chainId === undefined) {\n return undefined;\n }\n\n const caipChainId = formatChainIdToCaip(chainId);\n\n if (!caipChainId) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n const assetReference = symbol ? getCoinType(symbol) : undefined;\n\n if (assetReference) {\n return toCaipAssetType(namespace, reference, 'slip44', assetReference);\n }\n\n if (namespace === KnownCaipNamespace.Eip155) {\n return (\n getNativeAsset(caipChainId)?.assetId ??\n toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress)\n );\n }\n\n return undefined;\n}\n\n/**\n * Resolves EVM native symbol, decimals, and CAIP asset id for a chain.\n * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to\n * `@metamask/slip44` by native symbol.\n *\n * @param chainId - CAIP-2 chain id (eip155 only).\n * @returns Native asset metadata, or undefined when it cannot be resolved.\n */\nexport function getNativeAsset(chainId: CaipChainId):\n | {\n symbol: string;\n decimals: number;\n assetId: CaipAssetType;\n }\n | undefined {\n const { namespace, reference } = parseCaipChainId(chainId);\n if (namespace !== KnownCaipNamespace.Eip155) {\n return undefined;\n }\n\n const chain = getChainById(Number(reference));\n if (!chain) {\n return undefined;\n }\n\n const { nativeCurrency, slip44 } = chain;\n if (!nativeCurrency?.symbol) {\n return undefined;\n }\n\n const slip44TestnetCoinType = 1;\n const assetReference =\n typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType\n ? String(slip44)\n : getCoinType(nativeCurrency.symbol);\n\n const assetId = assetReference\n ? toCaipAssetType(namespace, reference, 'slip44', assetReference)\n : toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress);\n\n return {\n symbol: nativeCurrency.symbol,\n decimals: nativeCurrency.decimals ?? nativeTokenDecimals,\n assetId,\n };\n}\n\nfunction isNativeAddress(address: string): boolean {\n const normalized = address.toLowerCase();\n return (\n normalized === nativeTokenAddress ||\n normalized === '0x0' ||\n /^0x0+$/u.test(normalized)\n );\n}\n\n/**\n * Encodes an EVM token address + chain id into a CAIP-19 asset id.\n *\n * @param address - Hex contract address, native sentinel, or CAIP asset id.\n * @param chainId - CAIP-2 or hex chain id.\n * @returns The CAIP-19 asset id, or `undefined` when it can't be encoded.\n */\nexport function formatAddressToAssetId(\n address: Hex | CaipAssetType | string,\n chainId?: CaipChainId | Hex,\n): CaipAssetType | undefined {\n if (isCaipAssetType(address)) {\n return address;\n }\n\n const caipChainId = chainId ? formatChainIdToCaip(chainId) : undefined;\n\n if (!caipChainId) {\n return undefined;\n }\n\n if (isNativeAddress(address)) {\n return undefined;\n }\n\n const checksummedAddress = toChecksumHexAddress(address);\n\n if (!isStrictHexString(checksummedAddress)) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n\n return toCaipAssetType(namespace, reference, 'erc20', checksummedAddress);\n}\n"]}
@@ -9,7 +9,7 @@ import type { CaipAssetType, CaipChainId, Hex } from "@metamask/utils";
9
9
  export declare function formatChainIdToCaip(chainId: string | number): CaipChainId | undefined;
10
10
  export declare function resolveNativeAssetId(chainId: string | number | undefined, symbol: string | undefined): CaipAssetType | undefined;
11
11
  /**
12
- * Resolves EVM native symbol, decimals, and slip44 asset id for a chain.
12
+ * Resolves EVM native symbol, decimals, and CAIP asset id for a chain.
13
13
  * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to
14
14
  * `@metamask/slip44` by native symbol.
15
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"caip.d.cts","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAqCvE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,WAAW,GAAG,SAAS,CAoBzB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,aAAa,GAAG,SAAS,CAoB3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAC/C;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;CACxB,GACD,SAAS,CA+BZ;AAWD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,GAAG,aAAa,GAAG,MAAM,EACrC,OAAO,CAAC,EAAE,WAAW,GAAG,GAAG,GAC1B,aAAa,GAAG,SAAS,CAwB3B"}
1
+ {"version":3,"file":"caip.d.cts","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAoCvE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,WAAW,GAAG,SAAS,CAoBzB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,aAAa,GAAG,SAAS,CA0B3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAC/C;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;CACxB,GACD,SAAS,CA+BZ;AAWD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,GAAG,aAAa,GAAG,MAAM,EACrC,OAAO,CAAC,EAAE,WAAW,GAAG,GAAG,GAC1B,aAAa,GAAG,SAAS,CAwB3B"}
@@ -9,7 +9,7 @@ import type { CaipAssetType, CaipChainId, Hex } from "@metamask/utils";
9
9
  export declare function formatChainIdToCaip(chainId: string | number): CaipChainId | undefined;
10
10
  export declare function resolveNativeAssetId(chainId: string | number | undefined, symbol: string | undefined): CaipAssetType | undefined;
11
11
  /**
12
- * Resolves EVM native symbol, decimals, and slip44 asset id for a chain.
12
+ * Resolves EVM native symbol, decimals, and CAIP asset id for a chain.
13
13
  * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to
14
14
  * `@metamask/slip44` by native symbol.
15
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"caip.d.mts","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAqCvE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,WAAW,GAAG,SAAS,CAoBzB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,aAAa,GAAG,SAAS,CAoB3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAC/C;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;CACxB,GACD,SAAS,CA+BZ;AAWD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,GAAG,aAAa,GAAG,MAAM,EACrC,OAAO,CAAC,EAAE,WAAW,GAAG,GAAG,GAC1B,aAAa,GAAG,SAAS,CAwB3B"}
1
+ {"version":3,"file":"caip.d.mts","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,EAAE,wBAAwB;AAoCvE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,GACvB,WAAW,GAAG,SAAS,CAoBzB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,aAAa,GAAG,SAAS,CA0B3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAC/C;IACE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;CACxB,GACD,SAAS,CA+BZ;AAWD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,GAAG,aAAa,GAAG,MAAM,EACrC,OAAO,CAAC,EAAE,WAAW,GAAG,GAAG,GAC1B,aAAa,GAAG,SAAS,CAwB3B"}
@@ -12,14 +12,12 @@ const slip44BySymbol = (() => {
12
12
  coinTypeBySymbol.set(normalizedSymbol, coinType);
13
13
  }
14
14
  }
15
- const maticCoinType = coinTypeBySymbol.get('MATIC');
16
- if (maticCoinType && !coinTypeBySymbol.has('POL')) {
17
- coinTypeBySymbol.set('POL', maticCoinType);
18
- }
19
15
  return coinTypeBySymbol;
20
16
  })();
21
17
  function getCoinType(symbol) {
22
- return slip44BySymbol.get(symbol.toUpperCase());
18
+ const normalizedSymbol = symbol.toUpperCase();
19
+ return (slip44BySymbol.get(normalizedSymbol) ??
20
+ (normalizedSymbol === 'POL' ? slip44BySymbol.get('MATIC') : undefined));
23
21
  }
24
22
  /**
25
23
  * Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.
@@ -46,22 +44,26 @@ export function formatChainIdToCaip(chainId) {
46
44
  return Number.isNaN(reference) ? undefined : `eip155:${reference}`;
47
45
  }
48
46
  export function resolveNativeAssetId(chainId, symbol) {
49
- if (chainId === undefined || !symbol) {
47
+ if (chainId === undefined) {
50
48
  return undefined;
51
49
  }
52
50
  const caipChainId = formatChainIdToCaip(chainId);
53
51
  if (!caipChainId) {
54
52
  return undefined;
55
53
  }
56
- const assetReference = getCoinType(symbol);
57
- if (!assetReference) {
58
- return undefined;
59
- }
60
54
  const { namespace, reference } = parseCaipChainId(caipChainId);
61
- return toCaipAssetType(namespace, reference, 'slip44', assetReference);
55
+ const assetReference = symbol ? getCoinType(symbol) : undefined;
56
+ if (assetReference) {
57
+ return toCaipAssetType(namespace, reference, 'slip44', assetReference);
58
+ }
59
+ if (namespace === KnownCaipNamespace.Eip155) {
60
+ return (getNativeAsset(caipChainId)?.assetId ??
61
+ toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress));
62
+ }
63
+ return undefined;
62
64
  }
63
65
  /**
64
- * Resolves EVM native symbol, decimals, and slip44 asset id for a chain.
66
+ * Resolves EVM native symbol, decimals, and CAIP asset id for a chain.
65
67
  * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to
66
68
  * `@metamask/slip44` by native symbol.
67
69
  *
@@ -85,13 +87,13 @@ export function getNativeAsset(chainId) {
85
87
  const assetReference = typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType
86
88
  ? String(slip44)
87
89
  : getCoinType(nativeCurrency.symbol);
88
- if (!assetReference) {
89
- return undefined;
90
- }
90
+ const assetId = assetReference
91
+ ? toCaipAssetType(namespace, reference, 'slip44', assetReference)
92
+ : toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress);
91
93
  return {
92
94
  symbol: nativeCurrency.symbol,
93
95
  decimals: nativeCurrency.decimals ?? nativeTokenDecimals,
94
- assetId: toCaipAssetType(namespace, reference, 'slip44', assetReference),
96
+ assetId,
95
97
  };
96
98
  }
97
99
  function isNativeAddress(address) {
@@ -1 +1 @@
1
- {"version":3,"file":"caip.mjs","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumHexAddress } from '@metamask/controller-utils';\n// @ts-expect-error: No type definitions for '@metamask/slip44'\nimport slip44data from '@metamask/slip44';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport {\n isCaipAssetType,\n isStrictHexString,\n KnownCaipNamespace,\n parseCaipChainId,\n toCaipAssetType,\n} from '@metamask/utils';\nimport { getChainById } from 'eth-chainlist';\n\nimport { nativeTokenAddress, nativeTokenDecimals } from '../constants.js';\n\nconst slip44BySymbol = ((): Map<string, string> => {\n const coinTypeBySymbol = new Map<string, string>();\n\n for (const [coinType, entry] of Object.entries(\n slip44data as Record<string, { symbol: string }>,\n )) {\n const normalizedSymbol = entry.symbol.toUpperCase();\n\n if (!coinTypeBySymbol.has(normalizedSymbol)) {\n coinTypeBySymbol.set(normalizedSymbol, coinType);\n }\n }\n\n const maticCoinType = coinTypeBySymbol.get('MATIC');\n if (maticCoinType && !coinTypeBySymbol.has('POL')) {\n coinTypeBySymbol.set('POL', maticCoinType);\n }\n\n return coinTypeBySymbol;\n})();\n\nfunction getCoinType(symbol: string): string | undefined {\n return slip44BySymbol.get(symbol.toUpperCase());\n}\n\n/**\n * Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.\n * Only EVM (eip155) chains are normalized here; CAIP ids are returned as-is.\n *\n * @param chainId - Hex (`0x1`), numeric, decimal string, or CAIP chain id.\n * @returns The CAIP-2 chain id, or `undefined` when it can't be normalized.\n */\nexport function formatChainIdToCaip(\n chainId: string | number,\n): CaipChainId | undefined {\n if (typeof chainId === 'number') {\n return `eip155:${chainId}`;\n }\n\n if (chainId.includes(':')) {\n return chainId as CaipChainId;\n }\n\n if (chainId.startsWith('0x')) {\n const reference = Number.parseInt(chainId, 16);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n }\n\n if (chainId === '') {\n return undefined;\n }\n\n const reference = Number(chainId);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n}\n\nexport function resolveNativeAssetId(\n chainId: string | number | undefined,\n symbol: string | undefined,\n): CaipAssetType | undefined {\n if (chainId === undefined || !symbol) {\n return undefined;\n }\n\n const caipChainId = formatChainIdToCaip(chainId);\n\n if (!caipChainId) {\n return undefined;\n }\n\n const assetReference = getCoinType(symbol);\n\n if (!assetReference) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n\n return toCaipAssetType(namespace, reference, 'slip44', assetReference);\n}\n\n/**\n * Resolves EVM native symbol, decimals, and slip44 asset id for a chain.\n * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to\n * `@metamask/slip44` by native symbol.\n *\n * @param chainId - CAIP-2 chain id (eip155 only).\n * @returns Native asset metadata, or undefined when it cannot be resolved.\n */\nexport function getNativeAsset(chainId: CaipChainId):\n | {\n symbol: string;\n decimals: number;\n assetId: CaipAssetType;\n }\n | undefined {\n const { namespace, reference } = parseCaipChainId(chainId);\n if (namespace !== KnownCaipNamespace.Eip155) {\n return undefined;\n }\n\n const chain = getChainById(Number(reference));\n if (!chain) {\n return undefined;\n }\n\n const { nativeCurrency, slip44 } = chain;\n if (!nativeCurrency?.symbol) {\n return undefined;\n }\n\n const slip44TestnetCoinType = 1;\n const assetReference =\n typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType\n ? String(slip44)\n : getCoinType(nativeCurrency.symbol);\n\n if (!assetReference) {\n return undefined;\n }\n\n return {\n symbol: nativeCurrency.symbol,\n decimals: nativeCurrency.decimals ?? nativeTokenDecimals,\n assetId: toCaipAssetType(namespace, reference, 'slip44', assetReference),\n };\n}\n\nfunction isNativeAddress(address: string): boolean {\n const normalized = address.toLowerCase();\n return (\n normalized === nativeTokenAddress ||\n normalized === '0x0' ||\n /^0x0+$/u.test(normalized)\n );\n}\n\n/**\n * Encodes an EVM token address + chain id into a CAIP-19 asset id.\n *\n * @param address - Hex contract address, native sentinel, or CAIP asset id.\n * @param chainId - CAIP-2 or hex chain id.\n * @returns The CAIP-19 asset id, or `undefined` when it can't be encoded.\n */\nexport function formatAddressToAssetId(\n address: Hex | CaipAssetType | string,\n chainId?: CaipChainId | Hex,\n): CaipAssetType | undefined {\n if (isCaipAssetType(address)) {\n return address;\n }\n\n const caipChainId = chainId ? formatChainIdToCaip(chainId) : undefined;\n\n if (!caipChainId) {\n return undefined;\n }\n\n if (isNativeAddress(address)) {\n return undefined;\n }\n\n const checksummedAddress = toChecksumHexAddress(address);\n\n if (!isStrictHexString(checksummedAddress)) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n\n return toCaipAssetType(namespace, reference, 'erc20', checksummedAddress);\n}\n"]}
1
+ {"version":3,"file":"caip.mjs","sourceRoot":"","sources":["../../../src/mappers/helpers/caip.ts"],"names":[],"mappings":"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","sourcesContent":["import { toChecksumHexAddress } from '@metamask/controller-utils';\n// @ts-expect-error: No type definitions for '@metamask/slip44'\nimport slip44data from '@metamask/slip44';\nimport type { CaipAssetType, CaipChainId, Hex } from '@metamask/utils';\nimport {\n isCaipAssetType,\n isStrictHexString,\n KnownCaipNamespace,\n parseCaipChainId,\n toCaipAssetType,\n} from '@metamask/utils';\nimport { getChainById } from 'eth-chainlist';\n\nimport { nativeTokenAddress, nativeTokenDecimals } from '../constants.js';\n\nconst slip44BySymbol = ((): Map<string, string> => {\n const coinTypeBySymbol = new Map<string, string>();\n\n for (const [coinType, entry] of Object.entries(\n slip44data as Record<string, { symbol: string }>,\n )) {\n const normalizedSymbol = entry.symbol.toUpperCase();\n\n if (!coinTypeBySymbol.has(normalizedSymbol)) {\n coinTypeBySymbol.set(normalizedSymbol, coinType);\n }\n }\n\n return coinTypeBySymbol;\n})();\n\nfunction getCoinType(symbol: string): string | undefined {\n const normalizedSymbol = symbol.toUpperCase();\n return (\n slip44BySymbol.get(normalizedSymbol) ??\n (normalizedSymbol === 'POL' ? slip44BySymbol.get('MATIC') : undefined)\n );\n}\n\n/**\n * Normalizes a hex, decimal, numeric, or CAIP chain id to its CAIP-2 form.\n * Only EVM (eip155) chains are normalized here; CAIP ids are returned as-is.\n *\n * @param chainId - Hex (`0x1`), numeric, decimal string, or CAIP chain id.\n * @returns The CAIP-2 chain id, or `undefined` when it can't be normalized.\n */\nexport function formatChainIdToCaip(\n chainId: string | number,\n): CaipChainId | undefined {\n if (typeof chainId === 'number') {\n return `eip155:${chainId}`;\n }\n\n if (chainId.includes(':')) {\n return chainId as CaipChainId;\n }\n\n if (chainId.startsWith('0x')) {\n const reference = Number.parseInt(chainId, 16);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n }\n\n if (chainId === '') {\n return undefined;\n }\n\n const reference = Number(chainId);\n return Number.isNaN(reference) ? undefined : `eip155:${reference}`;\n}\n\nexport function resolveNativeAssetId(\n chainId: string | number | undefined,\n symbol: string | undefined,\n): CaipAssetType | undefined {\n if (chainId === undefined) {\n return undefined;\n }\n\n const caipChainId = formatChainIdToCaip(chainId);\n\n if (!caipChainId) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n const assetReference = symbol ? getCoinType(symbol) : undefined;\n\n if (assetReference) {\n return toCaipAssetType(namespace, reference, 'slip44', assetReference);\n }\n\n if (namespace === KnownCaipNamespace.Eip155) {\n return (\n getNativeAsset(caipChainId)?.assetId ??\n toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress)\n );\n }\n\n return undefined;\n}\n\n/**\n * Resolves EVM native symbol, decimals, and CAIP asset id for a chain.\n * Prefers eth-chainlist slip44 except testnet coin type 1, then falls back to\n * `@metamask/slip44` by native symbol.\n *\n * @param chainId - CAIP-2 chain id (eip155 only).\n * @returns Native asset metadata, or undefined when it cannot be resolved.\n */\nexport function getNativeAsset(chainId: CaipChainId):\n | {\n symbol: string;\n decimals: number;\n assetId: CaipAssetType;\n }\n | undefined {\n const { namespace, reference } = parseCaipChainId(chainId);\n if (namespace !== KnownCaipNamespace.Eip155) {\n return undefined;\n }\n\n const chain = getChainById(Number(reference));\n if (!chain) {\n return undefined;\n }\n\n const { nativeCurrency, slip44 } = chain;\n if (!nativeCurrency?.symbol) {\n return undefined;\n }\n\n const slip44TestnetCoinType = 1;\n const assetReference =\n typeof slip44 === 'number' && slip44 !== slip44TestnetCoinType\n ? String(slip44)\n : getCoinType(nativeCurrency.symbol);\n\n const assetId = assetReference\n ? toCaipAssetType(namespace, reference, 'slip44', assetReference)\n : toCaipAssetType(namespace, reference, 'erc20', nativeTokenAddress);\n\n return {\n symbol: nativeCurrency.symbol,\n decimals: nativeCurrency.decimals ?? nativeTokenDecimals,\n assetId,\n };\n}\n\nfunction isNativeAddress(address: string): boolean {\n const normalized = address.toLowerCase();\n return (\n normalized === nativeTokenAddress ||\n normalized === '0x0' ||\n /^0x0+$/u.test(normalized)\n );\n}\n\n/**\n * Encodes an EVM token address + chain id into a CAIP-19 asset id.\n *\n * @param address - Hex contract address, native sentinel, or CAIP asset id.\n * @param chainId - CAIP-2 or hex chain id.\n * @returns The CAIP-19 asset id, or `undefined` when it can't be encoded.\n */\nexport function formatAddressToAssetId(\n address: Hex | CaipAssetType | string,\n chainId?: CaipChainId | Hex,\n): CaipAssetType | undefined {\n if (isCaipAssetType(address)) {\n return address;\n }\n\n const caipChainId = chainId ? formatChainIdToCaip(chainId) : undefined;\n\n if (!caipChainId) {\n return undefined;\n }\n\n if (isNativeAddress(address)) {\n return undefined;\n }\n\n const checksummedAddress = toChecksumHexAddress(address);\n\n if (!isStrictHexString(checksummedAddress)) {\n return undefined;\n }\n\n const { namespace, reference } = parseCaipChainId(caipChainId);\n\n return toCaipAssetType(namespace, reference, 'erc20', checksummedAddress);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/client-utils",
3
- "version": "2.0.1-preview-e57e5c3dc",
3
+ "version": "2.0.1-preview-9efd0b754",
4
4
  "description": "Shared functions and utilities used across MetaMask clients (extension and mobile)",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -60,7 +60,7 @@
60
60
  "@metamask/core-backend": "^8.1.1",
61
61
  "@metamask/keyring-api": "^24.0.0",
62
62
  "@metamask/slip44": "^4.3.0",
63
- "@metamask/transaction-controller": "^69.5.0",
63
+ "@metamask/transaction-controller": "^69.5.2",
64
64
  "@metamask/utils": "^11.11.0",
65
65
  "eth-chainlist": "^0.0.795"
66
66
  },