@metamask-previews/assets-controller 14.0.2-preview-3866c0ff1 → 14.0.2-preview-e3275932a

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 (583) hide show
  1. package/CHANGELOG.md +0 -1
  2. package/dist/AssetsController-method-action-types.cjs +7 -0
  3. package/dist/AssetsController-method-action-types.cjs.map +1 -0
  4. package/dist/{AssetsController-method-action-types.d.ts → AssetsController-method-action-types.d.cts} +2 -2
  5. package/dist/AssetsController-method-action-types.d.cts.map +1 -0
  6. package/dist/AssetsController-method-action-types.d.mts +181 -0
  7. package/dist/AssetsController-method-action-types.d.mts.map +1 -0
  8. package/dist/{AssetsController-method-action-types.js → AssetsController-method-action-types.mjs} +1 -1
  9. package/dist/AssetsController-method-action-types.mjs.map +1 -0
  10. package/dist/AssetsController.cjs +2596 -0
  11. package/dist/AssetsController.cjs.map +1 -0
  12. package/dist/{AssetsController.d.ts → AssetsController.d.cts} +30 -30
  13. package/dist/AssetsController.d.cts.map +1 -0
  14. package/dist/AssetsController.d.mts +395 -0
  15. package/dist/AssetsController.d.mts.map +1 -0
  16. package/dist/AssetsController.mjs +2589 -0
  17. package/dist/AssetsController.mjs.map +1 -0
  18. package/dist/data-sources/AbstractDataSource.cjs +111 -0
  19. package/dist/data-sources/AbstractDataSource.cjs.map +1 -0
  20. package/dist/data-sources/{AbstractDataSource.d.ts → AbstractDataSource.d.cts} +2 -2
  21. package/dist/data-sources/AbstractDataSource.d.cts.map +1 -0
  22. package/dist/data-sources/AbstractDataSource.d.mts +113 -0
  23. package/dist/data-sources/AbstractDataSource.d.mts.map +1 -0
  24. package/dist/data-sources/{AbstractDataSource.js → AbstractDataSource.mjs} +3 -5
  25. package/dist/data-sources/AbstractDataSource.mjs.map +1 -0
  26. package/dist/data-sources/AccountActivityDataSource.cjs +267 -0
  27. package/dist/data-sources/AccountActivityDataSource.cjs.map +1 -0
  28. package/dist/data-sources/{AccountActivityDataSource.d.ts → AccountActivityDataSource.d.cts} +6 -6
  29. package/dist/data-sources/AccountActivityDataSource.d.cts.map +1 -0
  30. package/dist/data-sources/AccountActivityDataSource.d.mts +80 -0
  31. package/dist/data-sources/AccountActivityDataSource.d.mts.map +1 -0
  32. package/dist/data-sources/AccountActivityDataSource.mjs +259 -0
  33. package/dist/data-sources/AccountActivityDataSource.mjs.map +1 -0
  34. package/dist/data-sources/AccountsApiDataSource.cjs +586 -0
  35. package/dist/data-sources/AccountsApiDataSource.cjs.map +1 -0
  36. package/dist/data-sources/{AccountsApiDataSource.d.ts → AccountsApiDataSource.d.cts} +7 -7
  37. package/dist/data-sources/AccountsApiDataSource.d.cts.map +1 -0
  38. package/dist/data-sources/AccountsApiDataSource.d.mts +82 -0
  39. package/dist/data-sources/AccountsApiDataSource.d.mts.map +1 -0
  40. package/dist/data-sources/AccountsApiDataSource.mjs +581 -0
  41. package/dist/data-sources/AccountsApiDataSource.mjs.map +1 -0
  42. package/dist/data-sources/PriceDataSource.cjs +466 -0
  43. package/dist/data-sources/PriceDataSource.cjs.map +1 -0
  44. package/dist/data-sources/{PriceDataSource.d.ts → PriceDataSource.d.cts} +5 -5
  45. package/dist/data-sources/PriceDataSource.d.cts.map +1 -0
  46. package/dist/data-sources/PriceDataSource.d.mts +100 -0
  47. package/dist/data-sources/PriceDataSource.d.mts.map +1 -0
  48. package/dist/data-sources/{PriceDataSource.js → PriceDataSource.mjs} +185 -179
  49. package/dist/data-sources/PriceDataSource.mjs.map +1 -0
  50. package/dist/data-sources/RpcDataSource.cjs +1021 -0
  51. package/dist/data-sources/RpcDataSource.cjs.map +1 -0
  52. package/dist/data-sources/{RpcDataSource.d.ts → RpcDataSource.d.cts} +10 -10
  53. package/dist/data-sources/RpcDataSource.d.cts.map +1 -0
  54. package/dist/data-sources/RpcDataSource.d.mts +174 -0
  55. package/dist/data-sources/RpcDataSource.d.mts.map +1 -0
  56. package/dist/data-sources/RpcDataSource.mjs +1012 -0
  57. package/dist/data-sources/RpcDataSource.mjs.map +1 -0
  58. package/dist/data-sources/SnapDataSource.cjs +443 -0
  59. package/dist/data-sources/SnapDataSource.cjs.map +1 -0
  60. package/dist/data-sources/{SnapDataSource.d.ts → SnapDataSource.d.cts} +8 -8
  61. package/dist/data-sources/SnapDataSource.d.cts.map +1 -0
  62. package/dist/data-sources/SnapDataSource.d.mts +127 -0
  63. package/dist/data-sources/SnapDataSource.d.mts.map +1 -0
  64. package/dist/data-sources/{SnapDataSource.js → SnapDataSource.mjs} +177 -225
  65. package/dist/data-sources/SnapDataSource.mjs.map +1 -0
  66. package/dist/data-sources/StakedBalanceDataSource.cjs +616 -0
  67. package/dist/data-sources/StakedBalanceDataSource.cjs.map +1 -0
  68. package/dist/data-sources/{StakedBalanceDataSource.d.ts → StakedBalanceDataSource.d.cts} +5 -5
  69. package/dist/data-sources/StakedBalanceDataSource.d.cts.map +1 -0
  70. package/dist/data-sources/StakedBalanceDataSource.d.mts +72 -0
  71. package/dist/data-sources/StakedBalanceDataSource.d.mts.map +1 -0
  72. package/dist/data-sources/StakedBalanceDataSource.mjs +612 -0
  73. package/dist/data-sources/StakedBalanceDataSource.mjs.map +1 -0
  74. package/dist/data-sources/TokenDataSource.cjs +583 -0
  75. package/dist/data-sources/TokenDataSource.cjs.map +1 -0
  76. package/dist/data-sources/{TokenDataSource.d.ts → TokenDataSource.d.cts} +5 -5
  77. package/dist/data-sources/TokenDataSource.d.cts.map +1 -0
  78. package/dist/data-sources/TokenDataSource.d.mts +81 -0
  79. package/dist/data-sources/TokenDataSource.d.mts.map +1 -0
  80. package/dist/data-sources/{TokenDataSource.js → TokenDataSource.mjs} +164 -157
  81. package/dist/data-sources/TokenDataSource.mjs.map +1 -0
  82. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs +705 -0
  83. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.cjs.map +1 -0
  84. package/dist/data-sources/evm-rpc-services/clients/{MulticallClient.d.ts → MulticallClient.d.cts} +3 -3
  85. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.cts.map +1 -0
  86. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts +65 -0
  87. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.mts.map +1 -0
  88. package/dist/data-sources/evm-rpc-services/clients/{MulticallClient.js → MulticallClient.mjs} +160 -148
  89. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.mjs.map +1 -0
  90. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs +312 -0
  91. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.cjs.map +1 -0
  92. package/dist/data-sources/evm-rpc-services/clients/{TokensApiClient.d.ts → TokensApiClient.d.cts} +2 -2
  93. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.cts.map +1 -0
  94. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts +61 -0
  95. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.mts.map +1 -0
  96. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.mjs +308 -0
  97. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.mjs.map +1 -0
  98. package/dist/data-sources/evm-rpc-services/clients/index.cjs +10 -0
  99. package/dist/data-sources/evm-rpc-services/clients/index.cjs.map +1 -0
  100. package/dist/data-sources/evm-rpc-services/clients/index.d.cts +4 -0
  101. package/dist/data-sources/evm-rpc-services/clients/index.d.cts.map +1 -0
  102. package/dist/data-sources/evm-rpc-services/clients/index.d.mts +4 -0
  103. package/dist/data-sources/evm-rpc-services/clients/index.d.mts.map +1 -0
  104. package/dist/data-sources/evm-rpc-services/clients/index.mjs +3 -0
  105. package/dist/data-sources/evm-rpc-services/clients/index.mjs.map +1 -0
  106. package/dist/data-sources/evm-rpc-services/index.cjs +17 -0
  107. package/dist/data-sources/evm-rpc-services/index.cjs.map +1 -0
  108. package/dist/data-sources/evm-rpc-services/{index.d.ts → index.d.cts} +5 -5
  109. package/dist/data-sources/evm-rpc-services/index.d.cts.map +1 -0
  110. package/dist/data-sources/evm-rpc-services/index.d.mts +5 -0
  111. package/dist/data-sources/evm-rpc-services/index.d.mts.map +1 -0
  112. package/dist/data-sources/evm-rpc-services/index.mjs +4 -0
  113. package/dist/data-sources/evm-rpc-services/index.mjs.map +1 -0
  114. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs +247 -0
  115. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.cjs.map +1 -0
  116. package/dist/data-sources/evm-rpc-services/services/{BalanceFetcher.d.ts → BalanceFetcher.d.cts} +11 -11
  117. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.cts.map +1 -0
  118. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts +96 -0
  119. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.mts.map +1 -0
  120. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs +243 -0
  121. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.mjs.map +1 -0
  122. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs +132 -0
  123. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.cjs.map +1 -0
  124. package/dist/data-sources/evm-rpc-services/services/{StakedBalanceFetcher.d.ts → StakedBalanceFetcher.d.cts} +14 -13
  125. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.cts.map +1 -0
  126. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts +81 -0
  127. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.mts.map +1 -0
  128. package/dist/data-sources/evm-rpc-services/services/{StakedBalanceFetcher.js → StakedBalanceFetcher.mjs} +27 -13
  129. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.mjs.map +1 -0
  130. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs +230 -0
  131. package/dist/data-sources/evm-rpc-services/services/TokenDetector.cjs.map +1 -0
  132. package/dist/data-sources/evm-rpc-services/services/{TokenDetector.d.ts → TokenDetector.d.cts} +12 -12
  133. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.cts.map +1 -0
  134. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts +78 -0
  135. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.mts.map +1 -0
  136. package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs +226 -0
  137. package/dist/data-sources/evm-rpc-services/services/TokenDetector.mjs.map +1 -0
  138. package/dist/data-sources/evm-rpc-services/services/index.cjs +13 -0
  139. package/dist/data-sources/evm-rpc-services/services/index.cjs.map +1 -0
  140. package/dist/data-sources/evm-rpc-services/services/{index.d.ts → index.d.cts} +4 -4
  141. package/dist/data-sources/evm-rpc-services/services/index.d.cts.map +1 -0
  142. package/dist/data-sources/evm-rpc-services/services/index.d.mts +4 -0
  143. package/dist/data-sources/evm-rpc-services/services/index.d.mts.map +1 -0
  144. package/dist/data-sources/evm-rpc-services/services/index.mjs +4 -0
  145. package/dist/data-sources/evm-rpc-services/services/index.mjs.map +1 -0
  146. package/dist/data-sources/evm-rpc-services/types/assets.cjs +3 -0
  147. package/dist/data-sources/evm-rpc-services/types/assets.cjs.map +1 -0
  148. package/dist/data-sources/evm-rpc-services/types/{assets.d.ts → assets.d.cts} +3 -3
  149. package/dist/data-sources/evm-rpc-services/types/assets.d.cts.map +1 -0
  150. package/dist/data-sources/evm-rpc-services/types/assets.d.mts +53 -0
  151. package/dist/data-sources/evm-rpc-services/types/assets.d.mts.map +1 -0
  152. package/dist/data-sources/evm-rpc-services/types/assets.mjs +2 -0
  153. package/dist/data-sources/evm-rpc-services/types/assets.mjs.map +1 -0
  154. package/dist/data-sources/evm-rpc-services/types/config.cjs +3 -0
  155. package/dist/data-sources/evm-rpc-services/types/config.cjs.map +1 -0
  156. package/dist/data-sources/evm-rpc-services/types/{config.d.ts → config.d.cts} +2 -2
  157. package/dist/data-sources/evm-rpc-services/types/config.d.cts.map +1 -0
  158. package/dist/data-sources/evm-rpc-services/types/config.d.mts +18 -0
  159. package/dist/data-sources/evm-rpc-services/types/config.d.mts.map +1 -0
  160. package/dist/data-sources/evm-rpc-services/types/config.mjs +2 -0
  161. package/dist/data-sources/evm-rpc-services/types/config.mjs.map +1 -0
  162. package/dist/data-sources/evm-rpc-services/types/core.cjs +3 -0
  163. package/dist/data-sources/evm-rpc-services/types/core.cjs.map +1 -0
  164. package/dist/data-sources/evm-rpc-services/types/{core.d.ts → core.d.cts} +2 -2
  165. package/dist/data-sources/evm-rpc-services/types/core.d.cts.map +1 -0
  166. package/dist/data-sources/evm-rpc-services/types/core.d.mts +19 -0
  167. package/dist/data-sources/evm-rpc-services/types/core.d.mts.map +1 -0
  168. package/dist/data-sources/evm-rpc-services/types/core.mjs +2 -0
  169. package/dist/data-sources/evm-rpc-services/types/core.mjs.map +1 -0
  170. package/dist/data-sources/evm-rpc-services/types/index.cjs +3 -0
  171. package/dist/data-sources/evm-rpc-services/types/index.cjs.map +1 -0
  172. package/dist/data-sources/evm-rpc-services/types/index.d.cts +7 -0
  173. package/dist/data-sources/evm-rpc-services/types/index.d.cts.map +1 -0
  174. package/dist/data-sources/evm-rpc-services/types/index.d.mts +7 -0
  175. package/dist/data-sources/evm-rpc-services/types/index.d.mts.map +1 -0
  176. package/dist/data-sources/evm-rpc-services/types/index.mjs +2 -0
  177. package/dist/data-sources/evm-rpc-services/types/index.mjs.map +1 -0
  178. package/dist/data-sources/evm-rpc-services/types/multicall.cjs +3 -0
  179. package/dist/data-sources/evm-rpc-services/types/multicall.cjs.map +1 -0
  180. package/dist/data-sources/evm-rpc-services/types/{multicall.d.ts → multicall.d.cts} +2 -2
  181. package/dist/data-sources/evm-rpc-services/types/multicall.d.cts.map +1 -0
  182. package/dist/data-sources/evm-rpc-services/types/multicall.d.mts +24 -0
  183. package/dist/data-sources/evm-rpc-services/types/multicall.d.mts.map +1 -0
  184. package/dist/data-sources/evm-rpc-services/types/multicall.mjs +2 -0
  185. package/dist/data-sources/evm-rpc-services/types/multicall.mjs.map +1 -0
  186. package/dist/data-sources/evm-rpc-services/types/services.cjs +3 -0
  187. package/dist/data-sources/evm-rpc-services/types/services.cjs.map +1 -0
  188. package/dist/data-sources/evm-rpc-services/types/{services.d.ts → services.d.cts} +3 -3
  189. package/dist/data-sources/evm-rpc-services/types/services.d.cts.map +1 -0
  190. package/dist/data-sources/evm-rpc-services/types/services.d.mts +70 -0
  191. package/dist/data-sources/evm-rpc-services/types/services.d.mts.map +1 -0
  192. package/dist/data-sources/evm-rpc-services/types/services.mjs +2 -0
  193. package/dist/data-sources/evm-rpc-services/types/services.mjs.map +1 -0
  194. package/dist/data-sources/evm-rpc-services/types/state.cjs +3 -0
  195. package/dist/data-sources/evm-rpc-services/types/state.cjs.map +1 -0
  196. package/dist/data-sources/evm-rpc-services/types/{state.d.ts → state.d.cts} +2 -2
  197. package/dist/data-sources/evm-rpc-services/types/state.d.cts.map +1 -0
  198. package/dist/data-sources/evm-rpc-services/types/state.d.mts +58 -0
  199. package/dist/data-sources/evm-rpc-services/types/state.d.mts.map +1 -0
  200. package/dist/data-sources/evm-rpc-services/types/state.mjs +2 -0
  201. package/dist/data-sources/evm-rpc-services/types/state.mjs.map +1 -0
  202. package/dist/data-sources/evm-rpc-services/utils/assets.cjs +9 -0
  203. package/dist/data-sources/evm-rpc-services/utils/assets.cjs.map +1 -0
  204. package/dist/data-sources/evm-rpc-services/utils/{assets.d.ts → assets.d.cts} +2 -2
  205. package/dist/data-sources/evm-rpc-services/utils/assets.d.cts.map +1 -0
  206. package/dist/data-sources/evm-rpc-services/utils/assets.d.mts +3 -0
  207. package/dist/data-sources/evm-rpc-services/utils/assets.d.mts.map +1 -0
  208. package/dist/data-sources/evm-rpc-services/utils/{assets.js → assets.mjs} +2 -2
  209. package/dist/data-sources/evm-rpc-services/utils/assets.mjs.map +1 -0
  210. package/dist/data-sources/evm-rpc-services/utils/batch.cjs +45 -0
  211. package/dist/data-sources/evm-rpc-services/utils/batch.cjs.map +1 -0
  212. package/dist/data-sources/evm-rpc-services/utils/{batch.d.ts → batch.d.cts} +1 -1
  213. package/dist/data-sources/evm-rpc-services/utils/batch.d.cts.map +1 -0
  214. package/dist/data-sources/evm-rpc-services/utils/batch.d.mts +28 -0
  215. package/dist/data-sources/evm-rpc-services/utils/batch.d.mts.map +1 -0
  216. package/dist/data-sources/evm-rpc-services/utils/{batch.js → batch.mjs} +1 -1
  217. package/dist/data-sources/evm-rpc-services/utils/batch.mjs.map +1 -0
  218. package/dist/data-sources/evm-rpc-services/utils/index.cjs +15 -0
  219. package/dist/data-sources/evm-rpc-services/utils/index.cjs.map +1 -0
  220. package/dist/data-sources/evm-rpc-services/utils/index.d.cts +4 -0
  221. package/dist/data-sources/evm-rpc-services/utils/index.d.cts.map +1 -0
  222. package/dist/data-sources/evm-rpc-services/utils/index.d.mts +4 -0
  223. package/dist/data-sources/evm-rpc-services/utils/index.d.mts.map +1 -0
  224. package/dist/data-sources/evm-rpc-services/utils/index.mjs +4 -0
  225. package/dist/data-sources/evm-rpc-services/utils/index.mjs.map +1 -0
  226. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs +47 -0
  227. package/dist/data-sources/evm-rpc-services/utils/parsing.cjs.map +1 -0
  228. package/dist/data-sources/evm-rpc-services/utils/{parsing.d.ts → parsing.d.cts} +3 -3
  229. package/dist/data-sources/evm-rpc-services/utils/parsing.d.cts.map +1 -0
  230. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts +25 -0
  231. package/dist/data-sources/evm-rpc-services/utils/parsing.d.mts.map +1 -0
  232. package/dist/data-sources/evm-rpc-services/utils/{parsing.js → parsing.mjs} +3 -3
  233. package/dist/data-sources/evm-rpc-services/utils/parsing.mjs.map +1 -0
  234. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs +68 -0
  235. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.cjs.map +1 -0
  236. package/dist/data-sources/evm-rpc-services/utils/{staking-contracts.d.ts → staking-contracts.d.cts} +1 -1
  237. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.cts.map +1 -0
  238. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts +25 -0
  239. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.mts.map +1 -0
  240. package/dist/data-sources/evm-rpc-services/utils/{staking-contracts.js → staking-contracts.mjs} +3 -3
  241. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.mjs.map +1 -0
  242. package/dist/data-sources/index.cjs +30 -0
  243. package/dist/data-sources/index.cjs.map +1 -0
  244. package/dist/data-sources/{index.d.ts → index.d.cts} +9 -9
  245. package/dist/data-sources/index.d.cts.map +1 -0
  246. package/dist/data-sources/index.d.mts +9 -0
  247. package/dist/data-sources/index.d.mts.map +1 -0
  248. package/dist/data-sources/index.mjs +14 -0
  249. package/dist/data-sources/index.mjs.map +1 -0
  250. package/dist/defaults.cjs +125 -0
  251. package/dist/defaults.cjs.map +1 -0
  252. package/dist/{defaults.d.ts → defaults.d.cts} +2 -2
  253. package/dist/defaults.d.cts.map +1 -0
  254. package/dist/defaults.d.mts +50 -0
  255. package/dist/defaults.d.mts.map +1 -0
  256. package/dist/{defaults.js → defaults.mjs} +1 -1
  257. package/dist/defaults.mjs.map +1 -0
  258. package/dist/errors.cjs +25 -0
  259. package/dist/errors.cjs.map +1 -0
  260. package/dist/{errors.d.ts → errors.d.cts} +1 -1
  261. package/dist/errors.d.cts.map +1 -0
  262. package/dist/errors.d.mts +25 -0
  263. package/dist/errors.d.mts.map +1 -0
  264. package/dist/{errors.js → errors.mjs} +1 -7
  265. package/dist/errors.mjs.map +1 -0
  266. package/dist/index.cjs +67 -0
  267. package/dist/index.cjs.map +1 -0
  268. package/dist/{index.d.ts → index.d.cts} +26 -26
  269. package/dist/index.d.cts.map +1 -0
  270. package/dist/index.d.mts +26 -0
  271. package/dist/index.d.mts.map +1 -0
  272. package/dist/{index.js → index.mjs} +13 -13
  273. package/dist/index.mjs.map +1 -0
  274. package/dist/logger.cjs +7 -0
  275. package/dist/logger.cjs.map +1 -0
  276. package/dist/logger.d.cts +5 -0
  277. package/dist/logger.d.cts.map +1 -0
  278. package/dist/logger.d.mts +5 -0
  279. package/dist/logger.d.mts.map +1 -0
  280. package/dist/logger.mjs +4 -0
  281. package/dist/logger.mjs.map +1 -0
  282. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs +132 -0
  283. package/dist/middlewares/CustomAssetGraduationMiddleware.cjs.map +1 -0
  284. package/dist/middlewares/{CustomAssetGraduationMiddleware.d.ts → CustomAssetGraduationMiddleware.d.cts} +2 -2
  285. package/dist/middlewares/CustomAssetGraduationMiddleware.d.cts.map +1 -0
  286. package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts +32 -0
  287. package/dist/middlewares/CustomAssetGraduationMiddleware.d.mts.map +1 -0
  288. package/dist/middlewares/{CustomAssetGraduationMiddleware.js → CustomAssetGraduationMiddleware.mjs} +25 -12
  289. package/dist/middlewares/CustomAssetGraduationMiddleware.mjs.map +1 -0
  290. package/dist/middlewares/DetectionMiddleware.cjs +154 -0
  291. package/dist/middlewares/DetectionMiddleware.cjs.map +1 -0
  292. package/dist/middlewares/{DetectionMiddleware.d.ts → DetectionMiddleware.d.cts} +2 -2
  293. package/dist/middlewares/DetectionMiddleware.d.cts.map +1 -0
  294. package/dist/middlewares/DetectionMiddleware.d.mts +40 -0
  295. package/dist/middlewares/DetectionMiddleware.d.mts.map +1 -0
  296. package/dist/middlewares/{DetectionMiddleware.js → DetectionMiddleware.mjs} +7 -5
  297. package/dist/middlewares/DetectionMiddleware.mjs.map +1 -0
  298. package/dist/middlewares/ParallelMiddleware.cjs +263 -0
  299. package/dist/middlewares/ParallelMiddleware.cjs.map +1 -0
  300. package/dist/middlewares/{ParallelMiddleware.d.ts → ParallelMiddleware.d.cts} +2 -2
  301. package/dist/middlewares/ParallelMiddleware.d.cts.map +1 -0
  302. package/dist/middlewares/ParallelMiddleware.d.mts +41 -0
  303. package/dist/middlewares/ParallelMiddleware.d.mts.map +1 -0
  304. package/dist/middlewares/{ParallelMiddleware.js → ParallelMiddleware.mjs} +11 -4
  305. package/dist/middlewares/ParallelMiddleware.mjs.map +1 -0
  306. package/dist/middlewares/RpcFallbackMiddleware.cjs +90 -0
  307. package/dist/middlewares/RpcFallbackMiddleware.cjs.map +1 -0
  308. package/dist/middlewares/{RpcFallbackMiddleware.d.ts → RpcFallbackMiddleware.d.cts} +2 -2
  309. package/dist/middlewares/RpcFallbackMiddleware.d.cts.map +1 -0
  310. package/dist/middlewares/RpcFallbackMiddleware.d.mts +23 -0
  311. package/dist/middlewares/RpcFallbackMiddleware.d.mts.map +1 -0
  312. package/dist/middlewares/{RpcFallbackMiddleware.js → RpcFallbackMiddleware.mjs} +21 -8
  313. package/dist/middlewares/RpcFallbackMiddleware.mjs.map +1 -0
  314. package/dist/middlewares/index.cjs +14 -0
  315. package/dist/middlewares/index.cjs.map +1 -0
  316. package/dist/middlewares/index.d.cts +9 -0
  317. package/dist/middlewares/index.d.cts.map +1 -0
  318. package/dist/middlewares/index.d.mts +9 -0
  319. package/dist/middlewares/index.d.mts.map +1 -0
  320. package/dist/middlewares/index.mjs +5 -0
  321. package/dist/middlewares/index.mjs.map +1 -0
  322. package/dist/migrations/healAssetsInfoMetadata.cjs +539 -0
  323. package/dist/migrations/healAssetsInfoMetadata.cjs.map +1 -0
  324. package/dist/migrations/{healAssetsInfoMetadata.d.ts → healAssetsInfoMetadata.d.cts} +5 -5
  325. package/dist/migrations/healAssetsInfoMetadata.d.cts.map +1 -0
  326. package/dist/migrations/healAssetsInfoMetadata.d.mts +140 -0
  327. package/dist/migrations/healAssetsInfoMetadata.d.mts.map +1 -0
  328. package/dist/migrations/{healAssetsInfoMetadata.js → healAssetsInfoMetadata.mjs} +11 -9
  329. package/dist/migrations/healAssetsInfoMetadata.mjs.map +1 -0
  330. package/dist/selectors/balance.cjs +532 -0
  331. package/dist/selectors/balance.cjs.map +1 -0
  332. package/dist/selectors/{balance.d.ts → balance.d.cts} +6 -6
  333. package/dist/selectors/balance.d.cts.map +1 -0
  334. package/dist/selectors/balance.d.mts +103 -0
  335. package/dist/selectors/balance.d.mts.map +1 -0
  336. package/dist/selectors/{balance.js → balance.mjs} +5 -5
  337. package/dist/selectors/balance.mjs.map +1 -0
  338. package/dist/types.cjs +39 -0
  339. package/dist/types.cjs.map +1 -0
  340. package/dist/{types.d.ts → types.d.cts} +4 -4
  341. package/dist/types.d.cts.map +1 -0
  342. package/dist/types.d.mts +533 -0
  343. package/dist/types.d.mts.map +1 -0
  344. package/dist/{types.js → types.mjs} +1 -1
  345. package/dist/types.mjs.map +1 -0
  346. package/dist/utils/constants.cjs +5 -0
  347. package/dist/utils/constants.cjs.map +1 -0
  348. package/dist/utils/constants.d.cts +2 -0
  349. package/dist/utils/constants.d.cts.map +1 -0
  350. package/dist/utils/constants.d.mts +2 -0
  351. package/dist/utils/constants.d.mts.map +1 -0
  352. package/dist/utils/{constants.js → constants.mjs} +1 -1
  353. package/dist/utils/constants.mjs.map +1 -0
  354. package/dist/utils/customAssetsRpcSupplement.cjs +72 -0
  355. package/dist/utils/customAssetsRpcSupplement.cjs.map +1 -0
  356. package/dist/utils/{customAssetsRpcSupplement.d.ts → customAssetsRpcSupplement.d.cts} +2 -2
  357. package/dist/utils/customAssetsRpcSupplement.d.cts.map +1 -0
  358. package/dist/utils/customAssetsRpcSupplement.d.mts +60 -0
  359. package/dist/utils/customAssetsRpcSupplement.d.mts.map +1 -0
  360. package/dist/utils/{customAssetsRpcSupplement.js → customAssetsRpcSupplement.mjs} +2 -2
  361. package/dist/utils/customAssetsRpcSupplement.mjs.map +1 -0
  362. package/dist/utils/dedupingBatchFetcher.cjs +168 -0
  363. package/dist/utils/dedupingBatchFetcher.cjs.map +1 -0
  364. package/dist/utils/{dedupingBatchFetcher.d.ts → dedupingBatchFetcher.d.cts} +1 -1
  365. package/dist/utils/dedupingBatchFetcher.d.cts.map +1 -0
  366. package/dist/utils/dedupingBatchFetcher.d.mts +72 -0
  367. package/dist/utils/dedupingBatchFetcher.d.mts.map +1 -0
  368. package/dist/utils/dedupingBatchFetcher.mjs +164 -0
  369. package/dist/utils/dedupingBatchFetcher.mjs.map +1 -0
  370. package/dist/utils/fetchWithTimeout.cjs +30 -0
  371. package/dist/utils/fetchWithTimeout.cjs.map +1 -0
  372. package/dist/utils/{fetchWithTimeout.d.ts → fetchWithTimeout.d.cts} +1 -1
  373. package/dist/utils/fetchWithTimeout.d.cts.map +1 -0
  374. package/dist/utils/fetchWithTimeout.d.mts +11 -0
  375. package/dist/utils/fetchWithTimeout.d.mts.map +1 -0
  376. package/dist/utils/{fetchWithTimeout.js → fetchWithTimeout.mjs} +1 -1
  377. package/dist/utils/fetchWithTimeout.mjs.map +1 -0
  378. package/dist/utils/formatExchangeRatesForBridge.cjs +161 -0
  379. package/dist/utils/formatExchangeRatesForBridge.cjs.map +1 -0
  380. package/dist/utils/{formatExchangeRatesForBridge.d.ts → formatExchangeRatesForBridge.d.cts} +3 -3
  381. package/dist/utils/formatExchangeRatesForBridge.d.cts.map +1 -0
  382. package/dist/utils/formatExchangeRatesForBridge.d.mts +43 -0
  383. package/dist/utils/formatExchangeRatesForBridge.d.mts.map +1 -0
  384. package/dist/utils/{formatExchangeRatesForBridge.js → formatExchangeRatesForBridge.mjs} +7 -6
  385. package/dist/utils/formatExchangeRatesForBridge.mjs.map +1 -0
  386. package/dist/utils/formatStateForTransactionPay.cjs +174 -0
  387. package/dist/utils/formatStateForTransactionPay.cjs.map +1 -0
  388. package/dist/utils/{formatStateForTransactionPay.d.ts → formatStateForTransactionPay.d.cts} +3 -3
  389. package/dist/utils/formatStateForTransactionPay.d.cts.map +1 -0
  390. package/dist/utils/formatStateForTransactionPay.d.mts +72 -0
  391. package/dist/utils/formatStateForTransactionPay.d.mts.map +1 -0
  392. package/dist/utils/{formatStateForTransactionPay.js → formatStateForTransactionPay.mjs} +15 -13
  393. package/dist/utils/formatStateForTransactionPay.mjs.map +1 -0
  394. package/dist/utils/index.cjs +21 -0
  395. package/dist/utils/index.cjs.map +1 -0
  396. package/dist/utils/index.d.cts +9 -0
  397. package/dist/utils/index.d.cts.map +1 -0
  398. package/dist/utils/index.d.mts +9 -0
  399. package/dist/utils/index.d.mts.map +1 -0
  400. package/dist/utils/index.mjs +7 -0
  401. package/dist/utils/index.mjs.map +1 -0
  402. package/dist/utils/native-assets.cjs +64 -0
  403. package/dist/utils/native-assets.cjs.map +1 -0
  404. package/dist/utils/{native-assets.d.ts → native-assets.d.cts} +2 -2
  405. package/dist/utils/native-assets.d.cts.map +1 -0
  406. package/dist/utils/native-assets.d.mts +19 -0
  407. package/dist/utils/native-assets.d.mts.map +1 -0
  408. package/dist/utils/{native-assets.js → native-assets.mjs} +6 -6
  409. package/dist/utils/native-assets.mjs.map +1 -0
  410. package/dist/utils/normalizeAmountString.cjs +64 -0
  411. package/dist/utils/normalizeAmountString.cjs.map +1 -0
  412. package/dist/utils/{normalizeAmountString.d.ts → normalizeAmountString.d.cts} +1 -1
  413. package/dist/utils/normalizeAmountString.d.cts.map +1 -0
  414. package/dist/utils/normalizeAmountString.d.mts +35 -0
  415. package/dist/utils/normalizeAmountString.d.mts.map +1 -0
  416. package/dist/utils/{normalizeAmountString.js → normalizeAmountString.mjs} +2 -2
  417. package/dist/utils/normalizeAmountString.mjs.map +1 -0
  418. package/dist/utils/normalizeAssetId.cjs +60 -0
  419. package/dist/utils/normalizeAssetId.cjs.map +1 -0
  420. package/dist/utils/{normalizeAssetId.d.ts → normalizeAssetId.d.cts} +3 -3
  421. package/dist/utils/normalizeAssetId.d.cts.map +1 -0
  422. package/dist/utils/normalizeAssetId.d.mts +32 -0
  423. package/dist/utils/normalizeAssetId.d.mts.map +1 -0
  424. package/dist/utils/{normalizeAssetId.js → normalizeAssetId.mjs} +11 -4
  425. package/dist/utils/normalizeAssetId.mjs.map +1 -0
  426. package/dist/utils/snaps-assets-migration.cjs +171 -0
  427. package/dist/utils/snaps-assets-migration.cjs.map +1 -0
  428. package/dist/utils/{snaps-assets-migration.d.ts → snaps-assets-migration.d.cts} +5 -5
  429. package/dist/utils/snaps-assets-migration.d.cts.map +1 -0
  430. package/dist/utils/snaps-assets-migration.d.mts +113 -0
  431. package/dist/utils/snaps-assets-migration.d.mts.map +1 -0
  432. package/dist/utils/{snaps-assets-migration.js → snaps-assets-migration.mjs} +2 -2
  433. package/dist/utils/snaps-assets-migration.mjs.map +1 -0
  434. package/dist/utils/trace.cjs +120 -0
  435. package/dist/utils/trace.cjs.map +1 -0
  436. package/dist/utils/{trace.d.ts → trace.d.cts} +2 -2
  437. package/dist/utils/trace.d.cts.map +1 -0
  438. package/dist/utils/trace.d.mts +52 -0
  439. package/dist/utils/trace.d.mts.map +1 -0
  440. package/dist/utils/{trace.js → trace.mjs} +1 -1
  441. package/dist/utils/trace.mjs.map +1 -0
  442. package/package.json +17 -14
  443. package/dist/AssetsController-method-action-types.d.ts.map +0 -1
  444. package/dist/AssetsController-method-action-types.js.map +0 -1
  445. package/dist/AssetsController.d.ts.map +0 -1
  446. package/dist/AssetsController.js +0 -2934
  447. package/dist/AssetsController.js.map +0 -1
  448. package/dist/data-sources/AbstractDataSource.d.ts.map +0 -1
  449. package/dist/data-sources/AbstractDataSource.js.map +0 -1
  450. package/dist/data-sources/AccountActivityDataSource.d.ts.map +0 -1
  451. package/dist/data-sources/AccountActivityDataSource.js +0 -272
  452. package/dist/data-sources/AccountActivityDataSource.js.map +0 -1
  453. package/dist/data-sources/AccountsApiDataSource.d.ts.map +0 -1
  454. package/dist/data-sources/AccountsApiDataSource.js +0 -609
  455. package/dist/data-sources/AccountsApiDataSource.js.map +0 -1
  456. package/dist/data-sources/PriceDataSource.d.ts.map +0 -1
  457. package/dist/data-sources/PriceDataSource.js.map +0 -1
  458. package/dist/data-sources/RpcDataSource.d.ts.map +0 -1
  459. package/dist/data-sources/RpcDataSource.js +0 -1077
  460. package/dist/data-sources/RpcDataSource.js.map +0 -1
  461. package/dist/data-sources/SnapDataSource.d.ts.map +0 -1
  462. package/dist/data-sources/SnapDataSource.js.map +0 -1
  463. package/dist/data-sources/StakedBalanceDataSource.d.ts.map +0 -1
  464. package/dist/data-sources/StakedBalanceDataSource.js +0 -675
  465. package/dist/data-sources/StakedBalanceDataSource.js.map +0 -1
  466. package/dist/data-sources/TokenDataSource.d.ts.map +0 -1
  467. package/dist/data-sources/TokenDataSource.js.map +0 -1
  468. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.ts.map +0 -1
  469. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.js.map +0 -1
  470. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.ts.map +0 -1
  471. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.js +0 -297
  472. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.js.map +0 -1
  473. package/dist/data-sources/evm-rpc-services/clients/index.d.ts +0 -4
  474. package/dist/data-sources/evm-rpc-services/clients/index.d.ts.map +0 -1
  475. package/dist/data-sources/evm-rpc-services/clients/index.js +0 -3
  476. package/dist/data-sources/evm-rpc-services/clients/index.js.map +0 -1
  477. package/dist/data-sources/evm-rpc-services/index.d.ts.map +0 -1
  478. package/dist/data-sources/evm-rpc-services/index.js +0 -4
  479. package/dist/data-sources/evm-rpc-services/index.js.map +0 -1
  480. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.ts.map +0 -1
  481. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.js +0 -241
  482. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.js.map +0 -1
  483. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.ts.map +0 -1
  484. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.js.map +0 -1
  485. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.ts.map +0 -1
  486. package/dist/data-sources/evm-rpc-services/services/TokenDetector.js +0 -217
  487. package/dist/data-sources/evm-rpc-services/services/TokenDetector.js.map +0 -1
  488. package/dist/data-sources/evm-rpc-services/services/index.d.ts.map +0 -1
  489. package/dist/data-sources/evm-rpc-services/services/index.js +0 -4
  490. package/dist/data-sources/evm-rpc-services/services/index.js.map +0 -1
  491. package/dist/data-sources/evm-rpc-services/types/assets.d.ts.map +0 -1
  492. package/dist/data-sources/evm-rpc-services/types/assets.js +0 -2
  493. package/dist/data-sources/evm-rpc-services/types/assets.js.map +0 -1
  494. package/dist/data-sources/evm-rpc-services/types/config.d.ts.map +0 -1
  495. package/dist/data-sources/evm-rpc-services/types/config.js +0 -2
  496. package/dist/data-sources/evm-rpc-services/types/config.js.map +0 -1
  497. package/dist/data-sources/evm-rpc-services/types/core.d.ts.map +0 -1
  498. package/dist/data-sources/evm-rpc-services/types/core.js +0 -2
  499. package/dist/data-sources/evm-rpc-services/types/core.js.map +0 -1
  500. package/dist/data-sources/evm-rpc-services/types/index.d.ts +0 -7
  501. package/dist/data-sources/evm-rpc-services/types/index.d.ts.map +0 -1
  502. package/dist/data-sources/evm-rpc-services/types/index.js +0 -2
  503. package/dist/data-sources/evm-rpc-services/types/index.js.map +0 -1
  504. package/dist/data-sources/evm-rpc-services/types/multicall.d.ts.map +0 -1
  505. package/dist/data-sources/evm-rpc-services/types/multicall.js +0 -2
  506. package/dist/data-sources/evm-rpc-services/types/multicall.js.map +0 -1
  507. package/dist/data-sources/evm-rpc-services/types/services.d.ts.map +0 -1
  508. package/dist/data-sources/evm-rpc-services/types/services.js +0 -2
  509. package/dist/data-sources/evm-rpc-services/types/services.js.map +0 -1
  510. package/dist/data-sources/evm-rpc-services/types/state.d.ts.map +0 -1
  511. package/dist/data-sources/evm-rpc-services/types/state.js +0 -2
  512. package/dist/data-sources/evm-rpc-services/types/state.js.map +0 -1
  513. package/dist/data-sources/evm-rpc-services/utils/assets.d.ts.map +0 -1
  514. package/dist/data-sources/evm-rpc-services/utils/assets.js.map +0 -1
  515. package/dist/data-sources/evm-rpc-services/utils/batch.d.ts.map +0 -1
  516. package/dist/data-sources/evm-rpc-services/utils/batch.js.map +0 -1
  517. package/dist/data-sources/evm-rpc-services/utils/index.d.ts +0 -4
  518. package/dist/data-sources/evm-rpc-services/utils/index.d.ts.map +0 -1
  519. package/dist/data-sources/evm-rpc-services/utils/index.js +0 -4
  520. package/dist/data-sources/evm-rpc-services/utils/index.js.map +0 -1
  521. package/dist/data-sources/evm-rpc-services/utils/parsing.d.ts.map +0 -1
  522. package/dist/data-sources/evm-rpc-services/utils/parsing.js.map +0 -1
  523. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.ts.map +0 -1
  524. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.js.map +0 -1
  525. package/dist/data-sources/index.d.ts.map +0 -1
  526. package/dist/data-sources/index.js +0 -14
  527. package/dist/data-sources/index.js.map +0 -1
  528. package/dist/defaults.d.ts.map +0 -1
  529. package/dist/defaults.js.map +0 -1
  530. package/dist/errors.d.ts.map +0 -1
  531. package/dist/errors.js.map +0 -1
  532. package/dist/index.d.ts.map +0 -1
  533. package/dist/index.js.map +0 -1
  534. package/dist/logger.d.ts +0 -4
  535. package/dist/logger.d.ts.map +0 -1
  536. package/dist/logger.js +0 -4
  537. package/dist/logger.js.map +0 -1
  538. package/dist/middlewares/CustomAssetGraduationMiddleware.d.ts.map +0 -1
  539. package/dist/middlewares/CustomAssetGraduationMiddleware.js.map +0 -1
  540. package/dist/middlewares/DetectionMiddleware.d.ts.map +0 -1
  541. package/dist/middlewares/DetectionMiddleware.js.map +0 -1
  542. package/dist/middlewares/ParallelMiddleware.d.ts.map +0 -1
  543. package/dist/middlewares/ParallelMiddleware.js.map +0 -1
  544. package/dist/middlewares/RpcFallbackMiddleware.d.ts.map +0 -1
  545. package/dist/middlewares/RpcFallbackMiddleware.js.map +0 -1
  546. package/dist/middlewares/index.d.ts +0 -9
  547. package/dist/middlewares/index.d.ts.map +0 -1
  548. package/dist/middlewares/index.js +0 -5
  549. package/dist/middlewares/index.js.map +0 -1
  550. package/dist/migrations/healAssetsInfoMetadata.d.ts.map +0 -1
  551. package/dist/migrations/healAssetsInfoMetadata.js.map +0 -1
  552. package/dist/selectors/balance.d.ts.map +0 -1
  553. package/dist/selectors/balance.js.map +0 -1
  554. package/dist/types.d.ts.map +0 -1
  555. package/dist/types.js.map +0 -1
  556. package/dist/utils/constants.d.ts +0 -2
  557. package/dist/utils/constants.d.ts.map +0 -1
  558. package/dist/utils/constants.js.map +0 -1
  559. package/dist/utils/customAssetsRpcSupplement.d.ts.map +0 -1
  560. package/dist/utils/customAssetsRpcSupplement.js.map +0 -1
  561. package/dist/utils/dedupingBatchFetcher.d.ts.map +0 -1
  562. package/dist/utils/dedupingBatchFetcher.js +0 -177
  563. package/dist/utils/dedupingBatchFetcher.js.map +0 -1
  564. package/dist/utils/fetchWithTimeout.d.ts.map +0 -1
  565. package/dist/utils/fetchWithTimeout.js.map +0 -1
  566. package/dist/utils/formatExchangeRatesForBridge.d.ts.map +0 -1
  567. package/dist/utils/formatExchangeRatesForBridge.js.map +0 -1
  568. package/dist/utils/formatStateForTransactionPay.d.ts.map +0 -1
  569. package/dist/utils/formatStateForTransactionPay.js.map +0 -1
  570. package/dist/utils/index.d.ts +0 -9
  571. package/dist/utils/index.d.ts.map +0 -1
  572. package/dist/utils/index.js +0 -7
  573. package/dist/utils/index.js.map +0 -1
  574. package/dist/utils/native-assets.d.ts.map +0 -1
  575. package/dist/utils/native-assets.js.map +0 -1
  576. package/dist/utils/normalizeAmountString.d.ts.map +0 -1
  577. package/dist/utils/normalizeAmountString.js.map +0 -1
  578. package/dist/utils/normalizeAssetId.d.ts.map +0 -1
  579. package/dist/utils/normalizeAssetId.js.map +0 -1
  580. package/dist/utils/snaps-assets-migration.d.ts.map +0 -1
  581. package/dist/utils/snaps-assets-migration.js.map +0 -1
  582. package/dist/utils/trace.d.ts.map +0 -1
  583. package/dist/utils/trace.js.map +0 -1
