@metamask/assets-controllers 37.0.0 → 38.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/dist/AccountTrackerController.cjs +245 -0
  3. package/dist/AccountTrackerController.cjs.map +1 -0
  4. package/dist/{types/AccountTrackerController.d.ts → AccountTrackerController.d.cts} +6 -6
  5. package/dist/AccountTrackerController.d.cts.map +1 -0
  6. package/dist/AccountTrackerController.d.mts +112 -0
  7. package/dist/AccountTrackerController.d.mts.map +1 -0
  8. package/dist/AccountTrackerController.mjs +244 -8
  9. package/dist/AccountTrackerController.mjs.map +1 -1
  10. package/dist/AssetsContractController.cjs +389 -0
  11. package/dist/AssetsContractController.cjs.map +1 -0
  12. package/dist/{types/AssetsContractController.d.ts → AssetsContractController.d.cts} +10 -9
  13. package/dist/AssetsContractController.d.cts.map +1 -0
  14. package/dist/AssetsContractController.d.mts +277 -0
  15. package/dist/AssetsContractController.d.mts.map +1 -0
  16. package/dist/AssetsContractController.mjs +387 -16
  17. package/dist/AssetsContractController.mjs.map +1 -1
  18. package/dist/CurrencyRateController.cjs +156 -0
  19. package/dist/CurrencyRateController.cjs.map +1 -0
  20. package/dist/{types/CurrencyRateController.d.ts → CurrencyRateController.d.cts} +5 -5
  21. package/dist/CurrencyRateController.d.cts.map +1 -0
  22. package/dist/CurrencyRateController.d.mts +80 -0
  23. package/dist/CurrencyRateController.d.mts.map +1 -0
  24. package/dist/CurrencyRateController.mjs +150 -10
  25. package/dist/CurrencyRateController.mjs.map +1 -1
  26. package/dist/NftController.cjs +1159 -0
  27. package/dist/NftController.cjs.map +1 -0
  28. package/dist/{types/NftController.d.ts → NftController.d.cts} +11 -11
  29. package/dist/NftController.d.cts.map +1 -0
  30. package/dist/NftController.d.mts +424 -0
  31. package/dist/NftController.d.mts.map +1 -0
  32. package/dist/NftController.mjs +1156 -12
  33. package/dist/NftController.mjs.map +1 -1
  34. package/dist/NftDetectionController.cjs +237 -0
  35. package/dist/NftDetectionController.cjs.map +1 -0
  36. package/dist/{types/NftDetectionController.d.ts → NftDetectionController.d.cts} +9 -9
  37. package/dist/NftDetectionController.d.cts.map +1 -0
  38. package/dist/NftDetectionController.d.mts +368 -0
  39. package/dist/NftDetectionController.d.mts.map +1 -0
  40. package/dist/NftDetectionController.mjs +231 -14
  41. package/dist/NftDetectionController.mjs.map +1 -1
  42. package/dist/RatesController/RatesController.cjs +189 -0
  43. package/dist/RatesController/RatesController.cjs.map +1 -0
  44. package/dist/{types/RatesController/RatesController.d.ts → RatesController/RatesController.d.cts} +5 -5
  45. package/dist/RatesController/RatesController.d.cts.map +1 -0
  46. package/dist/RatesController/RatesController.d.mts +44 -0
  47. package/dist/RatesController/RatesController.d.mts.map +1 -0
  48. package/dist/RatesController/RatesController.mjs +183 -12
  49. package/dist/RatesController/RatesController.mjs.map +1 -1
  50. package/dist/RatesController/index.cjs +7 -0
  51. package/dist/RatesController/index.cjs.map +1 -0
  52. package/dist/{types/RatesController/index.d.ts → RatesController/index.d.cts} +3 -3
  53. package/dist/RatesController/index.d.cts.map +1 -0
  54. package/dist/RatesController/index.d.mts +3 -0
  55. package/dist/RatesController/index.d.mts.map +1 -0
  56. package/dist/RatesController/index.mjs +1 -12
  57. package/dist/RatesController/index.mjs.map +1 -1
  58. package/dist/RatesController/types.cjs +3 -0
  59. package/dist/RatesController/types.cjs.map +1 -0
  60. package/dist/{types/RatesController/types.d.ts → RatesController/types.d.cts} +4 -4
  61. package/dist/RatesController/types.d.cts.map +1 -0
  62. package/dist/RatesController/types.d.mts +100 -0
  63. package/dist/RatesController/types.d.mts.map +1 -0
  64. package/dist/RatesController/types.mjs +1 -0
  65. package/dist/RatesController/types.mjs.map +1 -1
  66. package/dist/Standards/ERC20Standard.cjs +124 -0
  67. package/dist/Standards/ERC20Standard.cjs.map +1 -0
  68. package/dist/{types/Standards/ERC20Standard.d.ts → Standards/ERC20Standard.d.cts} +3 -3
  69. package/dist/Standards/ERC20Standard.d.cts.map +1 -0
  70. package/dist/Standards/ERC20Standard.d.mts +49 -0
  71. package/dist/Standards/ERC20Standard.d.mts.map +1 -0
  72. package/dist/Standards/ERC20Standard.mjs +121 -8
  73. package/dist/Standards/ERC20Standard.mjs.map +1 -1
  74. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.cjs +189 -0
  75. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.cjs.map +1 -0
  76. package/dist/{types/Standards/NftStandards/ERC1155/ERC1155Standard.d.ts → Standards/NftStandards/ERC1155/ERC1155Standard.d.cts} +3 -3
  77. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.d.cts.map +1 -0
  78. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.d.mts +95 -0
  79. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.d.mts.map +1 -0
  80. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.mjs +184 -8
  81. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.mjs.map +1 -1
  82. package/dist/Standards/NftStandards/ERC721/ERC721Standard.cjs +167 -0
  83. package/dist/Standards/NftStandards/ERC721/ERC721Standard.cjs.map +1 -0
  84. package/dist/{types/Standards/NftStandards/ERC721/ERC721Standard.d.ts → Standards/NftStandards/ERC721/ERC721Standard.d.cts} +2 -2
  85. package/dist/Standards/NftStandards/ERC721/ERC721Standard.d.cts.map +1 -0
  86. package/dist/Standards/NftStandards/ERC721/ERC721Standard.d.mts +89 -0
  87. package/dist/Standards/NftStandards/ERC721/ERC721Standard.d.mts.map +1 -0
  88. package/dist/Standards/NftStandards/ERC721/ERC721Standard.mjs +162 -8
  89. package/dist/Standards/NftStandards/ERC721/ERC721Standard.mjs.map +1 -1
  90. package/dist/TokenBalancesController.cjs +136 -0
  91. package/dist/TokenBalancesController.cjs.map +1 -0
  92. package/dist/{types/TokenBalancesController.d.ts → TokenBalancesController.d.cts} +7 -7
  93. package/dist/TokenBalancesController.d.cts.map +1 -0
  94. package/dist/TokenBalancesController.d.mts +82 -0
  95. package/dist/TokenBalancesController.d.mts.map +1 -0
  96. package/dist/TokenBalancesController.mjs +129 -10
  97. package/dist/TokenBalancesController.mjs.map +1 -1
  98. package/dist/TokenDetectionController.cjs +369 -0
  99. package/dist/TokenDetectionController.cjs.map +1 -0
  100. package/dist/{types/TokenDetectionController.d.ts → TokenDetectionController.d.cts} +10 -10
  101. package/dist/TokenDetectionController.d.cts.map +1 -0
  102. package/dist/TokenDetectionController.d.mts +109 -0
  103. package/dist/TokenDetectionController.d.mts.map +1 -0
  104. package/dist/TokenDetectionController.mjs +366 -15
  105. package/dist/TokenDetectionController.mjs.map +1 -1
  106. package/dist/TokenListController.cjs +274 -0
  107. package/dist/TokenListController.cjs.map +1 -0
  108. package/dist/{types/TokenListController.d.ts → TokenListController.d.cts} +5 -5
  109. package/dist/TokenListController.d.cts.map +1 -0
  110. package/dist/TokenListController.d.mts +117 -0
  111. package/dist/TokenListController.d.mts.map +1 -0
  112. package/dist/TokenListController.mjs +267 -12
  113. package/dist/TokenListController.mjs.map +1 -1
  114. package/dist/TokenRatesController.cjs +452 -0
  115. package/dist/TokenRatesController.cjs.map +1 -0
  116. package/dist/{types/TokenRatesController.d.ts → TokenRatesController.d.cts} +9 -9
  117. package/dist/TokenRatesController.d.cts.map +1 -0
  118. package/dist/TokenRatesController.d.mts +170 -0
  119. package/dist/TokenRatesController.d.mts.map +1 -0
  120. package/dist/TokenRatesController.mjs +446 -16
  121. package/dist/TokenRatesController.mjs.map +1 -1
  122. package/dist/TokensController.cjs +678 -0
  123. package/dist/TokensController.cjs.map +1 -0
  124. package/dist/{types/TokensController.d.ts → TokensController.d.cts} +10 -10
  125. package/dist/TokensController.d.cts.map +1 -0
  126. package/dist/TokensController.d.mts +165 -0
  127. package/dist/TokensController.d.mts.map +1 -0
  128. package/dist/TokensController.mjs +675 -14
  129. package/dist/TokensController.mjs.map +1 -1
  130. package/dist/assetsUtil.cjs +358 -0
  131. package/dist/assetsUtil.cjs.map +1 -0
  132. package/dist/{types/assetsUtil.d.ts → assetsUtil.d.cts} +7 -7
  133. package/dist/assetsUtil.d.cts.map +1 -0
  134. package/dist/assetsUtil.d.mts +177 -0
  135. package/dist/assetsUtil.d.mts.map +1 -0
  136. package/dist/assetsUtil.mjs +343 -36
  137. package/dist/assetsUtil.mjs.map +1 -1
  138. package/dist/constants.cjs +10 -0
  139. package/dist/constants.cjs.map +1 -0
  140. package/dist/{types/constants.d.ts → constants.d.cts} +1 -1
  141. package/dist/constants.d.cts.map +1 -0
  142. package/dist/constants.d.mts +6 -0
  143. package/dist/constants.d.mts.map +1 -0
  144. package/dist/constants.mjs +6 -7
  145. package/dist/constants.mjs.map +1 -1
  146. package/dist/crypto-compare-service/crypto-compare.cjs +119 -0
  147. package/dist/crypto-compare-service/crypto-compare.cjs.map +1 -0
  148. package/dist/{types/crypto-compare-service/crypto-compare.d.ts → crypto-compare-service/crypto-compare.d.cts} +1 -1
  149. package/dist/crypto-compare-service/crypto-compare.d.cts.map +1 -0
  150. package/dist/crypto-compare-service/crypto-compare.d.mts +22 -0
  151. package/dist/crypto-compare-service/crypto-compare.d.mts.map +1 -0
  152. package/dist/crypto-compare-service/crypto-compare.mjs +113 -9
  153. package/dist/crypto-compare-service/crypto-compare.mjs.map +1 -1
  154. package/dist/crypto-compare-service/index.cjs +7 -0
  155. package/dist/crypto-compare-service/index.cjs.map +1 -0
  156. package/dist/crypto-compare-service/index.d.cts +2 -0
  157. package/dist/crypto-compare-service/index.d.cts.map +1 -0
  158. package/dist/crypto-compare-service/index.d.mts +2 -0
  159. package/dist/crypto-compare-service/index.d.mts.map +1 -0
  160. package/dist/crypto-compare-service/index.mjs +1 -10
  161. package/dist/crypto-compare-service/index.mjs.map +1 -1
  162. package/dist/index.cjs +51 -0
  163. package/dist/index.cjs.map +1 -0
  164. package/dist/{types/index.d.ts → index.d.cts} +24 -24
  165. package/dist/index.d.cts.map +1 -0
  166. package/dist/index.d.mts +24 -0
  167. package/dist/index.d.mts.map +1 -0
  168. package/dist/index.mjs +13 -80
  169. package/dist/index.mjs.map +1 -1
  170. package/dist/token-prices-service/abstract-token-prices-service.cjs +3 -0
  171. package/dist/token-prices-service/abstract-token-prices-service.cjs.map +1 -0
  172. package/dist/{types/token-prices-service/abstract-token-prices-service.d.ts → token-prices-service/abstract-token-prices-service.d.cts} +2 -2
  173. package/dist/token-prices-service/abstract-token-prices-service.d.cts.map +1 -0
  174. package/dist/token-prices-service/abstract-token-prices-service.d.mts +79 -0
  175. package/dist/token-prices-service/abstract-token-prices-service.d.mts.map +1 -0
  176. package/dist/token-prices-service/abstract-token-prices-service.mjs +1 -0
  177. package/dist/token-prices-service/abstract-token-prices-service.mjs.map +1 -1
  178. package/dist/token-prices-service/codefi-v2.cjs +352 -0
  179. package/dist/token-prices-service/codefi-v2.cjs.map +1 -0
  180. package/dist/{types/token-prices-service/codefi-v2.d.ts → token-prices-service/codefi-v2.d.cts} +3 -3
  181. package/dist/token-prices-service/codefi-v2.d.cts.map +1 -0
  182. package/dist/token-prices-service/codefi-v2.d.mts +97 -0
  183. package/dist/token-prices-service/codefi-v2.d.mts.map +1 -0
  184. package/dist/token-prices-service/codefi-v2.mjs +347 -12
  185. package/dist/token-prices-service/codefi-v2.mjs.map +1 -1
  186. package/dist/token-prices-service/index.cjs +7 -0
  187. package/dist/token-prices-service/index.cjs.map +1 -0
  188. package/dist/token-prices-service/index.d.cts +3 -0
  189. package/dist/token-prices-service/index.d.cts.map +1 -0
  190. package/dist/token-prices-service/index.d.mts +3 -0
  191. package/dist/token-prices-service/index.d.mts.map +1 -0
  192. package/dist/token-prices-service/index.mjs +1 -10
  193. package/dist/token-prices-service/index.mjs.map +1 -1
  194. package/dist/token-service.cjs +130 -0
  195. package/dist/token-service.cjs.map +1 -0
  196. package/dist/{types/token-service.d.ts → token-service.d.cts} +2 -2
  197. package/dist/token-service.d.cts.map +1 -0
  198. package/dist/token-service.d.mts +31 -0
  199. package/dist/token-service.d.mts.map +1 -0
  200. package/dist/token-service.mjs +124 -14
  201. package/dist/token-service.mjs.map +1 -1
  202. package/package.json +24 -18
  203. package/dist/AccountTrackerController.js +0 -10
  204. package/dist/AccountTrackerController.js.map +0 -1
  205. package/dist/AssetsContractController.js +0 -18
  206. package/dist/AssetsContractController.js.map +0 -1
  207. package/dist/CurrencyRateController.js +0 -12
  208. package/dist/CurrencyRateController.js.map +0 -1
  209. package/dist/NftController.js +0 -14
  210. package/dist/NftController.js.map +0 -1
  211. package/dist/NftDetectionController.js +0 -16
  212. package/dist/NftDetectionController.js.map +0 -1
  213. package/dist/RatesController/RatesController.js +0 -14
  214. package/dist/RatesController/RatesController.js.map +0 -1
  215. package/dist/RatesController/index.js +0 -13
  216. package/dist/RatesController/index.js.map +0 -1
  217. package/dist/RatesController/types.js +0 -1
  218. package/dist/RatesController/types.js.map +0 -1
  219. package/dist/Standards/ERC20Standard.js +0 -9
  220. package/dist/Standards/ERC20Standard.js.map +0 -1
  221. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.js +0 -9
  222. package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.js.map +0 -1
  223. package/dist/Standards/NftStandards/ERC721/ERC721Standard.js +0 -9
  224. package/dist/Standards/NftStandards/ERC721/ERC721Standard.js.map +0 -1
  225. package/dist/TokenBalancesController.js +0 -12
  226. package/dist/TokenBalancesController.js.map +0 -1
  227. package/dist/TokenDetectionController.js +0 -17
  228. package/dist/TokenDetectionController.js.map +0 -1
  229. package/dist/TokenListController.js +0 -14
  230. package/dist/TokenListController.js.map +0 -1
  231. package/dist/TokenRatesController.js +0 -18
  232. package/dist/TokenRatesController.js.map +0 -1
  233. package/dist/TokensController.js +0 -16
  234. package/dist/TokensController.js.map +0 -1
  235. package/dist/assetsUtil.js +0 -38
  236. package/dist/assetsUtil.js.map +0 -1
  237. package/dist/chunk-27KOXCQK.mjs +0 -1
  238. package/dist/chunk-27KOXCQK.mjs.map +0 -1
  239. package/dist/chunk-2TZK6YZA.js +0 -1405
  240. package/dist/chunk-2TZK6YZA.js.map +0 -1
  241. package/dist/chunk-3LPQTUGG.js +0 -434
  242. package/dist/chunk-3LPQTUGG.js.map +0 -1
  243. package/dist/chunk-3QDXAE2D.mjs +0 -178
  244. package/dist/chunk-3QDXAE2D.mjs.map +0 -1
  245. package/dist/chunk-46KUC5FH.mjs +0 -434
  246. package/dist/chunk-46KUC5FH.mjs.map +0 -1
  247. package/dist/chunk-54JUUBXY.mjs +0 -813
  248. package/dist/chunk-54JUUBXY.mjs.map +0 -1
  249. package/dist/chunk-5QLC2MHV.js +0 -215
  250. package/dist/chunk-5QLC2MHV.js.map +0 -1
  251. package/dist/chunk-7K6PSEAA.js +0 -1
  252. package/dist/chunk-7K6PSEAA.js.map +0 -1
  253. package/dist/chunk-ADJ3IFJH.js +0 -813
  254. package/dist/chunk-ADJ3IFJH.js.map +0 -1
  255. package/dist/chunk-AX522TDL.mjs +0 -85
  256. package/dist/chunk-AX522TDL.mjs.map +0 -1
  257. package/dist/chunk-BBCZM5P4.js +0 -300
  258. package/dist/chunk-BBCZM5P4.js.map +0 -1
  259. package/dist/chunk-BZEAPSD5.mjs +0 -215
  260. package/dist/chunk-BZEAPSD5.mjs.map +0 -1
  261. package/dist/chunk-C7LNCQXM.mjs +0 -300
  262. package/dist/chunk-C7LNCQXM.mjs.map +0 -1
  263. package/dist/chunk-CN53OZAM.mjs +0 -428
  264. package/dist/chunk-CN53OZAM.mjs.map +0 -1
  265. package/dist/chunk-CP3HC7AQ.mjs +0 -12
  266. package/dist/chunk-CP3HC7AQ.mjs.map +0 -1
  267. package/dist/chunk-CUFSPB7T.mjs +0 -530
  268. package/dist/chunk-CUFSPB7T.mjs.map +0 -1
  269. package/dist/chunk-F6L3DFOZ.js +0 -204
  270. package/dist/chunk-F6L3DFOZ.js.map +0 -1
  271. package/dist/chunk-GHG3DOUK.js +0 -428
  272. package/dist/chunk-GHG3DOUK.js.map +0 -1
  273. package/dist/chunk-HJ5GXVDT.mjs +0 -157
  274. package/dist/chunk-HJ5GXVDT.mjs.map +0 -1
  275. package/dist/chunk-HVOIBGYN.js +0 -282
  276. package/dist/chunk-HVOIBGYN.js.map +0 -1
  277. package/dist/chunk-ISK2VSBB.js +0 -178
  278. package/dist/chunk-ISK2VSBB.js.map +0 -1
  279. package/dist/chunk-JCR4H6YL.js +0 -115
  280. package/dist/chunk-JCR4H6YL.js.map +0 -1
  281. package/dist/chunk-JJX7TMH5.mjs +0 -135
  282. package/dist/chunk-JJX7TMH5.mjs.map +0 -1
  283. package/dist/chunk-JTXPJ6TK.mjs +0 -68
  284. package/dist/chunk-JTXPJ6TK.mjs.map +0 -1
  285. package/dist/chunk-JYHAAA6W.mjs +0 -1
  286. package/dist/chunk-JYHAAA6W.mjs.map +0 -1
  287. package/dist/chunk-K7A3EOIM.js +0 -85
  288. package/dist/chunk-K7A3EOIM.js.map +0 -1
  289. package/dist/chunk-KPBNX6GP.mjs +0 -215
  290. package/dist/chunk-KPBNX6GP.mjs.map +0 -1
  291. package/dist/chunk-MZI3SDQN.js +0 -215
  292. package/dist/chunk-MZI3SDQN.js.map +0 -1
  293. package/dist/chunk-OBUR4TXH.js +0 -1
  294. package/dist/chunk-OBUR4TXH.js.map +0 -1
  295. package/dist/chunk-RGHTNZQ6.js +0 -12
  296. package/dist/chunk-RGHTNZQ6.js.map +0 -1
  297. package/dist/chunk-S5CFNNOM.mjs +0 -115
  298. package/dist/chunk-S5CFNNOM.mjs.map +0 -1
  299. package/dist/chunk-SBWPU4VT.mjs +0 -204
  300. package/dist/chunk-SBWPU4VT.mjs.map +0 -1
  301. package/dist/chunk-SK2B36Q4.mjs +0 -1405
  302. package/dist/chunk-SK2B36Q4.mjs.map +0 -1
  303. package/dist/chunk-T5ZX5BV7.js +0 -157
  304. package/dist/chunk-T5ZX5BV7.js.map +0 -1
  305. package/dist/chunk-TFLYM4PY.mjs +0 -291
  306. package/dist/chunk-TFLYM4PY.mjs.map +0 -1
  307. package/dist/chunk-TTH3ES66.mjs +0 -1
  308. package/dist/chunk-TTH3ES66.mjs.map +0 -1
  309. package/dist/chunk-V6DNVROD.js +0 -348
  310. package/dist/chunk-V6DNVROD.js.map +0 -1
  311. package/dist/chunk-X2HRAVDO.js +0 -530
  312. package/dist/chunk-X2HRAVDO.js.map +0 -1
  313. package/dist/chunk-XC3SOOGC.js +0 -1
  314. package/dist/chunk-XC3SOOGC.js.map +0 -1
  315. package/dist/chunk-XQO3EG4J.mjs +0 -348
  316. package/dist/chunk-XQO3EG4J.mjs.map +0 -1
  317. package/dist/chunk-XUI43LEZ.mjs +0 -30
  318. package/dist/chunk-XUI43LEZ.mjs.map +0 -1
  319. package/dist/chunk-YGGUAMHV.js +0 -135
  320. package/dist/chunk-YGGUAMHV.js.map +0 -1
  321. package/dist/chunk-Z4BLTVTB.js +0 -30
  322. package/dist/chunk-Z4BLTVTB.js.map +0 -1
  323. package/dist/chunk-Z7RMCHD4.mjs +0 -282
  324. package/dist/chunk-Z7RMCHD4.mjs.map +0 -1
  325. package/dist/chunk-ZAR4BIOC.js +0 -291
  326. package/dist/chunk-ZAR4BIOC.js.map +0 -1
  327. package/dist/chunk-ZG5MS2TO.js +0 -68
  328. package/dist/chunk-ZG5MS2TO.js.map +0 -1
  329. package/dist/constants.js +0 -8
  330. package/dist/constants.js.map +0 -1
  331. package/dist/crypto-compare-service/crypto-compare.js +0 -10
  332. package/dist/crypto-compare-service/crypto-compare.js.map +0 -1
  333. package/dist/crypto-compare-service/index.js +0 -11
  334. package/dist/crypto-compare-service/index.js.map +0 -1
  335. package/dist/index.js +0 -81
  336. package/dist/index.js.map +0 -1
  337. package/dist/token-prices-service/abstract-token-prices-service.js +0 -1
  338. package/dist/token-prices-service/abstract-token-prices-service.js.map +0 -1
  339. package/dist/token-prices-service/codefi-v2.js +0 -14
  340. package/dist/token-prices-service/codefi-v2.js.map +0 -1
  341. package/dist/token-prices-service/index.js +0 -11
  342. package/dist/token-prices-service/index.js.map +0 -1
  343. package/dist/token-service.js +0 -15
  344. package/dist/token-service.js.map +0 -1
  345. package/dist/tsconfig.build.tsbuildinfo +0 -1
  346. package/dist/types/AccountTrackerController.d.ts.map +0 -1
  347. package/dist/types/AssetsContractController.d.ts.map +0 -1
  348. package/dist/types/CurrencyRateController.d.ts.map +0 -1
  349. package/dist/types/NftController.d.ts.map +0 -1
  350. package/dist/types/NftDetectionController.d.ts.map +0 -1
  351. package/dist/types/RatesController/RatesController.d.ts.map +0 -1
  352. package/dist/types/RatesController/index.d.ts.map +0 -1
  353. package/dist/types/RatesController/types.d.ts.map +0 -1
  354. package/dist/types/Standards/ERC20Standard.d.ts.map +0 -1
  355. package/dist/types/Standards/NftStandards/ERC1155/ERC1155Standard.d.ts.map +0 -1
  356. package/dist/types/Standards/NftStandards/ERC721/ERC721Standard.d.ts.map +0 -1
  357. package/dist/types/TokenBalancesController.d.ts.map +0 -1
  358. package/dist/types/TokenDetectionController.d.ts.map +0 -1
  359. package/dist/types/TokenListController.d.ts.map +0 -1
  360. package/dist/types/TokenRatesController.d.ts.map +0 -1
  361. package/dist/types/TokensController.d.ts.map +0 -1
  362. package/dist/types/assetsUtil.d.ts.map +0 -1
  363. package/dist/types/constants.d.ts.map +0 -1
  364. package/dist/types/crypto-compare-service/crypto-compare.d.ts.map +0 -1
  365. package/dist/types/crypto-compare-service/index.d.ts +0 -2
  366. package/dist/types/crypto-compare-service/index.d.ts.map +0 -1
  367. package/dist/types/index.d.ts.map +0 -1
  368. package/dist/types/token-prices-service/abstract-token-prices-service.d.ts.map +0 -1
  369. package/dist/types/token-prices-service/codefi-v2.d.ts.map +0 -1
  370. package/dist/types/token-prices-service/index.d.ts +0 -3
  371. package/dist/types/token-prices-service/index.d.ts.map +0 -1
  372. package/dist/types/token-service.d.ts.map +0 -1
