@0xsequence/marketplace-sdk 0.8.10 → 0.8.12

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 (436) hide show
  1. package/.changeset/fluffy-jokes-lay.md +5 -0
  2. package/.changeset/wise-bugs-boil.md +8 -0
  3. package/CHANGELOG.md +182 -3
  4. package/dist/CartIcon-Bll1rbxv.js +141 -0
  5. package/dist/CartIcon-Bll1rbxv.js.map +1 -0
  6. package/dist/CollectibleCard-CLQTl0_6.d.ts +8 -0
  7. package/dist/_internal-69NEWNUE.js +34 -0
  8. package/dist/_internal-69NEWNUE.js.map +1 -0
  9. package/dist/abi-BKyRjVcZ.js +0 -0
  10. package/dist/{alien_swap-2B65TDGT.js → alien_swap-B_76IMma.js} +5 -5
  11. package/dist/alien_swap-B_76IMma.js.map +1 -0
  12. package/dist/api-1KFxYh7o.js +232 -0
  13. package/dist/api-1KFxYh7o.js.map +1 -0
  14. package/dist/{aqua-xyz-WMYQLAIS.js → aqua-xyz-CMN_TFY5.js} +5 -5
  15. package/dist/aqua-xyz-CMN_TFY5.js.map +1 -0
  16. package/dist/{aura-V22RV5OG.js → aura-Cye_TuHj.js} +5 -5
  17. package/dist/aura-Cye_TuHj.js.map +1 -0
  18. package/dist/{blur-GE5QOMCM.js → blur-DWDMyMpK.js} +5 -5
  19. package/dist/blur-DWDMyMpK.js.map +1 -0
  20. package/dist/builder-api-BQvzykoU.js +28 -0
  21. package/dist/builder-api-BQvzykoU.js.map +1 -0
  22. package/dist/builder-api-DoK3907S.d.ts +12 -0
  23. package/dist/builder.gen-CxP9NT1p.js +303 -0
  24. package/dist/builder.gen-CxP9NT1p.js.map +1 -0
  25. package/dist/{coinbase-NLHJMGAP.js → coinbase-ByA_XRB0.js} +5 -5
  26. package/dist/coinbase-ByA_XRB0.js.map +1 -0
  27. package/dist/{element-2LGTYYSP.js → element-b77CyXIZ.js} +5 -5
  28. package/dist/element-b77CyXIZ.js.map +1 -0
  29. package/dist/{foundation-BPN66ZTN.js → foundation-DbOrKP9Y.js} +5 -5
  30. package/dist/foundation-DbOrKP9Y.js.map +1 -0
  31. package/dist/index-1bezgsFq.d.ts +1129 -0
  32. package/dist/index-4-kfOFdx.d.ts +22 -0
  33. package/dist/index-BEYefG1G.d.ts +24 -0
  34. package/dist/index-BHiSG-Yi.d.ts +312 -0
  35. package/dist/index-BIMIpDiI.d.ts +188 -0
  36. package/dist/index-BQW0PUkQ.d.ts +3973 -0
  37. package/dist/index-BfH21xmk.d.ts +117 -0
  38. package/dist/index-BjIwVzc4.d.ts +1057 -0
  39. package/dist/index-C39K_8SG.d.ts +1 -0
  40. package/dist/index-CN8puQQJ.d.ts +24 -0
  41. package/dist/index-Cl7PQOGu.d.ts +102 -0
  42. package/dist/index-D5v5iluA.d.ts +809 -0
  43. package/dist/index-DXMfTZ1F.d.ts +7 -0
  44. package/dist/index-DafWjEb4.d.ts +65 -0
  45. package/dist/index-ij9f8GAA.d.ts +1 -0
  46. package/dist/index.css +384 -371
  47. package/dist/index.d.ts +10 -28
  48. package/dist/index.js +13 -105
  49. package/dist/{looks-rare-MZRSOPT4.js → looks-rare-C1VqNcSM.js} +5 -5
  50. package/dist/looks-rare-C1VqNcSM.js.map +1 -0
  51. package/dist/{magic-eden-PUBL6KWW.js → magic-eden-ea_AGCZr.js} +5 -5
  52. package/dist/magic-eden-ea_AGCZr.js.map +1 -0
  53. package/dist/{manifold-GA445YJ6.js → manifold-8y8J2sjT.js} +5 -5
  54. package/dist/manifold-8y8J2sjT.js.map +1 -0
  55. package/dist/marketplace-logos-CSeGcPW4.js +50 -0
  56. package/dist/marketplace-logos-CSeGcPW4.js.map +1 -0
  57. package/dist/marketplace-nwnZv9Cb.js +1913 -0
  58. package/dist/marketplace-nwnZv9Cb.js.map +1 -0
  59. package/dist/marketplace.gen-Dqk8vRmD.js +1068 -0
  60. package/dist/marketplace.gen-Dqk8vRmD.js.map +1 -0
  61. package/dist/marketplaceConfig-D2MYFqll.js +71 -0
  62. package/dist/marketplaceConfig-D2MYFqll.js.map +1 -0
  63. package/dist/{mintify-UMC5PTKC.js → mintify-LA68TzWg.js} +5 -5
  64. package/dist/mintify-LA68TzWg.js.map +1 -0
  65. package/dist/{nftx-AX3CY3IE.js → nftx-D3Tc8nzd.js} +5 -5
  66. package/dist/nftx-D3Tc8nzd.js.map +1 -0
  67. package/dist/{okx-GNVLAE2R.js → okx-hbqg6oIJ.js} +5 -5
  68. package/dist/okx-hbqg6oIJ.js.map +1 -0
  69. package/dist/{open-sea-KI43GVEB.js → open-sea-BccuK8-t.js} +5 -5
  70. package/dist/open-sea-BccuK8-t.js.map +1 -0
  71. package/dist/options-DCi6_23w.js +34 -0
  72. package/dist/options-DCi6_23w.js.map +1 -0
  73. package/dist/primary-sale-Cw95phYC.js +1264 -0
  74. package/dist/primary-sale-Cw95phYC.js.map +1 -0
  75. package/dist/queries-DPvwtnO7.js +486 -0
  76. package/dist/queries-DPvwtnO7.js.map +1 -0
  77. package/dist/{rarible-2J3MMZJ7.js → rarible-BgTwwj9g.js} +5 -5
  78. package/dist/rarible-BgTwwj9g.js.map +1 -0
  79. package/dist/react/_internal/api/index.d.ts +4 -86
  80. package/dist/react/_internal/api/index.js +7 -150
  81. package/dist/react/_internal/databeat/index.d.ts +45 -41
  82. package/dist/react/_internal/databeat/index.js +23 -27
  83. package/dist/react/_internal/index.d.ts +7 -24
  84. package/dist/react/_internal/index.js +9 -176
  85. package/dist/react/_internal/wagmi/index.d.ts +4 -18
  86. package/dist/react/_internal/wagmi/index.js +5 -14
  87. package/dist/react/hooks/index.d.ts +17 -3803
  88. package/dist/react/hooks/index.js +23 -157
  89. package/dist/react/hooks/options/index.d.ts +5 -7
  90. package/dist/react/hooks/options/index.js +11 -19
  91. package/dist/react/index.d.ts +37 -33
  92. package/dist/react/index.js +23 -199
  93. package/dist/react/queries/index.d.ts +8 -26
  94. package/dist/react/queries/index.js +18 -40
  95. package/dist/react/ssr/index.d.ts +19 -13
  96. package/dist/react/ssr/index.js +29 -27
  97. package/dist/react/ssr/index.js.map +1 -1
  98. package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +10 -0
  99. package/dist/react/ui/components/marketplace-collectible-card/index.js +23 -0
  100. package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +8 -0
  101. package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +10 -0
  102. package/dist/react/ui/components/marketplace-logos/index.d.ts +26 -24
  103. package/dist/react/ui/components/marketplace-logos/index.js +3 -45
  104. package/dist/react/ui/icons/index.d.ts +1 -2
  105. package/dist/react/ui/icons/index.js +10 -14
  106. package/dist/react/ui/index.d.ts +10 -116
  107. package/dist/react/ui/index.js +23 -46
  108. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +59 -33
  109. package/dist/react/ui/modals/_internal/components/actionModal/index.js +23 -31
  110. package/dist/react-BG7o4PId.js +8351 -0
  111. package/dist/react-BG7o4PId.js.map +1 -0
  112. package/dist/react-BbHBl6gg.css +80 -0
  113. package/dist/react-BbHBl6gg.css.map +1 -0
  114. package/dist/sdk-config-DJzxVPld.d.ts +1535 -0
  115. package/dist/{sequence-TGLUFEPQ.js → sequence-Do3kzb4J.js} +5 -5
  116. package/dist/sequence-Do3kzb4J.js.map +1 -0
  117. package/dist/src-Dz2CfBL0.js +8 -0
  118. package/dist/src-Dz2CfBL0.js.map +1 -0
  119. package/dist/{sudo-swap-M2O6E3TE.js → sudo-swap-B6vPKxBz.js} +5 -5
  120. package/dist/sudo-swap-B6vPKxBz.js.map +1 -0
  121. package/dist/{super-rare-UU2U4LIN.js → super-rare-eCm1SE6O.js} +5 -5
  122. package/dist/super-rare-eCm1SE6O.js.map +1 -0
  123. package/dist/token-CO5llIla.js +1312 -0
  124. package/dist/token-CO5llIla.js.map +1 -0
  125. package/dist/transaction-CcVViHEL.js +97 -0
  126. package/dist/transaction-CcVViHEL.js.map +1 -0
  127. package/dist/types/index.d.ts +3 -12
  128. package/dist/types/index.js +5 -44
  129. package/dist/types-BIJOaL4j.d.ts +68 -0
  130. package/dist/types-DwWE6xOF.js +13 -0
  131. package/dist/types-DwWE6xOF.js.map +1 -0
  132. package/dist/useCollection-C-mclKU0.d.ts +66 -0
  133. package/dist/utils/abi/index.d.ts +5 -3
  134. package/dist/utils/abi/index.js +6 -26
  135. package/dist/utils/abi/marketplace/index.d.ts +2 -805
  136. package/dist/utils/abi/marketplace/index.js +3 -11
  137. package/dist/utils/abi/primary-sale/index.d.ts +2 -1054
  138. package/dist/utils/abi/primary-sale/index.js +3 -9
  139. package/dist/utils/abi/token/index.d.ts +2 -1125
  140. package/dist/utils/abi/token/index.js +3 -11
  141. package/dist/utils/index.d.ts +8 -91
  142. package/dist/utils/index.js +11 -56
  143. package/dist/utils-BFdxaToy.js +216 -0
  144. package/dist/utils-BFdxaToy.js.map +1 -0
  145. package/dist/utils-Cat9_pef.js +44 -0
  146. package/dist/utils-Cat9_pef.js.map +1 -0
  147. package/dist/wagmi-DRctYEk6.js +159 -0
  148. package/dist/wagmi-DRctYEk6.js.map +1 -0
  149. package/dist/{x2y2-3W5BBMZC.js → x2y2-DD17tT91.js} +5 -5
  150. package/dist/x2y2-DD17tT91.js.map +1 -0
  151. package/dist/{zora-6EY6FUH6.js → zora-BpSG9UzS.js} +5 -5
  152. package/dist/zora-BpSG9UzS.js.map +1 -0
  153. package/package.json +21 -19
  154. package/src/index.ts +0 -1
  155. package/src/react/_internal/api/__mocks__/builder.msw.ts +157 -80
  156. package/src/react/_internal/api/__mocks__/indexer.msw.ts +1 -0
  157. package/src/react/_internal/api/builder-api.ts +2 -2
  158. package/src/react/_internal/api/builder.gen.ts +666 -112
  159. package/src/react/_internal/api/marketplace.gen.ts +2421 -1315
  160. package/src/react/_internal/api/services.ts +42 -49
  161. package/src/react/_internal/types.ts +1 -13
  162. package/src/react/_internal/wagmi/__tests__/create-config.test.ts +102 -87
  163. package/src/react/_internal/wagmi/create-config.ts +15 -6
  164. package/src/react/_internal/wagmi/get-connectors.ts +29 -21
  165. package/src/react/hooks/__tests__/__snapshots__/useListCollections.test.tsx.snap +273 -0
  166. package/src/react/hooks/__tests__/__snapshots__/useMarketplaceConfig.test.tsx.snap +122 -82
  167. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +7 -4
  168. package/src/react/hooks/__tests__/useCheckoutOptionsSalesContract.test.tsx +225 -0
  169. package/src/react/hooks/__tests__/useCollectionDetailsPolling.test.tsx +3 -3
  170. package/src/react/hooks/__tests__/useFilters.test.tsx +0 -16
  171. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +2 -3
  172. package/src/react/hooks/__tests__/useHighestOffer.test.tsx +0 -16
  173. package/src/react/hooks/__tests__/useInventory.test.tsx +6 -42
  174. package/src/react/hooks/__tests__/useListCollections.test.tsx +24 -57
  175. package/src/react/hooks/__tests__/{useCurrencies.test.tsx → useMarketCurrencies.test.tsx} +21 -15
  176. package/src/react/hooks/__tests__/useMarketplaceConfig.test.tsx +2 -59
  177. package/src/react/hooks/index.ts +9 -1
  178. package/src/react/hooks/useBalanceOfCollectible.tsx +14 -8
  179. package/src/react/hooks/useCancelTransactionSteps.tsx +5 -1
  180. package/src/react/hooks/useCheckoutOptions.tsx +2 -1
  181. package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +67 -0
  182. package/src/react/hooks/useCollectionDetails.tsx +22 -7
  183. package/src/react/hooks/useConvertPriceToUSD.tsx +1 -1
  184. package/src/react/hooks/useCountListingsForCollectible.tsx +5 -4
  185. package/src/react/hooks/useCountOfCollectables.tsx +10 -7
  186. package/src/react/hooks/useCountOffersForCollectible.tsx +5 -4
  187. package/src/react/hooks/useCurrency.tsx +2 -2
  188. package/src/react/hooks/useERC721SaleMintedTokens.tsx +67 -0
  189. package/src/react/hooks/useFilters.tsx +14 -22
  190. package/src/react/hooks/useFloorOrder.tsx +5 -2
  191. package/src/react/hooks/useGenerateCancelTransaction.tsx +13 -6
  192. package/src/react/hooks/useGenerateListingTransaction.tsx +15 -5
  193. package/src/react/hooks/useGenerateOfferTransaction.tsx +15 -6
  194. package/src/react/hooks/useGenerateSellTransaction.tsx +15 -6
  195. package/src/react/hooks/useGetTokenSuppliesMap.ts +33 -0
  196. package/src/react/hooks/useInventory.tsx +7 -4
  197. package/src/react/hooks/useList1155ShopCardData.tsx +130 -0
  198. package/src/react/hooks/useList721ShopCardData.tsx +130 -0
  199. package/src/react/hooks/useListBalances.tsx +7 -8
  200. package/src/react/hooks/useListCollectibleActivities.tsx +2 -1
  201. package/src/react/hooks/useListCollectibles.tsx +1 -12
  202. package/src/react/hooks/useListCollectiblesPaginated.tsx +8 -5
  203. package/src/react/hooks/useListCollectionActivities.tsx +2 -1
  204. package/src/react/hooks/useListCollections.tsx +14 -76
  205. package/src/react/hooks/useListListingsForCollectible.tsx +2 -1
  206. package/src/react/hooks/useListMarketCardData.tsx +157 -0
  207. package/src/react/hooks/useListOffersForCollectible.tsx +2 -1
  208. package/src/react/hooks/useListPrimarySaleItems.ts +42 -0
  209. package/src/react/hooks/useMarketCurrencies.tsx +8 -0
  210. package/src/react/hooks/useMarketplaceConfig.tsx +0 -2
  211. package/src/react/hooks/useTokenSaleDetailsBatch.tsx +134 -0
  212. package/src/react/queries/highestOffer.ts +6 -4
  213. package/src/react/queries/index.ts +1 -0
  214. package/src/react/queries/inventory.ts +36 -2
  215. package/src/react/queries/listBalances.ts +14 -30
  216. package/src/react/queries/listCollectibles.ts +60 -7
  217. package/src/react/queries/listCollections.ts +124 -0
  218. package/src/react/queries/listTokenMetadata.ts +6 -1
  219. package/src/react/queries/lowestListing.ts +6 -4
  220. package/src/react/queries/marketCurrencies.ts +81 -0
  221. package/src/react/queries/marketplaceConfig.ts +82 -79
  222. package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +122 -82
  223. package/src/react/ssr/__tests__/create-ssr-client.test.ts +0 -3
  224. package/src/react/ssr/create-ssr-client.ts +5 -10
  225. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +47 -13
  226. package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +1 -1
  227. package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +28 -15
  228. package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +1 -1
  229. package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +1 -1
  230. package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +1 -1
  231. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +78 -15
  232. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +1 -1
  233. package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +1 -1
  234. package/src/react/ui/components/marketplace-collectible-card/CollectibleCard.tsx +17 -0
  235. package/src/react/ui/components/marketplace-collectible-card/CollectibleCardSkeleton.tsx +24 -0
  236. package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +231 -0
  237. package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +76 -0
  238. package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +55 -0
  239. package/src/react/ui/components/marketplace-collectible-card/index.ts +3 -0
  240. package/src/react/ui/components/marketplace-collectible-card/types.ts +95 -0
  241. package/src/react/ui/components/marketplace-collectible-card/utils/formatPrice.ts +45 -0
  242. package/src/react/ui/components/marketplace-collectible-card/utils/index.ts +2 -0
  243. package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +39 -0
  244. package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +124 -0
  245. package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +105 -0
  246. package/src/react/ui/components/{collectible-card/media → media}/Media.tsx +52 -30
  247. package/src/react/ui/components/{collectible-card/media → media}/MediaSkeleton.tsx +1 -1
  248. package/src/react/ui/components/{collectible-card/media → media}/types.ts +4 -1
  249. package/src/react/ui/index.ts +5 -2
  250. package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +554 -0
  251. package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +385 -0
  252. package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +272 -0
  253. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx.bak +112 -0
  254. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +117 -13
  255. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +10 -7
  256. package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +157 -0
  257. package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +136 -0
  258. package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +184 -0
  259. package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +121 -0
  260. package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +85 -0
  261. package/src/react/ui/modals/BuyModal/components/ERC721ShopModal.tsx +86 -0
  262. package/src/react/ui/modals/BuyModal/components/Modal.tsx +14 -0
  263. package/src/react/ui/modals/BuyModal/components/types.ts +8 -0
  264. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +4 -4
  265. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +379 -0
  266. package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +253 -0
  267. package/src/react/ui/modals/BuyModal/hooks/__tests__/{useFees.test.tsx → useMarketPlatformFee.test.tsx} +37 -28
  268. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +62 -44
  269. package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +73 -0
  270. package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +196 -0
  271. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +74 -18
  272. package/src/react/ui/modals/BuyModal/hooks/useMarketPlatformFee.ts +53 -0
  273. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +27 -12
  274. package/src/react/ui/modals/BuyModal/store.ts +147 -13
  275. package/src/react/ui/modals/CreateListingModal/Modal.tsx +3 -5
  276. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +5 -3
  277. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +2 -1
  278. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +7 -5
  279. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +2 -3
  280. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +2 -1
  281. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +4 -3
  282. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +5 -3
  283. package/src/react/ui/modals/SellModal/Modal.tsx +0 -1
  284. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +4 -3
  285. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +8 -5
  286. package/src/react/ui/modals/SuccessfulPurchaseModal/__tests__/Modal.test.tsx +11 -7
  287. package/src/react/ui/modals/SuccessfulPurchaseModal/index.tsx +34 -28
  288. package/src/react/ui/modals/SuccessfulPurchaseModal/store.ts +71 -0
  289. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +0 -1
  290. package/src/react/ui/modals/TransferModal/index.tsx +0 -1
  291. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +0 -1
  292. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +105 -108
  293. package/src/react/ui/modals/_internal/components/actionModal/store.ts +45 -12
  294. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +2 -2
  295. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +7 -6
  296. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +13 -7
  297. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +3 -5
  298. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +5 -3
  299. package/src/react/ui/modals/_internal/components/switchChainModal/__tests__/SwitchChainModal.test.tsx +12 -8
  300. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +35 -33
  301. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +61 -32
  302. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
  303. package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +2 -12
  304. package/src/react/ui/modals/modal-provider.tsx +1 -1
  305. package/src/types/buyModalErrors.ts +438 -0
  306. package/src/types/index.ts +1 -3
  307. package/src/types/new-marketplace-types.ts +104 -0
  308. package/src/types/sdk-config.ts +22 -12
  309. package/src/types/types.ts +17 -0
  310. package/src/utils/_internal/error/transaction.ts +36 -1
  311. package/tsconfig.json +1 -1
  312. package/tsconfig.tsbuildinfo +1 -1
  313. package/tsdown.config.ts +25 -0
  314. package/.ctirc +0 -32
  315. package/dist/alien_swap-2B65TDGT.js.map +0 -1
  316. package/dist/aqua-xyz-WMYQLAIS.js.map +0 -1
  317. package/dist/aura-V22RV5OG.js.map +0 -1
  318. package/dist/blur-GE5QOMCM.js.map +0 -1
  319. package/dist/chunk-2PSNAIAT.js +0 -1
  320. package/dist/chunk-2PSNAIAT.js.map +0 -1
  321. package/dist/chunk-5C6ZZ6WX.js +0 -130
  322. package/dist/chunk-5C6ZZ6WX.js.map +0 -1
  323. package/dist/chunk-5O44EPXZ.js +0 -207
  324. package/dist/chunk-5O44EPXZ.js.map +0 -1
  325. package/dist/chunk-6CTFVBKU.js +0 -1
  326. package/dist/chunk-6CTFVBKU.js.map +0 -1
  327. package/dist/chunk-7F27CJZW.js +0 -1544
  328. package/dist/chunk-7F27CJZW.js.map +0 -1
  329. package/dist/chunk-A7BVFBWB.js +0 -81
  330. package/dist/chunk-A7BVFBWB.js.map +0 -1
  331. package/dist/chunk-D7RVSZAQ.js +0 -332
  332. package/dist/chunk-D7RVSZAQ.js.map +0 -1
  333. package/dist/chunk-DWTLVJAW.js +0 -42
  334. package/dist/chunk-DWTLVJAW.js.map +0 -1
  335. package/dist/chunk-FGM57QUU.js +0 -128
  336. package/dist/chunk-FGM57QUU.js.map +0 -1
  337. package/dist/chunk-FUM4OGOQ.js +0 -1027
  338. package/dist/chunk-FUM4OGOQ.js.map +0 -1
  339. package/dist/chunk-JKCF7HEA.js +0 -1
  340. package/dist/chunk-JKCF7HEA.js.map +0 -1
  341. package/dist/chunk-KTST7ORH.js +0 -53
  342. package/dist/chunk-KTST7ORH.js.map +0 -1
  343. package/dist/chunk-M6NJ73Y5.js +0 -154
  344. package/dist/chunk-M6NJ73Y5.js.map +0 -1
  345. package/dist/chunk-N7BPFK46.js +0 -1
  346. package/dist/chunk-N7BPFK46.js.map +0 -1
  347. package/dist/chunk-NX52D7NX.js +0 -135
  348. package/dist/chunk-NX52D7NX.js.map +0 -1
  349. package/dist/chunk-O34GCB47.js +0 -32
  350. package/dist/chunk-O34GCB47.js.map +0 -1
  351. package/dist/chunk-Q3ECVC4F.js +0 -811
  352. package/dist/chunk-Q3ECVC4F.js.map +0 -1
  353. package/dist/chunk-RVIUUJTP.js +0 -76
  354. package/dist/chunk-RVIUUJTP.js.map +0 -1
  355. package/dist/chunk-SXVUTSMT.js +0 -2895
  356. package/dist/chunk-SXVUTSMT.js.map +0 -1
  357. package/dist/chunk-UJSF7PSC.js +0 -5728
  358. package/dist/chunk-UJSF7PSC.js.map +0 -1
  359. package/dist/chunk-WH5BZC7W.js +0 -38
  360. package/dist/chunk-WH5BZC7W.js.map +0 -1
  361. package/dist/chunk-XX4EVWBF.js +0 -1292
  362. package/dist/chunk-XX4EVWBF.js.map +0 -1
  363. package/dist/chunk-Y2HJO2VY.js +0 -432
  364. package/dist/chunk-Y2HJO2VY.js.map +0 -1
  365. package/dist/chunk-Y63BOO6M.js +0 -11
  366. package/dist/chunk-Y63BOO6M.js.map +0 -1
  367. package/dist/coinbase-NLHJMGAP.js.map +0 -1
  368. package/dist/create-config-CAQcvjl6.d.ts +0 -8
  369. package/dist/element-2LGTYYSP.js.map +0 -1
  370. package/dist/foundation-BPN66ZTN.js.map +0 -1
  371. package/dist/get-query-client-D46hbjk6.d.ts +0 -5
  372. package/dist/index-MlUK9AQE.d.ts +0 -62
  373. package/dist/index.css.map +0 -1
  374. package/dist/index.js.map +0 -1
  375. package/dist/listTokenMetadata-DO4ChDjn.d.ts +0 -203
  376. package/dist/looks-rare-MZRSOPT4.js.map +0 -1
  377. package/dist/magic-eden-PUBL6KWW.js.map +0 -1
  378. package/dist/manifold-GA445YJ6.js.map +0 -1
  379. package/dist/marketplace.gen-DQzWciwC.d.ts +0 -1072
  380. package/dist/marketplaceConfig-D0MXemEl.d.ts +0 -17
  381. package/dist/mintify-UMC5PTKC.js.map +0 -1
  382. package/dist/nftx-AX3CY3IE.js.map +0 -1
  383. package/dist/okx-GNVLAE2R.js.map +0 -1
  384. package/dist/open-sea-KI43GVEB.js.map +0 -1
  385. package/dist/rarible-2J3MMZJ7.js.map +0 -1
  386. package/dist/react/_internal/api/index.js.map +0 -1
  387. package/dist/react/_internal/databeat/index.js.map +0 -1
  388. package/dist/react/_internal/index.js.map +0 -1
  389. package/dist/react/_internal/wagmi/index.js.map +0 -1
  390. package/dist/react/hooks/index.js.map +0 -1
  391. package/dist/react/hooks/options/index.js.map +0 -1
  392. package/dist/react/index.css +0 -2764
  393. package/dist/react/index.css.map +0 -1
  394. package/dist/react/index.js.map +0 -1
  395. package/dist/react/queries/index.js.map +0 -1
  396. package/dist/react/ui/components/collectible-card/index.css +0 -2764
  397. package/dist/react/ui/components/collectible-card/index.css.map +0 -1
  398. package/dist/react/ui/components/collectible-card/index.d.ts +0 -70
  399. package/dist/react/ui/components/collectible-card/index.js +0 -32
  400. package/dist/react/ui/components/collectible-card/index.js.map +0 -1
  401. package/dist/react/ui/components/marketplace-logos/index.js.map +0 -1
  402. package/dist/react/ui/icons/index.js.map +0 -1
  403. package/dist/react/ui/index.css +0 -2764
  404. package/dist/react/ui/index.css.map +0 -1
  405. package/dist/react/ui/index.js.map +0 -1
  406. package/dist/react/ui/modals/_internal/components/actionModal/index.js.map +0 -1
  407. package/dist/sdk-config-onSPBxJj.d.ts +0 -134
  408. package/dist/sequence-TGLUFEPQ.js.map +0 -1
  409. package/dist/services-CMSb9ipU.d.ts +0 -23
  410. package/dist/sudo-swap-M2O6E3TE.js.map +0 -1
  411. package/dist/super-rare-UU2U4LIN.js.map +0 -1
  412. package/dist/types/index.js.map +0 -1
  413. package/dist/types-B8xzPEKX.d.ts +0 -68
  414. package/dist/utils/abi/index.js.map +0 -1
  415. package/dist/utils/abi/marketplace/index.js.map +0 -1
  416. package/dist/utils/abi/primary-sale/index.js.map +0 -1
  417. package/dist/utils/abi/token/index.js.map +0 -1
  418. package/dist/utils/index.js.map +0 -1
  419. package/dist/x2y2-3W5BBMZC.js.map +0 -1
  420. package/dist/zora-6EY6FUH6.js.map +0 -1
  421. package/postcss.config.mjs +0 -5
  422. package/src/react/hooks/__tests__/__snapshots__/useRoyaltyPercentage.test.tsx.snap +0 -8
  423. package/src/react/hooks/useCurrencies.tsx +0 -77
  424. package/src/react/ui/components/collectible-card/CollectibleCard.tsx +0 -170
  425. package/src/react/ui/components/collectible-card/Footer.tsx +0 -157
  426. package/src/react/ui/components/collectible-card/__tests__/CollectibleCard.test.tsx +0 -94
  427. package/src/react/ui/components/collectible-card/__tests__/Footer.test.tsx +0 -136
  428. package/src/react/ui/components/collectible-card/__tests__/Media.test.tsx +0 -224
  429. package/src/react/ui/components/collectible-card/index.ts +0 -2
  430. package/src/react/ui/modals/BuyModal/ERC1155QuantityModal.tsx +0 -124
  431. package/src/react/ui/modals/BuyModal/Modal.tsx +0 -124
  432. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx +0 -104
  433. package/src/react/ui/modals/BuyModal/hooks/useFees.ts +0 -38
  434. package/src/react/ui/modals/SuccessfulPurchaseModal/_store.ts +0 -72
  435. package/tsup.config.ts +0 -23
  436. /package/src/react/ui/components/{collectible-card/media → media}/utils.ts +0 -0
