@0xsequence/marketplace-sdk 0.9.0 → 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 (326) 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 +77 -8
  5. package/dist/{CalendarIcon-DbQ7Vxcw.js → CalendarIcon-CqsuAuCm.js} +4 -51
  6. package/dist/CalendarIcon-CqsuAuCm.js.map +1 -0
  7. package/dist/{CollectibleCard-C8Ae64Ab.d.ts → CollectibleCard-Dd-CG6dE.d.ts} +8 -7
  8. package/dist/InfoIcon-v0w_Lu7t.js +53 -0
  9. package/dist/InfoIcon-v0w_Lu7t.js.map +1 -0
  10. package/dist/{_internal-BgWcRIak.js → _internal-C75gOSNo.js} +2 -10
  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-DTIan01C.js → api-BiMGqWdz.js} +17 -34
  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/{coinbase-ByA_XRB0.js → coinbase-Df8URNxq.js} +1 -1
  27. package/dist/{coinbase-ByA_XRB0.js.map → coinbase-Df8URNxq.js.map} +1 -1
  28. package/dist/{new-marketplace-types-Bfis0U4J.d.ts → create-config-DKJ-F0jc.d.ts} +402 -41
  29. package/dist/{wagmi-CDzEQbfk.js → create-config-fQ-jbJD1.js} +20 -10
  30. package/dist/create-config-fQ-jbJD1.js.map +1 -0
  31. package/dist/{element-b77CyXIZ.js → element-Cx6uJu5N.js} +1 -1
  32. package/dist/{element-b77CyXIZ.js.map → element-Cx6uJu5N.js.map} +1 -1
  33. package/dist/{foundation-DbOrKP9Y.js → foundation-D6U4aRLN.js} +1 -1
  34. package/dist/{foundation-DbOrKP9Y.js.map → foundation-D6U4aRLN.js.map} +1 -1
  35. package/dist/get-provider-CYYHfrlg.js +10 -0
  36. package/dist/get-provider-CYYHfrlg.js.map +1 -0
  37. package/dist/get-query-client-D19vvfJo.js +23 -0
  38. package/dist/get-query-client-D19vvfJo.js.map +1 -0
  39. package/dist/hooks-4pxIbLbM.js +4044 -0
  40. package/dist/hooks-4pxIbLbM.js.map +1 -0
  41. package/dist/{index-BL9RUSEK.d.ts → index-136YrWDH.d.ts} +1 -1
  42. package/dist/{index-D5v5iluA.d.ts → index-BAhaEfqY.d.ts} +1 -1
  43. package/dist/index-BKBin-rq.d.ts +979 -0
  44. package/dist/{index-BQsgAvtX.d.ts → index-BUWB_RXp.d.ts} +776 -570
  45. package/dist/{index-21LE7OhL.d.ts → index-BhVFc2rX.d.ts} +6 -3
  46. package/dist/{index-DXMfTZ1F.d.ts → index-C5aqo8xu.d.ts} +1 -1
  47. package/dist/{index-ByznONYE.d.ts → index-CKrYP7ot.d.ts} +20 -48
  48. package/dist/{index-DaE5ZNHb.d.ts → index-CUwMH7Ht.d.ts} +5 -5
  49. package/dist/{index-CLy8y5hm.d.ts → index-Cu70Lw-w.d.ts} +1 -1
  50. package/dist/index.css +414 -1
  51. package/dist/index.d.ts +8 -10
  52. package/dist/index.js +13 -9
  53. package/dist/{looks-rare-C1VqNcSM.js → looks-rare-ChBRBY-p.js} +1 -1
  54. package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-ChBRBY-p.js.map} +1 -1
  55. package/dist/{magic-eden-ea_AGCZr.js → magic-eden-D5U7N1xL.js} +1 -1
  56. package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-D5U7N1xL.js.map} +1 -1
  57. package/dist/{manifold-8y8J2sjT.js → manifold-CtLF52zU.js} +1 -1
  58. package/dist/{manifold-8y8J2sjT.js.map → manifold-CtLF52zU.js.map} +1 -1
  59. package/dist/{marketplace-nwnZv9Cb.js → marketplace-DmFiyBoS.js} +1 -1
  60. package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-DmFiyBoS.js.map} +1 -1
  61. package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-Cd6W-qOq.js} +21 -21
  62. package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-Cd6W-qOq.js.map} +1 -1
  63. package/dist/{marketplace.gen-BSDIX7NZ.js → marketplace.gen-HpnpL5xU.js} +3 -3
  64. package/dist/marketplace.gen-HpnpL5xU.js.map +1 -0
  65. package/dist/{marketplaceConfig-C6X1SUik.js → marketplaceConfig-GQTTmihy.js} +3 -3
  66. package/dist/marketplaceConfig-GQTTmihy.js.map +1 -0
  67. package/dist/{mintify-LA68TzWg.js → mintify-Bi3Bce68.js} +1 -1
  68. package/dist/{mintify-LA68TzWg.js.map → mintify-Bi3Bce68.js.map} +1 -1
  69. package/dist/network-CGD0oKtS.js +15 -0
  70. package/dist/network-CGD0oKtS.js.map +1 -0
  71. package/dist/{nftx-D3Tc8nzd.js → nftx-BDQZjtkX.js} +1 -1
  72. package/dist/{nftx-D3Tc8nzd.js.map → nftx-BDQZjtkX.js.map} +1 -1
  73. package/dist/{okx-hbqg6oIJ.js → okx-D4meadLe.js} +1 -1
  74. package/dist/{okx-hbqg6oIJ.js.map → okx-D4meadLe.js.map} +1 -1
  75. package/dist/{open-sea-BccuK8-t.js → open-sea-DN0hgfVw.js} +1 -1
  76. package/dist/{open-sea-BccuK8-t.js.map → open-sea-DN0hgfVw.js.map} +1 -1
  77. package/dist/{primary-sale-C55ALnfQ.js → primary-sale-CmWxSfFQ.js} +1 -1
  78. package/dist/{primary-sale-C55ALnfQ.js.map → primary-sale-CmWxSfFQ.js.map} +1 -1
  79. package/dist/provider-DPGUA10G.js +125 -0
  80. package/dist/provider-DPGUA10G.js.map +1 -0
  81. package/dist/{queries-CUU65uYZ.js → queries-Ce_2othB.js} +165 -7
  82. package/dist/queries-Ce_2othB.js.map +1 -0
  83. package/dist/{rarible-BgTwwj9g.js → rarible-B0xlD88A.js} +1 -1
  84. package/dist/{rarible-BgTwwj9g.js.map → rarible-B0xlD88A.js.map} +1 -1
  85. package/dist/react/_internal/api/index.d.ts +2 -4
  86. package/dist/react/_internal/api/index.js +7 -4
  87. package/dist/react/_internal/databeat/index.d.ts +2 -73
  88. package/dist/react/_internal/databeat/index.js +4 -21
  89. package/dist/react/_internal/index.d.ts +2 -7
  90. package/dist/react/_internal/index.js +11 -6
  91. package/dist/react/_internal/wagmi/index.d.ts +2 -4
  92. package/dist/react/_internal/wagmi/index.js +5 -3
  93. package/dist/react/hooks/index.d.ts +12 -17
  94. package/dist/react/hooks/index.js +23 -19
  95. package/dist/react/hooks/options/index.d.ts +2 -3
  96. package/dist/react/hooks/options/index.js +12 -7
  97. package/dist/react/index.d.ts +12 -17
  98. package/dist/react/index.js +28 -19
  99. package/dist/react/queries/index.d.ts +9 -8
  100. package/dist/react/queries/index.js +20 -15
  101. package/dist/react/ssr/index.d.ts +7 -9
  102. package/dist/react/ssr/index.js +11 -6
  103. package/dist/react/ssr/index.js.map +1 -1
  104. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +3 -8
  105. package/dist/react/ui/components/marketplace-collectible-card/index.js +27 -18
  106. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
  107. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +11 -6
  108. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  109. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  110. package/dist/react/ui/icons/index.js +13 -9
  111. package/dist/react/ui/index.d.ts +3 -8
  112. package/dist/react/ui/index.js +27 -18
  113. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +2 -2
  114. package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -18
  115. package/dist/{react-DAIicQPT.js → react-DP0M2Wfm.js} +799 -4306
  116. package/dist/react-DP0M2Wfm.js.map +1 -0
  117. package/dist/{react-BbHBl6gg.css → react-DeDyTgo7.css} +1 -1
  118. package/dist/{react-BbHBl6gg.css.map → react-DeDyTgo7.css.map} +1 -1
  119. package/dist/{sequence-Do3kzb4J.js → sequence-BIrOVRXO.js} +1 -1
  120. package/dist/{sequence-Do3kzb4J.js.map → sequence-BIrOVRXO.js.map} +1 -1
  121. package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-BPMon-M5.js} +1 -1
  122. package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-BPMon-M5.js.map} +1 -1
  123. package/dist/{super-rare-eCm1SE6O.js → super-rare-kPN6Ua8i.js} +1 -1
  124. package/dist/{super-rare-eCm1SE6O.js.map → super-rare-kPN6Ua8i.js.map} +1 -1
  125. package/dist/{token-Da4TdyUk.js → token-CHSBPYVG.js} +1 -1
  126. package/dist/{token-Da4TdyUk.js.map → token-CHSBPYVG.js.map} +1 -1
  127. package/dist/{transaction-CcVViHEL.js → transaction-CnctdNzS.js} +3 -21
  128. package/dist/transaction-CnctdNzS.js.map +1 -0
  129. package/dist/types/index.d.ts +2 -3
  130. package/dist/types/index.js +2 -2
  131. package/dist/{types-DwWE6xOF.js → types-Yw2ywj6j.js} +1 -1
  132. package/dist/{types-DwWE6xOF.js.map → types-Yw2ywj6j.js.map} +1 -1
  133. package/dist/utils/abi/index.d.ts +4 -4
  134. package/dist/utils/abi/index.js +4 -4
  135. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  136. package/dist/utils/abi/marketplace/index.js +1 -1
  137. package/dist/utils/abi/primary-sale/index.d.ts +1 -1
  138. package/dist/utils/abi/primary-sale/index.js +1 -1
  139. package/dist/utils/abi/token/index.d.ts +1 -1
  140. package/dist/utils/abi/token/index.js +1 -1
  141. package/dist/utils/index.d.ts +7 -8
  142. package/dist/utils/index.js +12 -9
  143. package/dist/{utils-CW2NA5KG.js → utils-9RXDgcBl.js} +4 -11
  144. package/dist/utils-9RXDgcBl.js.map +1 -0
  145. package/dist/{utils-BPYfgDSL.js → utils-DjVJ9tov.js} +5 -6
  146. package/dist/utils-DjVJ9tov.js.map +1 -0
  147. package/dist/wagmi-Do_KW5ke.js +0 -0
  148. package/dist/{x2y2-DD17tT91.js → x2y2-BLz-_Q2O.js} +1 -1
  149. package/dist/{x2y2-DD17tT91.js.map → x2y2-BLz-_Q2O.js.map} +1 -1
  150. package/dist/{zora-BpSG9UzS.js → zora-UGhKs-aL.js} +1 -1
  151. package/dist/{zora-BpSG9UzS.js.map → zora-UGhKs-aL.js.map} +1 -1
  152. package/eslint.config.mjs +4 -0
  153. package/package.json +27 -14
  154. package/postcss.config.mjs +6 -0
  155. package/src/index.css +5 -4
  156. package/src/index.ts +1 -0
  157. package/src/react/__tests__/provider.test.tsx +4 -3
  158. package/src/react/_internal/api/__mocks__/indexer.msw.ts +16 -0
  159. package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
  160. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +2 -0
  161. package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
  162. package/src/react/_internal/api/laos-api.ts +3 -0
  163. package/src/react/_internal/api/marketplace.gen.ts +5 -3
  164. package/src/react/_internal/api/query-keys.ts +12 -4
  165. package/src/react/_internal/api/services.ts +2 -14
  166. package/src/react/_internal/databeat/index.ts +15 -14
  167. package/src/react/_internal/databeat/types.ts +22 -0
  168. package/src/react/_internal/databeat/utils.ts +26 -0
  169. package/src/react/_internal/utils.ts +4 -4
  170. package/src/react/_internal/wagmi/create-config.ts +28 -13
  171. package/src/react/_internal/wallet/wallet.ts +4 -4
  172. package/src/react/hooks/__tests__/useBalanceOfCollectible.laos.test.tsx +367 -0
  173. package/src/react/hooks/__tests__/useCheckoutOptions.test.tsx +158 -0
  174. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +42 -65
  175. package/src/react/hooks/__tests__/useCollectionBalanceDetails.test.tsx +17 -0
  176. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +11 -3
  177. package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +3 -3
  178. package/src/react/hooks/__tests__/useCurrencyBalance.test.tsx +7 -3
  179. package/src/react/hooks/__tests__/useFilters.test.tsx +2 -2
  180. package/src/react/hooks/__tests__/useGetTokenRanges.test.tsx +111 -0
  181. package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +83 -57
  182. package/src/react/hooks/__tests__/useTransferTokens.test.tsx +469 -0
  183. package/src/react/hooks/index.ts +3 -1
  184. package/src/react/hooks/useCheckoutOptions.tsx +96 -0
  185. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +98 -57
  186. package/src/react/hooks/useCollectionBalanceDetails.tsx +95 -68
  187. package/src/react/hooks/useCollectionDetailsPolling.tsx +3 -7
  188. package/src/react/hooks/useComparePrices.tsx +90 -82
  189. package/src/react/hooks/useConvertPriceToUSD.tsx +85 -71
  190. package/src/react/hooks/useCurrencyBalance.tsx +132 -46
  191. package/src/react/hooks/useERC721SaleMintedTokens.tsx +8 -5
  192. package/src/react/hooks/useFilters.tsx +154 -111
  193. package/src/react/hooks/useGetCountOfPrimarySaleItems.tsx +48 -0
  194. package/src/react/hooks/useGetTokenRanges.tsx +83 -22
  195. package/src/react/hooks/useList1155ShopCardData.tsx +2 -0
  196. package/src/react/hooks/useList721ShopCardData.tsx +12 -7
  197. package/src/react/hooks/useListCollections.tsx +25 -25
  198. package/src/react/hooks/useListMarketCardData.tsx +2 -1
  199. package/src/react/hooks/useListPrimarySaleItems.tsx +66 -0
  200. package/src/react/hooks/useListTokenMetadata.ts +71 -0
  201. package/src/react/hooks/useOpenConnectModal.tsx +9 -0
  202. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +3 -7
  203. package/src/react/hooks/useTokenSupplies.ts +81 -0
  204. package/src/react/hooks/useTransferTokens.tsx +2 -2
  205. package/src/react/provider.tsx +73 -9
  206. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
  207. package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
  208. package/src/react/queries/balanceOfCollectible.ts +7 -4
  209. package/src/react/queries/checkoutOptions.ts +85 -0
  210. package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
  211. package/src/react/queries/collectionBalanceDetails.ts +92 -0
  212. package/src/react/queries/comparePrices.ts +108 -0
  213. package/src/react/queries/convertPriceToUSD.ts +92 -0
  214. package/src/react/queries/filters.ts +138 -0
  215. package/src/react/queries/getTokenRanges.ts +62 -0
  216. package/src/react/queries/index.ts +3 -0
  217. package/src/react/queries/inventory.ts +6 -0
  218. package/src/react/queries/listBalances.ts +4 -3
  219. package/src/react/queries/listCollections.ts +7 -3
  220. package/src/react/queries/listTokenMetadata.ts +2 -2
  221. package/src/react/queries/marketplaceConfig.ts +1 -1
  222. package/src/react/queries/primarySaleItems.ts +85 -0
  223. package/src/react/queries/primarySaleItemsCount.ts +64 -0
  224. package/src/react/queries/tokenSupplies.ts +93 -0
  225. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
  226. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +22 -4
  227. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +5 -4
  228. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +3 -0
  229. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
  230. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +13 -8
  231. package/src/react/ui/components/_internals/action-button/store.ts +44 -34
  232. package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
  233. package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
  234. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +11 -4
  235. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
  236. package/src/react/ui/components/marketplace-collectible-card/types.ts +4 -3
  237. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
  238. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +5 -1
  239. package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
  240. package/src/react/ui/components/media/Media.stories.tsx +642 -0
  241. package/src/react/ui/components/media/Media.tsx +24 -19
  242. package/src/react/ui/components/media/types.ts +6 -0
  243. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +15 -0
  244. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +6 -0
  245. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +7 -1
  246. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +9 -1
  247. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +15 -8
  248. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +3 -0
  249. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +30 -27
  250. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +2 -2
  251. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +11 -2
  252. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +1 -1
  253. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +7 -0
  254. package/src/react/ui/modals/BuyModal/index.tsx +9 -1
  255. package/src/react/ui/modals/BuyModal/store.ts +26 -0
  256. package/src/react/ui/modals/CreateListingModal/Modal.tsx +28 -11
  257. package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
  258. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +30 -13
  259. package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
  260. package/src/react/ui/modals/SellModal/Modal.tsx +11 -8
  261. package/src/react/ui/modals/SellModal/store.ts +3 -3
  262. package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
  263. package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
  264. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +402 -0
  265. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +51 -48
  266. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +39 -47
  267. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
  268. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +31 -35
  269. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +19 -10
  270. package/src/react/ui/modals/TransferModal/index.tsx +28 -31
  271. package/src/react/ui/modals/TransferModal/messages.ts +1 -1
  272. package/src/react/ui/modals/TransferModal/store.ts +122 -0
  273. package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
  274. package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
  275. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +5 -2
  276. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +23 -17
  277. package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
  278. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +6 -6
  279. package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
  280. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +41 -26
  281. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +68 -59
  282. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +155 -20
  283. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +339 -40
  284. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
  285. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
  286. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +29 -13
  287. package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
  288. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  289. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
  290. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +36 -10
  291. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +32 -20
  292. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +91 -62
  293. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +43 -44
  294. package/src/react/ui/modals/_internal/types.ts +2 -2
  295. package/src/types/sdk-config.ts +6 -1
  296. package/src/utils/network.ts +15 -0
  297. package/test/test-utils.tsx +2 -0
  298. package/vitest.shims.d.ts +2 -0
  299. package/vitest.storybook.config.js +33 -0
  300. package/dist/CalendarIcon-DbQ7Vxcw.js.map +0 -1
  301. package/dist/_internal-BgWcRIak.js.map +0 -1
  302. package/dist/api-DTIan01C.js.map +0 -1
  303. package/dist/builder-api-C_zj5mr3.d.ts +0 -12
  304. package/dist/index-BUVWziLP.d.ts +0 -60
  305. package/dist/index-COt10OgI.d.ts +0 -24
  306. package/dist/index-DPNWNa7t.d.ts +0 -414
  307. package/dist/index-DsfCs3-x.d.ts +0 -122
  308. package/dist/index-dUb6wb4Y.d.ts +0 -22
  309. package/dist/marketplace.gen-BSDIX7NZ.js.map +0 -1
  310. package/dist/marketplaceConfig-C6X1SUik.js.map +0 -1
  311. package/dist/queries-CUU65uYZ.js.map +0 -1
  312. package/dist/react-DAIicQPT.js.map +0 -1
  313. package/dist/transaction-CcVViHEL.js.map +0 -1
  314. package/dist/utils-BPYfgDSL.js.map +0 -1
  315. package/dist/utils-CW2NA5KG.js.map +0 -1
  316. package/dist/wagmi-CDzEQbfk.js.map +0 -1
  317. package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +0 -104
  318. package/src/react/hooks/useGetTokenSuppliesMap.tsx +0 -73
  319. package/src/react/hooks/useListPrimarySaleItems.ts +0 -102
  320. package/src/react/queries/getTokenSuppliesMap.ts +0 -77
  321. package/src/react/ui/modals/TransferModal/_store.ts +0 -66
  322. package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +0 -166
  323. package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
  324. /package/dist/{abi-BKyRjVcZ.js → abi-BMvgNbKQ.js} +0 -0
  325. /package/dist/{index-C39K_8SG.d.ts → index-CD2bj_xW.d.ts} +0 -0
  326. /package/dist/{options-B4QN7Xou.js → options-BBBR8u_4.js} +0 -0
