@0xsequence/marketplace-sdk 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/.storybook/main.ts +1 -1
  2. package/.storybook/preview.tsx +0 -1
  3. package/CHANGELOG.md +62 -13
  4. package/dist/BellIcon-IpHHEy8h.js +45 -0
  5. package/dist/BellIcon-IpHHEy8h.js.map +1 -0
  6. package/dist/{BellIcon-Cb9YEUzJ.js → CartIcon-C8zbor8H.js} +10 -49
  7. package/dist/CartIcon-C8zbor8H.js.map +1 -0
  8. package/dist/CollectibleCard-C2EWF0zo.d.ts +8 -0
  9. package/dist/{_internal-DslqcNC1.js → _internal-DkS2VUn5.js} +1 -1
  10. package/dist/{_internal-DslqcNC1.js.map → _internal-DkS2VUn5.js.map} +1 -1
  11. package/dist/{alien_swap-DJ98gZQp.js → alien_swap-BTJ7mSR-.js} +1 -1
  12. package/dist/{alien_swap-DJ98gZQp.js.map → alien_swap-BTJ7mSR-.js.map} +1 -1
  13. package/dist/{api-BmEQfSQa.js → api-DuLKn__v.js} +5 -3
  14. package/dist/api-DuLKn__v.js.map +1 -0
  15. package/dist/{aqua-xyz-n1PcCCZ0.js → aqua-xyz-BYJ9WSP_.js} +1 -1
  16. package/dist/{aqua-xyz-n1PcCCZ0.js.map → aqua-xyz-BYJ9WSP_.js.map} +1 -1
  17. package/dist/{aura-Bevk_YkS.js → aura-D7SUjgro.js} +1 -1
  18. package/dist/{aura-Bevk_YkS.js.map → aura-D7SUjgro.js.map} +1 -1
  19. package/dist/{blur-B5sHErx5.js → blur-BcnRFCaV.js} +1 -1
  20. package/dist/{blur-B5sHErx5.js.map → blur-BcnRFCaV.js.map} +1 -1
  21. package/dist/builder-api-BFuZNOaN.js.map +1 -1
  22. package/dist/builder.gen-B9wR2nvF.js.map +1 -1
  23. package/dist/{coinbase-D30W-lxA.js → coinbase-ChoX9Hw2.js} +1 -1
  24. package/dist/{coinbase-D30W-lxA.js.map → coinbase-ChoX9Hw2.js.map} +1 -1
  25. package/dist/components-CUv-wQr8.js +119 -0
  26. package/dist/components-CUv-wQr8.js.map +1 -0
  27. package/dist/{contracts-DPHFT2TA.js → contracts-D72LBOX3.js} +4 -5
  28. package/dist/{contracts-DPHFT2TA.js.map → contracts-D72LBOX3.js.map} +1 -1
  29. package/dist/{create-config-6uynwTeb.js → create-config-CIfejoCk.js} +6 -11
  30. package/dist/create-config-CIfejoCk.js.map +1 -0
  31. package/dist/{create-config-lLSrnkbb.d.ts → create-config-DV_dtaLt.d.ts} +24 -31
  32. package/dist/{element-C2NJexro.js → element-Dbcv5qya.js} +1 -1
  33. package/dist/{element-C2NJexro.js.map → element-Dbcv5qya.js.map} +1 -1
  34. package/dist/{filters-B8XS4tFH.d.ts → filters-zkMJaPey.d.ts} +6 -6
  35. package/dist/{foundation-QgY1lvUj.js → foundation-QPhUEUy8.js} +1 -1
  36. package/dist/{foundation-QgY1lvUj.js.map → foundation-QPhUEUy8.js.map} +1 -1
  37. package/dist/{index-ChSKFOMx.d.ts → index-B6aSbaw2.d.ts} +1 -1
  38. package/dist/{index-PSPpUxCE.d.ts → index-B8vaT3_s.d.ts} +4 -4
  39. package/dist/{index-DonXiSg2.d.ts → index-BaytncQc.d.ts} +100 -56
  40. package/dist/{index-CY5UEX4h.d.ts → index-BoNNplSx.d.ts} +2 -2
  41. package/dist/{index-QxxS6f9r.d.ts → index-Bv5XVLjH.d.ts} +1 -1
  42. package/dist/{index-CIkpYltz.d.ts → index-C768pAfu.d.ts} +3 -3
  43. package/dist/{index-DX0Vm8HY.d.ts → index-CM0ZTePs.d.ts} +1 -1
  44. package/dist/index-CMPUveNz.d.ts +64 -0
  45. package/dist/{index-ThUIs-Sy.d.ts → index-CQecU53t.d.ts} +28 -23
  46. package/dist/{index-CtF7EE2z.d.ts → index-CT8ZorFd.d.ts} +1 -1
  47. package/dist/{index-Dpyp7fQz.d.ts → index-CXscCUg7.d.ts} +12 -12
  48. package/dist/{index-ByW08-Z7.d.ts → index-D-UXGo5d.d.ts} +2 -2
  49. package/dist/{index-D71J5Ghd.d.ts → index-D6YMj82n.d.ts} +79 -79
  50. package/dist/{index-CQnGIGb5.d.ts → index-DJG0kiII.d.ts} +33 -33
  51. package/dist/{index-D2HohSwO.d.ts → index-DLUjc7Bx.d.ts} +52 -29
  52. package/dist/{index-C7xKVIr4.d.ts → index-DMBMM16q.d.ts} +37 -37
  53. package/dist/{index-DNU9xoGK.d.ts → index-DpeWm_vF.d.ts} +5 -5
  54. package/dist/{index-BuY_NKSX.d.ts → index-Yobo6icm.d.ts} +40 -28
  55. package/dist/{index-BGJXqdg6.d.ts → index-jGgfEHfQ.d.ts} +8 -8
  56. package/dist/index.d.ts +8 -8
  57. package/dist/index.js +12 -11
  58. package/dist/{listCollectiblesPaginated--AgXjajA.d.ts → listCollectiblesPaginated-Bq0QSOjJ.d.ts} +28 -26
  59. package/dist/{listCollections-Bbzbz7qW.d.ts → listCollections-dTCq00l5.d.ts} +168 -123
  60. package/dist/{looks-rare-CMVPny4v.js → looks-rare-C7cQztTR.js} +1 -1
  61. package/dist/{looks-rare-CMVPny4v.js.map → looks-rare-C7cQztTR.js.map} +1 -1
  62. package/dist/{lowestListing-BQHfQpfg.d.ts → lowestListing-CB5Te-Q9.d.ts} +41 -17
  63. package/dist/{magic-eden-IrWp2ZXk.js → magic-eden-D3r7jiBG.js} +1 -1
  64. package/dist/{magic-eden-IrWp2ZXk.js.map → magic-eden-D3r7jiBG.js.map} +1 -1
  65. package/dist/{manifold-DeOE-p2G.js → manifold-DsX0CBP-.js} +1 -1
  66. package/dist/{manifold-DeOE-p2G.js.map → manifold-DsX0CBP-.js.map} +1 -1
  67. package/dist/{marketCurrencies-CmOMCCOr.d.ts → marketCurrencies-Bzj8X4TL.d.ts} +8 -8
  68. package/dist/{marketplace-B5Z8G03R.js → marketplace-BYY8OloA.js} +1 -1
  69. package/dist/{marketplace-B5Z8G03R.js.map → marketplace-BYY8OloA.js.map} +1 -1
  70. package/dist/{marketplace-logos-D8t86gsW.js → marketplace-logos-Csv2MBwf.js} +21 -21
  71. package/dist/marketplace-logos-Csv2MBwf.js.map +1 -0
  72. package/dist/{marketplace.gen-JzNYpM0U.js → marketplace.gen-w2YvbEEo.js} +2 -2
  73. package/dist/marketplace.gen-w2YvbEEo.js.map +1 -0
  74. package/dist/{marketplaceConfig-sNh-MA5M.js → marketplaceConfig-BTy75Mbf.js} +8 -9
  75. package/dist/marketplaceConfig-BTy75Mbf.js.map +1 -0
  76. package/dist/{mintify-DG3GrljJ.js → mintify-DiOoDmO1.js} +1 -1
  77. package/dist/{mintify-DG3GrljJ.js.map → mintify-DiOoDmO1.js.map} +1 -1
  78. package/dist/{network-DnBEe1Ur.js → network-DtmiMhcg.js} +2 -2
  79. package/dist/network-DtmiMhcg.js.map +1 -0
  80. package/dist/networkconfigToWagmiChain-DbUf6HiO.js +15 -0
  81. package/dist/networkconfigToWagmiChain-DbUf6HiO.js.map +1 -0
  82. package/dist/{nftx-B3LH-ZYM.js → nftx-CP82jNra.js} +1 -1
  83. package/dist/{nftx-B3LH-ZYM.js.map → nftx-CP82jNra.js.map} +1 -1
  84. package/dist/{okx-CRFLrT3Z.js → okx-p9-4xRjs.js} +1 -1
  85. package/dist/{okx-CRFLrT3Z.js.map → okx-p9-4xRjs.js.map} +1 -1
  86. package/dist/{open-sea-cOpfl366.js → open-sea-D2GwAmKS.js} +1 -1
  87. package/dist/{open-sea-cOpfl366.js.map → open-sea-D2GwAmKS.js.map} +1 -1
  88. package/dist/{primary-sale-CLjXRrDj.js → primary-sale-DOmNDq2P.js} +1 -1
  89. package/dist/{primary-sale-CLjXRrDj.js.map → primary-sale-DOmNDq2P.js.map} +1 -1
  90. package/dist/{queries-BYT4GJw3.js → queries-EMA5CcwY.js} +208 -287
  91. package/dist/queries-EMA5CcwY.js.map +1 -0
  92. package/dist/{query-BTe7Wkrs.d.ts → query-BG-MA1MB.d.ts} +1 -1
  93. package/dist/{rarible-guwUx4cn.js → rarible-DqiiW9ki.js} +1 -1
  94. package/dist/{rarible-guwUx4cn.js.map → rarible-DqiiW9ki.js.map} +1 -1
  95. package/dist/react/_internal/api/index.d.ts +1 -1
  96. package/dist/react/_internal/api/index.js +4 -4
  97. package/dist/react/_internal/databeat/index.d.ts +1 -1
  98. package/dist/react/_internal/databeat/index.js +24 -21
  99. package/dist/react/_internal/index.d.ts +1 -1
  100. package/dist/react/_internal/index.js +8 -7
  101. package/dist/react/_internal/wagmi/index.d.ts +1 -1
  102. package/dist/react/_internal/wagmi/index.js +4 -3
  103. package/dist/react/hooks/config/index.d.ts +8 -8
  104. package/dist/react/hooks/config/index.js +24 -21
  105. package/dist/react/hooks/contracts/index.d.ts +6 -6
  106. package/dist/react/hooks/contracts/index.js +13 -12
  107. package/dist/react/hooks/data/collectibles/index.d.ts +4 -4
  108. package/dist/react/hooks/data/collectibles/index.js +24 -21
  109. package/dist/react/hooks/data/collections/index.d.ts +10 -10
  110. package/dist/react/hooks/data/collections/index.js +24 -21
  111. package/dist/react/hooks/data/index.d.ts +29 -29
  112. package/dist/react/hooks/data/index.js +25 -22
  113. package/dist/react/hooks/data/inventory/index.d.ts +28 -28
  114. package/dist/react/hooks/data/inventory/index.js +24 -21
  115. package/dist/react/hooks/data/market/index.d.ts +5 -11
  116. package/dist/react/hooks/data/market/index.js +24 -21
  117. package/dist/react/hooks/data/orders/index.d.ts +5 -11
  118. package/dist/react/hooks/data/orders/index.js +25 -22
  119. package/dist/react/hooks/data/primary-sales/index.d.ts +28 -28
  120. package/dist/react/hooks/data/primary-sales/index.js +24 -21
  121. package/dist/react/hooks/data/tokens/index.d.ts +4 -4
  122. package/dist/react/hooks/data/tokens/index.js +24 -21
  123. package/dist/react/hooks/index.d.ts +29 -29
  124. package/dist/react/hooks/index.js +25 -22
  125. package/dist/react/hooks/transactions/index.d.ts +2 -2
  126. package/dist/react/hooks/transactions/index.js +24 -21
  127. package/dist/react/hooks/ui/index.d.ts +4 -4
  128. package/dist/react/hooks/ui/index.js +24 -21
  129. package/dist/react/hooks/utils/index.d.ts +29 -29
  130. package/dist/react/hooks/utils/index.js +25 -22
  131. package/dist/react/index.d.ts +29 -29
  132. package/dist/react/index.js +25 -22
  133. package/dist/react/queries/index.d.ts +16 -16
  134. package/dist/react/queries/index.js +18 -17
  135. package/dist/react/ssr/index.d.ts +7 -7
  136. package/dist/react/ssr/index.js +9 -8
  137. package/dist/react/ssr/index.js.map +1 -1
  138. package/dist/react/ui/components/marketplace-collectible-card/components/footer/components/index.d.ts +3 -0
  139. package/dist/react/ui/components/marketplace-collectible-card/components/footer/components/index.js +22 -0
  140. package/dist/react/ui/components/marketplace-collectible-card/components/footer/index.d.ts +54 -0
  141. package/dist/react/ui/components/marketplace-collectible-card/components/footer/index.js +29 -0
  142. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +5 -5
  143. package/dist/react/ui/components/marketplace-collectible-card/index.js +24 -21
  144. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -2
  145. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +9 -8
  146. package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
  147. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  148. package/dist/react/ui/icons/index.js +13 -11
  149. package/dist/react/ui/index.d.ts +5 -5
  150. package/dist/react/ui/index.js +24 -21
  151. package/dist/react/ui/modals/_internal/components/actionModal/index.js +24 -21
  152. package/dist/react/utils/index.d.ts +1 -1
  153. package/dist/react/utils/index.js +5 -5
  154. package/dist/{react-Ceq8mamy.js → react-BLJ4DkPx.js} +723 -807
  155. package/dist/react-BLJ4DkPx.js.map +1 -0
  156. package/dist/{react-CbqXKOpt.css → react-F03jPjPk.css} +1 -1
  157. package/dist/{react-CbqXKOpt.css.map → react-F03jPjPk.css.map} +1 -1
  158. package/dist/{sequence-Dt2Xo7Fa.js → sequence-Bbb-TFKg.js} +1 -1
  159. package/dist/{sequence-Dt2Xo7Fa.js.map → sequence-Bbb-TFKg.js.map} +1 -1
  160. package/dist/styles/index.css +46 -24
  161. package/dist/{sudo-swap-CGoARONs.js → sudo-swap-CEPIM3Js.js} +1 -1
  162. package/dist/{sudo-swap-CGoARONs.js.map → sudo-swap-CEPIM3Js.js.map} +1 -1
  163. package/dist/{super-rare-NeQtZjcn.js → super-rare-CMEn9PoO.js} +1 -1
  164. package/dist/{super-rare-NeQtZjcn.js.map → super-rare-CMEn9PoO.js.map} +1 -1
  165. package/dist/{token-D9gZVqbX.js → token-CcyLz8Z8.js} +1 -1
  166. package/dist/{token-D9gZVqbX.js.map → token-CcyLz8Z8.js.map} +1 -1
  167. package/dist/{tokenSupplies-DXtkRYNO.d.ts → tokenSupplies-C470zTT0.d.ts} +23 -23
  168. package/dist/{transaction-CC2KxNF6.js → transaction-DZUW5RHu.js} +2 -8
  169. package/dist/transaction-DZUW5RHu.js.map +1 -0
  170. package/dist/types/index.d.ts +2 -2
  171. package/dist/types/index.js +2 -2
  172. package/dist/{types-G2PWxiJR.js → types-B_-cnkcP.js} +1 -1
  173. package/dist/types-B_-cnkcP.js.map +1 -0
  174. package/dist/{types-BlCa0TVE.d.ts → types-D6LkVrF0.d.ts} +18 -10
  175. package/dist/utils/abi/index.d.ts +4 -4
  176. package/dist/utils/abi/index.js +4 -4
  177. package/dist/utils/abi/marketplace/index.d.ts +1 -1
  178. package/dist/utils/abi/marketplace/index.js +1 -1
  179. package/dist/utils/abi/primary-sale/index.d.ts +1 -1
  180. package/dist/utils/abi/primary-sale/index.js +1 -1
  181. package/dist/utils/abi/token/index.d.ts +1 -1
  182. package/dist/utils/abi/token/index.js +1 -1
  183. package/dist/utils/index.d.ts +6 -6
  184. package/dist/utils/index.js +11 -10
  185. package/dist/{utils-CKJd-CRf.js → utils-BZEkdqWK.js} +7 -24
  186. package/dist/utils-BZEkdqWK.js.map +1 -0
  187. package/dist/{utils-wquIhK6T.js → utils-oVZxdK0o.js} +2 -2
  188. package/dist/utils-oVZxdK0o.js.map +1 -0
  189. package/dist/{waitForTransactionReceipt-DZxAuR9N.js → waitForTransactionReceipt-B08YZiDY.js} +3 -4
  190. package/dist/{waitForTransactionReceipt-DZxAuR9N.js.map → waitForTransactionReceipt-B08YZiDY.js.map} +1 -1
  191. package/dist/{x2y2-CQdg24VP.js → x2y2-DNe6JgtG.js} +1 -1
  192. package/dist/{x2y2-CQdg24VP.js.map → x2y2-DNe6JgtG.js.map} +1 -1
  193. package/dist/{zora-DdEydy4L.js → zora-w0Zqxxs4.js} +1 -1
  194. package/dist/{zora-DdEydy4L.js.map → zora-w0Zqxxs4.js.map} +1 -1
  195. package/package.json +35 -35
  196. package/src/react/_internal/api/marketplace.gen.ts +1 -1
  197. package/src/react/_internal/api/query-keys.ts +2 -0
  198. package/src/react/_internal/wagmi/__tests__/create-config.test.ts +19 -8
  199. package/src/react/_internal/wagmi/create-config.ts +6 -17
  200. package/src/react/hooks/config/__snapshots__/useMarketplaceConfig.test.tsx.snap +4 -4
  201. package/src/react/hooks/data/collectibles/useBalanceOfCollectible.laos.test.tsx +2 -2
  202. package/src/react/hooks/data/collectibles/useTokenBalances.test.tsx +151 -0
  203. package/src/react/hooks/data/collectibles/useTokenBalances.tsx +47 -0
  204. package/src/react/hooks/data/collections/__snapshots__/useListCollections.test.tsx.snap +6 -6
  205. package/src/react/hooks/data/inventory/useInventory.test.tsx +3 -98
  206. package/src/react/hooks/data/inventory/useInventory.tsx +2 -2
  207. package/src/react/hooks/data/market/useListMarketCardData.tsx +1 -1
  208. package/src/react/hooks/data/orders/useListOffersForCollectible.tsx +70 -45
  209. package/src/react/hooks/data/primary-sales/useList1155ShopCardData.tsx +21 -37
  210. package/src/react/hooks/data/primary-sales/useList721ShopCardData.tsx +14 -3
  211. package/src/react/hooks/data/tokens/useSearchTokenMetadata.tsx +4 -1
  212. package/src/react/hooks/transactions/useCancelOrder.test.tsx +7 -4
  213. package/src/react/hooks/transactions/useCancelOrder.tsx +2 -1
  214. package/src/react/hooks/transactions/useCancelTransactionSteps.tsx +2 -2
  215. package/src/react/hooks/transactions/useProcessStep.test.tsx +2 -2
  216. package/src/react/hooks/utils/__tests__/useEnsureCorrectChain.test.tsx +75 -0
  217. package/src/react/hooks/utils/index.ts +0 -1
  218. package/src/react/hooks/utils/useEnsureCorrectChain.ts +31 -34
  219. package/src/react/providers/index.tsx +12 -14
  220. package/src/react/providers/modal-provider.tsx +2 -2
  221. package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +3 -3
  222. package/src/react/queries/__tests__/inventory.laos.test.ts +6 -3
  223. package/src/react/queries/__tests__/tokenBalances.laos.test.ts +123 -0
  224. package/src/react/queries/balanceOfCollectible.ts +2 -1
  225. package/src/react/queries/filters.ts +23 -28
  226. package/src/react/queries/index.ts +1 -0
  227. package/src/react/queries/inventory.ts +63 -243
  228. package/src/react/queries/listCollectibles.ts +22 -48
  229. package/src/react/queries/listCollections.ts +10 -13
  230. package/src/react/queries/listOffersForCollectible.ts +101 -0
  231. package/src/react/queries/marketplaceConfig.ts +6 -2
  232. package/src/react/queries/tokenBalances.ts +85 -0
  233. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +4 -4
  234. package/src/react/ui/components/_internals/action-button/ActionButton.stories.tsx +8 -8
  235. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +6 -9
  236. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +4 -4
  237. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +6 -6
  238. package/src/react/ui/components/_internals/custom-select/__tests__/CustomSelect.test.tsx +1 -1
  239. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +4 -3
  240. package/src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx +13 -2
  241. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +4 -7
  242. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +14 -5
  243. package/src/react/ui/components/marketplace-collectible-card/components/footer/Footer.tsx +179 -0
  244. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/FooterName.tsx +103 -0
  245. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/PriceDisplay.tsx +80 -0
  246. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/SaleDetailsPill.tsx +29 -0
  247. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/TokenTypeBalancePill.tsx +30 -0
  248. package/src/react/ui/components/marketplace-collectible-card/components/footer/components/index.ts +4 -0
  249. package/src/react/ui/components/marketplace-collectible-card/components/footer/index.ts +2 -0
  250. package/src/react/ui/components/marketplace-collectible-card/types.ts +18 -6
  251. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +11 -23
  252. package/src/react/ui/components/marketplace-collectible-card/variants/NonTradableInventoryCard.tsx +42 -0
  253. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +15 -12
  254. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +10 -10
  255. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +3 -3
  256. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx.bak +3 -3
  257. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +6 -6
  258. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +3 -3
  259. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +5 -5
  260. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +2 -2
  261. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +8 -8
  262. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +2 -2
  263. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +13 -2
  264. package/src/react/ui/modals/BuyModal/store.ts +6 -6
  265. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +2 -1
  266. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +1 -1
  267. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +87 -89
  268. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +2 -1
  269. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +1 -1
  270. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +2 -1
  271. package/src/react/ui/modals/SellModal/hooks/useSell.tsx +2 -1
  272. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +20 -9
  273. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +2 -2
  274. package/src/react/ui/modals/_internal/components/switchChainErrorModal/__tests__/SwitchChainErrorModal.test.tsx +80 -0
  275. package/src/react/ui/modals/_internal/components/switchChainErrorModal/index.tsx +64 -0
  276. package/src/react/ui/modals/_internal/components/switchChainErrorModal/store.ts +42 -0
  277. package/src/react/ui/modals/_internal/types.ts +0 -1
  278. package/src/styles/styles.ts +46 -24
  279. package/src/types/new-marketplace-types.ts +9 -18
  280. package/src/types/types.ts +1 -1
  281. package/test/globalSetup.ts +1 -1
  282. package/test/test-utils.tsx +1 -0
  283. package/dist/BellIcon-Cb9YEUzJ.js.map +0 -1
  284. package/dist/CollectibleCard-CYyWzk6u.d.ts +0 -8
  285. package/dist/api-BmEQfSQa.js.map +0 -1
  286. package/dist/create-config-6uynwTeb.js.map +0 -1
  287. package/dist/marketplace-logos-D8t86gsW.js.map +0 -1
  288. package/dist/marketplace.gen-JzNYpM0U.js.map +0 -1
  289. package/dist/marketplaceConfig-sNh-MA5M.js.map +0 -1
  290. package/dist/network-DnBEe1Ur.js.map +0 -1
  291. package/dist/queries-BYT4GJw3.js.map +0 -1
  292. package/dist/react-Ceq8mamy.js.map +0 -1
  293. package/dist/transaction-CC2KxNF6.js.map +0 -1
  294. package/dist/types-G2PWxiJR.js.map +0 -1
  295. package/dist/utils-CKJd-CRf.js.map +0 -1
  296. package/dist/utils-wquIhK6T.js.map +0 -1
  297. package/src/react/hooks/utils/useSwitchChainWithModal.ts +0 -38
  298. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +0 -238
  299. package/src/react/ui/modals/_internal/components/switchChainModal/__tests__/SwitchChainModal.test.tsx +0 -117
  300. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +0 -124
  301. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +0 -71
  302. /package/dist/{abi-Wr_aTZFi.js → abi-DYsUABe6.js} +0 -0
  303. /package/dist/{index-q7f-WDBS.d.ts → index-Cg5cFzs-.d.ts} +0 -0
  304. /package/dist/{wagmi-BhP3mdhP.js → wagmi-Bseovd6Q.js} +0 -0
