@metamask/assets-controllers 38.0.0 → 38.1.0
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 +37 -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 +368 -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 +365 -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 +21 -16
- 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
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERC1155Standard = void 0;
|
|
4
|
+
const contracts_1 = require("@ethersproject/contracts");
|
|
5
|
+
const controller_utils_1 = require("@metamask/controller-utils");
|
|
6
|
+
const metamask_eth_abis_1 = require("@metamask/metamask-eth-abis");
|
|
7
|
+
const assetsUtil_1 = require("../../../assetsUtil.cjs");
|
|
8
|
+
class ERC1155Standard {
|
|
9
|
+
constructor(provider) {
|
|
10
|
+
this.provider = provider;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Query if contract implements ERC1155 URI Metadata interface.
|
|
14
|
+
*
|
|
15
|
+
* @param address - ERC1155 asset contract address.
|
|
16
|
+
* @returns Promise resolving to whether the contract implements ERC1155 URI Metadata interface.
|
|
17
|
+
*/
|
|
18
|
+
async contractSupportsURIMetadataInterface(address) {
|
|
19
|
+
return this.contractSupportsInterface(address, controller_utils_1.ERC1155_METADATA_URI_INTERFACE_ID);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Query if contract implements ERC1155 Token Receiver interface.
|
|
23
|
+
*
|
|
24
|
+
* @param address - ERC1155 asset contract address.
|
|
25
|
+
* @returns Promise resolving to whether the contract implements ERC1155 Token Receiver interface.
|
|
26
|
+
*/
|
|
27
|
+
async contractSupportsTokenReceiverInterface(address) {
|
|
28
|
+
return this.contractSupportsInterface(address, controller_utils_1.ERC1155_TOKEN_RECEIVER_INTERFACE_ID);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Query if contract implements ERC1155 interface.
|
|
32
|
+
*
|
|
33
|
+
* @param address - ERC1155 asset contract address.
|
|
34
|
+
* @returns Promise resolving to whether the contract implements the base ERC1155 interface.
|
|
35
|
+
*/
|
|
36
|
+
async contractSupportsBase1155Interface(address) {
|
|
37
|
+
return this.contractSupportsInterface(address, controller_utils_1.ERC1155_INTERFACE_ID);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Query for tokenURI for a given asset.
|
|
41
|
+
*
|
|
42
|
+
* @param address - ERC1155 asset contract address.
|
|
43
|
+
* @param tokenId - ERC1155 asset identifier.
|
|
44
|
+
* @returns Promise resolving to the 'tokenURI'.
|
|
45
|
+
*/
|
|
46
|
+
async getTokenURI(address, tokenId) {
|
|
47
|
+
const contract = new contracts_1.Contract(address, metamask_eth_abis_1.abiERC1155, this.provider);
|
|
48
|
+
return contract.uri(tokenId);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Query for balance of a given ERC1155 token.
|
|
52
|
+
*
|
|
53
|
+
* @param contractAddress - ERC1155 asset contract address.
|
|
54
|
+
* @param address - Wallet public address.
|
|
55
|
+
* @param tokenId - ERC1155 asset identifier.
|
|
56
|
+
* @returns Promise resolving to the 'balanceOf'.
|
|
57
|
+
*/
|
|
58
|
+
async getBalanceOf(contractAddress, address, tokenId) {
|
|
59
|
+
const contract = new contracts_1.Contract(contractAddress, metamask_eth_abis_1.abiERC1155, this.provider);
|
|
60
|
+
const balance = await contract.balanceOf(address, tokenId);
|
|
61
|
+
return (0, assetsUtil_1.ethersBigNumberToBN)(balance);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Transfer single ERC1155 token.
|
|
65
|
+
* When minting/creating tokens, the from arg MUST be set to 0x0 (i.e. zero address).
|
|
66
|
+
* When burning/destroying tokens, the to arg MUST be set to 0x0 (i.e. zero address).
|
|
67
|
+
*
|
|
68
|
+
* @param operator - ERC1155 token address.
|
|
69
|
+
* @param from - ERC1155 token holder.
|
|
70
|
+
* @param to - ERC1155 token recipient.
|
|
71
|
+
* @param id - ERC1155 token id.
|
|
72
|
+
* @param value - Number of tokens to be sent.
|
|
73
|
+
* @returns Promise resolving to the 'transferSingle'.
|
|
74
|
+
*/
|
|
75
|
+
async transferSingle(operator, from, to, id, value) {
|
|
76
|
+
const contract = new contracts_1.Contract(operator, metamask_eth_abis_1.abiERC1155, this.provider);
|
|
77
|
+
return new Promise((resolve, reject) => {
|
|
78
|
+
contract.transferSingle(operator, from, to, id, value, (error, result) => {
|
|
79
|
+
/* istanbul ignore if */
|
|
80
|
+
if (error) {
|
|
81
|
+
reject(error);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
resolve(result);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Query for symbol for a given asset.
|
|
90
|
+
*
|
|
91
|
+
* @param address - ERC1155 asset contract address.
|
|
92
|
+
* @returns Promise resolving to the 'symbol'.
|
|
93
|
+
*/
|
|
94
|
+
async getAssetSymbol(address) {
|
|
95
|
+
const contract = new contracts_1.Contract(address,
|
|
96
|
+
// Contract ABI fragment containing only the symbol method to fetch the symbol of the contract.
|
|
97
|
+
[
|
|
98
|
+
{
|
|
99
|
+
inputs: [],
|
|
100
|
+
name: 'symbol',
|
|
101
|
+
outputs: [{ name: '_symbol', type: 'string' }],
|
|
102
|
+
stateMutability: 'view',
|
|
103
|
+
type: 'function',
|
|
104
|
+
payable: false,
|
|
105
|
+
},
|
|
106
|
+
], this.provider);
|
|
107
|
+
return contract.symbol();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Query for name for a given asset.
|
|
111
|
+
*
|
|
112
|
+
* @param address - ERC1155 asset contract address.
|
|
113
|
+
* @returns Promise resolving to the 'name'.
|
|
114
|
+
*/
|
|
115
|
+
async getAssetName(address) {
|
|
116
|
+
const contract = new contracts_1.Contract(address,
|
|
117
|
+
// Contract ABI fragment containing only the name method to fetch the name of the contract.
|
|
118
|
+
[
|
|
119
|
+
{
|
|
120
|
+
inputs: [],
|
|
121
|
+
name: 'name',
|
|
122
|
+
outputs: [{ name: '_name', type: 'string' }],
|
|
123
|
+
stateMutability: 'view',
|
|
124
|
+
type: 'function',
|
|
125
|
+
payable: false,
|
|
126
|
+
},
|
|
127
|
+
], this.provider);
|
|
128
|
+
return contract.name();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Query if a contract implements an interface.
|
|
132
|
+
*
|
|
133
|
+
* @param address - ERC1155 asset contract address.
|
|
134
|
+
* @param interfaceId - Interface identifier.
|
|
135
|
+
* @returns Promise resolving to whether the contract implements `interfaceID`.
|
|
136
|
+
*/
|
|
137
|
+
async contractSupportsInterface(address, interfaceId) {
|
|
138
|
+
const contract = new contracts_1.Contract(address, metamask_eth_abis_1.abiERC1155, this.provider);
|
|
139
|
+
return contract.supportsInterface(interfaceId);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Query if a contract implements an interface.
|
|
143
|
+
*
|
|
144
|
+
* @param address - Asset contract address.
|
|
145
|
+
* @param ipfsGateway - The user's preferred IPFS gateway.
|
|
146
|
+
* @param tokenId - tokenId of a given token in the contract.
|
|
147
|
+
* @returns Promise resolving an object containing the standard, tokenURI, symbol and name of the given contract/tokenId pair.
|
|
148
|
+
*/
|
|
149
|
+
async getDetails(address, ipfsGateway, tokenId) {
|
|
150
|
+
const isERC1155 = await this.contractSupportsBase1155Interface(address);
|
|
151
|
+
if (!isERC1155) {
|
|
152
|
+
throw new Error("This isn't a valid ERC1155 contract");
|
|
153
|
+
}
|
|
154
|
+
let image;
|
|
155
|
+
const [symbol, name, tokenURI] = await Promise.all([
|
|
156
|
+
(0, controller_utils_1.safelyExecute)(() => this.getAssetSymbol(address)),
|
|
157
|
+
(0, controller_utils_1.safelyExecute)(() => this.getAssetName(address)),
|
|
158
|
+
tokenId
|
|
159
|
+
? (0, controller_utils_1.safelyExecute)(() => this.getTokenURI(address, tokenId).then((uri) => uri.startsWith('ipfs://')
|
|
160
|
+
? (0, assetsUtil_1.getFormattedIpfsUrl)(ipfsGateway, uri, true)
|
|
161
|
+
: uri))
|
|
162
|
+
: undefined,
|
|
163
|
+
]);
|
|
164
|
+
if (tokenURI) {
|
|
165
|
+
try {
|
|
166
|
+
const response = await (0, controller_utils_1.timeoutFetch)(tokenURI);
|
|
167
|
+
const object = await response.json();
|
|
168
|
+
image = object?.image;
|
|
169
|
+
if (image?.startsWith('ipfs://')) {
|
|
170
|
+
image = (0, assetsUtil_1.getFormattedIpfsUrl)(ipfsGateway, image, true);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Catch block should be kept empty to ignore exceptions, and
|
|
175
|
+
// pass as much information as possible to the return statement
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// TODO consider querying to the metadata to get name.
|
|
179
|
+
return {
|
|
180
|
+
standard: controller_utils_1.ERC1155,
|
|
181
|
+
tokenURI,
|
|
182
|
+
image,
|
|
183
|
+
symbol,
|
|
184
|
+
name,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.ERC1155Standard = ERC1155Standard;
|
|
189
|
+
//# sourceMappingURL=ERC1155Standard.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ERC1155Standard.cjs","sourceRoot":"","sources":["../../../../src/Standards/NftStandards/ERC1155/ERC1155Standard.ts"],"names":[],"mappings":"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","sourcesContent":["import { Contract } from '@ethersproject/contracts';\nimport type { Web3Provider } from '@ethersproject/providers';\nimport {\n ERC1155,\n ERC1155_INTERFACE_ID,\n ERC1155_METADATA_URI_INTERFACE_ID,\n ERC1155_TOKEN_RECEIVER_INTERFACE_ID,\n safelyExecute,\n timeoutFetch,\n} from '@metamask/controller-utils';\nimport { abiERC1155 } from '@metamask/metamask-eth-abis';\nimport type * as BN from 'bn.js';\n\nimport { getFormattedIpfsUrl, ethersBigNumberToBN } from '../../../assetsUtil';\n\nexport class ERC1155Standard {\n private readonly provider: Web3Provider;\n\n constructor(provider: Web3Provider) {\n this.provider = provider;\n }\n\n /**\n * Query if contract implements ERC1155 URI Metadata interface.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to whether the contract implements ERC1155 URI Metadata interface.\n */\n async contractSupportsURIMetadataInterface(\n address: string,\n ): Promise<boolean> {\n return this.contractSupportsInterface(\n address,\n ERC1155_METADATA_URI_INTERFACE_ID,\n );\n }\n\n /**\n * Query if contract implements ERC1155 Token Receiver interface.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to whether the contract implements ERC1155 Token Receiver interface.\n */\n async contractSupportsTokenReceiverInterface(\n address: string,\n ): Promise<boolean> {\n return this.contractSupportsInterface(\n address,\n ERC1155_TOKEN_RECEIVER_INTERFACE_ID,\n );\n }\n\n /**\n * Query if contract implements ERC1155 interface.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to whether the contract implements the base ERC1155 interface.\n */\n async contractSupportsBase1155Interface(address: string): Promise<boolean> {\n return this.contractSupportsInterface(address, ERC1155_INTERFACE_ID);\n }\n\n /**\n * Query for tokenURI for a given asset.\n *\n * @param address - ERC1155 asset contract address.\n * @param tokenId - ERC1155 asset identifier.\n * @returns Promise resolving to the 'tokenURI'.\n */\n async getTokenURI(address: string, tokenId: string): Promise<string> {\n const contract = new Contract(address, abiERC1155, this.provider);\n return contract.uri(tokenId);\n }\n\n /**\n * Query for balance of a given ERC1155 token.\n *\n * @param contractAddress - ERC1155 asset contract address.\n * @param address - Wallet public address.\n * @param tokenId - ERC1155 asset identifier.\n * @returns Promise resolving to the 'balanceOf'.\n */\n async getBalanceOf(\n contractAddress: string,\n address: string,\n tokenId: string,\n ): Promise<BN> {\n const contract = new Contract(contractAddress, abiERC1155, this.provider);\n const balance = await contract.balanceOf(address, tokenId);\n return ethersBigNumberToBN(balance);\n }\n\n /**\n * Transfer single ERC1155 token.\n * When minting/creating tokens, the from arg MUST be set to 0x0 (i.e. zero address).\n * When burning/destroying tokens, the to arg MUST be set to 0x0 (i.e. zero address).\n *\n * @param operator - ERC1155 token address.\n * @param from - ERC1155 token holder.\n * @param to - ERC1155 token recipient.\n * @param id - ERC1155 token id.\n * @param value - Number of tokens to be sent.\n * @returns Promise resolving to the 'transferSingle'.\n */\n async transferSingle(\n operator: string,\n from: string,\n to: string,\n id: string,\n value: string,\n ): Promise<void> {\n const contract = new Contract(operator, abiERC1155, this.provider);\n return new Promise<void>((resolve, reject) => {\n contract.transferSingle(\n operator,\n from,\n to,\n id,\n value,\n (error: Error, result: void) => {\n /* istanbul ignore if */\n if (error) {\n reject(error);\n return;\n }\n resolve(result);\n },\n );\n });\n }\n\n /**\n * Query for symbol for a given asset.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to the 'symbol'.\n */\n async getAssetSymbol(address: string): Promise<string> {\n const contract = new Contract(\n address,\n // Contract ABI fragment containing only the symbol method to fetch the symbol of the contract.\n [\n {\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '_symbol', type: 'string' }],\n stateMutability: 'view',\n type: 'function',\n payable: false,\n },\n ],\n this.provider,\n );\n return contract.symbol();\n }\n\n /**\n * Query for name for a given asset.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to the 'name'.\n */\n async getAssetName(address: string): Promise<string> {\n const contract = new Contract(\n address,\n // Contract ABI fragment containing only the name method to fetch the name of the contract.\n [\n {\n inputs: [],\n name: 'name',\n outputs: [{ name: '_name', type: 'string' }],\n stateMutability: 'view',\n type: 'function',\n payable: false,\n },\n ],\n this.provider,\n );\n return contract.name();\n }\n\n /**\n * Query if a contract implements an interface.\n *\n * @param address - ERC1155 asset contract address.\n * @param interfaceId - Interface identifier.\n * @returns Promise resolving to whether the contract implements `interfaceID`.\n */\n private async contractSupportsInterface(\n address: string,\n interfaceId: string,\n ): Promise<boolean> {\n const contract = new Contract(address, abiERC1155, this.provider);\n return contract.supportsInterface(interfaceId);\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 async getDetails(\n address: string,\n ipfsGateway: string,\n tokenId?: string,\n ): Promise<{\n standard: string;\n tokenURI: string | undefined;\n image: string | undefined;\n name: string | undefined;\n symbol: string | undefined;\n }> {\n const isERC1155 = await this.contractSupportsBase1155Interface(address);\n\n if (!isERC1155) {\n throw new Error(\"This isn't a valid ERC1155 contract\");\n }\n\n let image;\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 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 // Catch block should be kept empty to ignore exceptions, and\n // pass as much information as possible to the return statement\n }\n }\n\n // TODO consider querying to the metadata to get name.\n return {\n standard: ERC1155,\n tokenURI,\n image,\n symbol,\n name,\n };\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Web3Provider } from
|
|
2
|
-
import type * as BN from
|
|
1
|
+
import type { Web3Provider } from "@ethersproject/providers";
|
|
2
|
+
import type * as BN from "bn.js";
|
|
3
3
|
export declare class ERC1155Standard {
|
|
4
4
|
private readonly provider;
|
|
5
5
|
constructor(provider: Web3Provider);
|
|
@@ -92,4 +92,4 @@ export declare class ERC1155Standard {
|
|
|
92
92
|
symbol: string | undefined;
|
|
93
93
|
}>;
|
|
94
94
|
}
|
|
95
|
-
//# sourceMappingURL=ERC1155Standard.d.
|
|
95
|
+
//# sourceMappingURL=ERC1155Standard.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ERC1155Standard.d.cts","sourceRoot":"","sources":["../../../../src/Standards/NftStandards/ERC1155/ERC1155Standard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iCAAiC;AAU7D,OAAO,KAAK,KAAK,EAAE,cAAc;AAIjC,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;gBAE5B,QAAQ,EAAE,YAAY;IAIlC;;;;;OAKG;IACG,oCAAoC,CACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC;IAOnB;;;;;OAKG;IACG,sCAAsC,CAC1C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC;IAOnB;;;;;OAKG;IACG,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1E;;;;;;OAMG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpE;;;;;;;OAOG;IACG,YAAY,CAChB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,EAAE,CAAC;IAMd;;;;;;;;;;;OAWG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAqBhB;;;;;OAKG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBtD;;;;;OAKG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBpD;;;;;;OAMG;YACW,yBAAyB;IAQvC;;;;;;;OAOG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC5B,CAAC;CA8CH"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { Web3Provider } from "@ethersproject/providers";
|
|
2
|
+
import type * as BN from "bn.js";
|
|
3
|
+
export declare class ERC1155Standard {
|
|
4
|
+
private readonly provider;
|
|
5
|
+
constructor(provider: Web3Provider);
|
|
6
|
+
/**
|
|
7
|
+
* Query if contract implements ERC1155 URI Metadata interface.
|
|
8
|
+
*
|
|
9
|
+
* @param address - ERC1155 asset contract address.
|
|
10
|
+
* @returns Promise resolving to whether the contract implements ERC1155 URI Metadata interface.
|
|
11
|
+
*/
|
|
12
|
+
contractSupportsURIMetadataInterface(address: string): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Query if contract implements ERC1155 Token Receiver interface.
|
|
15
|
+
*
|
|
16
|
+
* @param address - ERC1155 asset contract address.
|
|
17
|
+
* @returns Promise resolving to whether the contract implements ERC1155 Token Receiver interface.
|
|
18
|
+
*/
|
|
19
|
+
contractSupportsTokenReceiverInterface(address: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Query if contract implements ERC1155 interface.
|
|
22
|
+
*
|
|
23
|
+
* @param address - ERC1155 asset contract address.
|
|
24
|
+
* @returns Promise resolving to whether the contract implements the base ERC1155 interface.
|
|
25
|
+
*/
|
|
26
|
+
contractSupportsBase1155Interface(address: string): Promise<boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* Query for tokenURI for a given asset.
|
|
29
|
+
*
|
|
30
|
+
* @param address - ERC1155 asset contract address.
|
|
31
|
+
* @param tokenId - ERC1155 asset identifier.
|
|
32
|
+
* @returns Promise resolving to the 'tokenURI'.
|
|
33
|
+
*/
|
|
34
|
+
getTokenURI(address: string, tokenId: string): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Query for balance of a given ERC1155 token.
|
|
37
|
+
*
|
|
38
|
+
* @param contractAddress - ERC1155 asset contract address.
|
|
39
|
+
* @param address - Wallet public address.
|
|
40
|
+
* @param tokenId - ERC1155 asset identifier.
|
|
41
|
+
* @returns Promise resolving to the 'balanceOf'.
|
|
42
|
+
*/
|
|
43
|
+
getBalanceOf(contractAddress: string, address: string, tokenId: string): Promise<BN>;
|
|
44
|
+
/**
|
|
45
|
+
* Transfer single ERC1155 token.
|
|
46
|
+
* When minting/creating tokens, the from arg MUST be set to 0x0 (i.e. zero address).
|
|
47
|
+
* When burning/destroying tokens, the to arg MUST be set to 0x0 (i.e. zero address).
|
|
48
|
+
*
|
|
49
|
+
* @param operator - ERC1155 token address.
|
|
50
|
+
* @param from - ERC1155 token holder.
|
|
51
|
+
* @param to - ERC1155 token recipient.
|
|
52
|
+
* @param id - ERC1155 token id.
|
|
53
|
+
* @param value - Number of tokens to be sent.
|
|
54
|
+
* @returns Promise resolving to the 'transferSingle'.
|
|
55
|
+
*/
|
|
56
|
+
transferSingle(operator: string, from: string, to: string, id: string, value: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Query for symbol for a given asset.
|
|
59
|
+
*
|
|
60
|
+
* @param address - ERC1155 asset contract address.
|
|
61
|
+
* @returns Promise resolving to the 'symbol'.
|
|
62
|
+
*/
|
|
63
|
+
getAssetSymbol(address: string): Promise<string>;
|
|
64
|
+
/**
|
|
65
|
+
* Query for name for a given asset.
|
|
66
|
+
*
|
|
67
|
+
* @param address - ERC1155 asset contract address.
|
|
68
|
+
* @returns Promise resolving to the 'name'.
|
|
69
|
+
*/
|
|
70
|
+
getAssetName(address: string): Promise<string>;
|
|
71
|
+
/**
|
|
72
|
+
* Query if a contract implements an interface.
|
|
73
|
+
*
|
|
74
|
+
* @param address - ERC1155 asset contract address.
|
|
75
|
+
* @param interfaceId - Interface identifier.
|
|
76
|
+
* @returns Promise resolving to whether the contract implements `interfaceID`.
|
|
77
|
+
*/
|
|
78
|
+
private contractSupportsInterface;
|
|
79
|
+
/**
|
|
80
|
+
* Query if a contract implements an interface.
|
|
81
|
+
*
|
|
82
|
+
* @param address - Asset contract address.
|
|
83
|
+
* @param ipfsGateway - The user's preferred IPFS gateway.
|
|
84
|
+
* @param tokenId - tokenId of a given token in the contract.
|
|
85
|
+
* @returns Promise resolving an object containing the standard, tokenURI, symbol and name of the given contract/tokenId pair.
|
|
86
|
+
*/
|
|
87
|
+
getDetails(address: string, ipfsGateway: string, tokenId?: string): Promise<{
|
|
88
|
+
standard: string;
|
|
89
|
+
tokenURI: string | undefined;
|
|
90
|
+
image: string | undefined;
|
|
91
|
+
name: string | undefined;
|
|
92
|
+
symbol: string | undefined;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=ERC1155Standard.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ERC1155Standard.d.mts","sourceRoot":"","sources":["../../../../src/Standards/NftStandards/ERC1155/ERC1155Standard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iCAAiC;AAU7D,OAAO,KAAK,KAAK,EAAE,cAAc;AAIjC,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;gBAE5B,QAAQ,EAAE,YAAY;IAIlC;;;;;OAKG;IACG,oCAAoC,CACxC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC;IAOnB;;;;;OAKG;IACG,sCAAsC,CAC1C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC;IAOnB;;;;;OAKG;IACG,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1E;;;;;;OAMG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpE;;;;;;;OAOG;IACG,YAAY,CAChB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,EAAE,CAAC;IAMd;;;;;;;;;;;OAWG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAqBhB;;;;;OAKG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBtD;;;;;OAKG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBpD;;;;;;OAMG;YACW,yBAAyB;IAQvC;;;;;;;OAOG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;KAC5B,CAAC;CA8CH"}
|
|
@@ -1,9 +1,185 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from "
|
|
4
|
-
import "../../../
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
1
|
+
import { Contract } from "@ethersproject/contracts";
|
|
2
|
+
import { ERC1155, ERC1155_INTERFACE_ID, ERC1155_METADATA_URI_INTERFACE_ID, ERC1155_TOKEN_RECEIVER_INTERFACE_ID, safelyExecute, timeoutFetch } from "@metamask/controller-utils";
|
|
3
|
+
import { abiERC1155 } from "@metamask/metamask-eth-abis";
|
|
4
|
+
import { getFormattedIpfsUrl, ethersBigNumberToBN } from "../../../assetsUtil.mjs";
|
|
5
|
+
export class ERC1155Standard {
|
|
6
|
+
constructor(provider) {
|
|
7
|
+
this.provider = provider;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Query if contract implements ERC1155 URI Metadata interface.
|
|
11
|
+
*
|
|
12
|
+
* @param address - ERC1155 asset contract address.
|
|
13
|
+
* @returns Promise resolving to whether the contract implements ERC1155 URI Metadata interface.
|
|
14
|
+
*/
|
|
15
|
+
async contractSupportsURIMetadataInterface(address) {
|
|
16
|
+
return this.contractSupportsInterface(address, ERC1155_METADATA_URI_INTERFACE_ID);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Query if contract implements ERC1155 Token Receiver interface.
|
|
20
|
+
*
|
|
21
|
+
* @param address - ERC1155 asset contract address.
|
|
22
|
+
* @returns Promise resolving to whether the contract implements ERC1155 Token Receiver interface.
|
|
23
|
+
*/
|
|
24
|
+
async contractSupportsTokenReceiverInterface(address) {
|
|
25
|
+
return this.contractSupportsInterface(address, ERC1155_TOKEN_RECEIVER_INTERFACE_ID);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Query if contract implements ERC1155 interface.
|
|
29
|
+
*
|
|
30
|
+
* @param address - ERC1155 asset contract address.
|
|
31
|
+
* @returns Promise resolving to whether the contract implements the base ERC1155 interface.
|
|
32
|
+
*/
|
|
33
|
+
async contractSupportsBase1155Interface(address) {
|
|
34
|
+
return this.contractSupportsInterface(address, ERC1155_INTERFACE_ID);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Query for tokenURI for a given asset.
|
|
38
|
+
*
|
|
39
|
+
* @param address - ERC1155 asset contract address.
|
|
40
|
+
* @param tokenId - ERC1155 asset identifier.
|
|
41
|
+
* @returns Promise resolving to the 'tokenURI'.
|
|
42
|
+
*/
|
|
43
|
+
async getTokenURI(address, tokenId) {
|
|
44
|
+
const contract = new Contract(address, abiERC1155, this.provider);
|
|
45
|
+
return contract.uri(tokenId);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Query for balance of a given ERC1155 token.
|
|
49
|
+
*
|
|
50
|
+
* @param contractAddress - ERC1155 asset contract address.
|
|
51
|
+
* @param address - Wallet public address.
|
|
52
|
+
* @param tokenId - ERC1155 asset identifier.
|
|
53
|
+
* @returns Promise resolving to the 'balanceOf'.
|
|
54
|
+
*/
|
|
55
|
+
async getBalanceOf(contractAddress, address, tokenId) {
|
|
56
|
+
const contract = new Contract(contractAddress, abiERC1155, this.provider);
|
|
57
|
+
const balance = await contract.balanceOf(address, tokenId);
|
|
58
|
+
return ethersBigNumberToBN(balance);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Transfer single ERC1155 token.
|
|
62
|
+
* When minting/creating tokens, the from arg MUST be set to 0x0 (i.e. zero address).
|
|
63
|
+
* When burning/destroying tokens, the to arg MUST be set to 0x0 (i.e. zero address).
|
|
64
|
+
*
|
|
65
|
+
* @param operator - ERC1155 token address.
|
|
66
|
+
* @param from - ERC1155 token holder.
|
|
67
|
+
* @param to - ERC1155 token recipient.
|
|
68
|
+
* @param id - ERC1155 token id.
|
|
69
|
+
* @param value - Number of tokens to be sent.
|
|
70
|
+
* @returns Promise resolving to the 'transferSingle'.
|
|
71
|
+
*/
|
|
72
|
+
async transferSingle(operator, from, to, id, value) {
|
|
73
|
+
const contract = new Contract(operator, abiERC1155, this.provider);
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
contract.transferSingle(operator, from, to, id, value, (error, result) => {
|
|
76
|
+
/* istanbul ignore if */
|
|
77
|
+
if (error) {
|
|
78
|
+
reject(error);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
resolve(result);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Query for symbol for a given asset.
|
|
87
|
+
*
|
|
88
|
+
* @param address - ERC1155 asset contract address.
|
|
89
|
+
* @returns Promise resolving to the 'symbol'.
|
|
90
|
+
*/
|
|
91
|
+
async getAssetSymbol(address) {
|
|
92
|
+
const contract = new Contract(address,
|
|
93
|
+
// Contract ABI fragment containing only the symbol method to fetch the symbol of the contract.
|
|
94
|
+
[
|
|
95
|
+
{
|
|
96
|
+
inputs: [],
|
|
97
|
+
name: 'symbol',
|
|
98
|
+
outputs: [{ name: '_symbol', type: 'string' }],
|
|
99
|
+
stateMutability: 'view',
|
|
100
|
+
type: 'function',
|
|
101
|
+
payable: false,
|
|
102
|
+
},
|
|
103
|
+
], this.provider);
|
|
104
|
+
return contract.symbol();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Query for name for a given asset.
|
|
108
|
+
*
|
|
109
|
+
* @param address - ERC1155 asset contract address.
|
|
110
|
+
* @returns Promise resolving to the 'name'.
|
|
111
|
+
*/
|
|
112
|
+
async getAssetName(address) {
|
|
113
|
+
const contract = new Contract(address,
|
|
114
|
+
// Contract ABI fragment containing only the name method to fetch the name of the contract.
|
|
115
|
+
[
|
|
116
|
+
{
|
|
117
|
+
inputs: [],
|
|
118
|
+
name: 'name',
|
|
119
|
+
outputs: [{ name: '_name', type: 'string' }],
|
|
120
|
+
stateMutability: 'view',
|
|
121
|
+
type: 'function',
|
|
122
|
+
payable: false,
|
|
123
|
+
},
|
|
124
|
+
], this.provider);
|
|
125
|
+
return contract.name();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Query if a contract implements an interface.
|
|
129
|
+
*
|
|
130
|
+
* @param address - ERC1155 asset contract address.
|
|
131
|
+
* @param interfaceId - Interface identifier.
|
|
132
|
+
* @returns Promise resolving to whether the contract implements `interfaceID`.
|
|
133
|
+
*/
|
|
134
|
+
async contractSupportsInterface(address, interfaceId) {
|
|
135
|
+
const contract = new Contract(address, abiERC1155, this.provider);
|
|
136
|
+
return contract.supportsInterface(interfaceId);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Query if a contract implements an interface.
|
|
140
|
+
*
|
|
141
|
+
* @param address - Asset contract address.
|
|
142
|
+
* @param ipfsGateway - The user's preferred IPFS gateway.
|
|
143
|
+
* @param tokenId - tokenId of a given token in the contract.
|
|
144
|
+
* @returns Promise resolving an object containing the standard, tokenURI, symbol and name of the given contract/tokenId pair.
|
|
145
|
+
*/
|
|
146
|
+
async getDetails(address, ipfsGateway, tokenId) {
|
|
147
|
+
const isERC1155 = await this.contractSupportsBase1155Interface(address);
|
|
148
|
+
if (!isERC1155) {
|
|
149
|
+
throw new Error("This isn't a valid ERC1155 contract");
|
|
150
|
+
}
|
|
151
|
+
let image;
|
|
152
|
+
const [symbol, name, tokenURI] = await Promise.all([
|
|
153
|
+
safelyExecute(() => this.getAssetSymbol(address)),
|
|
154
|
+
safelyExecute(() => this.getAssetName(address)),
|
|
155
|
+
tokenId
|
|
156
|
+
? safelyExecute(() => this.getTokenURI(address, tokenId).then((uri) => uri.startsWith('ipfs://')
|
|
157
|
+
? getFormattedIpfsUrl(ipfsGateway, uri, true)
|
|
158
|
+
: uri))
|
|
159
|
+
: undefined,
|
|
160
|
+
]);
|
|
161
|
+
if (tokenURI) {
|
|
162
|
+
try {
|
|
163
|
+
const response = await timeoutFetch(tokenURI);
|
|
164
|
+
const object = await response.json();
|
|
165
|
+
image = object?.image;
|
|
166
|
+
if (image?.startsWith('ipfs://')) {
|
|
167
|
+
image = getFormattedIpfsUrl(ipfsGateway, image, true);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Catch block should be kept empty to ignore exceptions, and
|
|
172
|
+
// pass as much information as possible to the return statement
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// TODO consider querying to the metadata to get name.
|
|
176
|
+
return {
|
|
177
|
+
standard: ERC1155,
|
|
178
|
+
tokenURI,
|
|
179
|
+
image,
|
|
180
|
+
symbol,
|
|
181
|
+
name,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
9
185
|
//# sourceMappingURL=ERC1155Standard.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"file":"ERC1155Standard.mjs","sourceRoot":"","sources":["../../../../src/Standards/NftStandards/ERC1155/ERC1155Standard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,iCAAiC;AAEpD,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,iCAAiC,EACjC,mCAAmC,EACnC,aAAa,EACb,YAAY,EACb,mCAAmC;AACpC,OAAO,EAAE,UAAU,EAAE,oCAAoC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gCAA4B;AAE/E,MAAM,OAAO,eAAe;IAG1B,YAAY,QAAsB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,oCAAoC,CACxC,OAAe;QAEf,OAAO,IAAI,CAAC,yBAAyB,CACnC,OAAO,EACP,iCAAiC,CAClC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,sCAAsC,CAC1C,OAAe;QAEf,OAAO,IAAI,CAAC,yBAAyB,CACnC,OAAO,EACP,mCAAmC,CACpC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iCAAiC,CAAC,OAAe;QACrD,OAAO,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,OAAe;QAChD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY,CAChB,eAAuB,EACvB,OAAe,EACf,OAAe;QAEf,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,IAAY,EACZ,EAAU,EACV,EAAU,EACV,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,QAAQ,CAAC,cAAc,CACrB,QAAQ,EACR,IAAI,EACJ,EAAE,EACF,EAAE,EACF,KAAK,EACL,CAAC,KAAY,EAAE,MAAY,EAAE,EAAE;gBAC7B,wBAAwB;gBACxB,IAAI,KAAK,EAAE;oBACT,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;iBACR;gBACD,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAC3B,OAAO;QACP,+FAA+F;QAC/F;YACE;gBACE,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC9C,eAAe,EAAE,MAAM;gBACvB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,KAAK;aACf;SACF,EACD,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,OAAe;QAChC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAC3B,OAAO;QACP,2FAA2F;QAC3F;YACE;gBACE,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC5C,eAAe,EAAE,MAAM;gBACvB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,KAAK;aACf;SACF,EACD,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,yBAAyB,CACrC,OAAe,EACf,WAAmB;QAEnB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CACd,OAAe,EACf,WAAmB,EACnB,OAAgB;QAQhB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAC;QAExE,IAAI,CAAC,SAAS,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SACxD;QAED,IAAI,KAAK,CAAC;QAEV,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACjD,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO;gBACL,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,CACjB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9C,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;oBACvB,CAAC,CAAC,mBAAmB,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC;oBAC7C,CAAC,CAAC,GAAG,CACR,CACF;gBACH,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE;YACZ,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACrC,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;gBACtB,IAAI,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE;oBAChC,KAAK,GAAG,mBAAmB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;iBACvD;aACF;YAAC,MAAM;gBACN,6DAA6D;gBAC7D,+DAA+D;aAChE;SACF;QAED,sDAAsD;QACtD,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,QAAQ;YACR,KAAK;YACL,MAAM;YACN,IAAI;SACL,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { Contract } from '@ethersproject/contracts';\nimport type { Web3Provider } from '@ethersproject/providers';\nimport {\n ERC1155,\n ERC1155_INTERFACE_ID,\n ERC1155_METADATA_URI_INTERFACE_ID,\n ERC1155_TOKEN_RECEIVER_INTERFACE_ID,\n safelyExecute,\n timeoutFetch,\n} from '@metamask/controller-utils';\nimport { abiERC1155 } from '@metamask/metamask-eth-abis';\nimport type * as BN from 'bn.js';\n\nimport { getFormattedIpfsUrl, ethersBigNumberToBN } from '../../../assetsUtil';\n\nexport class ERC1155Standard {\n private readonly provider: Web3Provider;\n\n constructor(provider: Web3Provider) {\n this.provider = provider;\n }\n\n /**\n * Query if contract implements ERC1155 URI Metadata interface.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to whether the contract implements ERC1155 URI Metadata interface.\n */\n async contractSupportsURIMetadataInterface(\n address: string,\n ): Promise<boolean> {\n return this.contractSupportsInterface(\n address,\n ERC1155_METADATA_URI_INTERFACE_ID,\n );\n }\n\n /**\n * Query if contract implements ERC1155 Token Receiver interface.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to whether the contract implements ERC1155 Token Receiver interface.\n */\n async contractSupportsTokenReceiverInterface(\n address: string,\n ): Promise<boolean> {\n return this.contractSupportsInterface(\n address,\n ERC1155_TOKEN_RECEIVER_INTERFACE_ID,\n );\n }\n\n /**\n * Query if contract implements ERC1155 interface.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to whether the contract implements the base ERC1155 interface.\n */\n async contractSupportsBase1155Interface(address: string): Promise<boolean> {\n return this.contractSupportsInterface(address, ERC1155_INTERFACE_ID);\n }\n\n /**\n * Query for tokenURI for a given asset.\n *\n * @param address - ERC1155 asset contract address.\n * @param tokenId - ERC1155 asset identifier.\n * @returns Promise resolving to the 'tokenURI'.\n */\n async getTokenURI(address: string, tokenId: string): Promise<string> {\n const contract = new Contract(address, abiERC1155, this.provider);\n return contract.uri(tokenId);\n }\n\n /**\n * Query for balance of a given ERC1155 token.\n *\n * @param contractAddress - ERC1155 asset contract address.\n * @param address - Wallet public address.\n * @param tokenId - ERC1155 asset identifier.\n * @returns Promise resolving to the 'balanceOf'.\n */\n async getBalanceOf(\n contractAddress: string,\n address: string,\n tokenId: string,\n ): Promise<BN> {\n const contract = new Contract(contractAddress, abiERC1155, this.provider);\n const balance = await contract.balanceOf(address, tokenId);\n return ethersBigNumberToBN(balance);\n }\n\n /**\n * Transfer single ERC1155 token.\n * When minting/creating tokens, the from arg MUST be set to 0x0 (i.e. zero address).\n * When burning/destroying tokens, the to arg MUST be set to 0x0 (i.e. zero address).\n *\n * @param operator - ERC1155 token address.\n * @param from - ERC1155 token holder.\n * @param to - ERC1155 token recipient.\n * @param id - ERC1155 token id.\n * @param value - Number of tokens to be sent.\n * @returns Promise resolving to the 'transferSingle'.\n */\n async transferSingle(\n operator: string,\n from: string,\n to: string,\n id: string,\n value: string,\n ): Promise<void> {\n const contract = new Contract(operator, abiERC1155, this.provider);\n return new Promise<void>((resolve, reject) => {\n contract.transferSingle(\n operator,\n from,\n to,\n id,\n value,\n (error: Error, result: void) => {\n /* istanbul ignore if */\n if (error) {\n reject(error);\n return;\n }\n resolve(result);\n },\n );\n });\n }\n\n /**\n * Query for symbol for a given asset.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to the 'symbol'.\n */\n async getAssetSymbol(address: string): Promise<string> {\n const contract = new Contract(\n address,\n // Contract ABI fragment containing only the symbol method to fetch the symbol of the contract.\n [\n {\n inputs: [],\n name: 'symbol',\n outputs: [{ name: '_symbol', type: 'string' }],\n stateMutability: 'view',\n type: 'function',\n payable: false,\n },\n ],\n this.provider,\n );\n return contract.symbol();\n }\n\n /**\n * Query for name for a given asset.\n *\n * @param address - ERC1155 asset contract address.\n * @returns Promise resolving to the 'name'.\n */\n async getAssetName(address: string): Promise<string> {\n const contract = new Contract(\n address,\n // Contract ABI fragment containing only the name method to fetch the name of the contract.\n [\n {\n inputs: [],\n name: 'name',\n outputs: [{ name: '_name', type: 'string' }],\n stateMutability: 'view',\n type: 'function',\n payable: false,\n },\n ],\n this.provider,\n );\n return contract.name();\n }\n\n /**\n * Query if a contract implements an interface.\n *\n * @param address - ERC1155 asset contract address.\n * @param interfaceId - Interface identifier.\n * @returns Promise resolving to whether the contract implements `interfaceID`.\n */\n private async contractSupportsInterface(\n address: string,\n interfaceId: string,\n ): Promise<boolean> {\n const contract = new Contract(address, abiERC1155, this.provider);\n return contract.supportsInterface(interfaceId);\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 async getDetails(\n address: string,\n ipfsGateway: string,\n tokenId?: string,\n ): Promise<{\n standard: string;\n tokenURI: string | undefined;\n image: string | undefined;\n name: string | undefined;\n symbol: string | undefined;\n }> {\n const isERC1155 = await this.contractSupportsBase1155Interface(address);\n\n if (!isERC1155) {\n throw new Error(\"This isn't a valid ERC1155 contract\");\n }\n\n let image;\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 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 // Catch block should be kept empty to ignore exceptions, and\n // pass as much information as possible to the return statement\n }\n }\n\n // TODO consider querying to the metadata to get name.\n return {\n standard: ERC1155,\n tokenURI,\n image,\n symbol,\n name,\n };\n }\n}\n"]}
|