@@ -0,0 +1,1012 @@
1
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
+ if (kind === "m") throw new TypeError("Private method is not writable");
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _RpcDataSource_instances, _RpcDataSource_messenger, _RpcDataSource_onActiveChainsUpdated, _RpcDataSource_getNativeAssetForChain, _RpcDataSource_timeout, _RpcDataSource_tokenDetectionEnabled, _RpcDataSource_useExternalService, _RpcDataSource_isOnboarded, _RpcDataSource_activeChains, _RpcDataSource_chainStatuses, _RpcDataSource_providerCache, _RpcDataSource_activeSubscriptions, _RpcDataSource_unsubscribeTransactionConfirmed, _RpcDataSource_multicallClient, _RpcDataSource_balanceFetcher, _RpcDataSource_tokenDetector, _RpcDataSource_getAssetType, _RpcDataSource_convertToHumanReadable, _RpcDataSource_collectMetadataForBalances, _RpcDataSource_hasValidDecimals, _RpcDataSource_pickValidDecimals, _RpcDataSource_handleBalanceUpdate, _RpcDataSource_handleDetectionUpdate, _RpcDataSource_subscribeToNetworkController, _RpcDataSource_subscribeToTransactionEvents, _RpcDataSource_onTransactionConfirmed, _RpcDataSource_refreshBalanceForChains, _RpcDataSource_initializeFromNetworkController, _RpcDataSource_updateFromNetworkState, _RpcDataSource_getProvider, _RpcDataSource_getMulticallProvider, _RpcDataSource_clearProviderCache, _RpcDataSource_fetchDecimalsViaRpc, _RpcDataSource_getExistingAssetsMetadata;
13
+ import { Web3Provider } from "@ethersproject/providers";
14
+ import { toHex } from "@metamask/controller-utils";
15
+ import { isStrictHexString, isCaipChainId, parseCaipAssetType, parseCaipChainId, hexToNumber, toCaipChainId, KnownCaipNamespace } from "@metamask/utils";
16
+ import BigNumberJS from "bignumber.js";
17
+ import { projectLogger, createModuleLogger } from "../logger.mjs";
18
+ import { ZERO_ADDRESS } from "../utils/constants.mjs";
19
+ import { normalizeAssetId } from "../utils/index.mjs";
20
+ import { AbstractDataSource } from "./AbstractDataSource.mjs";
21
+ import { BalanceFetcher, MulticallClient, TokenDetector, TokensApiClient } from "./evm-rpc-services/index.mjs";
22
+ import { shouldSkipNativeForCaipChainId } from "./evm-rpc-services/utils/assets.mjs";
23
+ const CONTROLLER_NAME = 'RpcDataSource';
24
+ const DEFAULT_BALANCE_INTERVAL = 30000; // 30 seconds
25
+ const DEFAULT_DETECTION_INTERVAL = 180000; // 3 minutes
26
+ const log = createModuleLogger(projectLogger, CONTROLLER_NAME);
27
+ /**
28
+ * Convert CAIP chain ID or hex chain ID to hex chain ID.
29
+ *
30
+ * @param chainId - CAIP chain ID or hex chain ID.
31
+ * @returns Hex chain ID.
32
+ */
33
+ export const caipChainIdToHex = (chainId) => {
34
+ if (isStrictHexString(chainId)) {
35
+ return chainId;
36
+ }
37
+ if (isCaipChainId(chainId)) {
38
+ return toHex(parseCaipChainId(chainId).reference);
39
+ }
40
+ throw new Error('caipChainIdToHex - Failed to provide CAIP-2 or Hex chainId');
41
+ };
42
+ /**
43
+ * Data source for fetching balances via RPC calls.
44
+ *
45
+ * Orchestrates polling through BalanceFetcher and TokenDetector,
46
+ * each of which handle their own polling intervals.
47
+ *
48
+ * Communicates with AssetsController via Messenger:
49
+ *
50
+ * Actions:
51
+ * - RpcDataSource:getActiveChains
52
+ * - RpcDataSource:fetch
53
+ * - RpcDataSource:subscribe
54
+ * - RpcDataSource:unsubscribe
55
+ *
56
+ * Events:
57
+ * - RpcDataSource:activeChainsUpdated
58
+ * - RpcDataSource:assetsUpdated
59
+ */
60
+ export class RpcDataSource extends AbstractDataSource {
61
+ constructor(options) {
62
+ super(CONTROLLER_NAME, { activeChains: [] });
63
+ _RpcDataSource_instances.add(this);
64
+ _RpcDataSource_messenger.set(this, void 0);
65
+ _RpcDataSource_onActiveChainsUpdated.set(this, void 0);
66
+ _RpcDataSource_getNativeAssetForChain.set(this, void 0);
67
+ _RpcDataSource_timeout.set(this, void 0);
68
+ _RpcDataSource_tokenDetectionEnabled.set(this, void 0);
69
+ _RpcDataSource_useExternalService.set(this, void 0);
70
+ _RpcDataSource_isOnboarded.set(this, void 0);
71
+ /** Currently active chains */
72
+ _RpcDataSource_activeChains.set(this, []);
73
+ /** Network status for each active chain */
74
+ _RpcDataSource_chainStatuses.set(this, {});
75
+ /** Cache of Web3Provider instances by chainId */
76
+ _RpcDataSource_providerCache.set(this, new Map());
77
+ /** Active subscriptions by ID */
78
+ _RpcDataSource_activeSubscriptions.set(this, new Map());
79
+ _RpcDataSource_unsubscribeTransactionConfirmed.set(this, undefined);
80
+ // Rpc-datasource components
81
+ _RpcDataSource_multicallClient.set(this, void 0);
82
+ _RpcDataSource_balanceFetcher.set(this, void 0);
83
+ _RpcDataSource_tokenDetector.set(this, void 0);
84
+ _RpcDataSource_getAssetType.set(this, void 0);
85
+ __classPrivateFieldSet(this, _RpcDataSource_messenger, options.messenger, "f");
86
+ __classPrivateFieldSet(this, _RpcDataSource_onActiveChainsUpdated, options.onActiveChainsUpdated, "f");
87
+ __classPrivateFieldSet(this, _RpcDataSource_getNativeAssetForChain, options.getNativeAssetForChain, "f");
88
+ __classPrivateFieldSet(this, _RpcDataSource_getAssetType, options.getAssetType, "f");
89
+ __classPrivateFieldSet(this, _RpcDataSource_timeout, options.timeout ?? 10000, "f");
90
+ __classPrivateFieldSet(this, _RpcDataSource_tokenDetectionEnabled, options.tokenDetectionEnabled ?? (() => true), "f");
91
+ __classPrivateFieldSet(this, _RpcDataSource_useExternalService, options.useExternalService ?? (() => true), "f");
92
+ __classPrivateFieldSet(this, _RpcDataSource_isOnboarded, options.isOnboarded ?? (() => true), "f");
93
+ const balanceInterval = options.balanceInterval ?? DEFAULT_BALANCE_INTERVAL;
94
+ const detectionInterval = options.detectionInterval ?? DEFAULT_DETECTION_INTERVAL;
95
+ log('Initializing RpcDataSource', {
96
+ timeout: __classPrivateFieldGet(this, _RpcDataSource_timeout, "f"),
97
+ balanceInterval,
98
+ detectionInterval,
99
+ tokenDetectionEnabled: __classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this),
100
+ useExternalService: __classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this),
101
+ });
102
+ // Initialize MulticallClient with a provider getter
103
+ __classPrivateFieldSet(this, _RpcDataSource_multicallClient, new MulticallClient({
104
+ getProvider: (hexChainId) => {
105
+ return __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getMulticallProvider).call(this, hexChainId);
106
+ },
107
+ getMulticall3AddressForChain: (hexChainId) =>
108
+ // The messenger is not being called from a constructor, so this is safe.
109
+ // eslint-disable-next-line no-restricted-syntax
110
+ __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('ConfigRegistryController:getNetworkConfigByCaip2ChainId', toCaipChainId(KnownCaipNamespace.Eip155, hexToNumber(hexChainId).toString()))?.contracts?.multicall3,
111
+ }), "f");
112
+ // Create messenger adapters for BalanceFetcher and TokenDetector
113
+ const balanceFetcherMessenger = {
114
+ call: (_action) => {
115
+ // The messenger is not being called from a constructor, so this is safe.
116
+ // eslint-disable-next-line no-restricted-syntax
117
+ const state = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('AssetsController:getState');
118
+ return {
119
+ assetsBalance: (state.assetsBalance ?? {}),
120
+ customAssets: (state.customAssets ?? {}),
121
+ };
122
+ },
123
+ };
124
+ // Initialize BalanceFetcher with polling interval
125
+ __classPrivateFieldSet(this, _RpcDataSource_balanceFetcher, new BalanceFetcher(__classPrivateFieldGet(this, _RpcDataSource_multicallClient, "f"), balanceFetcherMessenger, {
126
+ pollingInterval: balanceInterval,
127
+ isNativeAsset: (assetId) => {
128
+ const { chainId } = parseCaipAssetType(assetId);
129
+ const nativeId = __classPrivateFieldGet(this, _RpcDataSource_getNativeAssetForChain, "f").call(this, chainId);
130
+ return nativeId?.toLowerCase() === assetId.toLowerCase();
131
+ },
132
+ }), "f");
133
+ // Polling controller awaits this callback; rejections must not become unhandled.
134
+ __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").setOnBalanceUpdate(async (result) => {
135
+ try {
136
+ await __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_handleBalanceUpdate).call(this, result);
137
+ }
138
+ catch (error) {
139
+ log('Balance update handler failed', { error });
140
+ }
141
+ });
142
+ // Initialize TokenDetector with polling interval. The TokensApiClient is
143
+ // configured with the shared TanStack Query client (when the controller
144
+ // provides one) so concurrent detector polls/accounts/instances share a
145
+ // single in-flight request and cached result per chain.
146
+ const tokensApiClient = new TokensApiClient({
147
+ queryClient: options.queryClient,
148
+ });
149
+ __classPrivateFieldSet(this, _RpcDataSource_tokenDetector, new TokenDetector(__classPrivateFieldGet(this, _RpcDataSource_multicallClient, "f"), tokensApiClient, {
150
+ pollingInterval: detectionInterval,
151
+ tokenDetectionEnabled: __classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f"),
152
+ useExternalService: __classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f"),
153
+ }), "f");
154
+ // Sync throw in the detector would reject the poll tick if uncaught.
155
+ __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").setOnDetectionUpdate((result) => {
156
+ try {
157
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_handleDetectionUpdate).call(this, result);
158
+ }
159
+ catch (error) {
160
+ log('Detection update handler failed', { error });
161
+ }
162
+ });
163
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_subscribeToNetworkController).call(this);
164
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_subscribeToTransactionEvents).call(this);
165
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_initializeFromNetworkController).call(this);
166
+ }
167
+ /**
168
+ * Re-read NetworkController state and refresh Rpc `activeChains` (e.g. when
169
+ * network availability metadata changes after an EVM network switch).
170
+ */
171
+ refreshActiveChainsFromNetworkState() {
172
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_initializeFromNetworkController).call(this);
173
+ }
174
+ /**
175
+ * Get the data source name.
176
+ *
177
+ * @returns The name of this data source.
178
+ */
179
+ /**
180
+ * Get the status of all configured chains.
181
+ *
182
+ * @returns Record of chain statuses keyed by chain ID.
183
+ */
184
+ getChainStatuses() {
185
+ return { ...__classPrivateFieldGet(this, _RpcDataSource_chainStatuses, "f") };
186
+ }
187
+ /**
188
+ * Get the status of a specific chain.
189
+ *
190
+ * @param chainId - The chain ID to get status for.
191
+ * @returns The chain status or undefined if not found.
192
+ */
193
+ getChainStatus(chainId) {
194
+ return __classPrivateFieldGet(this, _RpcDataSource_chainStatuses, "f")[chainId];
195
+ }
196
+ /**
197
+ * Set the balance polling interval.
198
+ *
199
+ * @param interval - The polling interval in milliseconds.
200
+ */
201
+ setBalancePollingInterval(interval) {
202
+ log('Setting balance polling interval', { interval });
203
+ __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").setIntervalLength(interval);
204
+ }
205
+ /**
206
+ * Get the current balance polling interval.
207
+ *
208
+ * @returns The polling interval in milliseconds, or undefined if not set.
209
+ */
210
+ getBalancePollingInterval() {
211
+ return __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").getIntervalLength();
212
+ }
213
+ /**
214
+ * Set the token detection polling interval.
215
+ *
216
+ * @param interval - The polling interval in milliseconds.
217
+ */
218
+ setDetectionPollingInterval(interval) {
219
+ log('Setting detection polling interval', { interval });
220
+ __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").setIntervalLength(interval);
221
+ }
222
+ /**
223
+ * Get the current token detection polling interval.
224
+ *
225
+ * @returns The polling interval in milliseconds, or undefined if not set.
226
+ */
227
+ getDetectionPollingInterval() {
228
+ return __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").getIntervalLength();
229
+ }
230
+ async fetch(request) {
231
+ if (!__classPrivateFieldGet(this, _RpcDataSource_isOnboarded, "f").call(this)) {
232
+ log('Skipping fetch - onboarding not complete');
233
+ return {};
234
+ }
235
+ const response = {};
236
+ const chainsToFetch = request.chainIds.filter((chainId) => __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").includes(chainId));
237
+ log('Fetch requested', {
238
+ accounts: request.accountsWithSupportedChains.map((a) => a.account.id),
239
+ requestedChains: request.chainIds,
240
+ chainsToFetch,
241
+ });
242
+ if (chainsToFetch.length === 0) {
243
+ log('No active chains to fetch');
244
+ return response;
245
+ }
246
+ const assetsBalance = {};
247
+ const assetsInfo = {};
248
+ const failedChains = [];
249
+ // Fetch balances for each account and its supported chains (pre-computed in request)
250
+ for (const { account, supportedChains, } of request.accountsWithSupportedChains) {
251
+ const chainsForAccount = chainsToFetch.filter((chain) => supportedChains.includes(chain));
252
+ if (chainsForAccount.length === 0) {
253
+ continue;
254
+ }
255
+ const { address, id: accountId } = account;
256
+ for (const chainId of chainsForAccount) {
257
+ const hexChainId = caipChainIdToHex(chainId);
258
+ const nativeAssetId = __classPrivateFieldGet(this, _RpcDataSource_getNativeAssetForChain, "f").call(this, chainId);
259
+ const shouldSkipNative = shouldSkipNativeForCaipChainId(chainId);
260
+ const assetsToFetch = [];
261
+ if (!shouldSkipNative) {
262
+ // Build a single AssetFetchEntry[] for native + custom ERC-20s
263
+ assetsToFetch.push({ assetId: nativeAssetId, address: ZERO_ADDRESS });
264
+ }
265
+ if (request.customAssets) {
266
+ const existingMetadata = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getExistingAssetsMetadata).call(this);
267
+ for (const assetId of request.customAssets) {
268
+ try {
269
+ const parsed = parseCaipAssetType(assetId);
270
+ const assetChainId = `${parsed.chain.namespace}:${parsed.chain.reference}`;
271
+ if (assetChainId === chainId &&
272
+ __classPrivateFieldGet(this, _RpcDataSource_getAssetType, "f").call(this, assetId) === 'erc20') {
273
+ const tokenAddress = parsed.assetReference.toLowerCase();
274
+ const normalizedId = normalizeAssetId(assetId);
275
+ const decimals = existingMetadata[normalizedId]?.decimals;
276
+ assetsToFetch.push({
277
+ assetId,
278
+ address: tokenAddress,
279
+ decimals,
280
+ });
281
+ }
282
+ }
283
+ catch {
284
+ // Skip unparseable asset IDs
285
+ }
286
+ }
287
+ }
288
+ try {
289
+ const result = await __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").fetchBalancesForAssets(hexChainId, accountId, address, assetsToFetch);
290
+ if (!assetsBalance[accountId]) {
291
+ assetsBalance[accountId] = {};
292
+ }
293
+ // Normalize asset IDs from BalanceFetcher (which uses lowercase
294
+ // addresses) to checksummed form so they match assetsInfo state keys.
295
+ const normalizedBalances = result.balances.map((b) => ({
296
+ ...b,
297
+ assetId: normalizeAssetId(b.assetId),
298
+ }));
299
+ // Collect metadata for all balances
300
+ const balanceMetadata = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_collectMetadataForBalances).call(this, normalizedBalances, chainId);
301
+ Object.assign(assetsInfo, balanceMetadata);
302
+ // Convert balances to human-readable format using decimals from
303
+ // assetsInfo state (which includes pendingMetadata from addCustomAsset).
304
+ // Resolution: state → pipeline metadata → RPC `decimals()`; omit balance if still unknown.
305
+ const existingMetadata = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getExistingAssetsMetadata).call(this);
306
+ for (const balance of normalizedBalances) {
307
+ const stateMetadata = existingMetadata[balance.assetId];
308
+ const pipelineMetadata = assetsInfo[balance.assetId];
309
+ let decimals = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_pickValidDecimals).call(this, stateMetadata, pipelineMetadata);
310
+ if (decimals === undefined) {
311
+ const parsed = parseCaipAssetType(balance.assetId);
312
+ if (__classPrivateFieldGet(this, _RpcDataSource_getAssetType, "f").call(this, balance.assetId) === 'erc20') {
313
+ decimals = await __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_fetchDecimalsViaRpc).call(this, chainId, parsed.assetReference);
314
+ }
315
+ }
316
+ if (decimals === undefined) {
317
+ continue;
318
+ }
319
+ const humanReadableAmount = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_convertToHumanReadable).call(this, balance.balance, decimals);
320
+ assetsBalance[accountId][balance.assetId] = {
321
+ amount: humanReadableAmount,
322
+ };
323
+ }
324
+ }
325
+ catch (error) {
326
+ log('Failed to fetch balance', { address, chainId, error });
327
+ if (!assetsBalance[accountId]) {
328
+ assetsBalance[accountId] = {};
329
+ }
330
+ if (!shouldSkipNative) {
331
+ assetsBalance[accountId][nativeAssetId] = { amount: '0' };
332
+ }
333
+ // On error, emit a stub only when no valid metadata exists in state
334
+ // yet. Re-emitting existing metadata would overwrite richer entries
335
+ // (e.g. image/description added by AccountsAPI) with a simpler stub.
336
+ const existingNativeMeta = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getExistingAssetsMetadata).call(this)[nativeAssetId];
337
+ if (!__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_hasValidDecimals).call(this, existingNativeMeta)) {
338
+ const chainStatus = __classPrivateFieldGet(this, _RpcDataSource_chainStatuses, "f")[chainId];
339
+ if (chainStatus) {
340
+ assetsInfo[nativeAssetId] = {
341
+ type: 'native',
342
+ symbol: chainStatus.nativeCurrency,
343
+ name: chainStatus.nativeCurrency,
344
+ decimals: 18,
345
+ };
346
+ }
347
+ }
348
+ if (!failedChains.includes(chainId)) {
349
+ failedChains.push(chainId);
350
+ }
351
+ }
352
+ }
353
+ }
354
+ if (failedChains.length > 0) {
355
+ log('Fetch PARTIAL - some chains failed', {
356
+ successChains: chainsToFetch.filter((chain) => !failedChains.includes(chain)),
357
+ failedChains,
358
+ });
359
+ response.errors = {};
360
+ for (const chainId of failedChains) {
361
+ response.errors[chainId] = 'RPC fetch failed';
362
+ }
363
+ }
364
+ else {
365
+ log('Fetch SUCCESS', {
366
+ chains: chainsToFetch,
367
+ accountCount: Object.keys(assetsBalance).length,
368
+ });
369
+ }
370
+ response.assetsBalance = assetsBalance;
371
+ // Include metadata for native tokens if we have any
372
+ if (Object.keys(assetsInfo).length > 0) {
373
+ response.assetsInfo = assetsInfo;
374
+ }
375
+ response.updateMode = 'merge';
376
+ return response;
377
+ }
378
+ /**
379
+ * Run token detection for an account on a chain.
380
+ *
381
+ * @param chainId - The chain ID to detect tokens on.
382
+ * @param account - The account to detect tokens for.
383
+ * @returns Promise resolving to a DataResponse with detected assets.
384
+ */
385
+ async detectTokens(chainId, account) {
386
+ if (!__classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this) || !__classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this)) {
387
+ return {};
388
+ }
389
+ const hexChainId = caipChainIdToHex(chainId);
390
+ const { address, id: accountId } = account;
391
+ log('Running token detection', { chainId, accountId });
392
+ try {
393
+ const result = await __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").detectTokens(hexChainId, accountId, address, {
394
+ tokenDetectionEnabled: __classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this),
395
+ useExternalService: __classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this),
396
+ });
397
+ if (result.detectedAssets.length === 0) {
398
+ log('No new tokens detected');
399
+ return {};
400
+ }
401
+ log('Detected new tokens', {
402
+ count: result.detectedAssets.length,
403
+ chainId,
404
+ accountId,
405
+ });
406
+ // Convert detected assets to DataResponse format
407
+ const balances = {};
408
+ const assetsInfo = {};
409
+ // Build metadata from detected assets
410
+ for (const asset of result.detectedAssets) {
411
+ if (asset.symbol && asset.decimals !== undefined) {
412
+ assetsInfo[asset.assetId] = {
413
+ type: __classPrivateFieldGet(this, _RpcDataSource_getAssetType, "f").call(this, asset.assetId),
414
+ symbol: asset.symbol,
415
+ name: asset.name ?? asset.symbol,
416
+ decimals: asset.decimals,
417
+ image: asset.image,
418
+ };
419
+ }
420
+ }
421
+ // Add balances for detected tokens (converted to human-readable format)
422
+ for (const balance of result.detectedBalances) {
423
+ const detectedAsset = result.detectedAssets.find((asset) => asset.assetId === balance.assetId);
424
+ if (detectedAsset?.decimals === undefined) {
425
+ continue;
426
+ }
427
+ const humanReadableAmount = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_convertToHumanReadable).call(this, balance.balance, detectedAsset.decimals);
428
+ balances[balance.assetId] = {
429
+ amount: humanReadableAmount,
430
+ };
431
+ }
432
+ const response = {
433
+ detectedAssets: {
434
+ [accountId]: result.detectedAssets.map((asset) => asset.assetId),
435
+ },
436
+ assetsBalance: {
437
+ [accountId]: balances,
438
+ },
439
+ };
440
+ // Include metadata if we have any
441
+ if (Object.keys(assetsInfo).length > 0) {
442
+ response.assetsInfo = assetsInfo;
443
+ }
444
+ return response;
445
+ }
446
+ catch (error) {
447
+ log('Token detection failed', { chainId, accountId, error });
448
+ return {};
449
+ }
450
+ }
451
+ get assetsMiddleware() {
452
+ return async (context, next) => {
453
+ var _a, _b, _c;
454
+ const { request } = context;
455
+ const supportedChains = request.chainIds.filter((chainId) => __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").includes(chainId));
456
+ if (supportedChains.length === 0) {
457
+ return next(context);
458
+ }
459
+ let successfullyHandledChains = [];
460
+ log('Middleware fetching', {
461
+ chains: supportedChains,
462
+ accounts: request.accountsWithSupportedChains.map((a) => a.account.id),
463
+ });
464
+ const response = await this.fetch({
465
+ ...request,
466
+ chainIds: supportedChains,
467
+ });
468
+ if (response.assetsBalance) {
469
+ (_a = context.response).assetsBalance ?? (_a.assetsBalance = {});
470
+ for (const [accountId, accountBalances] of Object.entries(response.assetsBalance)) {
471
+ (_b = context.response.assetsBalance)[accountId] ?? (_b[accountId] = {});
472
+ context.response.assetsBalance[accountId] = {
473
+ ...context.response.assetsBalance[accountId],
474
+ ...accountBalances,
475
+ };
476
+ }
477
+ }
478
+ if (response.assetsInfo) {
479
+ (_c = context.response).assetsInfo ?? (_c.assetsInfo = {});
480
+ context.response.assetsInfo = {
481
+ ...context.response.assetsInfo,
482
+ ...response.assetsInfo,
483
+ };
484
+ }
485
+ const failedChains = new Set(Object.keys(response.errors ?? {}));
486
+ successfullyHandledChains = supportedChains.filter((chainId) => !failedChains.has(chainId));
487
+ if (successfullyHandledChains.length > 0) {
488
+ const remainingChains = request.chainIds.filter((chainId) => !successfullyHandledChains.includes(chainId));
489
+ return next({
490
+ ...context,
491
+ request: {
492
+ ...request,
493
+ chainIds: remainingChains,
494
+ },
495
+ });
496
+ }
497
+ return next(context);
498
+ };
499
+ }
500
+ /**
501
+ * Subscribe to updates for the given request.
502
+ * Starts polling through BalanceFetcher and TokenDetector.
503
+ *
504
+ * @param subscriptionRequest - The subscription request details.
505
+ */
506
+ async subscribe(subscriptionRequest) {
507
+ if (!__classPrivateFieldGet(this, _RpcDataSource_isOnboarded, "f").call(this)) {
508
+ log('Skipping subscribe - onboarding not complete');
509
+ return;
510
+ }
511
+ const { request, subscriptionId, isUpdate } = subscriptionRequest;
512
+ // Use request.chainIds when activeChains is not yet populated (e.g. before
513
+ // NetworkController state has been applied) so polling can start.
514
+ const chainsToSubscribe = __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").length > 0
515
+ ? request.chainIds.filter((chainId) => __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").includes(chainId))
516
+ : request.chainIds;
517
+ log('Subscribe requested', {
518
+ subscriptionId,
519
+ isUpdate,
520
+ accounts: request.accountsWithSupportedChains.map((a) => a.account.id),
521
+ chainsToSubscribe,
522
+ activeChainsFallback: __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").length === 0,
523
+ });
524
+ if (chainsToSubscribe.length === 0) {
525
+ log('No active chains to subscribe');
526
+ return;
527
+ }
528
+ // Handle subscription update - restart polling for new chains
529
+ if (isUpdate) {
530
+ const existing = __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").get(subscriptionId);
531
+ if (existing) {
532
+ log('Updating existing subscription - restarting polling', {
533
+ subscriptionId,
534
+ existingChains: existing.chains,
535
+ newChains: chainsToSubscribe,
536
+ });
537
+ // Don't return early - continue to unsubscribe and restart polling
538
+ }
539
+ }
540
+ // Clean up existing subscription (stops old polling)
541
+ await this.unsubscribe(subscriptionId);
542
+ // Start polling through BalanceFetcher and TokenDetector
543
+ const balancePollingTokens = [];
544
+ const detectionPollingTokens = [];
545
+ for (const { account, supportedChains, } of request.accountsWithSupportedChains) {
546
+ const chainsForAccount = chainsToSubscribe.filter((chain) => supportedChains.includes(chain));
547
+ if (chainsForAccount.length === 0) {
548
+ continue;
549
+ }
550
+ const { address, id: accountId } = account;
551
+ for (const chainId of chainsForAccount) {
552
+ const hexChainId = caipChainIdToHex(chainId);
553
+ // Start balance polling
554
+ const balanceInput = {
555
+ chainId: hexChainId,
556
+ accountId,
557
+ accountAddress: address,
558
+ ...(request.customAssetsOnly === true
559
+ ? { customAssetsOnly: true }
560
+ : {}),
561
+ };
562
+ const balanceToken = __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").startPolling(balanceInput);
563
+ balancePollingTokens.push(balanceToken);
564
+ // Token detection is only relevant for "regular" subscriptions —
565
+ // a customAssetsOnly subscription should never run detection.
566
+ if (request.customAssetsOnly !== true &&
567
+ __classPrivateFieldGet(this, _RpcDataSource_tokenDetectionEnabled, "f").call(this) &&
568
+ __classPrivateFieldGet(this, _RpcDataSource_useExternalService, "f").call(this)) {
569
+ const detectionInput = {
570
+ chainId: hexChainId,
571
+ accountId,
572
+ accountAddress: address,
573
+ };
574
+ const detectionToken = __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").startPolling(detectionInput);
575
+ detectionPollingTokens.push(detectionToken);
576
+ }
577
+ }
578
+ }
579
+ // Store subscription data
580
+ const accounts = request.accountsWithSupportedChains.map((entry) => entry.account);
581
+ __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").set(subscriptionId, {
582
+ balancePollingTokens,
583
+ detectionPollingTokens,
584
+ chains: chainsToSubscribe,
585
+ accounts,
586
+ onAssetsUpdate: subscriptionRequest.onAssetsUpdate,
587
+ });
588
+ log('Subscription SUCCESS', {
589
+ subscriptionId,
590
+ chains: chainsToSubscribe,
591
+ balancePollingCount: balancePollingTokens.length,
592
+ detectionPollingCount: detectionPollingTokens.length,
593
+ });
594
+ }
595
+ /**
596
+ * Unsubscribe from updates and stop polling.
597
+ *
598
+ * @param subscriptionId - The subscription ID to unsubscribe.
599
+ */
600
+ async unsubscribe(subscriptionId) {
601
+ const subscription = __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").get(subscriptionId);
602
+ if (subscription) {
603
+ // Stop balance polling
604
+ for (const token of subscription.balancePollingTokens) {
605
+ __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").stopPollingByPollingToken(token);
606
+ }
607
+ // Stop detection polling
608
+ for (const token of subscription.detectionPollingTokens) {
609
+ __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").stopPollingByPollingToken(token);
610
+ }
611
+ __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").delete(subscriptionId);
612
+ log('Unsubscribed and stopped polling', { subscriptionId });
613
+ }
614
+ }
615
+ /**
616
+ * Destroy the data source and clean up resources.
617
+ */
618
+ destroy() {
619
+ log('Destroying RpcDataSource');
620
+ __classPrivateFieldGet(this, _RpcDataSource_unsubscribeTransactionConfirmed, "f")?.call(this);
621
+ // Stop all polling
622
+ __classPrivateFieldGet(this, _RpcDataSource_balanceFetcher, "f").stopAllPolling();
623
+ __classPrivateFieldGet(this, _RpcDataSource_tokenDetector, "f").stopAllPolling();
624
+ // Clear subscriptions
625
+ __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").clear();
626
+ // Clear caches
627
+ __classPrivateFieldGet(this, _RpcDataSource_providerCache, "f").clear();
628
+ }
629
+ }
630
+ _RpcDataSource_messenger = new WeakMap(), _RpcDataSource_onActiveChainsUpdated = new WeakMap(), _RpcDataSource_getNativeAssetForChain = new WeakMap(), _RpcDataSource_timeout = new WeakMap(), _RpcDataSource_tokenDetectionEnabled = new WeakMap(), _RpcDataSource_useExternalService = new WeakMap(), _RpcDataSource_isOnboarded = new WeakMap(), _RpcDataSource_activeChains = new WeakMap(), _RpcDataSource_chainStatuses = new WeakMap(), _RpcDataSource_providerCache = new WeakMap(), _RpcDataSource_activeSubscriptions = new WeakMap(), _RpcDataSource_unsubscribeTransactionConfirmed = new WeakMap(), _RpcDataSource_multicallClient = new WeakMap(), _RpcDataSource_balanceFetcher = new WeakMap(), _RpcDataSource_tokenDetector = new WeakMap(), _RpcDataSource_getAssetType = new WeakMap(), _RpcDataSource_instances = new WeakSet(), _RpcDataSource_convertToHumanReadable = function _RpcDataSource_convertToHumanReadable(rawBalance, decimals) {
631
+ if (!Number.isFinite(decimals) || decimals < 0) {
632
+ log('Invalid decimals — defaulting balance to "0"', {
633
+ rawBalance,
634
+ decimals,
635
+ });
636
+ return '0';
637
+ }
638
+ const rawAmount = new BigNumberJS(rawBalance);
639
+ if (!rawAmount.isFinite()) {
640
+ log('Invalid raw balance — defaulting to "0"', { rawBalance, decimals });
641
+ return '0';
642
+ }
643
+ const divisor = new BigNumberJS(10).pow(decimals);
644
+ return rawAmount.dividedBy(divisor).toFixed();
645
+ }, _RpcDataSource_collectMetadataForBalances = function _RpcDataSource_collectMetadataForBalances(balances, chainId) {
646
+ const assetsInfo = {};
647
+ const existingMetadata = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getExistingAssetsMetadata).call(this);
648
+ const nativeAssetId = __classPrivateFieldGet(this, _RpcDataSource_getNativeAssetForChain, "f").call(this, chainId);
649
+ for (const balance of balances) {
650
+ const existingMeta = existingMetadata[balance.assetId];
651
+ const isNative = existingMeta?.type === 'native' ||
652
+ balance.assetId.toLowerCase() === nativeAssetId?.toLowerCase() ||
653
+ __classPrivateFieldGet(this, _RpcDataSource_getAssetType, "f").call(this, balance.assetId) === 'native';
654
+ if (isNative && !__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_hasValidDecimals).call(this, existingMeta)) {
655
+ // Only emit a stub when no valid metadata exists in state yet.
656
+ // Re-emitting existing metadata into the response would overwrite
657
+ // richer entries (e.g. image/description added by AccountsAPI) with
658
+ // a simpler stub on every balance poll cycle.
659
+ const chainStatus = __classPrivateFieldGet(this, _RpcDataSource_chainStatuses, "f")[chainId];
660
+ if (chainStatus) {
661
+ assetsInfo[balance.assetId] = {
662
+ type: 'native',
663
+ symbol: chainStatus.nativeCurrency,
664
+ name: chainStatus.nativeCurrency,
665
+ decimals: 18,
666
+ };
667
+ }
668
+ }
669
+ // For ERC-20 tokens and native tokens with existing valid metadata:
670
+ // do not re-emit — the existing state entry is already correct.
671
+ // Decimals for balance conversion are resolved via stateMetadata in
672
+ // the callers (pickValidDecimals(stateMetadata, pipelineMetadata)).
673
+ }
674
+ return assetsInfo;
675
+ }, _RpcDataSource_hasValidDecimals = function _RpcDataSource_hasValidDecimals(metadata) {
676
+ return Boolean(metadata && Number.isFinite(metadata.decimals) && metadata.decimals >= 0);
677
+ }, _RpcDataSource_pickValidDecimals = function _RpcDataSource_pickValidDecimals(...metadatas) {
678
+ for (const metadata of metadatas) {
679
+ if (__classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_hasValidDecimals).call(this, metadata)) {
680
+ return metadata.decimals;
681
+ }
682
+ }
683
+ return undefined;
684
+ }, _RpcDataSource_handleBalanceUpdate =
685
+ /**
686
+ * Handle balance update from BalanceFetcher.
687
+ *
688
+ * @param result - The balance fetch result.
689
+ */
690
+ async function _RpcDataSource_handleBalanceUpdate(result) {
691
+ const newBalances = {};
692
+ // Convert hex chain ID to CAIP-2 format
693
+ const chainIdDecimal = parseInt(result.chainId, 16);
694
+ const caipChainId = `eip155:${chainIdDecimal}`;
695
+ // Normalize asset IDs from BalanceFetcher (lowercase) to checksummed form
696
+ const normalizedBalances = result.balances.map((b) => ({
697
+ ...b,
698
+ assetId: normalizeAssetId(b.assetId),
699
+ }));
700
+ // Collect metadata for all balances
701
+ const assetsInfo = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_collectMetadataForBalances).call(this, normalizedBalances, caipChainId);
702
+ // Convert balances to human-readable format.
703
+ // Resolution: state metadata → pipeline metadata; skip if decimals unknown.
704
+ const existingMetadata = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getExistingAssetsMetadata).call(this);
705
+ for (const balance of normalizedBalances) {
706
+ const stateMetadata = existingMetadata[balance.assetId];
707
+ const pipelineMetadata = assetsInfo[balance.assetId];
708
+ const decimals = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_pickValidDecimals).call(this, stateMetadata, pipelineMetadata);
709
+ if (decimals === undefined) {
710
+ continue;
711
+ }
712
+ const humanReadableAmount = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_convertToHumanReadable).call(this, balance.balance, decimals);
713
+ newBalances[balance.assetId] = {
714
+ amount: humanReadableAmount,
715
+ };
716
+ }
717
+ // Only send new data to AssetsController - it handles merging atomically
718
+ // to avoid race conditions when concurrent updates occur for the same account
719
+ const response = {
720
+ assetsBalance: {
721
+ [result.accountId]: newBalances,
722
+ },
723
+ assetsInfo,
724
+ updateMode: 'merge',
725
+ };
726
+ const request = {
727
+ accountsWithSupportedChains: [],
728
+ chainIds: [caipChainId],
729
+ dataTypes: ['balance'],
730
+ };
731
+ log('Balance update response', {
732
+ accountId: result.accountId,
733
+ newBalanceCount: Object.keys(newBalances).length,
734
+ });
735
+ for (const subscription of __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").values()) {
736
+ subscription.onAssetsUpdate(response, request)?.catch((error) => {
737
+ log('Failed to update assets', { error });
738
+ });
739
+ }
740
+ }, _RpcDataSource_handleDetectionUpdate = function _RpcDataSource_handleDetectionUpdate(result) {
741
+ log('Detected new tokens', {
742
+ count: result.detectedAssets.length,
743
+ });
744
+ // Build new metadata from detected assets
745
+ const newMetadata = {};
746
+ if (result.detectedAssets.length > 0) {
747
+ for (const asset of result.detectedAssets) {
748
+ // Only include if we have metadata (symbol and decimals at minimum)
749
+ if (asset.symbol && asset.decimals !== undefined) {
750
+ newMetadata[asset.assetId] = {
751
+ type: __classPrivateFieldGet(this, _RpcDataSource_getAssetType, "f").call(this, asset.assetId),
752
+ symbol: asset.symbol,
753
+ name: asset.name ?? asset.symbol,
754
+ decimals: asset.decimals,
755
+ image: asset.image,
756
+ };
757
+ }
758
+ }
759
+ }
760
+ // Build new balances from detected tokens
761
+ const newBalances = {};
762
+ if (result.detectedBalances.length > 0) {
763
+ for (const balance of result.detectedBalances) {
764
+ // Get decimals from the detected asset metadata
765
+ const detectedAsset = result.detectedAssets.find((asset) => asset.assetId === balance.assetId);
766
+ if (detectedAsset?.decimals === undefined) {
767
+ continue;
768
+ }
769
+ const humanReadableAmount = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_convertToHumanReadable).call(this, balance.balance, detectedAsset.decimals);
770
+ newBalances[balance.assetId] = {
771
+ amount: humanReadableAmount,
772
+ };
773
+ }
774
+ }
775
+ // Only send new data to AssetsController - it handles merging atomically
776
+ // to avoid race conditions when concurrent updates occur for the same account
777
+ const response = {
778
+ detectedAssets: {
779
+ [result.accountId]: result.detectedAssets.map((asset) => asset.assetId),
780
+ },
781
+ assetsInfo: newMetadata,
782
+ assetsBalance: {
783
+ [result.accountId]: newBalances,
784
+ },
785
+ updateMode: 'merge',
786
+ };
787
+ const chainIdDecimal = parseInt(result.chainId, 16);
788
+ const caipChainId = `eip155:${chainIdDecimal}`;
789
+ const request = {
790
+ accountsWithSupportedChains: [],
791
+ chainIds: [caipChainId],
792
+ dataTypes: ['balance', 'metadata', 'price'],
793
+ };
794
+ for (const subscription of __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").values()) {
795
+ subscription.onAssetsUpdate(response, request)?.catch((error) => {
796
+ log('Failed to update detected assets', { error });
797
+ });
798
+ }
799
+ }, _RpcDataSource_subscribeToNetworkController = function _RpcDataSource_subscribeToNetworkController() {
800
+ __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").subscribe('NetworkController:stateChange', (networkState) => {
801
+ log('NetworkController state changed');
802
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_clearProviderCache).call(this);
803
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_updateFromNetworkState).call(this, networkState);
804
+ });
805
+ }, _RpcDataSource_subscribeToTransactionEvents = function _RpcDataSource_subscribeToTransactionEvents() {
806
+ const unsubConfirmed = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").subscribe('TransactionController:transactionConfirmed', __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_onTransactionConfirmed).bind(this));
807
+ __classPrivateFieldSet(this, _RpcDataSource_unsubscribeTransactionConfirmed, typeof unsubConfirmed === 'function' ? unsubConfirmed : undefined, "f");
808
+ }, _RpcDataSource_onTransactionConfirmed = function _RpcDataSource_onTransactionConfirmed(payload) {
809
+ const hexChainId = payload?.chainId;
810
+ if (!hexChainId) {
811
+ return;
812
+ }
813
+ const caipChainId = `eip155:${parseInt(hexChainId, 16)}`;
814
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_refreshBalanceForChains).call(this, [caipChainId], 'transactionConfirmed').catch((error) => {
815
+ log('Failed to refresh balance after transaction confirmed', { error });
816
+ });
817
+ }, _RpcDataSource_refreshBalanceForChains =
818
+ /**
819
+ * Fetch balances for the given chains across all active subscriptions and
820
+ * push updates to the controller.
821
+ *
822
+ * @param chainIds - CAIP-2 chain IDs to refresh.
823
+ * @param context - Why the refresh was triggered (for logging).
824
+ */
825
+ async function _RpcDataSource_refreshBalanceForChains(chainIds, context = 'polling') {
826
+ const chainIdsSet = new Set(chainIds);
827
+ const chainsToFetch = chainIds.filter((chainId) => __classPrivateFieldGet(this, _RpcDataSource_activeChains, "f").includes(chainId));
828
+ if (chainsToFetch.length === 0) {
829
+ return;
830
+ }
831
+ let appliedCount = 0;
832
+ for (const subscription of __classPrivateFieldGet(this, _RpcDataSource_activeSubscriptions, "f").values()) {
833
+ const subscriptionChains = subscription.chains.filter((chainId) => chainIdsSet.has(chainId));
834
+ if (subscriptionChains.length === 0) {
835
+ continue;
836
+ }
837
+ const request = {
838
+ accountsWithSupportedChains: subscription.accounts.map((account) => ({
839
+ account,
840
+ supportedChains: subscriptionChains,
841
+ })),
842
+ chainIds: subscriptionChains,
843
+ dataTypes: ['balance'],
844
+ };
845
+ try {
846
+ const response = await this.fetch(request);
847
+ const balanceCount = response.assetsBalance
848
+ ? Object.values(response.assetsBalance).reduce((sum, accountBalances) => sum + Object.keys(accountBalances).length, 0)
849
+ : 0;
850
+ if (balanceCount === 0) {
851
+ continue;
852
+ }
853
+ const responseWithMode = {
854
+ ...response,
855
+ updateMode: response.updateMode ?? 'merge',
856
+ };
857
+ await subscription.onAssetsUpdate(responseWithMode, request);
858
+ appliedCount += 1;
859
+ }
860
+ catch (error) {
861
+ log('Failed to fetch balance after transaction', {
862
+ context,
863
+ chains: subscriptionChains,
864
+ error,
865
+ });
866
+ }
867
+ }
868
+ if (appliedCount === 0 && context === 'transactionConfirmed') {
869
+ log('No RpcDataSource subscription covers chain after transaction', {
870
+ chainsToFetch,
871
+ });
872
+ }
873
+ }, _RpcDataSource_initializeFromNetworkController = function _RpcDataSource_initializeFromNetworkController() {
874
+ log('Initializing from NetworkController');
875
+ try {
876
+ const networkState = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('NetworkController:getState');
877
+ __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_updateFromNetworkState).call(this, networkState);
878
+ }
879
+ catch (error) {
880
+ log('Failed to initialize from NetworkController', error);
881
+ }
882
+ }, _RpcDataSource_updateFromNetworkState = function _RpcDataSource_updateFromNetworkState(networkState) {
883
+ const { networkConfigurationsByChainId, networksMetadata } = networkState;
884
+ const chainStatuses = {};
885
+ const activeChains = [];
886
+ for (const [hexChainId, config] of Object.entries(networkConfigurationsByChainId)) {
887
+ const decimalChainId = parseInt(hexChainId, 16);
888
+ const caip2ChainId = `eip155:${decimalChainId}`;
889
+ const defaultRpcEndpoint = config.rpcEndpoints[config.defaultRpcEndpointIndex];
890
+ if (!defaultRpcEndpoint) {
891
+ continue;
892
+ }
893
+ const { networkClientId } = defaultRpcEndpoint;
894
+ const metadata = networksMetadata[networkClientId];
895
+ const status = metadata?.status ?? 'unknown';
896
+ chainStatuses[caip2ChainId] = {
897
+ chainId: caip2ChainId,
898
+ status,
899
+ name: config.name,
900
+ nativeCurrency: config.nativeCurrency,
901
+ networkClientId,
902
+ };
903
+ if (status === 'available' || status === 'unknown') {
904
+ activeChains.push(caip2ChainId);
905
+ }
906
+ }
907
+ log('Network state updated', {
908
+ configuredChains: Object.keys(chainStatuses),
909
+ activeChains,
910
+ });
911
+ // Check if chains changed
912
+ const previousChains = [...__classPrivateFieldGet(this, _RpcDataSource_activeChains, "f")];
913
+ const previousSet = new Set(previousChains);
914
+ const hasChanges = previousChains.length !== activeChains.length ||
915
+ activeChains.some((chain) => !previousSet.has(chain));
916
+ // Update internal state and data source state before notifying, so that
917
+ // when the controller handles the callback and calls getActiveChainsSync(),
918
+ // it receives the updated chains (same order as AbstractDataSource.updateActiveChains).
919
+ __classPrivateFieldSet(this, _RpcDataSource_chainStatuses, chainStatuses, "f");
920
+ __classPrivateFieldSet(this, _RpcDataSource_activeChains, activeChains, "f");
921
+ this.state.activeChains = activeChains;
922
+ if (hasChanges) {
923
+ __classPrivateFieldGet(this, _RpcDataSource_onActiveChainsUpdated, "f").call(this, this.getName(), activeChains, previousChains);
924
+ }
925
+ }, _RpcDataSource_getProvider = function _RpcDataSource_getProvider(chainId) {
926
+ const cached = __classPrivateFieldGet(this, _RpcDataSource_providerCache, "f").get(chainId);
927
+ if (cached) {
928
+ return cached;
929
+ }
930
+ const chainStatus = __classPrivateFieldGet(this, _RpcDataSource_chainStatuses, "f")[chainId];
931
+ if (!chainStatus) {
932
+ return undefined;
933
+ }
934
+ try {
935
+ const networkClient = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('NetworkController:getNetworkClientById', chainStatus.networkClientId);
936
+ if (!networkClient?.provider) {
937
+ return undefined;
938
+ }
939
+ const web3Provider = new Web3Provider(networkClient.provider);
940
+ __classPrivateFieldGet(this, _RpcDataSource_providerCache, "f").set(chainId, web3Provider);
941
+ return web3Provider;
942
+ }
943
+ catch (error) {
944
+ log('Failed to get provider for chain', { chainId, error });
945
+ return undefined;
946
+ }
947
+ }, _RpcDataSource_getMulticallProvider = function _RpcDataSource_getMulticallProvider(hexChainId) {
948
+ const decimalChainId = parseInt(hexChainId, 16);
949
+ const caip2ChainId = `eip155:${decimalChainId}`;
950
+ const web3Provider = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getProvider).call(this, caip2ChainId);
951
+ if (!web3Provider) {
952
+ throw new Error(`No provider available for chain ${hexChainId}`);
953
+ }
954
+ return {
955
+ call: async (params) => {
956
+ return web3Provider.call({
957
+ to: params.to,
958
+ data: params.data,
959
+ });
960
+ },
961
+ getBalance: async (address) => {
962
+ const balance = await web3Provider.getBalance(address);
963
+ return balance;
964
+ },
965
+ };
966
+ }, _RpcDataSource_clearProviderCache = function _RpcDataSource_clearProviderCache() {
967
+ __classPrivateFieldGet(this, _RpcDataSource_providerCache, "f").clear();
968
+ }, _RpcDataSource_fetchDecimalsViaRpc =
969
+ /**
970
+ * Fetch the `decimals()` value from an ERC20 contract via RPC.
971
+ *
972
+ * @param chainId - CAIP-2 chain ID.
973
+ * @param tokenAddress - The token contract address.
974
+ * @returns The decimals value, or undefined if the call fails.
975
+ */
976
+ async function _RpcDataSource_fetchDecimalsViaRpc(chainId, tokenAddress) {
977
+ try {
978
+ const provider = __classPrivateFieldGet(this, _RpcDataSource_instances, "m", _RpcDataSource_getProvider).call(this, chainId);
979
+ if (!provider) {
980
+ return undefined;
981
+ }
982
+ // ERC20 decimals() selector: keccak256("decimals()") = 0x313ce567
983
+ const result = await provider.call({
984
+ to: tokenAddress,
985
+ data: '0x313ce567',
986
+ });
987
+ if (!result || result === '0x') {
988
+ return undefined;
989
+ }
990
+ const parsed = parseInt(result, 16);
991
+ if (Number.isNaN(parsed) || parsed < 0 || parsed > 255) {
992
+ return undefined;
993
+ }
994
+ return parsed;
995
+ }
996
+ catch {
997
+ return undefined;
998
+ }
999
+ }, _RpcDataSource_getExistingAssetsMetadata = function _RpcDataSource_getExistingAssetsMetadata() {
1000
+ try {
1001
+ const state = __classPrivateFieldGet(this, _RpcDataSource_messenger, "f").call('AssetsController:getState');
1002
+ return state.assetsInfo ?? {};
1003
+ }
1004
+ catch (error) {
1005
+ log('Failed to get existing assets metadata', { error });
1006
+ return {};
1007
+ }
1008
+ };
1009
+ export function createRpcDataSource(options) {
1010
+ return new RpcDataSource(options);
1011
+ }
1012
+ //# sourceMappingURL=RpcDataSource.mjs.map