@@ -1,56 +1,39 @@
1
- import type {
2
- ContractInfo,
3
- Page as IndexerPage,
4
- TokenBalance,
5
- } from '@0xsequence/indexer';
6
- import { infiniteQueryOptions } from '@tanstack/react-query';
1
+ import type { ContractInfo, TokenBalance } from '@0xsequence/indexer';
2
+ import { queryOptions } from '@tanstack/react-query';
7
3
  import type { Address } from 'viem';
8
- import { OrderSide, type Page, type SdkConfig } from '../../types';
9
- import {
10
- type CollectibleOrder,
11
- type ContractType,
12
- getIndexerClient,
13
- LaosAPI,
14
- } from '../_internal';
15
- import { fetchListCollectibles } from './listCollectibles';
4
+ import type { Page, SdkConfig } from '../../types';
5
+ import { compareAddress } from '../../utils';
6
+ import { type ContractType, getQueryClient } from '../_internal';
16
7
  import { fetchMarketplaceConfig } from './marketplaceConfig';
8
+ import { tokenBalancesOptions } from './tokenBalances';
17
9
 
18
10
  export interface UseInventoryArgs {
19
11
  accountAddress: Address;
20
12
  collectionAddress: Address;
21
13
  chainId: number;
22
14
  isLaos721?: boolean;
15
+ includeNonTradable?: boolean;
23
16
  query?: {
24
17
  enabled?: boolean;
18
+ page?: number;
19
+ pageSize?: number;
25
20
  };
26
21
  }