@@ -0,0 +1,48 @@
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Optional } from '../_internal';
5
+ import type { ListPrimarySaleItemsQueryOptions } from '../queries/primarySaleItems';
6
+ import { primarySaleItemsCountQueryOptions } from '../queries/primarySaleItemsCount';
7
+ import { useConfig } from './useConfig';
8
+
9
+ export type UseGetCountParams = Optional<
10
+ ListPrimarySaleItemsQueryOptions,
11
+ 'config'
12
+ >;
13
+
14
+ /**
15
+ * Hook to get the total count of primary sale items
16
+ *
17
+ * Retrieves the total count of primary sale items for a specific contract address
18
+ * from the marketplace.
19
+ *
20
+ * @param params - Configuration parameters
21
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
22
+ * @param params.primarySaleContractAddress - The primary sale contract address
23
+ * @param params.filter - Optional filter parameters for the query
24
+ * @param params.query - Optional React Query configuration
25
+ *
26
+ * @returns Query result containing the count of primary sale items
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const { data: count, isLoading } = useGetCountOfPrimarySaleItems({
31
+ * chainId: 137,
32
+ * primarySaleContractAddress: '0x...',
33
+ * })
34
+ * ```
35
+ */
36
+ export function useGetCountOfPrimarySaleItems(params: UseGetCountParams) {
37
+ const defaultConfig = useConfig();
38
+ const { config = defaultConfig, ...rest } = params;
39
+
40
+ const queryOptions = primarySaleItemsCountQueryOptions({
41
+ config,
42
+ ...rest,
43
+ });
44
+
45
+ return useQuery(queryOptions);
46
+ }
47
+
48
+ export type { ListPrimarySaleItemsQueryOptions };
@@ -1,31 +1,92 @@
1
+ 'use client';
2
+
1
3
  import { useQuery } from '@tanstack/react-query';
