@metamask/assets-controllers 87.0.0 → 87.1.1

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.
Files changed (114) hide show
  1. package/CHANGELOG.md +20 -1
  2. package/dist/AccountTrackerController.cjs.map +1 -1
  3. package/dist/AccountTrackerController.d.cts +2 -2
  4. package/dist/AccountTrackerController.d.mts +2 -2
  5. package/dist/AccountTrackerController.mjs.map +1 -1
  6. package/dist/AssetsContractController.cjs.map +1 -1
  7. package/dist/AssetsContractController.mjs.map +1 -1
  8. package/dist/CurrencyRateController.cjs.map +1 -1
  9. package/dist/CurrencyRateController.d.cts +2 -2
  10. package/dist/CurrencyRateController.d.mts +2 -2
  11. package/dist/CurrencyRateController.mjs.map +1 -1
  12. package/dist/DeFiPositionsController/DeFiPositionsController.cjs.map +1 -1
  13. package/dist/DeFiPositionsController/DeFiPositionsController.d.cts +2 -2
  14. package/dist/DeFiPositionsController/DeFiPositionsController.d.mts +2 -2
  15. package/dist/DeFiPositionsController/DeFiPositionsController.mjs.map +1 -1
  16. package/dist/DeFiPositionsController/fetch-positions.cjs.map +1 -1
  17. package/dist/DeFiPositionsController/fetch-positions.mjs.map +1 -1
  18. package/dist/DeFiPositionsController/group-defi-positions.cjs.map +1 -1
  19. package/dist/DeFiPositionsController/group-defi-positions.mjs.map +1 -1
  20. package/dist/MultichainAssetsController/MultichainAssetsController.cjs.map +1 -1
  21. package/dist/MultichainAssetsController/MultichainAssetsController.mjs.map +1 -1
  22. package/dist/MultichainAssetsController/utils.cjs.map +1 -1
  23. package/dist/MultichainAssetsController/utils.mjs.map +1 -1
  24. package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.cjs.map +1 -1
  25. package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.cts +2 -2
  26. package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.d.mts +2 -2
  27. package/dist/MultichainAssetsRatesController/MultichainAssetsRatesController.mjs.map +1 -1
  28. package/dist/MultichainBalancesController/MultichainBalancesController.cjs +2 -2
  29. package/dist/MultichainBalancesController/MultichainBalancesController.cjs.map +1 -1
  30. package/dist/MultichainBalancesController/MultichainBalancesController.mjs +2 -2
  31. package/dist/MultichainBalancesController/MultichainBalancesController.mjs.map +1 -1
  32. package/dist/NftController.cjs.map +1 -1
  33. package/dist/NftController.mjs.map +1 -1
  34. package/dist/NftDetectionController.cjs +2 -2
  35. package/dist/NftDetectionController.cjs.map +1 -1
  36. package/dist/NftDetectionController.mjs +2 -2
  37. package/dist/NftDetectionController.mjs.map +1 -1
  38. package/dist/RatesController/RatesController.cjs.map +1 -1
  39. package/dist/RatesController/RatesController.mjs.map +1 -1
  40. package/dist/Standards/ERC20Standard.cjs.map +1 -1
  41. package/dist/Standards/ERC20Standard.mjs.map +1 -1
  42. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.cjs.map +1 -1
  43. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.mjs.map +1 -1
  44. package/dist/Standards/NftStandards/ERC721/ERC721Standard.cjs.map +1 -1
  45. package/dist/Standards/NftStandards/ERC721/ERC721Standard.mjs.map +1 -1
  46. package/dist/TokenBalancesController.cjs.map +1 -1
  47. package/dist/TokenBalancesController.d.cts +2 -2
  48. package/dist/TokenBalancesController.d.mts +2 -2
  49. package/dist/TokenBalancesController.mjs.map +1 -1
  50. package/dist/TokenDetectionController.cjs.map +1 -1
  51. package/dist/TokenDetectionController.d.cts +2 -2
  52. package/dist/TokenDetectionController.d.mts +2 -2
  53. package/dist/TokenDetectionController.mjs.map +1 -1
  54. package/dist/TokenListController.cjs.map +1 -1
  55. package/dist/TokenListController.d.cts +2 -2
  56. package/dist/TokenListController.d.mts +2 -2
  57. package/dist/TokenListController.mjs.map +1 -1
  58. package/dist/TokenRatesController.cjs.map +1 -1
  59. package/dist/TokenRatesController.d.cts +2 -2
  60. package/dist/TokenRatesController.d.mts +2 -2
  61. package/dist/TokenRatesController.mjs.map +1 -1
  62. package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.cjs.map +1 -1
  63. package/dist/TokenSearchDiscoveryDataController/TokenSearchDiscoveryDataController.mjs.map +1 -1
  64. package/dist/TokensController.cjs.map +1 -1
  65. package/dist/TokensController.mjs.map +1 -1
  66. package/dist/assetsUtil.cjs.map +1 -1
  67. package/dist/assetsUtil.d.cts +20 -20
  68. package/dist/assetsUtil.d.cts.map +1 -1
  69. package/dist/assetsUtil.d.mts +20 -20
  70. package/dist/assetsUtil.d.mts.map +1 -1
  71. package/dist/assetsUtil.mjs.map +1 -1
  72. package/dist/balances.cjs.map +1 -1
  73. package/dist/balances.mjs.map +1 -1
  74. package/dist/constants.cjs +9 -9
  75. package/dist/constants.cjs.map +1 -1
  76. package/dist/constants.mjs +9 -9
  77. package/dist/constants.mjs.map +1 -1
  78. package/dist/crypto-compare-service/crypto-compare.cjs.map +1 -1
  79. package/dist/crypto-compare-service/crypto-compare.mjs.map +1 -1
  80. package/dist/index.cjs +2 -1
  81. package/dist/index.cjs.map +1 -1
  82. package/dist/index.d.cts +2 -1
  83. package/dist/index.d.cts.map +1 -1
  84. package/dist/index.d.mts +2 -1
  85. package/dist/index.d.mts.map +1 -1
  86. package/dist/index.mjs +1 -1
  87. package/dist/index.mjs.map +1 -1
  88. package/dist/multi-chain-accounts-service/api-balance-fetcher.cjs.map +1 -1
  89. package/dist/multi-chain-accounts-service/api-balance-fetcher.mjs.map +1 -1
  90. package/dist/multi-chain-accounts-service/multi-chain-accounts.cjs.map +1 -1
  91. package/dist/multi-chain-accounts-service/multi-chain-accounts.mjs.map +1 -1
  92. package/dist/multicall.cjs.map +1 -1
  93. package/dist/multicall.mjs.map +1 -1
  94. package/dist/rpc-service/rpc-balance-fetcher.cjs.map +1 -1
  95. package/dist/rpc-service/rpc-balance-fetcher.mjs.map +1 -1
  96. package/dist/selectors/stringify-balance.cjs.map +1 -1
  97. package/dist/selectors/stringify-balance.mjs.map +1 -1
  98. package/dist/selectors/token-selectors.cjs.map +1 -1
  99. package/dist/selectors/token-selectors.mjs.map +1 -1
  100. package/dist/token-prices-service/codefi-v2.cjs.map +1 -1
  101. package/dist/token-prices-service/codefi-v2.mjs.map +1 -1
  102. package/dist/token-service.cjs +72 -12
  103. package/dist/token-service.cjs.map +1 -1
  104. package/dist/token-service.d.cts +48 -0
  105. package/dist/token-service.d.cts.map +1 -1
  106. package/dist/token-service.d.mts +48 -0
  107. package/dist/token-service.d.mts.map +1 -1
  108. package/dist/token-service.mjs +70 -11
  109. package/dist/token-service.mjs.map +1 -1
  110. package/dist/utils/formatters.cjs.map +1 -1
  111. package/dist/utils/formatters.mjs.map +1 -1
  112. package/dist/utils/timeout-with-retry.cjs.map +1 -1
  113. package/dist/utils/timeout-with-retry.mjs.map +1 -1
  114. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"formatters.mjs","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"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","sourcesContent":["const FALLBACK_LOCALE = 'en';\n\nconst twoDecimals = {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n};\n\nconst oneSignificantDigit = {\n minimumSignificantDigits: 1,\n maximumSignificantDigits: 1,\n};\n\nconst threeSignificantDigits = {\n minimumSignificantDigits: 3,\n maximumSignificantDigits: 3,\n};\n\nconst numberFormatCache: Record<string, Intl.NumberFormat> = {};\n\n/**\n * Get cached number format instance.\n *\n * @param locale - Locale string.\n * @param options - Optional Intl.NumberFormat options.\n * @returns Cached Intl.NumberFormat instance.\n */\nfunction getCachedNumberFormat(\n locale: string,\n options: Intl.NumberFormatOptions = {},\n) {\n const key = `${locale}_${JSON.stringify(options)}`;\n\n let format = numberFormatCache[key];\n\n if (format) {\n return format;\n }\n\n try {\n format = new Intl.NumberFormat(locale, options);\n } catch (error) {\n if (error instanceof RangeError) {\n // Fallback for invalid options (e.g. currency code)\n format = new Intl.NumberFormat(locale, twoDecimals);\n } else {\n throw error;\n }\n }\n\n numberFormatCache[key] = format;\n return format;\n}\n\n/**\n * Format a number with optional Intl overrides.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param options - Optional Intl.NumberFormat overrides.\n * @returns Formatted number string.\n */\nfunction formatNumber(\n config: { locale: string },\n value: number | bigint | `${number}`,\n options: Intl.NumberFormatOptions = {},\n) {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, options);\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n return numberFormat.format(value);\n}\n\n/**\n * Format a value as a currency string.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n * @param options - Optional Intl.NumberFormat overrides.\n * @returns Formatted currency string.\n */\nfunction formatCurrency(\n config: { locale: string },\n value: number | bigint | `${number}`,\n currency: Intl.NumberFormatOptions['currency'],\n options: Intl.NumberFormatOptions = {},\n) {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, {\n style: 'currency',\n currency,\n ...options,\n });\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n return numberFormat.format(value);\n}\n\n/**\n * Compact currency formatting (e.g. $1.2K, $3.4M).\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n * @returns Formatted compact currency string.\n */\nfunction formatCurrencyCompact(\n config: { locale: string },\n value: number | bigint | `${number}`,\n currency: Intl.NumberFormatOptions['currency'],\n) {\n return formatCurrency(config, value, currency, {\n notation: 'compact',\n ...twoDecimals,\n });\n}\n\n/**\n * Currency formatting with minimum threshold for small values.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n * @returns Formatted currency string with threshold handling.\n */\nfunction formatCurrencyWithMinThreshold(\n config: { locale: string },\n value: number | bigint | `${number}`,\n currency: Intl.NumberFormatOptions['currency'],\n) {\n const minThreshold = 0.01;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatCurrency(config, 0, currency);\n }\n\n if (absoluteValue < minThreshold) {\n const formattedMin = formatCurrency(config, minThreshold, currency);\n return `<${formattedMin}`;\n }\n\n return formatCurrency(config, number, currency);\n}\n\n/**\n * Format a value as a token string with symbol.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param symbol - Token symbol.\n * @param options - Optional Intl.NumberFormat overrides.\n * @returns Formatted token string.\n */\nfunction formatToken(\n config: { locale: string },\n value: number | bigint | `${number}`,\n symbol: string,\n options: Intl.NumberFormatOptions = {},\n) {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, {\n style: 'decimal',\n ...options,\n });\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n const formattedNumber = numberFormat.format(value);\n\n return `${formattedNumber} ${symbol}`;\n}\n\n/**\n * Format token price with varying precision based on value.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n * @returns Formatted token price string.\n */\nfunction formatCurrencyTokenPrice(\n config: { locale: string },\n value: number | bigint | `${number}`,\n currency: Intl.NumberFormatOptions['currency'],\n) {\n const minThreshold = 0.00000001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatCurrency(config, 0, currency);\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatCurrency(config, minThreshold, currency, oneSignificantDigit)}`;\n }\n\n if (absoluteValue < 1) {\n return formatCurrency(config, number, currency, threeSignificantDigits);\n }\n\n if (absoluteValue < 1_000_000) {\n return formatCurrency(config, number, currency);\n }\n\n return formatCurrencyCompact(config, number, currency);\n}\n\n/**\n * Format token quantity with varying precision based on value.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param symbol - Token symbol.\n * @returns Formatted token quantity string.\n */\nfunction formatTokenQuantity(\n config: { locale: string },\n value: number | bigint | `${number}`,\n symbol: string,\n) {\n const minThreshold = 0.00001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatToken(config, 0, symbol);\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatToken(config, minThreshold, symbol, oneSignificantDigit)}`;\n }\n\n if (absoluteValue < 1) {\n return formatToken(config, number, symbol, threeSignificantDigits);\n }\n\n if (absoluteValue < 1_000_000) {\n return formatToken(config, number, symbol);\n }\n\n return formatToken(config, number, symbol, {\n notation: 'compact',\n ...twoDecimals,\n });\n}\n\n/**\n * Create formatter functions with the given locale.\n *\n * @param options - Configuration options.\n * @param options.locale - Locale string.\n * @returns Object with formatter functions.\n */\nexport function createFormatters({ locale = FALLBACK_LOCALE }) {\n return {\n /**\n * Format a number with optional Intl overrides.\n *\n * @param value - Numeric value to format.\n * @param options - Optional Intl.NumberFormat overrides.\n */\n formatNumber: formatNumber.bind(null, { locale }),\n /**\n * Format a value as a currency string.\n *\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code (e.g. 'USD').\n * @param options - Optional Intl.NumberFormat overrides.\n */\n formatCurrency: formatCurrency.bind(null, { locale }),\n /**\n * Compact currency (e.g. $1.2K, $3.4M) with up to two decimal digits.\n *\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n */\n formatCurrencyCompact: formatCurrencyCompact.bind(null, { locale }),\n /**\n * Currency with thresholds for small values.\n *\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n */\n formatCurrencyWithMinThreshold: formatCurrencyWithMinThreshold.bind(null, {\n locale,\n }),\n /**\n * Format token price with varying precision based on value.\n *\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n */\n formatCurrencyTokenPrice: formatCurrencyTokenPrice.bind(null, { locale }),\n /**\n * Format a value as a token string with symbol.\n *\n * @param value - Numeric value to format.\n * @param symbol - Token symbol (e.g. 'ETH', 'SepoliaETH').\n * @param options - Optional Intl.NumberFormat overrides.\n */\n formatToken: formatToken.bind(null, { locale }),\n /**\n * Format token quantity with varying precision based on value.\n *\n * @param value - Numeric value to format.\n * @param symbol - Token symbol (e.g. 'ETH', 'SepoliaETH').\n */\n formatTokenQuantity: formatTokenQuantity.bind(null, { locale }),\n };\n}\n"]}
1
+ {"version":3,"file":"formatters.mjs","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"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","sourcesContent":["const FALLBACK_LOCALE = 'en';\n\nconst twoDecimals = {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n};\n\nconst oneSignificantDigit = {\n minimumSignificantDigits: 1,\n maximumSignificantDigits: 1,\n};\n\nconst threeSignificantDigits = {\n minimumSignificantDigits: 3,\n maximumSignificantDigits: 3,\n};\n\nconst numberFormatCache: Record<string, Intl.NumberFormat> = {};\n\n/**\n * Get cached number format instance.\n *\n * @param locale - Locale string.\n * @param options - Optional Intl.NumberFormat options.\n * @returns Cached Intl.NumberFormat instance.\n */\nfunction getCachedNumberFormat(\n locale: string,\n options: Intl.NumberFormatOptions = {},\n) {\n const key = `${locale}_${JSON.stringify(options)}`;\n\n let format = numberFormatCache[key];\n\n if (format) {\n return format;\n }\n\n try {\n format = new Intl.NumberFormat(locale, options);\n } catch (error) {\n if (error instanceof RangeError) {\n // Fallback for invalid options (e.g. currency code)\n format = new Intl.NumberFormat(locale, twoDecimals);\n } else {\n throw error;\n }\n }\n\n numberFormatCache[key] = format;\n return format;\n}\n\n/**\n * Format a number with optional Intl overrides.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param options - Optional Intl.NumberFormat overrides.\n * @returns Formatted number string.\n */\nfunction formatNumber(\n config: { locale: string },\n value: number | bigint | `${number}`,\n options: Intl.NumberFormatOptions = {},\n) {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, options);\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n return numberFormat.format(value);\n}\n\n/**\n * Format a value as a currency string.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n * @param options - Optional Intl.NumberFormat overrides.\n * @returns Formatted currency string.\n */\nfunction formatCurrency(\n config: { locale: string },\n value: number | bigint | `${number}`,\n currency: Intl.NumberFormatOptions['currency'],\n options: Intl.NumberFormatOptions = {},\n) {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, {\n style: 'currency',\n currency,\n ...options,\n });\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n return numberFormat.format(value);\n}\n\n/**\n * Compact currency formatting (e.g. $1.2K, $3.4M).\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n * @returns Formatted compact currency string.\n */\nfunction formatCurrencyCompact(\n config: { locale: string },\n value: number | bigint | `${number}`,\n currency: Intl.NumberFormatOptions['currency'],\n) {\n return formatCurrency(config, value, currency, {\n notation: 'compact',\n ...twoDecimals,\n });\n}\n\n/**\n * Currency formatting with minimum threshold for small values.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n * @returns Formatted currency string with threshold handling.\n */\nfunction formatCurrencyWithMinThreshold(\n config: { locale: string },\n value: number | bigint | `${number}`,\n currency: Intl.NumberFormatOptions['currency'],\n) {\n const minThreshold = 0.01;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatCurrency(config, 0, currency);\n }\n\n if (absoluteValue < minThreshold) {\n const formattedMin = formatCurrency(config, minThreshold, currency);\n return `<${formattedMin}`;\n }\n\n return formatCurrency(config, number, currency);\n}\n\n/**\n * Format a value as a token string with symbol.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param symbol - Token symbol.\n * @param options - Optional Intl.NumberFormat overrides.\n * @returns Formatted token string.\n */\nfunction formatToken(\n config: { locale: string },\n value: number | bigint | `${number}`,\n symbol: string,\n options: Intl.NumberFormatOptions = {},\n) {\n if (!Number.isFinite(Number(value))) {\n return '';\n }\n\n const numberFormat = getCachedNumberFormat(config.locale, {\n style: 'decimal',\n ...options,\n });\n\n // @ts-expect-error Remove this comment once TypeScript is updated to 5.5+\n const formattedNumber = numberFormat.format(value);\n\n return `${formattedNumber} ${symbol}`;\n}\n\n/**\n * Format token price with varying precision based on value.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n * @returns Formatted token price string.\n */\nfunction formatCurrencyTokenPrice(\n config: { locale: string },\n value: number | bigint | `${number}`,\n currency: Intl.NumberFormatOptions['currency'],\n) {\n const minThreshold = 0.00000001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatCurrency(config, 0, currency);\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatCurrency(config, minThreshold, currency, oneSignificantDigit)}`;\n }\n\n if (absoluteValue < 1) {\n return formatCurrency(config, number, currency, threeSignificantDigits);\n }\n\n if (absoluteValue < 1_000_000) {\n return formatCurrency(config, number, currency);\n }\n\n return formatCurrencyCompact(config, number, currency);\n}\n\n/**\n * Format token quantity with varying precision based on value.\n *\n * @param config - Configuration object with locale.\n * @param config.locale - Locale string.\n * @param value - Numeric value to format.\n * @param symbol - Token symbol.\n * @returns Formatted token quantity string.\n */\nfunction formatTokenQuantity(\n config: { locale: string },\n value: number | bigint | `${number}`,\n symbol: string,\n) {\n const minThreshold = 0.00001;\n const number = Number(value);\n const absoluteValue = Math.abs(number);\n\n if (!Number.isFinite(number)) {\n return '';\n }\n\n if (number === 0) {\n return formatToken(config, 0, symbol);\n }\n\n if (absoluteValue < minThreshold) {\n return `<${formatToken(config, minThreshold, symbol, oneSignificantDigit)}`;\n }\n\n if (absoluteValue < 1) {\n return formatToken(config, number, symbol, threeSignificantDigits);\n }\n\n if (absoluteValue < 1_000_000) {\n return formatToken(config, number, symbol);\n }\n\n return formatToken(config, number, symbol, {\n notation: 'compact',\n ...twoDecimals,\n });\n}\n\n/**\n * Create formatter functions with the given locale.\n *\n * @param options - Configuration options.\n * @param options.locale - Locale string.\n * @returns Object with formatter functions.\n */\nexport function createFormatters({ locale = FALLBACK_LOCALE }) {\n return {\n /**\n * Format a number with optional Intl overrides.\n *\n * @param value - Numeric value to format.\n * @param options - Optional Intl.NumberFormat overrides.\n */\n formatNumber: formatNumber.bind(null, { locale }),\n /**\n * Format a value as a currency string.\n *\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code (e.g. 'USD').\n * @param options - Optional Intl.NumberFormat overrides.\n */\n formatCurrency: formatCurrency.bind(null, { locale }),\n /**\n * Compact currency (e.g. $1.2K, $3.4M) with up to two decimal digits.\n *\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n */\n formatCurrencyCompact: formatCurrencyCompact.bind(null, { locale }),\n /**\n * Currency with thresholds for small values.\n *\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n */\n formatCurrencyWithMinThreshold: formatCurrencyWithMinThreshold.bind(null, {\n locale,\n }),\n /**\n * Format token price with varying precision based on value.\n *\n * @param value - Numeric value to format.\n * @param currency - ISO 4217 currency code.\n */\n formatCurrencyTokenPrice: formatCurrencyTokenPrice.bind(null, { locale }),\n /**\n * Format a value as a token string with symbol.\n *\n * @param value - Numeric value to format.\n * @param symbol - Token symbol (e.g. 'ETH', 'SepoliaETH').\n * @param options - Optional Intl.NumberFormat overrides.\n */\n formatToken: formatToken.bind(null, { locale }),\n /**\n * Format token quantity with varying precision based on value.\n *\n * @param value - Numeric value to format.\n * @param symbol - Token symbol (e.g. 'ETH', 'SepoliaETH').\n */\n formatTokenQuantity: formatTokenQuantity.bind(null, { locale }),\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timeout-with-retry.cjs","sourceRoot":"","sources":["../../src/utils/timeout-with-retry.ts"],"names":[],"mappings":";;;AAAA,2CAAyC;AAEzC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;AAE3C;;;;;;GAMG;AACH,6CAA6C;AACtC,KAAK,UAAU,gBAAgB,CACpC,IAAO,EACP,OAAe,EACf,UAAkB;IAGlB,IAAA,cAAM,EAAC,UAAU,IAAI,CAAC,EAAE,+CAA+C,CAAC,CAAC;IAEzE,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,OAAO,IAAI,UAAU,EAAE;QAC5B,IAAI;YACF,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE;gBACN,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CACjD;aACF,CAAC,CAA2B,CAAC;SAC/B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,KAAK,aAAa,IAAI,OAAO,GAAG,UAAU,EAAE;gBACjD,OAAO,IAAI,CAAC,CAAC;gBACb,SAAS;aACV;YACD,MAAM,GAAG,CAAC;SACX;KACF;AACH,CAAC;AA1BD,4CA0BC","sourcesContent":["import { assert } from '@metamask/utils';\n\nconst TIMEOUT_ERROR = new Error('timeout');\n\n/**\n *\n * @param call - The async function to call.\n * @param timeout - Timeout in milliseconds for each call attempt.\n * @param maxRetries - Maximum number of retries on timeout.\n * @returns The resolved value of the call, or throws the last error if not a timeout or retries exhausted.\n */\n// eslint-disable-next-line consistent-return\nexport async function timeoutWithRetry<T extends () => Promise<unknown>>(\n call: T,\n timeout: number,\n maxRetries: number,\n // @ts-expect-error TS2366: Assertion guarantees loop executes\n): Promise<Awaited<ReturnType<T>>> {\n assert(maxRetries >= 0, 'maxRetries must be greater than or equal to 0');\n\n let attempt = 0;\n\n while (attempt <= maxRetries) {\n try {\n return (await Promise.race([\n call(),\n new Promise((_resolve, reject) =>\n setTimeout(() => reject(TIMEOUT_ERROR), timeout),\n ),\n ])) as Awaited<ReturnType<T>>;\n } catch (err) {\n if (err === TIMEOUT_ERROR && attempt < maxRetries) {\n attempt += 1;\n continue;\n }\n throw err;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"timeout-with-retry.cjs","sourceRoot":"","sources":["../../src/utils/timeout-with-retry.ts"],"names":[],"mappings":";;;AAAA,2CAAyC;AAEzC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;AAE3C;;;;;;GAMG;AACH,6CAA6C;AACtC,KAAK,UAAU,gBAAgB,CACpC,IAAO,EACP,OAAe,EACf,UAAkB;IAGlB,IAAA,cAAM,EAAC,UAAU,IAAI,CAAC,EAAE,+CAA+C,CAAC,CAAC;IAEzE,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,OAAO,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE;gBACN,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CACjD;aACF,CAAC,CAA2B,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,KAAK,aAAa,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBAClD,OAAO,IAAI,CAAC,CAAC;gBACb,SAAS;YACX,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AA1BD,4CA0BC","sourcesContent":["import { assert } from '@metamask/utils';\n\nconst TIMEOUT_ERROR = new Error('timeout');\n\n/**\n *\n * @param call - The async function to call.\n * @param timeout - Timeout in milliseconds for each call attempt.\n * @param maxRetries - Maximum number of retries on timeout.\n * @returns The resolved value of the call, or throws the last error if not a timeout or retries exhausted.\n */\n// eslint-disable-next-line consistent-return\nexport async function timeoutWithRetry<T extends () => Promise<unknown>>(\n call: T,\n timeout: number,\n maxRetries: number,\n // @ts-expect-error TS2366: Assertion guarantees loop executes\n): Promise<Awaited<ReturnType<T>>> {\n assert(maxRetries >= 0, 'maxRetries must be greater than or equal to 0');\n\n let attempt = 0;\n\n while (attempt <= maxRetries) {\n try {\n return (await Promise.race([\n call(),\n new Promise((_resolve, reject) =>\n setTimeout(() => reject(TIMEOUT_ERROR), timeout),\n ),\n ])) as Awaited<ReturnType<T>>;\n } catch (err) {\n if (err === TIMEOUT_ERROR && attempt < maxRetries) {\n attempt += 1;\n continue;\n }\n throw err;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timeout-with-retry.mjs","sourceRoot":"","sources":["../../src/utils/timeout-with-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,wBAAwB;AAEzC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;AAE3C;;;;;;GAMG;AACH,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAO,EACP,OAAe,EACf,UAAkB;IAGlB,MAAM,CAAC,UAAU,IAAI,CAAC,EAAE,+CAA+C,CAAC,CAAC;IAEzE,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,OAAO,IAAI,UAAU,EAAE;QAC5B,IAAI;YACF,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE;gBACN,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CACjD;aACF,CAAC,CAA2B,CAAC;SAC/B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,KAAK,aAAa,IAAI,OAAO,GAAG,UAAU,EAAE;gBACjD,OAAO,IAAI,CAAC,CAAC;gBACb,SAAS;aACV;YACD,MAAM,GAAG,CAAC;SACX;KACF;AACH,CAAC","sourcesContent":["import { assert } from '@metamask/utils';\n\nconst TIMEOUT_ERROR = new Error('timeout');\n\n/**\n *\n * @param call - The async function to call.\n * @param timeout - Timeout in milliseconds for each call attempt.\n * @param maxRetries - Maximum number of retries on timeout.\n * @returns The resolved value of the call, or throws the last error if not a timeout or retries exhausted.\n */\n// eslint-disable-next-line consistent-return\nexport async function timeoutWithRetry<T extends () => Promise<unknown>>(\n call: T,\n timeout: number,\n maxRetries: number,\n // @ts-expect-error TS2366: Assertion guarantees loop executes\n): Promise<Awaited<ReturnType<T>>> {\n assert(maxRetries >= 0, 'maxRetries must be greater than or equal to 0');\n\n let attempt = 0;\n\n while (attempt <= maxRetries) {\n try {\n return (await Promise.race([\n call(),\n new Promise((_resolve, reject) =>\n setTimeout(() => reject(TIMEOUT_ERROR), timeout),\n ),\n ])) as Awaited<ReturnType<T>>;\n } catch (err) {\n if (err === TIMEOUT_ERROR && attempt < maxRetries) {\n attempt += 1;\n continue;\n }\n throw err;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"timeout-with-retry.mjs","sourceRoot":"","sources":["../../src/utils/timeout-with-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,wBAAwB;AAEzC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;AAE3C;;;;;;GAMG;AACH,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAO,EACP,OAAe,EACf,UAAkB;IAGlB,MAAM,CAAC,UAAU,IAAI,CAAC,EAAE,+CAA+C,CAAC,CAAC;IAEzE,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,OAAO,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE;gBACN,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CACjD;aACF,CAAC,CAA2B,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,KAAK,aAAa,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBAClD,OAAO,IAAI,CAAC,CAAC;gBACb,SAAS;YACX,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { assert } from '@metamask/utils';\n\nconst TIMEOUT_ERROR = new Error('timeout');\n\n/**\n *\n * @param call - The async function to call.\n * @param timeout - Timeout in milliseconds for each call attempt.\n * @param maxRetries - Maximum number of retries on timeout.\n * @returns The resolved value of the call, or throws the last error if not a timeout or retries exhausted.\n */\n// eslint-disable-next-line consistent-return\nexport async function timeoutWithRetry<T extends () => Promise<unknown>>(\n call: T,\n timeout: number,\n maxRetries: number,\n // @ts-expect-error TS2366: Assertion guarantees loop executes\n): Promise<Awaited<ReturnType<T>>> {\n assert(maxRetries >= 0, 'maxRetries must be greater than or equal to 0');\n\n let attempt = 0;\n\n while (attempt <= maxRetries) {\n try {\n return (await Promise.race([\n call(),\n new Promise((_resolve, reject) =>\n setTimeout(() => reject(TIMEOUT_ERROR), timeout),\n ),\n ])) as Awaited<ReturnType<T>>;\n } catch (err) {\n if (err === TIMEOUT_ERROR && attempt < maxRetries) {\n attempt += 1;\n continue;\n }\n throw err;\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/assets-controllers",
3
- "version": "87.0.0",
3
+ "version": "87.1.1",
4
4
  "description": "Controllers which manage interactions involving ERC-20, ERC-721, and ERC-1155 tokens (including NFTs)",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -111,7 +111,7 @@
111
111
  "ts-jest": "^27.1.4",
112
112
  "typedoc": "^0.24.8",
113
113
  "typedoc-plugin-missing-exports": "^2.0.0",
114
- "typescript": "~5.2.2",
114
+ "typescript": "~5.3.3",
115
115
  "webextension-polyfill": "^0.12.0"
116
116
  },
117
117
  "peerDependencies": {