27
22
 
28
- // Maintain collection state across calls
29
- interface InventoryState {
30
- seenTokenIds: Set<string>;
31
- marketplaceFinished: boolean;
32
- // Track if we've already fetched all indexer tokens
33
- indexerTokensFetched: boolean;
34
- // Store the token balances from the indexer
35
- indexerTokenBalances: Map<string, CollectibleWithBalance>;
36
- }
37
-
38
- // Store state per collection
39
- const stateByCollection = new Map<string, InventoryState>();
40
-
41
- // Test helper to clear state between tests
42
- export const clearInventoryState = () => {
43
- stateByCollection.clear();
44
- };
45
-
46
- const getCollectionKey = (args: UseInventoryArgs) =>
47
- `${args.chainId}-${args.collectionAddress}-${args.accountAddress}`;
48
-
49
23
  interface GetInventoryArgs extends Omit<UseInventoryArgs, 'query'> {
50
24
  isLaos721: boolean;
51
25
  }
52
26
 
53
- interface CollectibleWithBalance extends CollectibleOrder {
27
+ interface CollectibleWithBalance {
28
+ metadata: {
29
+ tokenId: string;
30
+ attributes: Array<any>;
31
+ image?: string;
32
+ name: string;
33
+ description?: string;
34
+ video?: string;
35
+ audio?: string;
36
+ };
54
37
  balance: string;
55
38
  contractInfo?: ContractInfo;
56
39
  contractType: ContractType.ERC1155 | ContractType.ERC721;
@@ -59,20 +42,7 @@ interface CollectibleWithBalance extends CollectibleOrder {
59
42
  export interface CollectiblesResponse {
60
43
  collectibles: CollectibleWithBalance[];
61
44
  page: Page;
62
- }
63
-
64
- function getOrInitState(collectionKey: string): InventoryState {
65
- if (!stateByCollection.has(collectionKey)) {
66
- stateByCollection.set(collectionKey, {
67
- seenTokenIds: new Set<string>(),
68
- marketplaceFinished: false,
69
- indexerTokensFetched: false,
70
- indexerTokenBalances: new Map(),
71
- });
72
- }
73
-
74
- // biome-ignore lint/style/noNonNullAssertion: guaranteed to exist, by the above init
75
- return stateByCollection.get(collectionKey)!;
45
+ isTradable: boolean;
76
46
  }
77
47
 
78
48
  function collectibleFromTokenBalance(
@@ -96,248 +66,98 @@ function collectibleFromTokenBalance(
96
66
  };
97
67
  }
98
68
 
99
- async function fetchAllIndexerTokens(
69
+ async function fetchIndexerTokens(
100
70
  chainId: number,
101
71
  accountAddress: Address,
102
72
  collectionAddress: Address,
103
73
  config: SdkConfig,
104
- state: InventoryState,
105
74
  isLaos721: boolean,
106
- ): Promise<void> {
107
- if (isLaos721) {
108
- const laosClient = new LaosAPI();
109
- const { balances } = await laosClient.getTokenBalances({
110
- chainId: chainId.toString(),
111
- accountAddress,
112
- includeMetadata: true,
113
- contractAddress: collectionAddress,
114
- page: {
115
- sort: [
116
- {
117
- column: 'CREATED_AT',
118
- order: 'DESC',
119
- },
120
- ],
75
+ ): Promise<{ collectibles: CollectibleWithBalance[] }> {
76
+ const queryClient = getQueryClient();
77
+ const balances = await queryClient.fetchQuery(
78
+ tokenBalancesOptions(
79
+ {
80
+ collectionAddress,
81
+ userAddress: accountAddress,
82
+ chainId,
83
+ isLaos721,
84
+ includeMetadata: true,
121
85
  },
122
- });
123
-
124
- for (const balance of balances) {
125
- if (balance.tokenID) {
126
- state.indexerTokenBalances.set(
127
- balance.tokenID,
128
- collectibleFromTokenBalance(balance),
129
- );
130
- }
131
- }
132
-
133
- state.indexerTokensFetched = true;
134
- return;
135
- }
136
-
137
- const indexerClient = getIndexerClient(chainId, config);
138
-
139
- let page: IndexerPage = {
140
- pageSize: 50,
141
- };
142
-
143
- while (true) {
144
- const { balances, page: nextPage } = await indexerClient.getTokenBalances({
145
- accountAddress,
146
- contractAddress: collectionAddress,
147
- includeMetadata: true,
148
- page: page,
149
- });
150
-
151
- for (const balance of balances) {
152
- if (balance.tokenID) {
153
- state.indexerTokenBalances.set(
154
- balance.tokenID,
155
- collectibleFromTokenBalance(balance),
156
- );
157
- }
158
- }
159
-
160
- if (!nextPage.more) {
161
- break;
162
- }
163
- page = nextPage;
164
- }
165
-
166
- state.indexerTokensFetched = true;
167
- }
168
-
169
- // Process indexer tokens that we haven't seen yet
170
- function processRemainingIndexerTokens(
171
- state: InventoryState,
172
- page: Page,
173
- ): CollectiblesResponse {
174
- const allTokens = Array.from(state.indexerTokenBalances.values());
175
-
176
- // Filter out tokens that we've already seen
177
- const newTokens = allTokens.filter(
178
- (token) => !state.seenTokenIds.has(token.metadata.tokenId),
86
+ config,
87
+ ),
179
88
  );
180
89
 
181
- // Calculate pagination
182
- const startIndex = (page.page - 1) * page.pageSize;
183
- const endIndex = startIndex + page.pageSize;
184
- const paginatedTokens = newTokens.slice(startIndex, endIndex);
185
-
186
- // Add new token IDs to the set
187
- for (const token of paginatedTokens) {
188
- state.seenTokenIds.add(token.metadata.tokenId);
189
- }
90
+ const collectibles = balances.map((balance) =>
91
+ collectibleFromTokenBalance(balance),
92
+ );
190
93
 
191
94
  return {
192
- collectibles: paginatedTokens,
193
- page: {
194
- page: page.page,
195
- pageSize: page.pageSize,
196
- more: endIndex < newTokens.length,
197
- },
95
+ collectibles,
198
96
  };
199
97
  }
200
98
 
201
- function processMarketplaceCollectibles(
202
- collectibles: CollectibleOrder[],
203
- state: InventoryState,
204
- page: Page,
205
- ): {
206
- enrichedCollectibles: CollectibleWithBalance[];
207
- missingTokens: CollectibleWithBalance[];
208
- } {
209
- // Add new token IDs to the set
210
- for (const c of collectibles) {
211
- state.seenTokenIds.add(c.metadata.tokenId);
212
- }
213
-
214
- // Enrich marketplace collectibles with balance data from indexer
215
- const enrichedCollectibles = collectibles.map((c: CollectibleOrder) => {
216
- const tokenId = c.metadata.tokenId;
217
- const indexerData = state.indexerTokenBalances.get(tokenId);
218
-
219
- return {
220
- ...c,
221
- balance: indexerData?.balance,
222
- contractInfo: indexerData?.contractInfo,
223
- contractType: indexerData?.contractType,
224
- } as CollectibleWithBalance;
225
- });
226
-
227
- // Check for missing tokens in the marketplace data
228
- const marketplaceTokenIds = new Set(
229
- enrichedCollectibles.map((c) => c.metadata.tokenId),
230
- );
231
-
232
- const missingTokens = Array.from(state.indexerTokenBalances.entries())
233
- .filter(([tokenId]) => !marketplaceTokenIds.has(tokenId))
234
- .map(([_, balance]) => balance)
235
- .slice(0, page.pageSize);
236
-
237
- return { enrichedCollectibles, missingTokens };
238
- }
239
-
240
99
  export async function fetchInventory(
241
100
  args: GetInventoryArgs,
242
101
  config: SdkConfig,
243
102
  page: Page,
244
103
  ): Promise<CollectiblesResponse> {
245
104
  const { accountAddress, collectionAddress, chainId, isLaos721 } = args;
246
- const collectionKey = getCollectionKey(args);
247
- const state = getOrInitState(collectionKey);
248
-
249
- // On first run, fetch all pages from the indexer
250
- if (!state.indexerTokensFetched) {
251
- await fetchAllIndexerTokens(
252
- chainId,
253
- accountAddress,
254
- collectionAddress,
255
- config,
256
- state,
257
- isLaos721,
258
- );
259
- }
105
+ const marketplaceConfig = await fetchMarketplaceConfig({ config });
260
106
 
261
- // If marketplace API has no more results, use the indexer data
262
- if (state.marketplaceFinished) {
263
- return processRemainingIndexerTokens(state, page);
264
- }
107
+ const marketCollections = marketplaceConfig?.market.collections || [];
265
108
 
266
- // Fetch collectibles from marketplace API
267
- const marketplaceConfig = await fetchMarketplaceConfig({ config });
268
- const collectibles = await fetchListCollectibles(
269
- {
270
- chainId,
271
- collectionAddress,
272
- filter: {
273
- inAccounts: [accountAddress],
274
- includeEmpty: true,
275
- },
276
- side: OrderSide.listing,
277
- config,
278
- },
279
- marketplaceConfig,
280
- page,
109
+ const isMarketCollection = marketCollections.some((collection) =>
110
+ compareAddress(collection.itemsAddress, collectionAddress),
281
111
  );
282
112
 
283
- // Process the collectibles and find missing tokens
284
- const { enrichedCollectibles, missingTokens } =
285
- processMarketplaceCollectibles(collectibles.collectibles, state, page);
113
+ // Determine if this collection is tradable (market collection vs shop collection)
114
+ const isTradable = isMarketCollection;
286
115
 
287
- // If there are no more results from the marketplace API
288
- if (!collectibles.page?.more) {
289
- // Mark marketplace as finished and start using indexer data on next call
290
- state.marketplaceFinished = true;
291
- return {
292
- collectibles: [...enrichedCollectibles, ...missingTokens],
293
- page: {
294
- page: collectibles.page?.page ?? page.page,
295
- pageSize: collectibles.page?.pageSize ?? page.pageSize,
296
- more: missingTokens.length > 0,
297
- },
298
- };
299
- }
116
+ // Fetch collectibles from indexer
117
+ const { collectibles } = await fetchIndexerTokens(
118
+ chainId,
119
+ accountAddress,
120
+ collectionAddress,
121
+ config,
122
+ isLaos721,
123
+ );
300
124
 
301
125
  return {
302
- collectibles: enrichedCollectibles,
126
+ collectibles,
303
127
  page: {
304
- page: collectibles.page?.page ?? page.page,
305
- pageSize: collectibles.page?.pageSize ?? page.pageSize,
306
- more: Boolean(collectibles.page?.more),
128
+ page: page.page,
129
+ pageSize: page.pageSize,
307
130
  },
131
+ isTradable,
308
132
  };
309
133
  }
310
134
 
311
135
  export function inventoryOptions(args: UseInventoryArgs, config: SdkConfig) {
312
- const collectionKey = getCollectionKey(args);
313
136
  const enabledQuery = args.query?.enabled ?? true;
314
137
  const enabled =
315
138
  enabledQuery && !!args.accountAddress && !!args.collectionAddress;
316
139
 
317
- return infiniteQueryOptions({
140
+ return queryOptions({
318
141
  queryKey: [
319
142
  'inventory',
320
143
  args.accountAddress,
321
144
  args.collectionAddress,
322
145
  args.chainId,
146
+ args.query?.page ?? 1,
147
+ args.query?.pageSize ?? 30,
323
148
  ],
324
- queryFn: ({ pageParam }) =>
149
+ queryFn: () =>
325
150
  fetchInventory(
326
151
  {
327
152
  ...args,
328
153
  isLaos721: args.isLaos721 ?? false,
329
154
  },
330
155
  config,
331
- pageParam,
156
+ {
157
+ page: args.query?.page ?? 1,
158
+ pageSize: args.query?.pageSize ?? 30,
159
+ },
332
160
  ),
333
- initialPageParam: { page: 1, pageSize: 30 } as Page,
334
- getNextPageParam: (lastPage) =>
335
- lastPage.page?.more ? lastPage.page : undefined,
336
161
  enabled,
337
- meta: {
338
- onInvalidate: () => {
339
- stateByCollection.delete(collectionKey);
340
- },
341
- },
342
162
  });
343
163
  }
@@ -1,7 +1,7 @@
1
1
  import { infiniteQueryOptions } from '@tanstack/react-query';
2
2
  import type { Address } from 'viem';
3
- import type { MarketplaceConfig, Page, SdkConfig } from '../../types';
4
- import type { MarketplaceType } from '../../types/types';
3
+ import type { Page, SdkConfig } from '../../types';
4
+ import type { CardType } from '../../types/types';
5
5
  import { compareAddress } from '../../utils';
6
6
  import type {
7
7
  ListCollectiblesArgs,
@@ -14,17 +14,18 @@ import {
14
14
  getMarketplaceClient,
15
15
  OrderSide,
16
16
  } from '../_internal';
17
- import { fetchMarketplaceConfig } from '../queries/marketplaceConfig';
18
17
  import type { StandardInfiniteQueryOptions } from '../types/query';
19
18
  import { fetchBalances, type UseListBalancesArgs } from './listBalances';
19
+ import { fetchMarketplaceConfig } from './marketplaceConfig';
20
20
 
21
21
  export interface FetchListCollectiblesParams
22
22
  extends Omit<ListCollectiblesArgs, 'chainId' | 'contractAddress'> {
23
23
  chainId: number;
24
24
  collectionAddress: Address;
25
25
  isLaos721?: boolean;
26
- marketplaceType?: MarketplaceType;
26
+ cardType?: CardType;
27
27
  config: SdkConfig;
28
+ enabled?: boolean;
28
29
  }
29
30
 
30
31
  /**
@@ -32,11 +33,26 @@ export interface FetchListCollectiblesParams
32
33
  */
33
34
  export async function fetchListCollectibles(
34
35
  params: FetchListCollectiblesParams,
35
- marketplaceConfig: MarketplaceConfig,
36
36
  page: Page,
37
37
  ): Promise<ListCollectiblesReturn> {
38
38
  const { collectionAddress, chainId, config, ...additionalApiParams } = params;
39
39
  const marketplaceClient = getMarketplaceClient(config);
40
+ const marketplaceConfig = await fetchMarketplaceConfig({ config });
41
+ const isMarketCollection = marketplaceConfig?.market.collections.some(
42
+ (collection) => compareAddress(collection.itemsAddress, collectionAddress),
43
+ );
44
+
45
+ // If it's not a market collection, return an empty list. those collections are not compatible with the ListCollectibles endpoint.
46
+ if (params.enabled === false || !isMarketCollection) {
47
+ return {
48
+ collectibles: [],
49
+ page: {
50
+ page: 1,
51
+ pageSize: 30,
52
+ more: false,
53
+ },
54
+ };
55
+ }
40
56
 
41
57
  const apiArgs: ListCollectiblesArgs = {
42
58
  contractAddress: collectionAddress,
@@ -45,43 +61,6 @@ export async function fetchListCollectibles(
45
61
  ...additionalApiParams,
46
62
  };
47
63
 
48
- if (params.marketplaceType === 'shop') {
49
- const shopCollection = marketplaceConfig.shop.collections.find(
50
- (collection) =>
51
- compareAddress(collection.itemsAddress, params.collectionAddress),
52
- );
53
-
54
- if (!shopCollection) {
55
- return { collectibles: [] };
56
- }
57
-
58
- const primarySaleItemsList = await marketplaceClient.listPrimarySaleItems(
59
- {
60
- chainId: params.chainId.toString(),
61
- primarySaleContractAddress: shopCollection.saleAddress as Address,
62
- },
63
- marketplaceConfig,
64
- );
65
-
66
- return {
67
- collectibles: primarySaleItemsList.primarySaleItems.map((item) => ({
68
- metadata: item.metadata,
69
- primarySale: {
70
- price: {
71
- amount: item.primarySaleItem.priceAmount,
72
- formatted: item.primarySaleItem.priceAmountFormatted,
73
- decimals: item.primarySaleItem.priceDecimals,
74
- currencyAddress: item.primarySaleItem.currencyAddress,
75
- },
76
- startDate: item.primarySaleItem.startDate,
77
- endDate: item.primarySaleItem.endDate,
78
- supplyCap: item.primarySaleItem.supply,
79
- itemType: item.primarySaleItem.itemType,
80
- },
81
- })),
82
- };
83
- }
84
-
85
64
  if (params.isLaos721 && params.side === OrderSide.listing) {
86
65
  try {
87
66
  const fetchBalancesArgs = {
@@ -144,10 +123,6 @@ export function listCollectiblesQueryOptions(
144
123
  return infiniteQueryOptions({
145
124
  queryKey: [...collectableKeys.lists, params],
146
125
  queryFn: async ({ pageParam }) => {
147
- const marketplaceConfig = await fetchMarketplaceConfig({
148
- // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
149
- config: params.config!,
150
- });
151
126
  return fetchListCollectibles(
152
127
  {
153
128
  // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
@@ -160,9 +135,8 @@ export function listCollectiblesQueryOptions(
160
135
  side: params.side!,
161
136
  filter: params.filter,
162
137
  isLaos721: params.isLaos721,
163
- marketplaceType: params.marketplaceType,
138
+ cardType: params.cardType,
164
139
  },
165
- marketplaceConfig,
166
140
  pageParam,
167
141
  );
168
142
  },
@@ -1,6 +1,6 @@
1
1
  import type { ContractInfo } from '@0xsequence/metadata';
2
2
  import { queryOptions, skipToken } from '@tanstack/react-query';
3
- import type { MarketplaceType, SdkConfig } from '../../types';
3
+ import type { CardType, SdkConfig } from '../../types';
4
4
  import type {
5
5
  MarketCollection,
6
6
  MarketplaceConfig,
@@ -22,7 +22,7 @@ const allCollections = (marketplaceConfig: MarketplaceConfig) => {
22
22
  };
23
23
 
24
24
  export interface FetchListCollectionsParams {
25
- marketplaceType?: MarketplaceType;
25
+ cardType?: CardType;
26
26
  marketplaceConfig: MarketplaceConfig;
27
27
  config: SdkConfig;
28
28
  }
@@ -31,7 +31,7 @@ export interface FetchListCollectionsParams {
31
31
  * Fetches collections from the metadata API with marketplace config filtering
32
32
  */
33
33
  export async function fetchListCollections(params: FetchListCollectionsParams) {
34
- const { marketplaceType, marketplaceConfig, config } = params;
34
+ const { cardType, marketplaceConfig, config } = params;
35
35
  const metadataClient = getMetadataClient(config);
36
36
 
37
37
  let collections = allCollections(marketplaceConfig);
@@ -40,9 +40,9 @@ export async function fetchListCollections(params: FetchListCollectionsParams) {
40
40
  return [];
41
41
  }
42
42
 
43
- if (marketplaceType) {
43
+ if (cardType) {
44
44
  collections = collections.filter(
45
- (collection) => collection.marketplaceType === marketplaceType,
45
+ (collection) => collection.cardType === cardType,
46
46
  );
47
47
  }
48
48
 
@@ -131,7 +131,7 @@ export function listCollectionsQueryOptions(
131
131
  marketplaceConfig: params.marketplaceConfig!,
132
132
  // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
133
133
  config: params.config!,
134
- marketplaceType: params.marketplaceType,
134
+ cardType: params.cardType,
135
135
  })
136
136
  : skipToken,
137
137
  ...params.query,
@@ -141,25 +141,22 @@ export function listCollectionsQueryOptions(
141
141
 
142
142
  // Keep old function for backward compatibility during migration
143
143
  export const listCollectionsOptions = ({
144
- marketplaceType,
144
+ cardType,
145
145
  marketplaceConfig,
146
146
  config,
147
147
  }: {
148
- marketplaceType?: MarketplaceType;
148
+ cardType?: CardType;
149
149
  marketplaceConfig: MarketplaceConfig | undefined;
150
150
  config: SdkConfig;
151
151
  }) => {
152
152
  return queryOptions({
153
- queryKey: [
154
- ...collectionKeys.list,
155
- { marketplaceType, marketplaceConfig, config },
156
- ],
153
+ queryKey: [...collectionKeys.list, { cardType, marketplaceConfig, config }],
157
154
  queryFn: marketplaceConfig
158
155
  ? () =>
159
156
  fetchListCollections({
160
157
  marketplaceConfig,
161
158
  config,
162
- marketplaceType,
159
+ cardType,
163
160
  })
164
161
  : skipToken,
165
162
  enabled: Boolean(marketplaceConfig),
@@ -0,0 +1,101 @@
1
+ import { queryOptions } from '@tanstack/react-query';
2
+ import type { Address } from 'viem';
3
+ import type { SdkConfig } from '../../types';
4
+ import type {
5
+ ListCollectibleOffersReturn,
6
+ ListOffersForCollectibleArgs,
7
+ Page,
8
+ SortBy,
9
+ ValuesOptional,
10
+ } from '../_internal';
11
+ import { collectableKeys, getMarketplaceClient } from '../_internal';
12
+ import type { StandardQueryOptions } from '../types/query';
13
+
14
+ export interface FetchListOffersForCollectibleParams
15
+ extends Omit<
16
+ ListOffersForCollectibleArgs,
17
+ 'chainId' | 'contractAddress' | 'tokenId'
18
+ > {
19
+ chainId: number;
20
+ collectionAddress: Address;
21
+ collectibleId: string;
22
+ config: SdkConfig;
23
+ sort?: Array<SortBy>;
24
+ }
25
+
26
+ /**
27
+ * Fetches offers for a specific collectible from the Marketplace API
28
+ */
29
+ export async function fetchListOffersForCollectible(
30
+ params: FetchListOffersForCollectibleParams,
31
+ ): Promise<ListCollectibleOffersReturn> {
32
+ const {
33
+ collectionAddress,
34
+ chainId,
35
+ collectibleId,
36
+ config,
37
+ sort,
38
+ page,
39
+ ...additionalApiParams
40
+ } = params;
41
+ const marketplaceClient = getMarketplaceClient(config);
42
+
43
+ const finalSort = sort || (page && 'sort' in page ? page.sort : undefined);
44
+
45
+ let finalPage: Page | undefined;
46
+ if (page || finalSort) {
47
+ finalPage = {
48
+ page: page?.page ?? 1,
49
+ pageSize: page?.pageSize ?? 20,
50
+ ...(page?.more && { more: page.more }),
51
+ ...(finalSort && { sort: finalSort }),
52
+ } as Page;
53
+ }
54
+
55
+ const apiArgs: ListOffersForCollectibleArgs = {
56
+ contractAddress: collectionAddress,
57
+ chainId: String(chainId),
58
+ tokenId: collectibleId,
59
+ page: finalPage,
60
+ ...additionalApiParams,
61
+ };
62
+
63
+ return await marketplaceClient.listCollectibleOffers(apiArgs);
64
+ }
65
+
66
+ export type ListOffersForCollectibleQueryOptions =
67
+ ValuesOptional<FetchListOffersForCollectibleParams> & {
68
+ query?: StandardQueryOptions;
69
+ };
70
+
71
+ export function listOffersForCollectibleQueryOptions(
72
+ params: ListOffersForCollectibleQueryOptions,
73
+ ) {
74
+ const enabled = Boolean(
75
+ params.collectionAddress &&
76
+ params.chainId &&
77
+ params.collectibleId &&
78
+ params.config &&
79
+ (params.query?.enabled ?? true),
80
+ );
81
+
82
+ return queryOptions({
83
+ queryKey: [...collectableKeys.offers, params],
84
+ queryFn: () =>
85
+ fetchListOffersForCollectible({
86
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
87
+ chainId: params.chainId!,
88
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
89
+ collectionAddress: params.collectionAddress!,
90
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
91
+ collectibleId: params.collectibleId!,
92
+ // biome-ignore lint/style/noNonNullAssertion: The enabled check above ensures these are not undefined
93
+ config: params.config!,
94
+ filter: params.filter,
95
+ page: params.page,
96
+ sort: params.sort,
97
+ }),
98
+ ...params.query,
99
+ enabled,
100
+ });
101
+ }