@0xsequence/marketplace-sdk 0.8.12 → 0.9.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.
Files changed (327) hide show
  1. package/CHANGELOG.md +91 -23
  2. package/dist/{CartIcon-Bll1rbxv.js → CalendarIcon-DbQ7Vxcw.js} +38 -38
  3. package/dist/CalendarIcon-DbQ7Vxcw.js.map +1 -0
  4. package/dist/{types-BIJOaL4j.d.ts → CollectibleCard-C8Ae64Ab.d.ts} +7 -4
  5. package/dist/{_internal-69NEWNUE.js → _internal-BgWcRIak.js} +2 -14
  6. package/dist/_internal-BgWcRIak.js.map +1 -0
  7. package/dist/{api-1KFxYh7o.js → api-DTIan01C.js} +73 -64
  8. package/dist/api-DTIan01C.js.map +1 -0
  9. package/dist/{builder-api-BQvzykoU.js → builder-api-BFuZNOaN.js} +2 -2
  10. package/dist/{builder-api-BQvzykoU.js.map → builder-api-BFuZNOaN.js.map} +1 -1
  11. package/dist/{builder-api-DoK3907S.d.ts → builder-api-C_zj5mr3.d.ts} +2 -2
  12. package/dist/{builder.gen-CxP9NT1p.js → builder.gen-B9wR2nvF.js} +1 -1
  13. package/dist/builder.gen-B9wR2nvF.js.map +1 -0
  14. package/dist/{index-Cl7PQOGu.d.ts → index-21LE7OhL.d.ts} +24 -24
  15. package/dist/{index-1bezgsFq.d.ts → index-BL9RUSEK.d.ts} +929 -255
  16. package/dist/index-BQsgAvtX.d.ts +2938 -0
  17. package/dist/{index-DafWjEb4.d.ts → index-BUVWziLP.d.ts} +9 -14
  18. package/dist/{index-BIMIpDiI.d.ts → index-ByznONYE.d.ts} +98 -99
  19. package/dist/{index-BjIwVzc4.d.ts → index-CLy8y5hm.d.ts} +238 -238
  20. package/dist/{index-CN8puQQJ.d.ts → index-COt10OgI.d.ts} +4 -4
  21. package/dist/index-DPNWNa7t.d.ts +414 -0
  22. package/dist/{index-BEYefG1G.d.ts → index-DaE5ZNHb.d.ts} +2 -2
  23. package/dist/{index-BfH21xmk.d.ts → index-DsfCs3-x.d.ts} +46 -41
  24. package/dist/{index-4-kfOFdx.d.ts → index-dUb6wb4Y.d.ts} +5 -5
  25. package/dist/index.css +14 -1
  26. package/dist/index.d.ts +7 -7
  27. package/dist/index.js +7 -7
  28. package/dist/marketplace-logos-CSeGcPW4.js.map +1 -1
  29. package/dist/{marketplace.gen-Dqk8vRmD.js → marketplace.gen-BSDIX7NZ.js} +12 -3
  30. package/dist/marketplace.gen-BSDIX7NZ.js.map +1 -0
  31. package/dist/{marketplaceConfig-D2MYFqll.js → marketplaceConfig-C6X1SUik.js} +2 -2
  32. package/dist/marketplaceConfig-C6X1SUik.js.map +1 -0
  33. package/dist/{sdk-config-DJzxVPld.d.ts → new-marketplace-types-Bfis0U4J.d.ts} +65 -54
  34. package/dist/options-B4QN7Xou.js +0 -0
  35. package/dist/{primary-sale-Cw95phYC.js → primary-sale-C55ALnfQ.js} +279 -279
  36. package/dist/primary-sale-C55ALnfQ.js.map +1 -0
  37. package/dist/{queries-DPvwtnO7.js → queries-CUU65uYZ.js} +247 -134
  38. package/dist/queries-CUU65uYZ.js.map +1 -0
  39. package/dist/react/_internal/api/index.d.ts +4 -4
  40. package/dist/react/_internal/api/index.js +5 -5
  41. package/dist/react/_internal/databeat/index.d.ts +3 -3
  42. package/dist/react/_internal/databeat/index.js +15 -15
  43. package/dist/react/_internal/index.d.ts +7 -7
  44. package/dist/react/_internal/index.js +7 -7
  45. package/dist/react/_internal/wagmi/index.d.ts +3 -3
  46. package/dist/react/_internal/wagmi/index.js +2 -2
  47. package/dist/react/hooks/index.d.ts +15 -14
  48. package/dist/react/hooks/index.js +16 -16
  49. package/dist/react/hooks/options/index.d.ts +4 -5
  50. package/dist/react/hooks/options/index.js +9 -9
  51. package/dist/react/index.d.ts +15 -37
  52. package/dist/react/index.js +16 -16
  53. package/dist/react/queries/index.d.ts +8 -8
  54. package/dist/react/queries/index.js +12 -12
  55. package/dist/react/ssr/index.d.ts +6 -6
  56. package/dist/react/ssr/index.js +7 -7
  57. package/dist/react/ssr/index.js.map +1 -1
  58. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +8 -9
  59. package/dist/react/ui/components/marketplace-collectible-card/index.js +15 -15
  60. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +7 -7
  61. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +7 -7
  62. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  63. package/dist/react/ui/icons/index.js +6 -6
  64. package/dist/react/ui/index.d.ts +8 -9
  65. package/dist/react/ui/index.js +15 -15
  66. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +5 -5
  67. package/dist/react/ui/modals/_internal/components/actionModal/index.js +15 -15
  68. package/dist/{react-BG7o4PId.js → react-DAIicQPT.js} +7422 -6835
  69. package/dist/react-DAIicQPT.js.map +1 -0
  70. package/dist/{token-CO5llIla.js → token-Da4TdyUk.js} +1540 -761
  71. package/dist/token-Da4TdyUk.js.map +1 -0
  72. package/dist/types/index.d.ts +2 -2
  73. package/dist/types/index.js +2 -2
  74. package/dist/types-DwWE6xOF.js.map +1 -1
  75. package/dist/utils/abi/index.d.ts +3 -3
  76. package/dist/utils/abi/index.js +3 -3
  77. package/dist/utils/abi/primary-sale/index.d.ts +1 -1
  78. package/dist/utils/abi/primary-sale/index.js +1 -1
  79. package/dist/utils/abi/token/index.d.ts +2 -2
  80. package/dist/utils/abi/token/index.js +2 -2
  81. package/dist/utils/index.d.ts +6 -6
  82. package/dist/utils/index.js +6 -6
  83. package/dist/{utils-Cat9_pef.js → utils-BPYfgDSL.js} +2 -2
  84. package/dist/{utils-Cat9_pef.js.map → utils-BPYfgDSL.js.map} +1 -1
  85. package/dist/{utils-BFdxaToy.js → utils-CW2NA5KG.js} +87 -87
  86. package/dist/utils-CW2NA5KG.js.map +1 -0
  87. package/dist/{wagmi-DRctYEk6.js → wagmi-CDzEQbfk.js} +19 -12
  88. package/dist/wagmi-CDzEQbfk.js.map +1 -0
  89. package/eslint/use-client.js +0 -6
  90. package/package.json +30 -31
  91. package/src/index.ts +1 -1
  92. package/src/react/_internal/api/__mocks__/builder.msw.ts +5 -3
  93. package/src/react/_internal/api/__mocks__/indexer.msw.ts +8 -8
  94. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +4 -6
  95. package/src/react/_internal/api/__mocks__/metadata.msw.ts +1 -1
  96. package/src/react/_internal/api/builder.gen.ts +6 -6
  97. package/src/react/_internal/api/get-query-client.ts +2 -2
  98. package/src/react/_internal/api/index.ts +2 -2
  99. package/src/react/_internal/api/marketplace.gen.ts +42 -4
  100. package/src/react/_internal/api/query-keys.ts +13 -6
  101. package/src/react/_internal/api/services.ts +28 -31
  102. package/src/react/_internal/index.ts +1 -1
  103. package/src/react/_internal/types.ts +10 -23
  104. package/src/react/_internal/utils.ts +1 -2
  105. package/src/react/_internal/wagmi/create-config.ts +20 -11
  106. package/src/react/_internal/wagmi/get-connectors.ts +9 -7
  107. package/src/react/_internal/wallet/__tests__/wallet.test.ts +1 -1
  108. package/src/react/_internal/wallet/wallet.ts +18 -18
  109. package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +20 -0
  110. package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +12 -2
  111. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +1 -1
  112. package/src/react/hooks/__tests__/useBalanceOfCollectible.test.tsx +1 -1
  113. package/src/react/hooks/__tests__/useCancelOrder.test.tsx +4 -4
  114. package/src/react/hooks/__tests__/useCancelTransactionSteps.test.tsx +1 -1
  115. package/src/react/hooks/__tests__/useCollectible.test.tsx +14 -16
  116. package/src/react/hooks/__tests__/useCollection.test.tsx +4 -4
  117. package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +1 -27
  118. package/src/react/hooks/__tests__/useCollectionDetails.test.tsx +1 -1
  119. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +1 -1
  120. package/src/react/hooks/__tests__/useComparePrices.test.tsx +7 -6
  121. package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +1 -1
  122. package/src/react/hooks/__tests__/useCountListingsForCollectible.test.tsx +2 -2
  123. package/src/react/hooks/__tests__/useCountOfCollectables.test.tsx +5 -5
  124. package/src/react/hooks/__tests__/useCountOffersForCollectible.test.tsx +2 -2
  125. package/src/react/hooks/__tests__/useCurrency.test.tsx +5 -3
  126. package/src/react/hooks/__tests__/useFilters.test.tsx +1 -1
  127. package/src/react/hooks/__tests__/useFloorOrder.test.tsx +4 -4
  128. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +3 -3
  129. package/src/react/hooks/__tests__/useGenerateListingTransaction.test.tsx +1 -1
  130. package/src/react/hooks/__tests__/useGenerateOfferTransaction.test.tsx +1 -1
  131. package/src/react/hooks/__tests__/useGenerateSellTransaction.test.tsx +1 -1
  132. package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +104 -0
  133. package/src/react/hooks/__tests__/useHighestOffer.test.tsx +4 -4
  134. package/src/react/hooks/__tests__/useInventory.test.tsx +1 -1
  135. package/src/react/hooks/__tests__/useListCollectibleActivities.test.tsx +11 -13
  136. package/src/react/hooks/__tests__/useListCollectibles.test.tsx +5 -5
  137. package/src/react/hooks/__tests__/useListCollectiblesPaginated.test.tsx +10 -15
  138. package/src/react/hooks/__tests__/useListCollectionActivities.test.tsx +13 -15
  139. package/src/react/hooks/__tests__/useListCollections.test.tsx +3 -3
  140. package/src/react/hooks/__tests__/useListListingsForCollectible.test.tsx +3 -2
  141. package/src/react/hooks/__tests__/useListMarketCardData.test.tsx +301 -0
  142. package/src/react/hooks/__tests__/useListOffersForCollectible.test.tsx +1 -1
  143. package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +111 -0
  144. package/src/react/hooks/__tests__/useLowestListing.test.tsx +1 -1
  145. package/src/react/hooks/__tests__/useMarketCurrencies.test.tsx +1 -1
  146. package/src/react/hooks/__tests__/useRoyalty.test.tsx +0 -23
  147. package/src/react/hooks/index.ts +27 -24
  148. package/src/react/hooks/options/index.ts +0 -1
  149. package/src/react/hooks/useAutoSelectFeeOption.tsx +1 -1
  150. package/src/react/hooks/useBalanceOfCollectible.tsx +1 -1
  151. package/src/react/hooks/useCancelTransactionSteps.tsx +2 -2
  152. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +1 -1
  153. package/src/react/hooks/useCollectible.tsx +64 -49
  154. package/src/react/hooks/useCollection.tsx +60 -11
  155. package/src/react/hooks/useCollectionBalanceDetails.tsx +20 -27
  156. package/src/react/hooks/useCollectionDetails.ts +69 -0
  157. package/src/react/hooks/useCollectionDetailsPolling.tsx +10 -2
  158. package/src/react/hooks/useComparePrices.tsx +18 -21
  159. package/src/react/hooks/useConvertPriceToUSD.tsx +20 -37
  160. package/src/react/hooks/useCountListingsForCollectible.tsx +64 -53
  161. package/src/react/hooks/useCountOfCollectables.tsx +60 -69
  162. package/src/react/hooks/useCountOfPrimarySaleItems.tsx +13 -0
  163. package/src/react/hooks/useCountOffersForCollectible.tsx +64 -53
  164. package/src/react/hooks/useCurrency.tsx +56 -64
  165. package/src/react/hooks/useFilterState.tsx +1 -2
  166. package/src/react/hooks/useFloorOrder.tsx +65 -40
  167. package/src/react/hooks/useGenerateCancelTransaction.tsx +5 -10
  168. package/src/react/hooks/useGenerateListingTransaction.tsx +1 -1
  169. package/src/react/hooks/useGenerateOfferTransaction.tsx +1 -1
  170. package/src/react/hooks/useGenerateSellTransaction.tsx +5 -10
  171. package/src/react/hooks/useGetReceiptFromHash.tsx +32 -3
  172. package/src/react/hooks/{useGetTokenSuppliesMap.ts → useGetTokenRanges.tsx} +15 -17
  173. package/src/react/hooks/useGetTokenSuppliesMap.tsx +73 -0
  174. package/src/react/hooks/useHighestOffer.tsx +68 -4
  175. package/src/react/hooks/useInventory.tsx +1 -1
  176. package/src/react/hooks/useList1155ShopCardData.tsx +55 -82
  177. package/src/react/hooks/useList721ShopCardData.tsx +93 -63
  178. package/src/react/hooks/useListBalances.tsx +1 -1
  179. package/src/react/hooks/useListCollectibleActivities.tsx +89 -50
  180. package/src/react/hooks/useListCollectibles.tsx +81 -16
  181. package/src/react/hooks/useListCollectiblesPaginated.tsx +96 -66
  182. package/src/react/hooks/useListCollectionActivities.tsx +84 -50
  183. package/src/react/hooks/useListCollections.tsx +72 -18
  184. package/src/react/hooks/useListListingsForCollectible.tsx +90 -50
  185. package/src/react/hooks/useListMarketCardData.tsx +1 -1
  186. package/src/react/hooks/useListOffersForCollectible.tsx +9 -14
  187. package/src/react/hooks/useListPrimarySaleItems.ts +72 -12
  188. package/src/react/hooks/useListShopCardData.tsx +70 -0
  189. package/src/react/hooks/useListTokenMetadata.tsx +73 -0
  190. package/src/react/hooks/useLowestListing.tsx +68 -4
  191. package/src/react/hooks/useMarketCurrencies.tsx +62 -5
  192. package/src/react/hooks/useRoyalty.tsx +57 -13
  193. package/src/react/hooks/useShopCollectibleSaleData.tsx +349 -0
  194. package/src/react/hooks/useTransferTokens.tsx +1 -1
  195. package/src/react/hooks/util/optimisticCancelUpdates.ts +5 -7
  196. package/src/react/index.ts +5 -3
  197. package/src/react/queries/balanceOfCollectible.ts +1 -1
  198. package/src/react/queries/collectible.ts +66 -0
  199. package/src/react/queries/collection.ts +55 -0
  200. package/src/react/queries/collectionDetails.ts +64 -0
  201. package/src/react/queries/countListingsForCollectible.ts +73 -0
  202. package/src/react/queries/countOfCollectables.ts +83 -0
  203. package/src/react/queries/countOfPrimarySaleItems.ts +48 -0
  204. package/src/react/queries/countOffersForCollectible.ts +73 -0
  205. package/src/react/queries/currency.ts +83 -0
  206. package/src/react/queries/floorOrder.ts +63 -0
  207. package/src/react/queries/getTokenSuppliesMap.ts +77 -0
  208. package/src/react/queries/highestOffer.ts +46 -40
  209. package/src/react/queries/index.ts +7 -4
  210. package/src/react/queries/inventory.ts +4 -4
  211. package/src/react/queries/listBalances.ts +1 -1
  212. package/src/react/queries/listCollectibleActivities.ts +97 -0
  213. package/src/react/queries/listCollectibles.ts +67 -50
  214. package/src/react/queries/listCollectiblesPaginated.ts +87 -0
  215. package/src/react/queries/listCollectionActivities.ts +95 -0
  216. package/src/react/queries/listCollections.ts +47 -8
  217. package/src/react/queries/listListingsForCollectible.ts +82 -0
  218. package/src/react/queries/listTokenMetadata.ts +47 -23
  219. package/src/react/queries/lowestListing.ts +46 -31
  220. package/src/react/queries/marketCurrencies.ts +42 -29
  221. package/src/react/queries/marketplaceConfig.ts +3 -3
  222. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +12 -2
  223. package/src/react/ssr/create-ssr-client.ts +1 -1
  224. package/src/react/types/query.ts +34 -0
  225. package/src/react/ui/components/ModelViewer.tsx +1 -1
  226. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +14 -8
  227. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +12 -15
  228. package/src/react/ui/components/_internals/action-button/store.ts +46 -18
  229. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +1 -1
  230. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +1 -1
  231. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +3 -0
  232. package/src/react/ui/components/marketplace-collectible-card/index.ts +1 -1
  233. package/src/react/ui/components/marketplace-collectible-card/types.ts +7 -4
  234. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +3 -2
  235. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +2 -5
  236. package/src/react/ui/components/marketplace-logos/marketplace-logos.tsx +1 -1
  237. package/src/react/ui/components/media/Media.tsx +5 -1
  238. package/src/react/ui/index.ts +8 -10
  239. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +94 -87
  240. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +4 -4
  241. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +1 -1
  242. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +3 -4
  243. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +1 -1
  244. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +1 -1
  245. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +1 -1
  246. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +1 -1
  247. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +3 -3
  248. package/src/react/ui/modals/CreateListingModal/Modal.tsx +1 -1
  249. package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +2 -2
  250. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +0 -1
  251. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -2
  252. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +7 -6
  253. package/src/react/ui/modals/CreateListingModal/index.tsx +1 -1
  254. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +2 -2
  255. package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +1 -1
  256. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +1 -1
  257. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +0 -1
  258. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +7 -7
  259. package/src/react/ui/modals/MakeOfferModal/index.tsx +1 -1
  260. package/src/react/ui/modals/SellModal/Modal.tsx +3 -3
  261. package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +6 -4
  262. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +1 -1
  263. package/src/react/ui/modals/SellModal/hooks/useSell.tsx +0 -1
  264. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +6 -6
  265. package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +1 -1
  266. package/src/react/ui/modals/TransferModal/_store.ts +1 -7
  267. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +2 -3
  268. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +2 -2
  269. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +1 -1
  270. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +2 -4
  271. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +1 -1
  272. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +0 -1
  273. package/src/react/ui/modals/_internal/components/floorPriceText/index.tsx +4 -4
  274. package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +166 -0
  275. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +12 -141
  276. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +1 -1
  277. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/BalanceIndicator.tsx +1 -2
  278. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +0 -1
  279. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +1 -1
  280. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +1 -1
  281. package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +0 -1
  282. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +1 -1
  283. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +1 -1
  284. package/src/react/ui/modals/modal-provider.tsx +2 -3
  285. package/src/types/api-types.ts +36 -36
  286. package/src/types/buyModalErrors.ts +1 -1
  287. package/src/types/index.ts +5 -5
  288. package/src/types/new-marketplace-types.ts +1 -1
  289. package/src/types/sdk-config.ts +2 -1
  290. package/src/types/types.ts +1 -0
  291. package/src/types/waas-types.ts +1 -1
  292. package/src/utils/abi/index.ts +1 -1
  293. package/src/utils/abi/primary-sale/index.ts +1 -1
  294. package/src/utils/abi/token/index.ts +2 -1
  295. package/src/utils/decode/erc20.ts +1 -1
  296. package/src/utils/index.ts +3 -3
  297. package/test/const.ts +3 -1
  298. package/test/mocks/wallet.ts +1 -1
  299. package/test/test-utils.tsx +3 -4
  300. package/.changeset/fluffy-jokes-lay.md +0 -5
  301. package/.changeset/wise-bugs-boil.md +0 -8
  302. package/dist/CartIcon-Bll1rbxv.js.map +0 -1
  303. package/dist/CollectibleCard-CLQTl0_6.d.ts +0 -8
  304. package/dist/_internal-69NEWNUE.js.map +0 -1
  305. package/dist/api-1KFxYh7o.js.map +0 -1
  306. package/dist/builder.gen-CxP9NT1p.js.map +0 -1
  307. package/dist/index-BHiSG-Yi.d.ts +0 -312
  308. package/dist/index-BQW0PUkQ.d.ts +0 -3973
  309. package/dist/marketplace.gen-Dqk8vRmD.js.map +0 -1
  310. package/dist/marketplaceConfig-D2MYFqll.js.map +0 -1
  311. package/dist/options-DCi6_23w.js +0 -34
  312. package/dist/options-DCi6_23w.js.map +0 -1
  313. package/dist/primary-sale-Cw95phYC.js.map +0 -1
  314. package/dist/queries-DPvwtnO7.js.map +0 -1
  315. package/dist/react-BG7o4PId.js.map +0 -1
  316. package/dist/token-CO5llIla.js.map +0 -1
  317. package/dist/useCollection-C-mclKU0.d.ts +0 -66
  318. package/dist/utils-BFdxaToy.js.map +0 -1
  319. package/dist/wagmi-DRctYEk6.js.map +0 -1
  320. package/src/react/_internal/api/zod-schema.ts +0 -678
  321. package/src/react/hooks/options/collectionOptions.ts +0 -41
  322. package/src/react/hooks/useCheckoutOptions.tsx +0 -66
  323. package/src/react/hooks/useCollectionDetails.tsx +0 -50
  324. package/src/react/hooks/useListTokenMetadata.ts +0 -19
  325. package/src/react/queries/getTokenSupplies.ts +0 -38
  326. package/tsconfig.tsbuildinfo +0 -1
  327. /package/dist/{index-ij9f8GAA.d.ts → index-DvpBZgor.d.ts} +0 -0