2
4
  import type { Address } from 'viem';
3
- import { useConfig } from '..';
4
- import { getIndexerClient } from '../_internal';
5
+ import type { Optional } from '../_internal';
6
+ import {
7
+ type FetchGetTokenRangesParams,
8
+ type GetTokenRangesQueryOptions,
9
+ getTokenRangesQueryOptions,
10
+ } from '../queries/getTokenRanges';
11
+ import { useConfig } from './useConfig';
12
+
13
+ export type UseGetTokenRangesParams = Optional<
14
+ GetTokenRangesQueryOptions,
15
+ 'config'
16
+ >;
17
+
18
+ /**
19
+ * Hook to fetch token ID ranges for a collection
20
+ *
21
+ * Retrieves the available token ID ranges for a specific collection,
22
+ * which is useful for understanding the token distribution and
23
+ * available tokens within a collection.
24
+ *
25
+ * @param params - Configuration parameters
26
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
27
+ * @param params.collectionAddress - The collection contract address to fetch ranges for
28
+ * @param params.query - Optional React Query configuration
29
+ *
30
+ * @returns Query result containing token ID ranges for the collection
31
+ *
32
+ * @example
33
+ * Basic usage:
34
+ * ```typescript
35
+ * const { data: tokenRanges, isLoading } = useGetTokenRanges({
36
+ * chainId: 137,
37
+ * collectionAddress: '0x1234...'
38
+ * })
39
+ *
40
+ * if (data) {
41
+ * console.log(`Token ranges: ${JSON.stringify(data.tokenIDRanges)}`);
42
+ * data.tokenIDRanges?.forEach(range => {
43
+ * console.log(`Range: ${range.start} - ${range.end}`);
44
+ * });
45
+ * }
46
+ * ```
47
+ *
48
+ * @example
49
+ * With conditional enabling:
50
+ * ```typescript
51
+ * const { data: tokenRanges } = useGetTokenRanges({
52
+ * chainId: 1,
53
+ * collectionAddress: selectedCollection?.address,
54
+ * query: {
55
+ * enabled: Boolean(selectedCollection?.address),
56
+ * staleTime: 300000, // Cache for 5 minutes
57
+ * refetchInterval: 60000 // Refresh every minute
58
+ * }
59
+ * })
60
+ * ```
61
+ */
62
+ export function useGetTokenRanges(params: UseGetTokenRangesParams) {
63
+ const defaultConfig = useConfig();
5
64
 
6
- interface UseGetTokenRangesProps {
65
+ const { config = defaultConfig, ...rest } = params;
66
+
67
+ const queryOptions = getTokenRangesQueryOptions({
68
+ config,
69
+ ...rest,
70
+ });
71
+
72
+ return useQuery({
73
+ ...queryOptions,
74
+ });
75
+ }
76
+
77
+ export { getTokenRangesQueryOptions };
78
+
79
+ export type { FetchGetTokenRangesParams, GetTokenRangesQueryOptions };
80
+
81
+ // Legacy exports for backward compatibility
82
+ export type UseGetTokenRangesProps = {
7
83
  chainId: number;
8
84
  collectionAddress: Address;
9
85
  query?: {
10
86
  enabled?: boolean;
11
87
  };
12
- }
88
+ };
13
89
 