@@ -1,178 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkMZI3SDQNjs = require('./chunk-MZI3SDQN.js');
4
-
5
- // src/Standards/NftStandards/ERC721/ERC721Standard.ts
6
- var _contracts = require('@ethersproject/contracts');
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
- var _controllerutils = require('@metamask/controller-utils');
15
- var _metamaskethabis = require('@metamask/metamask-eth-abis');
16
- var ERC721Standard = class {
17
- constructor(provider) {
18
- /**
19
- * Query if contract implements ERC721Metadata interface.
20
- *
21
- * @param address - ERC721 asset contract address.
22
- * @returns Promise resolving to whether the contract implements ERC721Metadata interface.
23
- */
24
- this.contractSupportsMetadataInterface = async (address) => {
25
- return this.contractSupportsInterface(
26
- address,
27
- _controllerutils.ERC721_METADATA_INTERFACE_ID
28
- );
29
- };
30
- /**
31
- * Query if contract implements ERC721Enumerable interface.
32
- *
33
- * @param address - ERC721 asset contract address.
34
- * @returns Promise resolving to whether the contract implements ERC721Enumerable interface.
35
- */
36
- this.contractSupportsEnumerableInterface = async (address) => {
37
- return this.contractSupportsInterface(
38
- address,
39
- _controllerutils.ERC721_ENUMERABLE_INTERFACE_ID
40
- );
41
- };
42
- /**
43
- * Query if contract implements ERC721 interface.
44
- *
45
- * @param address - ERC721 asset contract address.
46
- * @returns Promise resolving to whether the contract implements ERC721 interface.
47
- */
48
- this.contractSupportsBase721Interface = async (address) => {
49
- return this.contractSupportsInterface(address, _controllerutils.ERC721_INTERFACE_ID);
50
- };
51
- /**
52
- * Enumerate assets assigned to an owner.
53
- *
54
- * @param address - ERC721 asset contract address.
55
- * @param selectedAddress - Current account public address.
56
- * @param index - An NFT counter less than `balanceOf(selectedAddress)`.
57
- * @returns Promise resolving to token identifier for the 'index'th asset assigned to 'selectedAddress'.
58
- */
59
- this.getNftTokenId = async (address, selectedAddress, index) => {
60
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC721, this.provider);
61
- return contract.tokenOfOwnerByIndex(selectedAddress, index);
62
- };
63
- /**
64
- * Query for tokenURI for a given asset.
65
- *
66
- * @param address - ERC721 asset contract address.
67
- * @param tokenId - ERC721 asset identifier.
68
- * @returns Promise resolving to the 'tokenURI'.
69
- */
70
- this.getTokenURI = async (address, tokenId) => {
71
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC721, this.provider);
72
- const supportsMetadata = await this.contractSupportsMetadataInterface(
73
- address
74
- );
75
- if (!supportsMetadata) {
76
- console.error("Contract does not support ERC721 metadata interface.");
77
- }
78
- return contract.tokenURI(tokenId);
79
- };
80
- /**
81
- * Query for name for a given asset.
82
- *
83
- * @param address - ERC721 asset contract address.
84
- * @returns Promise resolving to the 'name'.
85
- */
86
- this.getAssetName = async (address) => {
87
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC721, this.provider);
88
- return contract.name();
89
- };
90
- /**
91
- * Query for symbol for a given asset.
92
- *
93
- * @param address - ERC721 asset contract address.
94
- * @returns Promise resolving to the 'symbol'.
95
- */
96
- this.getAssetSymbol = async (address) => {
97
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC721, this.provider);
98
- return contract.symbol();
99
- };
100
- /**
101
- * Query if a contract implements an interface.
102
- *
103
- * @param address - Asset contract address.
104
- * @param interfaceId - Interface identifier.
105
- * @returns Promise resolving to whether the contract implements `interfaceID`.
106
- */
107
- this.contractSupportsInterface = async (address, interfaceId) => {
108
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC721, this.provider);
109
- try {
110
- return await contract.supportsInterface(interfaceId);
111
- } catch (err) {
112
- if (err instanceof Error && err.message.includes("call revert exception")) {
113
- return false;
114
- }
115
- throw err;
116
- }
117
- };
118
- /**
119
- * Query if a contract implements an interface.
120
- *
121
- * @param address - Asset contract address.
122
- * @param ipfsGateway - The user's preferred IPFS gateway.
123
- * @param tokenId - tokenId of a given token in the contract.
124
- * @returns Promise resolving an object containing the standard, tokenURI, symbol and name of the given contract/tokenId pair.
125
- */
126
- this.getDetails = async (address, ipfsGateway, tokenId) => {
127
- const isERC721 = await this.contractSupportsBase721Interface(address);
128
- if (!isERC721) {
129
- throw new Error("This isn't a valid ERC721 contract");
130
- }
131
- const [symbol, name, tokenURI] = await Promise.all([
132
- _controllerutils.safelyExecute.call(void 0, () => this.getAssetSymbol(address)),
133
- _controllerutils.safelyExecute.call(void 0, () => this.getAssetName(address)),
134
- tokenId ? _controllerutils.safelyExecute.call(void 0,
135
- () => this.getTokenURI(address, tokenId).then(
136
- (uri) => uri.startsWith("ipfs://") ? _chunkMZI3SDQNjs.getFormattedIpfsUrl.call(void 0, ipfsGateway, uri, true) : uri
137
- )
138
- ) : void 0
139
- ]);
140
- let image;
141
- if (tokenURI) {
142
- try {
143
- const response = await _controllerutils.timeoutFetch.call(void 0, tokenURI);
144
- const object = await response.json();
145
- image = object?.image;
146
- if (image?.startsWith("ipfs://")) {
147
- image = _chunkMZI3SDQNjs.getFormattedIpfsUrl.call(void 0, ipfsGateway, image, true);
148
- }
149
- } catch {
150
- }
151
- }
152
- return {
153
- standard: _controllerutils.ERC721,
154
- tokenURI,
155
- symbol,
156
- name,
157
- image
158
- };
159
- };
160
- this.provider = provider;
161
- }
162
- /**
163
- * Query for owner for a given ERC721 asset.
164
- *
165
- * @param address - ERC721 asset contract address.
166
- * @param tokenId - ERC721 asset identifier.
167
- * @returns Promise resolving to the owner address.
168
- */
169
- async getOwnerOf(address, tokenId) {
170
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC721, this.provider);
171
- return contract.ownerOf(tokenId);
172
- }
173
- };
174
-
175
-
176
-
177
- exports.ERC721Standard = ERC721Standard;
178
- //# sourceMappingURL=chunk-ISK2VSBB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/Standards/NftStandards/ERC721/ERC721Standard.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,gBAAgB;AAEzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAInB,IAAM,iBAAN,MAAqB;AAAA,EAG1B,YAAY,UAAwB;AAUpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CAAoC,OAClC,YACqB;AACrB,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAAsC,OACpC,YACqB;AACrB,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAAmC,OACjC,YACqB;AACrB,aAAO,KAAK,0BAA0B,SAAS,mBAAmB;AAAA,IACpE;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAgB,OACd,SACA,iBACA,UACoB;AACpB,YAAM,WAAW,IAAI,SAAS,SAAS,WAAW,KAAK,QAAQ;AAC/D,aAAO,SAAS,oBAAoB,iBAAiB,KAAK;AAAA,IAC5D;AASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAc,OAAO,SAAiB,YAAqC;AACzE,YAAM,WAAW,IAAI,SAAS,SAAS,WAAW,KAAK,QAAQ;AAC/D,YAAM,mBAAmB,MAAM,KAAK;AAAA,QAClC;AAAA,MACF;AACA,UAAI,CAAC,kBAAkB;AAIrB,gBAAQ,MAAM,sDAAsD;AAAA,MACtE;AACA,aAAO,SAAS,SAAS,OAAO;AAAA,IAClC;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAe,OAAO,YAAqC;AACzD,YAAM,WAAW,IAAI,SAAS,SAAS,WAAW,KAAK,QAAQ;AAC/D,aAAO,SAAS,KAAK;AAAA,IACvB;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAAiB,OAAO,YAAqC;AAC3D,YAAM,WAAW,IAAI,SAAS,SAAS,WAAW,KAAK,QAAQ;AAC/D,aAAO,SAAS,OAAO;AAAA,IACzB;AAqBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAiB,4BAA4B,OAC3C,SACA,gBACqB;AACrB,YAAM,WAAW,IAAI,SAAS,SAAS,WAAW,KAAK,QAAQ;AAC/D,UAAI;AACF,eAAO,MAAM,SAAS,kBAAkB,WAAW;AAAA,MACrD,SAAS,KAAK;AAEZ,YACE,eAAe,SACf,IAAI,QAAQ,SAAS,uBAAuB,GAC5C;AACA,iBAAO;AAAA,QACT;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAa,OACX,SACA,aACA,YAOI;AACJ,YAAM,WAAW,MAAM,KAAK,iCAAiC,OAAO;AACpE,UAAI,CAAC,UAAU;AACb,cAAM,IAAI,MAAM,oCAAoC;AAAA,MACtD;AAEA,YAAM,CAAC,QAAQ,MAAM,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,QACjD,cAAc,MAAM,KAAK,eAAe,OAAO,CAAC;AAAA,QAChD,cAAc,MAAM,KAAK,aAAa,OAAO,CAAC;AAAA,QAC9C,UACI;AAAA,UAAc,MACZ,KAAK,YAAY,SAAS,OAAO,EAAE;AAAA,YAAK,CAAC,QACvC,IAAI,WAAW,SAAS,IACpB,oBAAoB,aAAa,KAAK,IAAI,IAC1C;AAAA,UACN;AAAA,QACF,IACA;AAAA,MACN,CAAC;AAED,UAAI;AACJ,UAAI,UAAU;AACZ,YAAI;AACF,gBAAM,WAAW,MAAM,aAAa,QAAQ;AAC5C,gBAAM,SAAS,MAAM,SAAS,KAAK;AACnC,kBAAQ,QAAQ;AAChB,cAAI,OAAO,WAAW,SAAS,GAAG;AAChC,oBAAQ,oBAAoB,aAAa,OAAO,IAAI;AAAA,UACtD;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAEA,aAAO;AAAA,QACL,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AA1ME,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+GA,MAAM,WAAW,SAAiB,SAAkC;AAClE,UAAM,WAAW,IAAI,SAAS,SAAS,WAAW,KAAK,QAAQ;AAC/D,WAAO,SAAS,QAAQ,OAAO;AAAA,EACjC;AAwFF","sourcesContent":["import { Contract } from '@ethersproject/contracts';\nimport type { Web3Provider } from '@ethersproject/providers';\nimport {\n timeoutFetch,\n ERC721_INTERFACE_ID,\n ERC721_METADATA_INTERFACE_ID,\n ERC721_ENUMERABLE_INTERFACE_ID,\n ERC721,\n safelyExecute,\n} from '@metamask/controller-utils';\nimport { abiERC721 } from '@metamask/metamask-eth-abis';\n\nimport { getFormattedIpfsUrl } from '../../../assetsUtil';\n\nexport class ERC721Standard {\n private readonly provider: Web3Provider;\n\n constructor(provider: Web3Provider) {\n this.provider = provider;\n }\n\n /**\n * Query if contract implements ERC721Metadata interface.\n *\n * @param address - ERC721 asset contract address.\n * @returns Promise resolving to whether the contract implements ERC721Metadata interface.\n */\n contractSupportsMetadataInterface = async (\n address: string,\n ): Promise<boolean> => {\n return this.contractSupportsInterface(\n address,\n ERC721_METADATA_INTERFACE_ID,\n );\n };\n\n /**\n * Query if contract implements ERC721Enumerable interface.\n *\n * @param address - ERC721 asset contract address.\n * @returns Promise resolving to whether the contract implements ERC721Enumerable interface.\n */\n contractSupportsEnumerableInterface = async (\n address: string,\n ): Promise<boolean> => {\n return this.contractSupportsInterface(\n address,\n ERC721_ENUMERABLE_INTERFACE_ID,\n );\n };\n\n /**\n * Query if contract implements ERC721 interface.\n *\n * @param address - ERC721 asset contract address.\n * @returns Promise resolving to whether the contract implements ERC721 interface.\n */\n contractSupportsBase721Interface = async (\n address: string,\n ): Promise<boolean> => {\n return this.contractSupportsInterface(address, ERC721_INTERFACE_ID);\n };\n\n /**\n * Enumerate assets assigned to an owner.\n *\n * @param address - ERC721 asset contract address.\n * @param selectedAddress - Current account public address.\n * @param index - An NFT counter less than `balanceOf(selectedAddress)`.\n * @returns Promise resolving to token identifier for the 'index'th asset assigned to 'selectedAddress'.\n */\n getNftTokenId = async (\n address: string,\n selectedAddress: string,\n index: number,\n ): Promise<string> => {\n const contract = new Contract(address, abiERC721, this.provider);\n return contract.tokenOfOwnerByIndex(selectedAddress, index);\n };\n\n /**\n * Query for tokenURI for a given asset.\n *\n * @param address - ERC721 asset contract address.\n * @param tokenId - ERC721 asset identifier.\n * @returns Promise resolving to the 'tokenURI'.\n */\n getTokenURI = async (address: string, tokenId: string): Promise<string> => {\n const contract = new Contract(address, abiERC721, this.provider);\n const supportsMetadata = await this.contractSupportsMetadataInterface(\n address,\n );\n if (!supportsMetadata) {\n // Do not throw error here, supporting Metadata interface is optional even though majority of ERC721 nfts do support it.\n // This change is made because of instances of NFTs that are ERC404( mixed ERC20 / ERC721 implementation).\n // As of today, ERC404 is unofficial but some people use it, the contract does not support Metadata interface, but it has the tokenURI() fct.\n console.error('Contract does not support ERC721 metadata interface.');\n }\n return contract.tokenURI(tokenId);\n };\n\n /**\n * Query for name for a given asset.\n *\n * @param address - ERC721 asset contract address.\n * @returns Promise resolving to the 'name'.\n */\n getAssetName = async (address: string): Promise<string> => {\n const contract = new Contract(address, abiERC721, this.provider);\n return contract.name();\n };\n\n /**\n * Query for symbol for a given asset.\n *\n * @param address - ERC721 asset contract address.\n * @returns Promise resolving to the 'symbol'.\n */\n getAssetSymbol = async (address: string): Promise<string> => {\n const contract = new Contract(address, abiERC721, this.provider);\n return contract.symbol();\n };\n\n /**\n * Query for owner for a given ERC721 asset.\n *\n * @param address - ERC721 asset contract address.\n * @param tokenId - ERC721 asset identifier.\n * @returns Promise resolving to the owner address.\n */\n async getOwnerOf(address: string, tokenId: string): Promise<string> {\n const contract = new Contract(address, abiERC721, this.provider);\n return contract.ownerOf(tokenId);\n }\n\n /**\n * Query if a contract implements an interface.\n *\n * @param address - Asset contract address.\n * @param interfaceId - Interface identifier.\n * @returns Promise resolving to whether the contract implements `interfaceID`.\n */\n private readonly contractSupportsInterface = async (\n address: string,\n interfaceId: string,\n ): Promise<boolean> => {\n const contract = new Contract(address, abiERC721, this.provider);\n try {\n return await contract.supportsInterface(interfaceId);\n } catch (err) {\n // Mirror previous implementation\n if (\n err instanceof Error &&\n err.message.includes('call revert exception')\n ) {\n return false;\n }\n throw err;\n }\n };\n\n /**\n * Query if a contract implements an interface.\n *\n * @param address - Asset contract address.\n * @param ipfsGateway - The user's preferred IPFS gateway.\n * @param tokenId - tokenId of a given token in the contract.\n * @returns Promise resolving an object containing the standard, tokenURI, symbol and name of the given contract/tokenId pair.\n */\n getDetails = async (\n address: string,\n ipfsGateway: string,\n tokenId?: string,\n ): Promise<{\n standard: string;\n tokenURI: string | undefined;\n symbol: string | undefined;\n name: string | undefined;\n image: string | undefined;\n }> => {\n const isERC721 = await this.contractSupportsBase721Interface(address);\n if (!isERC721) {\n throw new Error(\"This isn't a valid ERC721 contract\");\n }\n\n const [symbol, name, tokenURI] = await Promise.all([\n safelyExecute(() => this.getAssetSymbol(address)),\n safelyExecute(() => this.getAssetName(address)),\n tokenId\n ? safelyExecute(() =>\n this.getTokenURI(address, tokenId).then((uri) =>\n uri.startsWith('ipfs://')\n ? getFormattedIpfsUrl(ipfsGateway, uri, true)\n : uri,\n ),\n )\n : undefined,\n ]);\n\n let image;\n if (tokenURI) {\n try {\n const response = await timeoutFetch(tokenURI);\n const object = await response.json();\n image = object?.image;\n if (image?.startsWith('ipfs://')) {\n image = getFormattedIpfsUrl(ipfsGateway, image, true);\n }\n } catch {\n // ignore\n }\n }\n\n return {\n standard: ERC721,\n tokenURI,\n symbol,\n name,\n image,\n };\n };\n}\n"]}
@@ -1,115 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkMZI3SDQNjs = require('./chunk-MZI3SDQN.js');
4
-
5
- // src/Standards/ERC20Standard.ts
6
- var _util = require('@ethereumjs/util');
7
- var _contracts = require('@ethersproject/contracts');
8
- var _abiutils = require('@metamask/abi-utils');
9
- var _controllerutils = require('@metamask/controller-utils');
10
- var _metamaskethabis = require('@metamask/metamask-eth-abis');
11
- var _utils = require('@metamask/utils');
12
- var ERC20Standard = class {
13
- constructor(provider) {
14
- this.provider = provider;
15
- }
16
- /**
17
- * Get balance or count for current account on specific asset contract.
18
- *
19
- * @param address - Asset ERC20 contract address.
20
- * @param selectedAddress - Current account public address.
21
- * @returns Promise resolving to BN object containing balance for current account on specific asset contract.
22
- */
23
- async getBalanceOf(address, selectedAddress) {
24
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC20, this.provider);
25
- const balance = await contract.balanceOf(selectedAddress);
26
- return _chunkMZI3SDQNjs.ethersBigNumberToBN.call(void 0, balance);
27
- }
28
- /**
29
- * Query for the decimals for a given ERC20 asset.
30
- *
31
- * @param address - ERC20 asset contract string.
32
- * @returns Promise resolving to the 'decimals'.
33
- */
34
- async getTokenDecimals(address) {
35
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC20, this.provider);
36
- try {
37
- const decimals = await contract.decimals();
38
- return decimals.toString();
39
- } catch (err) {
40
- if (err instanceof Error && err.message.includes("call revert exception")) {
41
- throw new Error("Failed to parse token decimals");
42
- }
43
- throw err;
44
- }
45
- }
46
- /**
47
- * Query for the name for a given ERC20 asset.
48
- *
49
- * @param address - ERC20 asset contract string.
50
- * @returns Promise resolving to the 'name'.
51
- */
52
- async getTokenName(address) {
53
- const contract = new (0, _contracts.Contract)(address, _metamaskethabis.abiERC20, this.provider);
54
- try {
55
- const name = await contract.name();
56
- return name.toString();
57
- } catch (err) {
58
- if (err instanceof Error && err.message.includes("call revert exception")) {
59
- throw new Error("Failed to parse token name");
60
- }
61
- throw err;
62
- }
63
- }
64
- /**
65
- * Query for symbol for a given ERC20 asset.
66
- *
67
- * @param address - ERC20 asset contract address.
68
- * @returns Promise resolving to the 'symbol'.
69
- */
70
- async getTokenSymbol(address) {
71
- const payload = { to: address, data: "0x95d89b41" };
72
- const result = await this.provider.call(payload);
73
- _utils.assertIsStrictHexString.call(void 0, result);
74
- try {
75
- const decoded = _abiutils.decodeSingle.call(void 0, "string", result);
76
- if (decoded?.length > 0) {
77
- return decoded;
78
- }
79
- } catch {
80
- }
81
- try {
82
- const utf8 = _util.toUtf8.call(void 0, result);
83
- if (utf8.length > 0) {
84
- return utf8;
85
- }
86
- } catch {
87
- }
88
- throw new Error("Failed to parse token symbol");
89
- }
90
- /**
91
- * Query if a contract implements an interface.
92
- *
93
- * @param address - Asset contract address.
94
- * @param userAddress - The public address for the currently active user's account.
95
- * @returns Promise resolving an object containing the standard, decimals, symbol and balance of the given contract/userAddress pair.
96
- */
97
- async getDetails(address, userAddress) {
98
- const [decimals, symbol, balance] = await Promise.all([
99
- this.getTokenDecimals(address),
100
- this.getTokenSymbol(address),
101
- userAddress ? this.getBalanceOf(address, userAddress) : void 0
102
- ]);
103
- return {
104
- decimals,
105
- symbol,
106
- balance,
107
- standard: _controllerutils.ERC20
108
- };
109
- }
110
- };
111
-
112
-
113
-
114
- exports.ERC20Standard = ERC20Standard;
115
- //# sourceMappingURL=chunk-JCR4H6YL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/Standards/ERC20Standard.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,cAAc;AACvB,SAAS,gBAAgB;AAEzB,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AACtB,SAAS,gBAAgB;AACzB,SAAS,+BAA+B;AAKjC,IAAM,gBAAN,MAAoB;AAAA,EAGzB,YAAY,UAAwB;AAClC,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAAa,SAAiB,iBAAsC;AACxE,UAAM,WAAW,IAAI,SAAS,SAAS,UAAU,KAAK,QAAQ;AAC9D,UAAM,UAAU,MAAM,SAAS,UAAU,eAAe;AACxD,WAAO,oBAAoB,OAAO;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiB,SAAkC;AACvD,UAAM,WAAW,IAAI,SAAS,SAAS,UAAU,KAAK,QAAQ;AAC9D,QAAI;AACF,YAAM,WAAW,MAAM,SAAS,SAAS;AACzC,aAAO,SAAS,SAAS;AAAA,IAC3B,SAAS,KAAK;AAEZ,UACE,eAAe,SACf,IAAI,QAAQ,SAAS,uBAAuB,GAC5C;AACA,cAAM,IAAI,MAAM,gCAAgC;AAAA,MAClD;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAa,SAAkC;AACnD,UAAM,WAAW,IAAI,SAAS,SAAS,UAAU,KAAK,QAAQ;AAC9D,QAAI;AACF,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,aAAO,KAAK,SAAS;AAAA,IACvB,SAAS,KAAK;AAEZ,UACE,eAAe,SACf,IAAI,QAAQ,SAAS,uBAAuB,GAC5C;AACA,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eAAe,SAAkC;AAErD,UAAM,UAAU,EAAE,IAAI,SAAS,MAAM,aAAa;AAClD,UAAM,SAAS,MAAM,KAAK,SAAS,KAAK,OAAO;AAC/C,4BAAwB,MAAM;AAE9B,QAAI;AACF,YAAM,UAAU,aAAa,UAAU,MAAM;AAC7C,UAAI,SAAS,SAAS,GAAG;AACvB,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AAAA,IAER;AAGA,QAAI;AACF,YAAM,OAAO,OAAO,MAAM;AAC1B,UAAI,KAAK,SAAS,GAAG;AACnB,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WACJ,SACA,aAMC;AACD,UAAM,CAAC,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpD,KAAK,iBAAiB,OAAO;AAAA,MAC7B,KAAK,eAAe,OAAO;AAAA,MAC3B,cAAc,KAAK,aAAa,SAAS,WAAW,IAAI;AAAA,IAC1D,CAAC;AACD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AACF","sourcesContent":["import { toUtf8 } from '@ethereumjs/util';\nimport { Contract } from '@ethersproject/contracts';\nimport type { Web3Provider } from '@ethersproject/providers';\nimport { decodeSingle } from '@metamask/abi-utils';\nimport { ERC20 } from '@metamask/controller-utils';\nimport { abiERC20 } from '@metamask/metamask-eth-abis';\nimport { assertIsStrictHexString } from '@metamask/utils';\nimport type BN from 'bn.js';\n\nimport { ethersBigNumberToBN } from '../assetsUtil';\n\nexport class ERC20Standard {\n private readonly provider: Web3Provider;\n\n constructor(provider: Web3Provider) {\n this.provider = provider;\n }\n\n /**\n * Get balance or count for current account on specific asset contract.\n *\n * @param address - Asset ERC20 contract address.\n * @param selectedAddress - Current account public address.\n * @returns Promise resolving to BN object containing balance for current account on specific asset contract.\n */\n async getBalanceOf(address: string, selectedAddress: string): Promise<BN> {\n const contract = new Contract(address, abiERC20, this.provider);\n const balance = await contract.balanceOf(selectedAddress);\n return ethersBigNumberToBN(balance);\n }\n\n /**\n * Query for the decimals for a given ERC20 asset.\n *\n * @param address - ERC20 asset contract string.\n * @returns Promise resolving to the 'decimals'.\n */\n async getTokenDecimals(address: string): Promise<string> {\n const contract = new Contract(address, abiERC20, this.provider);\n try {\n const decimals = await contract.decimals();\n return decimals.toString();\n } catch (err) {\n // Mirror previous implementation\n if (\n err instanceof Error &&\n err.message.includes('call revert exception')\n ) {\n throw new Error('Failed to parse token decimals');\n }\n throw err;\n }\n }\n\n /**\n * Query for the name for a given ERC20 asset.\n *\n * @param address - ERC20 asset contract string.\n * @returns Promise resolving to the 'name'.\n */\n async getTokenName(address: string): Promise<string> {\n const contract = new Contract(address, abiERC20, this.provider);\n try {\n const name = await contract.name();\n return name.toString();\n } catch (err) {\n // Mirror previous implementation\n if (\n err instanceof Error &&\n err.message.includes('call revert exception')\n ) {\n throw new Error('Failed to parse token name');\n }\n throw err;\n }\n }\n\n /**\n * Query for symbol for a given ERC20 asset.\n *\n * @param address - ERC20 asset contract address.\n * @returns Promise resolving to the 'symbol'.\n */\n async getTokenSymbol(address: string): Promise<string> {\n // Signature for calling `symbol()`\n const payload = { to: address, data: '0x95d89b41' };\n const result = await this.provider.call(payload);\n assertIsStrictHexString(result);\n // Parse as string - treat empty string as failure\n try {\n const decoded = decodeSingle('string', result);\n if (decoded?.length > 0) {\n return decoded;\n }\n } catch {\n // Ignore error\n }\n\n // Parse as bytes - treat empty string as failure\n try {\n const utf8 = toUtf8(result);\n if (utf8.length > 0) {\n return utf8;\n }\n } catch {\n // Ignore error\n }\n\n throw new Error('Failed to parse token symbol');\n }\n\n /**\n * Query if a contract implements an interface.\n *\n * @param address - Asset contract address.\n * @param userAddress - The public address for the currently active user's account.\n * @returns Promise resolving an object containing the standard, decimals, symbol and balance of the given contract/userAddress pair.\n */\n async getDetails(\n address: string,\n userAddress?: string,\n ): Promise<{\n standard: string;\n symbol: string | undefined;\n decimals: string | undefined;\n balance: BN | undefined;\n }> {\n const [decimals, symbol, balance] = await Promise.all([\n this.getTokenDecimals(address),\n this.getTokenSymbol(address),\n userAddress ? this.getBalanceOf(address, userAddress) : undefined,\n ]);\n return {\n decimals,\n symbol,\n balance,\n standard: ERC20,\n };\n }\n}\n"]}
@@ -1,135 +0,0 @@
1
- import {
2
- __privateAdd,
3
- __privateGet,
4
- __privateSet
5
- } from "./chunk-XUI43LEZ.mjs";
6
-
7
- // src/TokenBalancesController.ts
8
- import { BaseController } from "@metamask/base-controller";
9
- import { safelyExecute, toHex } from "@metamask/controller-utils";
10
- var DEFAULT_INTERVAL = 18e4;
11
- var controllerName = "TokenBalancesController";
12
- var metadata = {
13
- contractBalances: { persist: true, anonymous: false }
14
- };
15
- function getDefaultTokenBalancesState() {
16
- return {
17
- contractBalances: {}
18
- };
19
- }
20
- var _handle, _interval, _tokens, _disabled;
21
- var TokenBalancesController = class extends BaseController {
22
- /**
23
- * Construct a Token Balances Controller.
24
- *
25
- * @param options - The controller options.
26
- * @param options.interval - Polling interval used to fetch new token balances.
27
- * @param options.tokens - List of tokens to track balances for.
28
- * @param options.disabled - If set to true, all tracked tokens contract balances updates are blocked.
29
- * @param options.state - Initial state to set on this controller.
30
- * @param options.messenger - The controller restricted messenger.
31
- */
32
- constructor({
33
- interval = DEFAULT_INTERVAL,
34
- tokens = [],
35
- disabled = false,
36
- messenger,
37
- state = {}
38
- }) {
39
- super({
40
- name: controllerName,
41
- metadata,
42
- messenger,
43
- state: {
44
- ...getDefaultTokenBalancesState(),
45
- ...state
46
- }
47
- });
48
- __privateAdd(this, _handle, void 0);
49
- __privateAdd(this, _interval, void 0);
50
- __privateAdd(this, _tokens, void 0);
51
- __privateAdd(this, _disabled, void 0);
52
- __privateSet(this, _disabled, disabled);
53
- __privateSet(this, _interval, interval);
54
- __privateSet(this, _tokens, tokens);
55
- this.messagingSystem.subscribe(
56
- "TokensController:stateChange",
57
- ({ tokens: newTokens, detectedTokens }) => {
58
- __privateSet(this, _tokens, [...newTokens, ...detectedTokens]);
59
- this.updateBalances();
60
- }
61
- );
62
- this.poll();
63
- }
64
- /**
65
- * Allows controller to update tracked tokens contract balances.
66
- */
67
- enable() {
68
- __privateSet(this, _disabled, false);
69
- }
70
- /**
71
- * Blocks controller from updating tracked tokens contract balances.
72
- */
73
- disable() {
74
- __privateSet(this, _disabled, true);
75
- }
76
- /**
77
- * Starts a new polling interval.
78
- *
79
- * @param interval - Polling interval used to fetch new token balances.
80
- */
81
- async poll(interval) {
82
- if (interval) {
83
- __privateSet(this, _interval, interval);
84
- }
85
- if (__privateGet(this, _handle)) {
86
- clearTimeout(__privateGet(this, _handle));
87
- }
88
- await safelyExecute(() => this.updateBalances());
89
- __privateSet(this, _handle, setTimeout(() => {
90
- this.poll(__privateGet(this, _interval));
91
- }, __privateGet(this, _interval)));
92
- }
93
- /**
94
- * Updates balances for all tokens.
95
- */
96
- async updateBalances() {
97
- if (__privateGet(this, _disabled)) {
98
- return;
99
- }
100
- const selectedInternalAccount = this.messagingSystem.call(
101
- "AccountsController:getSelectedAccount"
102
- );
103
- const newContractBalances = {};
104
- for (const token of __privateGet(this, _tokens)) {
105
- const { address } = token;
106
- try {
107
- const balance = await this.messagingSystem.call(
108
- "AssetsContractController:getERC20BalanceOf",
109
- address,
110
- selectedInternalAccount.address
111
- );
112
- newContractBalances[address] = toHex(balance);
113
- token.hasBalanceError = false;
114
- } catch (error) {
115
- newContractBalances[address] = toHex(0);
116
- token.hasBalanceError = true;
117
- }
118
- }
119
- this.update((state) => {
120
- state.contractBalances = newContractBalances;
121
- });
122
- }
123
- };
124
- _handle = new WeakMap();
125
- _interval = new WeakMap();
126
- _tokens = new WeakMap();
127
- _disabled = new WeakMap();
128
- var TokenBalancesController_default = TokenBalancesController;
129
-
130
- export {
131
- getDefaultTokenBalancesState,
132
- TokenBalancesController,
133
- TokenBalancesController_default
134
- };
135
- //# sourceMappingURL=chunk-JJX7TMH5.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/TokenBalancesController.ts"],"sourcesContent":["import type { AccountsControllerGetSelectedAccountAction } from '@metamask/accounts-controller';\nimport type {\n RestrictedControllerMessenger,\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport { safelyExecute, toHex } from '@metamask/controller-utils';\n\nimport type { AssetsContractControllerGetERC20BalanceOfAction } from './AssetsContractController';\nimport type { Token } from './TokenRatesController';\nimport type { TokensControllerStateChangeEvent } from './TokensController';\n\nconst DEFAULT_INTERVAL = 180000;\n\nconst controllerName = 'TokenBalancesController';\n\nconst metadata = {\n contractBalances: { persist: true, anonymous: false },\n};\n\n/**\n * Token balances controller options\n * @property interval - Polling interval used to fetch new token balances.\n * @property tokens - List of tokens to track balances for.\n * @property disabled - If set to true, all tracked tokens contract balances updates are blocked.\n */\ntype TokenBalancesControllerOptions = {\n interval?: number;\n tokens?: Token[];\n disabled?: boolean;\n messenger: TokenBalancesControllerMessenger;\n state?: Partial<TokenBalancesControllerState>;\n};\n\n/**\n * Represents a mapping of hash token contract addresses to their balances.\n */\ntype ContractBalances = Record<string, string>;\n\n/**\n * Token balances controller state\n * @property contractBalances - Hash of token contract addresses to balances\n */\nexport type TokenBalancesControllerState = {\n contractBalances: ContractBalances;\n};\n\nexport type TokenBalancesControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n TokenBalancesControllerState\n>;\n\nexport type TokenBalancesControllerActions =\n TokenBalancesControllerGetStateAction;\n\nexport type AllowedActions =\n | AccountsControllerGetSelectedAccountAction\n | AssetsContractControllerGetERC20BalanceOfAction;\n\nexport type TokenBalancesControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n TokenBalancesControllerState\n >;\n\nexport type TokenBalancesControllerEvents =\n TokenBalancesControllerStateChangeEvent;\n\nexport type AllowedEvents = TokensControllerStateChangeEvent;\n\nexport type TokenBalancesControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n TokenBalancesControllerActions | AllowedActions,\n TokenBalancesControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Get the default TokenBalancesController state.\n *\n * @returns The default TokenBalancesController state.\n */\nexport function getDefaultTokenBalancesState(): TokenBalancesControllerState {\n return {\n contractBalances: {},\n };\n}\n\n/**\n * Controller that passively polls on a set interval token balances\n * for tokens stored in the TokensController\n */\nexport class TokenBalancesController extends BaseController<\n typeof controllerName,\n TokenBalancesControllerState,\n TokenBalancesControllerMessenger\n> {\n #handle?: ReturnType<typeof setTimeout>;\n\n #interval: number;\n\n #tokens: Token[];\n\n #disabled: boolean;\n\n /**\n * Construct a Token Balances Controller.\n *\n * @param options - The controller options.\n * @param options.interval - Polling interval used to fetch new token balances.\n * @param options.tokens - List of tokens to track balances for.\n * @param options.disabled - If set to true, all tracked tokens contract balances updates are blocked.\n * @param options.state - Initial state to set on this controller.\n * @param options.messenger - The controller restricted messenger.\n */\n constructor({\n interval = DEFAULT_INTERVAL,\n tokens = [],\n disabled = false,\n messenger,\n state = {},\n }: TokenBalancesControllerOptions) {\n super({\n name: controllerName,\n metadata,\n messenger,\n state: {\n ...getDefaultTokenBalancesState(),\n ...state,\n },\n });\n\n this.#disabled = disabled;\n this.#interval = interval;\n this.#tokens = tokens;\n\n this.messagingSystem.subscribe(\n 'TokensController:stateChange',\n ({ tokens: newTokens, detectedTokens }) => {\n this.#tokens = [...newTokens, ...detectedTokens];\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.updateBalances();\n },\n );\n\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.poll();\n }\n\n /**\n * Allows controller to update tracked tokens contract balances.\n */\n enable() {\n this.#disabled = false;\n }\n\n /**\n * Blocks controller from updating tracked tokens contract balances.\n */\n disable() {\n this.#disabled = true;\n }\n\n /**\n * Starts a new polling interval.\n *\n * @param interval - Polling interval used to fetch new token balances.\n */\n async poll(interval?: number): Promise<void> {\n if (interval) {\n this.#interval = interval;\n }\n\n if (this.#handle) {\n clearTimeout(this.#handle);\n }\n\n await safelyExecute(() => this.updateBalances());\n\n this.#handle = setTimeout(() => {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.poll(this.#interval);\n }, this.#interval);\n }\n\n /**\n * Updates balances for all tokens.\n */\n async updateBalances() {\n if (this.#disabled) {\n return;\n }\n const selectedInternalAccount = this.messagingSystem.call(\n 'AccountsController:getSelectedAccount',\n );\n\n const newContractBalances: ContractBalances = {};\n for (const token of this.#tokens) {\n const { address } = token;\n try {\n const balance = await this.messagingSystem.call(\n 'AssetsContractController:getERC20BalanceOf',\n address,\n selectedInternalAccount.address,\n );\n newContractBalances[address] = toHex(balance);\n token.hasBalanceError = false;\n } catch (error) {\n newContractBalances[address] = toHex(0);\n token.hasBalanceError = true;\n }\n }\n\n this.update((state) => {\n state.contractBalances = newContractBalances;\n });\n }\n}\n\nexport default TokenBalancesController;\n"],"mappings":";;;;;;;AAMA,SAAS,sBAAsB;AAC/B,SAAS,eAAe,aAAa;AAMrC,IAAM,mBAAmB;AAEzB,IAAM,iBAAiB;AAEvB,IAAM,WAAW;AAAA,EACf,kBAAkB,EAAE,SAAS,MAAM,WAAW,MAAM;AACtD;AAiEO,SAAS,+BAA6D;AAC3E,SAAO;AAAA,IACL,kBAAkB,CAAC;AAAA,EACrB;AACF;AAxFA;AA8FO,IAAM,0BAAN,cAAsC,eAI3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,YAAY;AAAA,IACV,WAAW;AAAA,IACX,SAAS,CAAC;AAAA,IACV,WAAW;AAAA,IACX;AAAA,IACA,QAAQ,CAAC;AAAA,EACX,GAAmC;AACjC,UAAM;AAAA,MACJ,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,OAAO;AAAA,QACL,GAAG,6BAA6B;AAAA,QAChC,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AAjCH;AAEA;AAEA;AAEA;AA6BE,uBAAK,WAAY;AACjB,uBAAK,WAAY;AACjB,uBAAK,SAAU;AAEf,SAAK,gBAAgB;AAAA,MACnB;AAAA,MACA,CAAC,EAAE,QAAQ,WAAW,eAAe,MAAM;AACzC,2BAAK,SAAU,CAAC,GAAG,WAAW,GAAG,cAAc;AAG/C,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAIA,SAAK,KAAK;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS;AACP,uBAAK,WAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU;AACR,uBAAK,WAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAK,UAAkC;AAC3C,QAAI,UAAU;AACZ,yBAAK,WAAY;AAAA,IACnB;AAEA,QAAI,mBAAK,UAAS;AAChB,mBAAa,mBAAK,QAAO;AAAA,IAC3B;AAEA,UAAM,cAAc,MAAM,KAAK,eAAe,CAAC;AAE/C,uBAAK,SAAU,WAAW,MAAM;AAG9B,WAAK,KAAK,mBAAK,UAAS;AAAA,IAC1B,GAAG,mBAAK,UAAS;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB;AACrB,QAAI,mBAAK,YAAW;AAClB;AAAA,IACF;AACA,UAAM,0BAA0B,KAAK,gBAAgB;AAAA,MACnD;AAAA,IACF;AAEA,UAAM,sBAAwC,CAAC;AAC/C,eAAW,SAAS,mBAAK,UAAS;AAChC,YAAM,EAAE,QAAQ,IAAI;AACpB,UAAI;AACF,cAAM,UAAU,MAAM,KAAK,gBAAgB;AAAA,UACzC;AAAA,UACA;AAAA,UACA,wBAAwB;AAAA,QAC1B;AACA,4BAAoB,OAAO,IAAI,MAAM,OAAO;AAC5C,cAAM,kBAAkB;AAAA,MAC1B,SAAS,OAAO;AACd,4BAAoB,OAAO,IAAI,MAAM,CAAC;AACtC,cAAM,kBAAkB;AAAA,MAC1B;AAAA,IACF;AAEA,SAAK,OAAO,CAAC,UAAU;AACrB,YAAM,mBAAmB;AAAA,IAC3B,CAAC;AAAA,EACH;AACF;AA3HE;AAEA;AAEA;AAEA;AAuHF,IAAO,kCAAQ;","names":[]}
@@ -1,68 +0,0 @@
1
- // src/crypto-compare-service/crypto-compare.ts
2
- import { handleFetch } from "@metamask/controller-utils";
3
- var nativeSymbolOverrides = /* @__PURE__ */ new Map([["MNT", "MANTLE"]]);
4
- var CRYPTO_COMPARE_DOMAIN = "https://min-api.cryptocompare.com";
5
- function getPricingURL(currentCurrency, nativeCurrency, includeUSDRate) {
6
- nativeCurrency = nativeCurrency.toUpperCase();
7
- const fsym = nativeSymbolOverrides.get(nativeCurrency) ?? nativeCurrency;
8
- return `${CRYPTO_COMPARE_DOMAIN}/data/price?fsym=${fsym}&tsyms=${currentCurrency.toUpperCase()}${includeUSDRate && currentCurrency.toUpperCase() !== "USD" ? ",USD" : ""}`;
9
- }
10
- function getMultiPricingURL(fsyms, tsyms, includeUSDRate = false) {
11
- const updatedTsyms = includeUSDRate && !tsyms.includes("USD") ? `${tsyms},USD` : tsyms;
12
- const params = new URLSearchParams();
13
- params.append("fsyms", fsyms);
14
- params.append("tsyms", updatedTsyms);
15
- const url = new URL(`${CRYPTO_COMPARE_DOMAIN}/data/pricemulti`);
16
- url.search = params.toString();
17
- return url.toString();
18
- }
19
- function handleErrorResponse(json) {
20
- if (json.Response === "Error") {
21
- throw new Error(json.Message);
22
- }
23
- }
24
- async function fetchExchangeRate(currency, nativeCurrency, includeUSDRate) {
25
- const json = await handleFetch(
26
- getPricingURL(currency, nativeCurrency, includeUSDRate)
27
- );
28
- handleErrorResponse(json);
29
- const conversionRate = Number(json[currency.toUpperCase()]);
30
- const usdConversionRate = Number(json.USD);
31
- if (!Number.isFinite(conversionRate)) {
32
- throw new Error(
33
- `Invalid response for ${currency.toUpperCase()}: ${// TODO: Either fix this lint violation or explain why it's necessary to ignore.
34
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
35
- json[currency.toUpperCase()]}`
36
- );
37
- }
38
- if (includeUSDRate && !Number.isFinite(usdConversionRate)) {
39
- throw new Error(`Invalid response for usdConversionRate: ${json.USD}`);
40
- }
41
- return {
42
- conversionRate,
43
- usdConversionRate
44
- };
45
- }
46
- async function fetchMultiExchangeRate(fiatCurrency, cryptocurrencies, includeUSDRate) {
47
- const url = getMultiPricingURL(
48
- Object.values(cryptocurrencies).join(","),
49
- fiatCurrency,
50
- includeUSDRate
51
- );
52
- const response = await handleFetch(url);
53
- handleErrorResponse(response);
54
- const rates = {};
55
- for (const [cryptocurrency, values] of Object.entries(response)) {
56
- rates[cryptocurrency.toLowerCase()] = {
57
- [fiatCurrency.toLowerCase()]: values[fiatCurrency.toUpperCase()],
58
- ...includeUSDRate && { usd: values.USD }
59
- };
60
- }
61
- return rates;
62
- }
63
-
64
- export {
65
- fetchExchangeRate,
66
- fetchMultiExchangeRate
67
- };
68
- //# sourceMappingURL=chunk-JTXPJ6TK.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/crypto-compare-service/crypto-compare.ts"],"sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\n\n/**\n * A map from native currency symbol to CryptoCompare identifier.\n * This is only needed when the values don't match.\n */\nconst nativeSymbolOverrides = new Map([['MNT', 'MANTLE']]);\n\nconst CRYPTO_COMPARE_DOMAIN = 'https://min-api.cryptocompare.com';\n\n/**\n * Get the CryptoCompare API URL for getting the conversion rate from the given native currency to\n * the given currency. Optionally, the conversion rate from the native currency to USD can also be\n * included in the response.\n *\n * @param currentCurrency - The currency to get a conversion rate for.\n * @param nativeCurrency - The native currency to convert from.\n * @param includeUSDRate - Whether or not the native currency to USD conversion rate should be\n * included in the response as well.\n * @returns The API URL for getting the conversion rate.\n */\nfunction getPricingURL(\n currentCurrency: string,\n nativeCurrency: string,\n includeUSDRate?: boolean,\n) {\n nativeCurrency = nativeCurrency.toUpperCase();\n const fsym = nativeSymbolOverrides.get(nativeCurrency) ?? nativeCurrency;\n return (\n `${CRYPTO_COMPARE_DOMAIN}/data/price?fsym=` +\n `${fsym}&tsyms=${currentCurrency.toUpperCase()}` +\n `${includeUSDRate && currentCurrency.toUpperCase() !== 'USD' ? ',USD' : ''}`\n );\n}\n\n/**\n * Get the CryptoCompare API URL for getting the conversion rate from a given array of native currencies\n * to the given currency. Optionally, the conversion rate from the native currency to USD can also be\n * included in the response.\n *\n * @param fsyms - The native currencies to get conversion rates for.\n * @param tsyms - The currency to convert to.\n * @param includeUSDRate - Whether or not the native currency to USD conversion rate should be included.\n * @returns The API URL for getting the conversion rates.\n */\nfunction getMultiPricingURL(\n fsyms: string,\n tsyms: string,\n includeUSDRate = false,\n) {\n const updatedTsyms =\n includeUSDRate && !tsyms.includes('USD') ? `${tsyms},USD` : tsyms;\n\n const params = new URLSearchParams();\n params.append('fsyms', fsyms);\n params.append('tsyms', updatedTsyms);\n\n const url = new URL(`${CRYPTO_COMPARE_DOMAIN}/data/pricemulti`);\n url.search = params.toString();\n\n return url.toString();\n}\n\n/**\n * Handles an error response from the CryptoCompare API.\n * Expected error response format\n * { Response: \"Error\", Message: \"...\", HasWarning: false }\n *\n * @param json - The JSON response from the CryptoCompare API.\n * @param json.Response - The response status.\n * @param json.Message - The error message.\n */\n// TODO: Either fix this lint violation or explain why it's necessary to ignore.\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction handleErrorResponse(json: { Response?: string; Message?: string }) {\n if (json.Response === 'Error') {\n throw new Error(json.Message);\n }\n}\n\n/**\n * Fetches the exchange rate for a given currency.\n *\n * @param currency - ISO 4217 currency code.\n * @param nativeCurrency - Symbol for base asset.\n * @param includeUSDRate - Whether to add the USD rate to the fetch.\n * @returns Promise resolving to exchange rate for given currency.\n */\nexport async function fetchExchangeRate(\n currency: string,\n nativeCurrency: string,\n includeUSDRate?: boolean,\n): Promise<{\n conversionRate: number;\n usdConversionRate: number;\n}> {\n const json = await handleFetch(\n getPricingURL(currency, nativeCurrency, includeUSDRate),\n );\n\n handleErrorResponse(json);\n const conversionRate = Number(json[currency.toUpperCase()]);\n\n const usdConversionRate = Number(json.USD);\n if (!Number.isFinite(conversionRate)) {\n throw new Error(\n `Invalid response for ${currency.toUpperCase()}: ${\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n json[currency.toUpperCase()]\n }`,\n );\n }\n\n if (includeUSDRate && !Number.isFinite(usdConversionRate)) {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Invalid response for usdConversionRate: ${json.USD}`);\n }\n\n return {\n conversionRate,\n usdConversionRate,\n };\n}\n\n/**\n * Fetches the exchange rates for multiple currencies.\n *\n * @param fiatCurrency - The currency of the rates (ISO 4217).\n * @param cryptocurrencies - The cryptocurrencies to get conversion rates for. Min length: 1. Max length: 300.\n * @param includeUSDRate - Whether to add the USD rate to the fetch.\n * @returns Promise resolving to exchange rates for given currencies.\n */\nexport async function fetchMultiExchangeRate(\n fiatCurrency: string,\n cryptocurrencies: string[],\n includeUSDRate: boolean,\n): Promise<Record<string, Record<string, string>>> {\n const url = getMultiPricingURL(\n Object.values(cryptocurrencies).join(','),\n fiatCurrency,\n includeUSDRate,\n );\n const response = await handleFetch(url);\n handleErrorResponse(response);\n\n const rates: Record<string, Record<string, string>> = {};\n for (const [cryptocurrency, values] of Object.entries(response) as [\n string,\n Record<string, string>,\n ][]) {\n rates[cryptocurrency.toLowerCase()] = {\n [fiatCurrency.toLowerCase()]: values[fiatCurrency.toUpperCase()],\n ...(includeUSDRate && { usd: values.USD }),\n };\n }\n\n return rates;\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAM5B,IAAM,wBAAwB,oBAAI,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEzD,IAAM,wBAAwB;AAa9B,SAAS,cACP,iBACA,gBACA,gBACA;AACA,mBAAiB,eAAe,YAAY;AAC5C,QAAM,OAAO,sBAAsB,IAAI,cAAc,KAAK;AAC1D,SACE,GAAG,qBAAqB,oBACrB,IAAI,UAAU,gBAAgB,YAAY,CAAC,GAC3C,kBAAkB,gBAAgB,YAAY,MAAM,QAAQ,SAAS,EAAE;AAE9E;AAYA,SAAS,mBACP,OACA,OACA,iBAAiB,OACjB;AACA,QAAM,eACJ,kBAAkB,CAAC,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,SAAS;AAE9D,QAAM,SAAS,IAAI,gBAAgB;AACnC,SAAO,OAAO,SAAS,KAAK;AAC5B,SAAO,OAAO,SAAS,YAAY;AAEnC,QAAM,MAAM,IAAI,IAAI,GAAG,qBAAqB,kBAAkB;AAC9D,MAAI,SAAS,OAAO,SAAS;AAE7B,SAAO,IAAI,SAAS;AACtB;AAaA,SAAS,oBAAoB,MAA+C;AAC1E,MAAI,KAAK,aAAa,SAAS;AAC7B,UAAM,IAAI,MAAM,KAAK,OAAO;AAAA,EAC9B;AACF;AAUA,eAAsB,kBACpB,UACA,gBACA,gBAIC;AACD,QAAM,OAAO,MAAM;AAAA,IACjB,cAAc,UAAU,gBAAgB,cAAc;AAAA,EACxD;AAEA,sBAAoB,IAAI;AACxB,QAAM,iBAAiB,OAAO,KAAK,SAAS,YAAY,CAAC,CAAC;AAE1D,QAAM,oBAAoB,OAAO,KAAK,GAAG;AACzC,MAAI,CAAC,OAAO,SAAS,cAAc,GAAG;AACpC,UAAM,IAAI;AAAA,MACR,wBAAwB,SAAS,YAAY,CAAC;AAAA;AAAA,MAG5C,KAAK,SAAS,YAAY,CAAC,CAC7B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,kBAAkB,CAAC,OAAO,SAAS,iBAAiB,GAAG;AAGzD,UAAM,IAAI,MAAM,2CAA2C,KAAK,GAAG,EAAE;AAAA,EACvE;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAUA,eAAsB,uBACpB,cACA,kBACA,gBACiD;AACjD,QAAM,MAAM;AAAA,IACV,OAAO,OAAO,gBAAgB,EAAE,KAAK,GAAG;AAAA,IACxC;AAAA,IACA;AAAA,EACF;AACA,QAAM,WAAW,MAAM,YAAY,GAAG;AACtC,sBAAoB,QAAQ;AAE5B,QAAM,QAAgD,CAAC;AACvD,aAAW,CAAC,gBAAgB,MAAM,KAAK,OAAO,QAAQ,QAAQ,GAGzD;AACH,UAAM,eAAe,YAAY,CAAC,IAAI;AAAA,MACpC,CAAC,aAAa,YAAY,CAAC,GAAG,OAAO,aAAa,YAAY,CAAC;AAAA,MAC/D,GAAI,kBAAkB,EAAE,KAAK,OAAO,IAAI;AAAA,IAC1C;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-JYHAAA6W.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,85 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkMZI3SDQNjs = require('./chunk-MZI3SDQN.js');
4
-
5
- // src/token-service.ts
6
-
7
-
8
-
9
-
10
- var _controllerutils = require('@metamask/controller-utils');
11
- var TOKEN_END_POINT_API = "https://token.api.cx.metamask.io";
12
- var TOKEN_METADATA_NO_SUPPORT_ERROR = "TokenService Error: Network does not support fetchTokenMetadata";
13
- function getTokensURL(chainId) {
14
- const occurrenceFloor = chainId === _controllerutils.ChainId["linea-mainnet"] ? 1 : 3;
15
- return `${TOKEN_END_POINT_API}/tokens/${_controllerutils.convertHexToDecimal.call(void 0,
16
- chainId
17
- )}?occurrenceFloor=${occurrenceFloor}&includeNativeAssets=false&includeDuplicateSymbolAssets=false&includeTokenFees=false&includeAssetType=false&includeERC20Permit=false&includeStorage=false`;
18
- }
19
- function getTokenMetadataURL(chainId, tokenAddress) {
20
- return `${TOKEN_END_POINT_API}/token/${_controllerutils.convertHexToDecimal.call(void 0,
21
- chainId
22
- )}?address=${tokenAddress}`;
23
- }
24
- var tenSecondsInMilliseconds = 1e4;
25
- var defaultTimeout = tenSecondsInMilliseconds;
26
- async function fetchTokenListByChainId(chainId, abortSignal, { timeout = defaultTimeout } = {}) {
27
- const tokenURL = getTokensURL(chainId);
28
- const response = await queryApi(tokenURL, abortSignal, timeout);
29
- if (response) {
30
- const result = await parseJsonResponse(response);
31
- if (Array.isArray(result) && chainId === _controllerutils.ChainId["linea-mainnet"]) {
32
- return result.filter(
33
- (elm) => elm.aggregators.includes("lineaTeam") || elm.aggregators.length >= 3
34
- );
35
- }
36
- return result;
37
- }
38
- return void 0;
39
- }
40
- async function fetchTokenMetadata(chainId, tokenAddress, abortSignal, { timeout = defaultTimeout } = {}) {
41
- if (!_chunkMZI3SDQNjs.isTokenListSupportedForNetwork.call(void 0, chainId)) {
42
- throw new Error(TOKEN_METADATA_NO_SUPPORT_ERROR);
43
- }
44
- const tokenMetadataURL = getTokenMetadataURL(chainId, tokenAddress);
45
- const response = await queryApi(tokenMetadataURL, abortSignal, timeout);
46
- if (response) {
47
- return parseJsonResponse(response);
48
- }
49
- return void 0;
50
- }
51
- async function queryApi(apiURL, abortSignal, timeout) {
52
- const fetchOptions = {
53
- referrer: apiURL,
54
- referrerPolicy: "no-referrer-when-downgrade",
55
- method: "GET",
56
- mode: "cors",
57
- signal: abortSignal,
58
- cache: "default"
59
- };
60
- fetchOptions.headers = new window.Headers();
61
- fetchOptions.headers.set("Content-Type", "application/json");
62
- try {
63
- return await _controllerutils.timeoutFetch.call(void 0, apiURL, fetchOptions, timeout);
64
- } catch (error) {
65
- if (error instanceof Error && error.name === "AbortError") {
66
- console.log("Request is aborted");
67
- }
68
- }
69
- return void 0;
70
- }
71
- async function parseJsonResponse(apiResponse) {
72
- const responseObj = await apiResponse.json();
73
- if (responseObj?.error) {
74
- throw new Error(`TokenService Error: ${responseObj.error}`);
75
- }
76
- return responseObj;
77
- }
78
-
79
-
80
-
81
-
82
-
83
-
84
- exports.TOKEN_END_POINT_API = TOKEN_END_POINT_API; exports.TOKEN_METADATA_NO_SUPPORT_ERROR = TOKEN_METADATA_NO_SUPPORT_ERROR; exports.fetchTokenListByChainId = fetchTokenListByChainId; exports.fetchTokenMetadata = fetchTokenMetadata;
85
- //# sourceMappingURL=chunk-K7A3EOIM.js.map