@metamask-previews/assets-controller 14.0.2-preview-3e34650c2 → 14.0.2-preview-4f4c98e

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 (573) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/{AssetsController-method-action-types.d.mts → AssetsController-method-action-types.d.ts} +2 -2
  3. package/dist/AssetsController-method-action-types.d.ts.map +1 -0
  4. package/dist/{AssetsController-method-action-types.mjs → AssetsController-method-action-types.js} +1 -1
  5. package/dist/AssetsController-method-action-types.js.map +1 -0
  6. package/dist/{AssetsController.d.cts → AssetsController.d.ts} +30 -30
  7. package/dist/AssetsController.d.ts.map +1 -0
  8. package/dist/{AssetsController.mjs → AssetsController.js} +28 -29
  9. package/dist/AssetsController.js.map +1 -0
  10. package/dist/data-sources/{AbstractDataSource.d.mts → AbstractDataSource.d.ts} +2 -2
  11. package/dist/data-sources/AbstractDataSource.d.ts.map +1 -0
  12. package/dist/data-sources/{AbstractDataSource.mjs → AbstractDataSource.js} +1 -1
  13. package/dist/data-sources/AbstractDataSource.js.map +1 -0
  14. package/dist/data-sources/{AccountActivityDataSource.d.cts → AccountActivityDataSource.d.ts} +6 -6
  15. package/dist/data-sources/AccountActivityDataSource.d.ts.map +1 -0
  16. package/dist/data-sources/{AccountActivityDataSource.mjs → AccountActivityDataSource.js} +11 -11
  17. package/dist/data-sources/AccountActivityDataSource.js.map +1 -0
  18. package/dist/data-sources/{AccountsApiDataSource.d.cts → AccountsApiDataSource.d.ts} +7 -7
  19. package/dist/data-sources/AccountsApiDataSource.d.ts.map +1 -0
  20. package/dist/data-sources/{AccountsApiDataSource.mjs → AccountsApiDataSource.js} +7 -8
  21. package/dist/data-sources/AccountsApiDataSource.js.map +1 -0
  22. package/dist/data-sources/{PriceDataSource.d.cts → PriceDataSource.d.ts} +5 -5
  23. package/dist/data-sources/PriceDataSource.d.ts.map +1 -0
  24. package/dist/data-sources/{PriceDataSource.mjs → PriceDataSource.js} +7 -8
  25. package/dist/data-sources/PriceDataSource.js.map +1 -0
  26. package/dist/data-sources/{RpcDataSource.d.cts → RpcDataSource.d.ts} +10 -10
  27. package/dist/data-sources/RpcDataSource.d.ts.map +1 -0
  28. package/dist/data-sources/{RpcDataSource.mjs → RpcDataSource.js} +11 -11
  29. package/dist/data-sources/RpcDataSource.js.map +1 -0
  30. package/dist/data-sources/{SnapDataSource.d.cts → SnapDataSource.d.ts} +8 -8
  31. package/dist/data-sources/SnapDataSource.d.ts.map +1 -0
  32. package/dist/data-sources/{SnapDataSource.mjs → SnapDataSource.js} +6 -6
  33. package/dist/data-sources/SnapDataSource.js.map +1 -0
  34. package/dist/data-sources/{StakedBalanceDataSource.d.cts → StakedBalanceDataSource.d.ts} +5 -5
  35. package/dist/data-sources/StakedBalanceDataSource.d.ts.map +1 -0
  36. package/dist/data-sources/{StakedBalanceDataSource.mjs → StakedBalanceDataSource.js} +7 -7
  37. package/dist/data-sources/StakedBalanceDataSource.js.map +1 -0
  38. package/dist/data-sources/{TokenDataSource.d.cts → TokenDataSource.d.ts} +5 -5
  39. package/dist/data-sources/TokenDataSource.d.ts.map +1 -0
  40. package/dist/data-sources/{TokenDataSource.mjs → TokenDataSource.js} +7 -8
  41. package/dist/data-sources/TokenDataSource.js.map +1 -0
  42. package/dist/data-sources/evm-rpc-services/clients/{MulticallClient.d.cts → MulticallClient.d.ts} +3 -3
  43. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.ts.map +1 -0
  44. package/dist/data-sources/evm-rpc-services/clients/{MulticallClient.mjs → MulticallClient.js} +5 -5
  45. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.js.map +1 -0
  46. package/dist/data-sources/evm-rpc-services/clients/{TokensApiClient.d.cts → TokensApiClient.d.ts} +2 -2
  47. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.ts.map +1 -0
  48. package/dist/data-sources/evm-rpc-services/clients/{TokensApiClient.mjs → TokensApiClient.js} +2 -2
  49. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.js.map +1 -0
  50. package/dist/data-sources/evm-rpc-services/clients/index.d.ts +4 -0
  51. package/dist/data-sources/evm-rpc-services/clients/index.d.ts.map +1 -0
  52. package/dist/data-sources/evm-rpc-services/clients/index.js +3 -0
  53. package/dist/data-sources/evm-rpc-services/clients/index.js.map +1 -0
  54. package/dist/data-sources/evm-rpc-services/{index.d.cts → index.d.ts} +5 -5
  55. package/dist/data-sources/evm-rpc-services/index.d.ts.map +1 -0
  56. package/dist/data-sources/evm-rpc-services/index.js +4 -0
  57. package/dist/data-sources/evm-rpc-services/index.js.map +1 -0
  58. package/dist/data-sources/evm-rpc-services/services/{BalanceFetcher.d.cts → BalanceFetcher.d.ts} +11 -11
  59. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.ts.map +1 -0
  60. package/dist/data-sources/evm-rpc-services/services/{BalanceFetcher.mjs → BalanceFetcher.js} +5 -5
  61. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.js.map +1 -0
  62. package/dist/data-sources/evm-rpc-services/services/{StakedBalanceFetcher.d.mts → StakedBalanceFetcher.d.ts} +13 -14
  63. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.ts.map +1 -0
  64. package/dist/data-sources/evm-rpc-services/services/{StakedBalanceFetcher.mjs → StakedBalanceFetcher.js} +5 -6
  65. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.js.map +1 -0
  66. package/dist/data-sources/evm-rpc-services/services/{TokenDetector.d.cts → TokenDetector.d.ts} +12 -12
  67. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.ts.map +1 -0
  68. package/dist/data-sources/evm-rpc-services/services/{TokenDetector.mjs → TokenDetector.js} +4 -4
  69. package/dist/data-sources/evm-rpc-services/services/TokenDetector.js.map +1 -0
  70. package/dist/data-sources/evm-rpc-services/services/{index.d.cts → index.d.ts} +4 -4
  71. package/dist/data-sources/evm-rpc-services/services/index.d.ts.map +1 -0
  72. package/dist/data-sources/evm-rpc-services/services/index.js +4 -0
  73. package/dist/data-sources/evm-rpc-services/services/index.js.map +1 -0
  74. package/dist/data-sources/evm-rpc-services/types/{assets.d.cts → assets.d.ts} +3 -3
  75. package/dist/data-sources/evm-rpc-services/types/assets.d.ts.map +1 -0
  76. package/dist/data-sources/evm-rpc-services/types/assets.js +2 -0
  77. package/dist/data-sources/evm-rpc-services/types/assets.js.map +1 -0
  78. package/dist/data-sources/evm-rpc-services/types/{config.d.cts → config.d.ts} +2 -2
  79. package/dist/data-sources/evm-rpc-services/types/config.d.ts.map +1 -0
  80. package/dist/data-sources/evm-rpc-services/types/config.js +2 -0
  81. package/dist/data-sources/evm-rpc-services/types/config.js.map +1 -0
  82. package/dist/data-sources/evm-rpc-services/types/{core.d.cts → core.d.ts} +2 -2
  83. package/dist/data-sources/evm-rpc-services/types/core.d.ts.map +1 -0
  84. package/dist/data-sources/evm-rpc-services/types/core.js +2 -0
  85. package/dist/data-sources/evm-rpc-services/types/core.js.map +1 -0
  86. package/dist/data-sources/evm-rpc-services/types/index.d.ts +7 -0
  87. package/dist/data-sources/evm-rpc-services/types/index.d.ts.map +1 -0
  88. package/dist/data-sources/evm-rpc-services/types/index.js +2 -0
  89. package/dist/data-sources/evm-rpc-services/types/index.js.map +1 -0
  90. package/dist/data-sources/evm-rpc-services/types/{multicall.d.cts → multicall.d.ts} +2 -2
  91. package/dist/data-sources/evm-rpc-services/types/multicall.d.ts.map +1 -0
  92. package/dist/data-sources/evm-rpc-services/types/multicall.js +2 -0
  93. package/dist/data-sources/evm-rpc-services/types/multicall.js.map +1 -0
  94. package/dist/data-sources/evm-rpc-services/types/{services.d.cts → services.d.ts} +3 -3
  95. package/dist/data-sources/evm-rpc-services/types/services.d.ts.map +1 -0
  96. package/dist/data-sources/evm-rpc-services/types/services.js +2 -0
  97. package/dist/data-sources/evm-rpc-services/types/services.js.map +1 -0
  98. package/dist/data-sources/evm-rpc-services/types/{state.d.cts → state.d.ts} +2 -2
  99. package/dist/data-sources/evm-rpc-services/types/state.d.ts.map +1 -0
  100. package/dist/data-sources/evm-rpc-services/types/state.js +2 -0
  101. package/dist/data-sources/evm-rpc-services/types/state.js.map +1 -0
  102. package/dist/data-sources/evm-rpc-services/utils/{assets.d.cts → assets.d.ts} +2 -2
  103. package/dist/data-sources/evm-rpc-services/utils/assets.d.ts.map +1 -0
  104. package/dist/data-sources/evm-rpc-services/utils/{assets.mjs → assets.js} +2 -2
  105. package/dist/data-sources/evm-rpc-services/utils/assets.js.map +1 -0
  106. package/dist/data-sources/evm-rpc-services/utils/{batch.d.mts → batch.d.ts} +1 -1
  107. package/dist/data-sources/evm-rpc-services/utils/batch.d.ts.map +1 -0
  108. package/dist/data-sources/evm-rpc-services/utils/{batch.mjs → batch.js} +1 -1
  109. package/dist/data-sources/evm-rpc-services/utils/batch.js.map +1 -0
  110. package/dist/data-sources/evm-rpc-services/utils/index.d.ts +4 -0
  111. package/dist/data-sources/evm-rpc-services/utils/index.d.ts.map +1 -0
  112. package/dist/data-sources/evm-rpc-services/utils/index.js +4 -0
  113. package/dist/data-sources/evm-rpc-services/utils/index.js.map +1 -0
  114. package/dist/data-sources/evm-rpc-services/utils/{parsing.d.mts → parsing.d.ts} +3 -3
  115. package/dist/data-sources/evm-rpc-services/utils/parsing.d.ts.map +1 -0
  116. package/dist/data-sources/evm-rpc-services/utils/{parsing.mjs → parsing.js} +3 -3
  117. package/dist/data-sources/evm-rpc-services/utils/parsing.js.map +1 -0
  118. package/dist/data-sources/evm-rpc-services/utils/{staking-contracts.d.cts → staking-contracts.d.ts} +1 -1
  119. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.ts.map +1 -0
  120. package/dist/data-sources/evm-rpc-services/utils/{staking-contracts.mjs → staking-contracts.js} +3 -3
  121. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.js.map +1 -0
  122. package/dist/data-sources/{index.d.cts → index.d.ts} +9 -9
  123. package/dist/data-sources/index.d.ts.map +1 -0
  124. package/dist/data-sources/index.js +14 -0
  125. package/dist/data-sources/index.js.map +1 -0
  126. package/dist/{defaults.d.mts → defaults.d.ts} +2 -2
  127. package/dist/defaults.d.ts.map +1 -0
  128. package/dist/{defaults.mjs → defaults.js} +1 -1
  129. package/dist/defaults.js.map +1 -0
  130. package/dist/{errors.d.mts → errors.d.ts} +1 -1
  131. package/dist/errors.d.ts.map +1 -0
  132. package/dist/{errors.mjs → errors.js} +1 -1
  133. package/dist/errors.js.map +1 -0
  134. package/dist/{index.d.mts → index.d.ts} +26 -26
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/{index.mjs → index.js} +13 -13
  137. package/dist/index.js.map +1 -0
  138. package/dist/logger.d.ts +4 -0
  139. package/dist/logger.d.ts.map +1 -0
  140. package/dist/logger.js +4 -0
  141. package/dist/logger.js.map +1 -0
  142. package/dist/middlewares/{CustomAssetGraduationMiddleware.d.cts → CustomAssetGraduationMiddleware.d.ts} +2 -2
  143. package/dist/middlewares/CustomAssetGraduationMiddleware.d.ts.map +1 -0
  144. package/dist/middlewares/{CustomAssetGraduationMiddleware.mjs → CustomAssetGraduationMiddleware.js} +5 -5
  145. package/dist/middlewares/CustomAssetGraduationMiddleware.js.map +1 -0
  146. package/dist/middlewares/{DetectionMiddleware.d.cts → DetectionMiddleware.d.ts} +2 -2
  147. package/dist/middlewares/DetectionMiddleware.d.ts.map +1 -0
  148. package/dist/middlewares/{DetectionMiddleware.mjs → DetectionMiddleware.js} +4 -4
  149. package/dist/middlewares/DetectionMiddleware.js.map +1 -0
  150. package/dist/middlewares/{ParallelMiddleware.d.cts → ParallelMiddleware.d.ts} +2 -2
  151. package/dist/middlewares/ParallelMiddleware.d.ts.map +1 -0
  152. package/dist/middlewares/{ParallelMiddleware.mjs → ParallelMiddleware.js} +2 -9
  153. package/dist/middlewares/{ParallelMiddleware.mjs.map → ParallelMiddleware.js.map} +1 -1
  154. package/dist/middlewares/{RpcFallbackMiddleware.d.cts → RpcFallbackMiddleware.d.ts} +2 -2
  155. package/dist/middlewares/RpcFallbackMiddleware.d.ts.map +1 -0
  156. package/dist/middlewares/{RpcFallbackMiddleware.mjs → RpcFallbackMiddleware.js} +4 -4
  157. package/dist/middlewares/RpcFallbackMiddleware.js.map +1 -0
  158. package/dist/middlewares/index.d.ts +9 -0
  159. package/dist/middlewares/index.d.ts.map +1 -0
  160. package/dist/middlewares/index.js +5 -0
  161. package/dist/middlewares/index.js.map +1 -0
  162. package/dist/migrations/{healAssetsInfoMetadata.d.cts → healAssetsInfoMetadata.d.ts} +4 -4
  163. package/dist/migrations/healAssetsInfoMetadata.d.ts.map +1 -0
  164. package/dist/migrations/{healAssetsInfoMetadata.mjs → healAssetsInfoMetadata.js} +4 -5
  165. package/dist/migrations/healAssetsInfoMetadata.js.map +1 -0
  166. package/dist/selectors/{balance.d.cts → balance.d.ts} +6 -6
  167. package/dist/selectors/balance.d.ts.map +1 -0
  168. package/dist/selectors/{balance.mjs → balance.js} +5 -5
  169. package/dist/selectors/balance.js.map +1 -0
  170. package/dist/{types.d.mts → types.d.ts} +4 -4
  171. package/dist/types.d.ts.map +1 -0
  172. package/dist/{types.mjs → types.js} +1 -1
  173. package/dist/types.js.map +1 -0
  174. package/dist/utils/constants.d.ts +2 -0
  175. package/dist/utils/constants.d.ts.map +1 -0
  176. package/dist/utils/{constants.mjs → constants.js} +1 -1
  177. package/dist/utils/constants.js.map +1 -0
  178. package/dist/utils/{customAssetsRpcSupplement.d.mts → customAssetsRpcSupplement.d.ts} +2 -2
  179. package/dist/utils/customAssetsRpcSupplement.d.ts.map +1 -0
  180. package/dist/utils/{customAssetsRpcSupplement.mjs → customAssetsRpcSupplement.js} +2 -2
  181. package/dist/utils/customAssetsRpcSupplement.js.map +1 -0
  182. package/dist/utils/{dedupingBatchFetcher.d.cts → dedupingBatchFetcher.d.ts} +1 -1
  183. package/dist/utils/dedupingBatchFetcher.d.ts.map +1 -0
  184. package/dist/utils/{dedupingBatchFetcher.mjs → dedupingBatchFetcher.js} +1 -1
  185. package/dist/utils/dedupingBatchFetcher.js.map +1 -0
  186. package/dist/utils/{fetchWithTimeout.d.mts → fetchWithTimeout.d.ts} +1 -1
  187. package/dist/utils/fetchWithTimeout.d.ts.map +1 -0
  188. package/dist/utils/{fetchWithTimeout.mjs → fetchWithTimeout.js} +1 -1
  189. package/dist/utils/fetchWithTimeout.js.map +1 -0
  190. package/dist/utils/{formatExchangeRatesForBridge.d.mts → formatExchangeRatesForBridge.d.ts} +3 -3
  191. package/dist/utils/formatExchangeRatesForBridge.d.ts.map +1 -0
  192. package/dist/utils/{formatExchangeRatesForBridge.mjs → formatExchangeRatesForBridge.js} +6 -7
  193. package/dist/utils/formatExchangeRatesForBridge.js.map +1 -0
  194. package/dist/utils/{formatStateForTransactionPay.d.cts → formatStateForTransactionPay.d.ts} +3 -3
  195. package/dist/utils/formatStateForTransactionPay.d.ts.map +1 -0
  196. package/dist/utils/{formatStateForTransactionPay.mjs → formatStateForTransactionPay.js} +7 -8
  197. package/dist/utils/formatStateForTransactionPay.js.map +1 -0
  198. package/dist/utils/index.d.ts +9 -0
  199. package/dist/utils/index.d.ts.map +1 -0
  200. package/dist/utils/index.js +7 -0
  201. package/dist/utils/index.js.map +1 -0
  202. package/dist/utils/{native-assets.d.cts → native-assets.d.ts} +2 -2
  203. package/dist/utils/native-assets.d.ts.map +1 -0
  204. package/dist/utils/{native-assets.mjs → native-assets.js} +5 -5
  205. package/dist/utils/native-assets.js.map +1 -0
  206. package/dist/utils/{normalizeAmountString.d.mts → normalizeAmountString.d.ts} +1 -1
  207. package/dist/utils/normalizeAmountString.d.ts.map +1 -0
  208. package/dist/utils/{normalizeAmountString.mjs → normalizeAmountString.js} +2 -2
  209. package/dist/utils/normalizeAmountString.js.map +1 -0
  210. package/dist/utils/{normalizeAssetId.d.cts → normalizeAssetId.d.ts} +3 -3
  211. package/dist/utils/normalizeAssetId.d.ts.map +1 -0
  212. package/dist/utils/{normalizeAssetId.mjs → normalizeAssetId.js} +4 -11
  213. package/dist/utils/normalizeAssetId.js.map +1 -0
  214. package/dist/utils/{snaps-assets-migration.d.mts → snaps-assets-migration.d.ts} +5 -5
  215. package/dist/utils/snaps-assets-migration.d.ts.map +1 -0
  216. package/dist/utils/{snaps-assets-migration.mjs → snaps-assets-migration.js} +2 -2
  217. package/dist/utils/snaps-assets-migration.js.map +1 -0
  218. package/dist/utils/{trace.d.mts → trace.d.ts} +2 -2
  219. package/dist/utils/trace.d.ts.map +1 -0
  220. package/dist/utils/{trace.mjs → trace.js} +1 -1
  221. package/dist/utils/trace.js.map +1 -0
  222. package/package.json +15 -18
  223. package/dist/AssetsController-method-action-types.cjs +0 -7
  224. package/dist/AssetsController-method-action-types.cjs.map +0 -1
  225. package/dist/AssetsController-method-action-types.d.cts +0 -181
  226. package/dist/AssetsController-method-action-types.d.cts.map +0 -1
  227. package/dist/AssetsController-method-action-types.d.mts.map +0 -1
  228. package/dist/AssetsController-method-action-types.mjs.map +0 -1
  229. package/dist/AssetsController.cjs +0 -2559
  230. package/dist/AssetsController.cjs.map +0 -1
  231. package/dist/AssetsController.d.cts.map +0 -1
  232. package/dist/AssetsController.d.mts +0 -395
  233. package/dist/AssetsController.d.mts.map +0 -1
  234. package/dist/AssetsController.mjs.map +0 -1
  235. package/dist/data-sources/AbstractDataSource.cjs +0 -111
  236. package/dist/data-sources/AbstractDataSource.cjs.map +0 -1
  237. package/dist/data-sources/AbstractDataSource.d.cts +0 -113
  238. package/dist/data-sources/AbstractDataSource.d.cts.map +0 -1
  239. package/dist/data-sources/AbstractDataSource.d.mts.map +0 -1
  240. package/dist/data-sources/AbstractDataSource.mjs.map +0 -1
  241. package/dist/data-sources/AccountActivityDataSource.cjs +0 -267
  242. package/dist/data-sources/AccountActivityDataSource.cjs.map +0 -1
  243. package/dist/data-sources/AccountActivityDataSource.d.cts.map +0 -1
  244. package/dist/data-sources/AccountActivityDataSource.d.mts +0 -80
  245. package/dist/data-sources/AccountActivityDataSource.d.mts.map +0 -1
  246. package/dist/data-sources/AccountActivityDataSource.mjs.map +0 -1
  247. package/dist/data-sources/AccountsApiDataSource.cjs +0 -586
  248. package/dist/data-sources/AccountsApiDataSource.cjs.map +0 -1
  249. package/dist/data-sources/AccountsApiDataSource.d.cts.map +0 -1
  250. package/dist/data-sources/AccountsApiDataSource.d.mts +0 -82
  251. package/dist/data-sources/AccountsApiDataSource.d.mts.map +0 -1
  252. package/dist/data-sources/AccountsApiDataSource.mjs.map +0 -1
  253. package/dist/data-sources/PriceDataSource.cjs +0 -466
  254. package/dist/data-sources/PriceDataSource.cjs.map +0 -1
  255. package/dist/data-sources/PriceDataSource.d.cts.map +0 -1
  256. package/dist/data-sources/PriceDataSource.d.mts +0 -100
  257. package/dist/data-sources/PriceDataSource.d.mts.map +0 -1
  258. package/dist/data-sources/PriceDataSource.mjs.map +0 -1
  259. package/dist/data-sources/RpcDataSource.cjs +0 -1021
  260. package/dist/data-sources/RpcDataSource.cjs.map +0 -1
  261. package/dist/data-sources/RpcDataSource.d.cts.map +0 -1
  262. package/dist/data-sources/RpcDataSource.d.mts +0 -174
  263. package/dist/data-sources/RpcDataSource.d.mts.map +0 -1
  264. package/dist/data-sources/RpcDataSource.mjs.map +0 -1
  265. package/dist/data-sources/SnapDataSource.cjs +0 -443
  266. package/dist/data-sources/SnapDataSource.cjs.map +0 -1
  267. package/dist/data-sources/SnapDataSource.d.cts.map +0 -1
  268. package/dist/data-sources/SnapDataSource.d.mts +0 -127
  269. package/dist/data-sources/SnapDataSource.d.mts.map +0 -1
  270. package/dist/data-sources/SnapDataSource.mjs.map +0 -1
  271. package/dist/data-sources/StakedBalanceDataSource.cjs +0 -616
  272. package/dist/data-sources/StakedBalanceDataSource.cjs.map +0 -1
  273. package/dist/data-sources/StakedBalanceDataSource.d.cts.map +0 -1
  274. package/dist/data-sources/StakedBalanceDataSource.d.mts +0 -72
  275. package/dist/data-sources/StakedBalanceDataSource.d.mts.map +0 -1
  276. package/dist/data-sources/StakedBalanceDataSource.mjs.map +0 -1
  277. package/dist/data-sources/TokenDataSource.cjs +0 -583
  278. package/dist/data-sources/TokenDataSource.cjs.map +0 -1
  279. package/dist/data-sources/TokenDataSource.d.cts.map +0 -1
  280. package/dist/data-sources/TokenDataSource.d.mts +0 -81
  281. package/dist/data-sources/TokenDataSource.d.mts.map +0 -1
  282. package/dist/data-sources/TokenDataSource.mjs.map +0 -1
  283. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +0 -705
  284. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +0 -1
  285. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +0 -1
  286. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts +0 -65
  287. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +0 -1
  288. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +0 -1
  289. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs +0 -312
  290. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs.map +0 -1
  291. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.cts.map +0 -1
  292. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts +0 -61
  293. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts.map +0 -1
  294. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.mjs.map +0 -1
  295. package/dist/data-sources/evm-rpc-services/clients/index.cjs +0 -10
  296. package/dist/data-sources/evm-rpc-services/clients/index.cjs.map +0 -1
  297. package/dist/data-sources/evm-rpc-services/clients/index.d.cts +0 -4
  298. package/dist/data-sources/evm-rpc-services/clients/index.d.cts.map +0 -1
  299. package/dist/data-sources/evm-rpc-services/clients/index.d.mts +0 -4
  300. package/dist/data-sources/evm-rpc-services/clients/index.d.mts.map +0 -1
  301. package/dist/data-sources/evm-rpc-services/clients/index.mjs +0 -3
  302. package/dist/data-sources/evm-rpc-services/clients/index.mjs.map +0 -1
  303. package/dist/data-sources/evm-rpc-services/index.cjs +0 -17
  304. package/dist/data-sources/evm-rpc-services/index.cjs.map +0 -1
  305. package/dist/data-sources/evm-rpc-services/index.d.cts.map +0 -1
  306. package/dist/data-sources/evm-rpc-services/index.d.mts +0 -5
  307. package/dist/data-sources/evm-rpc-services/index.d.mts.map +0 -1
  308. package/dist/data-sources/evm-rpc-services/index.mjs +0 -4
  309. package/dist/data-sources/evm-rpc-services/index.mjs.map +0 -1
  310. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +0 -247
  311. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +0 -1
  312. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +0 -1
  313. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +0 -96
  314. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +0 -1
  315. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs.map +0 -1
  316. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs +0 -132
  317. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs.map +0 -1
  318. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts +0 -81
  319. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts.map +0 -1
  320. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts.map +0 -1
  321. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs.map +0 -1
  322. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs +0 -230
  323. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +0 -1
  324. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts.map +0 -1
  325. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts +0 -78
  326. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +0 -1
  327. package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs.map +0 -1
  328. package/dist/data-sources/evm-rpc-services/services/index.cjs +0 -13
  329. package/dist/data-sources/evm-rpc-services/services/index.cjs.map +0 -1
  330. package/dist/data-sources/evm-rpc-services/services/index.d.cts.map +0 -1
  331. package/dist/data-sources/evm-rpc-services/services/index.d.mts +0 -4
  332. package/dist/data-sources/evm-rpc-services/services/index.d.mts.map +0 -1
  333. package/dist/data-sources/evm-rpc-services/services/index.mjs +0 -4
  334. package/dist/data-sources/evm-rpc-services/services/index.mjs.map +0 -1
  335. package/dist/data-sources/evm-rpc-services/types/assets.cjs +0 -3
  336. package/dist/data-sources/evm-rpc-services/types/assets.cjs.map +0 -1
  337. package/dist/data-sources/evm-rpc-services/types/assets.d.cts.map +0 -1
  338. package/dist/data-sources/evm-rpc-services/types/assets.d.mts +0 -53
  339. package/dist/data-sources/evm-rpc-services/types/assets.d.mts.map +0 -1
  340. package/dist/data-sources/evm-rpc-services/types/assets.mjs +0 -2
  341. package/dist/data-sources/evm-rpc-services/types/assets.mjs.map +0 -1
  342. package/dist/data-sources/evm-rpc-services/types/config.cjs +0 -3
  343. package/dist/data-sources/evm-rpc-services/types/config.cjs.map +0 -1
  344. package/dist/data-sources/evm-rpc-services/types/config.d.cts.map +0 -1
  345. package/dist/data-sources/evm-rpc-services/types/config.d.mts +0 -18
  346. package/dist/data-sources/evm-rpc-services/types/config.d.mts.map +0 -1
  347. package/dist/data-sources/evm-rpc-services/types/config.mjs +0 -2
  348. package/dist/data-sources/evm-rpc-services/types/config.mjs.map +0 -1
  349. package/dist/data-sources/evm-rpc-services/types/core.cjs +0 -3
  350. package/dist/data-sources/evm-rpc-services/types/core.cjs.map +0 -1
  351. package/dist/data-sources/evm-rpc-services/types/core.d.cts.map +0 -1
  352. package/dist/data-sources/evm-rpc-services/types/core.d.mts +0 -19
  353. package/dist/data-sources/evm-rpc-services/types/core.d.mts.map +0 -1
  354. package/dist/data-sources/evm-rpc-services/types/core.mjs +0 -2
  355. package/dist/data-sources/evm-rpc-services/types/core.mjs.map +0 -1
  356. package/dist/data-sources/evm-rpc-services/types/index.cjs +0 -3
  357. package/dist/data-sources/evm-rpc-services/types/index.cjs.map +0 -1
  358. package/dist/data-sources/evm-rpc-services/types/index.d.cts +0 -7
  359. package/dist/data-sources/evm-rpc-services/types/index.d.cts.map +0 -1
  360. package/dist/data-sources/evm-rpc-services/types/index.d.mts +0 -7
  361. package/dist/data-sources/evm-rpc-services/types/index.d.mts.map +0 -1
  362. package/dist/data-sources/evm-rpc-services/types/index.mjs +0 -2
  363. package/dist/data-sources/evm-rpc-services/types/index.mjs.map +0 -1
  364. package/dist/data-sources/evm-rpc-services/types/multicall.cjs +0 -3
  365. package/dist/data-sources/evm-rpc-services/types/multicall.cjs.map +0 -1
  366. package/dist/data-sources/evm-rpc-services/types/multicall.d.cts.map +0 -1
  367. package/dist/data-sources/evm-rpc-services/types/multicall.d.mts +0 -24
  368. package/dist/data-sources/evm-rpc-services/types/multicall.d.mts.map +0 -1
  369. package/dist/data-sources/evm-rpc-services/types/multicall.mjs +0 -2
  370. package/dist/data-sources/evm-rpc-services/types/multicall.mjs.map +0 -1
  371. package/dist/data-sources/evm-rpc-services/types/services.cjs +0 -3
  372. package/dist/data-sources/evm-rpc-services/types/services.cjs.map +0 -1
  373. package/dist/data-sources/evm-rpc-services/types/services.d.cts.map +0 -1
  374. package/dist/data-sources/evm-rpc-services/types/services.d.mts +0 -70
  375. package/dist/data-sources/evm-rpc-services/types/services.d.mts.map +0 -1
  376. package/dist/data-sources/evm-rpc-services/types/services.mjs +0 -2
  377. package/dist/data-sources/evm-rpc-services/types/services.mjs.map +0 -1
  378. package/dist/data-sources/evm-rpc-services/types/state.cjs +0 -3
  379. package/dist/data-sources/evm-rpc-services/types/state.cjs.map +0 -1
  380. package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +0 -1
  381. package/dist/data-sources/evm-rpc-services/types/state.d.mts +0 -58
  382. package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +0 -1
  383. package/dist/data-sources/evm-rpc-services/types/state.mjs +0 -2
  384. package/dist/data-sources/evm-rpc-services/types/state.mjs.map +0 -1
  385. package/dist/data-sources/evm-rpc-services/utils/assets.cjs +0 -9
  386. package/dist/data-sources/evm-rpc-services/utils/assets.cjs.map +0 -1
  387. package/dist/data-sources/evm-rpc-services/utils/assets.d.cts.map +0 -1
  388. package/dist/data-sources/evm-rpc-services/utils/assets.d.mts +0 -3
  389. package/dist/data-sources/evm-rpc-services/utils/assets.d.mts.map +0 -1
  390. package/dist/data-sources/evm-rpc-services/utils/assets.mjs.map +0 -1
  391. package/dist/data-sources/evm-rpc-services/utils/batch.cjs +0 -45
  392. package/dist/data-sources/evm-rpc-services/utils/batch.cjs.map +0 -1
  393. package/dist/data-sources/evm-rpc-services/utils/batch.d.cts +0 -28
  394. package/dist/data-sources/evm-rpc-services/utils/batch.d.cts.map +0 -1
  395. package/dist/data-sources/evm-rpc-services/utils/batch.d.mts.map +0 -1
  396. package/dist/data-sources/evm-rpc-services/utils/batch.mjs.map +0 -1
  397. package/dist/data-sources/evm-rpc-services/utils/index.cjs +0 -15
  398. package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +0 -1
  399. package/dist/data-sources/evm-rpc-services/utils/index.d.cts +0 -4
  400. package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +0 -1
  401. package/dist/data-sources/evm-rpc-services/utils/index.d.mts +0 -4
  402. package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +0 -1
  403. package/dist/data-sources/evm-rpc-services/utils/index.mjs +0 -4
  404. package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +0 -1
  405. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs +0 -47
  406. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs.map +0 -1
  407. package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts +0 -25
  408. package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts.map +0 -1
  409. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts.map +0 -1
  410. package/dist/data-sources/evm-rpc-services/utils/parsing.mjs.map +0 -1
  411. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs +0 -68
  412. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs.map +0 -1
  413. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts.map +0 -1
  414. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts +0 -25
  415. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts.map +0 -1
  416. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs.map +0 -1
  417. package/dist/data-sources/index.cjs +0 -30
  418. package/dist/data-sources/index.cjs.map +0 -1
  419. package/dist/data-sources/index.d.cts.map +0 -1
  420. package/dist/data-sources/index.d.mts +0 -9
  421. package/dist/data-sources/index.d.mts.map +0 -1
  422. package/dist/data-sources/index.mjs +0 -14
  423. package/dist/data-sources/index.mjs.map +0 -1
  424. package/dist/defaults.cjs +0 -125
  425. package/dist/defaults.cjs.map +0 -1
  426. package/dist/defaults.d.cts +0 -50
  427. package/dist/defaults.d.cts.map +0 -1
  428. package/dist/defaults.d.mts.map +0 -1
  429. package/dist/defaults.mjs.map +0 -1
  430. package/dist/errors.cjs +0 -25
  431. package/dist/errors.cjs.map +0 -1
  432. package/dist/errors.d.cts +0 -25
  433. package/dist/errors.d.cts.map +0 -1
  434. package/dist/errors.d.mts.map +0 -1
  435. package/dist/errors.mjs.map +0 -1
  436. package/dist/index.cjs +0 -67
  437. package/dist/index.cjs.map +0 -1
  438. package/dist/index.d.cts +0 -26
  439. package/dist/index.d.cts.map +0 -1
  440. package/dist/index.d.mts.map +0 -1
  441. package/dist/index.mjs.map +0 -1
  442. package/dist/logger.cjs +0 -7
  443. package/dist/logger.cjs.map +0 -1
  444. package/dist/logger.d.cts +0 -5
  445. package/dist/logger.d.cts.map +0 -1
  446. package/dist/logger.d.mts +0 -5
  447. package/dist/logger.d.mts.map +0 -1
  448. package/dist/logger.mjs +0 -4
  449. package/dist/logger.mjs.map +0 -1
  450. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs +0 -132
  451. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs.map +0 -1
  452. package/dist/middlewares/CustomAssetGraduationMiddleware.d.cts.map +0 -1
  453. package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts +0 -32
  454. package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts.map +0 -1
  455. package/dist/middlewares/CustomAssetGraduationMiddleware.mjs.map +0 -1
  456. package/dist/middlewares/DetectionMiddleware.cjs +0 -154
  457. package/dist/middlewares/DetectionMiddleware.cjs.map +0 -1
  458. package/dist/middlewares/DetectionMiddleware.d.cts.map +0 -1
  459. package/dist/middlewares/DetectionMiddleware.d.mts +0 -40
  460. package/dist/middlewares/DetectionMiddleware.d.mts.map +0 -1
  461. package/dist/middlewares/DetectionMiddleware.mjs.map +0 -1
  462. package/dist/middlewares/ParallelMiddleware.cjs +0 -263
  463. package/dist/middlewares/ParallelMiddleware.cjs.map +0 -1
  464. package/dist/middlewares/ParallelMiddleware.d.cts.map +0 -1
  465. package/dist/middlewares/ParallelMiddleware.d.mts +0 -41
  466. package/dist/middlewares/ParallelMiddleware.d.mts.map +0 -1
  467. package/dist/middlewares/RpcFallbackMiddleware.cjs +0 -90
  468. package/dist/middlewares/RpcFallbackMiddleware.cjs.map +0 -1
  469. package/dist/middlewares/RpcFallbackMiddleware.d.cts.map +0 -1
  470. package/dist/middlewares/RpcFallbackMiddleware.d.mts +0 -23
  471. package/dist/middlewares/RpcFallbackMiddleware.d.mts.map +0 -1
  472. package/dist/middlewares/RpcFallbackMiddleware.mjs.map +0 -1
  473. package/dist/middlewares/index.cjs +0 -14
  474. package/dist/middlewares/index.cjs.map +0 -1
  475. package/dist/middlewares/index.d.cts +0 -9
  476. package/dist/middlewares/index.d.cts.map +0 -1
  477. package/dist/middlewares/index.d.mts +0 -9
  478. package/dist/middlewares/index.d.mts.map +0 -1
  479. package/dist/middlewares/index.mjs +0 -5
  480. package/dist/middlewares/index.mjs.map +0 -1
  481. package/dist/migrations/healAssetsInfoMetadata.cjs +0 -385
  482. package/dist/migrations/healAssetsInfoMetadata.cjs.map +0 -1
  483. package/dist/migrations/healAssetsInfoMetadata.d.cts.map +0 -1
  484. package/dist/migrations/healAssetsInfoMetadata.d.mts +0 -106
  485. package/dist/migrations/healAssetsInfoMetadata.d.mts.map +0 -1
  486. package/dist/migrations/healAssetsInfoMetadata.mjs.map +0 -1
  487. package/dist/selectors/balance.cjs +0 -532
  488. package/dist/selectors/balance.cjs.map +0 -1
  489. package/dist/selectors/balance.d.cts.map +0 -1
  490. package/dist/selectors/balance.d.mts +0 -103
  491. package/dist/selectors/balance.d.mts.map +0 -1
  492. package/dist/selectors/balance.mjs.map +0 -1
  493. package/dist/types.cjs +0 -39
  494. package/dist/types.cjs.map +0 -1
  495. package/dist/types.d.cts +0 -533
  496. package/dist/types.d.cts.map +0 -1
  497. package/dist/types.d.mts.map +0 -1
  498. package/dist/types.mjs.map +0 -1
  499. package/dist/utils/constants.cjs +0 -5
  500. package/dist/utils/constants.cjs.map +0 -1
  501. package/dist/utils/constants.d.cts +0 -2
  502. package/dist/utils/constants.d.cts.map +0 -1
  503. package/dist/utils/constants.d.mts +0 -2
  504. package/dist/utils/constants.d.mts.map +0 -1
  505. package/dist/utils/constants.mjs.map +0 -1
  506. package/dist/utils/customAssetsRpcSupplement.cjs +0 -72
  507. package/dist/utils/customAssetsRpcSupplement.cjs.map +0 -1
  508. package/dist/utils/customAssetsRpcSupplement.d.cts +0 -60
  509. package/dist/utils/customAssetsRpcSupplement.d.cts.map +0 -1
  510. package/dist/utils/customAssetsRpcSupplement.d.mts.map +0 -1
  511. package/dist/utils/customAssetsRpcSupplement.mjs.map +0 -1
  512. package/dist/utils/dedupingBatchFetcher.cjs +0 -168
  513. package/dist/utils/dedupingBatchFetcher.cjs.map +0 -1
  514. package/dist/utils/dedupingBatchFetcher.d.cts.map +0 -1
  515. package/dist/utils/dedupingBatchFetcher.d.mts +0 -72
  516. package/dist/utils/dedupingBatchFetcher.d.mts.map +0 -1
  517. package/dist/utils/dedupingBatchFetcher.mjs.map +0 -1
  518. package/dist/utils/fetchWithTimeout.cjs +0 -30
  519. package/dist/utils/fetchWithTimeout.cjs.map +0 -1
  520. package/dist/utils/fetchWithTimeout.d.cts +0 -11
  521. package/dist/utils/fetchWithTimeout.d.cts.map +0 -1
  522. package/dist/utils/fetchWithTimeout.d.mts.map +0 -1
  523. package/dist/utils/fetchWithTimeout.mjs.map +0 -1
  524. package/dist/utils/formatExchangeRatesForBridge.cjs +0 -161
  525. package/dist/utils/formatExchangeRatesForBridge.cjs.map +0 -1
  526. package/dist/utils/formatExchangeRatesForBridge.d.cts +0 -43
  527. package/dist/utils/formatExchangeRatesForBridge.d.cts.map +0 -1
  528. package/dist/utils/formatExchangeRatesForBridge.d.mts.map +0 -1
  529. package/dist/utils/formatExchangeRatesForBridge.mjs.map +0 -1
  530. package/dist/utils/formatStateForTransactionPay.cjs +0 -174
  531. package/dist/utils/formatStateForTransactionPay.cjs.map +0 -1
  532. package/dist/utils/formatStateForTransactionPay.d.cts.map +0 -1
  533. package/dist/utils/formatStateForTransactionPay.d.mts +0 -72
  534. package/dist/utils/formatStateForTransactionPay.d.mts.map +0 -1
  535. package/dist/utils/formatStateForTransactionPay.mjs.map +0 -1
  536. package/dist/utils/index.cjs +0 -21
  537. package/dist/utils/index.cjs.map +0 -1
  538. package/dist/utils/index.d.cts +0 -9
  539. package/dist/utils/index.d.cts.map +0 -1
  540. package/dist/utils/index.d.mts +0 -9
  541. package/dist/utils/index.d.mts.map +0 -1
  542. package/dist/utils/index.mjs +0 -7
  543. package/dist/utils/index.mjs.map +0 -1
  544. package/dist/utils/native-assets.cjs +0 -64
  545. package/dist/utils/native-assets.cjs.map +0 -1
  546. package/dist/utils/native-assets.d.cts.map +0 -1
  547. package/dist/utils/native-assets.d.mts +0 -19
  548. package/dist/utils/native-assets.d.mts.map +0 -1
  549. package/dist/utils/native-assets.mjs.map +0 -1
  550. package/dist/utils/normalizeAmountString.cjs +0 -64
  551. package/dist/utils/normalizeAmountString.cjs.map +0 -1
  552. package/dist/utils/normalizeAmountString.d.cts +0 -35
  553. package/dist/utils/normalizeAmountString.d.cts.map +0 -1
  554. package/dist/utils/normalizeAmountString.d.mts.map +0 -1
  555. package/dist/utils/normalizeAmountString.mjs.map +0 -1
  556. package/dist/utils/normalizeAssetId.cjs +0 -60
  557. package/dist/utils/normalizeAssetId.cjs.map +0 -1
  558. package/dist/utils/normalizeAssetId.d.cts.map +0 -1
  559. package/dist/utils/normalizeAssetId.d.mts +0 -32
  560. package/dist/utils/normalizeAssetId.d.mts.map +0 -1
  561. package/dist/utils/normalizeAssetId.mjs.map +0 -1
  562. package/dist/utils/snaps-assets-migration.cjs +0 -171
  563. package/dist/utils/snaps-assets-migration.cjs.map +0 -1
  564. package/dist/utils/snaps-assets-migration.d.cts +0 -113
  565. package/dist/utils/snaps-assets-migration.d.cts.map +0 -1
  566. package/dist/utils/snaps-assets-migration.d.mts.map +0 -1
  567. package/dist/utils/snaps-assets-migration.mjs.map +0 -1
  568. package/dist/utils/trace.cjs +0 -120
  569. package/dist/utils/trace.cjs.map +0 -1
  570. package/dist/utils/trace.d.cts +0 -52
  571. package/dist/utils/trace.d.cts.map +0 -1
  572. package/dist/utils/trace.d.mts.map +0 -1
  573. package/dist/utils/trace.mjs.map +0 -1
