@metamask/assets-controllers 38.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.
- package/CHANGELOG.md +27 -1
- package/dist/AccountTrackerController.cjs +245 -0
- package/dist/AccountTrackerController.cjs.map +1 -0
- package/dist/{types/AccountTrackerController.d.ts → AccountTrackerController.d.cts} +6 -6
- package/dist/AccountTrackerController.d.cts.map +1 -0
- package/dist/AccountTrackerController.d.mts +112 -0
- package/dist/AccountTrackerController.d.mts.map +1 -0
- package/dist/AccountTrackerController.mjs +244 -8
- package/dist/AccountTrackerController.mjs.map +1 -1
- package/dist/AssetsContractController.cjs +389 -0
- package/dist/AssetsContractController.cjs.map +1 -0
- package/dist/{types/AssetsContractController.d.ts → AssetsContractController.d.cts} +9 -9
- package/dist/AssetsContractController.d.cts.map +1 -0
- package/dist/AssetsContractController.d.mts +277 -0
- package/dist/AssetsContractController.d.mts.map +1 -0
- package/dist/AssetsContractController.mjs +387 -16
- package/dist/AssetsContractController.mjs.map +1 -1
- package/dist/CurrencyRateController.cjs +156 -0
- package/dist/CurrencyRateController.cjs.map +1 -0
- package/dist/{types/CurrencyRateController.d.ts → CurrencyRateController.d.cts} +5 -5
- package/dist/CurrencyRateController.d.cts.map +1 -0
- package/dist/CurrencyRateController.d.mts +80 -0
- package/dist/CurrencyRateController.d.mts.map +1 -0
- package/dist/CurrencyRateController.mjs +150 -10
- package/dist/CurrencyRateController.mjs.map +1 -1
- package/dist/NftController.cjs +1159 -0
- package/dist/NftController.cjs.map +1 -0
- package/dist/{types/NftController.d.ts → NftController.d.cts} +11 -11
- package/dist/NftController.d.cts.map +1 -0
- package/dist/NftController.d.mts +424 -0
- package/dist/NftController.d.mts.map +1 -0
- package/dist/NftController.mjs +1156 -12
- package/dist/NftController.mjs.map +1 -1
- package/dist/NftDetectionController.cjs +237 -0
- package/dist/NftDetectionController.cjs.map +1 -0
- package/dist/{types/NftDetectionController.d.ts → NftDetectionController.d.cts} +9 -9
- package/dist/NftDetectionController.d.cts.map +1 -0
- package/dist/NftDetectionController.d.mts +368 -0
- package/dist/NftDetectionController.d.mts.map +1 -0
- package/dist/NftDetectionController.mjs +231 -14
- package/dist/NftDetectionController.mjs.map +1 -1
- package/dist/RatesController/RatesController.cjs +189 -0
- package/dist/RatesController/RatesController.cjs.map +1 -0
- package/dist/{types/RatesController/RatesController.d.ts → RatesController/RatesController.d.cts} +3 -3
- package/dist/RatesController/RatesController.d.cts.map +1 -0
- package/dist/RatesController/RatesController.d.mts +44 -0
- package/dist/RatesController/RatesController.d.mts.map +1 -0
- package/dist/RatesController/RatesController.mjs +183 -12
- package/dist/RatesController/RatesController.mjs.map +1 -1
- package/dist/RatesController/index.cjs +7 -0
- package/dist/RatesController/index.cjs.map +1 -0
- package/dist/{types/RatesController/index.d.ts → RatesController/index.d.cts} +3 -3
- package/dist/RatesController/index.d.cts.map +1 -0
- package/dist/RatesController/index.d.mts +3 -0
- package/dist/RatesController/index.d.mts.map +1 -0
- package/dist/RatesController/index.mjs +1 -12
- package/dist/RatesController/index.mjs.map +1 -1
- package/dist/RatesController/types.cjs +3 -0
- package/dist/RatesController/types.cjs.map +1 -0
- package/dist/{types/RatesController/types.d.ts → RatesController/types.d.cts} +4 -4
- package/dist/RatesController/types.d.cts.map +1 -0
- package/dist/RatesController/types.d.mts +100 -0
- package/dist/RatesController/types.d.mts.map +1 -0
- package/dist/RatesController/types.mjs +1 -0
- package/dist/RatesController/types.mjs.map +1 -1
- package/dist/Standards/ERC20Standard.cjs +124 -0
- package/dist/Standards/ERC20Standard.cjs.map +1 -0
- package/dist/{types/Standards/ERC20Standard.d.ts → Standards/ERC20Standard.d.cts} +3 -3
- package/dist/Standards/ERC20Standard.d.cts.map +1 -0
- package/dist/Standards/ERC20Standard.d.mts +49 -0
- package/dist/Standards/ERC20Standard.d.mts.map +1 -0
- package/dist/Standards/ERC20Standard.mjs +121 -8
- package/dist/Standards/ERC20Standard.mjs.map +1 -1
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.cjs +189 -0
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.cjs.map +1 -0
- package/dist/{types/Standards/NftStandards/ERC1155/ERC1155Standard.d.ts → Standards/NftStandards/ERC1155/ERC1155Standard.d.cts} +3 -3
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.d.cts.map +1 -0
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.d.mts +95 -0
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.d.mts.map +1 -0
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.mjs +184 -8
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.mjs.map +1 -1
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.cjs +167 -0
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.cjs.map +1 -0
- package/dist/{types/Standards/NftStandards/ERC721/ERC721Standard.d.ts → Standards/NftStandards/ERC721/ERC721Standard.d.cts} +2 -2
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.d.cts.map +1 -0
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.d.mts +89 -0
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.d.mts.map +1 -0
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.mjs +162 -8
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.mjs.map +1 -1
- package/dist/TokenBalancesController.cjs +136 -0
- package/dist/TokenBalancesController.cjs.map +1 -0
- package/dist/{types/TokenBalancesController.d.ts → TokenBalancesController.d.cts} +7 -7
- package/dist/TokenBalancesController.d.cts.map +1 -0
- package/dist/TokenBalancesController.d.mts +82 -0
- package/dist/TokenBalancesController.d.mts.map +1 -0
- package/dist/TokenBalancesController.mjs +129 -10
- package/dist/TokenBalancesController.mjs.map +1 -1
- package/dist/TokenDetectionController.cjs +369 -0
- package/dist/TokenDetectionController.cjs.map +1 -0
- package/dist/{types/TokenDetectionController.d.ts → TokenDetectionController.d.cts} +10 -10
- package/dist/TokenDetectionController.d.cts.map +1 -0
- package/dist/TokenDetectionController.d.mts +109 -0
- package/dist/TokenDetectionController.d.mts.map +1 -0
- package/dist/TokenDetectionController.mjs +366 -15
- package/dist/TokenDetectionController.mjs.map +1 -1
- package/dist/TokenListController.cjs +274 -0
- package/dist/TokenListController.cjs.map +1 -0
- package/dist/{types/TokenListController.d.ts → TokenListController.d.cts} +5 -5
- package/dist/TokenListController.d.cts.map +1 -0
- package/dist/TokenListController.d.mts +117 -0
- package/dist/TokenListController.d.mts.map +1 -0
- package/dist/TokenListController.mjs +267 -12
- package/dist/TokenListController.mjs.map +1 -1
- package/dist/TokenRatesController.cjs +452 -0
- package/dist/TokenRatesController.cjs.map +1 -0
- package/dist/{types/TokenRatesController.d.ts → TokenRatesController.d.cts} +8 -8
- package/dist/TokenRatesController.d.cts.map +1 -0
- package/dist/TokenRatesController.d.mts +170 -0
- package/dist/TokenRatesController.d.mts.map +1 -0
- package/dist/TokenRatesController.mjs +446 -16
- package/dist/TokenRatesController.mjs.map +1 -1
- package/dist/TokensController.cjs +678 -0
- package/dist/TokensController.cjs.map +1 -0
- package/dist/{types/TokensController.d.ts → TokensController.d.cts} +9 -9
- package/dist/TokensController.d.cts.map +1 -0
- package/dist/TokensController.d.mts +165 -0
- package/dist/TokensController.d.mts.map +1 -0
- package/dist/TokensController.mjs +675 -14
- package/dist/TokensController.mjs.map +1 -1
- package/dist/assetsUtil.cjs +358 -0
- package/dist/assetsUtil.cjs.map +1 -0
- package/dist/{types/assetsUtil.d.ts → assetsUtil.d.cts} +7 -7
- package/dist/assetsUtil.d.cts.map +1 -0
- package/dist/assetsUtil.d.mts +177 -0
- package/dist/assetsUtil.d.mts.map +1 -0
- package/dist/assetsUtil.mjs +343 -36
- package/dist/assetsUtil.mjs.map +1 -1
- package/dist/constants.cjs +10 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/{types/constants.d.ts → constants.d.cts} +1 -1
- package/dist/constants.d.cts.map +1 -0
- package/dist/constants.d.mts +6 -0
- package/dist/constants.d.mts.map +1 -0
- package/dist/constants.mjs +6 -7
- package/dist/constants.mjs.map +1 -1
- package/dist/crypto-compare-service/crypto-compare.cjs +119 -0
- package/dist/crypto-compare-service/crypto-compare.cjs.map +1 -0
- package/dist/{types/crypto-compare-service/crypto-compare.d.ts → crypto-compare-service/crypto-compare.d.cts} +1 -1
- package/dist/crypto-compare-service/crypto-compare.d.cts.map +1 -0
- package/dist/crypto-compare-service/crypto-compare.d.mts +22 -0
- package/dist/crypto-compare-service/crypto-compare.d.mts.map +1 -0
- package/dist/crypto-compare-service/crypto-compare.mjs +113 -9
- package/dist/crypto-compare-service/crypto-compare.mjs.map +1 -1
- package/dist/crypto-compare-service/index.cjs +7 -0
- package/dist/crypto-compare-service/index.cjs.map +1 -0
- package/dist/crypto-compare-service/index.d.cts +2 -0
- package/dist/crypto-compare-service/index.d.cts.map +1 -0
- package/dist/crypto-compare-service/index.d.mts +2 -0
- package/dist/crypto-compare-service/index.d.mts.map +1 -0
- package/dist/crypto-compare-service/index.mjs +1 -10
- package/dist/crypto-compare-service/index.mjs.map +1 -1
- package/dist/index.cjs +51 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{types/index.d.ts → index.d.cts} +24 -24
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +24 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +13 -80
- package/dist/index.mjs.map +1 -1
- package/dist/token-prices-service/abstract-token-prices-service.cjs +3 -0
- package/dist/token-prices-service/abstract-token-prices-service.cjs.map +1 -0
- package/dist/{types/token-prices-service/abstract-token-prices-service.d.ts → token-prices-service/abstract-token-prices-service.d.cts} +2 -2
- package/dist/token-prices-service/abstract-token-prices-service.d.cts.map +1 -0
- package/dist/token-prices-service/abstract-token-prices-service.d.mts +79 -0
- package/dist/token-prices-service/abstract-token-prices-service.d.mts.map +1 -0
- package/dist/token-prices-service/abstract-token-prices-service.mjs +1 -0
- package/dist/token-prices-service/abstract-token-prices-service.mjs.map +1 -1
- package/dist/token-prices-service/codefi-v2.cjs +352 -0
- package/dist/token-prices-service/codefi-v2.cjs.map +1 -0
- package/dist/{types/token-prices-service/codefi-v2.d.ts → token-prices-service/codefi-v2.d.cts} +3 -3
- package/dist/token-prices-service/codefi-v2.d.cts.map +1 -0
- package/dist/token-prices-service/codefi-v2.d.mts +97 -0
- package/dist/token-prices-service/codefi-v2.d.mts.map +1 -0
- package/dist/token-prices-service/codefi-v2.mjs +347 -12
- package/dist/token-prices-service/codefi-v2.mjs.map +1 -1
- package/dist/token-prices-service/index.cjs +7 -0
- package/dist/token-prices-service/index.cjs.map +1 -0
- package/dist/token-prices-service/index.d.cts +3 -0
- package/dist/token-prices-service/index.d.cts.map +1 -0
- package/dist/token-prices-service/index.d.mts +3 -0
- package/dist/token-prices-service/index.d.mts.map +1 -0
- package/dist/token-prices-service/index.mjs +1 -10
- package/dist/token-prices-service/index.mjs.map +1 -1
- package/dist/token-service.cjs +130 -0
- package/dist/token-service.cjs.map +1 -0
- package/dist/{types/token-service.d.ts → token-service.d.cts} +2 -2
- package/dist/token-service.d.cts.map +1 -0
- package/dist/token-service.d.mts +31 -0
- package/dist/token-service.d.mts.map +1 -0
- package/dist/token-service.mjs +124 -14
- package/dist/token-service.mjs.map +1 -1
- package/package.json +20 -15
- package/dist/AccountTrackerController.js +0 -10
- package/dist/AccountTrackerController.js.map +0 -1
- package/dist/AssetsContractController.js +0 -18
- package/dist/AssetsContractController.js.map +0 -1
- package/dist/CurrencyRateController.js +0 -12
- package/dist/CurrencyRateController.js.map +0 -1
- package/dist/NftController.js +0 -14
- package/dist/NftController.js.map +0 -1
- package/dist/NftDetectionController.js +0 -16
- package/dist/NftDetectionController.js.map +0 -1
- package/dist/RatesController/RatesController.js +0 -14
- package/dist/RatesController/RatesController.js.map +0 -1
- package/dist/RatesController/index.js +0 -13
- package/dist/RatesController/index.js.map +0 -1
- package/dist/RatesController/types.js +0 -1
- package/dist/RatesController/types.js.map +0 -1
- package/dist/Standards/ERC20Standard.js +0 -9
- package/dist/Standards/ERC20Standard.js.map +0 -1
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.js +0 -9
- package/dist/Standards/NftStandards/ERC1155/ERC1155Standard.js.map +0 -1
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.js +0 -9
- package/dist/Standards/NftStandards/ERC721/ERC721Standard.js.map +0 -1
- package/dist/TokenBalancesController.js +0 -12
- package/dist/TokenBalancesController.js.map +0 -1
- package/dist/TokenDetectionController.js +0 -17
- package/dist/TokenDetectionController.js.map +0 -1
- package/dist/TokenListController.js +0 -14
- package/dist/TokenListController.js.map +0 -1
- package/dist/TokenRatesController.js +0 -18
- package/dist/TokenRatesController.js.map +0 -1
- package/dist/TokensController.js +0 -16
- package/dist/TokensController.js.map +0 -1
- package/dist/assetsUtil.js +0 -38
- package/dist/assetsUtil.js.map +0 -1
- package/dist/chunk-27KOXCQK.mjs +0 -1
- package/dist/chunk-27KOXCQK.mjs.map +0 -1
- package/dist/chunk-2TZK6YZA.js +0 -1405
- package/dist/chunk-2TZK6YZA.js.map +0 -1
- package/dist/chunk-3LPQTUGG.js +0 -434
- package/dist/chunk-3LPQTUGG.js.map +0 -1
- package/dist/chunk-3QDXAE2D.mjs +0 -178
- package/dist/chunk-3QDXAE2D.mjs.map +0 -1
- package/dist/chunk-46KUC5FH.mjs +0 -434
- package/dist/chunk-46KUC5FH.mjs.map +0 -1
- package/dist/chunk-4QZESU46.mjs +0 -530
- package/dist/chunk-4QZESU46.mjs.map +0 -1
- package/dist/chunk-5QLC2MHV.js +0 -215
- package/dist/chunk-5QLC2MHV.js.map +0 -1
- package/dist/chunk-7K6PSEAA.js +0 -1
- package/dist/chunk-7K6PSEAA.js.map +0 -1
- package/dist/chunk-AX522TDL.mjs +0 -85
- package/dist/chunk-AX522TDL.mjs.map +0 -1
- package/dist/chunk-AZSIKIMK.mjs +0 -429
- package/dist/chunk-AZSIKIMK.mjs.map +0 -1
- package/dist/chunk-BBCZM5P4.js +0 -300
- package/dist/chunk-BBCZM5P4.js.map +0 -1
- package/dist/chunk-BZEAPSD5.mjs +0 -215
- package/dist/chunk-BZEAPSD5.mjs.map +0 -1
- package/dist/chunk-C7LNCQXM.mjs +0 -300
- package/dist/chunk-C7LNCQXM.mjs.map +0 -1
- package/dist/chunk-CP3HC7AQ.mjs +0 -12
- package/dist/chunk-CP3HC7AQ.mjs.map +0 -1
- package/dist/chunk-FWKV5FGP.mjs +0 -71
- package/dist/chunk-FWKV5FGP.mjs.map +0 -1
- package/dist/chunk-GDFLKKDY.js +0 -71
- package/dist/chunk-GDFLKKDY.js.map +0 -1
- package/dist/chunk-GW6RE66P.mjs +0 -210
- package/dist/chunk-GW6RE66P.mjs.map +0 -1
- package/dist/chunk-HVOIBGYN.js +0 -282
- package/dist/chunk-HVOIBGYN.js.map +0 -1
- package/dist/chunk-ISK2VSBB.js +0 -178
- package/dist/chunk-ISK2VSBB.js.map +0 -1
- package/dist/chunk-JCR4H6YL.js +0 -115
- package/dist/chunk-JCR4H6YL.js.map +0 -1
- package/dist/chunk-JJX7TMH5.mjs +0 -135
- package/dist/chunk-JJX7TMH5.mjs.map +0 -1
- package/dist/chunk-JMZ7KWJS.js +0 -157
- package/dist/chunk-JMZ7KWJS.js.map +0 -1
- package/dist/chunk-JYHAAA6W.mjs +0 -1
- package/dist/chunk-JYHAAA6W.mjs.map +0 -1
- package/dist/chunk-K7A3EOIM.js +0 -85
- package/dist/chunk-K7A3EOIM.js.map +0 -1
- package/dist/chunk-KPBNX6GP.mjs +0 -215
- package/dist/chunk-KPBNX6GP.mjs.map +0 -1
- package/dist/chunk-LKVWPNXY.js +0 -429
- package/dist/chunk-LKVWPNXY.js.map +0 -1
- package/dist/chunk-MZI3SDQN.js +0 -215
- package/dist/chunk-MZI3SDQN.js.map +0 -1
- package/dist/chunk-NDUMUEE6.js +0 -812
- package/dist/chunk-NDUMUEE6.js.map +0 -1
- package/dist/chunk-OBUR4TXH.js +0 -1
- package/dist/chunk-OBUR4TXH.js.map +0 -1
- package/dist/chunk-RGHTNZQ6.js +0 -12
- package/dist/chunk-RGHTNZQ6.js.map +0 -1
- package/dist/chunk-S5CFNNOM.mjs +0 -115
- package/dist/chunk-S5CFNNOM.mjs.map +0 -1
- package/dist/chunk-SK2B36Q4.mjs +0 -1405
- package/dist/chunk-SK2B36Q4.mjs.map +0 -1
- package/dist/chunk-TFLYM4PY.mjs +0 -291
- package/dist/chunk-TFLYM4PY.mjs.map +0 -1
- package/dist/chunk-TIFLP53R.js +0 -210
- package/dist/chunk-TIFLP53R.js.map +0 -1
- package/dist/chunk-TTH3ES66.mjs +0 -1
- package/dist/chunk-TTH3ES66.mjs.map +0 -1
- package/dist/chunk-UKXD6WUT.mjs +0 -157
- package/dist/chunk-UKXD6WUT.mjs.map +0 -1
- package/dist/chunk-UUF4E7OG.js +0 -530
- package/dist/chunk-UUF4E7OG.js.map +0 -1
- package/dist/chunk-V6DNVROD.js +0 -348
- package/dist/chunk-V6DNVROD.js.map +0 -1
- package/dist/chunk-XC3SOOGC.js +0 -1
- package/dist/chunk-XC3SOOGC.js.map +0 -1
- package/dist/chunk-XMQA5NLX.mjs +0 -812
- package/dist/chunk-XMQA5NLX.mjs.map +0 -1
- package/dist/chunk-XQO3EG4J.mjs +0 -348
- package/dist/chunk-XQO3EG4J.mjs.map +0 -1
- package/dist/chunk-XUI43LEZ.mjs +0 -30
- package/dist/chunk-XUI43LEZ.mjs.map +0 -1
- package/dist/chunk-YGGUAMHV.js +0 -135
- package/dist/chunk-YGGUAMHV.js.map +0 -1
- package/dist/chunk-Z4BLTVTB.js +0 -30
- package/dist/chunk-Z4BLTVTB.js.map +0 -1
- package/dist/chunk-Z7RMCHD4.mjs +0 -282
- package/dist/chunk-Z7RMCHD4.mjs.map +0 -1
- package/dist/chunk-ZAR4BIOC.js +0 -291
- package/dist/chunk-ZAR4BIOC.js.map +0 -1
- package/dist/constants.js +0 -8
- package/dist/constants.js.map +0 -1
- package/dist/crypto-compare-service/crypto-compare.js +0 -10
- package/dist/crypto-compare-service/crypto-compare.js.map +0 -1
- package/dist/crypto-compare-service/index.js +0 -11
- package/dist/crypto-compare-service/index.js.map +0 -1
- package/dist/index.js +0 -81
- package/dist/index.js.map +0 -1
- package/dist/token-prices-service/abstract-token-prices-service.js +0 -1
- package/dist/token-prices-service/abstract-token-prices-service.js.map +0 -1
- package/dist/token-prices-service/codefi-v2.js +0 -14
- package/dist/token-prices-service/codefi-v2.js.map +0 -1
- package/dist/token-prices-service/index.js +0 -11
- package/dist/token-prices-service/index.js.map +0 -1
- package/dist/token-service.js +0 -15
- package/dist/token-service.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/dist/types/AccountTrackerController.d.ts.map +0 -1
- package/dist/types/AssetsContractController.d.ts.map +0 -1
- package/dist/types/CurrencyRateController.d.ts.map +0 -1
- package/dist/types/NftController.d.ts.map +0 -1
- package/dist/types/NftDetectionController.d.ts.map +0 -1
- package/dist/types/RatesController/RatesController.d.ts.map +0 -1
- package/dist/types/RatesController/index.d.ts.map +0 -1
- package/dist/types/RatesController/types.d.ts.map +0 -1
- package/dist/types/Standards/ERC20Standard.d.ts.map +0 -1
- package/dist/types/Standards/NftStandards/ERC1155/ERC1155Standard.d.ts.map +0 -1
- package/dist/types/Standards/NftStandards/ERC721/ERC721Standard.d.ts.map +0 -1
- package/dist/types/TokenBalancesController.d.ts.map +0 -1
- package/dist/types/TokenDetectionController.d.ts.map +0 -1
- package/dist/types/TokenListController.d.ts.map +0 -1
- package/dist/types/TokenRatesController.d.ts.map +0 -1
- package/dist/types/TokensController.d.ts.map +0 -1
- package/dist/types/assetsUtil.d.ts.map +0 -1
- package/dist/types/constants.d.ts.map +0 -1
- package/dist/types/crypto-compare-service/crypto-compare.d.ts.map +0 -1
- package/dist/types/crypto-compare-service/index.d.ts +0 -2
- package/dist/types/crypto-compare-service/index.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/token-prices-service/abstract-token-prices-service.d.ts.map +0 -1
- package/dist/types/token-prices-service/codefi-v2.d.ts.map +0 -1
- package/dist/types/token-prices-service/index.d.ts +0 -3
- package/dist/types/token-prices-service/index.d.ts.map +0 -1
- package/dist/types/token-service.d.ts.map +0 -1
package/dist/chunk-GW6RE66P.mjs
DELETED
|
@@ -1,210 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
fetchMultiExchangeRate
|
|
3
|
-
} from "./chunk-FWKV5FGP.mjs";
|
|
4
|
-
import {
|
|
5
|
-
__privateAdd,
|
|
6
|
-
__privateGet,
|
|
7
|
-
__privateMethod,
|
|
8
|
-
__privateSet
|
|
9
|
-
} from "./chunk-XUI43LEZ.mjs";
|
|
10
|
-
|
|
11
|
-
// src/RatesController/RatesController.ts
|
|
12
|
-
import { BaseController } from "@metamask/base-controller";
|
|
13
|
-
import { Mutex } from "async-mutex";
|
|
14
|
-
var name = "RatesController";
|
|
15
|
-
var Cryptocurrency = /* @__PURE__ */ ((Cryptocurrency2) => {
|
|
16
|
-
Cryptocurrency2["Btc"] = "btc";
|
|
17
|
-
return Cryptocurrency2;
|
|
18
|
-
})(Cryptocurrency || {});
|
|
19
|
-
var DEFAULT_INTERVAL = 18e4;
|
|
20
|
-
var metadata = {
|
|
21
|
-
fiatCurrency: { persist: true, anonymous: true },
|
|
22
|
-
rates: { persist: true, anonymous: true },
|
|
23
|
-
cryptocurrencies: { persist: true, anonymous: true }
|
|
24
|
-
};
|
|
25
|
-
var defaultState = {
|
|
26
|
-
fiatCurrency: "usd",
|
|
27
|
-
rates: {
|
|
28
|
-
["btc" /* Btc */]: {
|
|
29
|
-
conversionDate: 0,
|
|
30
|
-
conversionRate: "0"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
cryptocurrencies: ["btc" /* Btc */]
|
|
34
|
-
};
|
|
35
|
-
var _mutex, _fetchMultiExchangeRate, _includeUsdRate, _intervalLength, _intervalId, _withLock, withLock_fn, _executePoll, executePoll_fn, _updateRates, updateRates_fn;
|
|
36
|
-
var RatesController = class extends BaseController {
|
|
37
|
-
/**
|
|
38
|
-
* Creates a RatesController instance.
|
|
39
|
-
*
|
|
40
|
-
* @param options - Constructor options.
|
|
41
|
-
* @param options.includeUsdRate - Keep track of the USD rate in addition to the current currency rate.
|
|
42
|
-
* @param options.interval - The polling interval, in milliseconds.
|
|
43
|
-
* @param options.messenger - A reference to the messaging system.
|
|
44
|
-
* @param options.state - Initial state to set on this controller.
|
|
45
|
-
* @param options.fetchMultiExchangeRate - Fetches the exchange rate from an external API. This option is primarily meant for use in unit tests.
|
|
46
|
-
*/
|
|
47
|
-
constructor({
|
|
48
|
-
interval = DEFAULT_INTERVAL,
|
|
49
|
-
messenger,
|
|
50
|
-
state,
|
|
51
|
-
includeUsdRate,
|
|
52
|
-
fetchMultiExchangeRate: fetchMultiExchangeRate2 = fetchMultiExchangeRate
|
|
53
|
-
}) {
|
|
54
|
-
super({
|
|
55
|
-
name,
|
|
56
|
-
metadata,
|
|
57
|
-
messenger,
|
|
58
|
-
state: { ...defaultState, ...state }
|
|
59
|
-
});
|
|
60
|
-
/**
|
|
61
|
-
* Executes a function `callback` within a mutex lock to ensure that only one instance of `callback` runs at a time across all invocations of `#withLock`.
|
|
62
|
-
* This method is useful for synchronizing access to a resource or section of code that should not be executed concurrently.
|
|
63
|
-
*
|
|
64
|
-
* @template R - The return type of the function `callback`.
|
|
65
|
-
* @param callback - A callback to execute once the lock is acquired. This callback can be synchronous or asynchronous.
|
|
66
|
-
* @returns A promise that resolves to the result of the function `callback`. The promise is fulfilled once `callback` has completed execution.
|
|
67
|
-
* @example
|
|
68
|
-
* async function criticalLogic() {
|
|
69
|
-
* // Critical logic code goes here.
|
|
70
|
-
* }
|
|
71
|
-
*
|
|
72
|
-
* // Execute criticalLogic within a lock.
|
|
73
|
-
* const result = await this.#withLock(criticalLogic);
|
|
74
|
-
*/
|
|
75
|
-
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
77
|
-
__privateAdd(this, _withLock);
|
|
78
|
-
/**
|
|
79
|
-
* Executes the polling operation to update rates.
|
|
80
|
-
*/
|
|
81
|
-
__privateAdd(this, _executePoll);
|
|
82
|
-
/**
|
|
83
|
-
* Updates the rates by fetching new data.
|
|
84
|
-
*/
|
|
85
|
-
__privateAdd(this, _updateRates);
|
|
86
|
-
__privateAdd(this, _mutex, new Mutex());
|
|
87
|
-
__privateAdd(this, _fetchMultiExchangeRate, void 0);
|
|
88
|
-
__privateAdd(this, _includeUsdRate, void 0);
|
|
89
|
-
__privateAdd(this, _intervalLength, void 0);
|
|
90
|
-
__privateAdd(this, _intervalId, void 0);
|
|
91
|
-
__privateSet(this, _includeUsdRate, includeUsdRate);
|
|
92
|
-
__privateSet(this, _fetchMultiExchangeRate, fetchMultiExchangeRate2);
|
|
93
|
-
__privateSet(this, _intervalLength, interval);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Starts the polling process.
|
|
97
|
-
*/
|
|
98
|
-
async start() {
|
|
99
|
-
if (__privateGet(this, _intervalId)) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
this.messagingSystem.publish(`${name}:pollingStarted`);
|
|
103
|
-
__privateSet(this, _intervalId, setInterval(() => {
|
|
104
|
-
__privateMethod(this, _executePoll, executePoll_fn).call(this).catch(console.error);
|
|
105
|
-
}, __privateGet(this, _intervalLength)));
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Stops the polling process.
|
|
109
|
-
*/
|
|
110
|
-
async stop() {
|
|
111
|
-
if (!__privateGet(this, _intervalId)) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
clearInterval(__privateGet(this, _intervalId));
|
|
115
|
-
__privateSet(this, _intervalId, void 0);
|
|
116
|
-
this.messagingSystem.publish(`${name}:pollingStopped`);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Returns the current list of cryptocurrency.
|
|
120
|
-
* @returns The cryptocurrency list.
|
|
121
|
-
*/
|
|
122
|
-
getCryptocurrencyList() {
|
|
123
|
-
const { cryptocurrencies } = this.state;
|
|
124
|
-
return cryptocurrencies;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Sets the list of supported cryptocurrencies.
|
|
128
|
-
* @param cryptocurrencies - The list of supported cryptocurrencies.
|
|
129
|
-
*/
|
|
130
|
-
async setCryptocurrencyList(cryptocurrencies) {
|
|
131
|
-
await __privateMethod(this, _withLock, withLock_fn).call(this, () => {
|
|
132
|
-
this.update(
|
|
133
|
-
(state) => {
|
|
134
|
-
return {
|
|
135
|
-
...state,
|
|
136
|
-
cryptocurrencies
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
);
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Sets the internal fiat currency and update rates accordingly.
|
|
144
|
-
* @param fiatCurrency - The fiat currency.
|
|
145
|
-
*/
|
|
146
|
-
async setFiatCurrency(fiatCurrency) {
|
|
147
|
-
if (fiatCurrency === "") {
|
|
148
|
-
throw new Error("The currency can not be an empty string");
|
|
149
|
-
}
|
|
150
|
-
await __privateMethod(this, _withLock, withLock_fn).call(this, () => {
|
|
151
|
-
this.update(
|
|
152
|
-
(state) => {
|
|
153
|
-
return {
|
|
154
|
-
...state,
|
|
155
|
-
fiatCurrency
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
);
|
|
159
|
-
});
|
|
160
|
-
await __privateMethod(this, _updateRates, updateRates_fn).call(this);
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
_mutex = new WeakMap();
|
|
164
|
-
_fetchMultiExchangeRate = new WeakMap();
|
|
165
|
-
_includeUsdRate = new WeakMap();
|
|
166
|
-
_intervalLength = new WeakMap();
|
|
167
|
-
_intervalId = new WeakMap();
|
|
168
|
-
_withLock = new WeakSet();
|
|
169
|
-
withLock_fn = async function(callback) {
|
|
170
|
-
const releaseLock = await __privateGet(this, _mutex).acquire();
|
|
171
|
-
try {
|
|
172
|
-
return callback();
|
|
173
|
-
} finally {
|
|
174
|
-
releaseLock();
|
|
175
|
-
}
|
|
176
|
-
};
|
|
177
|
-
_executePoll = new WeakSet();
|
|
178
|
-
executePoll_fn = async function() {
|
|
179
|
-
await __privateMethod(this, _updateRates, updateRates_fn).call(this);
|
|
180
|
-
};
|
|
181
|
-
_updateRates = new WeakSet();
|
|
182
|
-
updateRates_fn = async function() {
|
|
183
|
-
await __privateMethod(this, _withLock, withLock_fn).call(this, async () => {
|
|
184
|
-
const { fiatCurrency, cryptocurrencies } = this.state;
|
|
185
|
-
const response = await __privateGet(this, _fetchMultiExchangeRate).call(this, fiatCurrency, cryptocurrencies, __privateGet(this, _includeUsdRate));
|
|
186
|
-
const updatedRates = {};
|
|
187
|
-
for (const [cryptocurrency, values] of Object.entries(response)) {
|
|
188
|
-
updatedRates[cryptocurrency] = {
|
|
189
|
-
conversionDate: Date.now(),
|
|
190
|
-
conversionRate: values[fiatCurrency],
|
|
191
|
-
...__privateGet(this, _includeUsdRate) && { usdConversionRate: values.usd }
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
this.update(
|
|
195
|
-
(state) => {
|
|
196
|
-
return {
|
|
197
|
-
...state,
|
|
198
|
-
rates: updatedRates
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
);
|
|
202
|
-
});
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
export {
|
|
206
|
-
name,
|
|
207
|
-
Cryptocurrency,
|
|
208
|
-
RatesController
|
|
209
|
-
};
|
|
210
|
-
//# sourceMappingURL=chunk-GW6RE66P.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/RatesController/RatesController.ts"],"sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport { Mutex } from 'async-mutex';\nimport type { Draft } from 'immer';\n\nimport { fetchMultiExchangeRate as defaultFetchExchangeRate } from '../crypto-compare-service';\nimport type {\n ConversionRates,\n RatesControllerState,\n RatesControllerOptions,\n RatesControllerMessenger,\n} from './types';\n\nexport const name = 'RatesController';\n\nexport enum Cryptocurrency {\n Btc = 'btc',\n}\n\nconst DEFAULT_INTERVAL = 180000;\n\nconst metadata = {\n fiatCurrency: { persist: true, anonymous: true },\n rates: { persist: true, anonymous: true },\n cryptocurrencies: { persist: true, anonymous: true },\n};\n\nconst defaultState = {\n fiatCurrency: 'usd',\n rates: {\n [Cryptocurrency.Btc]: {\n conversionDate: 0,\n conversionRate: '0',\n },\n },\n cryptocurrencies: [Cryptocurrency.Btc],\n};\n\nexport class RatesController extends BaseController<\n typeof name,\n RatesControllerState,\n RatesControllerMessenger\n> {\n readonly #mutex = new Mutex();\n\n readonly #fetchMultiExchangeRate;\n\n readonly #includeUsdRate;\n\n #intervalLength: number;\n\n #intervalId: NodeJS.Timeout | undefined;\n\n /**\n * Creates a RatesController instance.\n *\n * @param options - Constructor options.\n * @param options.includeUsdRate - Keep track of the USD rate in addition to the current currency rate.\n * @param options.interval - The polling interval, in milliseconds.\n * @param options.messenger - A reference to the messaging system.\n * @param options.state - Initial state to set on this controller.\n * @param options.fetchMultiExchangeRate - Fetches the exchange rate from an external API. This option is primarily meant for use in unit tests.\n */\n constructor({\n interval = DEFAULT_INTERVAL,\n messenger,\n state,\n includeUsdRate,\n fetchMultiExchangeRate = defaultFetchExchangeRate,\n }: RatesControllerOptions) {\n super({\n name,\n metadata,\n messenger,\n state: { ...defaultState, ...state },\n });\n this.#includeUsdRate = includeUsdRate;\n this.#fetchMultiExchangeRate = fetchMultiExchangeRate;\n this.#intervalLength = interval;\n }\n\n /**\n * Executes a function `callback` within a mutex lock to ensure that only one instance of `callback` runs at a time across all invocations of `#withLock`.\n * This method is useful for synchronizing access to a resource or section of code that should not be executed concurrently.\n *\n * @template R - The return type of the function `callback`.\n * @param callback - A callback to execute once the lock is acquired. This callback can be synchronous or asynchronous.\n * @returns A promise that resolves to the result of the function `callback`. The promise is fulfilled once `callback` has completed execution.\n * @example\n * async function criticalLogic() {\n * // Critical logic code goes here.\n * }\n *\n * // Execute criticalLogic within a lock.\n * const result = await this.#withLock(criticalLogic);\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\n async #withLock<R>(callback: () => R) {\n const releaseLock = await this.#mutex.acquire();\n try {\n return callback();\n } finally {\n releaseLock();\n }\n }\n\n /**\n * Executes the polling operation to update rates.\n */\n async #executePoll(): Promise<void> {\n await this.#updateRates();\n }\n\n /**\n * Updates the rates by fetching new data.\n */\n async #updateRates(): Promise<void> {\n await this.#withLock(async () => {\n const { fiatCurrency, cryptocurrencies } = this.state;\n const response: Record<\n Cryptocurrency,\n Record<string, string>\n > = await this.#fetchMultiExchangeRate(\n fiatCurrency,\n cryptocurrencies,\n this.#includeUsdRate,\n );\n\n const updatedRates: ConversionRates = {};\n for (const [cryptocurrency, values] of Object.entries(response)) {\n updatedRates[cryptocurrency] = {\n conversionDate: Date.now(),\n conversionRate: values[fiatCurrency],\n ...(this.#includeUsdRate && { usdConversionRate: values.usd }),\n };\n }\n\n this.update(\n (state: Draft<RatesControllerState>): RatesControllerState => {\n return {\n ...state,\n rates: updatedRates,\n };\n },\n );\n });\n }\n\n /**\n * Starts the polling process.\n */\n async start(): Promise<void> {\n if (this.#intervalId) {\n return;\n }\n\n this.messagingSystem.publish(`${name}:pollingStarted`);\n\n this.#intervalId = setInterval(() => {\n this.#executePoll().catch(console.error);\n }, this.#intervalLength);\n }\n\n /**\n * Stops the polling process.\n */\n async stop(): Promise<void> {\n if (!this.#intervalId) {\n return;\n }\n\n clearInterval(this.#intervalId);\n this.#intervalId = undefined;\n this.messagingSystem.publish(`${name}:pollingStopped`);\n }\n\n /**\n * Returns the current list of cryptocurrency.\n * @returns The cryptocurrency list.\n */\n getCryptocurrencyList(): Cryptocurrency[] {\n const { cryptocurrencies } = this.state;\n return cryptocurrencies;\n }\n\n /**\n * Sets the list of supported cryptocurrencies.\n * @param cryptocurrencies - The list of supported cryptocurrencies.\n */\n async setCryptocurrencyList(\n cryptocurrencies: Cryptocurrency[],\n ): Promise<void> {\n await this.#withLock(() => {\n this.update(\n (state: Draft<RatesControllerState>): RatesControllerState => {\n return {\n ...state,\n cryptocurrencies,\n };\n },\n );\n });\n }\n\n /**\n * Sets the internal fiat currency and update rates accordingly.\n * @param fiatCurrency - The fiat currency.\n */\n async setFiatCurrency(fiatCurrency: string): Promise<void> {\n if (fiatCurrency === '') {\n throw new Error('The currency can not be an empty string');\n }\n\n await this.#withLock(() => {\n this.update(\n (state: Draft<RatesControllerState>): RatesControllerState => {\n return {\n ...state,\n fiatCurrency,\n };\n },\n );\n });\n await this.#updateRates();\n }\n}\n"],"mappings":"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","names":["Cryptocurrency","fetchMultiExchangeRate"]}
|
package/dist/chunk-HVOIBGYN.js
DELETED
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var _chunkZ4BLTVTBjs = require('./chunk-Z4BLTVTB.js');
|
|
7
|
-
|
|
8
|
-
// src/AccountTrackerController.ts
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var _controllerutils = require('@metamask/controller-utils');
|
|
14
|
-
var _ethquery = require('@metamask/eth-query'); var _ethquery2 = _interopRequireDefault(_ethquery);
|
|
15
|
-
var _pollingcontroller = require('@metamask/polling-controller');
|
|
16
|
-
var _utils = require('@metamask/utils');
|
|
17
|
-
var _asyncmutex = require('async-mutex');
|
|
18
|
-
var _lodash = require('lodash');
|
|
19
|
-
var controllerName = "AccountTrackerController";
|
|
20
|
-
var accountTrackerMetadata = {
|
|
21
|
-
accounts: {
|
|
22
|
-
persist: true,
|
|
23
|
-
anonymous: false
|
|
24
|
-
},
|
|
25
|
-
accountsByChainId: {
|
|
26
|
-
persist: true,
|
|
27
|
-
anonymous: false
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
var _refreshMutex, _handle, _getCurrentChainId, getCurrentChainId_fn, _getCorrectNetworkClient, getCorrectNetworkClient_fn, _getBalanceFromChain, getBalanceFromChain_fn;
|
|
31
|
-
var AccountTrackerController = class extends _pollingcontroller.StaticIntervalPollingController {
|
|
32
|
-
/**
|
|
33
|
-
* Creates an AccountTracker instance.
|
|
34
|
-
*
|
|
35
|
-
* @param options - The controller options.
|
|
36
|
-
* @param options.interval - Polling interval used to fetch new account balances.
|
|
37
|
-
* @param options.state - Initial state to set on this controller.
|
|
38
|
-
* @param options.messenger - The controller messaging system.
|
|
39
|
-
*/
|
|
40
|
-
constructor({
|
|
41
|
-
interval = 1e4,
|
|
42
|
-
state,
|
|
43
|
-
messenger
|
|
44
|
-
}) {
|
|
45
|
-
const { selectedNetworkClientId } = messenger.call(
|
|
46
|
-
"NetworkController:getState"
|
|
47
|
-
);
|
|
48
|
-
const {
|
|
49
|
-
configuration: { chainId }
|
|
50
|
-
} = messenger.call(
|
|
51
|
-
"NetworkController:getNetworkClientById",
|
|
52
|
-
selectedNetworkClientId
|
|
53
|
-
);
|
|
54
|
-
super({
|
|
55
|
-
name: controllerName,
|
|
56
|
-
messenger,
|
|
57
|
-
state: {
|
|
58
|
-
accounts: {},
|
|
59
|
-
accountsByChainId: {
|
|
60
|
-
[chainId]: {}
|
|
61
|
-
},
|
|
62
|
-
...state
|
|
63
|
-
},
|
|
64
|
-
metadata: accountTrackerMetadata
|
|
65
|
-
});
|
|
66
|
-
/**
|
|
67
|
-
* Gets the current chain ID.
|
|
68
|
-
* @returns The current chain ID.
|
|
69
|
-
*/
|
|
70
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getCurrentChainId);
|
|
71
|
-
/**
|
|
72
|
-
* Resolves a networkClientId to a network client config
|
|
73
|
-
* or globally selected network config if not provided
|
|
74
|
-
*
|
|
75
|
-
* @param networkClientId - Optional networkClientId to fetch a network client with
|
|
76
|
-
* @returns network client config
|
|
77
|
-
*/
|
|
78
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getCorrectNetworkClient);
|
|
79
|
-
/**
|
|
80
|
-
* Fetches the balance of a given address from the blockchain.
|
|
81
|
-
*
|
|
82
|
-
* @param address - The account address to fetch the balance for.
|
|
83
|
-
* @param ethQuery - The EthQuery instance to query getBalnce with.
|
|
84
|
-
* @returns A promise that resolves to the balance in a hex string format.
|
|
85
|
-
*/
|
|
86
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getBalanceFromChain);
|
|
87
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _refreshMutex, new (0, _asyncmutex.Mutex)());
|
|
88
|
-
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _handle, void 0);
|
|
89
|
-
this.setIntervalLength(interval);
|
|
90
|
-
this.poll();
|
|
91
|
-
this.messagingSystem.subscribe(
|
|
92
|
-
"AccountsController:selectedEvmAccountChange",
|
|
93
|
-
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
94
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
95
|
-
() => this.refresh()
|
|
96
|
-
);
|
|
97
|
-
}
|
|
98
|
-
syncAccounts(newChainId) {
|
|
99
|
-
const accounts = { ...this.state.accounts };
|
|
100
|
-
const accountsByChainId = _lodash.cloneDeep.call(void 0, this.state.accountsByChainId);
|
|
101
|
-
const existing = Object.keys(accounts);
|
|
102
|
-
if (!accountsByChainId[newChainId]) {
|
|
103
|
-
accountsByChainId[newChainId] = {};
|
|
104
|
-
existing.forEach((address) => {
|
|
105
|
-
accountsByChainId[newChainId][address] = { balance: "0x0" };
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
const addresses = Object.values(
|
|
109
|
-
this.messagingSystem.call("AccountsController:listAccounts").map(
|
|
110
|
-
(internalAccount) => _controllerutils.toChecksumHexAddress.call(void 0, internalAccount.address)
|
|
111
|
-
)
|
|
112
|
-
);
|
|
113
|
-
const newAddresses = addresses.filter(
|
|
114
|
-
(address) => !existing.includes(address)
|
|
115
|
-
);
|
|
116
|
-
const oldAddresses = existing.filter(
|
|
117
|
-
(address) => !addresses.includes(address)
|
|
118
|
-
);
|
|
119
|
-
newAddresses.forEach((address) => {
|
|
120
|
-
accounts[address] = { balance: "0x0" };
|
|
121
|
-
});
|
|
122
|
-
Object.keys(accountsByChainId).forEach((chainId) => {
|
|
123
|
-
newAddresses.forEach((address) => {
|
|
124
|
-
accountsByChainId[chainId][address] = {
|
|
125
|
-
balance: "0x0"
|
|
126
|
-
};
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
oldAddresses.forEach((address) => {
|
|
130
|
-
delete accounts[address];
|
|
131
|
-
});
|
|
132
|
-
Object.keys(accountsByChainId).forEach((chainId) => {
|
|
133
|
-
oldAddresses.forEach((address) => {
|
|
134
|
-
delete accountsByChainId[chainId][address];
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
this.update((state) => {
|
|
138
|
-
state.accounts = accounts;
|
|
139
|
-
state.accountsByChainId = accountsByChainId;
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Starts a new polling interval.
|
|
144
|
-
*
|
|
145
|
-
* @param interval - Polling interval trigger a 'refresh'.
|
|
146
|
-
*/
|
|
147
|
-
async poll(interval) {
|
|
148
|
-
if (interval) {
|
|
149
|
-
this.setIntervalLength(interval);
|
|
150
|
-
}
|
|
151
|
-
if (_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _handle)) {
|
|
152
|
-
clearTimeout(_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _handle));
|
|
153
|
-
}
|
|
154
|
-
await this.refresh();
|
|
155
|
-
_chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _handle, setTimeout(() => {
|
|
156
|
-
this.poll(this.getIntervalLength());
|
|
157
|
-
}, this.getIntervalLength()));
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Refreshes the balances of the accounts using the networkClientId
|
|
161
|
-
*
|
|
162
|
-
* @param networkClientId - The network client ID used to get balances.
|
|
163
|
-
*/
|
|
164
|
-
async _executePoll(networkClientId) {
|
|
165
|
-
this.refresh(networkClientId);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Refreshes the balances of the accounts depending on the multi-account setting.
|
|
169
|
-
* If multi-account is disabled, only updates the selected account balance.
|
|
170
|
-
* If multi-account is enabled, updates balances for all accounts.
|
|
171
|
-
*
|
|
172
|
-
* @param networkClientId - Optional networkClientId to fetch a network client with
|
|
173
|
-
*/
|
|
174
|
-
async refresh(networkClientId) {
|
|
175
|
-
const selectedAccount = this.messagingSystem.call(
|
|
176
|
-
"AccountsController:getSelectedAccount"
|
|
177
|
-
);
|
|
178
|
-
const releaseLock = await _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _refreshMutex).acquire();
|
|
179
|
-
try {
|
|
180
|
-
const { chainId, ethQuery } = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getCorrectNetworkClient, getCorrectNetworkClient_fn).call(this, networkClientId);
|
|
181
|
-
this.syncAccounts(chainId);
|
|
182
|
-
const { accounts, accountsByChainId } = this.state;
|
|
183
|
-
const { isMultiAccountBalancesEnabled } = this.messagingSystem.call(
|
|
184
|
-
"PreferencesController:getState"
|
|
185
|
-
);
|
|
186
|
-
const accountsToUpdate = isMultiAccountBalancesEnabled ? Object.keys(accounts) : [_controllerutils.toChecksumHexAddress.call(void 0, selectedAccount.address)];
|
|
187
|
-
const accountsForChain = { ...accountsByChainId[chainId] };
|
|
188
|
-
for (const address of accountsToUpdate) {
|
|
189
|
-
const balance = await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getBalanceFromChain, getBalanceFromChain_fn).call(this, address, ethQuery);
|
|
190
|
-
if (balance) {
|
|
191
|
-
accountsForChain[address] = {
|
|
192
|
-
balance
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
this.update((state) => {
|
|
197
|
-
if (chainId === _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getCurrentChainId, getCurrentChainId_fn).call(this)) {
|
|
198
|
-
state.accounts = accountsForChain;
|
|
199
|
-
}
|
|
200
|
-
state.accountsByChainId[chainId] = accountsForChain;
|
|
201
|
-
});
|
|
202
|
-
} finally {
|
|
203
|
-
releaseLock();
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Sync accounts balances with some additional addresses.
|
|
208
|
-
*
|
|
209
|
-
* @param addresses - the additional addresses, may be hardware wallet addresses.
|
|
210
|
-
* @param networkClientId - Optional networkClientId to fetch a network client with.
|
|
211
|
-
* @returns accounts - addresses with synced balance
|
|
212
|
-
*/
|
|
213
|
-
async syncBalanceWithAddresses(addresses, networkClientId) {
|
|
214
|
-
const { ethQuery } = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getCorrectNetworkClient, getCorrectNetworkClient_fn).call(this, networkClientId);
|
|
215
|
-
return await Promise.all(
|
|
216
|
-
addresses.map((address) => {
|
|
217
|
-
return _controllerutils.safelyExecuteWithTimeout.call(void 0, async () => {
|
|
218
|
-
_utils.assert.call(void 0, ethQuery, "Provider not set.");
|
|
219
|
-
const balance = await _controllerutils.query.call(void 0, ethQuery, "getBalance", [address]);
|
|
220
|
-
return [address, balance];
|
|
221
|
-
});
|
|
222
|
-
})
|
|
223
|
-
).then((value) => {
|
|
224
|
-
return value.reduce((obj, item) => {
|
|
225
|
-
if (!item) {
|
|
226
|
-
return obj;
|
|
227
|
-
}
|
|
228
|
-
const [address, balance] = item;
|
|
229
|
-
return {
|
|
230
|
-
...obj,
|
|
231
|
-
[address]: {
|
|
232
|
-
balance
|
|
233
|
-
}
|
|
234
|
-
};
|
|
235
|
-
}, {});
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
_refreshMutex = new WeakMap();
|
|
240
|
-
_handle = new WeakMap();
|
|
241
|
-
_getCurrentChainId = new WeakSet();
|
|
242
|
-
getCurrentChainId_fn = function() {
|
|
243
|
-
const { selectedNetworkClientId } = this.messagingSystem.call(
|
|
244
|
-
"NetworkController:getState"
|
|
245
|
-
);
|
|
246
|
-
const {
|
|
247
|
-
configuration: { chainId }
|
|
248
|
-
} = this.messagingSystem.call(
|
|
249
|
-
"NetworkController:getNetworkClientById",
|
|
250
|
-
selectedNetworkClientId
|
|
251
|
-
);
|
|
252
|
-
return chainId;
|
|
253
|
-
};
|
|
254
|
-
_getCorrectNetworkClient = new WeakSet();
|
|
255
|
-
getCorrectNetworkClient_fn = function(networkClientId) {
|
|
256
|
-
const selectedNetworkClientId = networkClientId ?? this.messagingSystem.call("NetworkController:getState").selectedNetworkClientId;
|
|
257
|
-
const {
|
|
258
|
-
configuration: { chainId },
|
|
259
|
-
provider
|
|
260
|
-
} = this.messagingSystem.call(
|
|
261
|
-
"NetworkController:getNetworkClientById",
|
|
262
|
-
selectedNetworkClientId
|
|
263
|
-
);
|
|
264
|
-
return {
|
|
265
|
-
chainId,
|
|
266
|
-
ethQuery: new (0, _ethquery2.default)(provider)
|
|
267
|
-
};
|
|
268
|
-
};
|
|
269
|
-
_getBalanceFromChain = new WeakSet();
|
|
270
|
-
getBalanceFromChain_fn = async function(address, ethQuery) {
|
|
271
|
-
return await _controllerutils.safelyExecuteWithTimeout.call(void 0, async () => {
|
|
272
|
-
_utils.assert.call(void 0, ethQuery, "Provider not set.");
|
|
273
|
-
return await _controllerutils.query.call(void 0, ethQuery, "getBalance", [address]);
|
|
274
|
-
});
|
|
275
|
-
};
|
|
276
|
-
var AccountTrackerController_default = AccountTrackerController;
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
exports.AccountTrackerController = AccountTrackerController; exports.AccountTrackerController_default = AccountTrackerController_default;
|
|
282
|
-
//# sourceMappingURL=chunk-HVOIBGYN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/AccountTrackerController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AccountsControllerSelectedEvmAccountChangeEvent,\n AccountsControllerGetSelectedAccountAction,\n AccountsControllerListAccountsAction,\n AccountsControllerSelectedAccountChangeEvent,\n} from '@metamask/accounts-controller';\nimport type {\n ControllerStateChangeEvent,\n ControllerGetStateAction,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport {\n query,\n safelyExecuteWithTimeout,\n toChecksumHexAddress,\n} from '@metamask/controller-utils';\nimport EthQuery from '@metamask/eth-query';\nimport type {\n NetworkClientId,\n NetworkControllerGetNetworkClientByIdAction,\n NetworkControllerGetStateAction,\n} from '@metamask/network-controller';\nimport { StaticIntervalPollingController } from '@metamask/polling-controller';\nimport type { PreferencesControllerGetStateAction } from '@metamask/preferences-controller';\nimport { type Hex, assert } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport { cloneDeep } from 'lodash';\n\n/**\n * The name of the {@link AccountTrackerController}.\n */\nconst controllerName = 'AccountTrackerController';\n\n/**\n * @type AccountInformation\n *\n * Account information object\n * @property balance - Hex string of an account balancec in wei\n */\nexport type AccountInformation = {\n balance: string;\n};\n\n/**\n * @type AccountTrackerControllerState\n *\n * Account tracker controller state\n * @property accounts - Map of addresses to account information\n */\nexport type AccountTrackerControllerState = {\n accounts: { [address: string]: AccountInformation };\n accountsByChainId: Record<string, { [address: string]: AccountInformation }>;\n};\n\nconst accountTrackerMetadata = {\n accounts: {\n persist: true,\n anonymous: false,\n },\n accountsByChainId: {\n persist: true,\n anonymous: false,\n },\n};\n\n/**\n * The action that can be performed to get the state of the {@link AccountTrackerController}.\n */\nexport type AccountTrackerControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n AccountTrackerControllerState\n>;\n\n/**\n * The actions that can be performed using the {@link AccountTrackerController}.\n */\nexport type AccountTrackerControllerActions =\n AccountTrackerControllerGetStateAction;\n\n/**\n * The messenger of the {@link AccountTrackerController} for communication.\n */\nexport type AllowedActions =\n | AccountsControllerListAccountsAction\n | PreferencesControllerGetStateAction\n | AccountsControllerGetSelectedAccountAction\n | NetworkControllerGetStateAction\n | NetworkControllerGetNetworkClientByIdAction;\n\n/**\n * The event that {@link AccountTrackerController} can emit.\n */\nexport type AccountTrackerControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n AccountTrackerControllerState\n >;\n\n/**\n * The events that {@link AccountTrackerController} can emit.\n */\nexport type AccountTrackerControllerEvents =\n AccountTrackerControllerStateChangeEvent;\n\n/**\n * The external events available to the {@link AccountTrackerController}.\n */\nexport type AllowedEvents =\n | AccountsControllerSelectedEvmAccountChangeEvent\n | AccountsControllerSelectedAccountChangeEvent;\n\n/**\n * The messenger of the {@link AccountTrackerController}.\n */\nexport type AccountTrackerControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n AccountTrackerControllerActions | AllowedActions,\n AccountTrackerControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Controller that tracks the network balances for all user accounts.\n */\nexport class AccountTrackerController extends StaticIntervalPollingController<\n typeof controllerName,\n AccountTrackerControllerState,\n AccountTrackerControllerMessenger\n> {\n readonly #refreshMutex = new Mutex();\n\n #handle?: ReturnType<typeof setTimeout>;\n\n /**\n * Creates an AccountTracker instance.\n *\n * @param options - The controller options.\n * @param options.interval - Polling interval used to fetch new account balances.\n * @param options.state - Initial state to set on this controller.\n * @param options.messenger - The controller messaging system.\n */\n constructor({\n interval = 10000,\n state,\n messenger,\n }: {\n interval?: number;\n state?: Partial<AccountTrackerControllerState>;\n messenger: AccountTrackerControllerMessenger;\n }) {\n const { selectedNetworkClientId } = messenger.call(\n 'NetworkController:getState',\n );\n const {\n configuration: { chainId },\n } = messenger.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n super({\n name: controllerName,\n messenger,\n state: {\n accounts: {},\n accountsByChainId: {\n [chainId]: {},\n },\n ...state,\n },\n metadata: accountTrackerMetadata,\n });\n this.setIntervalLength(interval);\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 this.messagingSystem.subscribe(\n 'AccountsController:selectedEvmAccountChange',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n () => this.refresh(),\n );\n }\n\n /**\n * Gets the current chain ID.\n * @returns The current chain ID.\n */\n #getCurrentChainId(): Hex {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n const {\n configuration: { chainId },\n } = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n return chainId;\n }\n\n private syncAccounts(newChainId: string) {\n const accounts = { ...this.state.accounts };\n const accountsByChainId = cloneDeep(this.state.accountsByChainId);\n\n const existing = Object.keys(accounts);\n if (!accountsByChainId[newChainId]) {\n accountsByChainId[newChainId] = {};\n existing.forEach((address) => {\n accountsByChainId[newChainId][address] = { balance: '0x0' };\n });\n }\n\n // Note: The address from the preferences controller are checksummed\n // The addresses from the accounts controller are lowercased\n const addresses = Object.values(\n this.messagingSystem\n .call('AccountsController:listAccounts')\n .map((internalAccount) =>\n toChecksumHexAddress(internalAccount.address),\n ),\n );\n const newAddresses = addresses.filter(\n (address) => !existing.includes(address),\n );\n const oldAddresses = existing.filter(\n (address) => !addresses.includes(address),\n );\n newAddresses.forEach((address) => {\n accounts[address] = { balance: '0x0' };\n });\n Object.keys(accountsByChainId).forEach((chainId) => {\n newAddresses.forEach((address) => {\n accountsByChainId[chainId][address] = {\n balance: '0x0',\n };\n });\n });\n\n oldAddresses.forEach((address) => {\n delete accounts[address];\n });\n Object.keys(accountsByChainId).forEach((chainId) => {\n oldAddresses.forEach((address) => {\n delete accountsByChainId[chainId][address];\n });\n });\n\n this.update((state) => {\n state.accounts = accounts;\n state.accountsByChainId = accountsByChainId;\n });\n }\n\n /**\n * Resolves a networkClientId to a network client config\n * or globally selected network config if not provided\n *\n * @param networkClientId - Optional networkClientId to fetch a network client with\n * @returns network client config\n */\n #getCorrectNetworkClient(networkClientId?: NetworkClientId): {\n chainId: string;\n ethQuery?: EthQuery;\n } {\n const selectedNetworkClientId =\n networkClientId ??\n this.messagingSystem.call('NetworkController:getState')\n .selectedNetworkClientId;\n const {\n configuration: { chainId },\n provider,\n } = this.messagingSystem.call(\n 'NetworkController:getNetworkClientById',\n selectedNetworkClientId,\n );\n\n return {\n chainId,\n ethQuery: new EthQuery(provider),\n };\n }\n\n /**\n * Starts a new polling interval.\n *\n * @param interval - Polling interval trigger a 'refresh'.\n */\n async poll(interval?: number): Promise<void> {\n if (interval) {\n this.setIntervalLength(interval);\n }\n\n if (this.#handle) {\n clearTimeout(this.#handle);\n }\n\n await this.refresh();\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.getIntervalLength());\n }, this.getIntervalLength());\n }\n\n /**\n * Refreshes the balances of the accounts using the networkClientId\n *\n * @param networkClientId - The network client ID used to get balances.\n */\n async _executePoll(networkClientId: string): Promise<void> {\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.refresh(networkClientId);\n }\n\n /**\n * Refreshes the balances of the accounts depending on the multi-account setting.\n * If multi-account is disabled, only updates the selected account balance.\n * If multi-account is enabled, updates balances for all accounts.\n *\n * @param networkClientId - Optional networkClientId to fetch a network client with\n */\n async refresh(networkClientId?: NetworkClientId) {\n const selectedAccount = this.messagingSystem.call(\n 'AccountsController:getSelectedAccount',\n );\n const releaseLock = await this.#refreshMutex.acquire();\n try {\n const { chainId, ethQuery } =\n this.#getCorrectNetworkClient(networkClientId);\n this.syncAccounts(chainId);\n const { accounts, accountsByChainId } = this.state;\n const { isMultiAccountBalancesEnabled } = this.messagingSystem.call(\n 'PreferencesController:getState',\n );\n\n const accountsToUpdate = isMultiAccountBalancesEnabled\n ? Object.keys(accounts)\n : [toChecksumHexAddress(selectedAccount.address)];\n\n const accountsForChain = { ...accountsByChainId[chainId] };\n for (const address of accountsToUpdate) {\n const balance = await this.#getBalanceFromChain(address, ethQuery);\n if (balance) {\n accountsForChain[address] = {\n balance,\n };\n }\n }\n\n this.update((state) => {\n if (chainId === this.#getCurrentChainId()) {\n state.accounts = accountsForChain;\n }\n state.accountsByChainId[chainId] = accountsForChain;\n });\n } finally {\n releaseLock();\n }\n }\n\n /**\n * Fetches the balance of a given address from the blockchain.\n *\n * @param address - The account address to fetch the balance for.\n * @param ethQuery - The EthQuery instance to query getBalnce with.\n * @returns A promise that resolves to the balance in a hex string format.\n */\n async #getBalanceFromChain(\n address: string,\n ethQuery?: EthQuery,\n ): Promise<string | undefined> {\n return await safelyExecuteWithTimeout(async () => {\n assert(ethQuery, 'Provider not set.');\n return await query(ethQuery, 'getBalance', [address]);\n });\n }\n\n /**\n * Sync accounts balances with some additional addresses.\n *\n * @param addresses - the additional addresses, may be hardware wallet addresses.\n * @param networkClientId - Optional networkClientId to fetch a network client with.\n * @returns accounts - addresses with synced balance\n */\n async syncBalanceWithAddresses(\n addresses: string[],\n networkClientId?: NetworkClientId,\n ): Promise<Record<string, { balance: string }>> {\n const { ethQuery } = this.#getCorrectNetworkClient(networkClientId);\n\n return await Promise.all(\n addresses.map((address): Promise<[string, string] | undefined> => {\n return safelyExecuteWithTimeout(async () => {\n assert(ethQuery, 'Provider not set.');\n const balance = await query(ethQuery, 'getBalance', [address]);\n return [address, balance];\n });\n }),\n ).then((value) => {\n return value.reduce((obj, item) => {\n if (!item) {\n return obj;\n }\n\n const [address, balance] = item;\n return {\n ...obj,\n [address]: {\n balance,\n },\n };\n }, {});\n });\n }\n}\n\nexport default AccountTrackerController;\n"]}
|