@@ -0,0 +1,349 @@
1
+ import { useMemo } from 'react';
2
+
3
+ import type { Address } from 'viem';
4
+ import { useReadContract } from 'wagmi';
5
+ import {
6
+ ERC721_ABI,
7
+ ERC721_SALE_ABI,
8
+ ERC1155_SALES_CONTRACT_ABI,
9
+ SEQUENCE_1155_ITEMS_ABI,
10
+ } from '../../utils';
11
+ import { ContractType } from '../_internal';
12
+
13
+ interface ShopCollectibleSaleData {
14
+ salePrice: { amount: string; currencyAddress: Address } | null;
15
+ paymentToken: Address | null;
16
+ supplyCap: string;
17
+ totalMinted: string;
18
+ quantityRemaining: string;
19
+ startTime: number | null;
20
+ endTime: number | null;
21
+ isActive: boolean;
22
+ isLoading: boolean;
23
+ error: Error | null;
24
+ isAvailable: boolean;
25
+ }
26
+
27
+ interface BaseShopCollectibleSaleDataProps {
28
+ chainId: number;
29
+ salesContractAddress: Address;
30
+ itemsContractAddress: Address;
31
+ enabled?: boolean;
32
+ }
33
+
34
+ interface ERC721ShopCollectibleSaleDataProps
35
+ extends BaseShopCollectibleSaleDataProps {
36
+ collectionType: ContractType.ERC721;
37
+ tokenId?: string;
38
+ }
39
+
40
+ interface ERC1155ShopCollectibleSaleDataProps
41
+ extends BaseShopCollectibleSaleDataProps {
42
+ collectionType: ContractType.ERC1155;
43
+ tokenId: string;
44
+ }
45
+
46
+ type UseShopCollectibleSaleDataProps =
47
+ | ERC721ShopCollectibleSaleDataProps
48
+ | ERC1155ShopCollectibleSaleDataProps;
49
+
50
+ export function useShopCollectibleSaleData({
51
+ chainId,
52
+ salesContractAddress,
53
+ itemsContractAddress,
54
+ tokenId,
55
+ collectionType,
56
+ enabled = true,
57
+ }: UseShopCollectibleSaleDataProps): ShopCollectibleSaleData {
58
+ // ERC721 Sales Contract Calls
59
+ const {
60
+ data: erc721SaleDetails,
61
+ isLoading: erc721SaleLoading,
62
+ error: erc721SaleError,
63
+ } = useReadContract({
64
+ chainId,
65
+ address: salesContractAddress,
66
+ abi: ERC721_SALE_ABI,
67
+ functionName: 'saleDetails',
68
+ query: {
69
+ enabled: enabled && collectionType === ContractType.ERC721,
70
+ },
71
+ });
72
+
73
+ const {
74
+ data: erc721TotalSupply,
75
+ isLoading: erc721SupplyLoading,
76
+ error: erc721SupplyError,
77
+ } = useReadContract({
78
+ chainId,
79
+ address: itemsContractAddress,
80
+ abi: ERC721_ABI,
81
+ functionName: 'totalSupply',
82
+ query: {
83
+ enabled: enabled && collectionType === ContractType.ERC721,
84
+ },
85
+ });
86
+
87
+ // ERC1155 Sales Contract Calls
88
+ const {
89
+ data: erc1155TokenSaleDetails,
90
+ isLoading: erc1155TokenSaleLoading,
91
+ error: erc1155TokenSaleError,
92
+ } = useReadContract({
93
+ chainId,
94
+ address: salesContractAddress,
95
+ abi: ERC1155_SALES_CONTRACT_ABI,
96
+ functionName: 'tokenSaleDetails',
97
+ args:
98
+ collectionType === ContractType.ERC1155 ? [BigInt(tokenId)] : undefined,
99
+ query: {
100
+ enabled: enabled && collectionType === ContractType.ERC1155,
101
+ },
102
+ });
103
+
104
+ const {
105
+ data: erc1155GlobalSaleDetails,
106
+ isLoading: erc1155GlobalSaleLoading,
107
+ error: erc1155GlobalSaleError,
108
+ } = useReadContract({
109
+ chainId,
110
+ address: salesContractAddress,
111
+ abi: ERC1155_SALES_CONTRACT_ABI,
112
+ functionName: 'globalSaleDetails',
113
+ query: {
114
+ enabled: enabled && collectionType === ContractType.ERC1155,
115
+ },
116
+ });
117
+
118
+ const {
119
+ data: erc1155PaymentToken,
120
+ isLoading: erc1155PaymentTokenLoading,
121
+ error: erc1155PaymentTokenError,
122
+ } = useReadContract({
123
+ chainId,
124
+ address: salesContractAddress,
125
+ abi: ERC1155_SALES_CONTRACT_ABI,
126
+ functionName: 'paymentToken',
127
+ query: {
128
+ enabled: enabled && collectionType === ContractType.ERC1155,
129
+ },
130
+ });
131
+
132
+ const {
133
+ data: erc1155TotalSupply,
134
+ isLoading: erc1155SupplyLoading,
135
+ error: erc1155SupplyError,
136
+ } = useReadContract({
137
+ chainId,
138
+ address: itemsContractAddress,
139
+ abi: SEQUENCE_1155_ITEMS_ABI,
140
+ functionName: 'totalSupply',
141
+ query: {
142
+ enabled: enabled && collectionType === ContractType.ERC1155,
143
+ },
144
+ });
145
+
146
+ return useMemo(() => {
147
+ const isLoading =
148
+ collectionType === ContractType.ERC721
149
+ ? erc721SaleLoading || erc721SupplyLoading
150
+ : erc1155TokenSaleLoading ||
151
+ erc1155GlobalSaleLoading ||
152
+ erc1155PaymentTokenLoading ||
153
+ erc1155SupplyLoading;
154
+
155
+ const error =
156
+ collectionType === ContractType.ERC721
157
+ ? erc721SaleError || erc721SupplyError
158
+ : erc1155TokenSaleError ||
159
+ erc1155GlobalSaleError ||
160
+ erc1155PaymentTokenError ||
161
+ erc1155SupplyError;
162
+
163
+ if (isLoading) {
164
+ return {
165
+ salePrice: null,
166
+ paymentToken: null,
167
+ supplyCap: '0',
168
+ totalMinted: '0',
169
+ quantityRemaining: '0',
170
+ startTime: null,
171
+ endTime: null,
172
+ isActive: false,
173
+ isLoading: true,
174
+ error: null,
175
+ isAvailable: false,
176
+ };
177
+ }
178
+
179
+ if (error) {
180
+ return {
181
+ salePrice: null,
182
+ paymentToken: null,
183
+ supplyCap: '0',
184
+ totalMinted: '0',
185
+ quantityRemaining: '0',
186
+ startTime: null,
187
+ endTime: null,
188
+ isActive: false,
189
+ isLoading: false,
190
+ error: error as Error,
191
+ isAvailable: false,
192
+ };
193
+ }
194
+
195
+ if (
196
+ collectionType === ContractType.ERC721 &&
197
+ erc721SaleDetails &&
198
+ erc721TotalSupply !== undefined
199
+ ) {
200
+ const saleDetails = erc721SaleDetails as {
201
+ supplyCap: bigint;
202
+ cost: bigint;
203
+ paymentToken: Address;
204
+ startTime: bigint;
205
+ endTime: bigint;
206
+ merkleRoot: string;
207
+ };
208
+
209
+ const supplyCap = saleDetails.supplyCap.toString();
210
+ const totalMinted = erc721TotalSupply.toString();
211
+ const quantityRemaining = (
212
+ saleDetails.supplyCap - erc721TotalSupply
213
+ ).toString();
214
+
215
+ const now = Math.floor(Date.now() / 1000);
216
+ const startTime = Number(saleDetails.startTime);
217
+ const endTime = Number(saleDetails.endTime);
218
+ const isActive = now >= startTime && now <= endTime;
219
+
220
+ return {
221
+ salePrice: {
222
+ amount: saleDetails.cost.toString(),
223
+ currencyAddress: saleDetails.paymentToken,
224
+ },
225
+ paymentToken: saleDetails.paymentToken,
226
+ supplyCap,
227
+ totalMinted,
228
+ quantityRemaining,
229
+ startTime,
230
+ endTime,
231
+ isActive,
232
+ isLoading: false,
233
+ error: null,
234
+ isAvailable: BigInt(quantityRemaining) > 0 && isActive,
235
+ };
236
+ }
237
+
238
+ if (
239
+ collectionType === ContractType.ERC1155 &&
240
+ erc1155PaymentToken &&
241
+ erc1155TotalSupply !== undefined &&
242
+ (erc1155TokenSaleDetails || erc1155GlobalSaleDetails)
243
+ ) {
244
+ // Type the sale details structures
245
+ type SaleDetails = {
246
+ cost: bigint;
247
+ supplyCap: bigint;
248
+ startTime: bigint;
249
+ endTime: bigint;
250
+ merkleRoot: string;
251
+ };
252
+
253
+ const tokenSaleDetails = erc1155TokenSaleDetails as
254
+ | SaleDetails
255
+ | undefined;
256
+ const globalSaleDetails = erc1155GlobalSaleDetails as
257
+ | SaleDetails
258
+ | undefined;
259
+
260
+ // If token-specific details have zero values, use global as fallback
261
+ const useGlobal = tokenSaleDetails && tokenSaleDetails.supplyCap === 0n;
262
+ const finalSaleDetails = useGlobal
263
+ ? globalSaleDetails
264
+ : tokenSaleDetails || globalSaleDetails;
265
+
266
+ if (!finalSaleDetails) {
267
+ return {
268
+ salePrice: null,
269
+ paymentToken: null,
270
+ supplyCap: '0',
271
+ totalMinted: '0',
272
+ quantityRemaining: '0',
273
+ startTime: null,
274
+ endTime: null,
275
+ isActive: false,
276
+ isLoading: false,
277
+ error: null,
278
+ isAvailable: false,
279
+ };
280
+ }
281
+
282
+ const supplyCap = finalSaleDetails.supplyCap.toString();
283
+ const totalMintedBigInt = erc1155TotalSupply
284
+ ? BigInt(erc1155TotalSupply as bigint)
285
+ : 0n;
286
+ const totalMinted = totalMintedBigInt.toString();
287
+ const quantityRemaining = (
288
+ finalSaleDetails.supplyCap - totalMintedBigInt
289
+ ).toString();
290
+
291
+ const now = Math.floor(Date.now() / 1000);
292
+ const startTime = Number(finalSaleDetails.startTime);
293
+ const endTime = Number(finalSaleDetails.endTime);
294
+ const isActive = now >= startTime && now <= endTime;
295
+
296
+ return {
297
+ salePrice: {
298
+ amount: finalSaleDetails.cost.toString(),
299
+ currencyAddress: erc1155PaymentToken,
300
+ },
301
+ paymentToken: erc1155PaymentToken,
302
+ supplyCap,
303
+ totalMinted,
304
+ quantityRemaining,
305
+ startTime,
306
+ endTime,
307
+ isActive,
308
+ isLoading: false,
309
+ error: null,
310
+ isAvailable: BigInt(quantityRemaining) > 0 && isActive,
311
+ };
312
+ }
313
+
314
+ // No valid data found
315
+ return {
316
+ salePrice: null,
317
+ paymentToken: null,
318
+ supplyCap: '0',
319
+ totalMinted: '0',
320
+ quantityRemaining: '0',
321
+ startTime: null,
322
+ endTime: null,
323
+ isActive: false,
324
+ isLoading: false,
325
+ error: null,
326
+ isAvailable: false,
327
+ };
328
+ }, [
329
+ collectionType,
330
+ erc721SaleDetails,
331
+ erc721TotalSupply,
332
+ erc721SaleLoading,
333
+ erc721SupplyLoading,
334
+ erc721SaleError,
335
+ erc721SupplyError,
336
+ erc1155TokenSaleDetails,
337
+ erc1155GlobalSaleDetails,
338
+ erc1155PaymentToken,
339
+ erc1155TotalSupply,
340
+ erc1155TokenSaleLoading,
341
+ erc1155GlobalSaleLoading,
342
+ erc1155PaymentTokenLoading,
343
+ erc1155SupplyLoading,
344
+ erc1155TokenSaleError,
345
+ erc1155GlobalSaleError,
346
+ erc1155PaymentTokenError,
347
+ erc1155SupplyError,
348
+ ]);
349
+ }
@@ -1,4 +1,4 @@
1
- import { type Abi, type Address, type Hex, erc721Abi } from 'viem';
1
+ import { type Abi, type Address, erc721Abi, type Hex } from 'viem';
2
2
  import { useAccount, useWriteContract } from 'wagmi';
