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

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 +0 -5
  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 +2559 -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.js → AssetsController.mjs} +29 -28
  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} +1 -1
  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.js → AccountActivityDataSource.mjs} +11 -11
  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.js → AccountsApiDataSource.mjs} +8 -7
  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} +8 -7
  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.js → RpcDataSource.mjs} +11 -11
  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} +6 -6
  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.js → StakedBalanceDataSource.mjs} +7 -7
  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} +8 -7
  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} +5 -5
  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.js → TokensApiClient.mjs} +2 -2
  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.js → BalanceFetcher.mjs} +5 -5
  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} +6 -5
  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.js → TokenDetector.mjs} +4 -4
  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 -1
  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} +5 -5
  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} +4 -4
  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} +9 -2
  305. package/dist/middlewares/{ParallelMiddleware.js.map → ParallelMiddleware.mjs.map} +1 -1
  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} +4 -4
  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 +385 -0
  323. package/dist/migrations/healAssetsInfoMetadata.cjs.map +1 -0
  324. package/dist/migrations/{healAssetsInfoMetadata.d.ts → healAssetsInfoMetadata.d.cts} +4 -4
  325. package/dist/migrations/healAssetsInfoMetadata.d.cts.map +1 -0
  326. package/dist/migrations/healAssetsInfoMetadata.d.mts +106 -0
  327. package/dist/migrations/healAssetsInfoMetadata.d.mts.map +1 -0
  328. package/dist/migrations/{healAssetsInfoMetadata.js → healAssetsInfoMetadata.mjs} +5 -4
  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.js → dedupingBatchFetcher.mjs} +1 -1
  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} +8 -7
  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} +5 -5
  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 +18 -15
  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.map +0 -1
  447. package/dist/data-sources/AbstractDataSource.d.ts.map +0 -1
  448. package/dist/data-sources/AbstractDataSource.js.map +0 -1
  449. package/dist/data-sources/AccountActivityDataSource.d.ts.map +0 -1
  450. package/dist/data-sources/AccountActivityDataSource.js.map +0 -1
  451. package/dist/data-sources/AccountsApiDataSource.d.ts.map +0 -1
  452. package/dist/data-sources/AccountsApiDataSource.js.map +0 -1
  453. package/dist/data-sources/PriceDataSource.d.ts.map +0 -1
  454. package/dist/data-sources/PriceDataSource.js.map +0 -1
  455. package/dist/data-sources/RpcDataSource.d.ts.map +0 -1
  456. package/dist/data-sources/RpcDataSource.js.map +0 -1
  457. package/dist/data-sources/SnapDataSource.d.ts.map +0 -1
  458. package/dist/data-sources/SnapDataSource.js.map +0 -1
  459. package/dist/data-sources/StakedBalanceDataSource.d.ts.map +0 -1
  460. package/dist/data-sources/StakedBalanceDataSource.js.map +0 -1
  461. package/dist/data-sources/TokenDataSource.d.ts.map +0 -1
  462. package/dist/data-sources/TokenDataSource.js.map +0 -1
  463. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.d.ts.map +0 -1
  464. package/dist/data-sources/evm-rpc-services/clients/MulticallClient.js.map +0 -1
  465. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.d.ts.map +0 -1
  466. package/dist/data-sources/evm-rpc-services/clients/TokensApiClient.js.map +0 -1
  467. package/dist/data-sources/evm-rpc-services/clients/index.d.ts +0 -4
  468. package/dist/data-sources/evm-rpc-services/clients/index.d.ts.map +0 -1
  469. package/dist/data-sources/evm-rpc-services/clients/index.js +0 -3
  470. package/dist/data-sources/evm-rpc-services/clients/index.js.map +0 -1
  471. package/dist/data-sources/evm-rpc-services/index.d.ts.map +0 -1
  472. package/dist/data-sources/evm-rpc-services/index.js +0 -4
  473. package/dist/data-sources/evm-rpc-services/index.js.map +0 -1
  474. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.d.ts.map +0 -1
  475. package/dist/data-sources/evm-rpc-services/services/BalanceFetcher.js.map +0 -1
  476. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.d.ts.map +0 -1
  477. package/dist/data-sources/evm-rpc-services/services/StakedBalanceFetcher.js.map +0 -1
  478. package/dist/data-sources/evm-rpc-services/services/TokenDetector.d.ts.map +0 -1
  479. package/dist/data-sources/evm-rpc-services/services/TokenDetector.js.map +0 -1
  480. package/dist/data-sources/evm-rpc-services/services/index.d.ts.map +0 -1
  481. package/dist/data-sources/evm-rpc-services/services/index.js +0 -4
  482. package/dist/data-sources/evm-rpc-services/services/index.js.map +0 -1
  483. package/dist/data-sources/evm-rpc-services/types/assets.d.ts.map +0 -1
  484. package/dist/data-sources/evm-rpc-services/types/assets.js +0 -2
  485. package/dist/data-sources/evm-rpc-services/types/assets.js.map +0 -1
  486. package/dist/data-sources/evm-rpc-services/types/config.d.ts.map +0 -1
  487. package/dist/data-sources/evm-rpc-services/types/config.js +0 -2
  488. package/dist/data-sources/evm-rpc-services/types/config.js.map +0 -1
  489. package/dist/data-sources/evm-rpc-services/types/core.d.ts.map +0 -1
  490. package/dist/data-sources/evm-rpc-services/types/core.js +0 -2
  491. package/dist/data-sources/evm-rpc-services/types/core.js.map +0 -1
  492. package/dist/data-sources/evm-rpc-services/types/index.d.ts +0 -7
  493. package/dist/data-sources/evm-rpc-services/types/index.d.ts.map +0 -1
  494. package/dist/data-sources/evm-rpc-services/types/index.js +0 -2
  495. package/dist/data-sources/evm-rpc-services/types/index.js.map +0 -1
  496. package/dist/data-sources/evm-rpc-services/types/multicall.d.ts.map +0 -1
  497. package/dist/data-sources/evm-rpc-services/types/multicall.js +0 -2
  498. package/dist/data-sources/evm-rpc-services/types/multicall.js.map +0 -1
  499. package/dist/data-sources/evm-rpc-services/types/services.d.ts.map +0 -1
  500. package/dist/data-sources/evm-rpc-services/types/services.js +0 -2
  501. package/dist/data-sources/evm-rpc-services/types/services.js.map +0 -1
  502. package/dist/data-sources/evm-rpc-services/types/state.d.ts.map +0 -1
  503. package/dist/data-sources/evm-rpc-services/types/state.js +0 -2
  504. package/dist/data-sources/evm-rpc-services/types/state.js.map +0 -1
  505. package/dist/data-sources/evm-rpc-services/utils/assets.d.ts.map +0 -1
  506. package/dist/data-sources/evm-rpc-services/utils/assets.js.map +0 -1
  507. package/dist/data-sources/evm-rpc-services/utils/batch.d.ts.map +0 -1
  508. package/dist/data-sources/evm-rpc-services/utils/batch.js.map +0 -1
  509. package/dist/data-sources/evm-rpc-services/utils/index.d.ts +0 -4
  510. package/dist/data-sources/evm-rpc-services/utils/index.d.ts.map +0 -1
  511. package/dist/data-sources/evm-rpc-services/utils/index.js +0 -4
  512. package/dist/data-sources/evm-rpc-services/utils/index.js.map +0 -1
  513. package/dist/data-sources/evm-rpc-services/utils/parsing.d.ts.map +0 -1
  514. package/dist/data-sources/evm-rpc-services/utils/parsing.js.map +0 -1
  515. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.d.ts.map +0 -1
  516. package/dist/data-sources/evm-rpc-services/utils/staking-contracts.js.map +0 -1
  517. package/dist/data-sources/index.d.ts.map +0 -1
  518. package/dist/data-sources/index.js +0 -14
  519. package/dist/data-sources/index.js.map +0 -1
  520. package/dist/defaults.d.ts.map +0 -1
  521. package/dist/defaults.js.map +0 -1
  522. package/dist/errors.d.ts.map +0 -1
  523. package/dist/errors.js.map +0 -1
  524. package/dist/index.d.ts.map +0 -1
  525. package/dist/index.js.map +0 -1
  526. package/dist/logger.d.ts +0 -4
  527. package/dist/logger.d.ts.map +0 -1
  528. package/dist/logger.js +0 -4
  529. package/dist/logger.js.map +0 -1
  530. package/dist/middlewares/CustomAssetGraduationMiddleware.d.ts.map +0 -1
  531. package/dist/middlewares/CustomAssetGraduationMiddleware.js.map +0 -1
  532. package/dist/middlewares/DetectionMiddleware.d.ts.map +0 -1
  533. package/dist/middlewares/DetectionMiddleware.js.map +0 -1
  534. package/dist/middlewares/ParallelMiddleware.d.ts.map +0 -1
  535. package/dist/middlewares/RpcFallbackMiddleware.d.ts.map +0 -1
  536. package/dist/middlewares/RpcFallbackMiddleware.js.map +0 -1
  537. package/dist/middlewares/index.d.ts +0 -9
  538. package/dist/middlewares/index.d.ts.map +0 -1
  539. package/dist/middlewares/index.js +0 -5
  540. package/dist/middlewares/index.js.map +0 -1
  541. package/dist/migrations/healAssetsInfoMetadata.d.ts.map +0 -1
  542. package/dist/migrations/healAssetsInfoMetadata.js.map +0 -1
  543. package/dist/selectors/balance.d.ts.map +0 -1
  544. package/dist/selectors/balance.js.map +0 -1
  545. package/dist/types.d.ts.map +0 -1
  546. package/dist/types.js.map +0 -1
  547. package/dist/utils/constants.d.ts +0 -2
  548. package/dist/utils/constants.d.ts.map +0 -1
  549. package/dist/utils/constants.js.map +0 -1
  550. package/dist/utils/customAssetsRpcSupplement.d.ts.map +0 -1
  551. package/dist/utils/customAssetsRpcSupplement.js.map +0 -1
  552. package/dist/utils/dedupingBatchFetcher.d.ts.map +0 -1
  553. package/dist/utils/dedupingBatchFetcher.js.map +0 -1
  554. package/dist/utils/fetchWithTimeout.d.ts.map +0 -1
  555. package/dist/utils/fetchWithTimeout.js.map +0 -1
  556. package/dist/utils/formatExchangeRatesForBridge.d.ts.map +0 -1
  557. package/dist/utils/formatExchangeRatesForBridge.js.map +0 -1
  558. package/dist/utils/formatStateForTransactionPay.d.ts.map +0 -1
  559. package/dist/utils/formatStateForTransactionPay.js.map +0 -1
  560. package/dist/utils/index.d.ts +0 -9
  561. package/dist/utils/index.d.ts.map +0 -1
  562. package/dist/utils/index.js +0 -7
  563. package/dist/utils/index.js.map +0 -1
  564. package/dist/utils/native-assets.d.ts.map +0 -1
  565. package/dist/utils/native-assets.js.map +0 -1
  566. package/dist/utils/normalizeAmountString.d.ts.map +0 -1
  567. package/dist/utils/normalizeAmountString.js.map +0 -1
  568. package/dist/utils/normalizeAssetId.d.ts.map +0 -1
  569. package/dist/utils/normalizeAssetId.js.map +0 -1
  570. package/dist/utils/snaps-assets-migration.d.ts.map +0 -1
  571. package/dist/utils/snaps-assets-migration.js.map +0 -1
  572. package/dist/utils/trace.d.ts.map +0 -1
  573. package/dist/utils/trace.js.map +0 -1
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldSupportChain = exports.getMigrationStages = exports.isMigrationStageActive = exports.parseSnapsAssetsMigrationStage = exports.isSnapsAssetsMigrationNamespace = exports.getSnapsAssetsMigrationNamespace = exports.SNAPS_ASSETS_MIGRATION_FLAG_KEYS = exports.SNAPS_ASSETS_MIGRATION_NAMESPACES = exports.SnapsAssetsMigrationStage = void 0;
4
+ const utils_1 = require("@metamask/utils");
5
+ /**
6
+ * Per-network rollout stage for the Snaps → AssetsController assets migration.
7
+ *
8
+ * The stage is resolved per CAIP-2 chain id, so each migration network (Solana,
9
+ * Stellar, Tron) advances and rolls back independently. A network with no flag
10
+ * (or an unknown/malformed value) resolves to {@link Off}.
11
+ */
12
+ var SnapsAssetsMigrationStage;
13
+ (function (SnapsAssetsMigrationStage) {
14
+ /**
15
+ * Status quo — the Snap uses its own AssetsService and the AssetsController
16
+ * does NOT ingest for the network.
17
+ */
18
+ SnapsAssetsMigrationStage[SnapsAssetsMigrationStage["Off"] = 0] = "Off";
19
+ /**
20
+ * The AssetsController ingests for the network (Account Activity WebSocket +
21
+ * AccountsAPI) and reads route through it, falling back to the Snap's
22
+ * AssetsService when the controller has no value.
23
+ */
24
+ SnapsAssetsMigrationStage[SnapsAssetsMigrationStage["ReadAssetsControllerWithFallback"] = 1] = "ReadAssetsControllerWithFallback";
25
+ /**
26
+ * Reads come from the AssetsController only (no fallback), but the Snap still
27
+ * tracks/persists in the background so rollback stays safe.
28
+ */
29
+ SnapsAssetsMigrationStage[SnapsAssetsMigrationStage["ReadAssetsControllerWithoutFallback"] = 2] = "ReadAssetsControllerWithoutFallback";
30
+ /**
31
+ * The Snap stops tracking/persisting; the AssetsController is the only source.
32
+ */
33
+ SnapsAssetsMigrationStage[SnapsAssetsMigrationStage["ReadAssetsControllerOnly"] = 3] = "ReadAssetsControllerOnly";
34
+ })(SnapsAssetsMigrationStage || (exports.SnapsAssetsMigrationStage = SnapsAssetsMigrationStage = {}));
35
+ /**
36
+ * CAIP-2 namespaces covered by the Snaps → AssetsController assets migration.
37
+ * Only chains in these namespaces are stage-gated; every other namespace
38
+ * (e.g. `eip155`) keeps its existing, ungated ingestion behavior.
39
+ */
40
+ exports.SNAPS_ASSETS_MIGRATION_NAMESPACES = [
41
+ 'solana',
42
+ 'stellar',
43
+ 'tron',
44
+ ];
45
+ /**
46
+ * Per-network remote feature flag keys (LaunchDarkly) that drive the migration.
47
+ * Each flag's resolved value carries the {@link SnapsAssetsMigrationStage} for
48
+ * that network — see {@link parseSnapsAssetsMigrationStage}.
49
+ */
50
+ exports.SNAPS_ASSETS_MIGRATION_FLAG_KEYS = {
51
+ solana: 'networkAssetsSnapsMigrationSolana',
52
+ stellar: 'networkAssetsSnapsMigrationStellar',
53
+ tron: 'networkAssetsSnapsMigrationTron',
54
+ };
55
+ /**
56
+ * Resolve the CAIP-2 namespace of a chain when it belongs to a migration
57
+ * network (Solana, Stellar, Tron).
58
+ *
59
+ * @param chainId - The CAIP-2 chain id.
60
+ * @returns The migration namespace, or `undefined` for any other chain.
61
+ */
62
+ function getSnapsAssetsMigrationNamespace(chainId) {
63
+ try {
64
+ const { namespace } = (0, utils_1.parseCaipChainId)(chainId);
65
+ return exports.SNAPS_ASSETS_MIGRATION_NAMESPACES.includes(namespace)
66
+ ? namespace
67
+ : undefined;
68
+ }
69
+ catch {
70
+ return undefined;
71
+ }
72
+ }
73
+ exports.getSnapsAssetsMigrationNamespace = getSnapsAssetsMigrationNamespace;
74
+ /**
75
+ * Whether a CAIP-2 chain id belongs to a network covered by the assets
76
+ * migration (Solana, Stellar, Tron).
77
+ *
78
+ * @param chainId - The CAIP-2 chain id to check.
79
+ * @returns True when the chain's namespace is a migration namespace.
80
+ */
81
+ function isSnapsAssetsMigrationNamespace(chainId) {
82
+ return getSnapsAssetsMigrationNamespace(chainId) !== undefined;
83
+ }
84
+ exports.isSnapsAssetsMigrationNamespace = isSnapsAssetsMigrationNamespace;
85
+ /**
86
+ * Coerce a resolved remote feature flag value into a {@link SnapsAssetsMigrationStage}.
87
+ *
88
+ * `RemoteFeatureFlagController` resolves a threshold-scoped flag to a
89
+ * `{ name, value }` variant, so the migration payload
90
+ * `{ featureVersion, minimumSnapVersion, stage }` (and thus `stage`) lives under
91
+ * `value` — the same nesting the sibling `assetsAccountsApiV6` flag uses. The
92
+ * top-level object is used as a fallback so a plain, unscoped `{ stage }`
93
+ * variation still resolves. Anything missing, malformed, or carrying an unknown
94
+ * `stage` resolves to {@link SnapsAssetsMigrationStage.Off}.
95
+ *
96
+ * @param flagValue - The resolved remote feature flag value for a network.
97
+ * @returns The migration stage.
98
+ */
99
+ function parseSnapsAssetsMigrationStage(flagValue) {
100
+ if (typeof flagValue !== 'object' ||
101
+ flagValue === null ||
102
+ Array.isArray(flagValue)) {
103
+ return SnapsAssetsMigrationStage.Off;
104
+ }
105
+ const { value } = flagValue;
106
+ const payload = typeof value === 'object' && value !== null && !Array.isArray(value)
107
+ ? value
108
+ : flagValue;
109
+ const { stage } = payload;
110
+ switch (stage) {
111
+ case SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback:
112
+ case SnapsAssetsMigrationStage.ReadAssetsControllerWithoutFallback:
113
+ case SnapsAssetsMigrationStage.ReadAssetsControllerOnly:
114
+ return stage;
115
+ default:
116
+ return SnapsAssetsMigrationStage.Off;
117
+ }
118
+ }
119
+ exports.parseSnapsAssetsMigrationStage = parseSnapsAssetsMigrationStage;
120
+ /**
121
+ * Whether a network's migration stage is active, i.e. the AssetsController
122
+ * (rather than the Snap) is the source of assets for the network.
123
+ *
124
+ * A stage is active from {@link SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback}
125
+ * onward and inactive at {@link SnapsAssetsMigrationStage.Off}.
126
+ *
127
+ * @param stage - The resolved per-network migration stage.
128
+ * @returns True when the migration is active for the network.
129
+ */
130
+ function isMigrationStageActive(stage) {
131
+ return stage >= SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback;
132
+ }
133
+ exports.isMigrationStageActive = isMigrationStageActive;
134
+ /**
135
+ * Resolve the Snaps → AssetsController migration stage for each migration
136
+ * network (Solana, Stellar, Tron) from the remote feature flags. The order
137
+ * matches {@link SNAPS_ASSETS_MIGRATION_NAMESPACES}, so the result can be joined
138
+ * into a stable primitive signature for change detection.
139
+ *
140
+ * @param remoteFeatureFlags - The remote feature flags state to resolve stages from.
141
+ * @returns An array of each migration namespace's resolved stage.
142
+ */
143
+ function getMigrationStages(remoteFeatureFlags) {
144
+ return exports.SNAPS_ASSETS_MIGRATION_NAMESPACES.map((namespace) => parseSnapsAssetsMigrationStage(remoteFeatureFlags[exports.SNAPS_ASSETS_MIGRATION_FLAG_KEYS[namespace]]));
145
+ }
146
+ exports.getMigrationStages = getMigrationStages;
147
+ /**
148
+ * Whether a supported network should be surfaced as an active chain, gated by
149
+ * the Snaps → AssetsController migration feature flags.
150
+ *
151
+ * Non-migration namespaces (e.g. `eip155`) are always surfaced. Migration
152
+ * networks (Solana, Stellar, Tron) are only surfaced once their per-network
153
+ * stage reaches {@link SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback};
154
+ * they are excluded when the stage is `Off` (also the fail-safe when the flag is
155
+ * missing or the flags are unavailable).
156
+ *
157
+ * @param chainId - The CAIP-2 chain id to check.
158
+ * @param remoteFeatureFlags - The remote feature flags state, or `undefined` when unavailable.
159
+ * @returns `true` when the chain should be surfaced as an active chain.
160
+ */
161
+ function shouldSupportChain(chainId, remoteFeatureFlags) {
162
+ const namespace = getSnapsAssetsMigrationNamespace(chainId);
163
+ // Non-migration namespaces (e.g. `eip155`) are never gated.
164
+ if (!namespace) {
165
+ return true;
166
+ }
167
+ const stage = parseSnapsAssetsMigrationStage(remoteFeatureFlags?.[exports.SNAPS_ASSETS_MIGRATION_FLAG_KEYS[namespace]]);
168
+ return isMigrationStageActive(stage);
169
+ }
170
+ exports.shouldSupportChain = shouldSupportChain;
171
+ //# sourceMappingURL=snaps-assets-migration.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snaps-assets-migration.cjs","sourceRoot":"","sources":["../../src/utils/snaps-assets-migration.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FeatureFlags } from '@metamask/remote-feature-flag-controller';\nimport type { Json } from '@metamask/utils';\nimport { parseCaipChainId } from '@metamask/utils';\n\nimport type { ChainId } from '../types.js';\n\n/**\n * Per-network rollout stage for the Snaps → AssetsController assets migration.\n *\n * The stage is resolved per CAIP-2 chain id, so each migration network (Solana,\n * Stellar, Tron) advances and rolls back independently. A network with no flag\n * (or an unknown/malformed value) resolves to {@link Off}.\n */\nexport enum SnapsAssetsMigrationStage {\n /**\n * Status quo — the Snap uses its own AssetsService and the AssetsController\n * does NOT ingest for the network.\n */\n Off = 0,\n /**\n * The AssetsController ingests for the network (Account Activity WebSocket +\n * AccountsAPI) and reads route through it, falling back to the Snap's\n * AssetsService when the controller has no value.\n */\n ReadAssetsControllerWithFallback = 1,\n /**\n * Reads come from the AssetsController only (no fallback), but the Snap still\n * tracks/persists in the background so rollback stays safe.\n */\n ReadAssetsControllerWithoutFallback = 2,\n /**\n * The Snap stops tracking/persisting; the AssetsController is the only source.\n */\n ReadAssetsControllerOnly = 3,\n}\n\n/**\n * CAIP-2 namespaces covered by the Snaps → AssetsController assets migration.\n * Only chains in these namespaces are stage-gated; every other namespace\n * (e.g. `eip155`) keeps its existing, ungated ingestion behavior.\n */\nexport const SNAPS_ASSETS_MIGRATION_NAMESPACES = [\n 'solana',\n 'stellar',\n 'tron',\n] as const;\n\nexport type SnapsAssetsMigrationNamespace =\n (typeof SNAPS_ASSETS_MIGRATION_NAMESPACES)[number];\n\n/**\n * Per-network remote feature flag keys (LaunchDarkly) that drive the migration.\n * Each flag's resolved value carries the {@link SnapsAssetsMigrationStage} for\n * that network — see {@link parseSnapsAssetsMigrationStage}.\n */\nexport const SNAPS_ASSETS_MIGRATION_FLAG_KEYS: Record<\n SnapsAssetsMigrationNamespace,\n string\n> = {\n solana: 'networkAssetsSnapsMigrationSolana',\n stellar: 'networkAssetsSnapsMigrationStellar',\n tron: 'networkAssetsSnapsMigrationTron',\n};\n\n/**\n * Resolve the CAIP-2 namespace of a chain when it belongs to a migration\n * network (Solana, Stellar, Tron).\n *\n * @param chainId - The CAIP-2 chain id.\n * @returns The migration namespace, or `undefined` for any other chain.\n */\nexport function getSnapsAssetsMigrationNamespace(\n chainId: ChainId,\n): SnapsAssetsMigrationNamespace | undefined {\n try {\n const { namespace } = parseCaipChainId(chainId);\n return (SNAPS_ASSETS_MIGRATION_NAMESPACES as readonly string[]).includes(\n namespace,\n )\n ? (namespace as SnapsAssetsMigrationNamespace)\n : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Whether a CAIP-2 chain id belongs to a network covered by the assets\n * migration (Solana, Stellar, Tron).\n *\n * @param chainId - The CAIP-2 chain id to check.\n * @returns True when the chain's namespace is a migration namespace.\n */\nexport function isSnapsAssetsMigrationNamespace(chainId: ChainId): boolean {\n return getSnapsAssetsMigrationNamespace(chainId) !== undefined;\n}\n\n/**\n * Coerce a resolved remote feature flag value into a {@link SnapsAssetsMigrationStage}.\n *\n * `RemoteFeatureFlagController` resolves a threshold-scoped flag to a\n * `{ name, value }` variant, so the migration payload\n * `{ featureVersion, minimumSnapVersion, stage }` (and thus `stage`) lives under\n * `value` — the same nesting the sibling `assetsAccountsApiV6` flag uses. The\n * top-level object is used as a fallback so a plain, unscoped `{ stage }`\n * variation still resolves. Anything missing, malformed, or carrying an unknown\n * `stage` resolves to {@link SnapsAssetsMigrationStage.Off}.\n *\n * @param flagValue - The resolved remote feature flag value for a network.\n * @returns The migration stage.\n */\nexport function parseSnapsAssetsMigrationStage(\n flagValue: Json | undefined,\n): SnapsAssetsMigrationStage {\n if (\n typeof flagValue !== 'object' ||\n flagValue === null ||\n Array.isArray(flagValue)\n ) {\n return SnapsAssetsMigrationStage.Off;\n }\n\n const { value } = flagValue as { value?: unknown };\n const payload =\n typeof value === 'object' && value !== null && !Array.isArray(value)\n ? value\n : flagValue;\n\n const { stage } = payload as { stage?: unknown };\n switch (stage) {\n case SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback:\n case SnapsAssetsMigrationStage.ReadAssetsControllerWithoutFallback:\n case SnapsAssetsMigrationStage.ReadAssetsControllerOnly:\n return stage;\n default:\n return SnapsAssetsMigrationStage.Off;\n }\n}\n\n/**\n * Whether a network's migration stage is active, i.e. the AssetsController\n * (rather than the Snap) is the source of assets for the network.\n *\n * A stage is active from {@link SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback}\n * onward and inactive at {@link SnapsAssetsMigrationStage.Off}.\n *\n * @param stage - The resolved per-network migration stage.\n * @returns True when the migration is active for the network.\n */\nexport function isMigrationStageActive(\n stage: SnapsAssetsMigrationStage,\n): boolean {\n return stage >= SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback;\n}\n\n/**\n * Resolve the Snaps → AssetsController migration stage for each migration\n * network (Solana, Stellar, Tron) from the remote feature flags. The order\n * matches {@link SNAPS_ASSETS_MIGRATION_NAMESPACES}, so the result can be joined\n * into a stable primitive signature for change detection.\n *\n * @param remoteFeatureFlags - The remote feature flags state to resolve stages from.\n * @returns An array of each migration namespace's resolved stage.\n */\nexport function getMigrationStages(\n remoteFeatureFlags: FeatureFlags,\n): SnapsAssetsMigrationStage[] {\n return SNAPS_ASSETS_MIGRATION_NAMESPACES.map((namespace) =>\n parseSnapsAssetsMigrationStage(\n remoteFeatureFlags[SNAPS_ASSETS_MIGRATION_FLAG_KEYS[namespace]],\n ),\n );\n}\n\n/**\n * Whether a supported network should be surfaced as an active chain, gated by\n * the Snaps → AssetsController migration feature flags.\n *\n * Non-migration namespaces (e.g. `eip155`) are always surfaced. Migration\n * networks (Solana, Stellar, Tron) are only surfaced once their per-network\n * stage reaches {@link SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback};\n * they are excluded when the stage is `Off` (also the fail-safe when the flag is\n * missing or the flags are unavailable).\n *\n * @param chainId - The CAIP-2 chain id to check.\n * @param remoteFeatureFlags - The remote feature flags state, or `undefined` when unavailable.\n * @returns `true` when the chain should be surfaced as an active chain.\n */\nexport function shouldSupportChain(\n chainId: ChainId,\n remoteFeatureFlags: FeatureFlags | undefined,\n): boolean {\n const namespace = getSnapsAssetsMigrationNamespace(chainId);\n // Non-migration namespaces (e.g. `eip155`) are never gated.\n if (!namespace) {\n return true;\n }\n\n const stage = parseSnapsAssetsMigrationStage(\n remoteFeatureFlags?.[SNAPS_ASSETS_MIGRATION_FLAG_KEYS[namespace]],\n );\n return isMigrationStageActive(stage);\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { FeatureFlags } from '@metamask/remote-feature-flag-controller';
2
- import type { Json } from '@metamask/utils';
3
- import type { ChainId } from '../types.js';
1
+ import type { FeatureFlags } from "@metamask/remote-feature-flag-controller";
2
+ import type { Json } from "@metamask/utils";
3
+ import type { ChainId } from "../types.cjs";
4
4
  /**
5
5
  * Per-network rollout stage for the Snaps → AssetsController assets migration.
6
6
  *
@@ -35,7 +35,7 @@ export declare enum SnapsAssetsMigrationStage {
35
35
  * Only chains in these namespaces are stage-gated; every other namespace
36
36
  * (e.g. `eip155`) keeps its existing, ungated ingestion behavior.
37
37
  */
