@0xsequence/marketplace-sdk 0.8.12 → 0.10.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 (487) hide show
  1. package/.storybook/main.ts +63 -0
  2. package/.storybook/preview.ts +24 -0
  3. package/.storybook/vitest.setup.ts +6 -0
  4. package/CHANGELOG.md +158 -21
  5. package/dist/{CartIcon-Bll1rbxv.js → CalendarIcon-CqsuAuCm.js} +30 -77
  6. package/dist/CalendarIcon-CqsuAuCm.js.map +1 -0
  7. package/dist/{types-BIJOaL4j.d.ts → CollectibleCard-Dd-CG6dE.d.ts} +11 -7
  8. package/dist/InfoIcon-v0w_Lu7t.js +53 -0
  9. package/dist/InfoIcon-v0w_Lu7t.js.map +1 -0
  10. package/dist/_internal-C75gOSNo.js +14 -0
  11. package/dist/_internal-C75gOSNo.js.map +1 -0
  12. package/dist/actionModal-CMUeVsFX.js +116 -0
  13. package/dist/actionModal-CMUeVsFX.js.map +1 -0
  14. package/dist/{alien_swap-B_76IMma.js → alien_swap-CYv6YlOF.js} +1 -1
  15. package/dist/{alien_swap-B_76IMma.js.map → alien_swap-CYv6YlOF.js.map} +1 -1
  16. package/dist/{api-1KFxYh7o.js → api-BiMGqWdz.js} +79 -87
  17. package/dist/api-BiMGqWdz.js.map +1 -0
  18. package/dist/{aqua-xyz-CMN_TFY5.js → aqua-xyz-Bzn5baeH.js} +1 -1
  19. package/dist/{aqua-xyz-CMN_TFY5.js.map → aqua-xyz-Bzn5baeH.js.map} +1 -1
  20. package/dist/{aura-Cye_TuHj.js → aura-DzIWh8WT.js} +1 -1
  21. package/dist/{aura-Cye_TuHj.js.map → aura-DzIWh8WT.js.map} +1 -1
  22. package/dist/base-DqaJPvfN.js +22 -0
  23. package/dist/base-DqaJPvfN.js.map +1 -0
  24. package/dist/{blur-DWDMyMpK.js → blur-DSH-Cbpj.js} +1 -1
  25. package/dist/{blur-DWDMyMpK.js.map → blur-DSH-Cbpj.js.map} +1 -1
  26. package/dist/{builder-api-BQvzykoU.js → builder-api-BFuZNOaN.js} +2 -2
  27. package/dist/{builder-api-BQvzykoU.js.map → builder-api-BFuZNOaN.js.map} +1 -1
  28. package/dist/{builder.gen-CxP9NT1p.js → builder.gen-B9wR2nvF.js} +1 -1
  29. package/dist/builder.gen-B9wR2nvF.js.map +1 -0
  30. package/dist/{coinbase-ByA_XRB0.js → coinbase-Df8URNxq.js} +1 -1
  31. package/dist/{coinbase-ByA_XRB0.js.map → coinbase-Df8URNxq.js.map} +1 -1
  32. package/dist/{sdk-config-DJzxVPld.d.ts → create-config-DKJ-F0jc.d.ts} +458 -86
  33. package/dist/{wagmi-DRctYEk6.js → create-config-fQ-jbJD1.js} +33 -16
  34. package/dist/create-config-fQ-jbJD1.js.map +1 -0
  35. package/dist/{element-b77CyXIZ.js → element-Cx6uJu5N.js} +1 -1
  36. package/dist/{element-b77CyXIZ.js.map → element-Cx6uJu5N.js.map} +1 -1
  37. package/dist/{foundation-DbOrKP9Y.js → foundation-D6U4aRLN.js} +1 -1
  38. package/dist/{foundation-DbOrKP9Y.js.map → foundation-D6U4aRLN.js.map} +1 -1
  39. package/dist/get-provider-CYYHfrlg.js +10 -0
  40. package/dist/get-provider-CYYHfrlg.js.map +1 -0
  41. package/dist/get-query-client-D19vvfJo.js +23 -0
  42. package/dist/get-query-client-D19vvfJo.js.map +1 -0
  43. package/dist/hooks-4pxIbLbM.js +4044 -0
  44. package/dist/hooks-4pxIbLbM.js.map +1 -0
  45. package/dist/{index-1bezgsFq.d.ts → index-136YrWDH.d.ts} +929 -255
  46. package/dist/{index-D5v5iluA.d.ts → index-BAhaEfqY.d.ts} +1 -1
  47. package/dist/index-BKBin-rq.d.ts +979 -0
  48. package/dist/index-BUWB_RXp.d.ts +3144 -0
  49. package/dist/{index-Cl7PQOGu.d.ts → index-BhVFc2rX.d.ts} +28 -25
  50. package/dist/{index-DXMfTZ1F.d.ts → index-C5aqo8xu.d.ts} +1 -1
  51. package/dist/{index-BIMIpDiI.d.ts → index-CKrYP7ot.d.ts} +74 -103
  52. package/dist/{index-BEYefG1G.d.ts → index-CUwMH7Ht.d.ts} +5 -5
  53. package/dist/{index-BjIwVzc4.d.ts → index-Cu70Lw-w.d.ts} +238 -238
  54. package/dist/index.css +427 -1
  55. package/dist/index.d.ts +8 -10
  56. package/dist/index.js +15 -11
  57. package/dist/{looks-rare-C1VqNcSM.js → looks-rare-ChBRBY-p.js} +1 -1
  58. package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-ChBRBY-p.js.map} +1 -1
  59. package/dist/{magic-eden-ea_AGCZr.js → magic-eden-D5U7N1xL.js} +1 -1
  60. package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-D5U7N1xL.js.map} +1 -1
  61. package/dist/{manifold-8y8J2sjT.js → manifold-CtLF52zU.js} +1 -1
  62. package/dist/{manifold-8y8J2sjT.js.map → manifold-CtLF52zU.js.map} +1 -1
  63. package/dist/{marketplace-nwnZv9Cb.js → marketplace-DmFiyBoS.js} +1 -1
  64. package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-DmFiyBoS.js.map} +1 -1
  65. package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-Cd6W-qOq.js} +21 -21
  66. package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-Cd6W-qOq.js.map} +1 -1
  67. package/dist/{marketplace.gen-Dqk8vRmD.js → marketplace.gen-HpnpL5xU.js} +12 -3
  68. package/dist/marketplace.gen-HpnpL5xU.js.map +1 -0
  69. package/dist/{marketplaceConfig-D2MYFqll.js → marketplaceConfig-GQTTmihy.js} +3 -3
  70. package/dist/marketplaceConfig-GQTTmihy.js.map +1 -0
  71. package/dist/{mintify-LA68TzWg.js → mintify-Bi3Bce68.js} +1 -1
  72. package/dist/{mintify-LA68TzWg.js.map → mintify-Bi3Bce68.js.map} +1 -1
  73. package/dist/network-CGD0oKtS.js +15 -0
  74. package/dist/network-CGD0oKtS.js.map +1 -0
  75. package/dist/{nftx-D3Tc8nzd.js → nftx-BDQZjtkX.js} +1 -1
  76. package/dist/{nftx-D3Tc8nzd.js.map → nftx-BDQZjtkX.js.map} +1 -1
  77. package/dist/{okx-hbqg6oIJ.js → okx-D4meadLe.js} +1 -1
  78. package/dist/{okx-hbqg6oIJ.js.map → okx-D4meadLe.js.map} +1 -1
  79. package/dist/{open-sea-BccuK8-t.js → open-sea-DN0hgfVw.js} +1 -1
  80. package/dist/{open-sea-BccuK8-t.js.map → open-sea-DN0hgfVw.js.map} +1 -1
  81. package/dist/options-BBBR8u_4.js +0 -0
  82. package/dist/{primary-sale-Cw95phYC.js → primary-sale-CmWxSfFQ.js} +279 -279
  83. package/dist/primary-sale-CmWxSfFQ.js.map +1 -0
  84. package/dist/provider-DPGUA10G.js +125 -0
  85. package/dist/provider-DPGUA10G.js.map +1 -0
  86. package/dist/queries-Ce_2othB.js +757 -0
  87. package/dist/queries-Ce_2othB.js.map +1 -0
  88. package/dist/{rarible-BgTwwj9g.js → rarible-B0xlD88A.js} +1 -1
  89. package/dist/{rarible-BgTwwj9g.js.map → rarible-B0xlD88A.js.map} +1 -1
  90. package/dist/react/_internal/api/index.d.ts +2 -4
  91. package/dist/react/_internal/api/index.js +9 -6
  92. package/dist/react/_internal/databeat/index.d.ts +2 -73
  93. package/dist/react/_internal/databeat/index.js +4 -21
  94. package/dist/react/_internal/index.d.ts +2 -7
  95. package/dist/react/_internal/index.js +13 -8
  96. package/dist/react/_internal/wagmi/index.d.ts +2 -4
  97. package/dist/react/_internal/wagmi/index.js +6 -4
  98. package/dist/react/hooks/index.d.ts +13 -17
  99. package/dist/react/hooks/index.js +25 -21
  100. package/dist/react/hooks/options/index.d.ts +3 -5
  101. package/dist/react/hooks/options/index.js +15 -10
  102. package/dist/react/index.d.ts +13 -40
  103. package/dist/react/index.js +30 -21
  104. package/dist/react/queries/index.d.ts +9 -8
  105. package/dist/react/queries/index.js +22 -17
  106. package/dist/react/ssr/index.d.ts +7 -9
  107. package/dist/react/ssr/index.js +13 -8
  108. package/dist/react/ssr/index.js.map +1 -1
  109. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +3 -9
  110. package/dist/react/ui/components/marketplace-collectible-card/index.js +29 -20
  111. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
  112. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +13 -8
  113. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  114. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  115. package/dist/react/ui/icons/index.js +14 -10
  116. package/dist/react/ui/index.d.ts +3 -9
  117. package/dist/react/ui/index.js +29 -20
  118. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +5 -5
  119. package/dist/react/ui/modals/_internal/components/actionModal/index.js +25 -20
  120. package/dist/{react-BG7o4PId.js → react-DP0M2Wfm.js} +4919 -7839
  121. package/dist/react-DP0M2Wfm.js.map +1 -0
  122. package/dist/{react-BbHBl6gg.css → react-DeDyTgo7.css} +1 -1
  123. package/dist/{react-BbHBl6gg.css.map → react-DeDyTgo7.css.map} +1 -1
  124. package/dist/{sequence-Do3kzb4J.js → sequence-BIrOVRXO.js} +1 -1
  125. package/dist/{sequence-Do3kzb4J.js.map → sequence-BIrOVRXO.js.map} +1 -1
  126. package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-BPMon-M5.js} +1 -1
  127. package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-BPMon-M5.js.map} +1 -1
  128. package/dist/{super-rare-eCm1SE6O.js → super-rare-kPN6Ua8i.js} +1 -1
  129. package/dist/{super-rare-eCm1SE6O.js.map → super-rare-kPN6Ua8i.js.map} +1 -1
  130. package/dist/{token-CO5llIla.js → token-CHSBPYVG.js} +1540 -761
  131. package/dist/token-CHSBPYVG.js.map +1 -0
  132. package/dist/{transaction-CcVViHEL.js → transaction-CnctdNzS.js} +3 -21
  133. package/dist/transaction-CnctdNzS.js.map +1 -0
  134. package/dist/types/index.d.ts +2 -3
  135. package/dist/types/index.js +3 -3
  136. package/dist/{types-DwWE6xOF.js → types-Yw2ywj6j.js} +1 -1
  137. package/dist/types-Yw2ywj6j.js.map +1 -0
  138. package/dist/utils/abi/index.d.ts +5 -5
  139. package/dist/utils/abi/index.js +5 -5
  140. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  141. package/dist/utils/abi/marketplace/index.js +1 -1
  142. package/dist/utils/abi/primary-sale/index.d.ts +1 -1
  143. package/dist/utils/abi/primary-sale/index.js +1 -1
  144. package/dist/utils/abi/token/index.d.ts +2 -2
  145. package/dist/utils/abi/token/index.js +2 -2
  146. package/dist/utils/index.d.ts +7 -8
  147. package/dist/utils/index.js +13 -10
  148. package/dist/{utils-BFdxaToy.js → utils-9RXDgcBl.js} +86 -93
  149. package/dist/utils-9RXDgcBl.js.map +1 -0
  150. package/dist/{utils-Cat9_pef.js → utils-DjVJ9tov.js} +5 -6
  151. package/dist/utils-DjVJ9tov.js.map +1 -0
  152. package/dist/wagmi-Do_KW5ke.js +0 -0
  153. package/dist/{x2y2-DD17tT91.js → x2y2-BLz-_Q2O.js} +1 -1
  154. package/dist/{x2y2-DD17tT91.js.map → x2y2-BLz-_Q2O.js.map} +1 -1
  155. package/dist/{zora-BpSG9UzS.js → zora-UGhKs-aL.js} +1 -1
  156. package/dist/{zora-BpSG9UzS.js.map → zora-UGhKs-aL.js.map} +1 -1
  157. package/eslint/use-client.js +0 -6
  158. package/eslint.config.mjs +4 -0
  159. package/package.json +47 -35
  160. package/postcss.config.mjs +6 -0
  161. package/src/index.css +5 -4
  162. package/src/index.ts +2 -1
  163. package/src/react/__tests__/provider.test.tsx +4 -3
  164. package/src/react/_internal/api/__mocks__/builder.msw.ts +5 -3
  165. package/src/react/_internal/api/__mocks__/indexer.msw.ts +24 -8
  166. package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
  167. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +6 -6
  168. package/src/react/_internal/api/__mocks__/metadata.msw.ts +1 -1
  169. package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
  170. package/src/react/_internal/api/builder.gen.ts +6 -6
  171. package/src/react/_internal/api/get-query-client.ts +2 -2
  172. package/src/react/_internal/api/index.ts +2 -2
  173. package/src/react/_internal/api/laos-api.ts +3 -0
  174. package/src/react/_internal/api/marketplace.gen.ts +43 -3
  175. package/src/react/_internal/api/query-keys.ts +21 -6
  176. package/src/react/_internal/api/services.ts +30 -45
  177. package/src/react/_internal/databeat/index.ts +15 -14
  178. package/src/react/_internal/databeat/types.ts +22 -0
  179. package/src/react/_internal/databeat/utils.ts +26 -0
  180. package/src/react/_internal/index.ts +1 -1
  181. package/src/react/_internal/types.ts +10 -23
  182. package/src/react/_internal/utils.ts +4 -5
  183. package/src/react/_internal/wagmi/create-config.ts +43 -19
  184. package/src/react/_internal/wagmi/get-connectors.ts +9 -7
  185. package/src/react/_internal/wallet/__tests__/wallet.test.ts +1 -1
  186. package/src/react/_internal/wallet/wallet.ts +22 -22
  187. package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +20 -0
  188. package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +12 -2
  189. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +1 -1
  190. package/src/react/hooks/__tests__/useBalanceOfCollectible.laos.test.tsx +367 -0
  191. package/src/react/hooks/__tests__/useBalanceOfCollectible.test.tsx +1 -1
  192. package/src/react/hooks/__tests__/useCancelOrder.test.tsx +4 -4
  193. package/src/react/hooks/__tests__/useCancelTransactionSteps.test.tsx +1 -1
  194. package/src/react/hooks/__tests__/useCheckoutOptions.test.tsx +158 -0
  195. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +42 -65
  196. package/src/react/hooks/__tests__/useCollectible.test.tsx +14 -16
  197. package/src/react/hooks/__tests__/useCollection.test.tsx +4 -4
  198. package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +16 -25
  199. package/src/react/hooks/__tests__/useCollectionDetails.test.tsx +1 -1
  200. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +12 -4
  201. package/src/react/hooks/__tests__/useComparePrices.test.tsx +7 -6
  202. package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +4 -4
  203. package/src/react/hooks/__tests__/useCountListingsForCollectible.test.tsx +2 -2
  204. package/src/react/hooks/__tests__/useCountOfCollectables.test.tsx +5 -5
  205. package/src/react/hooks/__tests__/useCountOffersForCollectible.test.tsx +2 -2
  206. package/src/react/hooks/__tests__/useCurrency.test.tsx +5 -3
  207. package/src/react/hooks/__tests__/useCurrencyBalance.test.tsx +7 -3
  208. package/src/react/hooks/__tests__/useFilters.test.tsx +3 -3
  209. package/src/react/hooks/__tests__/useFloorOrder.test.tsx +4 -4
  210. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +3 -3
  211. package/src/react/hooks/__tests__/useGenerateListingTransaction.test.tsx +1 -1
  212. package/src/react/hooks/__tests__/useGenerateOfferTransaction.test.tsx +1 -1
  213. package/src/react/hooks/__tests__/useGenerateSellTransaction.test.tsx +1 -1
  214. package/src/react/hooks/__tests__/useGetTokenRanges.test.tsx +111 -0
  215. package/src/react/hooks/__tests__/useHighestOffer.test.tsx +4 -4
  216. package/src/react/hooks/__tests__/useInventory.test.tsx +1 -1
  217. package/src/react/hooks/__tests__/useListCollectibleActivities.test.tsx +11 -13
  218. package/src/react/hooks/__tests__/useListCollectibles.test.tsx +5 -5
  219. package/src/react/hooks/__tests__/useListCollectiblesPaginated.test.tsx +10 -15
  220. package/src/react/hooks/__tests__/useListCollectionActivities.test.tsx +13 -15
  221. package/src/react/hooks/__tests__/useListCollections.test.tsx +3 -3
  222. package/src/react/hooks/__tests__/useListListingsForCollectible.test.tsx +3 -2
  223. package/src/react/hooks/__tests__/useListMarketCardData.test.tsx +301 -0
  224. package/src/react/hooks/__tests__/useListOffersForCollectible.test.tsx +1 -1
  225. package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +137 -0
  226. package/src/react/hooks/__tests__/useLowestListing.test.tsx +1 -1
  227. package/src/react/hooks/__tests__/useMarketCurrencies.test.tsx +1 -1
  228. package/src/react/hooks/__tests__/useRoyalty.test.tsx +0 -23
  229. package/src/react/hooks/__tests__/useTransferTokens.test.tsx +469 -0
  230. package/src/react/hooks/index.ts +29 -24
  231. package/src/react/hooks/options/index.ts +0 -1
  232. package/src/react/hooks/useAutoSelectFeeOption.tsx +1 -1
  233. package/src/react/hooks/useBalanceOfCollectible.tsx +1 -1
  234. package/src/react/hooks/useCancelTransactionSteps.tsx +2 -2
  235. package/src/react/hooks/useCheckoutOptions.tsx +84 -54
  236. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +98 -57
  237. package/src/react/hooks/useCollectible.tsx +64 -49
  238. package/src/react/hooks/useCollection.tsx +60 -11
  239. package/src/react/hooks/useCollectionBalanceDetails.tsx +93 -73
  240. package/src/react/hooks/useCollectionDetails.ts +69 -0
  241. package/src/react/hooks/useCollectionDetailsPolling.tsx +7 -3
  242. package/src/react/hooks/useComparePrices.tsx +91 -86
  243. package/src/react/hooks/useConvertPriceToUSD.tsx +83 -86
  244. package/src/react/hooks/useCountListingsForCollectible.tsx +64 -53
  245. package/src/react/hooks/useCountOfCollectables.tsx +60 -69
  246. package/src/react/hooks/useCountOfPrimarySaleItems.tsx +13 -0
  247. package/src/react/hooks/useCountOffersForCollectible.tsx +64 -53
  248. package/src/react/hooks/useCurrency.tsx +56 -64
  249. package/src/react/hooks/useCurrencyBalance.tsx +132 -46
  250. package/src/react/hooks/useERC721SaleMintedTokens.tsx +8 -5
  251. package/src/react/hooks/useFilterState.tsx +1 -2
  252. package/src/react/hooks/useFilters.tsx +154 -111
  253. package/src/react/hooks/useFloorOrder.tsx +65 -40
  254. package/src/react/hooks/useGenerateCancelTransaction.tsx +5 -10
  255. package/src/react/hooks/useGenerateListingTransaction.tsx +1 -1
  256. package/src/react/hooks/useGenerateOfferTransaction.tsx +1 -1
  257. package/src/react/hooks/useGenerateSellTransaction.tsx +5 -10
  258. package/src/react/hooks/useGetCountOfPrimarySaleItems.tsx +48 -0
  259. package/src/react/hooks/useGetReceiptFromHash.tsx +32 -3
  260. package/src/react/hooks/useGetTokenRanges.tsx +92 -0
  261. package/src/react/hooks/useHighestOffer.tsx +68 -4
  262. package/src/react/hooks/useInventory.tsx +1 -1
  263. package/src/react/hooks/useList1155ShopCardData.tsx +57 -82
  264. package/src/react/hooks/useList721ShopCardData.tsx +98 -63
  265. package/src/react/hooks/useListBalances.tsx +1 -1
  266. package/src/react/hooks/useListCollectibleActivities.tsx +89 -50
  267. package/src/react/hooks/useListCollectibles.tsx +81 -16
  268. package/src/react/hooks/useListCollectiblesPaginated.tsx +96 -66
  269. package/src/react/hooks/useListCollectionActivities.tsx +84 -50
  270. package/src/react/hooks/useListCollections.tsx +71 -17
  271. package/src/react/hooks/useListListingsForCollectible.tsx +90 -50
  272. package/src/react/hooks/useListMarketCardData.tsx +3 -2
  273. package/src/react/hooks/useListOffersForCollectible.tsx +9 -14
  274. package/src/react/hooks/useListPrimarySaleItems.tsx +66 -0
  275. package/src/react/hooks/useListShopCardData.tsx +70 -0
  276. package/src/react/hooks/useListTokenMetadata.ts +64 -12
  277. package/src/react/hooks/useListTokenMetadata.tsx +73 -0
  278. package/src/react/hooks/useLowestListing.tsx +68 -4
  279. package/src/react/hooks/useMarketCurrencies.tsx +62 -5
  280. package/src/react/hooks/useOpenConnectModal.tsx +9 -0
  281. package/src/react/hooks/useRoyalty.tsx +57 -13
  282. package/src/react/hooks/useShopCollectibleSaleData.tsx +349 -0
  283. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +3 -7
  284. package/src/react/hooks/useTokenSupplies.ts +81 -0
  285. package/src/react/hooks/useTransferTokens.tsx +2 -2
  286. package/src/react/hooks/util/optimisticCancelUpdates.ts +5 -7
  287. package/src/react/index.ts +5 -3
  288. package/src/react/provider.tsx +73 -9
  289. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
  290. package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
  291. package/src/react/queries/balanceOfCollectible.ts +8 -5
  292. package/src/react/queries/checkoutOptions.ts +85 -0
  293. package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
  294. package/src/react/queries/collectible.ts +66 -0
  295. package/src/react/queries/collection.ts +55 -0
  296. package/src/react/queries/collectionBalanceDetails.ts +92 -0
  297. package/src/react/queries/collectionDetails.ts +64 -0
  298. package/src/react/queries/comparePrices.ts +108 -0
  299. package/src/react/queries/convertPriceToUSD.ts +92 -0
  300. package/src/react/queries/countListingsForCollectible.ts +73 -0
  301. package/src/react/queries/countOfCollectables.ts +83 -0
  302. package/src/react/queries/countOfPrimarySaleItems.ts +48 -0
  303. package/src/react/queries/countOffersForCollectible.ts +73 -0
  304. package/src/react/queries/currency.ts +83 -0
  305. package/src/react/queries/filters.ts +138 -0
  306. package/src/react/queries/floorOrder.ts +63 -0
  307. package/src/react/queries/getTokenRanges.ts +62 -0
  308. package/src/react/queries/highestOffer.ts +46 -40
  309. package/src/react/queries/index.ts +10 -4
  310. package/src/react/queries/inventory.ts +10 -4
  311. package/src/react/queries/listBalances.ts +5 -4
  312. package/src/react/queries/listCollectibleActivities.ts +97 -0
  313. package/src/react/queries/listCollectibles.ts +67 -50
  314. package/src/react/queries/listCollectiblesPaginated.ts +87 -0
  315. package/src/react/queries/listCollectionActivities.ts +95 -0
  316. package/src/react/queries/listCollections.ts +53 -10
  317. package/src/react/queries/listListingsForCollectible.ts +82 -0
  318. package/src/react/queries/listTokenMetadata.ts +47 -23
  319. package/src/react/queries/lowestListing.ts +46 -31
  320. package/src/react/queries/marketCurrencies.ts +42 -29
  321. package/src/react/queries/marketplaceConfig.ts +4 -4
  322. package/src/react/queries/primarySaleItems.ts +85 -0
  323. package/src/react/queries/primarySaleItemsCount.ts +64 -0
  324. package/src/react/queries/tokenSupplies.ts +93 -0
  325. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +12 -2
  326. package/src/react/ssr/create-ssr-client.ts +1 -1
  327. package/src/react/types/query.ts +34 -0
  328. package/src/react/ui/components/ModelViewer.tsx +1 -1
  329. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
  330. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +22 -4
  331. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +14 -8
  332. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +5 -4
  333. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +3 -0
  334. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
  335. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +20 -18
  336. package/src/react/ui/components/_internals/action-button/store.ts +72 -34
  337. package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
  338. package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
  339. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +1 -1
  340. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +12 -5
  341. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
  342. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +3 -0
  343. package/src/react/ui/components/marketplace-collectible-card/index.ts +1 -1
  344. package/src/react/ui/components/marketplace-collectible-card/types.ts +11 -7
  345. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
  346. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +3 -2
  347. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +7 -6
  348. package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
  349. package/src/react/ui/components/marketplace-logos/marketplace-logos.tsx +1 -1
  350. package/src/react/ui/components/media/Media.stories.tsx +642 -0
  351. package/src/react/ui/components/media/Media.tsx +29 -20
  352. package/src/react/ui/components/media/types.ts +6 -0
  353. package/src/react/ui/index.ts +8 -10
  354. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +15 -0
  355. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +100 -87
  356. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +11 -5
  357. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +10 -2
  358. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +17 -11
  359. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +4 -1
  360. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +1 -1
  361. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +30 -27
  362. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +3 -3
  363. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +11 -2
  364. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +2 -2
  365. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +10 -3
  366. package/src/react/ui/modals/BuyModal/index.tsx +9 -1
  367. package/src/react/ui/modals/BuyModal/store.ts +26 -0
  368. package/src/react/ui/modals/CreateListingModal/Modal.tsx +28 -11
  369. package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +2 -2
  370. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +0 -1
  371. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -2
  372. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +7 -6
  373. package/src/react/ui/modals/CreateListingModal/index.tsx +1 -1
  374. package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
  375. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +31 -14
  376. package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +1 -1
  377. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +1 -1
  378. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +0 -1
  379. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +7 -7
  380. package/src/react/ui/modals/MakeOfferModal/index.tsx +1 -1
  381. package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
  382. package/src/react/ui/modals/SellModal/Modal.tsx +14 -11
  383. package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +6 -4
  384. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +1 -1
  385. package/src/react/ui/modals/SellModal/hooks/useSell.tsx +0 -1
  386. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +6 -6
  387. package/src/react/ui/modals/SellModal/store.ts +3 -3
  388. package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +1 -1
  389. package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
  390. package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
  391. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +402 -0
  392. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +52 -50
  393. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +39 -47
  394. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
  395. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +33 -37
  396. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +19 -10
  397. package/src/react/ui/modals/TransferModal/index.tsx +28 -31
  398. package/src/react/ui/modals/TransferModal/messages.ts +1 -1
  399. package/src/react/ui/modals/TransferModal/store.ts +122 -0
  400. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +1 -1
  401. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +2 -4
  402. package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
  403. package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
  404. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +6 -3
  405. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +23 -18
  406. package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
  407. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +6 -6
  408. package/src/react/ui/modals/_internal/components/floorPriceText/index.tsx +4 -4
  409. package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
  410. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +41 -26
  411. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +68 -59
  412. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +23 -17
  413. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +340 -41
  414. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/BalanceIndicator.tsx +1 -2
  415. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
  416. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
  417. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +29 -14
  418. package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
  419. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  420. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
  421. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +37 -11
  422. package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +0 -1
  423. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +32 -20
  424. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +92 -63
  425. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +44 -45
  426. package/src/react/ui/modals/_internal/types.ts +2 -2
  427. package/src/react/ui/modals/modal-provider.tsx +2 -3
  428. package/src/types/api-types.ts +36 -36
  429. package/src/types/buyModalErrors.ts +1 -1
  430. package/src/types/index.ts +5 -5
  431. package/src/types/new-marketplace-types.ts +1 -1
  432. package/src/types/sdk-config.ts +8 -2
  433. package/src/types/types.ts +1 -0
  434. package/src/types/waas-types.ts +1 -1
  435. package/src/utils/abi/index.ts +1 -1
  436. package/src/utils/abi/primary-sale/index.ts +1 -1
  437. package/src/utils/abi/token/index.ts +2 -1
  438. package/src/utils/decode/erc20.ts +1 -1
  439. package/src/utils/index.ts +3 -3
  440. package/src/utils/network.ts +15 -0
  441. package/test/const.ts +3 -1
  442. package/test/mocks/wallet.ts +1 -1
  443. package/test/test-utils.tsx +5 -4
  444. package/vitest.shims.d.ts +2 -0
  445. package/vitest.storybook.config.js +33 -0
  446. package/.changeset/fluffy-jokes-lay.md +0 -5
  447. package/.changeset/wise-bugs-boil.md +0 -8
  448. package/dist/CartIcon-Bll1rbxv.js.map +0 -1
  449. package/dist/CollectibleCard-CLQTl0_6.d.ts +0 -8
  450. package/dist/_internal-69NEWNUE.js +0 -34
  451. package/dist/_internal-69NEWNUE.js.map +0 -1
  452. package/dist/api-1KFxYh7o.js.map +0 -1
  453. package/dist/builder-api-DoK3907S.d.ts +0 -12
  454. package/dist/builder.gen-CxP9NT1p.js.map +0 -1
  455. package/dist/index-4-kfOFdx.d.ts +0 -22
  456. package/dist/index-BHiSG-Yi.d.ts +0 -312
  457. package/dist/index-BQW0PUkQ.d.ts +0 -3973
  458. package/dist/index-BfH21xmk.d.ts +0 -117
  459. package/dist/index-CN8puQQJ.d.ts +0 -24
  460. package/dist/index-DafWjEb4.d.ts +0 -65
  461. package/dist/marketplace.gen-Dqk8vRmD.js.map +0 -1
  462. package/dist/marketplaceConfig-D2MYFqll.js.map +0 -1
  463. package/dist/options-DCi6_23w.js +0 -34
  464. package/dist/options-DCi6_23w.js.map +0 -1
  465. package/dist/primary-sale-Cw95phYC.js.map +0 -1
  466. package/dist/queries-DPvwtnO7.js +0 -486
  467. package/dist/queries-DPvwtnO7.js.map +0 -1
  468. package/dist/react-BG7o4PId.js.map +0 -1
  469. package/dist/token-CO5llIla.js.map +0 -1
  470. package/dist/transaction-CcVViHEL.js.map +0 -1
  471. package/dist/types-DwWE6xOF.js.map +0 -1
  472. package/dist/useCollection-C-mclKU0.d.ts +0 -66
  473. package/dist/utils-BFdxaToy.js.map +0 -1
  474. package/dist/utils-Cat9_pef.js.map +0 -1
  475. package/dist/wagmi-DRctYEk6.js.map +0 -1
  476. package/src/react/_internal/api/zod-schema.ts +0 -678
  477. package/src/react/hooks/options/collectionOptions.ts +0 -41
  478. package/src/react/hooks/useCollectionDetails.tsx +0 -50
  479. package/src/react/hooks/useGetTokenSuppliesMap.ts +0 -33
  480. package/src/react/hooks/useListPrimarySaleItems.ts +0 -42
  481. package/src/react/queries/getTokenSupplies.ts +0 -38
  482. package/src/react/ui/modals/TransferModal/_store.ts +0 -72
  483. package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
  484. package/tsconfig.tsbuildinfo +0 -1
  485. /package/dist/{abi-BKyRjVcZ.js → abi-BMvgNbKQ.js} +0 -0
  486. /package/dist/{index-C39K_8SG.d.ts → index-CD2bj_xW.d.ts} +0 -0
  487. /package/dist/{index-ij9f8GAA.d.ts → index-DvpBZgor.d.ts} +0 -0