14
- export function useGetTokenRanges({
15
- chainId,
16
- collectionAddress,
17
- query = {},
18
- }: UseGetTokenRangesProps) {
19
- const config = useConfig();
20
- const indexerClient = getIndexerClient(chainId, config);
21
-
22
- return useQuery({
23
- queryKey: ['indexer-tokenRanges', chainId, collectionAddress],
24
- queryFn: () => {
25
- return indexerClient.getTokenIDRanges({
26
- contractAddress: collectionAddress,
27
- });
28
- },
29
- enabled: query?.enabled,
30
- });
31
- }
90
+ export type UseGetTokenRangesReturn = Awaited<
91
+ ReturnType<typeof import('../queries/getTokenRanges').fetchGetTokenRanges>
92
+ >;
@@ -75,6 +75,7 @@ export function useList1155ShopCardData({
75
75
  };
76
76
 
77
77
  const supply = saleData?.supply?.toString();
78
+ const unlimitedSupply = saleData?.unlimitedSupply;
78
79
 
79
80
  return {
80
81
  collectibleId: tokenId,
@@ -88,6 +89,7 @@ export function useList1155ShopCardData({
88
89
  quantityInitial: supply,
89
90
  quantityDecimals: collection?.decimals || 0,
90
91
  quantityRemaining: supply,
92
+ unlimitedSupply,
91
93
  saleStartsAt: saleData?.startDate?.toString(),
92
94
  saleEndsAt: saleData?.endDate?.toString(),
93
95
  marketplaceType: 'shop',
@@ -1,8 +1,8 @@
1
1
  import type { Address } from 'viem';
2
2
  import { useReadContract } from 'wagmi';
3
- import { ContractType, OrderSide, type TokenMetadata } from '../../types';
4
3
  import { ERC721_SALE_ABI } from '../../utils';
5
- import type { ShopCollectibleCardProps } from '../ui/components/marketplace-collectible-card/types';
4
+ import { ContractType, OrderSide, type TokenMetadata } from '../_internal';
5
+ import type { ShopCollectibleCardProps } from '../ui';
6
6
  import { useFilterState } from './useFilterState';
7
7
  import { useListCollectibles } from './useListCollectibles';
8
8
  import { useListPrimarySaleItems } from './useListPrimarySaleItems';
@@ -92,10 +92,15 @@ export function useList721ShopCardData({
92
92
  hasMintedTokens && Number(tokenId) < Number(firstAvailableTokenId);
93
93
 
94
94
  const matchingPrimarySaleItem = primarySaleItems?.pages
95
- .flatMap((page) => page.primarySaleItems)
96
- .find(
97
- (item: { primarySaleItem: { tokenId: { toString: () => string } } }) =>
98
- item.primarySaleItem.tokenId?.toString() === tokenId,
95
+ .find((item) =>
96
+ item.primarySaleItems.find(
97
+ (primarySaleItem) =>
98
+ primarySaleItem.primarySaleItem.tokenId?.toString() === tokenId,
99
+ ),
100
+ )
101
+ ?.primarySaleItems.find(
102
+ (primarySaleItem) =>
103
+ primarySaleItem.primarySaleItem.tokenId?.toString() === tokenId,
99
104
  );
100
105
 
101
106
  const saleData = matchingPrimarySaleItem?.primarySaleItem;
@@ -135,7 +140,7 @@ export function useList721ShopCardData({
135
140
  chainId,
136
141
  collectionAddress: contractAddress,
137
142
  collectionType: ContractType.ERC721,
138
- tokenMetadata: tokenMetadata,
143
+ tokenMetadata,
139
144
  cardLoading: isLoading,
140
145
  salesContractAddress: salesContractAddress,
141
146
  salePrice,
@@ -16,57 +16,57 @@ export type UseListCollectionsParams = Optional<
16
16
  >;
17
17
 
18
18
  /**
19
- * Hook to fetch a list of collections from the marketplace
19
+ * Hook to fetch collections from marketplace configuration
20
20
  *
21
- * This hook fetches collections from the marketplace configuration and enriches them with
22
- * metadata from the metadata API. Collections can be filtered by marketplace type (market/shop).
21
+ * Retrieves all collections configured in the marketplace, with optional filtering
22
+ * by marketplace type. Combines metadata from the metadata API with marketplace
23
+ * configuration to provide complete collection information.
23
24
  *
24
25
  * @param params - Configuration parameters
25
- * @param params.marketplaceType - Optional filter for marketplace type ('market' or 'shop')
26
- * @param params.marketplaceConfig - Optional marketplace configuration (defaults from context)
27
- * @param params.config - Optional SDK configuration (defaults from context)
26
+ * @param params.marketplaceType - Optional filter by marketplace type
28
27
  * @param params.query - Optional React Query configuration
29
28
  *
30
- * @returns Query result containing an array of collections with metadata
29
+ * @returns Query result containing array of collections with metadata
31
30
  *
32
31
  * @example
33
- * Basic usage - fetch all collections:
32
+ * Basic usage:
34
33
  * ```typescript
35
- * const { data: collections, isLoading } = useListCollections()
34
+ * const { data: collections, isLoading } = useListCollections();
35
+ *
36
+ * if (isLoading) return <div>Loading collections...</div>;
37
+ *
38
+ * return (
39
+ * <div>
40
+ * {collections?.map(collection => (
41
+ * <div key={collection.itemsAddress}>
42
+ * {collection.name}
43
+ * </div>
44
+ * ))}
45
+ * </div>
46
+ * );
36
47
  * ```
37
48
  *
38
49
  * @example
39
- * Filter by marketplace type:
50
+ * Filtering by marketplace type:
40
51
  * ```typescript
41
52
  * const { data: marketCollections } = useListCollections({
42
53
  * marketplaceType: 'market'
43
- * })
44
- * ```
45
- *
46
- * @example
47
- * With custom query options:
48
- * ```typescript
49
- * const { data: collections } = useListCollections({
50
- * query: {
51
- * enabled: isReady,
52
- * staleTime: 5 * 60 * 1000 // 5 minutes
53
- * }
54
- * })
54
+ * });
55
55
  * ```
56
56
  */
57
57
  export function useListCollections(params: UseListCollectionsParams = {}) {
58
58
  const defaultConfig = useConfig();
59
- const { data: defaultMarketplaceConfig } = useMarketplaceConfig();
59
+ const { data: marketplaceConfig } = useMarketplaceConfig();
60
60
 
61
61
  const {
62
62
  config = defaultConfig,
63
- marketplaceConfig = defaultMarketplaceConfig,
63
+ marketplaceConfig: paramMarketplaceConfig,
64
64
  ...rest
65
65
  } = params;
66
66
 
67
67
  const queryOptions = listCollectionsQueryOptions({
68
68
  config,
69
- marketplaceConfig,
69
+ marketplaceConfig: paramMarketplaceConfig || marketplaceConfig,
70
70
  ...rest,
71
71
  });
72
72
 
@@ -19,7 +19,8 @@ import { useListCollectibles } from './useListCollectibles';
19
19
  interface UseListMarketCardDataProps {
20
20
  collectionAddress: Address;
21
21
  chainId: number;
22
- orderbookKind: OrderbookKind;
22
+ // orderbookKind is optional — used to override marketplace config for internal tests
23
+ orderbookKind?: OrderbookKind;
23
24
  collectionType: ContractType;
24
25
  filterOptions?: PropertyFilter[];
25
26
  searchText?: string;
@@ -0,0 +1,66 @@
1
+ 'use client';
2
+
3
+ import { useInfiniteQuery } from '@tanstack/react-query';
4
+ import type { Optional } from '../_internal';
5
+ import {
6
+ type ListPrimarySaleItemsQueryOptions,
7
+ listPrimarySaleItemsQueryOptions,
8
+ } from '../queries/primarySaleItems';
9
+ import { useConfig } from './useConfig';
10
+
11
+ export type UseListPrimarySaleItemsParams = Optional<
12
+ ListPrimarySaleItemsQueryOptions,
13
+ 'config'
14
+ >;
15
+
16
+ /**
17
+ * Hook to fetch primary sale items with pagination support
18
+ *
19
+ * Retrieves a paginated list of primary sale items for a specific contract address
20
+ * from the marketplace.
21
+ *
22
+ * @param params - Configuration parameters
23
+ * @param params.chainId - The chain ID (must be number, e.g., 1 for Ethereum, 137 for Polygon)
24
+ * @param params.primarySaleContractAddress - The primary sale contract address
25
+ * @param params.filter - Optional filter parameters for the query
26
+ * @param params.page - Optional pagination parameters
27
+ * @param params.query - Optional React Query configuration
28
+ *
29
+ * @returns Infinite query result containing the primary sale items data
30
+ *
31
+ * @example
32
+ * Basic usage:
33
+ * ```typescript
34
+ * const { data, isLoading } = useListPrimarySaleItems({
35
+ * chainId: 137,
36
+ * primarySaleContractAddress: '0x...',
37
+ * })
38
+ * ```
39
+ *
40
+ * @example
41
+ * With filters and pagination:
42
+ * ```typescript
43
+ * const { data, isLoading } = useListPrimarySaleItems({
44
+ * chainId: 1,
45
+ * primarySaleContractAddress: '0x...',
46
+ * filter: { status: 'active' },
47
+ * page: { page: 1, pageSize: 20 },
48
+ * query: {
49
+ * enabled: isReady
50
+ * }
51
+ * })
52
+ * ```
53
+ */
54
+ export function useListPrimarySaleItems(params: UseListPrimarySaleItemsParams) {
55
+ const defaultConfig = useConfig();
56
+ const { config = defaultConfig, ...rest } = params;
57
+
58
+ const queryOptions = listPrimarySaleItemsQueryOptions({
59
+ config,
60
+ ...rest,
61
+ });
62
+
63
+ return useInfiniteQuery(queryOptions);
64
+ }
65
+
66
+ export type { ListPrimarySaleItemsQueryOptions };
@@ -0,0 +1,71 @@
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Optional } from '../_internal';
5
+ import {
6
+ type FetchListTokenMetadataParams,
7
+ type ListTokenMetadataQueryOptions,
8
+ listTokenMetadataQueryOptions,
9
+ } from '../queries/listTokenMetadata';
10
+ import { useConfig } from './useConfig';
11
+
12
+ export type UseListTokenMetadataParams = Optional<
13
+ ListTokenMetadataQueryOptions,
14
+ 'config'
15
+ >;
16
+
17
+ /**
18
+ * Hook to fetch token metadata from the metadata API
19
+ *
20
+ * Retrieves metadata for a batch of tokens from a specific contract.
21
+ * Useful for getting token names, descriptions, images, and other attributes.
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.contractAddress - The contract address containing the tokens
26
+ * @param params.tokenIds - Array of token IDs to fetch metadata for
27
+ * @param params.query - Optional React Query configuration
28
+ *
29
+ * @returns Query result containing token metadata array
30
+ *
31
+ * @example
32
+ * Basic usage:
33
+ * ```typescript
34
+ * const { data, isLoading } = useListTokenMetadata({
35
+ * chainId: 137,
36
+ * contractAddress: '0x...',
37
+ * tokenIds: ['1', '2', '3']
38
+ * })
39
+ * ```
40
+ *
41
+ * @example
42
+ * With conditional fetching:
43
+ * ```typescript
44
+ * const { data, isLoading } = useListTokenMetadata({
45
+ * chainId: 1,
46
+ * contractAddress: '0x...',
47
+ * tokenIds: selectedTokenIds,
48
+ * query: {
49
+ * enabled: selectedTokenIds.length > 0
50
+ * }
51
+ * })
52
+ * ```
53
+ */
54
+ export function useListTokenMetadata(params: UseListTokenMetadataParams) {
55
+ const defaultConfig = useConfig();
56
+
57
+ const { config = defaultConfig, ...rest } = params;
58
+
59
+ const queryOptions = listTokenMetadataQueryOptions({
60
+ config,
61
+ ...rest,
62
+ });
63
+
64
+ return useQuery({
65
+ ...queryOptions,
66
+ });
67
+ }
68
+
69
+ export { listTokenMetadataQueryOptions };
70
+
71
+ export type { FetchListTokenMetadataParams, ListTokenMetadataQueryOptions };
@@ -0,0 +1,9 @@
1
+ import { useConfig } from './useConfig';
2
+
3
+ export const useOpenConnectModal = () => {
4
+ const context = useConfig();
5
+
6
+ return {
7
+ openConnectModal: context.openConnectModal,
8
+ };
9
+ };
@@ -62,15 +62,11 @@ export function useTokenSaleDetailsBatch({
62
62
  const supplies = await Promise.all(
63
63
  tokenIds.map(async (tokenId) => {
64
64
  try {
65
- const result = await indexerClient.getTokenSuppliesMap({
66
- tokenMap: {
67
- [collectionAddress]: [tokenId],
68
- },
65
+ const result = await indexerClient.getTokenSupplies({
66
+ contractAddress: collectionAddress,
69
67
  includeMetadata: false,
70
68
  });
71
- const supply = result.supplies?.[collectionAddress]?.find(
72
- (s) => s.tokenID === tokenId,
73
- );
69
+ const supply = result.tokenIDs?.find((s) => s.tokenID === tokenId);
74
70
  return {
75
71
  tokenId,
76
72
  supply: supply ? Number(supply.supply) : 0,
@@ -0,0 +1,81 @@
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Optional } from '../_internal';
5
+ import {
6
+ type FetchTokenSuppliesParams,
7
+ type TokenSuppliesQueryOptions,
8
+ tokenSuppliesQueryOptions,
9
+ } from '../queries/tokenSupplies';
10
+ import { useConfig } from './useConfig';
11
+
12
+ export type UseTokenSuppliesParams = Optional<
13
+ TokenSuppliesQueryOptions,
14
+ 'config'
15
+ >;
16
+
17
+ /**
18
+ * Hook to fetch token supplies from the indexer or LAOS API
19
+ *
20
+ * Retrieves supply information for tokens from a specific collection.
21
+ * Automatically chooses between indexer and LAOS APIs based on the isLaos721 flag.
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.isLaos721 - Whether to use LAOS API instead of indexer
27
+ * @param params.includeMetadata - Whether to include token metadata
28
+ * @param params.page - Pagination options
29
+ * @param params.query - Optional React Query configuration
30
+ *
31
+ * @returns Query result containing token supplies
32
+ *
33
+ * @example
34
+ * Basic usage:
35
+ * ```typescript
36
+ * const { data, isLoading } = useTokenSupplies({
37
+ * chainId: 137,
38
+ * collectionAddress: '0x...'
39
+ * })
40
+ * ```
41
+ *
42
+ * @example
43
+ * With LAOS API:
44
+ * ```typescript
45
+ * const { data, isLoading } = useTokenSupplies({
46
+ * chainId: 1,
47
+ * collectionAddress: '0x...',
48
+ * isLaos721: true
49
+ * })
50
+ * ```
51
+ *
52
+ * @example
53
+ * With conditional fetching:
54
+ * ```typescript
55
+ * const { data, isLoading } = useTokenSupplies({
56
+ * chainId: 1,
57
+ * collectionAddress: selectedCollection,
58
+ * query: {
59
+ * enabled: !!selectedCollection
60
+ * }
61
+ * })
62
+ * ```
63
+ */
64
+ export function useTokenSupplies(params: UseTokenSuppliesParams) {
65
+ const defaultConfig = useConfig();
66
+
67
+ const { config = defaultConfig, ...rest } = params;
68
+
69
+ const queryOptions = tokenSuppliesQueryOptions({
70
+ config,
71
+ ...rest,
72
+ });
73
+
74
+ return useQuery({
75
+ ...queryOptions,
76
+ });
77
+ }
78
+
79
+ export { tokenSuppliesQueryOptions };
80
+
81
+ export type { FetchTokenSuppliesParams, TokenSuppliesQueryOptions };
@@ -1,4 +1,4 @@
1
- import { type Abi, type Address, erc721Abi, type Hex } from 'viem';
1
+ import { type Abi, type Address, erc721Abi } 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';
@@ -6,7 +6,7 @@ import type { ContractType } from '../_internal';
6
6
 
7
7
  interface BaseTransferParams {
8
8
  chainId: number;
9
- collectionAddress: Hex;
9
+ collectionAddress: Address;
10
10
  tokenId: string;
11
11
  receiverAddress: Address;
12
12
  }
@@ -1,19 +1,78 @@
1
1
  'use client';
2
2
 
3
+ import { useOpenConnectModal } from '@0xsequence/connect';
4
+ import type { Auth } from '@databeat/tracker';
3
5
  import { QueryClientProvider } from '@tanstack/react-query';
4
- import { createContext } from 'react';
5
- import type { SdkConfig } from '../types';
6
+ import { createContext, useMemo } from 'react';
7
+ import type {
8
+ MarketplaceSdkContext as MarketplaceSdkContextType,
9
+ SdkConfig,
10
+ } from '../types';
6
11
  import { InvalidProjectAccessKeyError } from '../utils/_internal/error/config';
7
12
  import { getQueryClient } from './_internal/api/get-query-client';
13
+ import { DatabeatAnalytics } from './_internal/databeat';
8
14
  import { PROVIDER_ID } from './_internal/get-provider';
9
15
 
10
- export const MarketplaceSdkContext = createContext({} as SdkConfig);
16
+ export const MarketplaceSdkContext = createContext(
17
+ {} as MarketplaceSdkContextType,
18
+ );
11
19
 
12
20
  export type MarketplaceSdkProviderProps = {
13
21
  config: SdkConfig;
14
22
  children: React.ReactNode;
23
+ openConnectModal?: () => void;
15
24
  };
16
25
 
26
+ export function MarketplaceProvider({
27
+ config,
28
+ children,
29
+ openConnectModal,
30
+ }: MarketplaceSdkProviderProps) {
31
+ if (config.projectAccessKey === '' || !config.projectAccessKey) {
32
+ throw new InvalidProjectAccessKeyError(config.projectAccessKey);
33
+ }
34
+
35
+ const analytics = useMemo(() => {
36
+ const server = 'https://nodes.sequence.app';
37
+ const auth: Auth = {};
38
+ auth.headers = { 'X-Access-Key': config.projectAccessKey };
39
+
40
+ return new DatabeatAnalytics(server, auth, {
41
+ defaultEnabled: true,
42
+ initProps: () => {
43
+ return {
44
+ origin: typeof window !== 'undefined' ? window.location.origin : '',
45
+ };
46
+ },
47
+ });
48
+ }, [config.projectAccessKey, window]);
49
+
50
+ if (openConnectModal) {
51
+ const context: MarketplaceSdkContextType = {
52
+ ...config,
53
+ openConnectModal,
54
+ analytics,
55
+ };
56
+
57
+ return (
58
+ <MarketplaceQueryClientProvider>
59
+ <MarketplaceSdkContext.Provider value={context}>
60
+ <div id={PROVIDER_ID}>{children}</div>
61
+ </MarketplaceSdkContext.Provider>
62
+ </MarketplaceQueryClientProvider>
63
+ );
64
+ }
65
+
66
+ return (
67
+ <MarketplaceProviderWithSequenceConnect
68
+ config={config}
69
+ analytics={analytics}
70
+ >
71
+ {children}
72
+ </MarketplaceProviderWithSequenceConnect>
73
+ );
74
+ }
75
+
17
76
  export function MarketplaceQueryClientProvider({
18
77
  children,
19
78
  }: {
@@ -25,17 +84,22 @@ export function MarketplaceQueryClientProvider({
25
84
  );
26
85
  }
27
86
 
28
- export function MarketplaceProvider({
87
+ function MarketplaceProviderWithSequenceConnect({
29
88
  config,
30
89
  children,
31
- }: MarketplaceSdkProviderProps) {
32
- if (config.projectAccessKey === '' || !config.projectAccessKey) {
33
- throw new InvalidProjectAccessKeyError(config.projectAccessKey);
34
- }
90
+ analytics,
91
+ }: MarketplaceSdkProviderProps & { analytics: DatabeatAnalytics }) {
92
+ const { setOpenConnectModal } = useOpenConnectModal();
93
+
94
+ const context: MarketplaceSdkContextType = {
95
+ ...config,
96
+ openConnectModal: () => setOpenConnectModal(true),
97
+ analytics,
98
+ };
35
99
 
36
100
  return (
37
101
  <MarketplaceQueryClientProvider>
38
- <MarketplaceSdkContext.Provider value={config}>
102
+ <MarketplaceSdkContext.Provider value={context}>
39
103
  <div id={PROVIDER_ID}>{children}</div>
40
104
  </MarketplaceSdkContext.Provider>
41
105
  </MarketplaceQueryClientProvider>