38
- export declare const SNAPS_ASSETS_MIGRATION_NAMESPACES: readonly ['solana', 'stellar', 'tron'];
38
+ export declare const SNAPS_ASSETS_MIGRATION_NAMESPACES: readonly ["solana", "stellar", "tron"];
39
39
  export type SnapsAssetsMigrationNamespace = (typeof SNAPS_ASSETS_MIGRATION_NAMESPACES)[number];
40
40
  /**
41
41
  * Per-network remote feature flag keys (LaunchDarkly) that drive the migration.
@@ -110,4 +110,4 @@ export declare function getMigrationStages(remoteFeatureFlags: FeatureFlags): Sn
110
110
  * @returns `true` when the chain should be surfaced as an active chain.
111
111
  */
112
112
  export declare function shouldSupportChain(chainId: ChainId, remoteFeatureFlags: FeatureFlags | undefined): boolean;
113
- //# sourceMappingURL=snaps-assets-migration.d.ts.map
113
+ //# sourceMappingURL=snaps-assets-migration.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snaps-assets-migration.d.cts","sourceRoot":"","sources":["../../src/utils/snaps-assets-migration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iDAAiD;AAC7E,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAG5C,OAAO,KAAK,EAAE,OAAO,EAAE,qBAAoB;AAE3C;;;;;;GAMG;AACH,oBAAY,yBAAyB;IACnC;;;OAGG;IACH,GAAG,IAAI;IACP;;;;OAIG;IACH,gCAAgC,IAAI;IACpC;;;OAGG;IACH,mCAAmC,IAAI;IACvC;;OAEG;IACH,wBAAwB,IAAI;CAC7B;AAED;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,wCAIpC,CAAC;AAEX,MAAM,MAAM,6BAA6B,GACvC,CAAC,OAAO,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,EAAE,MAAM,CACnD,6BAA6B,EAC7B,MAAM,CAKP,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,GACf,6BAA6B,GAAG,SAAS,CAW3C;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEzE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,IAAI,GAAG,SAAS,GAC1B,yBAAyB,CAwB3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAET;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,kBAAkB,EAAE,YAAY,GAC/B,yBAAyB,EAAE,CAM7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,YAAY,GAAG,SAAS,GAC3C,OAAO,CAWT"}
@@ -0,0 +1,113 @@
1
+ import type { FeatureFlags } from "@metamask/remote-feature-flag-controller";
2
+ import type { Json } from "@metamask/utils";
3
+ import type { ChainId } from "../types.mjs";
4
+ /**
5
+ * Per-network rollout stage for the Snaps → AssetsController assets migration.
6
+ *
7
+ * The stage is resolved per CAIP-2 chain id, so each migration network (Solana,
8
+ * Stellar, Tron) advances and rolls back independently. A network with no flag
9
+ * (or an unknown/malformed value) resolves to {@link Off}.
10
+ */
11
+ export declare enum SnapsAssetsMigrationStage {
12
+ /**
13
+ * Status quo — the Snap uses its own AssetsService and the AssetsController
14
+ * does NOT ingest for the network.
15
+ */
16
+ Off = 0,
17
+ /**
18
+ * The AssetsController ingests for the network (Account Activity WebSocket +
19
+ * AccountsAPI) and reads route through it, falling back to the Snap's
20
+ * AssetsService when the controller has no value.
21
+ */
22
+ ReadAssetsControllerWithFallback = 1,
23
+ /**
24
+ * Reads come from the AssetsController only (no fallback), but the Snap still
25
+ * tracks/persists in the background so rollback stays safe.
26
+ */
27
+ ReadAssetsControllerWithoutFallback = 2,
28
+ /**
29
+ * The Snap stops tracking/persisting; the AssetsController is the only source.
30
+ */
31
+ ReadAssetsControllerOnly = 3
32
+ }
33
+ /**
34
+ * CAIP-2 namespaces covered by the Snaps → AssetsController assets migration.
35
+ * Only chains in these namespaces are stage-gated; every other namespace
36
+ * (e.g. `eip155`) keeps its existing, ungated ingestion behavior.
37
+ */
38
+ export declare const SNAPS_ASSETS_MIGRATION_NAMESPACES: readonly ["solana", "stellar", "tron"];
39
+ export type SnapsAssetsMigrationNamespace = (typeof SNAPS_ASSETS_MIGRATION_NAMESPACES)[number];
40
+ /**
41
+ * Per-network remote feature flag keys (LaunchDarkly) that drive the migration.
42
+ * Each flag's resolved value carries the {@link SnapsAssetsMigrationStage} for
43
+ * that network — see {@link parseSnapsAssetsMigrationStage}.
44
+ */
45
+ export declare const SNAPS_ASSETS_MIGRATION_FLAG_KEYS: Record<SnapsAssetsMigrationNamespace, string>;
46
+ /**
47
+ * Resolve the CAIP-2 namespace of a chain when it belongs to a migration
48
+ * network (Solana, Stellar, Tron).
49
+ *
50
+ * @param chainId - The CAIP-2 chain id.
51
+ * @returns The migration namespace, or `undefined` for any other chain.
52
+ */
53
+ export declare function getSnapsAssetsMigrationNamespace(chainId: ChainId): SnapsAssetsMigrationNamespace | undefined;
54
+ /**
55
+ * Whether a CAIP-2 chain id belongs to a network covered by the assets
56
+ * migration (Solana, Stellar, Tron).
57
+ *
58
+ * @param chainId - The CAIP-2 chain id to check.
59
+ * @returns True when the chain's namespace is a migration namespace.
60
+ */
61
+ export declare function isSnapsAssetsMigrationNamespace(chainId: ChainId): boolean;
62
+ /**
63
+ * Coerce a resolved remote feature flag value into a {@link SnapsAssetsMigrationStage}.
64
+ *
65
+ * `RemoteFeatureFlagController` resolves a threshold-scoped flag to a
66
+ * `{ name, value }` variant, so the migration payload
67
+ * `{ featureVersion, minimumSnapVersion, stage }` (and thus `stage`) lives under
68
+ * `value` — the same nesting the sibling `assetsAccountsApiV6` flag uses. The
69
+ * top-level object is used as a fallback so a plain, unscoped `{ stage }`
70
+ * variation still resolves. Anything missing, malformed, or carrying an unknown
71
+ * `stage` resolves to {@link SnapsAssetsMigrationStage.Off}.
72
+ *
73
+ * @param flagValue - The resolved remote feature flag value for a network.
74
+ * @returns The migration stage.
75
+ */
76
+ export declare function parseSnapsAssetsMigrationStage(flagValue: Json | undefined): SnapsAssetsMigrationStage;
77
+ /**
78
+ * Whether a network's migration stage is active, i.e. the AssetsController
79
+ * (rather than the Snap) is the source of assets for the network.
80
+ *
81
+ * A stage is active from {@link SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback}
82
+ * onward and inactive at {@link SnapsAssetsMigrationStage.Off}.
83
+ *
84
+ * @param stage - The resolved per-network migration stage.
85
+ * @returns True when the migration is active for the network.
86
+ */
87
+ export declare function isMigrationStageActive(stage: SnapsAssetsMigrationStage): boolean;
88
+ /**
89
+ * Resolve the Snaps → AssetsController migration stage for each migration
90
+ * network (Solana, Stellar, Tron) from the remote feature flags. The order
91
+ * matches {@link SNAPS_ASSETS_MIGRATION_NAMESPACES}, so the result can be joined
92
+ * into a stable primitive signature for change detection.
93
+ *
94
+ * @param remoteFeatureFlags - The remote feature flags state to resolve stages from.
95
+ * @returns An array of each migration namespace's resolved stage.
96
+ */
97
+ export declare function getMigrationStages(remoteFeatureFlags: FeatureFlags): SnapsAssetsMigrationStage[];
98
+ /**
99
+ * Whether a supported network should be surfaced as an active chain, gated by
100
+ * the Snaps → AssetsController migration feature flags.
101
+ *
102
+ * Non-migration namespaces (e.g. `eip155`) are always surfaced. Migration
103
+ * networks (Solana, Stellar, Tron) are only surfaced once their per-network
104
+ * stage reaches {@link SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback};
105
+ * they are excluded when the stage is `Off` (also the fail-safe when the flag is
106
+ * missing or the flags are unavailable).
107
+ *
108
+ * @param chainId - The CAIP-2 chain id to check.
109
+ * @param remoteFeatureFlags - The remote feature flags state, or `undefined` when unavailable.
110
+ * @returns `true` when the chain should be surfaced as an active chain.
111
+ */
112
+ export declare function shouldSupportChain(chainId: ChainId, remoteFeatureFlags: FeatureFlags | undefined): boolean;
113
+ //# sourceMappingURL=snaps-assets-migration.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snaps-assets-migration.d.mts","sourceRoot":"","sources":["../../src/utils/snaps-assets-migration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iDAAiD;AAC7E,OAAO,KAAK,EAAE,IAAI,EAAE,wBAAwB;AAG5C,OAAO,KAAK,EAAE,OAAO,EAAE,qBAAoB;AAE3C;;;;;;GAMG;AACH,oBAAY,yBAAyB;IACnC;;;OAGG;IACH,GAAG,IAAI;IACP;;;;OAIG;IACH,gCAAgC,IAAI;IACpC;;;OAGG;IACH,mCAAmC,IAAI;IACvC;;OAEG;IACH,wBAAwB,IAAI;CAC7B;AAED;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,wCAIpC,CAAC;AAEX,MAAM,MAAM,6BAA6B,GACvC,CAAC,OAAO,iCAAiC,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,EAAE,MAAM,CACnD,6BAA6B,EAC7B,MAAM,CAKP,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,GACf,6BAA6B,GAAG,SAAS,CAW3C;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEzE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,IAAI,GAAG,SAAS,GAC1B,yBAAyB,CAwB3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAET;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,kBAAkB,EAAE,YAAY,GAC/B,yBAAyB,EAAE,CAM7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,YAAY,GAAG,SAAS,GAC3C,OAAO,CAWT"}
@@ -1,4 +1,4 @@
1
- import { parseCaipChainId } from '@metamask/utils';
1
+ import { parseCaipChainId } from "@metamask/utils";
2
2
  /**
3
3
  * Per-network rollout stage for the Snaps → AssetsController assets migration.
4
4
  *
@@ -159,4 +159,4 @@ export function shouldSupportChain(chainId, remoteFeatureFlags) {
159
159
  const stage = parseSnapsAssetsMigrationStage(remoteFeatureFlags?.[SNAPS_ASSETS_MIGRATION_FLAG_KEYS[namespace]]);
160
160
  return isMigrationStageActive(stage);
161
161
  }
162
- //# sourceMappingURL=snaps-assets-migration.js.map
162
+ //# sourceMappingURL=snaps-assets-migration.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snaps-assets-migration.mjs","sourceRoot":"","sources":["../../src/utils/snaps-assets-migration.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FeatureFlags } from '@metamask/remote-feature-flag-controller';\nimport type { Json } from '@metamask/utils';\nimport { parseCaipChainId } from '@metamask/utils';\n\nimport type { ChainId } from '../types.js';\n\n/**\n * Per-network rollout stage for the Snaps → AssetsController assets migration.\n *\n * The stage is resolved per CAIP-2 chain id, so each migration network (Solana,\n * Stellar, Tron) advances and rolls back independently. A network with no flag\n * (or an unknown/malformed value) resolves to {@link Off}.\n */\nexport enum SnapsAssetsMigrationStage {\n /**\n * Status quo — the Snap uses its own AssetsService and the AssetsController\n * does NOT ingest for the network.\n */\n Off = 0,\n /**\n * The AssetsController ingests for the network (Account Activity WebSocket +\n * AccountsAPI) and reads route through it, falling back to the Snap's\n * AssetsService when the controller has no value.\n */\n ReadAssetsControllerWithFallback = 1,\n /**\n * Reads come from the AssetsController only (no fallback), but the Snap still\n * tracks/persists in the background so rollback stays safe.\n */\n ReadAssetsControllerWithoutFallback = 2,\n /**\n * The Snap stops tracking/persisting; the AssetsController is the only source.\n */\n ReadAssetsControllerOnly = 3,\n}\n\n/**\n * CAIP-2 namespaces covered by the Snaps → AssetsController assets migration.\n * Only chains in these namespaces are stage-gated; every other namespace\n * (e.g. `eip155`) keeps its existing, ungated ingestion behavior.\n */\nexport const SNAPS_ASSETS_MIGRATION_NAMESPACES = [\n 'solana',\n 'stellar',\n 'tron',\n] as const;\n\nexport type SnapsAssetsMigrationNamespace =\n (typeof SNAPS_ASSETS_MIGRATION_NAMESPACES)[number];\n\n/**\n * Per-network remote feature flag keys (LaunchDarkly) that drive the migration.\n * Each flag's resolved value carries the {@link SnapsAssetsMigrationStage} for\n * that network — see {@link parseSnapsAssetsMigrationStage}.\n */\nexport const SNAPS_ASSETS_MIGRATION_FLAG_KEYS: Record<\n SnapsAssetsMigrationNamespace,\n string\n> = {\n solana: 'networkAssetsSnapsMigrationSolana',\n stellar: 'networkAssetsSnapsMigrationStellar',\n tron: 'networkAssetsSnapsMigrationTron',\n};\n\n/**\n * Resolve the CAIP-2 namespace of a chain when it belongs to a migration\n * network (Solana, Stellar, Tron).\n *\n * @param chainId - The CAIP-2 chain id.\n * @returns The migration namespace, or `undefined` for any other chain.\n */\nexport function getSnapsAssetsMigrationNamespace(\n chainId: ChainId,\n): SnapsAssetsMigrationNamespace | undefined {\n try {\n const { namespace } = parseCaipChainId(chainId);\n return (SNAPS_ASSETS_MIGRATION_NAMESPACES as readonly string[]).includes(\n namespace,\n )\n ? (namespace as SnapsAssetsMigrationNamespace)\n : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Whether a CAIP-2 chain id belongs to a network covered by the assets\n * migration (Solana, Stellar, Tron).\n *\n * @param chainId - The CAIP-2 chain id to check.\n * @returns True when the chain's namespace is a migration namespace.\n */\nexport function isSnapsAssetsMigrationNamespace(chainId: ChainId): boolean {\n return getSnapsAssetsMigrationNamespace(chainId) !== undefined;\n}\n\n/**\n * Coerce a resolved remote feature flag value into a {@link SnapsAssetsMigrationStage}.\n *\n * `RemoteFeatureFlagController` resolves a threshold-scoped flag to a\n * `{ name, value }` variant, so the migration payload\n * `{ featureVersion, minimumSnapVersion, stage }` (and thus `stage`) lives under\n * `value` — the same nesting the sibling `assetsAccountsApiV6` flag uses. The\n * top-level object is used as a fallback so a plain, unscoped `{ stage }`\n * variation still resolves. Anything missing, malformed, or carrying an unknown\n * `stage` resolves to {@link SnapsAssetsMigrationStage.Off}.\n *\n * @param flagValue - The resolved remote feature flag value for a network.\n * @returns The migration stage.\n */\nexport function parseSnapsAssetsMigrationStage(\n flagValue: Json | undefined,\n): SnapsAssetsMigrationStage {\n if (\n typeof flagValue !== 'object' ||\n flagValue === null ||\n Array.isArray(flagValue)\n ) {\n return SnapsAssetsMigrationStage.Off;\n }\n\n const { value } = flagValue as { value?: unknown };\n const payload =\n typeof value === 'object' && value !== null && !Array.isArray(value)\n ? value\n : flagValue;\n\n const { stage } = payload as { stage?: unknown };\n switch (stage) {\n case SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback:\n case SnapsAssetsMigrationStage.ReadAssetsControllerWithoutFallback:\n case SnapsAssetsMigrationStage.ReadAssetsControllerOnly:\n return stage;\n default:\n return SnapsAssetsMigrationStage.Off;\n }\n}\n\n/**\n * Whether a network's migration stage is active, i.e. the AssetsController\n * (rather than the Snap) is the source of assets for the network.\n *\n * A stage is active from {@link SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback}\n * onward and inactive at {@link SnapsAssetsMigrationStage.Off}.\n *\n * @param stage - The resolved per-network migration stage.\n * @returns True when the migration is active for the network.\n */\nexport function isMigrationStageActive(\n stage: SnapsAssetsMigrationStage,\n): boolean {\n return stage >= SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback;\n}\n\n/**\n * Resolve the Snaps → AssetsController migration stage for each migration\n * network (Solana, Stellar, Tron) from the remote feature flags. The order\n * matches {@link SNAPS_ASSETS_MIGRATION_NAMESPACES}, so the result can be joined\n * into a stable primitive signature for change detection.\n *\n * @param remoteFeatureFlags - The remote feature flags state to resolve stages from.\n * @returns An array of each migration namespace's resolved stage.\n */\nexport function getMigrationStages(\n remoteFeatureFlags: FeatureFlags,\n): SnapsAssetsMigrationStage[] {\n return SNAPS_ASSETS_MIGRATION_NAMESPACES.map((namespace) =>\n parseSnapsAssetsMigrationStage(\n remoteFeatureFlags[SNAPS_ASSETS_MIGRATION_FLAG_KEYS[namespace]],\n ),\n );\n}\n\n/**\n * Whether a supported network should be surfaced as an active chain, gated by\n * the Snaps → AssetsController migration feature flags.\n *\n * Non-migration namespaces (e.g. `eip155`) are always surfaced. Migration\n * networks (Solana, Stellar, Tron) are only surfaced once their per-network\n * stage reaches {@link SnapsAssetsMigrationStage.ReadAssetsControllerWithFallback};\n * they are excluded when the stage is `Off` (also the fail-safe when the flag is\n * missing or the flags are unavailable).\n *\n * @param chainId - The CAIP-2 chain id to check.\n * @param remoteFeatureFlags - The remote feature flags state, or `undefined` when unavailable.\n * @returns `true` when the chain should be surfaced as an active chain.\n */\nexport function shouldSupportChain(\n chainId: ChainId,\n remoteFeatureFlags: FeatureFlags | undefined,\n): boolean {\n const namespace = getSnapsAssetsMigrationNamespace(chainId);\n // Non-migration namespaces (e.g. `eip155`) are never gated.\n if (!namespace) {\n return true;\n }\n\n const stage = parseSnapsAssetsMigrationStage(\n remoteFeatureFlags?.[SNAPS_ASSETS_MIGRATION_FLAG_KEYS[namespace]],\n );\n return isMigrationStageActive(stage);\n}\n"]}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withTrace = exports.emitTrace = void 0;
4
+ const DEFAULT_TAGS = {
5
+ controller: 'AssetsController',
6
+ };
7
+ /**
8
+ * Build request tags / startTime for MetaMask's Sentry adapter.
9
+ * Numeric `data` fields become tags (measurements); `duration_ms` backdates start.
10
+ *
11
+ * @param data - Span data attributes.
12
+ * @param tags - Caller tags.
13
+ * @param startTime - Optional explicit start override.
14
+ * @returns tags and optional startTime for the TraceRequest.
15
+ */
16
+ function buildTraceTiming(data, tags, startTime) {
17
+ const numericFromData = {};
18
+ for (const [key, value] of Object.entries(data)) {
19
+ if (typeof value === 'number') {
20
+ numericFromData[key] = value;
21
+ }
22
+ }
23
+ const requestTags = {
24
+ ...tags,
25
+ ...numericFromData,
26
+ };
27
+ if (startTime !== undefined) {
28
+ return { tags: requestTags, startTime };
29
+ }
30
+ const durationMs = typeof data.duration_ms === 'number' ? data.duration_ms : undefined;
31
+ if (durationMs === undefined) {
32
+ return { tags: requestTags };
33
+ }
34
+ return {
35
+ tags: requestTags,
36
+ startTime: performance.timeOrigin + performance.now() - durationMs,
37
+ };
38
+ }
39
+ /**
40
+ * Fire-and-forget Sentry span. Swallows errors so telemetry never breaks callers.
41
+ * Pass `parentContext` to nest as a subspan. Omit `trace` to skip emission.
42
+ *
43
+ * @param params - Span configuration.
44
+ * @param params.name - Trace / span name visible in Sentry.
45
+ * @param params.trace - Optional client trace callback; omit to no-op.
46
+ * @param params.data - Key-value pairs attached as span data.
47
+ * @param params.tags - Key-value pairs used for Sentry filtering.
48
+ * @param params.parentContext - Optional parent span context for nesting.
49
+ * @param params.startTime - Optional explicit start; else derived from `duration_ms`.
50
+ */
51
+ function emitTrace({ name, trace, data, tags = DEFAULT_TAGS, parentContext, startTime: startTimeOverride, }) {
52
+ if (!trace) {
53
+ return;
54
+ }
55
+ const { tags: requestTags, startTime } = buildTraceTiming(data, tags, startTimeOverride);
56
+ trace({
57
+ name,
58
+ data,
59
+ tags: requestTags,
60
+ parentContext,
61
+ ...(startTime === undefined ? {} : { startTime }),
62
+ }, () => undefined)?.catch(() => {
63
+ // Telemetry failure must not break.
64
+ });
65
+ }
66
+ exports.emitTrace = emitTrace;
67
+ /**
68
+ * Run work inside a parent Sentry span and pass its context for nested
69
+ * {@link emitTrace} subspans.
70
+ *
71
+ * When `trace` is omitted, runs `fn(undefined)` with no span.
72
+ * Telemetry failures are swallowed; errors from `fn` still propagate.
73
+ *
74
+ * @param params - Parent span config and work callback.
75
+ * @param params.name - Parent span name.
76
+ * @param params.trace - Optional client trace callback; omit to skip wrapping.
77
+ * @param params.data - Key-value pairs attached as span data.
78
+ * @param params.fn - Work to run; receives the parent span context.
79
+ * @param params.tags - Key-value pairs used for Sentry filtering.
80
+ * @param params.startTime - Optional explicit start; else derived from `duration_ms`.
81
+ * @returns The result of `fn`.
82
+ */
83
+ async function withTrace({ name, trace, data, fn, tags = DEFAULT_TAGS, startTime: startTimeOverride, }) {
84
+ if (!trace) {
85
+ return fn(undefined);
86
+ }
87
+ const { tags: requestTags, startTime } = buildTraceTiming(data, tags, startTimeOverride);
88
+ let workResult;
89
+ try {
90
+ await trace({
91
+ name,
92
+ data,
93
+ tags: requestTags,
94
+ ...(startTime === undefined ? {} : { startTime }),
95
+ }, async (parentContext) => {
96
+ try {
97
+ const value = await fn(parentContext);
98
+ workResult = { ok: true, value };
99
+ return value;
100
+ }
101
+ catch (error) {
102
+ workResult = { ok: false, error };
103
+ throw error;
104
+ }
105
+ });
106
+ }
107
+ catch {
108
+ // Telemetry failure must not break — unless the work itself failed.
109
+ }
110
+ if (workResult === undefined) {
111
+ // `trace` failed before invoking `fn` (or never called it).
112
+ return fn(undefined);
113
+ }
114
+ if (workResult.ok) {
115
+ return workResult.value;
116
+ }
117
+ throw workResult.error;
118
+ }
119
+ exports.withTrace = withTrace;
120
+ //# sourceMappingURL=trace.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.cjs","sourceRoot":"","sources":["../../src/utils/trace.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TraceCallback, TraceContext } from '@metamask/controller-utils';\n\nconst DEFAULT_TAGS: Record<string, number | string | boolean> = {\n controller: 'AssetsController',\n};\n\nexport type TraceSpanData = Record<string, number | string | boolean>;\n\nexport type EmitTraceParams = {\n name: string;\n /** When omitted / undefined, this is a no-op (bake call-site gating here). */\n trace?: TraceCallback;\n data: TraceSpanData;\n tags?: TraceSpanData;\n parentContext?: TraceContext;\n /** Override span start; otherwise derived from `data.duration_ms` when present. */\n startTime?: number;\n};\n\nexport type WithTraceParams<Result> = {\n name: string;\n /** When omitted / undefined, `fn` runs with no parent context. */\n trace?: TraceCallback;\n data: TraceSpanData;\n fn: (parentContext?: TraceContext) => Promise<Result>;\n tags?: TraceSpanData;\n startTime?: number;\n};\n\n/**\n * Build request tags / startTime for MetaMask's Sentry adapter.\n * Numeric `data` fields become tags (measurements); `duration_ms` backdates start.\n *\n * @param data - Span data attributes.\n * @param tags - Caller tags.\n * @param startTime - Optional explicit start override.\n * @returns tags and optional startTime for the TraceRequest.\n */\nfunction buildTraceTiming(\n data: TraceSpanData,\n tags: TraceSpanData,\n startTime?: number,\n): { tags: TraceSpanData; startTime?: number } {\n const numericFromData: Record<string, number> = {};\n for (const [key, value] of Object.entries(data)) {\n if (typeof value === 'number') {\n numericFromData[key] = value;\n }\n }\n const requestTags = {\n ...tags,\n ...numericFromData,\n };\n\n if (startTime !== undefined) {\n return { tags: requestTags, startTime };\n }\n\n const durationMs =\n typeof data.duration_ms === 'number' ? data.duration_ms : undefined;\n if (durationMs === undefined) {\n return { tags: requestTags };\n }\n\n return {\n tags: requestTags,\n startTime: performance.timeOrigin + performance.now() - durationMs,\n };\n}\n\n/**\n * Fire-and-forget Sentry span. Swallows errors so telemetry never breaks callers.\n * Pass `parentContext` to nest as a subspan. Omit `trace` to skip emission.\n *\n * @param params - Span configuration.\n * @param params.name - Trace / span name visible in Sentry.\n * @param params.trace - Optional client trace callback; omit to no-op.\n * @param params.data - Key-value pairs attached as span data.\n * @param params.tags - Key-value pairs used for Sentry filtering.\n * @param params.parentContext - Optional parent span context for nesting.\n * @param params.startTime - Optional explicit start; else derived from `duration_ms`.\n */\nexport function emitTrace({\n name,\n trace,\n data,\n tags = DEFAULT_TAGS,\n parentContext,\n startTime: startTimeOverride,\n}: EmitTraceParams): void {\n if (!trace) {\n return;\n }\n\n const { tags: requestTags, startTime } = buildTraceTiming(\n data,\n tags,\n startTimeOverride,\n );\n\n trace(\n {\n name,\n data,\n tags: requestTags,\n parentContext,\n ...(startTime === undefined ? {} : { startTime }),\n },\n () => undefined,\n )?.catch(() => {\n // Telemetry failure must not break.\n });\n}\n\n/**\n * Run work inside a parent Sentry span and pass its context for nested\n * {@link emitTrace} subspans.\n *\n * When `trace` is omitted, runs `fn(undefined)` with no span.\n * Telemetry failures are swallowed; errors from `fn` still propagate.\n *\n * @param params - Parent span config and work callback.\n * @param params.name - Parent span name.\n * @param params.trace - Optional client trace callback; omit to skip wrapping.\n * @param params.data - Key-value pairs attached as span data.\n * @param params.fn - Work to run; receives the parent span context.\n * @param params.tags - Key-value pairs used for Sentry filtering.\n * @param params.startTime - Optional explicit start; else derived from `duration_ms`.\n * @returns The result of `fn`.\n */\nexport async function withTrace<Result>({\n name,\n trace,\n data,\n fn,\n tags = DEFAULT_TAGS,\n startTime: startTimeOverride,\n}: WithTraceParams<Result>): Promise<Result> {\n if (!trace) {\n return fn(undefined);\n }\n\n const { tags: requestTags, startTime } = buildTraceTiming(\n data,\n tags,\n startTimeOverride,\n );\n\n let workResult:\n | { ok: true; value: Result }\n | { ok: false; error: unknown }\n | undefined;\n\n try {\n await trace(\n {\n name,\n data,\n tags: requestTags,\n ...(startTime === undefined ? {} : { startTime }),\n },\n async (parentContext) => {\n try {\n const value = await fn(parentContext);\n workResult = { ok: true, value };\n return value;\n } catch (error) {\n workResult = { ok: false, error };\n throw error;\n }\n },\n );\n } catch {\n // Telemetry failure must not break — unless the work itself failed.\n }\n\n if (workResult === undefined) {\n // `trace` failed before invoking `fn` (or never called it).\n return fn(undefined);\n }\n if (workResult.ok) {\n return workResult.value;\n }\n throw workResult.error;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { TraceCallback, TraceContext } from '@metamask/controller-utils';
1
+ import type { TraceCallback, TraceContext } from "@metamask/controller-utils";
2
2
  export type TraceSpanData = Record<string, number | string | boolean>;
3
3
  export type EmitTraceParams = {
4
4
  name: string;
@@ -49,4 +49,4 @@ export declare function emitTrace({ name, trace, data, tags, parentContext, star
49
49
  * @returns The result of `fn`.
50
50
  */
51
51
  export declare function withTrace<Result>({ name, trace, data, fn, tags, startTime: startTimeOverride, }: WithTraceParams<Result>): Promise<Result>;
52
- //# sourceMappingURL=trace.d.ts.map
52
+ //# sourceMappingURL=trace.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.cts","sourceRoot":"","sources":["../../src/utils/trace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,mCAAmC;AAM9E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,MAAM,IAAI;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA2CF;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAmB,EACnB,aAAa,EACb,SAAS,EAAE,iBAAiB,GAC7B,EAAE,eAAe,GAAG,IAAI,CAuBxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,EACtC,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,EAAE,EACF,IAAmB,EACnB,SAAS,EAAE,iBAAiB,GAC7B,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C3C"}
@@ -0,0 +1,52 @@
1
+ import type { TraceCallback, TraceContext } from "@metamask/controller-utils";
2
+ export type TraceSpanData = Record<string, number | string | boolean>;
3
+ export type EmitTraceParams = {
4
+ name: string;
5
+ /** When omitted / undefined, this is a no-op (bake call-site gating here). */
6
+ trace?: TraceCallback;
7
+ data: TraceSpanData;
8
+ tags?: TraceSpanData;
9
+ parentContext?: TraceContext;
10
+ /** Override span start; otherwise derived from `data.duration_ms` when present. */
11
+ startTime?: number;
12
+ };
13
+ export type WithTraceParams<Result> = {
14
+ name: string;
15
+ /** When omitted / undefined, `fn` runs with no parent context. */
16
+ trace?: TraceCallback;
17
+ data: TraceSpanData;
18
+ fn: (parentContext?: TraceContext) => Promise<Result>;
19
+ tags?: TraceSpanData;
20
+ startTime?: number;
21
+ };
22
+ /**
23
+ * Fire-and-forget Sentry span. Swallows errors so telemetry never breaks callers.
24
+ * Pass `parentContext` to nest as a subspan. Omit `trace` to skip emission.
25
+ *
26
+ * @param params - Span configuration.
27
+ * @param params.name - Trace / span name visible in Sentry.
28
+ * @param params.trace - Optional client trace callback; omit to no-op.
29
+ * @param params.data - Key-value pairs attached as span data.
30
+ * @param params.tags - Key-value pairs used for Sentry filtering.
31
+ * @param params.parentContext - Optional parent span context for nesting.
32
+ * @param params.startTime - Optional explicit start; else derived from `duration_ms`.
33
+ */
34
+ export declare function emitTrace({ name, trace, data, tags, parentContext, startTime: startTimeOverride, }: EmitTraceParams): void;
35
+ /**
36
+ * Run work inside a parent Sentry span and pass its context for nested
37
+ * {@link emitTrace} subspans.
38
+ *
39
+ * When `trace` is omitted, runs `fn(undefined)` with no span.
40
+ * Telemetry failures are swallowed; errors from `fn` still propagate.
41
+ *
42
+ * @param params - Parent span config and work callback.
43
+ * @param params.name - Parent span name.
44
+ * @param params.trace - Optional client trace callback; omit to skip wrapping.
45
+ * @param params.data - Key-value pairs attached as span data.
46
+ * @param params.fn - Work to run; receives the parent span context.
47
+ * @param params.tags - Key-value pairs used for Sentry filtering.
48
+ * @param params.startTime - Optional explicit start; else derived from `duration_ms`.
49
+ * @returns The result of `fn`.
50
+ */
51
+ export declare function withTrace<Result>({ name, trace, data, fn, tags, startTime: startTimeOverride, }: WithTraceParams<Result>): Promise<Result>;
52
+ //# sourceMappingURL=trace.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.mts","sourceRoot":"","sources":["../../src/utils/trace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,mCAAmC;AAM9E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,MAAM,IAAI;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA2CF;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAmB,EACnB,aAAa,EACb,SAAS,EAAE,iBAAiB,GAC7B,EAAE,eAAe,GAAG,IAAI,CAuBxB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,EACtC,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,EAAE,EACF,IAAmB,EACnB,SAAS,EAAE,iBAAiB,GAC7B,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C3C"}
@@ -112,4 +112,4 @@ export async function withTrace({ name, trace, data, fn, tags = DEFAULT_TAGS, st
112
112
  }
113
113
  throw workResult.error;
114
114
  }
115
- //# sourceMappingURL=trace.js.map
115
+ //# sourceMappingURL=trace.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.mjs","sourceRoot":"","sources":["../../src/utils/trace.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TraceCallback, TraceContext } from '@metamask/controller-utils';\n\nconst DEFAULT_TAGS: Record<string, number | string | boolean> = {\n controller: 'AssetsController',\n};\n\nexport type TraceSpanData = Record<string, number | string | boolean>;\n\nexport type EmitTraceParams = {\n name: string;\n /** When omitted / undefined, this is a no-op (bake call-site gating here). */\n trace?: TraceCallback;\n data: TraceSpanData;\n tags?: TraceSpanData;\n parentContext?: TraceContext;\n /** Override span start; otherwise derived from `data.duration_ms` when present. */\n startTime?: number;\n};\n\nexport type WithTraceParams<Result> = {\n name: string;\n /** When omitted / undefined, `fn` runs with no parent context. */\n trace?: TraceCallback;\n data: TraceSpanData;\n fn: (parentContext?: TraceContext) => Promise<Result>;\n tags?: TraceSpanData;\n startTime?: number;\n};\n\n/**\n * Build request tags / startTime for MetaMask's Sentry adapter.\n * Numeric `data` fields become tags (measurements); `duration_ms` backdates start.\n *\n * @param data - Span data attributes.\n * @param tags - Caller tags.\n * @param startTime - Optional explicit start override.\n * @returns tags and optional startTime for the TraceRequest.\n */\nfunction buildTraceTiming(\n data: TraceSpanData,\n tags: TraceSpanData,\n startTime?: number,\n): { tags: TraceSpanData; startTime?: number } {\n const numericFromData: Record<string, number> = {};\n for (const [key, value] of Object.entries(data)) {\n if (typeof value === 'number') {\n numericFromData[key] = value;\n }\n }\n const requestTags = {\n ...tags,\n ...numericFromData,\n };\n\n if (startTime !== undefined) {\n return { tags: requestTags, startTime };\n }\n\n const durationMs =\n typeof data.duration_ms === 'number' ? data.duration_ms : undefined;\n if (durationMs === undefined) {\n return { tags: requestTags };\n }\n\n return {\n tags: requestTags,\n startTime: performance.timeOrigin + performance.now() - durationMs,\n };\n}\n\n/**\n * Fire-and-forget Sentry span. Swallows errors so telemetry never breaks callers.\n * Pass `parentContext` to nest as a subspan. Omit `trace` to skip emission.\n *\n * @param params - Span configuration.\n * @param params.name - Trace / span name visible in Sentry.\n * @param params.trace - Optional client trace callback; omit to no-op.\n * @param params.data - Key-value pairs attached as span data.\n * @param params.tags - Key-value pairs used for Sentry filtering.\n * @param params.parentContext - Optional parent span context for nesting.\n * @param params.startTime - Optional explicit start; else derived from `duration_ms`.\n */\nexport function emitTrace({\n name,\n trace,\n data,\n tags = DEFAULT_TAGS,\n parentContext,\n startTime: startTimeOverride,\n}: EmitTraceParams): void {\n if (!trace) {\n return;\n }\n\n const { tags: requestTags, startTime } = buildTraceTiming(\n data,\n tags,\n startTimeOverride,\n );\n\n trace(\n {\n name,\n data,\n tags: requestTags,\n parentContext,\n ...(startTime === undefined ? {} : { startTime }),\n },\n () => undefined,\n )?.catch(() => {\n // Telemetry failure must not break.\n });\n}\n\n/**\n * Run work inside a parent Sentry span and pass its context for nested\n * {@link emitTrace} subspans.\n *\n * When `trace` is omitted, runs `fn(undefined)` with no span.\n * Telemetry failures are swallowed; errors from `fn` still propagate.\n *\n * @param params - Parent span config and work callback.\n * @param params.name - Parent span name.\n * @param params.trace - Optional client trace callback; omit to skip wrapping.\n * @param params.data - Key-value pairs attached as span data.\n * @param params.fn - Work to run; receives the parent span context.\n * @param params.tags - Key-value pairs used for Sentry filtering.\n * @param params.startTime - Optional explicit start; else derived from `duration_ms`.\n * @returns The result of `fn`.\n */\nexport async function withTrace<Result>({\n name,\n trace,\n data,\n fn,\n tags = DEFAULT_TAGS,\n startTime: startTimeOverride,\n}: WithTraceParams<Result>): Promise<Result> {\n if (!trace) {\n return fn(undefined);\n }\n\n const { tags: requestTags, startTime } = buildTraceTiming(\n data,\n tags,\n startTimeOverride,\n );\n\n let workResult:\n | { ok: true; value: Result }\n | { ok: false; error: unknown }\n | undefined;\n\n try {\n await trace(\n {\n name,\n data,\n tags: requestTags,\n ...(startTime === undefined ? {} : { startTime }),\n },\n async (parentContext) => {\n try {\n const value = await fn(parentContext);\n workResult = { ok: true, value };\n return value;\n } catch (error) {\n workResult = { ok: false, error };\n throw error;\n }\n },\n );\n } catch {\n // Telemetry failure must not break — unless the work itself failed.\n }\n\n if (workResult === undefined) {\n // `trace` failed before invoking `fn` (or never called it).\n return fn(undefined);\n }\n if (workResult.ok) {\n return workResult.value;\n }\n throw workResult.error;\n}\n"]}