3
3
  import { ERC1155_ABI } from '../../utils';
4
4
  import { NoWalletConnectedError } from '../../utils/_internal/error/transaction';
@@ -1,10 +1,10 @@
1
1
  import type { QueryClient } from '@tanstack/react-query';
2
2
  import {
3
+ collectableKeys,
3
4
  type GetCountOfListingsForCollectibleReturn,
4
5
  type GetCountOfOffersForCollectibleReturn,
5
6
  type ListListingsForCollectibleReturn,
6
7
  type ListOffersForCollectibleReturn,
7
- collectableKeys,
8
8
  } from '../../_internal';
9
9
 
10
10
  const SECOND = 1000;
@@ -21,13 +21,11 @@ export const updateQueriesOnCancel = ({
21
21
  queryClient.setQueriesData(
22
22
  { queryKey: collectableKeys.offersCount, exact: false },
23
23
  (oldData: GetCountOfOffersForCollectibleReturn | undefined) => {
24
- if (!oldData) return { count: 0 };
25
- return { count: Math.max(0, oldData.count - 1) };
24
+ if (!oldData) return 0;
25
+ return Math.max(0, oldData.count - 1);
26
26
  },
27
27
  );
28
28
 
29
- console.log('query client ', queryClient, 'orderId', orderId);
30
-
31
29
  // remove the offer with matching orderId
32
30
  queryClient.setQueriesData(
33
31
  { queryKey: collectableKeys.offers, exact: false },
@@ -51,8 +49,8 @@ export const updateQueriesOnCancel = ({
51
49
  queryClient.setQueriesData(
52
50
  { queryKey: collectableKeys.listingsCount, exact: false },
53
51
  (oldData: GetCountOfListingsForCollectibleReturn | undefined) => {
54
- if (!oldData) return { count: 0 };
55
- return { count: Math.max(0, oldData.count - 1) };
52
+ if (!oldData) return 0;
53
+ return Math.max(0, oldData.count - 1);
56
54
  },
57
55
  );
58
56
 
@@ -1,6 +1,8 @@
1
- export * from './provider';
2
- export * from './hooks';
3
- export * from './hooks/options';
4
1
  export * from './_internal/api/get-query-client';
5
2
  export * from './_internal/wagmi/create-config';
3
+ export * from './hooks';
4
+ export * from './hooks/options';
5
+ export * from './provider';
6
+ export * from './queries';
7
+ export * from './types/query';
6
8
  export * from './ui/index';
@@ -2,7 +2,7 @@ import { queryOptions, skipToken } from '@tanstack/react-query';
2
2
  import type { Hex } from 'viem';
3
3
  import type { UseQueryParameters } from 'wagmi/query';
4
4
  import type { SdkConfig } from '../../types';
5
- import { LaosAPI, collectableKeys, getIndexerClient } from '../_internal';
5
+ import { collectableKeys, getIndexerClient, LaosAPI } from '../_internal';
6
6
 
7
7
  export type UseBalanceOfCollectibleArgs = {
8
8
  collectionAddress: Hex;
@@ -0,0 +1,66 @@
1
+ import type { GetTokenMetadataArgs } from '@0xsequence/metadata';
2
+ import { queryOptions } from '@tanstack/react-query';
3
+ import type { SdkConfig } from '../../types';
4
+ import { getMetadataClient, type ValuesOptional } from '../_internal';
5
+ import { collectableKeys } from '../_internal/api/query-keys';
6
+ import type { StandardQueryOptions } from '../types/query';
7
+
8
+ export interface FetchCollectibleParams
9
+ extends Omit<
10
+ GetTokenMetadataArgs,
11
+ 'chainID' | 'contractAddress' | 'tokenIDs'
12
+ > {
13
+ chainId: number;
14
+ collectionAddress: string;
15
+ collectibleId: string;
16
+ config: SdkConfig;
17
+ }
18
+
19
+ /**
20
+ * Fetches collectible metadata from the metadata API
21
+ */
22
+ export async function fetchCollectible(params: FetchCollectibleParams) {
23
+ const { collectionAddress, collectibleId, chainId, config } = params;
24
+
25
+ const metadataClient = getMetadataClient(config);
26
+
27
+ const apiArgs: GetTokenMetadataArgs = {
28
+ contractAddress: collectionAddress,
29
+ chainID: String(chainId),
30
+ tokenIDs: [collectibleId],
31
+ };
32
+
33
+ const result = await metadataClient.getTokenMetadata(apiArgs);
34
+ return result.tokenMetadata[0];
35
+ }
36
+
37
+ export type CollectibleQueryOptions = ValuesOptional<FetchCollectibleParams> & {
38
+ query?: StandardQueryOptions;
39
+ };
40
+
41
+ export function collectibleQueryOptions(params: CollectibleQueryOptions) {
42
+ const enabled = Boolean(
43
+ params.collectionAddress &&
44
+ params.collectibleId &&
45
+ params.chainId &&
46
+ params.config &&
47
+ (params.query?.enabled ?? true),
48
+ );
49
+
50
+ return queryOptions({
51
+ queryKey: [...collectableKeys.details, params],
52
+ queryFn: () =>
53
+ fetchCollectible({
54
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
55
+ chainId: params.chainId!,
56
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
57
+ collectionAddress: params.collectionAddress!,
58
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
59
+ collectibleId: params.collectibleId!,
60
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
61
+ config: params.config!,
62
+ }),
63
+ ...params.query,
64
+ enabled,
65
+ });
66
+ }
@@ -0,0 +1,55 @@
1
+ import { queryOptions } from '@tanstack/react-query';
2
+ import type { SdkConfig } from '../../types';
3
+ import { getMetadataClient, type ValuesOptional } from '../_internal';
4
+ import { collectionKeys } from '../_internal/api/query-keys';
5
+ import type { StandardQueryOptions } from '../types/query';
6
+
7
+ export interface FetchCollectionParams {
8
+ chainId: number;
9
+ collectionAddress: string;
10
+ config: SdkConfig;
11
+ }
12
+
13
+ /**
14
+ * Fetches collection information from the metadata API
15
+ */
16
+ export async function fetchCollection(params: FetchCollectionParams) {
17
+ const { collectionAddress, chainId, config } = params;
18
+
19
+ const metadataClient = getMetadataClient(config);
20
+
21
+ const result = await metadataClient.getContractInfo({
22
+ chainID: chainId.toString(),
23
+ contractAddress: collectionAddress,
24
+ });
25
+
26
+ return result.contractInfo;
27
+ }
28
+
29
+ export type CollectionQueryOptions = ValuesOptional<FetchCollectionParams> & {
30
+ query?: StandardQueryOptions;
31
+ };
32
+
33
+ export function collectionQueryOptions(params: CollectionQueryOptions) {
34
+ const enabled = Boolean(
35
+ params.collectionAddress &&
36
+ params.chainId &&
37
+ params.config &&
38
+ (params.query?.enabled ?? true),
39
+ );
40
+
41
+ return queryOptions({
42
+ queryKey: [...collectionKeys.detail, params],
43
+ queryFn: () =>
44
+ fetchCollection({
45
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
46
+ chainId: params.chainId!,
47
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
48
+ collectionAddress: params.collectionAddress!,
49
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
50
+ config: params.config!,
51
+ }),
52
+ ...params.query,
53
+ enabled,
54
+ });
55
+ }
@@ -0,0 +1,64 @@
1
+ import { queryOptions } from '@tanstack/react-query';
2
+ import type { SdkConfig } from '../../types';
3
+ import { getMarketplaceClient, type ValuesOptional } from '../_internal';
4
+ import type { GetCollectionDetailArgs } from '../_internal/api/marketplace.gen';
5
+ import { collectionKeys } from '../_internal/api/query-keys';
6
+ import type { StandardQueryOptions } from '../types/query';
7
+
8
+ export interface FetchCollectionDetailsParams
9
+ extends Omit<GetCollectionDetailArgs, 'chainId' | 'contractAddress'> {
10
+ chainId: number;
11
+ collectionAddress: string;
12
+ config: SdkConfig;
13
+ }
14
+
15
+ /**
16
+ * Fetches collection details from the marketplace API
17
+ */
18
+ export async function fetchCollectionDetails(
19
+ params: FetchCollectionDetailsParams,
20
+ ) {
21
+ const { collectionAddress, chainId, config, ...additionalApiParams } = params;
22
+
23
+ const marketplaceClient = getMarketplaceClient(config);
24
+
25
+ const apiArgs: GetCollectionDetailArgs = {
26
+ contractAddress: collectionAddress,
27
+ chainId: String(chainId),
28
+ ...additionalApiParams,
29
+ };
30
+
31
+ const result = await marketplaceClient.getCollectionDetail(apiArgs);
32
+ return result.collection;
33
+ }
34
+
35
+ export type CollectionDetailsQueryOptions =
36
+ ValuesOptional<FetchCollectionDetailsParams> & {
37
+ query?: StandardQueryOptions;
38
+ };
39
+
40
+ export function collectionDetailsQueryOptions(
41
+ params: CollectionDetailsQueryOptions,
42
+ ) {
43
+ const enabled = Boolean(
44
+ params.collectionAddress &&
45
+ params.chainId &&
46
+ params.config &&
47
+ (params.query?.enabled ?? true),
48
+ );
49
+
50
+ return queryOptions({
51
+ queryKey: [...collectionKeys.detail, params],
52
+ queryFn: () =>
53
+ fetchCollectionDetails({
54
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
55
+ chainId: params.chainId!,
56
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
57
+ collectionAddress: params.collectionAddress!,
58
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
59
+ config: params.config!,
60
+ }),
61
+ ...params.query,
62
+ enabled,
63
+ });
64
+ }
@@ -0,0 +1,73 @@
1
+ import { queryOptions } from '@tanstack/react-query';
2
+ import type { SdkConfig } from '../../types';
3
+ import { getMarketplaceClient, type ValuesOptional } from '../_internal';
4
+ import type {
5
+ GetCountOfListingsForCollectibleArgs,
6
+ OrderFilter,
7
+ } from '../_internal/api/marketplace.gen';
8
+ import { collectableKeys } from '../_internal/api/query-keys';
9
+ import type { StandardQueryOptions } from '../types/query';
10
+
11
+ export interface FetchCountListingsForCollectibleParams {
12
+ chainId: number;
13
+ collectionAddress: string;
14
+ collectibleId: string;
15
+ config: SdkConfig;
16
+ filter?: OrderFilter;
17
+ }
18
+
19
+ /**
20
+ * Fetches count of listings for a collectible from the marketplace API
21
+ */
22
+ export async function fetchCountListingsForCollectible(
23
+ params: FetchCountListingsForCollectibleParams,
24
+ ) {
25
+ const { collectionAddress, chainId, collectibleId, config, filter } = params;
26
+
27
+ const client = getMarketplaceClient(config);
28
+
29
+ const apiArgs: GetCountOfListingsForCollectibleArgs = {
30
+ contractAddress: collectionAddress,
31
+ chainId: String(chainId),
32
+ tokenId: collectibleId,
33
+ filter,
34
+ };
35
+
36
+ const result = await client.getCountOfListingsForCollectible(apiArgs);
37
+ return result.count;
38
+ }
39
+
40
+ export type CountListingsForCollectibleQueryOptions =
41
+ ValuesOptional<FetchCountListingsForCollectibleParams> & {
42
+ query?: StandardQueryOptions;
43
+ };
44
+
45
+ export function countListingsForCollectibleQueryOptions(
46
+ params: CountListingsForCollectibleQueryOptions,
47
+ ) {
48
+ const enabled = Boolean(
49
+ params.collectionAddress &&
50
+ params.chainId &&
51
+ params.collectibleId &&
52
+ params.config &&
53
+ (params.query?.enabled ?? true),
54
+ );
55
+
56
+ return queryOptions({
57
+ queryKey: [...collectableKeys.listingsCount, params],
58
+ queryFn: () =>
59
+ fetchCountListingsForCollectible({
60
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
61
+ chainId: params.chainId!,
62
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
63
+ collectionAddress: params.collectionAddress!,
64
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
65
+ collectibleId: params.collectibleId!,
66
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
67
+ config: params.config!,
68
+ filter: params.filter,
69
+ }),
70
+ ...params.query,
71
+ enabled,
72
+ });
73
+ }