@0xsequence/marketplace-sdk 0.9.0 → 1.0.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 (539) hide show
  1. package/.storybook/ConnectionStatus.tsx +289 -0
  2. package/.storybook/main.ts +82 -0
  3. package/.storybook/preview.tsx +106 -0
  4. package/.storybook/vitest.setup.ts +6 -0
  5. package/CHANGELOG.md +135 -8
  6. package/compile-tailwind.js +54 -0
  7. package/dist/{CalendarIcon-DbQ7Vxcw.js → BellIcon-Cb9YEUzJ.js} +27 -27
  8. package/dist/BellIcon-Cb9YEUzJ.js.map +1 -0
  9. package/dist/CollectibleCard-CYyWzk6u.d.ts +8 -0
  10. package/dist/{_internal-BgWcRIak.js → _internal-DslqcNC1.js} +1 -1
  11. package/dist/{_internal-BgWcRIak.js.map → _internal-DslqcNC1.js.map} +1 -1
  12. package/dist/{alien_swap-B_76IMma.js → alien_swap-DJ98gZQp.js} +1 -1
  13. package/dist/{alien_swap-B_76IMma.js.map → alien_swap-DJ98gZQp.js.map} +1 -1
  14. package/dist/{api-DTIan01C.js → api-BmEQfSQa.js} +17 -14
  15. package/dist/api-BmEQfSQa.js.map +1 -0
  16. package/dist/{aqua-xyz-CMN_TFY5.js → aqua-xyz-n1PcCCZ0.js} +1 -1
  17. package/dist/{aqua-xyz-CMN_TFY5.js.map → aqua-xyz-n1PcCCZ0.js.map} +1 -1
  18. package/dist/{aura-Cye_TuHj.js → aura-Bevk_YkS.js} +1 -1
  19. package/dist/{aura-Cye_TuHj.js.map → aura-Bevk_YkS.js.map} +1 -1
  20. package/dist/{blur-DWDMyMpK.js → blur-B5sHErx5.js} +1 -1
  21. package/dist/{blur-DWDMyMpK.js.map → blur-B5sHErx5.js.map} +1 -1
  22. package/dist/builder-api-BFuZNOaN.js.map +1 -1
  23. package/dist/builder.gen-B9wR2nvF.js.map +1 -1
  24. package/dist/{coinbase-ByA_XRB0.js → coinbase-D30W-lxA.js} +1 -1
  25. package/dist/{coinbase-ByA_XRB0.js.map → coinbase-D30W-lxA.js.map} +1 -1
  26. package/dist/contracts-DPHFT2TA.js +97 -0
  27. package/dist/contracts-DPHFT2TA.js.map +1 -0
  28. package/dist/{wagmi-CDzEQbfk.js → create-config-6uynwTeb.js} +20 -10
  29. package/dist/create-config-6uynwTeb.js.map +1 -0
  30. package/dist/{new-marketplace-types-Bfis0U4J.d.ts → create-config-lLSrnkbb.d.ts} +554 -166
  31. package/dist/{element-b77CyXIZ.js → element-C2NJexro.js} +1 -1
  32. package/dist/{element-b77CyXIZ.js.map → element-C2NJexro.js.map} +1 -1
  33. package/dist/filters-B8XS4tFH.d.ts +31 -0
  34. package/dist/{foundation-DbOrKP9Y.js → foundation-QgY1lvUj.js} +1 -1
  35. package/dist/{foundation-DbOrKP9Y.js.map → foundation-QgY1lvUj.js.map} +1 -1
  36. package/dist/index-BGJXqdg6.d.ts +131 -0
  37. package/dist/index-BuY_NKSX.d.ts +222 -0
  38. package/dist/{index-21LE7OhL.d.ts → index-ByW08-Z7.d.ts} +6 -3
  39. package/dist/index-C7xKVIr4.d.ts +447 -0
  40. package/dist/index-CIkpYltz.d.ts +61 -0
  41. package/dist/index-CQnGIGb5.d.ts +346 -0
  42. package/dist/{index-DaE5ZNHb.d.ts → index-CY5UEX4h.d.ts} +5 -5
  43. package/dist/{index-DXMfTZ1F.d.ts → index-ChSKFOMx.d.ts} +1 -1
  44. package/dist/{index-D5v5iluA.d.ts → index-CtF7EE2z.d.ts} +1 -1
  45. package/dist/index-D2HohSwO.d.ts +293 -0
  46. package/dist/index-D71J5Ghd.d.ts +813 -0
  47. package/dist/{index-ByznONYE.d.ts → index-DNU9xoGK.d.ts} +28 -64
  48. package/dist/index-DX0Vm8HY.d.ts +2541 -0
  49. package/dist/index-DonXiSg2.d.ts +902 -0
  50. package/dist/index-Dpyp7fQz.d.ts +298 -0
  51. package/dist/index-PSPpUxCE.d.ts +18 -0
  52. package/dist/{index-BL9RUSEK.d.ts → index-QxxS6f9r.d.ts} +1 -1
  53. package/dist/index-ThUIs-Sy.d.ts +306 -0
  54. package/dist/index.d.ts +8 -10
  55. package/dist/index.js +12 -9
  56. package/dist/listCollectiblesPaginated--AgXjajA.d.ts +166 -0
  57. package/dist/listCollections-Bbzbz7qW.d.ts +624 -0
  58. package/dist/{looks-rare-C1VqNcSM.js → looks-rare-CMVPny4v.js} +1 -1
  59. package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-CMVPny4v.js.map} +1 -1
  60. package/dist/lowestListing-BQHfQpfg.d.ts +144 -0
  61. package/dist/{magic-eden-ea_AGCZr.js → magic-eden-IrWp2ZXk.js} +1 -1
  62. package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-IrWp2ZXk.js.map} +1 -1
  63. package/dist/{manifold-8y8J2sjT.js → manifold-DeOE-p2G.js} +1 -1
  64. package/dist/{manifold-8y8J2sjT.js.map → manifold-DeOE-p2G.js.map} +1 -1
  65. package/dist/marketCurrencies-CmOMCCOr.d.ts +122 -0
  66. package/dist/{marketplace-nwnZv9Cb.js → marketplace-B5Z8G03R.js} +1 -1
  67. package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-B5Z8G03R.js.map} +1 -1
  68. package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-D8t86gsW.js} +21 -21
  69. package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-D8t86gsW.js.map} +1 -1
  70. package/dist/{marketplace.gen-BSDIX7NZ.js → marketplace.gen-JzNYpM0U.js} +3 -3
  71. package/dist/marketplace.gen-JzNYpM0U.js.map +1 -0
  72. package/dist/{marketplaceConfig-C6X1SUik.js → marketplaceConfig-sNh-MA5M.js} +15 -4
  73. package/dist/marketplaceConfig-sNh-MA5M.js.map +1 -0
  74. package/dist/{mintify-LA68TzWg.js → mintify-DG3GrljJ.js} +1 -1
  75. package/dist/{mintify-LA68TzWg.js.map → mintify-DG3GrljJ.js.map} +1 -1
  76. package/dist/network-DnBEe1Ur.js +15 -0
  77. package/dist/network-DnBEe1Ur.js.map +1 -0
  78. package/dist/{nftx-D3Tc8nzd.js → nftx-B3LH-ZYM.js} +1 -1
  79. package/dist/{nftx-D3Tc8nzd.js.map → nftx-B3LH-ZYM.js.map} +1 -1
  80. package/dist/{okx-hbqg6oIJ.js → okx-CRFLrT3Z.js} +1 -1
  81. package/dist/{okx-hbqg6oIJ.js.map → okx-CRFLrT3Z.js.map} +1 -1
  82. package/dist/{open-sea-BccuK8-t.js → open-sea-cOpfl366.js} +1 -1
  83. package/dist/{open-sea-BccuK8-t.js.map → open-sea-cOpfl366.js.map} +1 -1
  84. package/dist/primary-sale-CLjXRrDj.js +3048 -0
  85. package/dist/primary-sale-CLjXRrDj.js.map +1 -0
  86. package/dist/queries-BYT4GJw3.js +1478 -0
  87. package/dist/queries-BYT4GJw3.js.map +1 -0
  88. package/dist/query-BTe7Wkrs.d.ts +31 -0
  89. package/dist/{rarible-BgTwwj9g.js → rarible-guwUx4cn.js} +1 -1
  90. package/dist/{rarible-BgTwwj9g.js.map → rarible-guwUx4cn.js.map} +1 -1
  91. package/dist/react/_internal/api/index.d.ts +2 -4
  92. package/dist/react/_internal/api/index.js +5 -4
  93. package/dist/react/_internal/databeat/index.d.ts +2 -73
  94. package/dist/react/_internal/databeat/index.js +21 -18
  95. package/dist/react/_internal/index.d.ts +2 -7
  96. package/dist/react/_internal/index.js +8 -6
  97. package/dist/react/_internal/wagmi/index.d.ts +2 -4
  98. package/dist/react/_internal/wagmi/index.js +4 -3
  99. package/dist/react/hooks/config/index.d.ts +9 -0
  100. package/dist/react/hooks/config/index.js +26 -0
  101. package/dist/react/hooks/contracts/index.d.ts +7 -0
  102. package/dist/react/hooks/contracts/index.js +16 -0
  103. package/dist/react/hooks/data/collectibles/index.d.ts +5 -0
  104. package/dist/react/hooks/data/collectibles/index.js +26 -0
  105. package/dist/react/hooks/data/collections/index.d.ts +11 -0
  106. package/dist/react/hooks/data/collections/index.js +26 -0
  107. package/dist/react/hooks/data/index.d.ts +29 -0
  108. package/dist/react/hooks/data/index.js +26 -0
  109. package/dist/react/hooks/data/inventory/index.d.ts +29 -0
  110. package/dist/react/hooks/data/inventory/index.js +26 -0
  111. package/dist/react/hooks/data/market/index.d.ts +12 -0
  112. package/dist/react/hooks/data/market/index.js +26 -0
  113. package/dist/react/hooks/data/orders/index.d.ts +11 -0
  114. package/dist/react/hooks/data/orders/index.js +26 -0
  115. package/dist/react/hooks/data/primary-sales/index.d.ts +29 -0
  116. package/dist/react/hooks/data/primary-sales/index.js +26 -0
  117. package/dist/react/hooks/data/tokens/index.d.ts +5 -0
  118. package/dist/react/hooks/data/tokens/index.js +26 -0
  119. package/dist/react/hooks/index.d.ts +29 -18
  120. package/dist/react/hooks/index.js +22 -19
  121. package/dist/react/hooks/transactions/index.d.ts +3 -0
  122. package/dist/react/hooks/transactions/index.js +26 -0
  123. package/dist/react/hooks/ui/index.d.ts +5 -0
  124. package/dist/react/hooks/ui/index.js +26 -0
  125. package/dist/react/hooks/utils/index.d.ts +29 -0
  126. package/dist/react/hooks/utils/index.js +26 -0
  127. package/dist/react/index.d.ts +29 -18
  128. package/dist/react/index.js +22 -19
  129. package/dist/react/queries/index.d.ts +16 -8
  130. package/dist/react/queries/index.js +17 -15
  131. package/dist/react/ssr/index.d.ts +7 -9
  132. package/dist/react/ssr/index.js +8 -6
  133. package/dist/react/ssr/index.js.map +1 -1
  134. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +4 -8
  135. package/dist/react/ui/components/marketplace-collectible-card/index.js +21 -18
  136. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
  137. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +8 -6
  138. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  139. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  140. package/dist/react/ui/icons/index.js +11 -9
  141. package/dist/react/ui/index.d.ts +4 -8
  142. package/dist/react/ui/index.js +21 -18
  143. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +1 -25
  144. package/dist/react/ui/modals/_internal/components/actionModal/index.js +22 -19
  145. package/dist/react/utils/index.d.ts +19 -0
  146. package/dist/react/utils/index.js +9 -0
  147. package/dist/{react-BbHBl6gg.css → react-CbqXKOpt.css} +1 -1
  148. package/dist/{react-BbHBl6gg.css.map → react-CbqXKOpt.css.map} +1 -1
  149. package/dist/{react-DAIicQPT.js → react-Ceq8mamy.js} +11203 -7647
  150. package/dist/react-Ceq8mamy.js.map +1 -0
  151. package/dist/{sequence-Do3kzb4J.js → sequence-Dt2Xo7Fa.js} +1 -1
  152. package/dist/{sequence-Do3kzb4J.js.map → sequence-Dt2Xo7Fa.js.map} +1 -1
  153. package/dist/{index.css → styles/index.css} +679 -127
  154. package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-CGoARONs.js} +1 -1
  155. package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-CGoARONs.js.map} +1 -1
  156. package/dist/{super-rare-eCm1SE6O.js → super-rare-NeQtZjcn.js} +1 -1
  157. package/dist/{super-rare-eCm1SE6O.js.map → super-rare-NeQtZjcn.js.map} +1 -1
  158. package/dist/{token-Da4TdyUk.js → token-D9gZVqbX.js} +1 -1
  159. package/dist/{token-Da4TdyUk.js.map → token-D9gZVqbX.js.map} +1 -1
  160. package/dist/tokenSupplies-DXtkRYNO.d.ts +147 -0
  161. package/dist/{transaction-CcVViHEL.js → transaction-CC2KxNF6.js} +2 -17
  162. package/dist/transaction-CC2KxNF6.js.map +1 -0
  163. package/dist/types/index.d.ts +2 -3
  164. package/dist/types/index.js +2 -2
  165. package/dist/{CollectibleCard-C8Ae64Ab.d.ts → types-BlCa0TVE.d.ts} +9 -11
  166. package/dist/{types-DwWE6xOF.js → types-G2PWxiJR.js} +1 -1
  167. package/dist/{types-DwWE6xOF.js.map → types-G2PWxiJR.js.map} +1 -1
  168. package/dist/utils/abi/index.d.ts +5 -5
  169. package/dist/utils/abi/index.js +5 -5
  170. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  171. package/dist/utils/abi/marketplace/index.js +1 -1
  172. package/dist/utils/abi/primary-sale/index.d.ts +2 -2
  173. package/dist/utils/abi/primary-sale/index.js +2 -2
  174. package/dist/utils/abi/token/index.d.ts +1 -1
  175. package/dist/utils/abi/token/index.js +1 -1
  176. package/dist/utils/index.d.ts +7 -8
  177. package/dist/utils/index.js +11 -9
  178. package/dist/{utils-CW2NA5KG.js → utils-CKJd-CRf.js} +4 -11
  179. package/dist/utils-CKJd-CRf.js.map +1 -0
  180. package/dist/{utils-BPYfgDSL.js → utils-wquIhK6T.js} +5 -6
  181. package/dist/utils-wquIhK6T.js.map +1 -0
  182. package/dist/waitForTransactionReceipt-DZxAuR9N.js +27 -0
  183. package/dist/waitForTransactionReceipt-DZxAuR9N.js.map +1 -0
  184. package/dist/{x2y2-DD17tT91.js → x2y2-CQdg24VP.js} +1 -1
  185. package/dist/{x2y2-DD17tT91.js.map → x2y2-CQdg24VP.js.map} +1 -1
  186. package/dist/{zora-BpSG9UzS.js → zora-DdEydy4L.js} +1 -1
  187. package/dist/{zora-BpSG9UzS.js.map → zora-DdEydy4L.js.map} +1 -1
  188. package/eslint.config.mjs +4 -0
  189. package/package.json +55 -39
  190. package/postcss.config.mjs +73 -0
  191. package/public/mockServiceWorker.js +344 -0
  192. package/src/index.ts +1 -0
  193. package/src/react/_internal/api/__mocks__/builder.msw.ts +6 -0
  194. package/src/react/_internal/api/__mocks__/indexer.msw.ts +16 -0
  195. package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
  196. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +2 -0
  197. package/src/react/_internal/api/__mocks__/metadata.msw.ts +12 -1
  198. package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
  199. package/src/react/_internal/api/builder.gen.ts +11 -7
  200. package/src/react/_internal/api/laos-api.ts +3 -0
  201. package/src/react/_internal/api/marketplace.gen.ts +5 -3
  202. package/src/react/_internal/api/query-keys.ts +12 -4
  203. package/src/react/_internal/api/services.ts +2 -14
  204. package/src/react/_internal/databeat/index.ts +15 -14
  205. package/src/react/_internal/databeat/types.ts +23 -0
  206. package/src/react/_internal/databeat/utils.ts +26 -0
  207. package/src/react/_internal/query-meta.ts +3 -0
  208. package/src/react/_internal/utils.ts +6 -4
  209. package/src/react/_internal/wagmi/create-config.ts +29 -14
  210. package/src/react/_internal/wagmi/get-connectors.ts +1 -1
  211. package/src/react/hooks/{__tests__ → config}/__snapshots__/useMarketplaceConfig.test.tsx.snap +6 -0
  212. package/src/react/hooks/config/index.ts +3 -0
  213. package/src/react/hooks/{useConfig.tsx → config/useConfig.tsx} +2 -2
  214. package/src/react/hooks/config/useConnectorMetadata.tsx +16 -0
  215. package/src/react/hooks/{__tests__ → config}/useMarketplaceConfig.test.tsx +1 -1
  216. package/src/react/hooks/{useMarketplaceConfig.tsx → config/useMarketplaceConfig.tsx} +2 -2
  217. package/src/react/hooks/contracts/index.ts +1 -0
  218. package/src/react/hooks/contracts/useSalesContractABI.ts +174 -0
  219. package/src/react/hooks/data/collectibles/index.ts +6 -0
  220. package/src/react/hooks/data/collectibles/useBalanceOfCollectible.laos.test.tsx +367 -0
  221. package/src/react/hooks/{__tests__ → data/collectibles}/useBalanceOfCollectible.test.tsx +2 -2
  222. package/src/react/hooks/{useBalanceOfCollectible.tsx → data/collectibles/useBalanceOfCollectible.tsx} +4 -4
  223. package/src/react/hooks/{__tests__ → data/collectibles}/useCollectible.test.tsx +3 -3
  224. package/src/react/hooks/{useCollectible.tsx → data/collectibles/useCollectible.tsx} +3 -3
  225. package/src/react/hooks/{__tests__ → data/collectibles}/useCountOfCollectables.test.tsx +4 -4
  226. package/src/react/hooks/{useCountOfCollectables.tsx → data/collectibles/useCountOfCollectables.tsx} +3 -3
  227. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibleActivities.test.tsx +3 -3
  228. package/src/react/hooks/{useListCollectibleActivities.tsx → data/collectibles/useListCollectibleActivities.tsx} +3 -3
  229. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibles.test.tsx +5 -6
  230. package/src/react/hooks/{useListCollectibles.tsx → data/collectibles/useListCollectibles.tsx} +3 -3
  231. package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectiblesPaginated.test.tsx +4 -4
  232. package/src/react/hooks/{useListCollectiblesPaginated.tsx → data/collectibles/useListCollectiblesPaginated.tsx} +3 -3
  233. package/src/react/hooks/{__tests__ → data/collections}/__snapshots__/useListCollections.test.tsx.snap +10 -0
  234. package/src/react/hooks/data/collections/index.ts +6 -0
  235. package/src/react/hooks/{__tests__ → data/collections}/useCollection.test.tsx +2 -3
  236. package/src/react/hooks/{useCollection.tsx → data/collections/useCollection.tsx} +3 -3
  237. package/src/react/hooks/{__tests__ → data/collections}/useCollectionBalanceDetails.test.tsx +19 -2
  238. package/src/react/hooks/data/collections/useCollectionBalanceDetails.tsx +106 -0
  239. package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetails.test.tsx +2 -2
  240. package/src/react/hooks/{useCollectionDetails.ts → data/collections/useCollectionDetails.ts} +3 -3
  241. package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetailsPolling.test.tsx +14 -6
  242. package/src/react/hooks/{useCollectionDetailsPolling.tsx → data/collections/useCollectionDetailsPolling.tsx} +5 -9
  243. package/src/react/hooks/{__tests__ → data/collections}/useListCollectionActivities.test.tsx +5 -5
  244. package/src/react/hooks/{useListCollectionActivities.tsx → data/collections/useListCollectionActivities.tsx} +3 -3
  245. package/src/react/hooks/{__tests__ → data/collections}/useListCollections.test.tsx +5 -4
  246. package/src/react/hooks/data/collections/useListCollections.tsx +80 -0
  247. package/src/react/hooks/data/index.ts +6 -0
  248. package/src/react/hooks/data/inventory/index.ts +1 -0
  249. package/src/react/hooks/{__tests__ → data/inventory}/useInventory.test.tsx +4 -4
  250. package/src/react/hooks/{useInventory.tsx → data/inventory/useInventory.tsx} +7 -4
  251. package/src/react/hooks/data/market/index.ts +3 -0
  252. package/src/react/hooks/{__tests__ → data/market}/useCurrency.test.tsx +4 -4
  253. package/src/react/hooks/{useCurrency.tsx → data/market/useCurrency.tsx} +3 -3
  254. package/src/react/hooks/{__tests__ → data/market}/useListMarketCardData.test.tsx +10 -14
  255. package/src/react/hooks/{useListMarketCardData.tsx → data/market/useListMarketCardData.tsx} +8 -7
  256. package/src/react/hooks/{__tests__ → data/market}/useMarketCurrencies.test.tsx +5 -5
  257. package/src/react/hooks/{useMarketCurrencies.tsx → data/market/useMarketCurrencies.tsx} +3 -3
  258. package/src/react/hooks/data/orders/index.ts +7 -0
  259. package/src/react/hooks/{__tests__ → data/orders}/useCountListingsForCollectible.test.tsx +2 -2
  260. package/src/react/hooks/{useCountListingsForCollectible.tsx → data/orders/useCountListingsForCollectible.tsx} +3 -3
  261. package/src/react/hooks/{__tests__ → data/orders}/useCountOffersForCollectible.test.tsx +2 -2
  262. package/src/react/hooks/{useCountOffersForCollectible.tsx → data/orders/useCountOffersForCollectible.tsx} +3 -3
  263. package/src/react/hooks/{__tests__ → data/orders}/useFloorOrder.test.tsx +3 -3
  264. package/src/react/hooks/{useFloorOrder.tsx → data/orders/useFloorOrder.tsx} +3 -3
  265. package/src/react/hooks/{__tests__ → data/orders}/useHighestOffer.test.tsx +3 -3
  266. package/src/react/hooks/{useHighestOffer.tsx → data/orders/useHighestOffer.tsx} +3 -3
  267. package/src/react/hooks/{__tests__ → data/orders}/useListListingsForCollectible.test.tsx +6 -6
  268. package/src/react/hooks/{useListListingsForCollectible.tsx → data/orders/useListListingsForCollectible.tsx} +3 -3
  269. package/src/react/hooks/{__tests__ → data/orders}/useListOffersForCollectible.test.tsx +5 -5
  270. package/src/react/hooks/{useListOffersForCollectible.tsx → data/orders/useListOffersForCollectible.tsx} +4 -4
  271. package/src/react/hooks/{__tests__ → data/orders}/useLowestListing.test.tsx +5 -5
  272. package/src/react/hooks/{useLowestListing.tsx → data/orders/useLowestListing.tsx} +3 -3
  273. package/src/react/hooks/data/primary-sales/index.ts +6 -0
  274. package/src/react/hooks/{useCountOfPrimarySaleItems.tsx → data/primary-sales/useCountOfPrimarySaleItems.tsx} +2 -2
  275. package/src/react/hooks/data/primary-sales/useErc721SalesData.tsx +184 -0
  276. package/src/react/hooks/data/primary-sales/useGetCountOfPrimarySaleItems.tsx +48 -0
  277. package/src/react/hooks/{useList1155ShopCardData.tsx → data/primary-sales/useList1155ShopCardData.tsx} +17 -8
  278. package/src/react/hooks/data/primary-sales/useList721ShopCardData.tsx +183 -0
  279. package/src/react/hooks/data/primary-sales/useListPrimarySaleItems.tsx +66 -0
  280. package/src/react/hooks/data/tokens/index.ts +5 -0
  281. package/src/react/hooks/{__tests__ → data/tokens}/useCurrencyBalance.test.tsx +9 -5
  282. package/src/react/hooks/data/tokens/useCurrencyBalance.tsx +137 -0
  283. package/src/react/hooks/data/tokens/useGetTokenRanges.test.tsx +111 -0
  284. package/src/react/hooks/data/tokens/useGetTokenRanges.tsx +94 -0
  285. package/src/react/hooks/{__tests__ → data/tokens}/useListBalances.test.tsx +2 -2
  286. package/src/react/hooks/{useListBalances.tsx → data/tokens/useListBalances.tsx} +5 -5
  287. package/src/react/hooks/data/tokens/useListTokenMetadata.test.tsx +137 -0
  288. package/src/react/hooks/{useListTokenMetadata.tsx → data/tokens/useListTokenMetadata.tsx} +3 -3
  289. package/src/react/hooks/data/tokens/useSearchTokenMetadata.test.tsx +284 -0
  290. package/src/react/hooks/data/tokens/useSearchTokenMetadata.tsx +186 -0
  291. package/src/react/hooks/data/tokens/useTokenSupplies.ts +81 -0
  292. package/src/react/hooks/index.ts +18 -50
  293. package/src/react/hooks/transactions/index.ts +9 -0
  294. package/src/react/hooks/{__tests__ → transactions}/useCancelOrder.test.tsx +53 -85
  295. package/src/react/hooks/{useCancelOrder.tsx → transactions/useCancelOrder.tsx} +4 -4
  296. package/src/react/hooks/{__tests__/useCancelTransactionSteps.test.tsx → transactions/useCancelTransactionSteps.test.tsx.bak} +3 -52
  297. package/src/react/hooks/transactions/useCancelTransactionSteps.tsx +193 -0
  298. package/src/react/hooks/{__tests__ → transactions}/useGenerateCancelTransaction.test.tsx +2 -2
  299. package/src/react/hooks/{useGenerateCancelTransaction.tsx → transactions/useGenerateCancelTransaction.tsx} +5 -5
  300. package/src/react/hooks/{__tests__ → transactions}/useGenerateListingTransaction.test.tsx +2 -2
  301. package/src/react/hooks/{useGenerateListingTransaction.tsx → transactions/useGenerateListingTransaction.tsx} +5 -5
  302. package/src/react/hooks/{__tests__ → transactions}/useGenerateOfferTransaction.test.tsx +7 -45
  303. package/src/react/hooks/{useGenerateOfferTransaction.tsx → transactions/useGenerateOfferTransaction.tsx} +7 -7
  304. package/src/react/hooks/{__tests__ → transactions}/useGenerateSellTransaction.test.tsx +3 -7
  305. package/src/react/hooks/{useGenerateSellTransaction.tsx → transactions/useGenerateSellTransaction.tsx} +4 -4
  306. package/src/react/hooks/transactions/useOrderSteps.tsx +189 -0
  307. package/src/react/hooks/transactions/useProcessStep.test.tsx +272 -0
  308. package/src/react/hooks/transactions/useProcessStep.ts +95 -0
  309. package/src/react/hooks/transactions/useTransferTokens.test.tsx +469 -0
  310. package/src/react/hooks/{useTransferTokens.tsx → transactions/useTransferTokens.tsx} +5 -5
  311. package/src/react/hooks/ui/index.ts +3 -0
  312. package/src/react/hooks/{useFilterState.tsx → ui/useFilterState.tsx} +1 -1
  313. package/src/react/hooks/{__tests__ → ui}/useFilters.test.tsx +2 -3
  314. package/src/react/hooks/ui/useFilters.tsx +178 -0
  315. package/src/react/hooks/ui/useOpenConnectModal.tsx +9 -0
  316. package/src/react/hooks/util/optimisticCancelUpdates.ts +1 -0
  317. package/src/react/hooks/utils/index.ts +9 -0
  318. package/src/react/hooks/{__tests__ → utils}/useAutoSelectFeeOption.test.tsx +7 -3
  319. package/src/react/hooks/{useAutoSelectFeeOption.tsx → utils/useAutoSelectFeeOption.tsx} +2 -2
  320. package/src/react/hooks/utils/useCheckoutOptions.test.tsx +162 -0
  321. package/src/react/hooks/utils/useCheckoutOptions.tsx +98 -0
  322. package/src/react/hooks/{__tests__ → utils}/useCheckoutOptionsSalesContract.test.tsx +42 -61
  323. package/src/react/hooks/utils/useCheckoutOptionsSalesContract.tsx +108 -0
  324. package/src/react/hooks/{__tests__ → utils}/useComparePrices.test.tsx +1 -1
  325. package/src/react/hooks/utils/useComparePrices.tsx +102 -0
  326. package/src/react/hooks/{__tests__ → utils}/useConvertPriceToUSD.test.tsx +4 -4
  327. package/src/react/hooks/utils/useConvertPriceToUSD.tsx +96 -0
  328. package/src/react/hooks/utils/useEnsureCorrectChain.ts +74 -0
  329. package/src/react/hooks/{__tests__ → utils}/useRoyalty.test.tsx +1 -1
  330. package/src/react/hooks/{useRoyalty.tsx → utils/useRoyalty.tsx} +3 -3
  331. package/src/react/hooks/utils/useSwitchChainWithModal.ts +38 -0
  332. package/src/react/index.ts +1 -2
  333. package/src/react/providers/index.tsx +110 -0
  334. package/src/react/providers/modal-provider.tsx +43 -0
  335. package/src/react/{__tests__ → providers}/provider.test.tsx +5 -4
  336. package/src/react/providers/shadow-root.tsx +63 -0
  337. package/src/react/providers/theme-provider.tsx +29 -0
  338. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
  339. package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
  340. package/src/react/queries/balanceOfCollectible.ts +7 -4
  341. package/src/react/queries/checkoutOptions.ts +85 -0
  342. package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
  343. package/src/react/queries/collectionBalanceDetails.ts +92 -0
  344. package/src/react/queries/comparePrices.ts +108 -0
  345. package/src/react/queries/convertPriceToUSD.ts +92 -0
  346. package/src/react/{hooks/useFilters.tsx → queries/filters.ts} +51 -48
  347. package/src/react/queries/getTokenRanges.ts +62 -0
  348. package/src/react/queries/index.ts +22 -0
  349. package/src/react/queries/inventory.ts +6 -0
  350. package/src/react/queries/listBalances.ts +4 -3
  351. package/src/react/queries/listCollections.ts +7 -3
  352. package/src/react/queries/listTokenMetadata.ts +2 -2
  353. package/src/react/queries/marketplaceConfig.ts +11 -2
  354. package/src/react/queries/primarySaleItems.ts +80 -0
  355. package/src/react/queries/primarySaleItemsCount.ts +64 -0
  356. package/src/react/queries/searchTokenMetadata.ts +87 -0
  357. package/src/react/queries/tokenSupplies.ts +101 -0
  358. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +6 -0
  359. package/src/react/ssr/__tests__/create-ssr-client.test.ts +1 -1
  360. package/src/react/ui/components/_internals/action-button/ActionButton.stories.tsx +296 -0
  361. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
  362. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +56 -18
  363. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +4 -11
  364. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +5 -12
  365. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +32 -16
  366. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +7 -7
  367. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +4 -1
  368. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
  369. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +15 -11
  370. package/src/react/ui/components/_internals/action-button/store.ts +44 -34
  371. package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
  372. package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
  373. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +11 -4
  374. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
  375. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +4 -3
  376. package/src/react/ui/components/marketplace-collectible-card/types.ts +7 -5
  377. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
  378. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +1 -1
  379. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +11 -4
  380. package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
  381. package/src/react/ui/components/media/Media.stories.tsx +642 -0
  382. package/src/react/ui/components/media/Media.tsx +24 -19
  383. package/src/react/ui/components/media/types.ts +6 -0
  384. package/src/react/ui/index.ts +1 -1
  385. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +25 -25
  386. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +8 -2
  387. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +1 -1
  388. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +7 -1
  389. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +9 -1
  390. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +5 -5
  391. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +8 -8
  392. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +44 -19
  393. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +3 -0
  394. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +4 -4
  395. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +18 -30
  396. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +43 -27
  397. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +13 -2
  398. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +7 -7
  399. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +17 -3
  400. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +19 -8
  401. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +5 -9
  402. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +23 -15
  403. package/src/react/ui/modals/BuyModal/index.tsx +9 -1
  404. package/src/react/ui/modals/BuyModal/store.ts +28 -0
  405. package/src/react/ui/modals/CreateListingModal/Modal.tsx +39 -16
  406. package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +3 -24
  407. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +5 -9
  408. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +43 -83
  409. package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
  410. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +34 -17
  411. package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +88 -62
  412. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +9 -7
  413. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +2 -2
  414. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +47 -84
  415. package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
  416. package/src/react/ui/modals/SellModal/Modal.tsx +18 -17
  417. package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +8 -30
  418. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +7 -7
  419. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +39 -65
  420. package/src/react/ui/modals/SellModal/store.ts +3 -3
  421. package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
  422. package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
  423. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +412 -0
  424. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +51 -48
  425. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +54 -44
  426. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
  427. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +31 -35
  428. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +22 -13
  429. package/src/react/ui/modals/TransferModal/index.tsx +36 -53
  430. package/src/react/ui/modals/TransferModal/messages.ts +1 -1
  431. package/src/react/ui/modals/TransferModal/store.ts +122 -0
  432. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +116 -136
  433. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +15 -44
  434. package/src/react/ui/modals/_internal/components/actionModal/index.ts +0 -1
  435. package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
  436. package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
  437. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +14 -5
  438. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +24 -18
  439. package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
  440. package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +8 -8
  441. package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
  442. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +42 -27
  443. package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +164 -65
  444. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +174 -20
  445. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +341 -42
  446. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
  447. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
  448. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +30 -14
  449. package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
  450. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  451. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
  452. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +36 -10
  453. package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +25 -26
  454. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +35 -21
  455. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +91 -62
  456. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +62 -48
  457. package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +3 -5
  458. package/src/react/ui/modals/_internal/types.ts +8 -2
  459. package/src/react/utils/index.ts +1 -0
  460. package/src/react/utils/waitForTransactionReceipt.ts +49 -0
  461. package/src/{index.css → styles/index.css} +6 -5
  462. package/src/styles/styles.ts +3275 -0
  463. package/src/types/sdk-config.ts +8 -1
  464. package/src/utils/_internal/error/transaction.ts +0 -10
  465. package/src/utils/abi/primary-sale/index.ts +4 -2
  466. package/src/utils/abi/primary-sale/{sequence-1155-sales-contract.ts → sequence-1155-sales-contract-v0.ts} +67 -58
  467. package/src/utils/abi/primary-sale/sequence-1155-sales-contract-v1.ts +546 -0
  468. package/src/utils/abi/primary-sale/{sequence-721-sales-contract.ts → sequence-721-sales-contract-v0.ts} +1 -1
  469. package/src/utils/abi/primary-sale/sequence-721-sales-contract-v1.ts +394 -0
  470. package/src/utils/network.ts +15 -0
  471. package/test/const.ts +1 -1
  472. package/test/globalSetup.ts +39 -11
  473. package/test/handlers.ts +465 -0
  474. package/test/index.ts +1 -0
  475. package/test/server-setup.ts +23 -0
  476. package/test/setup.ts +1 -1
  477. package/test/test-utils.tsx +46 -36
  478. package/tsconfig.json +1 -1
  479. package/tsdown.config.ts +12 -7
  480. package/vitest.shims.d.ts +2 -0
  481. package/vitest.storybook.config.js +33 -0
  482. package/dist/CalendarIcon-DbQ7Vxcw.js.map +0 -1
  483. package/dist/api-DTIan01C.js.map +0 -1
  484. package/dist/builder-api-C_zj5mr3.d.ts +0 -12
  485. package/dist/index-BQsgAvtX.d.ts +0 -2938
  486. package/dist/index-BUVWziLP.d.ts +0 -60
  487. package/dist/index-CLy8y5hm.d.ts +0 -1057
  488. package/dist/index-COt10OgI.d.ts +0 -24
  489. package/dist/index-DPNWNa7t.d.ts +0 -414
  490. package/dist/index-DsfCs3-x.d.ts +0 -122
  491. package/dist/index-DvpBZgor.d.ts +0 -1
  492. package/dist/index-dUb6wb4Y.d.ts +0 -22
  493. package/dist/marketplace.gen-BSDIX7NZ.js.map +0 -1
  494. package/dist/marketplaceConfig-C6X1SUik.js.map +0 -1
  495. package/dist/primary-sale-C55ALnfQ.js +0 -1264
  496. package/dist/primary-sale-C55ALnfQ.js.map +0 -1
  497. package/dist/queries-CUU65uYZ.js +0 -599
  498. package/dist/queries-CUU65uYZ.js.map +0 -1
  499. package/dist/react/hooks/options/index.d.ts +0 -4
  500. package/dist/react/hooks/options/index.js +0 -11
  501. package/dist/react-DAIicQPT.js.map +0 -1
  502. package/dist/transaction-CcVViHEL.js.map +0 -1
  503. package/dist/utils-BPYfgDSL.js.map +0 -1
  504. package/dist/utils-CW2NA5KG.js.map +0 -1
  505. package/dist/wagmi-CDzEQbfk.js.map +0 -1
  506. package/src/react/_internal/wallet/__tests__/wallet.test.ts +0 -416
  507. package/src/react/_internal/wallet/useWallet.ts +0 -52
  508. package/src/react/_internal/wallet/wallet.ts +0 -313
  509. package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +0 -104
  510. package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +0 -111
  511. package/src/react/hooks/options/index.ts +0 -1
  512. package/src/react/hooks/useCancelTransactionSteps.tsx +0 -249
  513. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +0 -67
  514. package/src/react/hooks/useCollectionBalanceDetails.tsx +0 -79
  515. package/src/react/hooks/useComparePrices.tsx +0 -96
  516. package/src/react/hooks/useConvertPriceToUSD.tsx +0 -82
  517. package/src/react/hooks/useCurrencyBalance.tsx +0 -51
  518. package/src/react/hooks/useERC721SaleMintedTokens.tsx +0 -67
  519. package/src/react/hooks/useGetTokenRanges.tsx +0 -31
  520. package/src/react/hooks/useGetTokenSuppliesMap.tsx +0 -73
  521. package/src/react/hooks/useList1155SaleSupplies.tsx +0 -62
  522. package/src/react/hooks/useList721ShopCardData.tsx +0 -160
  523. package/src/react/hooks/useListCollections.tsx +0 -80
  524. package/src/react/hooks/useListPrimarySaleItems.ts +0 -102
  525. package/src/react/hooks/useListShopCardData.tsx +0 -70
  526. package/src/react/hooks/useShopCollectibleSaleData.tsx +0 -349
  527. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +0 -134
  528. package/src/react/provider.tsx +0 -43
  529. package/src/react/queries/getTokenSuppliesMap.ts +0 -77
  530. package/src/react/ui/modals/TransferModal/_store.ts +0 -66
  531. package/src/react/ui/modals/_internal/components/actionModal/store.ts +0 -57
  532. package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +0 -166
  533. package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
  534. package/src/react/ui/modals/modal-provider.tsx +0 -25
  535. package/test/mocks/wallet.ts +0 -63
  536. /package/dist/{abi-BKyRjVcZ.js → abi-Wr_aTZFi.js} +0 -0
  537. /package/dist/{index-C39K_8SG.d.ts → index-q7f-WDBS.d.ts} +0 -0
  538. /package/dist/{options-B4QN7Xou.js → wagmi-BhP3mdhP.js} +0 -0
  539. /package/src/react/hooks/{useGetReceiptFromHash.tsx → utils/useGetReceiptFromHash.tsx} +0 -0