@@ -0,0 +1,157 @@
1
+ import { useMemo } from 'react';
2
+
3
+ import type { Address } from 'viem';
4
+ import { useAccount } from 'wagmi';
5
+ import { OrderSide } from '../../types';
6
+ import type {
7
+ CollectibleCardAction,
8
+ CollectibleOrder,
9
+ ContractType,
10
+ Order,
11
+ OrderbookKind,
12
+ PropertyFilter,
13
+ } from '../../types';
14
+ import type { MarketCollectibleCardProps } from '../ui/components/marketplace-collectible-card/types';
15
+ import { useSellModal } from '../ui/modals/SellModal';
16
+ import { useCollectionBalanceDetails } from './useCollectionBalanceDetails';
17
+ import { useListCollectibles } from './useListCollectibles';
18
+
19
+ interface UseListMarketCardDataProps {
20
+ collectionAddress: Address;
21
+ chainId: number;
22
+ orderbookKind: OrderbookKind;
23
+ collectionType: ContractType;
24
+ filterOptions?: PropertyFilter[];
25
+ searchText?: string;
26
+ showListedOnly?: boolean;
27
+ onCollectibleClick?: (tokenId: string) => void;
28
+ onCannotPerformAction?: (action: CollectibleCardAction) => void;
29
+ prioritizeOwnerActions?: boolean;
30
+ assetSrcPrefixUrl?: string;
31
+ }
32
+
33
+ export function useListMarketCardData({
34
+ collectionAddress,
35
+ chainId,
36
+ orderbookKind,
37
+ collectionType,
38
+ filterOptions,
39
+ searchText,
40
+ showListedOnly = false,
41
+ onCollectibleClick,
42
+ onCannotPerformAction,
43
+ prioritizeOwnerActions,
44
+ assetSrcPrefixUrl,
45
+ }: UseListMarketCardDataProps) {
46
+ const { address: accountAddress } = useAccount();
47
+ const { show: showSellModal } = useSellModal();
48
+
49
+ // Get collectibles with listings
50
+ const {
51
+ data: collectiblesList,
52
+ isLoading: collectiblesListIsLoading,
53
+ fetchNextPage,
54
+ hasNextPage,
55
+ isFetchingNextPage,
56
+ error: collectiblesListError,
57
+ } = useListCollectibles({
58
+ collectionAddress,
59
+ chainId,
60
+ side: OrderSide.listing,
61
+ filter: {
62
+ includeEmpty: !showListedOnly,
63
+ searchText,
64
+ properties: filterOptions,
65
+ },
66
+ query: {
67
+ enabled: !!collectionAddress && !!chainId,
68
+ },
69
+ });
70
+
71
+ // Get user balances for this collection
72
+ const { data: collectionBalance, isLoading: balanceLoading } =
73
+ useCollectionBalanceDetails({
74
+ chainId,
75
+ filter: {
76
+ accountAddresses: accountAddress ? [accountAddress] : [],
77
+ omitNativeBalances: true,
78
+ contractWhitelist: [collectionAddress],
79
+ },
80
+ query: {
81
+ enabled: !!accountAddress,
82
+ },
83
+ });
84
+
85
+ // Flatten all collectibles from all pages
86
+ const allCollectibles = useMemo(() => {
87
+ if (!collectiblesList?.pages) return [];
88
+ return collectiblesList.pages.flatMap((page) => page.collectibles);
89
+ }, [collectiblesList?.pages]);
90
+
91
+ // Generate card props for each collectible
92
+ const collectibleCards = useMemo(() => {
93
+ return allCollectibles.map((collectible: CollectibleOrder) => {
94
+ const balance = collectionBalance?.balances.find(
95
+ (balance) => balance.tokenID === collectible.metadata.tokenId,
96
+ )?.balance;
97
+
98
+ const cardProps: MarketCollectibleCardProps = {
99
+ collectibleId: collectible.metadata.tokenId,
100
+ chainId,
101
+ collectionAddress,
102
+ collectionType,
103
+ cardLoading: collectiblesListIsLoading || balanceLoading,
104
+ marketplaceType: 'market',
105
+ orderbookKind,
106
+ collectible,
107
+ onCollectibleClick,
108
+ balance,
109
+ balanceIsLoading: balanceLoading,
110
+ onCannotPerformAction,
111
+ prioritizeOwnerActions,
112
+ assetSrcPrefixUrl,
113
+ onOfferClick: ({ order }) => {
114
+ if (!accountAddress) return;
115
+
116
+ if (balance) {
117
+ showSellModal({
118
+ chainId,
119
+ collectionAddress,
120
+ tokenId: collectible.metadata.tokenId,
121
+ order: order as Order,
122
+ });
123
+ return;
124
+ }
125
+ },
126
+ };
127
+
128
+ return cardProps;
129
+ });
130
+ }, [
131
+ allCollectibles,
132
+ chainId,
133
+ collectionAddress,
134
+ collectionType,
135
+ collectiblesListIsLoading,
136
+ balanceLoading,
137
+ orderbookKind,
138
+ onCollectibleClick,
139
+ collectionBalance?.balances,
140
+ onCannotPerformAction,
141
+ prioritizeOwnerActions,
142
+ assetSrcPrefixUrl,
143
+ accountAddress,
144
+ showSellModal,
145
+ ]);
146
+
147
+ return {
148
+ collectibleCards,
149
+ isLoading: collectiblesListIsLoading || balanceLoading,
150
+ error: collectiblesListError,
151
+
152
+ hasNextPage,
153
+ isFetchingNextPage,
154
+ fetchNextPage,
155
+ allCollectibles,
156
+ };
157
+ }
@@ -30,13 +30,14 @@ const fetchListOffersForCollectible = async (
30
30
  args: UseListOffersForCollectibleArgs,
31
31
  ) => {
32
32
  const arg = {
33
+ chainId: String(args.chainId),
33
34
  contractAddress: args.collectionAddress,
34
35
  tokenId: args.collectibleId,
35
36
  filter: args.filter,
36
37
  page: args.page,
37
38
  } satisfies ListOffersForCollectibleArgs;
38
39
 
39
- const marketplaceClient = getMarketplaceClient(args.chainId, config);
40
+ const marketplaceClient = getMarketplaceClient(config);
40
41
  return marketplaceClient.listCollectibleOffers(arg);
41
42
  };