@@ -1,532 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.calculateBalanceChangeForAccountGroup = exports.calculateBalanceForAllWallets = exports.getAggregatedBalanceForAccount = exports.getAggregatedBalanceForAccountIds = exports.getAccountIdsForGroup = exports.getInternalAccountsForGroup = exports.getGroupIdForAccount = void 0;
7
- const controller_utils_1 = require("@metamask/controller-utils");
8
- const utils_1 = require("@metamask/utils");
9
- const bignumber_js_1 = __importDefault(require("bignumber.js"));
10
- const trace_js_1 = require("../utils/trace.cjs");
11
- // ============================================================================
12
- // TRACE NAMES — used in Sentry spans (search these strings in Discover)
13
- // ============================================================================
14
- /** Parent span that nests {@link TRACE_AGGREGATED_BALANCE_SELECTOR}. */
15
- const TRACE_AGGREGATED_BALANCE = 'AggregatedBalance';
16
- const TRACE_AGGREGATED_BALANCE_SELECTOR = 'AggregatedBalanceSelector';
17
- /**
18
- * Emit `AggregatedBalanceSelector` as a **subspan** under an `AggregatedBalance`
19
- * parent (via `parentContext`).
20
- *
21
- * Work is timed outside the callback (selectors are sync), so we backdate
22
- * `startTime` via `duration_ms` — MetaMask's Sentry adapter promotes numeric
23
- * tags to measurements, which Spans dashboard widgets chart as `duration_ms`.
24
- *
25
- * @param trace - Trace callback from the client.
26
- * @param durationMs - Measured compute time in milliseconds.
27
- * @param data - Additional span attributes (counts, etc.).
28
- */
29
- function emitAggregatedBalanceSelectorTrace(trace, durationMs, data) {
30
- const spanData = {
31
- duration_ms: durationMs,
32
- ...data,
33
- };
34
- (0, trace_js_1.withTrace)({
35
- name: TRACE_AGGREGATED_BALANCE,
36
- trace,
37
- data: spanData,
38
- fn: async (parentContext) => {
39
- (0, trace_js_1.emitTrace)({
40
- name: TRACE_AGGREGATED_BALANCE_SELECTOR,
41
- trace,
42
- data: spanData,
43
- parentContext,
44
- });
45
- },
46
- }).catch(() => {
47
- // Telemetry failure must not break.
48
- });
49
- }
50
- const ZERO_PRICE = { price: 0, pricePercentChange1d: 0 };
51
- const getAmountFromBalance = (balance) => {
52
- if (typeof balance === 'object' && balance !== null && 'amount' in balance) {
53
- const { amount } = balance;
54
- return typeof amount === 'string' ? amount : '0';
55
- }
56
- return '0';
57
- };
58
- const toBigNumberOrZero = (value) => {
59
- const parsed = new bignumber_js_1.default(value);
60
- return parsed.isNaN() || !parsed.isFinite() ? new bignumber_js_1.default(0) : parsed;
61
- };
62
- const getPriceDatumFast = (assetsPrice, assetId) => {
63
- const raw = assetsPrice?.[assetId];
64
- if (!raw || typeof raw !== 'object') {
65
- return ZERO_PRICE;
66
- }
67
- const { price, pricePercentChange1d } = raw;
68
- return {
69
- price: typeof price === 'number' && Number.isFinite(price) ? price : 0,
70
- pricePercentChange1d: typeof pricePercentChange1d === 'number' &&
71
- Number.isFinite(pricePercentChange1d)
72
- ? pricePercentChange1d
73
- : 0,
74
- };
75
- };
76
- /**
77
- * Enablement lookup optimized:
78
- * - no array allocations
79
- * - early returns
80
- *
81
- * @param map - Enabled network map (namespace -> storageKey -> boolean)
82
- * @param id - Chain id as Hex or CAIP-2
83
- * @returns True if the chain is enabled or map is undefined
84
- */
85
- const isChainEnabledByMap = (map, id) => {
86
- if (!map) {
87
- return true;
88
- }
89
- if ((0, utils_1.isStrictHexString)(id)) {
90
- return Boolean(map[utils_1.KnownCaipNamespace.Eip155]?.[id]);
91
- }
92
- const { namespace, reference } = (0, utils_1.parseCaipChainId)(id);
93
- const namespaceMap = map[namespace];
94
- if (!namespaceMap) {
95
- return false;
96
- }
97
- // exact CAIP-2 id / reference
98
- if (namespaceMap[id] || namespaceMap[reference]) {
99
- return true;
100
- }
101
- // EVM: hex storage key
102
- if (namespace === utils_1.KnownCaipNamespace.Eip155) {
103
- try {
104
- const storageKey = (0, controller_utils_1.toHex)(reference);
105
- return Boolean(namespaceMap[storageKey]);
106
- }
107
- catch {
108
- const parsedRef = Number.parseInt(reference, 10);
109
- if (Number.isFinite(parsedRef)) {
110
- return Boolean(namespaceMap[`0x${parsedRef.toString(16)}`]);
111
- }
112
- }
113
- }
114
- return false;
115
- };
116
- const makeAssetInfoCache = () => new Map();
117
- const getAssetInfo = (cache, assetId) => {
118
- const cached = cache.get(assetId);
119
- if (cached) {
120
- return cached;
121
- }
122
- const { chainId } = (0, utils_1.parseCaipAssetType)(assetId);
123
- const { namespace } = (0, utils_1.parseCaipChainId)(chainId);
124
- const info = { chainId, isEvm: namespace === utils_1.KnownCaipNamespace.Eip155 };
125
- cache.set(assetId, info);
126
- return info;
127
- };
128
- function mergeBalancesIntoMap(args) {
129
- const { out, accountBalances, metadata, assetPreferences, enabledNetworkMap, assetInfoCache, } = args;
130
- for (const assetId in accountBalances) {
131
- if (!Object.prototype.hasOwnProperty.call(accountBalances, assetId)) {
132
- continue;
133
- }
134
- const typedAssetId = assetId;
135
- if (assetPreferences?.[typedAssetId]?.hidden) {
136
- continue;
137
- }
138
- const info = getAssetInfo(assetInfoCache, typedAssetId);
139
- if (!isChainEnabledByMap(enabledNetworkMap, info.chainId)) {
140
- continue;
141
- }
142
- const amountStr = getAmountFromBalance(accountBalances[typedAssetId]);
143
- const amountBn = toBigNumberOrZero(amountStr);
144
- const meta = metadata[typedAssetId];
145
- if (amountBn.isZero()) {
146
- continue; // skip zeros early to reduce map pressure
147
- }
148
- const existing = out.get(typedAssetId);
149
- if (existing) {
150
- existing.amount = existing.amount.plus(amountBn);
151
- continue;
152
- }
153
- out.set(typedAssetId, {
154
- amount: amountBn,
155
- decimals: meta?.decimals,
156
- symbol: meta?.symbol,
157
- name: meta?.name,
158
- });
159
- }
160
- }
161
- function getGroupIdForAccount(accountTreeState, accountId) {
162
- const wallets = accountTreeState.accountTree?.wallets;
163
- if (!wallets) {
164
- return undefined;
165
- }
166
- for (const wallet of Object.values(wallets)) {
167
- for (const [groupId, group] of Object.entries(wallet?.groups ?? {})) {
168
- const accounts = group?.accounts;
169
- if (Array.isArray(accounts) && accounts.includes(accountId)) {
170
- return groupId;
171
- }
172
- }
173
- }
174
- return undefined;
175
- }
176
- exports.getGroupIdForAccount = getGroupIdForAccount;
177
- function getInternalAccountsForGroup(accountTreeState, accountsById, groupId) {
178
- const wallets = accountTreeState.accountTree?.wallets;
179
- if (!wallets) {
180
- return [];
181
- }
182
- const getGroups = (walletItem) => (walletItem?.groups ?? {});
183
- for (const wallet of Object.values(wallets)) {
184
- const group = getGroups(wallet)[groupId];
185
- if (!group?.accounts) {
186
- continue;
187
- }
188
- const result = [];
189
- for (const id of group.accounts) {
190
- const acct = accountsById[id];
191
- if (acct) {
192
- result.push(acct);
193
- }
194
- }
195
- return result;
196
- }
197
- return [];
198
- }
199
- exports.getInternalAccountsForGroup = getInternalAccountsForGroup;
200
- function getAccountIdsInSameGroup(accountTreeState, selectedAccountId) {
201
- const groupId = getGroupIdForAccount(accountTreeState, selectedAccountId);
202
- if (!groupId) {
203
- return undefined;
204
- }
205
- const wallets = accountTreeState.accountTree?.wallets;
206
- if (!wallets) {
207
- return undefined;
208
- }
209
- const getGroups = (walletItem) => (walletItem?.groups ?? {});
210
- for (const wallet of Object.values(wallets)) {
211
- const group = getGroups(wallet)[groupId];
212
- if (group?.accounts) {
213
- return [...group.accounts];
214
- }
215
- }
216
- return undefined;
217
- }
218
- function resolveAccountsToAggregate(args) {
219
- const { selectedInternalAccount, accountTreeState, internalAccountsOrAccountIds, accountsById, } = args;
220
- if (internalAccountsOrAccountIds && internalAccountsOrAccountIds.length > 0) {
221
- const first = internalAccountsOrAccountIds[0];
222
- if (typeof first === 'string') {
223
- const ids = internalAccountsOrAccountIds;
224
- const out = new Array(ids.length);
225
- for (let i = 0; i < ids.length; i++) {
226
- out[i] = { id: ids[i] };
227
- }
228
- return out;
229
- }
230
- return internalAccountsOrAccountIds;
231
- }
232
- if (accountTreeState &&
233
- accountsById &&
234
- Object.keys(accountsById).length > 0) {
235
- const groupId = getGroupIdForAccount(accountTreeState, selectedInternalAccount.id);
236
- if (groupId) {
237
- const groupAccounts = getInternalAccountsForGroup(accountTreeState, accountsById, groupId);
238
- if (groupAccounts.length > 0) {
239
- return groupAccounts;
240
- }
241
- }
242
- }
243
- if (accountTreeState) {
244
- const ids = getAccountIdsInSameGroup(accountTreeState, selectedInternalAccount.id);
245
- if (ids && ids.length > 0) {
246
- const out = new Array(ids.length);
247
- for (let i = 0; i < ids.length; i++) {
248
- out[i] = { id: ids[i] };
249
- }
250
- return out;
251
- }
252
- }
253
- return [selectedInternalAccount];
254
- }
255
- /**
256
- * Get account ids that belong to a group, reading directly from the account
257
- * tree. Unlike {@link getInternalAccountsForGroup}, this does not require an
258
- * `accountsById` lookup map, which makes it convenient for balance aggregation
259
- * where only the ids are needed.
260
- *
261
- * @param accountTreeState - AccountTreeController state.
262
- * @param groupId - The account group id to look up.
263
- * @returns The list of account ids in the group, or an empty array.
264
- */
265
- function getAccountIdsForGroup(accountTreeState, groupId) {
266
- const wallets = accountTreeState.accountTree?.wallets ?? {};
267
- for (const wallet of Object.values(wallets)) {
268
- const groups = (wallet?.groups ?? {});
269
- const group = groups[groupId];
270
- if (group?.accounts) {
271
- return [...group.accounts];
272
- }
273
- }
274
- return [];
275
- }
276
- exports.getAccountIdsForGroup = getAccountIdsForGroup;
277
- /**
278
- * Aggregate balances across an explicit list of accounts.
279
- *
280
- * This is the core aggregation engine shared by the account- and group-level
281
- * selectors. It intentionally takes a fully-resolved list of accounts so that
282
- * callers control account resolution and no "selected account" placeholder is
283
- * required.
284
- *
285
- * @param state - AssetsController state slice.
286
- * @param accounts - Accounts whose balances should be aggregated.
287
- * @param enabledNetworkMap - Optional map of enabled networks keyed by namespace.
288
- * @param trace - Optional trace callback for telemetry spans.
289
- * @returns Aggregated balance entries plus fiat totals when prices are present.
290
- */
291
- function aggregateBalances(state, accounts, enabledNetworkMap, trace) {
292
- const startTime = trace ? performance.now() : 0;
293
- const { assetsBalance, assetsInfo, assetPreferences, assetsPrice } = state;
294
- const metadata = (assetsInfo ?? {});
295
- const hasPrices = Boolean(assetsPrice) &&
296
- (() => {
297
- for (const key in assetsPrice) {
298
- if (Object.prototype.hasOwnProperty.call(assetsPrice, key)) {
299
- return true;
300
- }
301
- }
302
- return false;
303
- })();
304
- const accountsToAggregate = accounts;
305
- const assetInfoCache = makeAssetInfoCache();
306
- const merged = new Map();
307
- for (const account of accountsToAggregate) {
308
- const accountId = account.id;
309
- const accountBalances = assetsBalance?.[accountId] ?? {};
310
- mergeBalancesIntoMap({
311
- out: merged,
312
- accountBalances,
313
- metadata,
314
- assetPreferences,
315
- enabledNetworkMap,
316
- assetInfoCache,
317
- });
318
- }
319
- // Materialize entries once
320
- const entries = new Array(merged.size);
321
- let idx = 0;
322
- // If prices exist, compute totals in a single pass over merged.
323
- let totalBalanceInFiat = 0;
324
- let previousTotalInFiat = 0;
325
- let weightedNumerator = 0;
326
- for (const [assetId, row] of merged.entries()) {
327
- const { amount } = row;
328
- const entry = {
329
- assetId,
330
- amount: amount.toFixed(),
331
- ...(row.decimals === undefined ? {} : { decimals: row.decimals }),
332
- ...(row.symbol === undefined ? {} : { symbol: row.symbol }),
333
- ...(row.name === undefined ? {} : { name: row.name }),
334
- };
335
- entries[idx] = entry;
336
- idx += 1;
337
- if (hasPrices) {
338
- const { price, pricePercentChange1d } = getPriceDatumFast(assetsPrice, assetId);
339
- const contribution = amount.multipliedBy(price).toNumber();
340
- if (contribution > 0) {
341
- totalBalanceInFiat += contribution;
342
- weightedNumerator += contribution * pricePercentChange1d;
343
- // A -100% move makes the denominator zero; treat it as flat so the
344
- // previous total never goes to infinity.
345
- const denom = Number((1 + pricePercentChange1d / 100).toFixed(8));
346
- previousTotalInFiat +=
347
- denom === 0 ? contribution : contribution / denom;
348
- }
349
- }
350
- }
351
- if (trace) {
352
- const durationMs = performance.now() - startTime;
353
- const uniqueNetworks = new Set();
354
- for (const assetId of merged.keys()) {
355
- const info = getAssetInfo(assetInfoCache, assetId);
356
- uniqueNetworks.add(info.chainId);
357
- }
358
- emitAggregatedBalanceSelectorTrace(trace, durationMs, {
359
- asset_count: merged.size,
360
- network_count: uniqueNetworks.size,
361
- account_count: accountsToAggregate.length,
362
- });
363
- }
364
- if (hasPrices) {
365
- const pricePercentChange1d = totalBalanceInFiat > 0 ? weightedNumerator / totalBalanceInFiat : 0;
366
- return {
367
- entries,
368
- totalBalanceInFiat,
369
- pricePercentChange1d,
370
- previousTotalInFiat,
371
- };
372
- }
373
- return { entries };
374
- }
375
- /**
376
- * Aggregate balances for an explicit list of account ids.
377
- *
378
- * Prefer this over {@link getAggregatedBalanceForAccount} when the set of
379
- * accounts to aggregate is already known (e.g. all accounts in a group), since
380
- * it does not require a "selected account" and therefore avoids the brittle
381
- * account-resolution heuristics.
382
- *
383
- * @param state - AssetsController state slice.
384
- * @param accountIds - Account ids whose balances should be aggregated.
385
- * @param enabledNetworkMap - Optional map of enabled networks keyed by namespace.
386
- * @param trace - Optional trace callback for telemetry spans.
387
- * @returns Aggregated balance entries plus fiat totals when prices are present.
388
- */
389
- function getAggregatedBalanceForAccountIds(state, accountIds, enabledNetworkMap, trace) {
390
- const accounts = accountIds.map((id) => ({ id }));
391
- return aggregateBalances(state, accounts, enabledNetworkMap, trace);
392
- }
393
- exports.getAggregatedBalanceForAccountIds = getAggregatedBalanceForAccountIds;
394
- function getAggregatedBalanceForAccount(state, selectedInternalAccount, enabledNetworkMap, accountTreeState, internalAccountsOrAccountIds, accountsById, trace) {
395
- const accountsToAggregate = resolveAccountsToAggregate({
396
- selectedInternalAccount,
397
- accountTreeState,
398
- internalAccountsOrAccountIds,
399
- accountsById,
400
- });
401
- return aggregateBalances(state, accountsToAggregate, enabledNetworkMap, trace);
402
- }
403
- exports.getAggregatedBalanceForAccount = getAggregatedBalanceForAccount;
404
- // ============================================================================
405
- // WALLET- AND GROUP-LEVEL BALANCE CALCULATIONS
406
- // ============================================================================
407
- /**
408
- * Default user currency used when {@link AssetsControllerState.selectedCurrency}
409
- * is not set.
410
- */
411
- const DEFAULT_USER_CURRENCY = 'usd';
412
- /**
413
- * Resolve the user currency for a balance calculation, falling back to a
414
- * sensible default when the controller has no selected currency.
415
- *
416
- * @param assetsControllerState - AssetsController state slice.
417
- * @returns The user currency code.
418
- */
419
- function getUserCurrency(assetsControllerState) {
420
- return assetsControllerState.selectedCurrency ?? DEFAULT_USER_CURRENCY;
421
- }
422
- /**
423
- * Resolve the current and previous totals for a change calculation.
424
- *
425
- * The AssetsController state only exposes a 1d price change, so non-`1d`
426
- * periods produce a zeroed change (previous equals current).
427
- *
428
- * @param totalBalanceInFiat - Aggregated current balance in user currency.
429
- * @param previousTotalInFiat - Aggregated prior balance summed per asset.
430
- * @param period - Period to compute the change for.
431
- * @returns The current and previous totals in user currency.
432
- */
433
- function getCurrentAndPrevious(totalBalanceInFiat, previousTotalInFiat, period) {
434
- const current = totalBalanceInFiat;
435
- const previous = period === '1d' ? previousTotalInFiat : current;
436
- return { current, previous };
437
- }
438
- /**
439
- * Build a {@link BalanceChangeResult} from current/previous totals.
440
- *
441
- * @param current - Current total in user currency.
442
- * @param previous - Previous total in user currency.
443
- * @param period - Period the change was computed for.
444
- * @param userCurrency - User currency code.
445
- * @returns The change result with delta and percent change.
446
- */
447
- function buildBalanceChangeResult(current, previous, period, userCurrency) {
448
- const amountChange = current - previous;
449
- const percentChange = previous === 0 ? 0 : (amountChange / previous) * 100;
450
- return {
451
- period,
452
- currentTotalInUserCurrency: Number(current.toFixed(8)),
453
- previousTotalInUserCurrency: Number(previous.toFixed(8)),
454
- amountChangeInUserCurrency: Number(amountChange.toFixed(8)),
455
- percentChange: Number(percentChange.toFixed(8)),
456
- userCurrency,
457
- };
458
- }
459
- /**
460
- * Calculate aggregated balances for all wallets and groups.
461
- *
462
- * Mirrors the legacy `@metamask/assets-controllers` `calculateBalanceForAllWallets`
463
- * output shape, but sources every group total from the unified AssetsController
464
- * state via {@link getAggregatedBalanceForAccountIds}. The account tree is walked
465
- * to aggregate each group individually.
466
- *
467
- * @param assetsControllerState - AssetsController state slice.
468
- * @param accountTreeState - AccountTreeController state.
469
- * @param enabledNetworkMap - Map of enabled networks keyed by namespace.
470
- * @param trace - Optional trace callback forwarded to the aggregation selector.
471
- * @returns Aggregated balances for all wallets and groups.
472
- */
473
- function calculateBalanceForAllWallets(assetsControllerState, accountTreeState, enabledNetworkMap, trace) {
474
- const startTime = performance.now();
475
- const userCurrency = getUserCurrency(assetsControllerState);
476
- const wallets = {};
477
- let totalBalanceInUserCurrency = 0;
478
- let groupCount = 0;
479
- for (const [walletId, wallet] of Object.entries(accountTreeState.accountTree?.wallets ?? {})) {
480
- const walletBalance = {
481
- walletId,
482
- groups: {},
483
- totalBalanceInUserCurrency: 0,
484
- userCurrency,
485
- };
486
- const groups = wallet?.groups ?? {};
487
- for (const groupId of Object.keys(groups)) {
488
- groupCount += 1;
489
- const accountIds = getAccountIdsForGroup(accountTreeState, groupId);
490
- // Do not forward `trace` per group — that created one root Sentry span
491
- // per account group and hit rate limits. Emit a single span below.
492
- const { totalBalanceInFiat = 0 } = getAggregatedBalanceForAccountIds(assetsControllerState, accountIds, enabledNetworkMap);
493
- walletBalance.groups[groupId] = {
494
- walletId,
495
- groupId,
496
- totalBalanceInUserCurrency: totalBalanceInFiat,
497
- userCurrency,
498
- };
499
- walletBalance.totalBalanceInUserCurrency += totalBalanceInFiat;
500
- }
501
- wallets[walletId] = walletBalance;
502
- totalBalanceInUserCurrency += walletBalance.totalBalanceInUserCurrency;
503
- }
504
- if (trace) {
505
- emitAggregatedBalanceSelectorTrace(trace, performance.now() - startTime, {
506
- wallet_count: Object.keys(wallets).length,
507
- group_count: groupCount,
508
- });
509
- }
510
- return { wallets, totalBalanceInUserCurrency, userCurrency };
511
- }
512
- exports.calculateBalanceForAllWallets = calculateBalanceForAllWallets;
513
- /**
514
- * Calculate the portfolio value change for a single account group and period.
515
- *
516
- * @param assetsControllerState - AssetsController state slice.
517
- * @param accountTreeState - AccountTreeController state.
518
- * @param groupId - Account group id to compute the change for.
519
- * @param period - Change period (`1d` | `7d` | `30d`).
520
- * @param enabledNetworkMap - Map of enabled networks keyed by namespace.
521
- * @param trace - Optional trace callback forwarded to the aggregation selector.
522
- * @returns The change result for the requested period.
523
- */
524
- function calculateBalanceChangeForAccountGroup(assetsControllerState, accountTreeState, groupId, period, enabledNetworkMap, trace) {
525
- const userCurrency = getUserCurrency(assetsControllerState);
526
- const accountIds = getAccountIdsForGroup(accountTreeState, groupId);
527
- const { totalBalanceInFiat = 0, previousTotalInFiat = totalBalanceInFiat } = getAggregatedBalanceForAccountIds(assetsControllerState, accountIds, enabledNetworkMap, trace);
528
- const { current, previous } = getCurrentAndPrevious(totalBalanceInFiat, previousTotalInFiat, period);
529
- return buildBalanceChangeResult(current, previous, period, userCurrency);
530
- }
531
- exports.calculateBalanceChangeForAccountGroup = calculateBalanceChangeForAccountGroup;
532
- //# sourceMappingURL=balance.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"balance.cjs","sourceRoot":"","sources":["../../src/selectors/balance.ts"],"names":[],"mappings":";;;;;;AACA,iEAAmD;AAInD,2CAKyB;AACzB,gEAAuC;AAUvC,iDAAyD;AAEzD,+EAA+E;AAC/E,wEAAwE;AACxE,+EAA+E;AAC/E,wEAAwE;AACxE,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AACrD,MAAM,iCAAiC,GAAG,2BAA2B,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,SAAS,kCAAkC,CACzC,KAAoB,EACpB,UAAkB,EAClB,IAA+C;IAE/C,MAAM,QAAQ,GAAG;QACf,WAAW,EAAE,UAAU;QACvB,GAAG,IAAI;KACR,CAAC;IAEF,IAAA,oBAAS,EAAC;QACR,IAAI,EAAE,wBAAwB;QAC9B,KAAK;QACL,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;YAC1B,IAAA,oBAAS,EAAC;gBACR,IAAI,EAAE,iCAAiC;gBACvC,KAAK;gBACL,IAAI,EAAE,QAAQ;gBACd,aAAa;aACd,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,oCAAoC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AA0BD,MAAM,UAAU,GAAe,EAAE,KAAK,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC;AAErE,MAAM,oBAAoB,GAAG,CAAC,OAAqB,EAAU,EAAE;IAC7D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,OAA+B,CAAC;QACnD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAe,EAAE;IACvD,MAAM,MAAM,GAAG,IAAI,sBAAW,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,sBAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,WAA6D,EAC7D,OAAsB,EACV,EAAE;IACd,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,GAGvC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtE,oBAAoB,EAClB,OAAO,oBAAoB,KAAK,QAAQ;YACxC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACnC,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,CAAC;KACR,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,CAC1B,GAAsB,EACtB,EAAqB,EACZ,EAAE;IACX,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAA,yBAAiB,EAAC,EAAE,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,0BAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAA,wBAAgB,EAAC,EAAE,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8BAA8B;IAC9B,IAAI,YAAY,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB;IACvB,IAAI,SAAS,KAAK,0BAAkB,CAAC,MAAM,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAA,wBAAK,EAAC,SAAS,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,OAAO,OAAO,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAWF,MAAM,kBAAkB,GAAG,GAAuC,EAAE,CAClE,IAAI,GAAG,EAAiC,CAAC;AAE3C,MAAM,YAAY,GAAG,CACnB,KAAyC,EACzC,OAAsB,EACN,EAAE;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;IAChD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,KAAK,0BAAkB,CAAC,MAAM,EAAE,CAAC;IACzE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAaF,SAAS,oBAAoB,CAAC,IAO7B;IACC,MAAM,EACJ,GAAG,EACH,eAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,GACf,GAAG,IAAI,CAAC;IAET,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC;YACpE,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,OAAwB,CAAC;QAE9C,IAAI,gBAAgB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;YAC7C,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACtB,SAAS,CAAC,0CAA0C;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE;YACpB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,EAAE,IAAI,EAAE,MAAM;YACpB,IAAI,EAAE,IAAI,EAAE,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAgB,oBAAoB,CAClC,gBAA4C,EAC5C,SAAoB;IAEpB,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,CAAC;YACjC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5D,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAjBD,oDAiBC;AAED,SAAgB,2BAA2B,CACzC,gBAA4C,EAC5C,YAA0B,EAC1B,OAAe;IAEf,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,CAChB,UAAkD,EACf,EAAE,CACrC,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAsC,CAAC;IAElE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AA9BD,kEA8BC;AAED,SAAS,wBAAwB,CAC/B,gBAA4C,EAC5C,iBAA4B;IAE5B,MAAM,OAAO,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,CAChB,UAAkD,EACf,EAAE,CACrC,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAsC,CAAC;IAElE,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,0BAA0B,CAAC,IAKnC;IACC,MAAM,EACJ,uBAAuB,EACvB,gBAAgB,EAChB,4BAA4B,EAC5B,YAAY,GACb,GAAG,IAAI,CAAC;IAET,IAAI,4BAA4B,IAAI,4BAA4B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,KAAK,GAAG,4BAA4B,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,4BAA2C,CAAC;YACxD,MAAM,GAAG,GAAkB,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,4BAAiD,CAAC;IAC3D,CAAC;IAED,IACE,gBAAgB;QAChB,YAAY;QACZ,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EACpC,CAAC;QACD,MAAM,OAAO,GAAG,oBAAoB,CAClC,gBAAgB,EAChB,uBAAuB,CAAC,EAAE,CAC3B,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,aAAa,GAAG,2BAA2B,CAC/C,gBAAgB,EAChB,YAAY,EACZ,OAAO,CACR,CAAC;YACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,wBAAwB,CAClC,gBAAgB,EAChB,uBAAuB,CAAC,EAAE,CAC3B,CAAC;QACF,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAkB,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1B,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,CAAC,uBAAuB,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,qBAAqB,CACnC,gBAA4C,EAC5C,OAAe;IAEf,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC;IAE5D,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAsC,CAAC;QAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAdD,sDAcC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,iBAAiB,CACxB,KAA4B,EAC5B,QAAuB,EACvB,iBAAqC,EACrC,KAAqB;IAErB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE3E,MAAM,QAAQ,GAAG,CAAC,UAAU,IAAI,EAAE,CAAyC,CAAC;IAE5E,MAAM,SAAS,GACb,OAAO,CAAC,WAAW,CAAC;QACpB,CAAC,GAAY,EAAE;YACb,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC3D,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAErC,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEhD,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,eAAe,GACnB,aAAa,EAAE,CAAC,SAAS,CAAC,IAAK,EAA0C,CAAC;QAE5E,oBAAoB,CAAC;YACnB,GAAG,EAAE,MAAM;YACX,eAAe;YACf,QAAQ;YACR,gBAAgB;YAChB,iBAAiB;YACjB,cAAc;SACf,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAA6B,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjE,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,gEAAgE;IAChE,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QACvB,MAAM,KAAK,GAA2B;YACpC,OAAO;YACP,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;YACxB,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjE,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;SACtD,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACrB,GAAG,IAAI,CAAC,CAAC;QAET,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,GAAG,iBAAiB,CACvD,WAAW,EACX,OAAO,CACR,CAAC;YACF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC3D,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,kBAAkB,IAAI,YAAY,CAAC;gBACnC,iBAAiB,IAAI,YAAY,GAAG,oBAAoB,CAAC;gBAEzD,mEAAmE;gBACnE,yCAAyC;gBACzC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,oBAAoB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,mBAAmB;oBACjB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACjD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAe,CAAC;QAC9C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YACnD,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,kCAAkC,CAAC,KAAK,EAAE,UAAU,EAAE;YACpD,WAAW,EAAE,MAAM,CAAC,IAAI;YACxB,aAAa,EAAE,cAAc,CAAC,IAAI;YAClC,aAAa,EAAE,mBAAmB,CAAC,MAAM;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,oBAAoB,GACxB,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO;YACL,OAAO;YACP,kBAAkB;YAClB,oBAAoB;YACpB,mBAAmB;SACpB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,iCAAiC,CAC/C,KAA4B,EAC5B,UAAuB,EACvB,iBAAqC,EACrC,KAAqB;IAErB,MAAM,QAAQ,GAAkB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACtE,CAAC;AARD,8EAQC;AAED,SAAgB,8BAA8B,CAC5C,KAA4B,EAC5B,uBAAwC,EACxC,iBAAqC,EACrC,gBAA6C,EAC7C,4BAA8D,EAC9D,YAA2B,EAC3B,KAAqB;IAErB,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;QACrD,uBAAuB;QACvB,gBAAgB;QAChB,4BAA4B;QAC5B,YAAY;KACb,CAAC,CAAC;IACH,OAAO,iBAAiB,CACtB,KAAK,EACL,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,CACN,CAAC;AACJ,CAAC;AArBD,wEAqBC;AAED,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAiCpC;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,qBAA4C;IACnE,OAAO,qBAAqB,CAAC,gBAAgB,IAAI,qBAAqB,CAAC;AACzE,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,qBAAqB,CAC5B,kBAA0B,EAC1B,mBAA2B,EAC3B,MAA2B;IAE3B,MAAM,OAAO,GAAG,kBAAkB,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC;IACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,wBAAwB,CAC/B,OAAe,EACf,QAAgB,EAChB,MAA2B,EAC3B,YAAoB;IAEpB,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;IACxC,MAAM,aAAa,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;IAC3E,OAAO;QACL,MAAM;QACN,0BAA0B,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtD,2BAA2B,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxD,0BAA0B,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/C,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,6BAA6B,CAC3C,qBAA4C,EAC5C,gBAA4C,EAC5C,iBAAqC,EACrC,KAAqB;IAErB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAiC,EAAE,CAAC;IACjD,IAAI,0BAA0B,GAAG,CAAC,CAAC;IACnC,IAAI,UAAU,GAAG,CAAC,CAAC;IAGnB,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAC7C,gBAAgB,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAC5C,EAAE,CAAC;QACF,MAAM,aAAa,GAAkB;YACnC,QAAQ;YACR,MAAM,EAAE,EAAE;YACV,0BAA0B,EAAE,CAAC;YAC7B,YAAY;SACb,CAAC;QAEF,MAAM,MAAM,GAAI,MAA2B,EAAE,MAAM,IAAI,EAAE,CAAC;QAC1D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,UAAU,IAAI,CAAC,CAAC;YAChB,MAAM,UAAU,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YACpE,uEAAuE;YACvE,mEAAmE;YACnE,MAAM,EAAE,kBAAkB,GAAG,CAAC,EAAE,GAAG,iCAAiC,CAClE,qBAAqB,EACrB,UAAU,EACV,iBAAiB,CAClB,CAAC;YAEF,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;gBAC9B,QAAQ;gBACR,OAAO;gBACP,0BAA0B,EAAE,kBAAkB;gBAC9C,YAAY;aACb,CAAC;YACF,aAAa,CAAC,0BAA0B,IAAI,kBAAkB,CAAC;QACjE,CAAC;QAED,OAAO,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;QAClC,0BAA0B,IAAI,aAAa,CAAC,0BAA0B,CAAC;IACzE,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,kCAAkC,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE;YACvE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;YACzC,WAAW,EAAE,UAAU;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,CAAC;AAC/D,CAAC;AAxDD,sEAwDC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,qCAAqC,CACnD,qBAA4C,EAC5C,gBAA4C,EAC5C,OAAe,EACf,MAA2B,EAC3B,iBAAqC,EACrC,KAAqB;IAErB,MAAM,YAAY,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,EAAE,kBAAkB,GAAG,CAAC,EAAE,mBAAmB,GAAG,kBAAkB,EAAE,GACxE,iCAAiC,CAC/B,qBAAqB,EACrB,UAAU,EACV,iBAAiB,EACjB,KAAK,CACN,CAAC;IAEJ,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CACjD,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,CACP,CAAC;IAEF,OAAO,wBAAwB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC3E,CAAC;AAzBD,sFAyBC","sourcesContent":["import type { AccountTreeControllerState } from '@metamask/account-tree-controller';\nimport { toHex } from '@metamask/controller-utils';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { CaipChainId, Hex } from '@metamask/utils';\nimport {\n KnownCaipNamespace,\n isStrictHexString,\n parseCaipAssetType,\n parseCaipChainId,\n} from '@metamask/utils';\nimport BigNumberJS from 'bignumber.js';\n\nimport type { AssetsControllerState } from '../AssetsController.js';\nimport type {\n AccountId,\n AssetBalance,\n AssetMetadata,\n AssetPreferences,\n Caip19AssetId,\n} from '../types.js';\nimport { emitTrace, withTrace } from '../utils/trace.js';\n\n// ============================================================================\n// TRACE NAMES — used in Sentry spans (search these strings in Discover)\n// ============================================================================\n/** Parent span that nests {@link TRACE_AGGREGATED_BALANCE_SELECTOR}. */\nconst TRACE_AGGREGATED_BALANCE = 'AggregatedBalance';\nconst TRACE_AGGREGATED_BALANCE_SELECTOR = 'AggregatedBalanceSelector';\n\n/**\n * Emit `AggregatedBalanceSelector` as a **subspan** under an `AggregatedBalance`\n * parent (via `parentContext`).\n *\n * Work is timed outside the callback (selectors are sync), so we backdate\n * `startTime` via `duration_ms` — MetaMask's Sentry adapter promotes numeric\n * tags to measurements, which Spans dashboard widgets chart as `duration_ms`.\n *\n * @param trace - Trace callback from the client.\n * @param durationMs - Measured compute time in milliseconds.\n * @param data - Additional span attributes (counts, etc.).\n */\nfunction emitAggregatedBalanceSelectorTrace(\n trace: TraceCallback,\n durationMs: number,\n data: Record<string, number | string | boolean>,\n): void {\n const spanData = {\n duration_ms: durationMs,\n ...data,\n };\n\n withTrace({\n name: TRACE_AGGREGATED_BALANCE,\n trace,\n data: spanData,\n fn: async (parentContext) => {\n emitTrace({\n name: TRACE_AGGREGATED_BALANCE_SELECTOR,\n trace,\n data: spanData,\n parentContext,\n });\n },\n }).catch(() => {\n // Telemetry failure must not break.\n });\n}\n\nexport type EnabledNetworkMap =\n | Record<string, Record<string, boolean>>\n | undefined;\n\nexport type AggregatedBalanceEntry = {\n assetId: Caip19AssetId;\n amount: string;\n decimals?: number;\n symbol?: string;\n name?: string;\n};\n\nexport type AggregatedBalanceForAccount = {\n entries: AggregatedBalanceEntry[];\n totalBalanceInFiat?: number;\n pricePercentChange1d?: number;\n previousTotalInFiat?: number;\n};\n\ntype AccountLike = { id: AccountId };\nexport type AccountsById = Record<AccountId, InternalAccount>;\n\ntype PriceDatum = { price: number; pricePercentChange1d: number };\n\nconst ZERO_PRICE: PriceDatum = { price: 0, pricePercentChange1d: 0 };\n\nconst getAmountFromBalance = (balance: AssetBalance): string => {\n if (typeof balance === 'object' && balance !== null && 'amount' in balance) {\n const { amount } = balance as { amount?: unknown };\n return typeof amount === 'string' ? amount : '0';\n }\n return '0';\n};\n\nconst toBigNumberOrZero = (value: string): BigNumberJS => {\n const parsed = new BigNumberJS(value);\n return parsed.isNaN() || !parsed.isFinite() ? new BigNumberJS(0) : parsed;\n};\n\nconst getPriceDatumFast = (\n assetsPrice: AssetsControllerState['assetsPrice'] | undefined,\n assetId: Caip19AssetId,\n): PriceDatum => {\n const raw = assetsPrice?.[assetId];\n if (!raw || typeof raw !== 'object') {\n return ZERO_PRICE;\n }\n const { price, pricePercentChange1d } = raw as {\n price?: unknown;\n pricePercentChange1d?: unknown;\n };\n return {\n price: typeof price === 'number' && Number.isFinite(price) ? price : 0,\n pricePercentChange1d:\n typeof pricePercentChange1d === 'number' &&\n Number.isFinite(pricePercentChange1d)\n ? pricePercentChange1d\n : 0,\n };\n};\n\n/**\n * Enablement lookup optimized:\n * - no array allocations\n * - early returns\n *\n * @param map - Enabled network map (namespace -> storageKey -> boolean)\n * @param id - Chain id as Hex or CAIP-2\n * @returns True if the chain is enabled or map is undefined\n */\nconst isChainEnabledByMap = (\n map: EnabledNetworkMap,\n id: Hex | CaipChainId,\n): boolean => {\n if (!map) {\n return true;\n }\n\n if (isStrictHexString(id)) {\n return Boolean(map[KnownCaipNamespace.Eip155]?.[id]);\n }\n\n const { namespace, reference } = parseCaipChainId(id);\n const namespaceMap = map[namespace];\n if (!namespaceMap) {\n return false;\n }\n\n // exact CAIP-2 id / reference\n if (namespaceMap[id] || namespaceMap[reference]) {\n return true;\n }\n\n // EVM: hex storage key\n if (namespace === KnownCaipNamespace.Eip155) {\n try {\n const storageKey = toHex(reference);\n return Boolean(namespaceMap[storageKey]);\n } catch {\n const parsedRef = Number.parseInt(reference, 10);\n if (Number.isFinite(parsedRef)) {\n return Boolean(namespaceMap[`0x${parsedRef.toString(16)}`]);\n }\n }\n }\n\n return false;\n};\n\n/**\n * Cache parsing results per assetId to avoid parseCaipAssetType/parseCaipChainId\n * being called multiple times across filtering + grouping + pricing.\n */\ntype AssetParseInfo = {\n chainId: CaipChainId;\n isEvm: boolean;\n};\n\nconst makeAssetInfoCache = (): Map<Caip19AssetId, AssetParseInfo> =>\n new Map<Caip19AssetId, AssetParseInfo>();\n\nconst getAssetInfo = (\n cache: Map<Caip19AssetId, AssetParseInfo>,\n assetId: Caip19AssetId,\n): AssetParseInfo => {\n const cached = cache.get(assetId);\n if (cached) {\n return cached;\n }\n const { chainId } = parseCaipAssetType(assetId);\n const { namespace } = parseCaipChainId(chainId);\n const info = { chainId, isEvm: namespace === KnownCaipNamespace.Eip155 };\n cache.set(assetId, info);\n return info;\n};\n\n/**\n * Merge across accounts without building per-account entries arrays.\n * Uses BigNumber for amount accumulation to avoid float precision loss.\n */\ntype AggRow = {\n amount: BigNumberJS;\n decimals?: number;\n symbol?: string;\n name?: string;\n};\n\nfunction mergeBalancesIntoMap(args: {\n out: Map<Caip19AssetId, AggRow>;\n accountBalances: Record<Caip19AssetId, AssetBalance>;\n metadata: Record<Caip19AssetId, AssetMetadata>;\n assetPreferences?: Record<Caip19AssetId, AssetPreferences>;\n enabledNetworkMap?: EnabledNetworkMap;\n assetInfoCache: Map<Caip19AssetId, AssetParseInfo>;\n}): void {\n const {\n out,\n accountBalances,\n metadata,\n assetPreferences,\n enabledNetworkMap,\n assetInfoCache,\n } = args;\n\n for (const assetId in accountBalances) {\n if (!Object.prototype.hasOwnProperty.call(accountBalances, assetId)) {\n continue;\n }\n const typedAssetId = assetId as Caip19AssetId;\n\n if (assetPreferences?.[typedAssetId]?.hidden) {\n continue;\n }\n\n const info = getAssetInfo(assetInfoCache, typedAssetId);\n if (!isChainEnabledByMap(enabledNetworkMap, info.chainId)) {\n continue;\n }\n\n const amountStr = getAmountFromBalance(accountBalances[typedAssetId]);\n const amountBn = toBigNumberOrZero(amountStr);\n const meta = metadata[typedAssetId];\n if (amountBn.isZero()) {\n continue; // skip zeros early to reduce map pressure\n }\n\n const existing = out.get(typedAssetId);\n if (existing) {\n existing.amount = existing.amount.plus(amountBn);\n continue;\n }\n\n out.set(typedAssetId, {\n amount: amountBn,\n decimals: meta?.decimals,\n symbol: meta?.symbol,\n name: meta?.name,\n });\n }\n}\n\nexport function getGroupIdForAccount(\n accountTreeState: AccountTreeControllerState,\n accountId: AccountId,\n): string | undefined {\n const wallets = accountTreeState.accountTree?.wallets;\n if (!wallets) {\n return undefined;\n }\n for (const wallet of Object.values(wallets)) {\n for (const [groupId, group] of Object.entries(wallet?.groups ?? {})) {\n const accounts = group?.accounts;\n if (Array.isArray(accounts) && accounts.includes(accountId)) {\n return groupId;\n }\n }\n }\n return undefined;\n}\n\nexport function getInternalAccountsForGroup(\n accountTreeState: AccountTreeControllerState,\n accountsById: AccountsById,\n groupId: string,\n): InternalAccount[] {\n const wallets = accountTreeState.accountTree?.wallets;\n if (!wallets) {\n return [];\n }\n type GroupWithAccounts = { accounts?: AccountId[] };\n const getGroups = (\n walletItem: (typeof wallets)[keyof typeof wallets],\n ): Record<string, GroupWithAccounts> =>\n (walletItem?.groups ?? {}) as Record<string, GroupWithAccounts>;\n\n for (const wallet of Object.values(wallets)) {\n const group = getGroups(wallet)[groupId];\n if (!group?.accounts) {\n continue;\n }\n const result: InternalAccount[] = [];\n for (const id of group.accounts) {\n const acct = accountsById[id];\n if (acct) {\n result.push(acct);\n }\n }\n return result;\n }\n return [];\n}\n\nfunction getAccountIdsInSameGroup(\n accountTreeState: AccountTreeControllerState,\n selectedAccountId: AccountId,\n): AccountId[] | undefined {\n const groupId = getGroupIdForAccount(accountTreeState, selectedAccountId);\n if (!groupId) {\n return undefined;\n }\n const wallets = accountTreeState.accountTree?.wallets;\n if (!wallets) {\n return undefined;\n }\n type GroupWithAccounts = { accounts?: AccountId[] };\n const getGroups = (\n walletItem: (typeof wallets)[keyof typeof wallets],\n ): Record<string, GroupWithAccounts> =>\n (walletItem?.groups ?? {}) as Record<string, GroupWithAccounts>;\n\n for (const wallet of Object.values(wallets)) {\n const group = getGroups(wallet)[groupId];\n if (group?.accounts) {\n return [...group.accounts];\n }\n }\n return undefined;\n}\n\nfunction resolveAccountsToAggregate(args: {\n selectedInternalAccount: InternalAccount;\n accountTreeState?: AccountTreeControllerState;\n internalAccountsOrAccountIds?: InternalAccount[] | AccountId[];\n accountsById?: AccountsById;\n}): AccountLike[] {\n const {\n selectedInternalAccount,\n accountTreeState,\n internalAccountsOrAccountIds,\n accountsById,\n } = args;\n\n if (internalAccountsOrAccountIds && internalAccountsOrAccountIds.length > 0) {\n const first = internalAccountsOrAccountIds[0];\n if (typeof first === 'string') {\n const ids = internalAccountsOrAccountIds as AccountId[];\n const out: AccountLike[] = new Array(ids.length);\n for (let i = 0; i < ids.length; i++) {\n out[i] = { id: ids[i] };\n }\n return out;\n }\n return internalAccountsOrAccountIds as InternalAccount[];\n }\n\n if (\n accountTreeState &&\n accountsById &&\n Object.keys(accountsById).length > 0\n ) {\n const groupId = getGroupIdForAccount(\n accountTreeState,\n selectedInternalAccount.id,\n );\n if (groupId) {\n const groupAccounts = getInternalAccountsForGroup(\n accountTreeState,\n accountsById,\n groupId,\n );\n if (groupAccounts.length > 0) {\n return groupAccounts;\n }\n }\n }\n\n if (accountTreeState) {\n const ids = getAccountIdsInSameGroup(\n accountTreeState,\n selectedInternalAccount.id,\n );\n if (ids && ids.length > 0) {\n const out: AccountLike[] = new Array(ids.length);\n for (let i = 0; i < ids.length; i++) {\n out[i] = { id: ids[i] };\n }\n return out;\n }\n }\n\n return [selectedInternalAccount];\n}\n\n/**\n * Get account ids that belong to a group, reading directly from the account\n * tree. Unlike {@link getInternalAccountsForGroup}, this does not require an\n * `accountsById` lookup map, which makes it convenient for balance aggregation\n * where only the ids are needed.\n *\n * @param accountTreeState - AccountTreeController state.\n * @param groupId - The account group id to look up.\n * @returns The list of account ids in the group, or an empty array.\n */\nexport function getAccountIdsForGroup(\n accountTreeState: AccountTreeControllerState,\n groupId: string,\n): AccountId[] {\n const wallets = accountTreeState.accountTree?.wallets ?? {};\n type GroupWithAccounts = { accounts?: AccountId[] };\n for (const wallet of Object.values(wallets)) {\n const groups = (wallet?.groups ?? {}) as Record<string, GroupWithAccounts>;\n const group = groups[groupId];\n if (group?.accounts) {\n return [...group.accounts];\n }\n }\n return [];\n}\n\n/**\n * Aggregate balances across an explicit list of accounts.\n *\n * This is the core aggregation engine shared by the account- and group-level\n * selectors. It intentionally takes a fully-resolved list of accounts so that\n * callers control account resolution and no \"selected account\" placeholder is\n * required.\n *\n * @param state - AssetsController state slice.\n * @param accounts - Accounts whose balances should be aggregated.\n * @param enabledNetworkMap - Optional map of enabled networks keyed by namespace.\n * @param trace - Optional trace callback for telemetry spans.\n * @returns Aggregated balance entries plus fiat totals when prices are present.\n */\nfunction aggregateBalances(\n state: AssetsControllerState,\n accounts: AccountLike[],\n enabledNetworkMap?: EnabledNetworkMap,\n trace?: TraceCallback,\n): AggregatedBalanceForAccount {\n const startTime = trace ? performance.now() : 0;\n const { assetsBalance, assetsInfo, assetPreferences, assetsPrice } = state;\n\n const metadata = (assetsInfo ?? {}) as Record<Caip19AssetId, AssetMetadata>;\n\n const hasPrices =\n Boolean(assetsPrice) &&\n ((): boolean => {\n for (const key in assetsPrice) {\n if (Object.prototype.hasOwnProperty.call(assetsPrice, key)) {\n return true;\n }\n }\n return false;\n })();\n\n const accountsToAggregate = accounts;\n\n const assetInfoCache = makeAssetInfoCache();\n const merged = new Map<Caip19AssetId, AggRow>();\n\n for (const account of accountsToAggregate) {\n const accountId = account.id;\n const accountBalances =\n assetsBalance?.[accountId] ?? ({} as Record<Caip19AssetId, AssetBalance>);\n\n mergeBalancesIntoMap({\n out: merged,\n accountBalances,\n metadata,\n assetPreferences,\n enabledNetworkMap,\n assetInfoCache,\n });\n }\n\n // Materialize entries once\n const entries: AggregatedBalanceEntry[] = new Array(merged.size);\n let idx = 0;\n\n // If prices exist, compute totals in a single pass over merged.\n let totalBalanceInFiat = 0;\n let previousTotalInFiat = 0;\n let weightedNumerator = 0;\n\n for (const [assetId, row] of merged.entries()) {\n const { amount } = row;\n const entry: AggregatedBalanceEntry = {\n assetId,\n amount: amount.toFixed(),\n ...(row.decimals === undefined ? {} : { decimals: row.decimals }),\n ...(row.symbol === undefined ? {} : { symbol: row.symbol }),\n ...(row.name === undefined ? {} : { name: row.name }),\n };\n entries[idx] = entry;\n idx += 1;\n\n if (hasPrices) {\n const { price, pricePercentChange1d } = getPriceDatumFast(\n assetsPrice,\n assetId,\n );\n const contribution = amount.multipliedBy(price).toNumber();\n if (contribution > 0) {\n totalBalanceInFiat += contribution;\n weightedNumerator += contribution * pricePercentChange1d;\n\n // A -100% move makes the denominator zero; treat it as flat so the\n // previous total never goes to infinity.\n const denom = Number((1 + pricePercentChange1d / 100).toFixed(8));\n previousTotalInFiat +=\n denom === 0 ? contribution : contribution / denom;\n }\n }\n }\n\n if (trace) {\n const durationMs = performance.now() - startTime;\n const uniqueNetworks = new Set<CaipChainId>();\n for (const assetId of merged.keys()) {\n const info = getAssetInfo(assetInfoCache, assetId);\n uniqueNetworks.add(info.chainId);\n }\n emitAggregatedBalanceSelectorTrace(trace, durationMs, {\n asset_count: merged.size,\n network_count: uniqueNetworks.size,\n account_count: accountsToAggregate.length,\n });\n }\n\n if (hasPrices) {\n const pricePercentChange1d =\n totalBalanceInFiat > 0 ? weightedNumerator / totalBalanceInFiat : 0;\n return {\n entries,\n totalBalanceInFiat,\n pricePercentChange1d,\n previousTotalInFiat,\n };\n }\n\n return { entries };\n}\n\n/**\n * Aggregate balances for an explicit list of account ids.\n *\n * Prefer this over {@link getAggregatedBalanceForAccount} when the set of\n * accounts to aggregate is already known (e.g. all accounts in a group), since\n * it does not require a \"selected account\" and therefore avoids the brittle\n * account-resolution heuristics.\n *\n * @param state - AssetsController state slice.\n * @param accountIds - Account ids whose balances should be aggregated.\n * @param enabledNetworkMap - Optional map of enabled networks keyed by namespace.\n * @param trace - Optional trace callback for telemetry spans.\n * @returns Aggregated balance entries plus fiat totals when prices are present.\n */\nexport function getAggregatedBalanceForAccountIds(\n state: AssetsControllerState,\n accountIds: AccountId[],\n enabledNetworkMap?: EnabledNetworkMap,\n trace?: TraceCallback,\n): AggregatedBalanceForAccount {\n const accounts: AccountLike[] = accountIds.map((id) => ({ id }));\n return aggregateBalances(state, accounts, enabledNetworkMap, trace);\n}\n\nexport function getAggregatedBalanceForAccount(\n state: AssetsControllerState,\n selectedInternalAccount: InternalAccount,\n enabledNetworkMap?: EnabledNetworkMap,\n accountTreeState?: AccountTreeControllerState,\n internalAccountsOrAccountIds?: InternalAccount[] | AccountId[],\n accountsById?: AccountsById,\n trace?: TraceCallback,\n): AggregatedBalanceForAccount {\n const accountsToAggregate = resolveAccountsToAggregate({\n selectedInternalAccount,\n accountTreeState,\n internalAccountsOrAccountIds,\n accountsById,\n });\n return aggregateBalances(\n state,\n accountsToAggregate,\n enabledNetworkMap,\n trace,\n );\n}\n\n// ============================================================================\n// WALLET- AND GROUP-LEVEL BALANCE CALCULATIONS\n// ============================================================================\n\n/**\n * Default user currency used when {@link AssetsControllerState.selectedCurrency}\n * is not set.\n */\nconst DEFAULT_USER_CURRENCY = 'usd';\n\nexport type AccountGroupBalance = {\n walletId: string;\n groupId: string;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type WalletBalance = {\n walletId: string;\n groups: Record<string, AccountGroupBalance>;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type AllWalletsBalance = {\n wallets: Record<string, WalletBalance>;\n totalBalanceInUserCurrency: number;\n userCurrency: string;\n};\n\nexport type BalanceChangePeriod = '1d' | '7d' | '30d';\n\nexport type BalanceChangeResult = {\n period: BalanceChangePeriod;\n currentTotalInUserCurrency: number;\n previousTotalInUserCurrency: number;\n amountChangeInUserCurrency: number;\n percentChange: number;\n userCurrency: string;\n};\n\n/**\n * Resolve the user currency for a balance calculation, falling back to a\n * sensible default when the controller has no selected currency.\n *\n * @param assetsControllerState - AssetsController state slice.\n * @returns The user currency code.\n */\nfunction getUserCurrency(assetsControllerState: AssetsControllerState): string {\n return assetsControllerState.selectedCurrency ?? DEFAULT_USER_CURRENCY;\n}\n\n/**\n * Resolve the current and previous totals for a change calculation.\n *\n * The AssetsController state only exposes a 1d price change, so non-`1d`\n * periods produce a zeroed change (previous equals current).\n *\n * @param totalBalanceInFiat - Aggregated current balance in user currency.\n * @param previousTotalInFiat - Aggregated prior balance summed per asset.\n * @param period - Period to compute the change for.\n * @returns The current and previous totals in user currency.\n */\nfunction getCurrentAndPrevious(\n totalBalanceInFiat: number,\n previousTotalInFiat: number,\n period: BalanceChangePeriod,\n): { current: number; previous: number } {\n const current = totalBalanceInFiat;\n const previous = period === '1d' ? previousTotalInFiat : current;\n return { current, previous };\n}\n\n/**\n * Build a {@link BalanceChangeResult} from current/previous totals.\n *\n * @param current - Current total in user currency.\n * @param previous - Previous total in user currency.\n * @param period - Period the change was computed for.\n * @param userCurrency - User currency code.\n * @returns The change result with delta and percent change.\n */\nfunction buildBalanceChangeResult(\n current: number,\n previous: number,\n period: BalanceChangePeriod,\n userCurrency: string,\n): BalanceChangeResult {\n const amountChange = current - previous;\n const percentChange = previous === 0 ? 0 : (amountChange / previous) * 100;\n return {\n period,\n currentTotalInUserCurrency: Number(current.toFixed(8)),\n previousTotalInUserCurrency: Number(previous.toFixed(8)),\n amountChangeInUserCurrency: Number(amountChange.toFixed(8)),\n percentChange: Number(percentChange.toFixed(8)),\n userCurrency,\n };\n}\n\n/**\n * Calculate aggregated balances for all wallets and groups.\n *\n * Mirrors the legacy `@metamask/assets-controllers` `calculateBalanceForAllWallets`\n * output shape, but sources every group total from the unified AssetsController\n * state via {@link getAggregatedBalanceForAccountIds}. The account tree is walked\n * to aggregate each group individually.\n *\n * @param assetsControllerState - AssetsController state slice.\n * @param accountTreeState - AccountTreeController state.\n * @param enabledNetworkMap - Map of enabled networks keyed by namespace.\n * @param trace - Optional trace callback forwarded to the aggregation selector.\n * @returns Aggregated balances for all wallets and groups.\n */\nexport function calculateBalanceForAllWallets(\n assetsControllerState: AssetsControllerState,\n accountTreeState: AccountTreeControllerState,\n enabledNetworkMap?: EnabledNetworkMap,\n trace?: TraceCallback,\n): AllWalletsBalance {\n const startTime = performance.now();\n const userCurrency = getUserCurrency(assetsControllerState);\n const wallets: AllWalletsBalance['wallets'] = {};\n let totalBalanceInUserCurrency = 0;\n let groupCount = 0;\n\n type WalletWithGroups = { groups?: Record<string, unknown> };\n for (const [walletId, wallet] of Object.entries(\n accountTreeState.accountTree?.wallets ?? {},\n )) {\n const walletBalance: WalletBalance = {\n walletId,\n groups: {},\n totalBalanceInUserCurrency: 0,\n userCurrency,\n };\n\n const groups = (wallet as WalletWithGroups)?.groups ?? {};\n for (const groupId of Object.keys(groups)) {\n groupCount += 1;\n const accountIds = getAccountIdsForGroup(accountTreeState, groupId);\n // Do not forward `trace` per group — that created one root Sentry span\n // per account group and hit rate limits. Emit a single span below.\n const { totalBalanceInFiat = 0 } = getAggregatedBalanceForAccountIds(\n assetsControllerState,\n accountIds,\n enabledNetworkMap,\n );\n\n walletBalance.groups[groupId] = {\n walletId,\n groupId,\n totalBalanceInUserCurrency: totalBalanceInFiat,\n userCurrency,\n };\n walletBalance.totalBalanceInUserCurrency += totalBalanceInFiat;\n }\n\n wallets[walletId] = walletBalance;\n totalBalanceInUserCurrency += walletBalance.totalBalanceInUserCurrency;\n }\n\n if (trace) {\n emitAggregatedBalanceSelectorTrace(trace, performance.now() - startTime, {\n wallet_count: Object.keys(wallets).length,\n group_count: groupCount,\n });\n }\n\n return { wallets, totalBalanceInUserCurrency, userCurrency };\n}\n\n/**\n * Calculate the portfolio value change for a single account group and period.\n *\n * @param assetsControllerState - AssetsController state slice.\n * @param accountTreeState - AccountTreeController state.\n * @param groupId - Account group id to compute the change for.\n * @param period - Change period (`1d` | `7d` | `30d`).\n * @param enabledNetworkMap - Map of enabled networks keyed by namespace.\n * @param trace - Optional trace callback forwarded to the aggregation selector.\n * @returns The change result for the requested period.\n */\nexport function calculateBalanceChangeForAccountGroup(\n assetsControllerState: AssetsControllerState,\n accountTreeState: AccountTreeControllerState,\n groupId: string,\n period: BalanceChangePeriod,\n enabledNetworkMap?: EnabledNetworkMap,\n trace?: TraceCallback,\n): BalanceChangeResult {\n const userCurrency = getUserCurrency(assetsControllerState);\n const accountIds = getAccountIdsForGroup(accountTreeState, groupId);\n const { totalBalanceInFiat = 0, previousTotalInFiat = totalBalanceInFiat } =\n getAggregatedBalanceForAccountIds(\n assetsControllerState,\n accountIds,\n enabledNetworkMap,\n trace,\n );\n\n const { current, previous } = getCurrentAndPrevious(\n totalBalanceInFiat,\n previousTotalInFiat,\n period,\n );\n\n return buildBalanceChangeResult(current, previous, period, userCurrency);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"balance.d.cts","sourceRoot":"","sources":["../../src/selectors/balance.ts"],"names":[],"mappings":"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"}