@@ -0,0 +1,178 @@
1
+ 'use client';
2
+
3
+ import type { PropertyFilter } from '@0xsequence/metadata';
4
+ import { useQuery } from '@tanstack/react-query';
5
+ import type { Optional } from '../../_internal';
6
+ import {
7
+ type FetchFiltersParams,
8
+ type FiltersQueryOptions,
9
+ filtersQueryOptions,
10
+ } from '../../queries/filters';
11
+ import { useConfig } from '../config/useConfig';
12
+
13
+ export type UseFiltersParams = Optional<FiltersQueryOptions, 'config'>;
14
+
15
+ /**
16
+ * Hook to fetch metadata filters for a collection
17
+ *
18
+ * Retrieves property filters for a collection from the metadata service,
19
+ * with support for marketplace-specific filter configuration including
20
+ * exclusion rules and custom ordering.
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.collectionAddress - The collection contract address to fetch filters for
25
+ * @param params.showAllFilters - Whether to show all filters or apply marketplace filtering
26
+ * @param params.excludePropertyValues - Whether to exclude property values from the response
27
+ * @param params.query - Optional React Query configuration
28
+ *
29
+ * @returns Query result containing property filters for the collection
30
+ *
31
+ * @example
32
+ * Basic usage:
33
+ * ```typescript
34
+ * const { data: filters, isLoading } = useFilters({
35
+ * chainId: 137,
36
+ * collectionAddress: '0x1234...'
37
+ * })
38
+ *
39
+ * if (data) {
40
+ * console.log(`Found ${data.length} filters`);
41
+ * data.forEach(filter => {
42
+ * console.log(`${filter.name}: ${filter.values?.join(', ')}`);
43
+ * });
44
+ * }
45
+ * ```
46
+ *
47
+ * @example
48
+ * With marketplace filtering disabled:
49
+ * ```typescript
50
+ * const { data: allFilters } = useFilters({
51
+ * chainId: 1,
52
+ * collectionAddress: '0x5678...',
53
+ * showAllFilters: true, // Bypass marketplace filter rules
54
+ * query: {
55
+ * enabled: Boolean(selectedCollection),
56
+ * staleTime: 300000 // Cache for 5 minutes
57
+ * }
58
+ * })
59
+ * ```
60
+ *
61
+ * @example
62
+ * Exclude property values for faster loading:
63
+ * ```typescript
64
+ * const { data: filterNames } = useFilters({
65
+ * chainId: 137,
66
+ * collectionAddress: collectionAddress,
67
+ * excludePropertyValues: true, // Only get filter names, not values
68
+ * query: {
69
+ * enabled: Boolean(collectionAddress)
70
+ * }
71
+ * })
72
+ * ```
73
+ */
74
+ export function useFilters(params: UseFiltersParams) {
75
+ const defaultConfig = useConfig();
76
+
77
+ const { config = defaultConfig, ...rest } = params;
78
+
79
+ const queryOptions = filtersQueryOptions({
80
+ config,
81
+ ...rest,
82
+ });
83
+
84
+ return useQuery({
85
+ ...queryOptions,
86
+ });
87
+ }
88
+
89
+ /**
90
+ * Hook to progressively load collection filters
91
+ *
92
+ * First loads filter names only for fast initial display, then loads full filter
93
+ * data with values. Uses placeholder data to provide immediate feedback while
94
+ * full data loads in the background.
95
+ *
96
+ * @param params - Configuration parameters (same as useFilters)
97
+ *
98
+ * @returns Query result with additional loading states
99
+ * @returns result.isLoadingNames - Whether filter names are still loading
100
+ * @returns result.isFetchingValues - Whether filter values are being fetched
101
+ *
102
+ * @example
103
+ * Progressive filter loading:
104
+ * ```typescript
105
+ * const {
106
+ * data: filters,
107
+ * isLoadingNames,
108
+ * isFetchingValues,
109
+ * isLoading
110
+ * } = useFiltersProgressive({
111
+ * chainId: 137,
112
+ * collectionAddress: '0x1234...'
113
+ * })
114
+ *
115
+ * if (isLoadingNames) {
116
+ * return <div>Loading filters...</div>;
117
+ * }
118
+ *
119
+ * return (
120
+ * <div>
121
+ * {filters?.map(filter => (
122
+ * <FilterComponent
123
+ * key={filter.name}
124
+ * filter={filter}
125
+ * isLoadingValues={isFetchingValues}
126
+ * />
127
+ * ))}
128
+ * </div>
129
+ * );
130
+ * ```
131
+ */
132
+ export function useFiltersProgressive(params: UseFiltersParams) {
133
+ const defaultConfig = useConfig();
134
+
135
+ const { config = defaultConfig, ...rest } = params;
136
+
137
+ const namesQuery = useQuery(
138
+ filtersQueryOptions({
139
+ config,
140
+ ...rest,
141
+ excludePropertyValues: true,
142
+ }),
143
+ );
144
+
145
+ const fullQuery = useQuery({
146
+ ...filtersQueryOptions({
147
+ config,
148
+ ...rest,
149
+ }),
150
+ placeholderData: namesQuery.data,
151
+ });
152
+
153
+ const isLoadingNames = namesQuery.isLoading;
154
+ const isFetchingValues = fullQuery.isPlaceholderData && fullQuery.isFetching;
155
+
156
+ return {
157
+ ...fullQuery,
158
+ isFetchingValues,
159
+ isLoadingNames,
160
+ };
161
+ }
162
+
163
+ export { filtersQueryOptions };
164
+
165
+ export type { FetchFiltersParams, FiltersQueryOptions };
166
+
167
+ // Legacy exports for backward compatibility
168
+ export type UseFiltersArgs = {
169
+ chainId: number;
170
+ collectionAddress: string;
171
+ showAllFilters?: boolean;
172
+ excludePropertyValues?: boolean;
173
+ query?: {
174
+ enabled?: boolean;
175
+ };
176
+ };
177
+
178
+ export type UseFilterReturn = PropertyFilter[];
@@ -0,0 +1,9 @@
1
+ import { useConfig } from '../config/useConfig';
2
+
3
+ export const useOpenConnectModal = () => {
4
+ const context = useConfig();
5
+
6
+ return {
7
+ openConnectModal: context.openConnectModal,
8
+ };
9
+ };
@@ -43,6 +43,7 @@ export const updateQueriesOnCancel = ({
43
43
  queryClient.invalidateQueries({
44
44
  queryKey: collectableKeys.highestOffers,
45
45
  exact: false,
46
+ predicate: (query) => !query.meta?.persistent,
46
47
  });
47
48
  }, 2 * SECOND);