42
43
 
@@ -0,0 +1,42 @@
1
+ import { queryOptions, useQuery } from '@tanstack/react-query';
2
+ import type { SdkConfig } from '../../types';
3
+ import {
4
+ type ListPrimarySaleItemsArgs,
5
+ getMarketplaceClient,
6
+ } from '../_internal';
7
+ import { useConfig } from './useConfig';
8
+
9
+ type UseListPrimarySaleItemsArgs = Omit<ListPrimarySaleItemsArgs, 'chainId'> & {
10
+ chainId: number;
11
+ };
12
+
13
+ const fetchListPrimarySaleItems = async (
14
+ config: SdkConfig,
15
+ args: UseListPrimarySaleItemsArgs,
16
+ ) => {
17
+ const arg = {
18
+ chainId: String(args.chainId),
19
+ primarySaleContractAddress: args.primarySaleContractAddress,
20
+ filter: args.filter,
21
+ page: args.page,
22
+ } satisfies ListPrimarySaleItemsArgs;
23
+
24
+ const marketplaceClient = getMarketplaceClient(config);
25
+ return marketplaceClient.listPrimarySaleItems(arg);
26
+ };
27
+
28
+ export const listPrimarySaleItemsOptions = (
29
+ args: UseListPrimarySaleItemsArgs,
30
+ config: SdkConfig,
31
+ ) => {
32
+ return queryOptions({
33
+ queryKey: ['primarySaleItems', args, config],
34
+ queryFn: () => fetchListPrimarySaleItems(config, args),
35
+ });
36
+ };
37
+
38
+ export const useListPrimarySaleItems = (args: UseListPrimarySaleItemsArgs) => {
39
+ const config = useConfig();
40
+
41
+ return useQuery(listPrimarySaleItemsOptions(args, config));
42
+ };
@@ -0,0 +1,8 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { type UseMarketCurrenciesArgs, currenciesOptions } from '../queries';
3
+ import { useConfig } from './useConfig';
4
+
5
+ export const useMarketCurrencies = (args: UseMarketCurrenciesArgs) => {
6
+ const config = useConfig();
7
+ return useQuery(currenciesOptions(args, config));
8
+ };
@@ -2,8 +2,6 @@ import { useQuery } from '@tanstack/react-query';
2
2
  import { marketplaceConfigOptions } from '../queries/marketplaceConfig';