@@ -1,86 +1,106 @@
1
- import type { GetTokenBalancesDetailsReturn } from '@0xsequence/indexer';
2
- import { queryOptions, useQuery } from '@tanstack/react-query';
3
- import { z } from 'zod';
4
- import type { SdkConfig } from '../../types';
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Optional } from '../_internal';
5
5
  import {
6
- AddressSchema,
7
- QueryArgSchema,
8
- balanceQueries,
9
- getIndexerClient,
10
- } from '../_internal';
6
+ type CollectionBalanceDetailsQueryOptions,
7
+ type CollectionBalanceFilter,
8
+ collectionBalanceDetailsQueryOptions,
9
+ type FetchCollectionBalanceDetailsParams,
10
+ type fetchCollectionBalanceDetails,
11
+ } from '../queries/collectionBalanceDetails';
11
12
  import { useConfig } from './useConfig';
12
13
 
13
- const filterSchema = z.object({
14
- accountAddresses: z.array(AddressSchema),
15
- contractWhitelist: z.array(AddressSchema).optional(),
16
- omitNativeBalances: z.boolean(),
17
- });
18
-
19
- const useCollectionBalanceDetailsArgsSchema = z.object({
20
- chainId: z.number(),
21
- filter: filterSchema,
22
- query: QueryArgSchema.optional(),
23
- });
24
-
25
- export type CollectionBalanceFilter = z.infer<typeof filterSchema>;
26
- export type UseCollectionBalanceDetailsArgs = z.input<
27
- typeof useCollectionBalanceDetailsArgsSchema
14
+ export type UseCollectionBalanceDetailsParams = Optional<
15
+ CollectionBalanceDetailsQueryOptions,
16
+ 'config'
28
17
  >;