48
49
 
@@ -0,0 +1,9 @@
1
+ export * from './useAutoSelectFeeOption';
2
+ export * from './useCheckoutOptions';
3
+ export * from './useCheckoutOptionsSalesContract';
4
+ export * from './useComparePrices';
5
+ export * from './useConvertPriceToUSD';
6
+ export * from './useEnsureCorrectChain';
7
+ export * from './useGetReceiptFromHash';
8
+ export * from './useRoyalty';
9
+ export * from './useSwitchChainWithModal';
@@ -9,7 +9,7 @@ import {
9
9
  mockIndexerHandler,
10
10
  mockTokenBalance,
11
11
  } from '../../_internal/api/__mocks__/indexer.msw';
12
- import { useAutoSelectFeeOption } from '../useAutoSelectFeeOption';
12
+ import { useAutoSelectFeeOption } from './useAutoSelectFeeOption';
13
13
 
14
14
  describe('useAutoSelectFeeOption', () => {
15
15
  const mockChainId = 1;
@@ -238,10 +238,14 @@ describe('useAutoSelectFeeOption', () => {
238
238
  });
239
239
 
240
240
  it('should return UserNotConnected error when wallet is not connected', async () => {
241
- const { result: disconnect } = renderHook(() => useDisconnect());
241
+ const { result: disconnect } = renderHook(() => useDisconnect(), {
242
+ autoConnect: false,
243
+ });
242
244
  await disconnect.current.disconnectAsync();
243
245
 
244
- const { result } = renderHook(() => useAutoSelectFeeOption(defaultArgs));
246
+ const { result } = renderHook(() => useAutoSelectFeeOption(defaultArgs), {
247
+ autoConnect: false,
248
+ });
245
249
 
246
250
  // Wait for the hook to complete
247
251
  await waitFor(async () => {
@@ -4,8 +4,8 @@ import { useChain } from '@0xsequence/connect';
4
4
  import { useCallback, useEffect } from 'react';
5
5
  import { type Address, zeroAddress } from 'viem';
6
6
  import { useAccount } from 'wagmi';
7
- import type { FeeOption } from '../../types/waas-types';
8
- import { useCollectionBalanceDetails } from './useCollectionBalanceDetails';
7
+ import type { FeeOption } from '../../../types/waas-types';
8
+ import { useCollectionBalanceDetails } from '../data/collections/useCollectionBalanceDetails';
9
9
 
10
10
  enum AutoSelectFeeOptionError {
11
11
  UserNotConnected = 'User not connected',
@@ -0,0 +1,162 @@
1
+ import { renderHook, server, waitFor } from '@test';
2
+ import { HttpResponse, http } from 'msw';
3
+ import { zeroAddress } from 'viem';
4
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { useAccount } from 'wagmi';
6
+ import { MarketplaceKind } from '../../_internal';
7
+ import {
8
+ mockCheckoutOptions,
9
+ mockMarketplaceEndpoint,
10
+ } from '../../_internal/api/__mocks__/marketplace.msw';
11
+ import type { UseCheckoutOptionsParams } from './useCheckoutOptions';
12
+ import { useCheckoutOptions } from './useCheckoutOptions';
13
+
14
+ // Mock wagmi useAccount hook
15
+ vi.mock('wagmi', async () => {
16
+ const actual = await vi.importActual('wagmi');
17
+ return {
18
+ ...actual,
19
+ useAccount: vi.fn(),
20
+ };
21
+ });
22
+
23
+ const mockUseAccount = vi.mocked(useAccount);
24
+
25
+ describe('useCheckoutOptions', () => {
26
+ const defaultArgs: UseCheckoutOptionsParams = {
27
+ chainId: 1,
28
+ orders: [
29
+ {
30
+ collectionAddress: zeroAddress,
31
+ orderId: '123',
32
+ marketplace: MarketplaceKind.sequence_marketplace_v2,
33
+ },
34
+ ],
35
+ additionalFee: 0,
36
+ query: {},
37
+ };
38
+
39
+ beforeEach(() => {
40
+ mockUseAccount.mockReturnValue({
41
+ address: zeroAddress,
42
+ } as unknown as ReturnType<typeof useAccount>);
43
+ });
44
+
45
+ it('should fetch checkout options successfully', async () => {
46
+ const { result } = renderHook(() => useCheckoutOptions(defaultArgs));
47
+
48
+ // Initially loading
49
+ expect(result.current.isLoading).toBe(true);
50
+ expect(result.current.data).toBeUndefined();
51
+
52
+ // Wait for data to be loaded
53
+ await waitFor(() => {
54
+ expect(result.current.isLoading).toBe(false);
55
+ });
56
+
57
+ // Verify the data matches our mock
58
+ expect(result.current.data).toEqual(mockCheckoutOptions);
59
+ expect(result.current.error).toBeNull();
60
+ });
61
+
62
+ it('should handle error states', async () => {
63
+ // Override the handler for this test to return an error
64
+ server.use(
65
+ http.post(mockMarketplaceEndpoint('CheckoutOptionsMarketplace'), () => {
66
+ return HttpResponse.json(
67
+ { error: { message: 'Failed to fetch checkout options' } },
68
+ { status: 500 },
69
+ );
70
+ }),
71
+ );
72
+
73
+ const { result } = renderHook(() => useCheckoutOptions(defaultArgs));
74
+
75
+ await waitFor(() => {
76
+ expect(result.current.isError).toBe(true);
77
+ });
78
+
79
+ expect(result.current.error).toBeDefined();
80
+ expect(result.current.data).toBeUndefined();
81
+ });
82
+
83
+ it('should refetch when args change', async () => {
84
+ const { result, rerender } = renderHook(() =>
85
+ useCheckoutOptions(defaultArgs),
86
+ );
87
+
88
+ // Wait for initial data
89
+ await waitFor(() => {
90
+ expect(result.current.isLoading).toBe(false);
91
+ });
92
+
93
+ // Change args and rerender
94
+ const firstOrder = defaultArgs.orders?.[0];
95
+ if (!firstOrder) throw new Error('Expected defaultArgs.orders to exist');
96
+
97
+ const newArgs = {
98
+ ...defaultArgs,
99
+ orders: [
100
+ {
101
+ ...firstOrder,
102
+ orderId: '456',
103
+ },
104
+ ],
105
+ };
106
+
107
+ rerender(() => useCheckoutOptions(newArgs));
108
+
109
+ // Wait for new data
110
+ await waitFor(() => {
111
+ expect(result.current.data).toBeDefined();
112
+ });
113
+
114
+ // Verify that the query was refetched with new args
115
+ expect(result.current.data).toBeDefined();
116
+ expect(result.current.isSuccess).toBe(true);
117
+ });
118
+
119
+ it('should handle disabled query when wallet not connected', async () => {
120
+ // Mock wallet not connected
121
+ mockUseAccount.mockReturnValue({
122
+ address: undefined,
123
+ } as unknown as ReturnType<typeof useAccount>);
124
+
125
+ const { result } = renderHook(() => useCheckoutOptions(defaultArgs));
126
+
127
+ // Should not make request when wallet not connected
128
+ expect(result.current.isLoading).toBe(false);
129
+ expect(result.current.data).toBeUndefined();
130
+ expect(result.current.error).toBeNull();
131
+ });
132
+
133
+ it('should handle multiple orders', async () => {
134
+ const multiOrderArgs: UseCheckoutOptionsParams = {
135
+ chainId: 137,
136
+ orders: [
137
+ {
138
+ collectionAddress: zeroAddress,
139
+ orderId: '123',
140
+ marketplace: MarketplaceKind.sequence_marketplace_v2,
141
+ },
142
+ {
143
+ collectionAddress:
144
+ '0x1234567890123456789012345678901234567890' as `0x${string}`,
145
+ orderId: '456',
146
+ marketplace: MarketplaceKind.opensea,
147
+ },
148
+ ],
149
+ additionalFee: 100,
150
+ query: {},
151
+ };
152
+
153
+ const { result } = renderHook(() => useCheckoutOptions(multiOrderArgs));
154
+
155
+ await waitFor(() => {
156
+ expect(result.current.isLoading).toBe(false);
157
+ });
158
+
159
+ expect(result.current.data).toBeDefined();
160
+ expect(result.current.error).toBeNull();
161
+ });
162
+ });
@@ -0,0 +1,98 @@
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import type { Address } from 'viem';
5
+ import { useAccount } from 'wagmi';
6
+ import type { MarketplaceKind, Optional } from '../../_internal';
7
+ import {
8
+ type CheckoutOptionsQueryOptions,
9
+ checkoutOptionsQueryOptions,
10
+ type FetchCheckoutOptionsParams,
11
+ } from '../../queries/checkoutOptions';
12
+ import { useConfig } from '../config/useConfig';
13
+
14
+ export type UseCheckoutOptionsParams = Optional<
15
+ CheckoutOptionsQueryOptions,
16
+ 'config' | 'walletAddress'
17
+ >;
18
+
19
+ /**
20
+ * Hook to fetch checkout options for marketplace orders
21
+ *
22
+ * Retrieves checkout options including available payment methods, fees, and transaction details
23
+ * for a set of marketplace orders. Requires a connected wallet to calculate wallet-specific options.
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.orders - Array of orders to checkout containing collection address, order ID, and marketplace
28
+ * @param params.additionalFee - Additional fee to include in checkout (defaults to 0)
29
+ * @param params.query - Optional React Query configuration
30
+ *
31
+ * @returns Query result containing checkout options with payment methods and fees
32
+ *
33
+ * @example
34
+ * Basic usage:
35
+ * ```typescript
36
+ * const { data: checkoutOptions, isLoading } = useCheckoutOptions({
37
+ * chainId: 137,
38
+ * orders: [{
39
+ * collectionAddress: '0x1234...',
40
+ * orderId: '123',
41
+ * marketplace: MarketplaceKind.sequence_marketplace_v2
42
+ * }],
43
+ * additionalFee: 0
44
+ * })
45
+ * ```
46
+ *
47
+ * @example
48
+ * With custom query options:
49
+ * ```typescript
50
+ * const { data: checkoutOptions } = useCheckoutOptions({
51
+ * chainId: 1,
52
+ * orders: orders,
53
+ * query: {
54
+ * enabled: orders.length > 0,
55
+ * staleTime: 30000
56
+ * }
57
+ * })
58
+ * ```
59
+ */
60
+ export function useCheckoutOptions(params: UseCheckoutOptionsParams) {
61
+ const { address } = useAccount();
62
+ const defaultConfig = useConfig();
63
+
64
+ const { config = defaultConfig, ...rest } = params;
65
+
66
+ const queryOptions = checkoutOptionsQueryOptions({
67
+ config,
68
+ walletAddress: address as Address,
69
+ ...rest,
70
+ });
71
+
72
+ return useQuery({
73
+ ...queryOptions,
74
+ });
75
+ }
76
+
77
+ export { checkoutOptionsQueryOptions };
78
+
79
+ export type { FetchCheckoutOptionsParams, CheckoutOptionsQueryOptions };
80
+
81
+ // Legacy export for backward compatibility
82
+ export type UseCheckoutOptionsArgs = {
83
+ chainId: number;
84
+ orders: Array<{
85
+ collectionAddress: string;
86
+ orderId: string;
87
+ marketplace: MarketplaceKind;
88
+ }>;
89
+ query?: {
90
+ enabled?: boolean;
91
+ };
92
+ };
93
+
94
+ export type UseCheckoutOptionsReturn = Awaited<
95
+ ReturnType<
96
+ typeof import('../../queries/checkoutOptions').fetchCheckoutOptions
97
+ >
98
+ >;
@@ -1,18 +1,27 @@
1
1
  import { skipToken } from '@tanstack/react-query';
2
- import { renderHook, waitFor } from '@test';
2
+ import { renderHook, server, waitFor } from '@test';
3
+ import { HttpResponse, http } from 'msw';
3
4
  import type { Address } from 'viem';
5
+ import { zeroAddress } from 'viem';
4
6
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
- import { useCheckoutOptionsSalesContract } from '../useCheckoutOptionsSalesContract';
6
-
7
- // Mock wagmi's useAccount hook
7
+ import { useAccount } from 'wagmi';
8
+ import {
9
+ mockCheckoutOptions,
10
+ mockMarketplaceEndpoint,
11
+ } from '../../_internal/api/__mocks__/marketplace.msw';
12
+ import { useCheckoutOptionsSalesContract } from './useCheckoutOptionsSalesContract';
13
+
14
+ // Mock wagmi useAccount hook
8
15
  vi.mock('wagmi', async () => {
9
16
  const actual = await vi.importActual('wagmi');
10
17
  return {
11
18
  ...actual,
12
- useAccount: vi.fn(() => ({ address: '0xTestWallet' as Address })),
19
+ useAccount: vi.fn(),
13
20
  };
14
21
  });
15
22
 
23
+ const mockUseAccount = vi.mocked(useAccount);
24
+
16
25
  const mockContractAddress =
17
26
  '0x1234567890123456789012345678901234567890' as Address;
18
27
  const mockCollectionAddress =
@@ -21,6 +30,9 @@ const mockCollectionAddress =
21
30
  describe('useCheckoutOptionsSalesContract', () => {
22
31
  beforeEach(() => {
23
32
  vi.clearAllMocks();
33
+ mockUseAccount.mockReturnValue({
34
+ address: zeroAddress,
35
+ } as unknown as ReturnType<typeof useAccount>);
24
36
  });
25
37
 
26
38
  afterEach(() => {
@@ -51,15 +63,8 @@ describe('useCheckoutOptionsSalesContract', () => {
51
63
  expect(result.current.isSuccess).toBe(true);
52
64
  });
53
65
 
54
- // Check the response
55
- expect(result.current.data).toEqual({
56
- options: {
57
- crypto: 'all',
58
- swap: [],
59
- nftCheckout: [],
60
- onRamp: [],
61
- },
62
- });
66
+ // Check the response matches our mock
67
+ expect(result.current.data).toEqual(mockCheckoutOptions);
63
68
  });
64
69
 
65
70
  it('should handle skipToken', () => {
@@ -96,8 +101,7 @@ describe('useCheckoutOptionsSalesContract', () => {
96
101
  expect(result.current.isSuccess).toBe(true);
97
102
  });
98
103
 
99
- expect(result.current.data).toBeDefined();
100
- expect(result.current.data?.options).toBeDefined();
104
+ expect(result.current.data).toEqual(mockCheckoutOptions);
101
105
  });
102
106
 
103
107
  it('should refetch when args change', async () => {
@@ -135,23 +139,16 @@ describe('useCheckoutOptionsSalesContract', () => {
135
139
  expect(result.current.data).toEqual(firstData);
136
140
  });
137
141
 
138
- it('should use wallet address from useAccount', async () => {
139
- const { useAccount } = await import('wagmi');
140
- const mockUseAccount = vi.mocked(useAccount);
141
-
142
- // Set a specific address
143
- mockUseAccount.mockReturnValue({
144
- address: '0xSpecificWallet' as Address,
145
- isConnected: true,
146
- isConnecting: false,
147
- isDisconnected: false,
148
- isReconnecting: false,
149
- connector: null,
150
- addresses: undefined,
151
- chain: undefined,
152
- chainId: undefined,
153
- status: 'connected',
154
- } as unknown as ReturnType<typeof useAccount>);
142
+ it('should handle error states', async () => {
143
+ // Override the handler for this test to return an error
144
+ server.use(
145
+ http.post(mockMarketplaceEndpoint('CheckoutOptionsSalesContract'), () => {
146
+ return HttpResponse.json(
147
+ { error: { message: 'Failed to fetch checkout options' } },
148
+ { status: 500 },
149
+ );
150
+ }),
151
+ );
155
152
 
156
153
  const { result } = renderHook(() =>
157
154
  useCheckoutOptionsSalesContract({
@@ -163,28 +160,17 @@ describe('useCheckoutOptionsSalesContract', () => {
163
160
  );
164
161
 
165
162
  await waitFor(() => {
166
- expect(result.current.isSuccess).toBe(true);
163
+ expect(result.current.isError).toBe(true);
167
164
  });
168
165
 
169
- expect(result.current.data).toBeDefined();
166
+ expect(result.current.error).toBeDefined();
167
+ expect(result.current.data).toBeUndefined();
170
168
  });
171
169
 
172
170
  it('should handle when wallet is not connected', async () => {
173
- const { useAccount } = await import('wagmi');
174
- const mockUseAccount = vi.mocked(useAccount);
175
-
176
- // No wallet connected
171
+ // Mock wallet not connected for this test
177
172
  mockUseAccount.mockReturnValue({
178
173
  address: undefined,
179
- isConnected: false,
180
- isConnecting: false,
181
- isDisconnected: true,
182
- isReconnecting: false,
183
- connector: null,
184
- addresses: undefined,
185
- chain: undefined,
186
- chainId: undefined,
187
- status: 'disconnected',
188
174
  } as unknown as ReturnType<typeof useAccount>);
189
175
 
190
176
  const { result } = renderHook(() =>
@@ -196,14 +182,10 @@ describe('useCheckoutOptionsSalesContract', () => {
196
182
  }),
197
183
  );
198
184
 
199
- // The hook will still try to fetch even without a wallet (using undefined)
200
- // Wait for it to complete
201
- await waitFor(() => {
202
- expect(result.current.isSuccess).toBe(true);
203
- });
204
-
205
- // The API should still return data even without wallet
206
- expect(result.current.data).toBeDefined();
185
+ // Should not make request when wallet not connected
186
+ expect(result.current.isLoading).toBe(false);
187
+ expect(result.current.data).toBeUndefined();
188
+ expect(result.current.error).toBeNull();
207
189
  });
208
190
 
209
191
  it('should handle empty items array', async () => {
@@ -216,10 +198,9 @@ describe('useCheckoutOptionsSalesContract', () => {
216
198
  }),
217
199
  );
218
200
 
219
- await waitFor(() => {
220
- expect(result.current.isSuccess).toBe(true);
221
- });
222
-
223
- expect(result.current.data).toBeDefined();
201
+ // Should not make request when items array is empty
202
+ expect(result.current.isLoading).toBe(false);
203
+ expect(result.current.data).toBeUndefined();
204
+ expect(result.current.error).toBeNull();
224
205
  });
225
206
  });