3
3
  import { useConfig } from './useConfig';
4
4
 
5
- export * from '../queries/marketplaceConfig';
6
-
7
5
  export const useMarketplaceConfig = () => {
8
6
  const config = useConfig();
9
7
  return useQuery(marketplaceConfigOptions(config));
@@ -0,0 +1,134 @@
1
+ import { useQuery } from '@tanstack/react-query';
2
+ import { getUnixTime } from 'date-fns';
3
+ import type { Address } from 'viem';
4
+ import { useReadContracts } from 'wagmi';
5
+ import { ERC1155_SALES_CONTRACT_ABI } from '../..';
6
+ import { getIndexerClient } from '../_internal';
7
+ import { useConfig } from './useConfig';
8
+
9
+ interface useTokenSaleDetailsBatch {
10
+ tokenIds: string[];
11
+ salesContractAddress: Address;
12
+ collectionAddress: Address;
13
+ chainId: number;
14
+ query?: {
15
+ enabled?: boolean;
16
+ };
17
+ }
18
+
19
+ export function useTokenSaleDetailsBatch({
20
+ tokenIds,
21
+ salesContractAddress,
22
+ chainId,
23
+ collectionAddress,
24
+ query,
25
+ }: useTokenSaleDetailsBatch) {
26
+ const config = useConfig();
27
+ const indexerClient = getIndexerClient(chainId, config);
28
+
29
+ const getReadContractsArgs = (tokenIds: string[]) =>
30
+ tokenIds.map((tokenId) => ({
31
+ address: salesContractAddress,
32
+ abi: ERC1155_SALES_CONTRACT_ABI,
33
+ functionName: 'tokenSaleDetails',
34
+ args: [tokenId],
35
+ chainId,
36
+ }));
37
+
38
+ const {
39
+ data: tokenSaleDetails,
40
+ isLoading: tokenSaleDetailsLoading,
41
+ error: tokenSaleDetailsError,
42
+ } = useReadContracts({
43
+ batchSize: 500_000, // Node gateway limit has a limit of 512kB, setting it to 500kB to be safe
44
+ contracts: getReadContractsArgs(tokenIds),
45
+ query: {
46
+ enabled: query?.enabled,
47
+ },
48
+ });
49
+
50
+ // Query token supplies individually using the indexer client:
51
+ /*
52
+ This way, if token 4 isn't minted, we can still get the supply information for tokens 0-3, and just treat token 4's supply as 0 (unminted).
53
+ The problem is essentially that one unminted token was poisoning the entire response when querying all tokens at once.
54
+ */
55
+ const {
56
+ data: tokenSupplies,
57
+ isLoading: tokenSuppliesLoading,
58
+ error: tokenSuppliesError,
59
+ } = useQuery({
60
+ queryKey: ['token-supplies-batch', chainId, collectionAddress, tokenIds],
61
+ queryFn: async () => {
62
+ const supplies = await Promise.all(
63
+ tokenIds.map(async (tokenId) => {
64
+ try {
65
+ const result = await indexerClient.getTokenSuppliesMap({
66
+ tokenMap: {
67
+ [collectionAddress]: [tokenId],
68
+ },
69
+ includeMetadata: false,
70
+ });
71
+ const supply = result.supplies?.[collectionAddress]?.find(
72
+ (s) => s.tokenID === tokenId,
73
+ );
74
+ return {
75
+ tokenId,
76
+ supply: supply ? Number(supply.supply) : 0,
77
+ error: null,
78
+ };
79
+ } catch (error) {
80
+ return {
81
+ tokenId,
82
+ supply: 0,
83
+ error,
84
+ };
85
+ }
86
+ }),
87
+ );
88
+ return supplies;
89
+ },
90
+ enabled: query?.enabled,
91
+ });
92
+
93
+ const extendedSupplyData = (tokenSaleDetails || [])
94
+ .map((data, index) => ({
95
+ ...data,
96
+ tokenId: tokenIds[index],
97
+ }))
98
+ .filter((data) => data.status === 'success')
99
+ .filter((data) => {
100
+ if (typeof data.result !== 'object') return false;
101
+ const now = BigInt(getUnixTime(new Date()));
102
+ return data.result.endTime > now && data.result.startTime < now;
103
+ });
104
+
105
+ const getInitialSupply = (tokenId: string): number | undefined => {
106
+ const found = extendedSupplyData.find((data) => data.tokenId === tokenId);
107
+ if (!found || typeof found.result !== 'object' || found.result === null)
108
+ return undefined;
109
+ const supply = found.result.supplyCap;
110
+ if (supply === undefined) return undefined;
111
+ // https://github.com/0xsequence/contracts-library/blob/ead1baf34270c76260d01cfc130bb7cc9d57518e/src/tokens/ERC1155/utility/sale/IERC1155Sale.sol#L8
112
+ // 0 means infinite
113
+ if (supply === 0n) return Number.POSITIVE_INFINITY;
114
+ return Number(supply);
115
+ };
116
+
117
+ const getRemainingSupply = (tokenId: string): number | undefined => {
118
+ const initialSupply = getInitialSupply(tokenId);
119
+ if (!initialSupply) return undefined;
120
+
121
+ const supplyData = tokenSupplies?.find((s) => s.tokenId === tokenId);
122
+ if (!supplyData || supplyData.error) return initialSupply; // If no supply data or error, assume nothing is minted
123
+
124
+ return initialSupply - supplyData.supply;
125
+ };
126
+
127
+ return {
128
+ extendedSupplyData,
129
+ getInitialSupply,
130
+ getRemainingSupply,
131
+ loading: tokenSuppliesLoading || tokenSaleDetailsLoading,
132
+ error: tokenSuppliesError || tokenSaleDetailsError,
133
+ };
134
+ }
@@ -8,7 +8,7 @@ import {
8
8
  } from '../_internal';
9
9
 
10
10
  export interface UseHighestOfferArgs
11
- extends Omit<GetCollectibleHighestOfferArgs, 'contractAddress'> {
11
+ extends Omit<GetCollectibleHighestOfferArgs, 'contractAddress' | 'chainId'> {
12
12
  collectionAddress: Address;
13
13
  chainId: number;
14
14
  query?: {
@@ -20,11 +20,13 @@ export async function fetchHighestOffer(
20
20
  args: UseHighestOfferArgs,
21
21
  config: SdkConfig,
22
22
  ) {
23
- const marketplaceClient = getMarketplaceClient(args.chainId, config);
23
+ const marketplaceClient = getMarketplaceClient(config);
24
24
 
25
+ const { chainId, collectionAddress, tokenId } = args;
25
26
  const data = await marketplaceClient.getCollectibleHighestOffer({
26
- contractAddress: args.collectionAddress,
27
- ...args,
27
+ chainId: String(chainId),
28
+ contractAddress: collectionAddress,
29
+ tokenId,
28
30
  });
29
31
 
30
32
  // let order: Order | undefined;
@@ -6,3 +6,4 @@ export * from './highestOffer';
6
6
  export * from './listBalances';
7
7
  export * from './lowestListing';
8
8
  export * from './listTokenMetadata';
9
+ export * from './marketCurrencies';
@@ -9,9 +9,11 @@ import { OrderSide, type Page, type SdkConfig } from '../../types';
9
9
  import {
10
10
  type CollectibleOrder,
11
11
  type ContractType,
12
+ LaosAPI,
12
13
  getIndexerClient,
13
14
  } from '../_internal';
14
15
  import { fetchCollectibles } from './listCollectibles';
16
+ import { fetchMarketplaceConfig } from './marketplaceConfig';
15
17
 
16
18
  export interface UseInventoryArgs {
17
19
  accountAddress: Address;
@@ -82,7 +84,7 @@ function collectibleFromTokenBalance(
82
84
  audio: token.tokenMetadata?.audio,
83
85
  },
84
86
  contractInfo: token.contractInfo,
85
- contractType: token.contractType as
87
+ contractType: token.contractType as unknown as
86
88
  | ContractType.ERC1155
87
89
  | ContractType.ERC721,
88
90
  balance: token.balance,
@@ -95,7 +97,37 @@ async function fetchAllIndexerTokens(
95
97
  collectionAddress: Address,
96
98
  config: SdkConfig,
97
99
  state: InventoryState,
100
+ isLaos721: boolean,
98
101
  ): Promise<void> {
102
+ if (isLaos721) {
103
+ const laosClient = new LaosAPI();
104
+ const { balances } = await laosClient.getTokenBalances({
105
+ chainId: chainId.toString(),
106
+ accountAddress,
107
+ includeMetadata: true,
108
+ page: {
109
+ sort: [
110
+ {
111
+ column: 'CREATED_AT',
112
+ order: 'DESC',
113
+ },
114
+ ],
115
+ },
116
+ });
117
+
118
+ for (const balance of balances) {
119
+ if (balance.tokenID) {
120
+ state.indexerTokenBalances.set(
121
+ balance.tokenID,
122
+ collectibleFromTokenBalance(balance),
123
+ );
124
+ }
125
+ }
126
+
127
+ state.indexerTokensFetched = true;
128
+ return;
129
+ }
130
+
99
131
  const indexerClient = getIndexerClient(chainId, config);
100
132
 
101
133
  let page: IndexerPage = {
@@ -216,6 +248,7 @@ export async function fetchInventory(
216
248
  collectionAddress,
217
249
  config,
218
250
  state,
251
+ isLaos721,
219
252
  );
220
253
  }
221
254
 
@@ -225,6 +258,7 @@ export async function fetchInventory(
225
258
  }
226
259
 
227
260
  // Fetch collectibles from marketplace API
261
+ const marketplaceConfig = await fetchMarketplaceConfig({ config });
228
262
  const collectibles = await fetchCollectibles(
229
263
  {
230
264
  chainId,
@@ -234,9 +268,9 @@ export async function fetchInventory(
234
268
  includeEmpty: true,
235
269
  },
236
270
  side: OrderSide.listing,
237
- isLaos721,
238
271
  },
239
272
  config,
273
+ marketplaceConfig,
240
274
  page,
241
275
  );
242
276
 
@@ -2,7 +2,7 @@ import type { GetTokenBalancesReturn, Page } from '@0xsequence/indexer';
2
2
  import { infiniteQueryOptions } from '@tanstack/react-query';
3
3
  import type { Hex } from 'viem';
4
4
  import type { SdkConfig } from '../../types';
5
- import { balanceQueries, getIndexerClient } from '../_internal';
5
+ import { LaosAPI, balanceQueries, getIndexerClient } from '../_internal';
6
6
 
7
7
  export type UseListBalancesArgs = {
8
8
  chainId: number;
@@ -29,37 +29,21 @@ export async function fetchBalances(
29
29
  config: SdkConfig,
30
30
  page: Page,
31
31
  ): Promise<GetTokenBalancesReturn> {
32
- if (args.isLaos721) {
33
- const response = await fetch(
34
- 'https://extensions.api.laosnetwork.io/token/GetTokenBalances',
35
- {
36
- method: 'POST',
37
- headers: {
38
- 'Content-Type': 'application/json',
39
- },
40
- body: JSON.stringify({
41
- chainId: args.chainId.toString(),
42
- accountAddress: args.accountAddress,
43
- contractAddress: args.contractAddress,
44
- includeMetadata: args.includeMetadata ?? true,
45
- page: {
46
- sort: [
47
- {
48
- column: 'CREATED_AT',
49
- order: 'DESC',
50
- },
51
- ],
32
+ if (args.isLaos721 && args.accountAddress) {
33
+ const laosClient = new LaosAPI();
34
+ return laosClient.getTokenBalances({
35
+ chainId: args.chainId.toString(),
36
+ accountAddress: args.accountAddress,
37
+ includeMetadata: args.includeMetadata,
38
+ page: {
39
+ sort: [
40
+ {
41
+ column: 'CREATED_AT',
42
+ order: 'DESC',
52
43
  },
53
- }),
44
+ ],
54
45
  },
55
- );
56
-
57
- if (!response.ok) {
58
- throw new Error(`Laos API request failed with status ${response.status}`);
59
- }
60
-
61
- // TODO: This is pretty unsafe, we should validate the response
62
- return response.json() as Promise<GetTokenBalancesReturn>;
46
+ });
63
47
  }
64
48
 
65
49
  const indexerClient = getIndexerClient(args.chainId, config);
@@ -1,20 +1,29 @@
1
1
  import { infiniteQueryOptions } from '@tanstack/react-query';
2
2
  import type { Address, Hex } from 'viem';
3
- import type { Page, SdkConfig } from '../../types';
3
+ import type { MarketplaceConfig, Page, SdkConfig } from '../../types';
4
+ import type { MarketplaceType } from '../../types/types';
5
+ import { compareAddress } from '../../utils';
4
6
  import type {
5
- CollectibleOrder,
6
7
  CollectiblesFilter,
7
8
  ListCollectiblesArgs,
8
9
  ListCollectiblesReturn,
9
10
  } from '../_internal';
10
- import { OrderSide, collectableKeys, getMarketplaceClient } from '../_internal';
11
+ import {
12
+ type CollectibleOrder,
13
+ OrderSide,
14
+ collectableKeys,
15
+ getMarketplaceClient,
16
+ } from '../_internal';
17
+ import { fetchMarketplaceConfig } from '../queries/marketplaceConfig';
11
18
  import { type UseListBalancesArgs, fetchBalances } from './listBalances';
19
+
12
20
  export type UseListCollectiblesArgs = {
13
21
  collectionAddress: Hex;
14
22
  chainId: number;
15
23
  side: OrderSide;
16
24
  filter?: CollectiblesFilter;
17
25
  isLaos721?: boolean;
26
+ marketplaceType?: MarketplaceType;
18
27
  query?: {
19
28
  enabled?: boolean;
20
29
  };
@@ -31,16 +40,56 @@ export type UseListCollectiblesArgs = {
31
40
  export async function fetchCollectibles(
32
41
  args: UseListCollectiblesArgs,
33
42
  config: SdkConfig,
43
+ marketplaceConfig: MarketplaceConfig,
34
44
  page: Page,
35
45
  ): Promise<ListCollectiblesReturn> {
36
- const marketplaceClient = getMarketplaceClient(args.chainId, config);
46
+ const marketplaceClient = getMarketplaceClient(config);
47
+ const { chainId, collectionAddress, ...restArgs } = args;
37
48
  const parsedArgs = {
38
- ...args,
39
- contractAddress: args.collectionAddress,
49
+ ...restArgs,
50
+ chainId: String(chainId),
51
+ contractAddress: collectionAddress,
40
52
  page: page,
41
53
  side: args.side,
42
54
  } satisfies ListCollectiblesArgs;
43
55
 
56
+ if (args.marketplaceType === 'shop') {
57
+ const shopCollection = marketplaceConfig.shop.collections.find(
58
+ (collection) =>
59
+ compareAddress(collection.itemsAddress, args.collectionAddress),
60
+ );
61
+
62
+ if (!shopCollection) {
63
+ return { collectibles: [] };
64
+ }
65
+
66
+ const primarySaleItemsList = await marketplaceClient.listPrimarySaleItems(
67
+ {
68
+ chainId: args.chainId.toString(),
69
+ primarySaleContractAddress: shopCollection.saleAddress as Address,
70
+ },
71
+ marketplaceConfig,
72
+ );
73
+
74
+ return {
75
+ collectibles: primarySaleItemsList.primarySaleItems.map((item) => ({
76
+ metadata: item.metadata,
77
+ primarySale: {
78
+ price: {
79
+ amount: item.primarySaleItem.priceAmount,
80
+ formatted: item.primarySaleItem.priceAmountFormatted,
81
+ decimals: item.primarySaleItem.priceDecimals,
82
+ currencyAddress: item.primarySaleItem.currencyAddress,
83
+ },
84
+ startDate: item.primarySaleItem.startDate,
85
+ endDate: item.primarySaleItem.endDate,
86
+ supplyCap: item.primarySaleItem.supplyCap,
87
+ itemType: item.primarySaleItem.itemType,
88
+ },
89
+ })),
90
+ };
91
+ }
92
+
44
93
  if (args.isLaos721 && args.side === OrderSide.listing) {
45
94
  try {
46
95
  const fetchBalancesArgs = {
@@ -80,6 +129,7 @@ export async function fetchCollectibles(
80
129
  console.error(error);
81
130
  }
82
131
  }
132
+
83
133
  return await marketplaceClient.listCollectibles(parsedArgs);
84
134
  }
85
135
 
@@ -97,7 +147,10 @@ export function listCollectiblesOptions(
97
147
  return infiniteQueryOptions({
98
148
  ...args.query,
99
149
  queryKey: [...collectableKeys.lists, args, config],
100
- queryFn: ({ pageParam }) => fetchCollectibles(args, config, pageParam),
150
+ queryFn: async ({ pageParam }) => {
151
+ const marketplaceConfig = await fetchMarketplaceConfig({ config });
152
+ return fetchCollectibles(args, config, marketplaceConfig, pageParam);
153
+ },
101
154
  initialPageParam: { page: 1, pageSize: 30 } as Page,
102
155
  getNextPageParam: (lastPage) =>
103
156
  lastPage.page?.more ? lastPage.page : undefined,