29
18
 
30
- const fetchCollectionBalanceDetails = async (
31
- args: UseCollectionBalanceDetailsArgs,
32
- indexerClient: Awaited<ReturnType<typeof getIndexerClient>>,
33
- ) => {
34
- const promises = args.filter.accountAddresses.map((accountAddress) =>
35
- indexerClient.getTokenBalancesDetails({
36
- filter: {
37
- accountAddresses: [accountAddress],
38
- contractWhitelist: args.filter.contractWhitelist,
39
- omitNativeBalances: args.filter.omitNativeBalances,
40
- },
41
- }),
42
- );
19
+ /**
20
+ * Hook to fetch detailed balance information for multiple accounts
21
+ *
22
+ * Retrieves token balances and native balances for multiple account addresses,
23
+ * with support for contract whitelisting and optional native balance exclusion.
24
+ * Aggregates results from multiple account addresses into a single response.
25
+ *
26
+ * @param params - Configuration parameters
27
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
28
+ * @param params.filter - Filter configuration for balance queries
29
+ * @param params.filter.accountAddresses - Array of account addresses to query balances for
30
+ * @param params.filter.contractWhitelist - Optional array of contract addresses to filter by
31
+ * @param params.filter.omitNativeBalances - Whether to exclude native token balances
32
+ * @param params.query - Optional React Query configuration
33
+ *
34
+ * @returns Query result containing aggregated balance details for all accounts
35
+ *
36
+ * @example
37
+ * Basic usage:
38
+ * ```typescript
39
+ * const { data: balanceDetails, isLoading } = useCollectionBalanceDetails({
40
+ * chainId: 137,
41
+ * filter: {
42
+ * accountAddresses: ['0x1234...', '0x5678...'],
43
+ * omitNativeBalances: false
44
+ * }
45
+ * })
46
+ *
47
+ * if (data) {
48
+ * console.log(`Found ${data.balances.length} token balances`);
49
+ * console.log(`Found ${data.nativeBalances.length} native balances`);
50
+ * }
51
+ * ```
52
+ *
53
+ * @example
54
+ * With contract whitelist:
55
+ * ```typescript
56
+ * const { data: balanceDetails } = useCollectionBalanceDetails({
57
+ * chainId: 1,
58
+ * filter: {
59
+ * accountAddresses: [userAddress],
60
+ * contractWhitelist: ['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'], // USDC only
61
+ * omitNativeBalances: true
62
+ * },
63
+ * query: {
64
+ * enabled: Boolean(userAddress),
65
+ * refetchInterval: 60000 // Refresh every minute
66
+ * }
67
+ * })
68
+ * ```
69
+ */
70
+ export function useCollectionBalanceDetails(
71
+ params: UseCollectionBalanceDetailsParams,
72
+ ) {
73
+ const defaultConfig = useConfig();
43
74
 
44
- const responses = await Promise.all(promises);
45
- const mergedResponse = responses.reduce<GetTokenBalancesDetailsReturn>(
46
- (acc, curr) => {
47
- if (!curr) return acc;
48
- return {
49
- page: curr.page,
50
- nativeBalances: [
51
- ...(acc.nativeBalances || []),
52
- ...(curr.nativeBalances || []),
53
- ],
54
- balances: [...(acc.balances || []), ...(curr.balances || [])],
55
- };
56
- },
57
- { page: {}, nativeBalances: [], balances: [] },
58
- );
75
+ const { config = defaultConfig, ...rest } = params;
59
76
 
60
- if (!mergedResponse) {
61
- throw new Error('Failed to fetch collection balance details');
62
- }
77
+ const queryOptions = collectionBalanceDetailsQueryOptions({
78
+ config,
79
+ ...rest,
80
+ });
63
81
 
64
- return mergedResponse;
65
- };
82
+ return useQuery({
83
+ ...queryOptions,
84
+ });
85
+ }
66
86
 
67
- export const collectionBalanceDetailsOptions = (
68
- args: UseCollectionBalanceDetailsArgs,
69
- config: SdkConfig,
70
- ) => {
71
- const parsedArgs = useCollectionBalanceDetailsArgsSchema.parse(args);
72
- const indexerClient = getIndexerClient(parsedArgs.chainId, config);
87
+ export { collectionBalanceDetailsQueryOptions };
73
88
 
74
- return queryOptions({
75
- queryKey: [...balanceQueries.collectionBalanceDetails, args, config],
76
- queryFn: () => fetchCollectionBalanceDetails(parsedArgs, indexerClient),
77
- ...args.query,
78
- });
89
+ export type {
90
+ FetchCollectionBalanceDetailsParams,
91
+ CollectionBalanceDetailsQueryOptions,
92
+ CollectionBalanceFilter,
79
93
  };
80
94
 
81
- export const useCollectionBalanceDetails = (
82
- args: UseCollectionBalanceDetailsArgs,
83
- ) => {
84
- const config = useConfig();
85
- return useQuery(collectionBalanceDetailsOptions(args, config));
95
+ // Legacy exports for backward compatibility
96
+ export type UseCollectionBalanceDetailsArgs = {
97
+ chainId: number;
98
+ filter: CollectionBalanceFilter;
99
+ query?: {
100
+ enabled?: boolean;
101
+ };
86
102
  };
103
+
104
+ export type UseCollectionBalanceDetailsReturn = Awaited<
105
+ ReturnType<typeof fetchCollectionBalanceDetails>
106
+ >;
@@ -0,0 +1,69 @@
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Optional } from '../_internal';
5
+ import {
6
+ type CollectionDetailsQueryOptions,
7
+ collectionDetailsQueryOptions,
8
+ type FetchCollectionDetailsParams,
9
+ } from '../queries/collectionDetails';
10
+ import { useConfig } from './useConfig';
11
+
12
+ export type UseCollectionDetailsParams = Optional<
13
+ CollectionDetailsQueryOptions,
14
+ 'config'
15
+ >;
16
+
17
+ /**
18
+ * Hook to fetch detailed information about a collection
19
+ *
20
+ * This hook retrieves comprehensive metadata and details for an NFT collection,
21
+ * including collection name, description, banner, avatar, social links, stats, etc.
22
+ *
23
+ * @param params - Configuration parameters
24
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
25
+ * @param params.collectionAddress - The collection contract address
26
+ * @param params.query - Optional React Query configuration
27
+ *
28
+ * @returns Query result containing the collection details
29
+ *
30
+ * @example
31
+ * Basic usage:
32
+ * ```typescript
33
+ * const { data: collection, isLoading } = useCollectionDetails({
34
+ * chainId: 137,
35
+ * collectionAddress: '0x631998e91476da5b870d741192fc5cbc55f5a52e'
36
+ * })
37
+ * ```
38
+ *
39
+ * @example
40
+ * With custom query options:
41
+ * ```typescript
42
+ * const { data } = useCollectionDetails({
43
+ * chainId: 137,
44
+ * collectionAddress: '0x631998e91476da5b870d741192fc5cbc55f5a52e',
45
+ * query: {
46
+ * enabled: Boolean(collectionAddress),
47
+ * staleTime: 60_000
48
+ * }
49
+ * })
50
+ * ```
51
+ */
52
+ export function useCollectionDetails(params: UseCollectionDetailsParams) {
53
+ const defaultConfig = useConfig();
54
+
55
+ const { config = defaultConfig, ...rest } = params;
56
+
57
+ const queryOptions = collectionDetailsQueryOptions({
58
+ config,
59
+ ...rest,
60
+ });
61
+
62
+ return useQuery({
63
+ ...queryOptions,
64
+ });
65
+ }
66
+
67
+ export { collectionDetailsQueryOptions };
68
+
69
+ export type { FetchCollectionDetailsParams, CollectionDetailsQueryOptions };
@@ -1,12 +1,15 @@
1
1
  import { queryOptions, useQuery } from '@tanstack/react-query';
2
2
  import type { SdkConfig } from '../../types';
3
- import { CollectionStatus } from '../_internal/api/marketplace.gen';
4
- import { collectionDetailsOptions } from './useCollectionDetails';
3
+ import { CollectionStatus } from '../_internal';
4
+ import { collectionDetailsQueryOptions } from './useCollectionDetails';
5
5
  import { useConfig } from './useConfig';
6
6
 
7
7
  type UseCollectionDetailsPolling = {
8
8
  collectionAddress: string;
9
9
  chainId: number;
10
+ query?: {
11
+ enabled?: boolean;
12
+ };
10
13
  };
11
14
 
12
15
  const INITIAL_POLLING_INTERVAL = 2000; // 2 seconds
@@ -27,7 +30,7 @@ export const collectionDetailsPollingOptions = (
27
30
  config: SdkConfig,
28
31
  ) => {
29
32
  return queryOptions({
30
- ...collectionDetailsOptions(args, config),
33
+ ...collectionDetailsQueryOptions({ ...args, config }),
31
34
  refetchInterval: (query) => {
32
35
  const data = query.state.data;
33
36
  if (data && isTerminalState(data.status)) {
@@ -49,6 +52,7 @@ export const collectionDetailsPollingOptions = (
49
52
  },
50
53
  refetchOnWindowFocus: false,
51
54
  retry: false,
55
+ enabled: args.query?.enabled ?? true,
52
56
  });
53
57
  };
54
58
 
@@ -1,99 +1,104 @@
1
- import { queryOptions, useQuery } from '@tanstack/react-query';
2
- import { z } from 'zod';
3
- import type { SdkConfig } from '../../types';
4
- import { AddressSchema, QueryArgSchema, currencyKeys } from '../_internal';
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Address } from 'viem';
5
+ import type { Optional } from '../_internal';
6
+ import {
7
+ type ComparePricesQueryOptions,
8
+ comparePricesQueryOptions,
9
+ type FetchComparePricesParams,
10
+ } from '../queries/comparePrices';
5
11
  import { useConfig } from './useConfig';
6
- import { convertPriceToUSD } from './useConvertPriceToUSD';
7
12
 
8
- const UseComparePricesArgsSchema = z.object({
9
- chainId: z.number(),
10
- // First price details
11
- priceAmountRaw: z.string(),
12
- priceCurrencyAddress: AddressSchema,
13
- // Second price details (to compare against)
14
- compareToPriceAmountRaw: z.string(),
15
- compareToPriceCurrencyAddress: AddressSchema,
16
- query: QueryArgSchema,
17
- });
13
+ export type UseComparePricesParams = Optional<
14
+ ComparePricesQueryOptions,
15
+ 'config'
16
+ >;
18
17
 
19
- type UseComparePricesArgs = z.input<typeof UseComparePricesArgsSchema>;
18
+ /**
19
+ * Hook to compare prices between different currencies by converting both to USD
20
+ *
21
+ * Compares two prices by converting both to USD using real-time exchange rates
22
+ * and returns the percentage difference with comparison status.
23
+ *
24
+ * @param params - Configuration parameters
25
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
26
+ * @param params.priceAmountRaw - The raw amount of the first price (wei format)
27
+ * @param params.priceCurrencyAddress - The currency address of the first price
28
+ * @param params.compareToPriceAmountRaw - The raw amount of the second price to compare against (wei format)
29
+ * @param params.compareToPriceCurrencyAddress - The currency address of the second price
30
+ * @param params.query - Optional React Query configuration
31
+ *
32
+ * @returns Query result containing percentage difference and comparison status
33
+ *
34
+ * @example
35
+ * Basic usage:
36
+ * ```typescript
37
+ * const { data: comparison, isLoading } = useComparePrices({
38
+ * chainId: 1,
39
+ * priceAmountRaw: '1000000000000000000', // 1 ETH in wei
40
+ * priceCurrencyAddress: '0x0000000000000000000000000000000000000000', // ETH
41
+ * compareToPriceAmountRaw: '2000000000', // 2000 USDC in wei (6 decimals)
42
+ * compareToPriceCurrencyAddress: '0xA0b86a33E6B8DbF5E71Eaa9bfD3F6fD8e8Be3F69' // USDC
43
+ * })
44
+ *
45
+ * if (data) {
46
+ * console.log(`${data.percentageDifferenceFormatted}% ${data.status}`);
47
+ * // e.g., "25.50% above" or "10.25% below"
48
+ * }
49
+ * ```
50
+ *
51
+ * @example
52
+ * With custom query options:
53
+ * ```typescript
54
+ * const { data: comparison } = useComparePrices({
55
+ * chainId: 137,
56
+ * priceAmountRaw: price1,
57
+ * priceCurrencyAddress: currency1Address,
58
+ * compareToPriceAmountRaw: price2,
59
+ * compareToPriceCurrencyAddress: currency2Address,
60
+ * query: {
61
+ * enabled: Boolean(price1 && price2),
62
+ * refetchInterval: 30000 // Refresh every 30 seconds
63
+ * }
64
+ * })
65
+ * ```
66
+ */
67
+ export function useComparePrices(params: UseComparePricesParams) {
68
+ const defaultConfig = useConfig();
20
69
 
21
- export type UseComparePricesReturn = {
22
- percentageDifference: number;
23
- percentageDifferenceFormatted: string;
24
- status: 'above' | 'same' | 'below';
25
- };
70
+ const { config = defaultConfig, ...rest } = params;
26
71
 
27
- const comparePrices = async (
28
- args: UseComparePricesArgs,
29
- config: SdkConfig,
30
- ): Promise<UseComparePricesReturn> => {
31
- const parsedArgs = UseComparePricesArgsSchema.parse(args);
32
- const [priceUSD, compareToPriceUSD] = await Promise.all([
33
- convertPriceToUSD(
34
- {
35
- chainId: parsedArgs.chainId,
36
- currencyAddress: parsedArgs.priceCurrencyAddress,
37
- amountRaw: parsedArgs.priceAmountRaw,
38
- query: {},
39
- },
40
- config,
41
- ),
42
- convertPriceToUSD(
43
- {
44
- chainId: parsedArgs.chainId,
45
- currencyAddress: parsedArgs.compareToPriceCurrencyAddress,
46
- amountRaw: parsedArgs.compareToPriceAmountRaw,
47
- query: {},
48
- },
49
- config,
50
- ),
51
- ]);
52
- const difference = priceUSD.usdAmount - compareToPriceUSD.usdAmount;
72
+ const queryOptions = comparePricesQueryOptions({
73
+ config,
74
+ ...rest,
75
+ });
76
+
77
+ return useQuery({
78
+ ...queryOptions,
79
+ });
80
+ }
53
81
 
54
- if (compareToPriceUSD.usdAmount === 0) {
55
- throw new Error('Cannot compare to zero price');
56
- }
82
+ export { comparePricesQueryOptions };
57
83
 
58
- const percentageDifference = (difference / compareToPriceUSD.usdAmount) * 100;
59
- const isAbove = percentageDifference > 0;
60
- const isSame = percentageDifference === 0;
84
+ export type { FetchComparePricesParams, ComparePricesQueryOptions };
61
85
 
62
- return {
63
- percentageDifference,
64
- percentageDifferenceFormatted: Math.abs(percentageDifference).toFixed(2),
65
- status: isAbove ? 'above' : isSame ? 'same' : 'below',
86
+ // Legacy exports for backward compatibility
87
+ export type UseComparePricesArgs = {
88
+ chainId: number;
89
+ priceAmountRaw: string;
90
+ priceCurrencyAddress: Address;
91
+ compareToPriceAmountRaw: string;
92
+ compareToPriceCurrencyAddress: Address;
93
+ query?: {
94
+ enabled?: boolean;
66
95
  };
67
96
  };
68
97
 
69
- export const comparePricesOptions = (
70
- args: UseComparePricesArgs,
71
- config: SdkConfig,
72
- ) => {
73
- return queryOptions({
74
- ...args.query,
75
- queryKey: [...currencyKeys.conversion, 'compare', args],
76
- queryFn: () => comparePrices(args, config),
77
- });
98
+ export type UseComparePricesReturn = {
99
+ percentageDifference: number;
100
+ percentageDifferenceFormatted: string;
101
+ status: 'above' | 'same' | 'below';
78
102
  };
79
103
 
80
- /**
81
- * Hook to compare prices between different currencies by converting both to USD
82
- * @param args - The arguments for the hook
83
- * @returns The percentage difference between the two prices
84
- * @example
85
- * ```ts
86
- * const { data } = useComparePrices({
87
- * chainId: 1,
88
- * priceAmountRaw: "1000000000000000000",
89
- * priceCurrencyAddress: "0x0000000000000000000000000000000000000000",
90
- * });
91
- *
92
- * console.log(data);
93
- * // { percentageDifference: 10, percentageDifferenceFormatted: "10.00", isAbove: true, isSame: false, isBelow: false }
94
- * ```
95
- */
96
- export const useComparePrices = (args: UseComparePricesArgs) => {
97
- const config = useConfig();
98
- return useQuery(comparePricesOptions(args, config));
99
- };
104
+ export type ComparePricesReturn = UseComparePricesReturn;
@@ -1,99 +1,96 @@
1
- import { queryOptions, useQuery } from '@tanstack/react-query';
2
- import { formatUnits } from 'viem';
3
- import { z } from 'zod';
4
- import type { SdkConfig } from '../../types';
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Address } from 'viem';
5
+ import type { Optional } from '../_internal';
5
6
  import {
6
- AddressSchema,
7
- QueryArgSchema,
8
- currencyKeys,
9
- getQueryClient,
10
- } from '../_internal';
11
- import { currenciesOptions } from '../queries/marketCurrencies';
7
+ type ConvertPriceToUSDQueryOptions,
8
+ type ConvertPriceToUSDReturn,
9
+ convertPriceToUSDQueryOptions,
10
+ type FetchConvertPriceToUSDParams,
11
+ } from '../queries/convertPriceToUSD';
12
12
  import { useConfig } from './useConfig';
13
13
 
14
- const UseConvertPriceToUSDArgsSchema = z.object({
15
- chainId: z.number(),
16
- currencyAddress: AddressSchema,
17
- amountRaw: z.string(),
18
- query: QueryArgSchema,
19
- });
20
-
21
- export type UseConvertPriceToUSDArgs = z.input<
22
- typeof UseConvertPriceToUSDArgsSchema
14
+ export type UseConvertPriceToUSDParams = Optional<
15
+ ConvertPriceToUSDQueryOptions,
16
+ 'config'
23
17
  >;
24
18
 
25
- export type UseConvertPriceToUSDReturn = {
26
- usdAmount: number;
27
- usdAmountFormatted: string;
28
- };
29
-
30
- export const convertPriceToUSD = async (
31
- args: UseConvertPriceToUSDArgs,
32
- config: SdkConfig,
33
- ): Promise<UseConvertPriceToUSDReturn> => {
34
- const parsedArgs = UseConvertPriceToUSDArgsSchema.parse(args);
35
- const queryClient = getQueryClient();
36
- const currencies = await queryClient.fetchQuery(
37
- currenciesOptions(
38
- {
39
- chainId: parsedArgs.chainId,
40
- },
41
- config,
42
- ),
43
- );
44
- const currencyDetails = currencies.find(
45
- (c) =>
46
- c.contractAddress.toLowerCase() ===
47
- parsedArgs.currencyAddress.toLowerCase(),
48
- );
49
-
50
- if (!currencyDetails) {
51
- throw new Error('Currency not found');
52
- }
53
-
54
- const amountDecimal = Number(
55
- formatUnits(BigInt(parsedArgs.amountRaw), currencyDetails.decimals),
56
- );
57
- const usdAmount = amountDecimal * currencyDetails.exchangeRate;
58
-
59
- return {
60
- usdAmount,
61
- usdAmountFormatted: usdAmount.toFixed(2),
62
- };
63
- };
64
-
65
- export const convertPriceToUSDOptions = (
66
- args: UseConvertPriceToUSDArgs,
67
- config: SdkConfig,
68
- ) => {
69
- return queryOptions({
70
- ...args.query,
71
- queryKey: [
72
- ...currencyKeys.conversion,
73
- args.chainId,
74
- args.currencyAddress,
75
- args.amountRaw,
76
- ],
77
- queryFn: () => convertPriceToUSD(args, config),
78
- });
79
- };
80
-
81
19
  /**
82
20
  * Hook to convert a price amount from a specific currency to USD
83
- * @returns The price amount in USD and formatted USD amount
21
+ *
22
+ * Converts cryptocurrency amounts to their USD equivalent using current exchange rates.
23
+ * Fetches currency data and calculates the USD value based on the provided amount
24
+ * and currency address.
25
+ *
26
+ * @param params - Configuration parameters
27
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
28
+ * @param params.currencyAddress - The currency contract address to convert from
29
+ * @param params.amountRaw - The raw amount in smallest units (e.g., wei for ETH)
30
+ * @param params.query - Optional React Query configuration
31
+ *
32
+ * @returns Query result containing USD amount and formatted USD amount
33
+ *
84
34
  * @example
85
- * ```ts
86
- * const { data } = useConvertPriceToUSD({
35
+ * Basic ETH to USD conversion:
36
+ * ```typescript
37
+ * const { data: conversion, isLoading } = useConvertPriceToUSD({
87
38
  * chainId: 1,
88
- * currencyAddress: "0x0000000000000000000000000000000000000000",
89
- * amountRaw: "1000000000000000000",
90
- * });
39
+ * currencyAddress: '0x0000000000000000000000000000000000000000', // ETH
40
+ * amountRaw: '1000000000000000000' // 1 ETH in wei
41
+ * })
42
+ *
43
+ * if (data) {
44
+ * console.log(`$${data.usdAmountFormatted}`); // e.g., "$2000.00"
45
+ * console.log(data.usdAmount); // e.g., 2000
46
+ * }
47
+ * ```
91
48
  *
92
- * console.log(data);
93
- * // { usdAmount: 1000, usdAmountFormatted: "1000.00" }
49
+ * @example
50
+ * ERC-20 token conversion with conditional enabling:
51
+ * ```typescript
52
+ * const { data: conversion } = useConvertPriceToUSD({
53
+ * chainId: 137,
54
+ * currencyAddress: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', // USDC on Polygon
55
+ * amountRaw: '1000000', // 1 USDC (6 decimals)
56
+ * query: {
57
+ * enabled: Boolean(userHasTokens),
58
+ * refetchInterval: 30000 // Update price every 30 seconds
59
+ * }
60
+ * })
94
61
  * ```
95
62
  */
96
- export const useConvertPriceToUSD = (args: UseConvertPriceToUSDArgs) => {
97
- const config = useConfig();
98
- return useQuery(convertPriceToUSDOptions(args, config));
63
+ export function useConvertPriceToUSD(params: UseConvertPriceToUSDParams) {
64
+ const defaultConfig = useConfig();
65
+
66
+ const { config = defaultConfig, ...rest } = params;
67
+
68
+ const queryOptions = convertPriceToUSDQueryOptions({
69
+ config,
70
+ ...rest,
71
+ });
72
+
73
+ return useQuery({
74
+ ...queryOptions,
75
+ });
76
+ }
77
+
78
+ export { convertPriceToUSDQueryOptions };
79
+
80
+ export type {
81
+ FetchConvertPriceToUSDParams,
82
+ ConvertPriceToUSDQueryOptions,
83
+ ConvertPriceToUSDReturn,
99
84
  };
85
+
86
+ // Legacy exports for backward compatibility
87
+ export type UseConvertPriceToUSDArgs = {
88
+ chainId: number;
89
+ currencyAddress: Address;
90
+ amountRaw: string;
91
+ query?: {
92
+ enabled?: boolean;
93
+ };
94
+ };
95
+
96
+ export type UseConvertPriceToUSDReturn = ConvertPriceToUSDReturn;