@0xsequence/marketplace-sdk 0.9.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/ConnectionStatus.tsx +289 -0
- package/.storybook/main.ts +82 -0
- package/.storybook/preview.tsx +106 -0
- package/.storybook/vitest.setup.ts +6 -0
- package/CHANGELOG.md +135 -8
- package/compile-tailwind.js +54 -0
- package/dist/{CalendarIcon-DbQ7Vxcw.js → BellIcon-Cb9YEUzJ.js} +27 -27
- package/dist/BellIcon-Cb9YEUzJ.js.map +1 -0
- package/dist/CollectibleCard-CYyWzk6u.d.ts +8 -0
- package/dist/{_internal-BgWcRIak.js → _internal-DslqcNC1.js} +1 -1
- package/dist/{_internal-BgWcRIak.js.map → _internal-DslqcNC1.js.map} +1 -1
- package/dist/{alien_swap-B_76IMma.js → alien_swap-DJ98gZQp.js} +1 -1
- package/dist/{alien_swap-B_76IMma.js.map → alien_swap-DJ98gZQp.js.map} +1 -1
- package/dist/{api-DTIan01C.js → api-BmEQfSQa.js} +17 -14
- package/dist/api-BmEQfSQa.js.map +1 -0
- package/dist/{aqua-xyz-CMN_TFY5.js → aqua-xyz-n1PcCCZ0.js} +1 -1
- package/dist/{aqua-xyz-CMN_TFY5.js.map → aqua-xyz-n1PcCCZ0.js.map} +1 -1
- package/dist/{aura-Cye_TuHj.js → aura-Bevk_YkS.js} +1 -1
- package/dist/{aura-Cye_TuHj.js.map → aura-Bevk_YkS.js.map} +1 -1
- package/dist/{blur-DWDMyMpK.js → blur-B5sHErx5.js} +1 -1
- package/dist/{blur-DWDMyMpK.js.map → blur-B5sHErx5.js.map} +1 -1
- package/dist/builder-api-BFuZNOaN.js.map +1 -1
- package/dist/builder.gen-B9wR2nvF.js.map +1 -1
- package/dist/{coinbase-ByA_XRB0.js → coinbase-D30W-lxA.js} +1 -1
- package/dist/{coinbase-ByA_XRB0.js.map → coinbase-D30W-lxA.js.map} +1 -1
- package/dist/contracts-DPHFT2TA.js +97 -0
- package/dist/contracts-DPHFT2TA.js.map +1 -0
- package/dist/{wagmi-CDzEQbfk.js → create-config-6uynwTeb.js} +20 -10
- package/dist/create-config-6uynwTeb.js.map +1 -0
- package/dist/{new-marketplace-types-Bfis0U4J.d.ts → create-config-lLSrnkbb.d.ts} +554 -166
- package/dist/{element-b77CyXIZ.js → element-C2NJexro.js} +1 -1
- package/dist/{element-b77CyXIZ.js.map → element-C2NJexro.js.map} +1 -1
- package/dist/filters-B8XS4tFH.d.ts +31 -0
- package/dist/{foundation-DbOrKP9Y.js → foundation-QgY1lvUj.js} +1 -1
- package/dist/{foundation-DbOrKP9Y.js.map → foundation-QgY1lvUj.js.map} +1 -1
- package/dist/index-BGJXqdg6.d.ts +131 -0
- package/dist/index-BuY_NKSX.d.ts +222 -0
- package/dist/{index-21LE7OhL.d.ts → index-ByW08-Z7.d.ts} +6 -3
- package/dist/index-C7xKVIr4.d.ts +447 -0
- package/dist/index-CIkpYltz.d.ts +61 -0
- package/dist/index-CQnGIGb5.d.ts +346 -0
- package/dist/{index-DaE5ZNHb.d.ts → index-CY5UEX4h.d.ts} +5 -5
- package/dist/{index-DXMfTZ1F.d.ts → index-ChSKFOMx.d.ts} +1 -1
- package/dist/{index-D5v5iluA.d.ts → index-CtF7EE2z.d.ts} +1 -1
- package/dist/index-D2HohSwO.d.ts +293 -0
- package/dist/index-D71J5Ghd.d.ts +813 -0
- package/dist/{index-ByznONYE.d.ts → index-DNU9xoGK.d.ts} +28 -64
- package/dist/index-DX0Vm8HY.d.ts +2541 -0
- package/dist/index-DonXiSg2.d.ts +902 -0
- package/dist/index-Dpyp7fQz.d.ts +298 -0
- package/dist/index-PSPpUxCE.d.ts +18 -0
- package/dist/{index-BL9RUSEK.d.ts → index-QxxS6f9r.d.ts} +1 -1
- package/dist/index-ThUIs-Sy.d.ts +306 -0
- package/dist/index.d.ts +8 -10
- package/dist/index.js +12 -9
- package/dist/listCollectiblesPaginated--AgXjajA.d.ts +166 -0
- package/dist/listCollections-Bbzbz7qW.d.ts +624 -0
- package/dist/{looks-rare-C1VqNcSM.js → looks-rare-CMVPny4v.js} +1 -1
- package/dist/{looks-rare-C1VqNcSM.js.map → looks-rare-CMVPny4v.js.map} +1 -1
- package/dist/lowestListing-BQHfQpfg.d.ts +144 -0
- package/dist/{magic-eden-ea_AGCZr.js → magic-eden-IrWp2ZXk.js} +1 -1
- package/dist/{magic-eden-ea_AGCZr.js.map → magic-eden-IrWp2ZXk.js.map} +1 -1
- package/dist/{manifold-8y8J2sjT.js → manifold-DeOE-p2G.js} +1 -1
- package/dist/{manifold-8y8J2sjT.js.map → manifold-DeOE-p2G.js.map} +1 -1
- package/dist/marketCurrencies-CmOMCCOr.d.ts +122 -0
- package/dist/{marketplace-nwnZv9Cb.js → marketplace-B5Z8G03R.js} +1 -1
- package/dist/{marketplace-nwnZv9Cb.js.map → marketplace-B5Z8G03R.js.map} +1 -1
- package/dist/{marketplace-logos-CSeGcPW4.js → marketplace-logos-D8t86gsW.js} +21 -21
- package/dist/{marketplace-logos-CSeGcPW4.js.map → marketplace-logos-D8t86gsW.js.map} +1 -1
- package/dist/{marketplace.gen-BSDIX7NZ.js → marketplace.gen-JzNYpM0U.js} +3 -3
- package/dist/marketplace.gen-JzNYpM0U.js.map +1 -0
- package/dist/{marketplaceConfig-C6X1SUik.js → marketplaceConfig-sNh-MA5M.js} +15 -4
- package/dist/marketplaceConfig-sNh-MA5M.js.map +1 -0
- package/dist/{mintify-LA68TzWg.js → mintify-DG3GrljJ.js} +1 -1
- package/dist/{mintify-LA68TzWg.js.map → mintify-DG3GrljJ.js.map} +1 -1
- package/dist/network-DnBEe1Ur.js +15 -0
- package/dist/network-DnBEe1Ur.js.map +1 -0
- package/dist/{nftx-D3Tc8nzd.js → nftx-B3LH-ZYM.js} +1 -1
- package/dist/{nftx-D3Tc8nzd.js.map → nftx-B3LH-ZYM.js.map} +1 -1
- package/dist/{okx-hbqg6oIJ.js → okx-CRFLrT3Z.js} +1 -1
- package/dist/{okx-hbqg6oIJ.js.map → okx-CRFLrT3Z.js.map} +1 -1
- package/dist/{open-sea-BccuK8-t.js → open-sea-cOpfl366.js} +1 -1
- package/dist/{open-sea-BccuK8-t.js.map → open-sea-cOpfl366.js.map} +1 -1
- package/dist/primary-sale-CLjXRrDj.js +3048 -0
- package/dist/primary-sale-CLjXRrDj.js.map +1 -0
- package/dist/queries-BYT4GJw3.js +1478 -0
- package/dist/queries-BYT4GJw3.js.map +1 -0
- package/dist/query-BTe7Wkrs.d.ts +31 -0
- package/dist/{rarible-BgTwwj9g.js → rarible-guwUx4cn.js} +1 -1
- package/dist/{rarible-BgTwwj9g.js.map → rarible-guwUx4cn.js.map} +1 -1
- package/dist/react/_internal/api/index.d.ts +2 -4
- package/dist/react/_internal/api/index.js +5 -4
- package/dist/react/_internal/databeat/index.d.ts +2 -73
- package/dist/react/_internal/databeat/index.js +21 -18
- package/dist/react/_internal/index.d.ts +2 -7
- package/dist/react/_internal/index.js +8 -6
- package/dist/react/_internal/wagmi/index.d.ts +2 -4
- package/dist/react/_internal/wagmi/index.js +4 -3
- package/dist/react/hooks/config/index.d.ts +9 -0
- package/dist/react/hooks/config/index.js +26 -0
- package/dist/react/hooks/contracts/index.d.ts +7 -0
- package/dist/react/hooks/contracts/index.js +16 -0
- package/dist/react/hooks/data/collectibles/index.d.ts +5 -0
- package/dist/react/hooks/data/collectibles/index.js +26 -0
- package/dist/react/hooks/data/collections/index.d.ts +11 -0
- package/dist/react/hooks/data/collections/index.js +26 -0
- package/dist/react/hooks/data/index.d.ts +29 -0
- package/dist/react/hooks/data/index.js +26 -0
- package/dist/react/hooks/data/inventory/index.d.ts +29 -0
- package/dist/react/hooks/data/inventory/index.js +26 -0
- package/dist/react/hooks/data/market/index.d.ts +12 -0
- package/dist/react/hooks/data/market/index.js +26 -0
- package/dist/react/hooks/data/orders/index.d.ts +11 -0
- package/dist/react/hooks/data/orders/index.js +26 -0
- package/dist/react/hooks/data/primary-sales/index.d.ts +29 -0
- package/dist/react/hooks/data/primary-sales/index.js +26 -0
- package/dist/react/hooks/data/tokens/index.d.ts +5 -0
- package/dist/react/hooks/data/tokens/index.js +26 -0
- package/dist/react/hooks/index.d.ts +29 -18
- package/dist/react/hooks/index.js +22 -19
- package/dist/react/hooks/transactions/index.d.ts +3 -0
- package/dist/react/hooks/transactions/index.js +26 -0
- package/dist/react/hooks/ui/index.d.ts +5 -0
- package/dist/react/hooks/ui/index.js +26 -0
- package/dist/react/hooks/utils/index.d.ts +29 -0
- package/dist/react/hooks/utils/index.js +26 -0
- package/dist/react/index.d.ts +29 -18
- package/dist/react/index.js +22 -19
- package/dist/react/queries/index.d.ts +16 -8
- package/dist/react/queries/index.js +17 -15
- package/dist/react/ssr/index.d.ts +7 -9
- package/dist/react/ssr/index.js +8 -6
- package/dist/react/ssr/index.js.map +1 -1
- package/dist/react/ui/components/marketplace-collectible-card/index.d.ts +4 -8
- package/dist/react/ui/components/marketplace-collectible-card/index.js +21 -18
- package/dist/react/ui/components/marketplace-collectible-card/utils/index.d.ts +2 -7
- package/dist/react/ui/components/marketplace-collectible-card/utils/index.js +8 -6
- package/dist/react/ui/components/marketplace-logos/index.d.ts +21 -21
- package/dist/react/ui/components/marketplace-logos/index.js +1 -1
- package/dist/react/ui/icons/index.js +11 -9
- package/dist/react/ui/index.d.ts +4 -8
- package/dist/react/ui/index.js +21 -18
- package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +1 -25
- package/dist/react/ui/modals/_internal/components/actionModal/index.js +22 -19
- package/dist/react/utils/index.d.ts +19 -0
- package/dist/react/utils/index.js +9 -0
- package/dist/{react-BbHBl6gg.css → react-CbqXKOpt.css} +1 -1
- package/dist/{react-BbHBl6gg.css.map → react-CbqXKOpt.css.map} +1 -1
- package/dist/{react-DAIicQPT.js → react-Ceq8mamy.js} +11203 -7647
- package/dist/react-Ceq8mamy.js.map +1 -0
- package/dist/{sequence-Do3kzb4J.js → sequence-Dt2Xo7Fa.js} +1 -1
- package/dist/{sequence-Do3kzb4J.js.map → sequence-Dt2Xo7Fa.js.map} +1 -1
- package/dist/{index.css → styles/index.css} +679 -127
- package/dist/{sudo-swap-B6vPKxBz.js → sudo-swap-CGoARONs.js} +1 -1
- package/dist/{sudo-swap-B6vPKxBz.js.map → sudo-swap-CGoARONs.js.map} +1 -1
- package/dist/{super-rare-eCm1SE6O.js → super-rare-NeQtZjcn.js} +1 -1
- package/dist/{super-rare-eCm1SE6O.js.map → super-rare-NeQtZjcn.js.map} +1 -1
- package/dist/{token-Da4TdyUk.js → token-D9gZVqbX.js} +1 -1
- package/dist/{token-Da4TdyUk.js.map → token-D9gZVqbX.js.map} +1 -1
- package/dist/tokenSupplies-DXtkRYNO.d.ts +147 -0
- package/dist/{transaction-CcVViHEL.js → transaction-CC2KxNF6.js} +2 -17
- package/dist/transaction-CC2KxNF6.js.map +1 -0
- package/dist/types/index.d.ts +2 -3
- package/dist/types/index.js +2 -2
- package/dist/{CollectibleCard-C8Ae64Ab.d.ts → types-BlCa0TVE.d.ts} +9 -11
- package/dist/{types-DwWE6xOF.js → types-G2PWxiJR.js} +1 -1
- package/dist/{types-DwWE6xOF.js.map → types-G2PWxiJR.js.map} +1 -1
- package/dist/utils/abi/index.d.ts +5 -5
- package/dist/utils/abi/index.js +5 -5
- package/dist/utils/abi/marketplace/index.d.ts +1 -1
- package/dist/utils/abi/marketplace/index.js +1 -1
- package/dist/utils/abi/primary-sale/index.d.ts +2 -2
- package/dist/utils/abi/primary-sale/index.js +2 -2
- package/dist/utils/abi/token/index.d.ts +1 -1
- package/dist/utils/abi/token/index.js +1 -1
- package/dist/utils/index.d.ts +7 -8
- package/dist/utils/index.js +11 -9
- package/dist/{utils-CW2NA5KG.js → utils-CKJd-CRf.js} +4 -11
- package/dist/utils-CKJd-CRf.js.map +1 -0
- package/dist/{utils-BPYfgDSL.js → utils-wquIhK6T.js} +5 -6
- package/dist/utils-wquIhK6T.js.map +1 -0
- package/dist/waitForTransactionReceipt-DZxAuR9N.js +27 -0
- package/dist/waitForTransactionReceipt-DZxAuR9N.js.map +1 -0
- package/dist/{x2y2-DD17tT91.js → x2y2-CQdg24VP.js} +1 -1
- package/dist/{x2y2-DD17tT91.js.map → x2y2-CQdg24VP.js.map} +1 -1
- package/dist/{zora-BpSG9UzS.js → zora-DdEydy4L.js} +1 -1
- package/dist/{zora-BpSG9UzS.js.map → zora-DdEydy4L.js.map} +1 -1
- package/eslint.config.mjs +4 -0
- package/package.json +55 -39
- package/postcss.config.mjs +73 -0
- package/public/mockServiceWorker.js +344 -0
- package/src/index.ts +1 -0
- package/src/react/_internal/api/__mocks__/builder.msw.ts +6 -0
- package/src/react/_internal/api/__mocks__/indexer.msw.ts +16 -0
- package/src/react/_internal/api/__mocks__/laos.msw.ts +387 -0
- package/src/react/_internal/api/__mocks__/marketplace.msw.ts +2 -0
- package/src/react/_internal/api/__mocks__/metadata.msw.ts +12 -1
- package/src/react/_internal/api/__tests__/laos-api.test.ts +756 -0
- package/src/react/_internal/api/builder.gen.ts +11 -7
- package/src/react/_internal/api/laos-api.ts +3 -0
- package/src/react/_internal/api/marketplace.gen.ts +5 -3
- package/src/react/_internal/api/query-keys.ts +12 -4
- package/src/react/_internal/api/services.ts +2 -14
- package/src/react/_internal/databeat/index.ts +15 -14
- package/src/react/_internal/databeat/types.ts +23 -0
- package/src/react/_internal/databeat/utils.ts +26 -0
- package/src/react/_internal/query-meta.ts +3 -0
- package/src/react/_internal/utils.ts +6 -4
- package/src/react/_internal/wagmi/create-config.ts +29 -14
- package/src/react/_internal/wagmi/get-connectors.ts +1 -1
- package/src/react/hooks/{__tests__ → config}/__snapshots__/useMarketplaceConfig.test.tsx.snap +6 -0
- package/src/react/hooks/config/index.ts +3 -0
- package/src/react/hooks/{useConfig.tsx → config/useConfig.tsx} +2 -2
- package/src/react/hooks/config/useConnectorMetadata.tsx +16 -0
- package/src/react/hooks/{__tests__ → config}/useMarketplaceConfig.test.tsx +1 -1
- package/src/react/hooks/{useMarketplaceConfig.tsx → config/useMarketplaceConfig.tsx} +2 -2
- package/src/react/hooks/contracts/index.ts +1 -0
- package/src/react/hooks/contracts/useSalesContractABI.ts +174 -0
- package/src/react/hooks/data/collectibles/index.ts +6 -0
- package/src/react/hooks/data/collectibles/useBalanceOfCollectible.laos.test.tsx +367 -0
- package/src/react/hooks/{__tests__ → data/collectibles}/useBalanceOfCollectible.test.tsx +2 -2
- package/src/react/hooks/{useBalanceOfCollectible.tsx → data/collectibles/useBalanceOfCollectible.tsx} +4 -4
- package/src/react/hooks/{__tests__ → data/collectibles}/useCollectible.test.tsx +3 -3
- package/src/react/hooks/{useCollectible.tsx → data/collectibles/useCollectible.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/collectibles}/useCountOfCollectables.test.tsx +4 -4
- package/src/react/hooks/{useCountOfCollectables.tsx → data/collectibles/useCountOfCollectables.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibleActivities.test.tsx +3 -3
- package/src/react/hooks/{useListCollectibleActivities.tsx → data/collectibles/useListCollectibleActivities.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectibles.test.tsx +5 -6
- package/src/react/hooks/{useListCollectibles.tsx → data/collectibles/useListCollectibles.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/collectibles}/useListCollectiblesPaginated.test.tsx +4 -4
- package/src/react/hooks/{useListCollectiblesPaginated.tsx → data/collectibles/useListCollectiblesPaginated.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/collections}/__snapshots__/useListCollections.test.tsx.snap +10 -0
- package/src/react/hooks/data/collections/index.ts +6 -0
- package/src/react/hooks/{__tests__ → data/collections}/useCollection.test.tsx +2 -3
- package/src/react/hooks/{useCollection.tsx → data/collections/useCollection.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/collections}/useCollectionBalanceDetails.test.tsx +19 -2
- package/src/react/hooks/data/collections/useCollectionBalanceDetails.tsx +106 -0
- package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetails.test.tsx +2 -2
- package/src/react/hooks/{useCollectionDetails.ts → data/collections/useCollectionDetails.ts} +3 -3
- package/src/react/hooks/{__tests__ → data/collections}/useCollectionDetailsPolling.test.tsx +14 -6
- package/src/react/hooks/{useCollectionDetailsPolling.tsx → data/collections/useCollectionDetailsPolling.tsx} +5 -9
- package/src/react/hooks/{__tests__ → data/collections}/useListCollectionActivities.test.tsx +5 -5
- package/src/react/hooks/{useListCollectionActivities.tsx → data/collections/useListCollectionActivities.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/collections}/useListCollections.test.tsx +5 -4
- package/src/react/hooks/data/collections/useListCollections.tsx +80 -0
- package/src/react/hooks/data/index.ts +6 -0
- package/src/react/hooks/data/inventory/index.ts +1 -0
- package/src/react/hooks/{__tests__ → data/inventory}/useInventory.test.tsx +4 -4
- package/src/react/hooks/{useInventory.tsx → data/inventory/useInventory.tsx} +7 -4
- package/src/react/hooks/data/market/index.ts +3 -0
- package/src/react/hooks/{__tests__ → data/market}/useCurrency.test.tsx +4 -4
- package/src/react/hooks/{useCurrency.tsx → data/market/useCurrency.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/market}/useListMarketCardData.test.tsx +10 -14
- package/src/react/hooks/{useListMarketCardData.tsx → data/market/useListMarketCardData.tsx} +8 -7
- package/src/react/hooks/{__tests__ → data/market}/useMarketCurrencies.test.tsx +5 -5
- package/src/react/hooks/{useMarketCurrencies.tsx → data/market/useMarketCurrencies.tsx} +3 -3
- package/src/react/hooks/data/orders/index.ts +7 -0
- package/src/react/hooks/{__tests__ → data/orders}/useCountListingsForCollectible.test.tsx +2 -2
- package/src/react/hooks/{useCountListingsForCollectible.tsx → data/orders/useCountListingsForCollectible.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/orders}/useCountOffersForCollectible.test.tsx +2 -2
- package/src/react/hooks/{useCountOffersForCollectible.tsx → data/orders/useCountOffersForCollectible.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/orders}/useFloorOrder.test.tsx +3 -3
- package/src/react/hooks/{useFloorOrder.tsx → data/orders/useFloorOrder.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/orders}/useHighestOffer.test.tsx +3 -3
- package/src/react/hooks/{useHighestOffer.tsx → data/orders/useHighestOffer.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/orders}/useListListingsForCollectible.test.tsx +6 -6
- package/src/react/hooks/{useListListingsForCollectible.tsx → data/orders/useListListingsForCollectible.tsx} +3 -3
- package/src/react/hooks/{__tests__ → data/orders}/useListOffersForCollectible.test.tsx +5 -5
- package/src/react/hooks/{useListOffersForCollectible.tsx → data/orders/useListOffersForCollectible.tsx} +4 -4
- package/src/react/hooks/{__tests__ → data/orders}/useLowestListing.test.tsx +5 -5
- package/src/react/hooks/{useLowestListing.tsx → data/orders/useLowestListing.tsx} +3 -3
- package/src/react/hooks/data/primary-sales/index.ts +6 -0
- package/src/react/hooks/{useCountOfPrimarySaleItems.tsx → data/primary-sales/useCountOfPrimarySaleItems.tsx} +2 -2
- package/src/react/hooks/data/primary-sales/useErc721SalesData.tsx +184 -0
- package/src/react/hooks/data/primary-sales/useGetCountOfPrimarySaleItems.tsx +48 -0
- package/src/react/hooks/{useList1155ShopCardData.tsx → data/primary-sales/useList1155ShopCardData.tsx} +17 -8
- package/src/react/hooks/data/primary-sales/useList721ShopCardData.tsx +183 -0
- package/src/react/hooks/data/primary-sales/useListPrimarySaleItems.tsx +66 -0
- package/src/react/hooks/data/tokens/index.ts +5 -0
- package/src/react/hooks/{__tests__ → data/tokens}/useCurrencyBalance.test.tsx +9 -5
- package/src/react/hooks/data/tokens/useCurrencyBalance.tsx +137 -0
- package/src/react/hooks/data/tokens/useGetTokenRanges.test.tsx +111 -0
- package/src/react/hooks/data/tokens/useGetTokenRanges.tsx +94 -0
- package/src/react/hooks/{__tests__ → data/tokens}/useListBalances.test.tsx +2 -2
- package/src/react/hooks/{useListBalances.tsx → data/tokens/useListBalances.tsx} +5 -5
- package/src/react/hooks/data/tokens/useListTokenMetadata.test.tsx +137 -0
- package/src/react/hooks/{useListTokenMetadata.tsx → data/tokens/useListTokenMetadata.tsx} +3 -3
- package/src/react/hooks/data/tokens/useSearchTokenMetadata.test.tsx +284 -0
- package/src/react/hooks/data/tokens/useSearchTokenMetadata.tsx +186 -0
- package/src/react/hooks/data/tokens/useTokenSupplies.ts +81 -0
- package/src/react/hooks/index.ts +18 -50
- package/src/react/hooks/transactions/index.ts +9 -0
- package/src/react/hooks/{__tests__ → transactions}/useCancelOrder.test.tsx +53 -85
- package/src/react/hooks/{useCancelOrder.tsx → transactions/useCancelOrder.tsx} +4 -4
- package/src/react/hooks/{__tests__/useCancelTransactionSteps.test.tsx → transactions/useCancelTransactionSteps.test.tsx.bak} +3 -52
- package/src/react/hooks/transactions/useCancelTransactionSteps.tsx +193 -0
- package/src/react/hooks/{__tests__ → transactions}/useGenerateCancelTransaction.test.tsx +2 -2
- package/src/react/hooks/{useGenerateCancelTransaction.tsx → transactions/useGenerateCancelTransaction.tsx} +5 -5
- package/src/react/hooks/{__tests__ → transactions}/useGenerateListingTransaction.test.tsx +2 -2
- package/src/react/hooks/{useGenerateListingTransaction.tsx → transactions/useGenerateListingTransaction.tsx} +5 -5
- package/src/react/hooks/{__tests__ → transactions}/useGenerateOfferTransaction.test.tsx +7 -45
- package/src/react/hooks/{useGenerateOfferTransaction.tsx → transactions/useGenerateOfferTransaction.tsx} +7 -7
- package/src/react/hooks/{__tests__ → transactions}/useGenerateSellTransaction.test.tsx +3 -7
- package/src/react/hooks/{useGenerateSellTransaction.tsx → transactions/useGenerateSellTransaction.tsx} +4 -4
- package/src/react/hooks/transactions/useOrderSteps.tsx +189 -0
- package/src/react/hooks/transactions/useProcessStep.test.tsx +272 -0
- package/src/react/hooks/transactions/useProcessStep.ts +95 -0
- package/src/react/hooks/transactions/useTransferTokens.test.tsx +469 -0
- package/src/react/hooks/{useTransferTokens.tsx → transactions/useTransferTokens.tsx} +5 -5
- package/src/react/hooks/ui/index.ts +3 -0
- package/src/react/hooks/{useFilterState.tsx → ui/useFilterState.tsx} +1 -1
- package/src/react/hooks/{__tests__ → ui}/useFilters.test.tsx +2 -3
- package/src/react/hooks/ui/useFilters.tsx +178 -0
- package/src/react/hooks/ui/useOpenConnectModal.tsx +9 -0
- package/src/react/hooks/util/optimisticCancelUpdates.ts +1 -0
- package/src/react/hooks/utils/index.ts +9 -0
- package/src/react/hooks/{__tests__ → utils}/useAutoSelectFeeOption.test.tsx +7 -3
- package/src/react/hooks/{useAutoSelectFeeOption.tsx → utils/useAutoSelectFeeOption.tsx} +2 -2
- package/src/react/hooks/utils/useCheckoutOptions.test.tsx +162 -0
- package/src/react/hooks/utils/useCheckoutOptions.tsx +98 -0
- package/src/react/hooks/{__tests__ → utils}/useCheckoutOptionsSalesContract.test.tsx +42 -61
- package/src/react/hooks/utils/useCheckoutOptionsSalesContract.tsx +108 -0
- package/src/react/hooks/{__tests__ → utils}/useComparePrices.test.tsx +1 -1
- package/src/react/hooks/utils/useComparePrices.tsx +102 -0
- package/src/react/hooks/{__tests__ → utils}/useConvertPriceToUSD.test.tsx +4 -4
- package/src/react/hooks/utils/useConvertPriceToUSD.tsx +96 -0
- package/src/react/hooks/utils/useEnsureCorrectChain.ts +74 -0
- package/src/react/hooks/{__tests__ → utils}/useRoyalty.test.tsx +1 -1
- package/src/react/hooks/{useRoyalty.tsx → utils/useRoyalty.tsx} +3 -3
- package/src/react/hooks/utils/useSwitchChainWithModal.ts +38 -0
- package/src/react/index.ts +1 -2
- package/src/react/providers/index.tsx +110 -0
- package/src/react/providers/modal-provider.tsx +43 -0
- package/src/react/{__tests__ → providers}/provider.test.tsx +5 -4
- package/src/react/providers/shadow-root.tsx +63 -0
- package/src/react/providers/theme-provider.tsx +29 -0
- package/src/react/queries/__tests__/balanceOfCollectible.laos.test.ts +123 -0
- package/src/react/queries/__tests__/inventory.laos.test.ts +496 -0
- package/src/react/queries/balanceOfCollectible.ts +7 -4
- package/src/react/queries/checkoutOptions.ts +85 -0
- package/src/react/queries/checkoutOptionsSalesContract.ts +89 -0
- package/src/react/queries/collectionBalanceDetails.ts +92 -0
- package/src/react/queries/comparePrices.ts +108 -0
- package/src/react/queries/convertPriceToUSD.ts +92 -0
- package/src/react/{hooks/useFilters.tsx → queries/filters.ts} +51 -48
- package/src/react/queries/getTokenRanges.ts +62 -0
- package/src/react/queries/index.ts +22 -0
- package/src/react/queries/inventory.ts +6 -0
- package/src/react/queries/listBalances.ts +4 -3
- package/src/react/queries/listCollections.ts +7 -3
- package/src/react/queries/listTokenMetadata.ts +2 -2
- package/src/react/queries/marketplaceConfig.ts +11 -2
- package/src/react/queries/primarySaleItems.ts +80 -0
- package/src/react/queries/primarySaleItemsCount.ts +64 -0
- package/src/react/queries/searchTokenMetadata.ts +87 -0
- package/src/react/queries/tokenSupplies.ts +101 -0
- package/src/react/ssr/__tests__/__snapshots__/create-ssr-client.test.ts.snap +6 -0
- package/src/react/ssr/__tests__/create-ssr-client.test.ts +1 -1
- package/src/react/ui/components/_internals/action-button/ActionButton.stories.tsx +296 -0
- package/src/react/ui/components/_internals/action-button/ActionButton.tsx +66 -66
- package/src/react/ui/components/_internals/action-button/__tests__/ActionButtonBody.test.tsx +56 -18
- package/src/react/ui/components/_internals/action-button/__tests__/NonOwnerActions.test.tsx +4 -11
- package/src/react/ui/components/_internals/action-button/__tests__/OwnerActions.test.tsx +5 -12
- package/src/react/ui/components/_internals/action-button/__tests__/useActionButtonLogic.test.tsx +32 -16
- package/src/react/ui/components/_internals/action-button/components/ActionButtonBody.tsx +7 -7
- package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +4 -1
- package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +4 -4
- package/src/react/ui/components/_internals/action-button/hooks/useActionButtonLogic.ts +15 -11
- package/src/react/ui/components/_internals/action-button/store.ts +44 -34
- package/src/react/ui/components/_internals/custom-select/CustomSelect.stories.tsx +582 -0
- package/src/react/ui/components/_internals/pill/Pill.stories.tsx +83 -0
- package/src/react/ui/components/marketplace-collectible-card/Footer.tsx +11 -4
- package/src/react/ui/components/marketplace-collectible-card/components/ActionButtonWrapper.tsx +7 -4
- package/src/react/ui/components/marketplace-collectible-card/components/BaseCard.tsx +4 -3
- package/src/react/ui/components/marketplace-collectible-card/types.ts +7 -5
- package/src/react/ui/components/marketplace-collectible-card/utils/supplyStatus.ts +4 -7
- package/src/react/ui/components/marketplace-collectible-card/variants/MarketCard.tsx +1 -1
- package/src/react/ui/components/marketplace-collectible-card/variants/ShopCard.tsx +11 -4
- package/src/react/ui/components/marketplace-logos/marketplace-logos.stories.tsx +199 -0
- package/src/react/ui/components/media/Media.stories.tsx +642 -0
- package/src/react/ui/components/media/Media.tsx +24 -19
- package/src/react/ui/components/media/types.ts +6 -0
- package/src/react/ui/index.ts +1 -1
- package/src/react/ui/modals/BuyModal/__tests__/BuyModalRouter.test.tsx +25 -25
- package/src/react/ui/modals/BuyModal/__tests__/ERC1155ShopModal.test.tsx +8 -2
- package/src/react/ui/modals/BuyModal/__tests__/ERC721ShopModal.test.tsx +1 -1
- package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +7 -1
- package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +9 -1
- package/src/react/ui/modals/BuyModal/components/BuyModalRouter.tsx +5 -5
- package/src/react/ui/modals/BuyModal/components/ERC1155BuyModal.tsx +8 -8
- package/src/react/ui/modals/BuyModal/components/ERC1155QuantityModal.tsx +44 -19
- package/src/react/ui/modals/BuyModal/components/ERC1155ShopModal.tsx +3 -0
- package/src/react/ui/modals/BuyModal/components/ERC721BuyModal.tsx +4 -4
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +18 -30
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC1155Checkout.test.tsx +43 -27
- package/src/react/ui/modals/BuyModal/hooks/__tests__/useERC721SalePaymentParams.test.tsx +13 -2
- package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +7 -7
- package/src/react/ui/modals/BuyModal/hooks/useERC1155Checkout.ts +17 -3
- package/src/react/ui/modals/BuyModal/hooks/useERC721SalePaymentParams.ts +19 -8
- package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +5 -9
- package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +23 -15
- package/src/react/ui/modals/BuyModal/index.tsx +9 -1
- package/src/react/ui/modals/BuyModal/store.ts +28 -0
- package/src/react/ui/modals/CreateListingModal/Modal.tsx +39 -16
- package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +3 -24
- package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +5 -9
- package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +43 -83
- package/src/react/ui/modals/CreateListingModal/store.ts +3 -3
- package/src/react/ui/modals/MakeOfferModal/Modal.tsx +34 -17
- package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +88 -62
- package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +9 -7
- package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +2 -2
- package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +47 -84
- package/src/react/ui/modals/MakeOfferModal/store.ts +3 -3
- package/src/react/ui/modals/SellModal/Modal.tsx +18 -17
- package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +8 -30
- package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +7 -7
- package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +39 -65
- package/src/react/ui/modals/SellModal/store.ts +3 -3
- package/src/react/ui/modals/TransferModal/__tests__/__snapshots__/store.test.ts.snap +17 -0
- package/src/react/ui/modals/TransferModal/__tests__/store.test.ts +366 -0
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/__tests__/useHandleTransfer.test.tsx +412 -0
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +51 -48
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +54 -44
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +9 -8
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +31 -35
- package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +22 -13
- package/src/react/ui/modals/TransferModal/index.tsx +36 -53
- package/src/react/ui/modals/TransferModal/messages.ts +1 -1
- package/src/react/ui/modals/TransferModal/store.ts +122 -0
- package/src/react/ui/modals/_internal/components/actionModal/ActionModal.test.tsx +116 -136
- package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +15 -44
- package/src/react/ui/modals/_internal/components/actionModal/index.ts +0 -1
- package/src/react/ui/modals/_internal/components/calendar/index.tsx +0 -1
- package/src/react/ui/modals/_internal/components/currencyImage/index.tsx +10 -14
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/__tests__/index.test.tsx +14 -5
- package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +24 -18
- package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +10 -10
- package/src/react/ui/modals/_internal/components/floorPriceText/__tests__/FloorPriceText.test.tsx +8 -8
- package/src/react/ui/modals/_internal/components/priceInput/__tests__/PriceInput.test.tsx +13 -5
- package/src/react/ui/modals/_internal/components/priceInput/index.tsx +42 -27
- package/src/react/ui/modals/_internal/components/quantityInput/__tests__/index.test.tsx +164 -65
- package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +174 -20
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/__tests__/SelectWaasFeeOptions.test.tsx +341 -42
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +95 -101
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +72 -14
- package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +30 -14
- package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +2 -2
- package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +2 -2
- package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +88 -89
- package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +36 -10
- package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +25 -26
- package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +35 -21
- package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +91 -62
- package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +62 -48
- package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +3 -5
- package/src/react/ui/modals/_internal/types.ts +8 -2
- package/src/react/utils/index.ts +1 -0
- package/src/react/utils/waitForTransactionReceipt.ts +49 -0
- package/src/{index.css → styles/index.css} +6 -5
- package/src/styles/styles.ts +3275 -0
- package/src/types/sdk-config.ts +8 -1
- package/src/utils/_internal/error/transaction.ts +0 -10
- package/src/utils/abi/primary-sale/index.ts +4 -2
- package/src/utils/abi/primary-sale/{sequence-1155-sales-contract.ts → sequence-1155-sales-contract-v0.ts} +67 -58
- package/src/utils/abi/primary-sale/sequence-1155-sales-contract-v1.ts +546 -0
- package/src/utils/abi/primary-sale/{sequence-721-sales-contract.ts → sequence-721-sales-contract-v0.ts} +1 -1
- package/src/utils/abi/primary-sale/sequence-721-sales-contract-v1.ts +394 -0
- package/src/utils/network.ts +15 -0
- package/test/const.ts +1 -1
- package/test/globalSetup.ts +39 -11
- package/test/handlers.ts +465 -0
- package/test/index.ts +1 -0
- package/test/server-setup.ts +23 -0
- package/test/setup.ts +1 -1
- package/test/test-utils.tsx +46 -36
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +12 -7
- package/vitest.shims.d.ts +2 -0
- package/vitest.storybook.config.js +33 -0
- package/dist/CalendarIcon-DbQ7Vxcw.js.map +0 -1
- package/dist/api-DTIan01C.js.map +0 -1
- package/dist/builder-api-C_zj5mr3.d.ts +0 -12
- package/dist/index-BQsgAvtX.d.ts +0 -2938
- package/dist/index-BUVWziLP.d.ts +0 -60
- package/dist/index-CLy8y5hm.d.ts +0 -1057
- package/dist/index-COt10OgI.d.ts +0 -24
- package/dist/index-DPNWNa7t.d.ts +0 -414
- package/dist/index-DsfCs3-x.d.ts +0 -122
- package/dist/index-DvpBZgor.d.ts +0 -1
- package/dist/index-dUb6wb4Y.d.ts +0 -22
- package/dist/marketplace.gen-BSDIX7NZ.js.map +0 -1
- package/dist/marketplaceConfig-C6X1SUik.js.map +0 -1
- package/dist/primary-sale-C55ALnfQ.js +0 -1264
- package/dist/primary-sale-C55ALnfQ.js.map +0 -1
- package/dist/queries-CUU65uYZ.js +0 -599
- package/dist/queries-CUU65uYZ.js.map +0 -1
- package/dist/react/hooks/options/index.d.ts +0 -4
- package/dist/react/hooks/options/index.js +0 -11
- package/dist/react-DAIicQPT.js.map +0 -1
- package/dist/transaction-CcVViHEL.js.map +0 -1
- package/dist/utils-BPYfgDSL.js.map +0 -1
- package/dist/utils-CW2NA5KG.js.map +0 -1
- package/dist/wagmi-CDzEQbfk.js.map +0 -1
- package/src/react/_internal/wallet/__tests__/wallet.test.ts +0 -416
- package/src/react/_internal/wallet/useWallet.ts +0 -52
- package/src/react/_internal/wallet/wallet.ts +0 -313
- package/src/react/hooks/__tests__/useGetTokenSuppliesMap.test.tsx +0 -104
- package/src/react/hooks/__tests__/useListTokenMetadata.test.tsx +0 -111
- package/src/react/hooks/options/index.ts +0 -1
- package/src/react/hooks/useCancelTransactionSteps.tsx +0 -249
- package/src/react/hooks/useCheckoutOptionsSalesContract.tsx +0 -67
- package/src/react/hooks/useCollectionBalanceDetails.tsx +0 -79
- package/src/react/hooks/useComparePrices.tsx +0 -96
- package/src/react/hooks/useConvertPriceToUSD.tsx +0 -82
- package/src/react/hooks/useCurrencyBalance.tsx +0 -51
- package/src/react/hooks/useERC721SaleMintedTokens.tsx +0 -67
- package/src/react/hooks/useGetTokenRanges.tsx +0 -31
- package/src/react/hooks/useGetTokenSuppliesMap.tsx +0 -73
- package/src/react/hooks/useList1155SaleSupplies.tsx +0 -62
- package/src/react/hooks/useList721ShopCardData.tsx +0 -160
- package/src/react/hooks/useListCollections.tsx +0 -80
- package/src/react/hooks/useListPrimarySaleItems.ts +0 -102
- package/src/react/hooks/useListShopCardData.tsx +0 -70
- package/src/react/hooks/useShopCollectibleSaleData.tsx +0 -349
- package/src/react/hooks/useTokenSaleDetailsBatch.tsx +0 -134
- package/src/react/provider.tsx +0 -43
- package/src/react/queries/getTokenSuppliesMap.ts +0 -77
- package/src/react/ui/modals/TransferModal/_store.ts +0 -66
- package/src/react/ui/modals/_internal/components/actionModal/store.ts +0 -57
- package/src/react/ui/modals/_internal/components/quantityInput/QuantityInputBase.tsx +0 -166
- package/src/react/ui/modals/_internal/stores/accountModal.ts +0 -3
- package/src/react/ui/modals/modal-provider.tsx +0 -25
- package/test/mocks/wallet.ts +0 -63
- /package/dist/{abi-BKyRjVcZ.js → abi-Wr_aTZFi.js} +0 -0
- /package/dist/{index-C39K_8SG.d.ts → index-q7f-WDBS.d.ts} +0 -0
- /package/dist/{options-B4QN7Xou.js → wagmi-BhP3mdhP.js} +0 -0
- /package/src/react/hooks/{useGetReceiptFromHash.tsx → utils/useGetReceiptFromHash.tsx} +0 -0
|
@@ -0,0 +1,1478 @@
|
|
|
1
|
+
import { FilterCondition } from "./builder.gen-B9wR2nvF.js";
|
|
2
|
+
import { LaosAPI, balanceQueries, collectableKeys, collectionKeys, currencyKeys, getIndexerClient, getMarketplaceClient, getMetadataClient, getQueryClient, tokenKeys } from "./api-BmEQfSQa.js";
|
|
3
|
+
import { OrderSide } from "./marketplace.gen-JzNYpM0U.js";
|
|
4
|
+
import { compareAddress } from "./utils-CKJd-CRf.js";
|
|
5
|
+
import { fetchMarketplaceConfig, marketplaceConfigOptions } from "./marketplaceConfig-sNh-MA5M.js";
|
|
6
|
+
import { infiniteQueryOptions, queryOptions, skipToken } from "@tanstack/react-query";
|
|
7
|
+
import { formatUnits, zeroAddress } from "viem";
|
|
8
|
+
|
|
9
|
+
//#region src/react/queries/balanceOfCollectible.ts
|
|
10
|
+
/**
|
|
11
|
+
* Fetches the balance of a specific collectible for a user
|
|
12
|
+
*
|
|
13
|
+
* @param args - Arguments for the API call
|
|
14
|
+
* @param config - SDK configuration
|
|
15
|
+
* @returns The balance data
|
|
16
|
+
*/
|
|
17
|
+
async function fetchBalanceOfCollectible(args, config) {
|
|
18
|
+
if (args.isLaos721) {
|
|
19
|
+
const laosApi = new LaosAPI();
|
|
20
|
+
const response = await laosApi.getTokenBalances({
|
|
21
|
+
chainId: args.chainId.toString(),
|
|
22
|
+
contractAddress: args.collectionAddress,
|
|
23
|
+
accountAddress: args.userAddress,
|
|
24
|
+
includeMetadata: true
|
|
25
|
+
});
|
|
26
|
+
return response.balances[0] || null;
|
|
27
|
+
}
|
|
28
|
+
const indexerClient = getIndexerClient(args.chainId, config);
|
|
29
|
+
return indexerClient.getTokenBalances({
|
|
30
|
+
accountAddress: args.userAddress,
|
|
31
|
+
contractAddress: args.collectionAddress,
|
|
32
|
+
tokenID: args.collectableId,
|
|
33
|
+
includeMetadata: false,
|
|
34
|
+
metadataOptions: {
|
|
35
|
+
verifiedOnly: true,
|
|
36
|
+
includeContracts: [args.collectionAddress]
|
|
37
|
+
}
|
|
38
|
+
}).then((res) => res.balances[0] || null);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creates a tanstack query options object for the balance query
|
|
42
|
+
*
|
|
43
|
+
* @param args - The query arguments
|
|
44
|
+
* @param config - SDK configuration
|
|
45
|
+
* @returns Query options configuration
|
|
46
|
+
*/
|
|
47
|
+
function balanceOfCollectibleOptions(args, config) {
|
|
48
|
+
const enabled = !!args.userAddress && (args.query?.enabled ?? true);
|
|
49
|
+
return queryOptions({
|
|
50
|
+
queryKey: [...collectableKeys.userBalances, args],
|
|
51
|
+
queryFn: enabled ? () => fetchBalanceOfCollectible({
|
|
52
|
+
...args,
|
|
53
|
+
userAddress: args.userAddress
|
|
54
|
+
}, config) : skipToken
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/react/queries/collectible.ts
|
|
60
|
+
/**
|
|
61
|
+
* Fetches collectible metadata from the metadata API
|
|
62
|
+
*/
|
|
63
|
+
async function fetchCollectible(params) {
|
|
64
|
+
const { collectionAddress, collectibleId, chainId, config } = params;
|
|
65
|
+
const metadataClient = getMetadataClient(config);
|
|
66
|
+
const apiArgs = {
|
|
67
|
+
contractAddress: collectionAddress,
|
|
68
|
+
chainID: String(chainId),
|
|
69
|
+
tokenIDs: [collectibleId]
|
|
70
|
+
};
|
|
71
|
+
const result = await metadataClient.getTokenMetadata(apiArgs);
|
|
72
|
+
return result.tokenMetadata[0];
|
|
73
|
+
}
|
|
74
|
+
function collectibleQueryOptions(params) {
|
|
75
|
+
const enabled = Boolean(params.collectionAddress && params.collectibleId && params.chainId && params.config && (params.query?.enabled ?? true));
|
|
76
|
+
return queryOptions({
|
|
77
|
+
queryKey: [...collectableKeys.details, params],
|
|
78
|
+
queryFn: () => fetchCollectible({
|
|
79
|
+
chainId: params.chainId,
|
|
80
|
+
collectionAddress: params.collectionAddress,
|
|
81
|
+
collectibleId: params.collectibleId,
|
|
82
|
+
config: params.config
|
|
83
|
+
}),
|
|
84
|
+
...params.query,
|
|
85
|
+
enabled
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region src/react/queries/countOfCollectables.ts
|
|
91
|
+
/**
|
|
92
|
+
* Fetches count of collectibles from the marketplace API
|
|
93
|
+
*/
|
|
94
|
+
async function fetchCountOfCollectables(params) {
|
|
95
|
+
const { collectionAddress, chainId, config, filter, side } = params;
|
|
96
|
+
const client = getMarketplaceClient(config);
|
|
97
|
+
if (filter && side) {
|
|
98
|
+
const apiArgs$1 = {
|
|
99
|
+
contractAddress: collectionAddress,
|
|
100
|
+
chainId: String(chainId),
|
|
101
|
+
filter,
|
|
102
|
+
side
|
|
103
|
+
};
|
|
104
|
+
const result$1 = await client.getCountOfFilteredCollectibles(apiArgs$1);
|
|
105
|
+
return result$1.count;
|
|
106
|
+
}
|
|
107
|
+
const apiArgs = {
|
|
108
|
+
contractAddress: collectionAddress,
|
|
109
|
+
chainId: String(chainId)
|
|
110
|
+
};
|
|
111
|
+
const result = await client.getCountOfAllCollectibles(apiArgs);
|
|
112
|
+
return result.count;
|
|
113
|
+
}
|
|
114
|
+
function countOfCollectablesQueryOptions(params) {
|
|
115
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.config && (params.query?.enabled ?? true));
|
|
116
|
+
return queryOptions({
|
|
117
|
+
queryKey: [...collectableKeys.counts, params],
|
|
118
|
+
queryFn: () => fetchCountOfCollectables({
|
|
119
|
+
chainId: params.chainId,
|
|
120
|
+
collectionAddress: params.collectionAddress,
|
|
121
|
+
config: params.config,
|
|
122
|
+
filter: params.filter,
|
|
123
|
+
side: params.side
|
|
124
|
+
}),
|
|
125
|
+
...params.query,
|
|
126
|
+
enabled
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/react/queries/listCollectibleActivities.ts
|
|
132
|
+
/**
|
|
133
|
+
* Fetches collectible activities from the Marketplace API
|
|
134
|
+
*/
|
|
135
|
+
async function fetchListCollectibleActivities(params) {
|
|
136
|
+
const { collectionAddress, chainId, config, page, pageSize, sort,...additionalApiParams } = params;
|
|
137
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
138
|
+
const pageParams = page || pageSize || sort ? {
|
|
139
|
+
page: page ?? 1,
|
|
140
|
+
pageSize: pageSize ?? 10,
|
|
141
|
+
sort
|
|
142
|
+
} : void 0;
|
|
143
|
+
const apiArgs = {
|
|
144
|
+
contractAddress: collectionAddress,
|
|
145
|
+
chainId: String(chainId),
|
|
146
|
+
page: pageParams,
|
|
147
|
+
...additionalApiParams
|
|
148
|
+
};
|
|
149
|
+
return await marketplaceClient.listCollectibleActivities(apiArgs);
|
|
150
|
+
}
|
|
151
|
+
function listCollectibleActivitiesQueryOptions(params) {
|
|
152
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.tokenId && params.config && (params.query?.enabled ?? true));
|
|
153
|
+
return queryOptions({
|
|
154
|
+
queryKey: [...collectableKeys.collectibleActivities, params],
|
|
155
|
+
queryFn: () => fetchListCollectibleActivities({
|
|
156
|
+
chainId: params.chainId,
|
|
157
|
+
collectionAddress: params.collectionAddress,
|
|
158
|
+
config: params.config,
|
|
159
|
+
tokenId: params.tokenId,
|
|
160
|
+
page: params.page,
|
|
161
|
+
pageSize: params.pageSize,
|
|
162
|
+
sort: params.sort
|
|
163
|
+
}),
|
|
164
|
+
...params.query,
|
|
165
|
+
enabled
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
//#endregion
|
|
170
|
+
//#region src/react/queries/listBalances.ts
|
|
171
|
+
async function fetchBalances(args, config, page) {
|
|
172
|
+
if (args.isLaos721 && args.accountAddress) {
|
|
173
|
+
const laosClient = new LaosAPI();
|
|
174
|
+
return laosClient.getTokenBalances({
|
|
175
|
+
chainId: args.chainId.toString(),
|
|
176
|
+
accountAddress: args.accountAddress,
|
|
177
|
+
contractAddress: args.contractAddress,
|
|
178
|
+
includeMetadata: args.includeMetadata,
|
|
179
|
+
page: { sort: [{
|
|
180
|
+
column: "CREATED_AT",
|
|
181
|
+
order: "DESC"
|
|
182
|
+
}] }
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
const indexerClient = getIndexerClient(args.chainId, config);
|
|
186
|
+
return indexerClient.getTokenBalances({
|
|
187
|
+
...args,
|
|
188
|
+
tokenID: args.tokenId,
|
|
189
|
+
page
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Creates a tanstack infinite query options object for the balances query
|
|
194
|
+
*
|
|
195
|
+
* @param args - The query arguments
|
|
196
|
+
* @param config - SDK configuration
|
|
197
|
+
* @returns Query options configuration
|
|
198
|
+
*/
|
|
199
|
+
function listBalancesOptions(args, config) {
|
|
200
|
+
return infiniteQueryOptions({
|
|
201
|
+
...args.query,
|
|
202
|
+
queryKey: [
|
|
203
|
+
...balanceQueries.lists,
|
|
204
|
+
args,
|
|
205
|
+
config
|
|
206
|
+
],
|
|
207
|
+
queryFn: ({ pageParam }) => fetchBalances(args, config, pageParam),
|
|
208
|
+
initialPageParam: {
|
|
209
|
+
page: 1,
|
|
210
|
+
pageSize: 30
|
|
211
|
+
},
|
|
212
|
+
getNextPageParam: (lastPage) => lastPage.page.after
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
//#endregion
|
|
217
|
+
//#region src/react/queries/listCollectibles.ts
|
|
218
|
+
/**
|
|
219
|
+
* Fetches a list of collectibles with pagination support from the Marketplace API
|
|
220
|
+
*/
|
|
221
|
+
async function fetchListCollectibles(params, marketplaceConfig, page) {
|
|
222
|
+
const { collectionAddress, chainId, config,...additionalApiParams } = params;
|
|
223
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
224
|
+
const apiArgs = {
|
|
225
|
+
contractAddress: collectionAddress,
|
|
226
|
+
chainId: String(chainId),
|
|
227
|
+
page,
|
|
228
|
+
...additionalApiParams
|
|
229
|
+
};
|
|
230
|
+
if (params.marketplaceType === "shop") {
|
|
231
|
+
const shopCollection = marketplaceConfig.shop.collections.find((collection) => compareAddress(collection.itemsAddress, params.collectionAddress));
|
|
232
|
+
if (!shopCollection) return { collectibles: [] };
|
|
233
|
+
const primarySaleItemsList = await marketplaceClient.listPrimarySaleItems({
|
|
234
|
+
chainId: params.chainId.toString(),
|
|
235
|
+
primarySaleContractAddress: shopCollection.saleAddress
|
|
236
|
+
}, marketplaceConfig);
|
|
237
|
+
return { collectibles: primarySaleItemsList.primarySaleItems.map((item) => ({
|
|
238
|
+
metadata: item.metadata,
|
|
239
|
+
primarySale: {
|
|
240
|
+
price: {
|
|
241
|
+
amount: item.primarySaleItem.priceAmount,
|
|
242
|
+
formatted: item.primarySaleItem.priceAmountFormatted,
|
|
243
|
+
decimals: item.primarySaleItem.priceDecimals,
|
|
244
|
+
currencyAddress: item.primarySaleItem.currencyAddress
|
|
245
|
+
},
|
|
246
|
+
startDate: item.primarySaleItem.startDate,
|
|
247
|
+
endDate: item.primarySaleItem.endDate,
|
|
248
|
+
supplyCap: item.primarySaleItem.supply,
|
|
249
|
+
itemType: item.primarySaleItem.itemType
|
|
250
|
+
}
|
|
251
|
+
})) };
|
|
252
|
+
}
|
|
253
|
+
if (params.isLaos721 && params.side === OrderSide.listing) try {
|
|
254
|
+
const fetchBalancesArgs = {
|
|
255
|
+
chainId: params.chainId,
|
|
256
|
+
accountAddress: params.filter?.inAccounts?.[0],
|
|
257
|
+
contractAddress: params.collectionAddress,
|
|
258
|
+
page,
|
|
259
|
+
includeMetadata: true,
|
|
260
|
+
isLaos721: true
|
|
261
|
+
};
|
|
262
|
+
const balances = await fetchBalances(fetchBalancesArgs, config, page);
|
|
263
|
+
const collectibles = balances.balances.map((balance) => {
|
|
264
|
+
if (!balance.tokenMetadata) throw new Error("Token metadata not found");
|
|
265
|
+
return { metadata: {
|
|
266
|
+
tokenId: balance.tokenID ?? "",
|
|
267
|
+
attributes: balance.tokenMetadata.attributes,
|
|
268
|
+
image: balance.tokenMetadata.image,
|
|
269
|
+
name: balance.tokenMetadata.name,
|
|
270
|
+
description: balance.tokenMetadata.description,
|
|
271
|
+
video: balance.tokenMetadata.video,
|
|
272
|
+
audio: balance.tokenMetadata.audio
|
|
273
|
+
} };
|
|
274
|
+
});
|
|
275
|
+
return {
|
|
276
|
+
collectibles,
|
|
277
|
+
page: balances.page
|
|
278
|
+
};
|
|
279
|
+
} catch (error) {
|
|
280
|
+
console.error(error);
|
|
281
|
+
}
|
|
282
|
+
return await marketplaceClient.listCollectibles(apiArgs);
|
|
283
|
+
}
|
|
284
|
+
function listCollectiblesQueryOptions(params) {
|
|
285
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.side && params.config && (params.query?.enabled ?? true));
|
|
286
|
+
return infiniteQueryOptions({
|
|
287
|
+
queryKey: [...collectableKeys.lists, params],
|
|
288
|
+
queryFn: async ({ pageParam }) => {
|
|
289
|
+
const marketplaceConfig = await fetchMarketplaceConfig({ config: params.config });
|
|
290
|
+
return fetchListCollectibles({
|
|
291
|
+
chainId: params.chainId,
|
|
292
|
+
collectionAddress: params.collectionAddress,
|
|
293
|
+
config: params.config,
|
|
294
|
+
side: params.side,
|
|
295
|
+
filter: params.filter,
|
|
296
|
+
isLaos721: params.isLaos721,
|
|
297
|
+
marketplaceType: params.marketplaceType
|
|
298
|
+
}, marketplaceConfig, pageParam);
|
|
299
|
+
},
|
|
300
|
+
initialPageParam: {
|
|
301
|
+
page: 1,
|
|
302
|
+
pageSize: 30
|
|
303
|
+
},
|
|
304
|
+
getNextPageParam: (lastPage) => lastPage.page?.more ? lastPage.page : void 0,
|
|
305
|
+
...params.query,
|
|
306
|
+
enabled
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
//#endregion
|
|
311
|
+
//#region src/react/queries/listCollectiblesPaginated.ts
|
|
312
|
+
/**
|
|
313
|
+
* Fetches a list of collectibles with pagination support from the Marketplace API
|
|
314
|
+
*/
|
|
315
|
+
async function fetchListCollectiblesPaginated(params) {
|
|
316
|
+
const { collectionAddress, chainId, config, page = 1, pageSize = 30,...additionalApiParams } = params;
|
|
317
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
318
|
+
const pageParams = {
|
|
319
|
+
page,
|
|
320
|
+
pageSize
|
|
321
|
+
};
|
|
322
|
+
const apiArgs = {
|
|
323
|
+
contractAddress: collectionAddress,
|
|
324
|
+
chainId: String(chainId),
|
|
325
|
+
page: pageParams,
|
|
326
|
+
...additionalApiParams
|
|
327
|
+
};
|
|
328
|
+
return await marketplaceClient.listCollectibles(apiArgs);
|
|
329
|
+
}
|
|
330
|
+
function listCollectiblesPaginatedQueryOptions(params) {
|
|
331
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.side && params.config && (params.query?.enabled ?? true));
|
|
332
|
+
return queryOptions({
|
|
333
|
+
queryKey: [
|
|
334
|
+
...collectableKeys.lists,
|
|
335
|
+
"paginated",
|
|
336
|
+
params
|
|
337
|
+
],
|
|
338
|
+
queryFn: () => fetchListCollectiblesPaginated({
|
|
339
|
+
chainId: params.chainId,
|
|
340
|
+
collectionAddress: params.collectionAddress,
|
|
341
|
+
config: params.config,
|
|
342
|
+
side: params.side,
|
|
343
|
+
filter: params.filter,
|
|
344
|
+
page: params.page,
|
|
345
|
+
pageSize: params.pageSize
|
|
346
|
+
}),
|
|
347
|
+
...params.query,
|
|
348
|
+
enabled
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
//#endregion
|
|
353
|
+
//#region src/react/queries/collection.ts
|
|
354
|
+
/**
|
|
355
|
+
* Fetches collection information from the metadata API
|
|
356
|
+
*/
|
|
357
|
+
async function fetchCollection(params) {
|
|
358
|
+
const { collectionAddress, chainId, config } = params;
|
|
359
|
+
const metadataClient = getMetadataClient(config);
|
|
360
|
+
const result = await metadataClient.getContractInfo({
|
|
361
|
+
chainID: chainId.toString(),
|
|
362
|
+
contractAddress: collectionAddress
|
|
363
|
+
});
|
|
364
|
+
return result.contractInfo;
|
|
365
|
+
}
|
|
366
|
+
function collectionQueryOptions(params) {
|
|
367
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.config && (params.query?.enabled ?? true));
|
|
368
|
+
return queryOptions({
|
|
369
|
+
queryKey: [...collectionKeys.detail, params],
|
|
370
|
+
queryFn: () => fetchCollection({
|
|
371
|
+
chainId: params.chainId,
|
|
372
|
+
collectionAddress: params.collectionAddress,
|
|
373
|
+
config: params.config
|
|
374
|
+
}),
|
|
375
|
+
...params.query,
|
|
376
|
+
enabled
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
//#endregion
|
|
381
|
+
//#region src/react/queries/collectionBalanceDetails.ts
|
|
382
|
+
/**
|
|
383
|
+
* Fetches detailed balance information for multiple accounts from the Indexer API
|
|
384
|
+
*/
|
|
385
|
+
async function fetchCollectionBalanceDetails(params) {
|
|
386
|
+
const { chainId, filter, config } = params;
|
|
387
|
+
const indexerClient = getIndexerClient(chainId, config);
|
|
388
|
+
const promises = filter.accountAddresses.map((accountAddress) => indexerClient.getTokenBalancesDetails({ filter: {
|
|
389
|
+
accountAddresses: [accountAddress],
|
|
390
|
+
contractWhitelist: filter.contractWhitelist,
|
|
391
|
+
omitNativeBalances: filter.omitNativeBalances
|
|
392
|
+
} }));
|
|
393
|
+
const responses = await Promise.all(promises);
|
|
394
|
+
const mergedResponse = responses.reduce((acc, curr) => {
|
|
395
|
+
if (!curr) return acc;
|
|
396
|
+
return {
|
|
397
|
+
page: curr.page,
|
|
398
|
+
nativeBalances: [...acc.nativeBalances || [], ...curr.nativeBalances || []],
|
|
399
|
+
balances: [...acc.balances || [], ...curr.balances || []]
|
|
400
|
+
};
|
|
401
|
+
}, {
|
|
402
|
+
page: {},
|
|
403
|
+
nativeBalances: [],
|
|
404
|
+
balances: []
|
|
405
|
+
});
|
|
406
|
+
if (!mergedResponse) throw new Error("Failed to fetch collection balance details");
|
|
407
|
+
return mergedResponse;
|
|
408
|
+
}
|
|
409
|
+
function collectionBalanceDetailsQueryOptions(params) {
|
|
410
|
+
const enabled = Boolean(params.chainId && params.filter?.accountAddresses?.length && params.config && (params.query?.enabled ?? true));
|
|
411
|
+
return queryOptions({
|
|
412
|
+
queryKey: [
|
|
413
|
+
"balances",
|
|
414
|
+
"collectionBalanceDetails",
|
|
415
|
+
params
|
|
416
|
+
],
|
|
417
|
+
queryFn: () => fetchCollectionBalanceDetails({
|
|
418
|
+
chainId: params.chainId,
|
|
419
|
+
filter: params.filter,
|
|
420
|
+
config: params.config
|
|
421
|
+
}),
|
|
422
|
+
...params.query,
|
|
423
|
+
enabled
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
//#endregion
|
|
428
|
+
//#region src/react/queries/collectionDetails.ts
|
|
429
|
+
/**
|
|
430
|
+
* Fetches collection details from the marketplace API
|
|
431
|
+
*/
|
|
432
|
+
async function fetchCollectionDetails(params) {
|
|
433
|
+
const { collectionAddress, chainId, config,...additionalApiParams } = params;
|
|
434
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
435
|
+
const apiArgs = {
|
|
436
|
+
contractAddress: collectionAddress,
|
|
437
|
+
chainId: String(chainId),
|
|
438
|
+
...additionalApiParams
|
|
439
|
+
};
|
|
440
|
+
const result = await marketplaceClient.getCollectionDetail(apiArgs);
|
|
441
|
+
return result.collection;
|
|
442
|
+
}
|
|
443
|
+
function collectionDetailsQueryOptions(params) {
|
|
444
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.config && (params.query?.enabled ?? true));
|
|
445
|
+
return queryOptions({
|
|
446
|
+
queryKey: [...collectionKeys.detail, params],
|
|
447
|
+
queryFn: () => fetchCollectionDetails({
|
|
448
|
+
chainId: params.chainId,
|
|
449
|
+
collectionAddress: params.collectionAddress,
|
|
450
|
+
config: params.config
|
|
451
|
+
}),
|
|
452
|
+
...params.query,
|
|
453
|
+
enabled
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
//#endregion
|
|
458
|
+
//#region src/react/queries/listCollectionActivities.ts
|
|
459
|
+
/**
|
|
460
|
+
* Fetches collection activities from the Marketplace API
|
|
461
|
+
*/
|
|
462
|
+
async function fetchListCollectionActivities(params) {
|
|
463
|
+
const { collectionAddress, chainId, config, page, pageSize, sort,...additionalApiParams } = params;
|
|
464
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
465
|
+
const pageParams = page || pageSize || sort ? {
|
|
466
|
+
page: page ?? 1,
|
|
467
|
+
pageSize: pageSize ?? 10,
|
|
468
|
+
sort
|
|
469
|
+
} : void 0;
|
|
470
|
+
const apiArgs = {
|
|
471
|
+
contractAddress: collectionAddress,
|
|
472
|
+
chainId: String(chainId),
|
|
473
|
+
page: pageParams,
|
|
474
|
+
...additionalApiParams
|
|
475
|
+
};
|
|
476
|
+
return await marketplaceClient.listCollectionActivities(apiArgs);
|
|
477
|
+
}
|
|
478
|
+
function listCollectionActivitiesQueryOptions(params) {
|
|
479
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.config && (params.query?.enabled ?? true));
|
|
480
|
+
return queryOptions({
|
|
481
|
+
queryKey: [...collectionKeys.collectionActivities, params],
|
|
482
|
+
queryFn: () => fetchListCollectionActivities({
|
|
483
|
+
chainId: params.chainId,
|
|
484
|
+
collectionAddress: params.collectionAddress,
|
|
485
|
+
config: params.config,
|
|
486
|
+
page: params.page,
|
|
487
|
+
pageSize: params.pageSize,
|
|
488
|
+
sort: params.sort
|
|
489
|
+
}),
|
|
490
|
+
...params.query,
|
|
491
|
+
enabled
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
//#endregion
|
|
496
|
+
//#region src/react/queries/listCollections.ts
|
|
497
|
+
const allCollections = (marketplaceConfig) => {
|
|
498
|
+
return [...marketplaceConfig.market.collections, ...marketplaceConfig.shop.collections];
|
|
499
|
+
};
|
|
500
|
+
/**
|
|
501
|
+
* Fetches collections from the metadata API with marketplace config filtering
|
|
502
|
+
*/
|
|
503
|
+
async function fetchListCollections(params) {
|
|
504
|
+
const { marketplaceType, marketplaceConfig, config } = params;
|
|
505
|
+
const metadataClient = getMetadataClient(config);
|
|
506
|
+
let collections = allCollections(marketplaceConfig);
|
|
507
|
+
if (!collections?.length) return [];
|
|
508
|
+
if (marketplaceType) collections = collections.filter((collection) => collection.marketplaceType === marketplaceType);
|
|
509
|
+
const collectionsByChain = collections.reduce((acc, curr) => {
|
|
510
|
+
const { chainId, itemsAddress } = curr;
|
|
511
|
+
if (!acc[chainId]) acc[chainId] = [];
|
|
512
|
+
acc[chainId].push(itemsAddress);
|
|
513
|
+
return acc;
|
|
514
|
+
}, {});
|
|
515
|
+
const promises = Object.entries(collectionsByChain).map(([chainId, addresses]) => metadataClient.getContractInfoBatch({
|
|
516
|
+
chainID: chainId,
|
|
517
|
+
contractAddresses: addresses
|
|
518
|
+
}).then((resp) => Object.values(resp.contractInfoMap)));
|
|
519
|
+
const settled = await Promise.allSettled(promises);
|
|
520
|
+
if (settled.every((result) => result.status === "rejected")) {
|
|
521
|
+
const firstError = settled[0];
|
|
522
|
+
throw firstError.reason;
|
|
523
|
+
}
|
|
524
|
+
const results = settled.filter((r) => r.status === "fulfilled").flatMap((r) => r.value);
|
|
525
|
+
const collectionsWithMetadata = collections.map((collection) => {
|
|
526
|
+
const metadata = results.find((result) => compareAddress(result.address, collection.itemsAddress));
|
|
527
|
+
return {
|
|
528
|
+
collection,
|
|
529
|
+
metadata
|
|
530
|
+
};
|
|
531
|
+
}).filter((item) => item.metadata !== void 0).map(({ collection, metadata }) => ({
|
|
532
|
+
...collection,
|
|
533
|
+
...metadata
|
|
534
|
+
}));
|
|
535
|
+
return collectionsWithMetadata;
|
|
536
|
+
}
|
|
537
|
+
function listCollectionsQueryOptions(params) {
|
|
538
|
+
const enabled = Boolean(params.marketplaceConfig && params.config && (params.query?.enabled ?? true));
|
|
539
|
+
return queryOptions({
|
|
540
|
+
queryKey: [...collectionKeys.list, params],
|
|
541
|
+
queryFn: enabled ? () => fetchListCollections({
|
|
542
|
+
marketplaceConfig: params.marketplaceConfig,
|
|
543
|
+
config: params.config,
|
|
544
|
+
marketplaceType: params.marketplaceType
|
|
545
|
+
}) : skipToken,
|
|
546
|
+
...params.query,
|
|
547
|
+
enabled
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
const listCollectionsOptions = ({ marketplaceType, marketplaceConfig, config }) => {
|
|
551
|
+
return queryOptions({
|
|
552
|
+
queryKey: [...collectionKeys.list, {
|
|
553
|
+
marketplaceType,
|
|
554
|
+
marketplaceConfig,
|
|
555
|
+
config
|
|
556
|
+
}],
|
|
557
|
+
queryFn: marketplaceConfig ? () => fetchListCollections({
|
|
558
|
+
marketplaceConfig,
|
|
559
|
+
config,
|
|
560
|
+
marketplaceType
|
|
561
|
+
}) : skipToken,
|
|
562
|
+
enabled: Boolean(marketplaceConfig)
|
|
563
|
+
});
|
|
564
|
+
};
|
|
565
|
+
|
|
566
|
+
//#endregion
|
|
567
|
+
//#region src/react/queries/currency.ts
|
|
568
|
+
/**
|
|
569
|
+
* Fetches currency details from the marketplace API
|
|
570
|
+
*/
|
|
571
|
+
async function fetchCurrency(params) {
|
|
572
|
+
const { chainId, currencyAddress, config } = params;
|
|
573
|
+
const queryClient = getQueryClient();
|
|
574
|
+
let currencies = queryClient.getQueryData([...currencyKeys.lists, chainId]);
|
|
575
|
+
if (!currencies) {
|
|
576
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
577
|
+
currencies = await marketplaceClient.listCurrencies({ chainId: String(chainId) }).then((resp) => resp.currencies);
|
|
578
|
+
}
|
|
579
|
+
if (!currencies?.length) throw new Error("No currencies returned");
|
|
580
|
+
const currency = currencies.find((currency$1) => currency$1.contractAddress.toLowerCase() === currencyAddress.toLowerCase());
|
|
581
|
+
if (!currency) throw new Error("Currency not found");
|
|
582
|
+
return currency;
|
|
583
|
+
}
|
|
584
|
+
function currencyQueryOptions(params) {
|
|
585
|
+
const enabled = Boolean(params.chainId && params.currencyAddress && params.config && (params.query?.enabled ?? true));
|
|
586
|
+
return queryOptions({
|
|
587
|
+
queryKey: [...currencyKeys.details, params],
|
|
588
|
+
queryFn: params.chainId && params.currencyAddress ? () => fetchCurrency({
|
|
589
|
+
chainId: params.chainId,
|
|
590
|
+
currencyAddress: params.currencyAddress,
|
|
591
|
+
config: params.config
|
|
592
|
+
}) : skipToken,
|
|
593
|
+
...params.query,
|
|
594
|
+
enabled
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
//#endregion
|
|
599
|
+
//#region src/react/queries/marketCurrencies.ts
|
|
600
|
+
/**
|
|
601
|
+
* Fetches supported currencies for a marketplace
|
|
602
|
+
*/
|
|
603
|
+
async function fetchMarketCurrencies(params) {
|
|
604
|
+
const { chainId, includeNativeCurrency, collectionAddress, config } = params;
|
|
605
|
+
const includeNativeCurrencyOption = includeNativeCurrency ?? true;
|
|
606
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
607
|
+
let currencies = await marketplaceClient.listCurrencies({ chainId: String(chainId) }).then((resp) => resp.currencies.map((currency) => ({
|
|
608
|
+
...currency,
|
|
609
|
+
contractAddress: currency.contractAddress || zeroAddress
|
|
610
|
+
})));
|
|
611
|
+
if (collectionAddress) {
|
|
612
|
+
const queryClient = getQueryClient();
|
|
613
|
+
const marketplaceConfig = await queryClient.fetchQuery(marketplaceConfigOptions(config));
|
|
614
|
+
const currenciesOptions = marketplaceConfig.market.collections.find((collection) => compareAddress(collection.itemsAddress, collectionAddress))?.currencyOptions;
|
|
615
|
+
if (currenciesOptions) currencies = currencies.filter((currency) => currenciesOptions.includes(currency.contractAddress));
|
|
616
|
+
}
|
|
617
|
+
if (!includeNativeCurrencyOption) currencies = currencies.filter((currency) => !currency.nativeCurrency);
|
|
618
|
+
return currencies;
|
|
619
|
+
}
|
|
620
|
+
function marketCurrenciesQueryOptions(params) {
|
|
621
|
+
const enabled = Boolean(params.chainId && params.config && (params.query?.enabled ?? true));
|
|
622
|
+
return queryOptions({
|
|
623
|
+
queryKey: [...currencyKeys.lists, params],
|
|
624
|
+
queryFn: () => fetchMarketCurrencies({
|
|
625
|
+
chainId: params.chainId,
|
|
626
|
+
config: params.config,
|
|
627
|
+
includeNativeCurrency: params.includeNativeCurrency,
|
|
628
|
+
collectionAddress: params.collectionAddress
|
|
629
|
+
}),
|
|
630
|
+
...params.query,
|
|
631
|
+
enabled
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
//#endregion
|
|
636
|
+
//#region src/react/queries/countListingsForCollectible.ts
|
|
637
|
+
/**
|
|
638
|
+
* Fetches count of listings for a collectible from the marketplace API
|
|
639
|
+
*/
|
|
640
|
+
async function fetchCountListingsForCollectible(params) {
|
|
641
|
+
const { collectionAddress, chainId, collectibleId, config, filter } = params;
|
|
642
|
+
const client = getMarketplaceClient(config);
|
|
643
|
+
const apiArgs = {
|
|
644
|
+
contractAddress: collectionAddress,
|
|
645
|
+
chainId: String(chainId),
|
|
646
|
+
tokenId: collectibleId,
|
|
647
|
+
filter
|
|
648
|
+
};
|
|
649
|
+
const result = await client.getCountOfListingsForCollectible(apiArgs);
|
|
650
|
+
return result.count;
|
|
651
|
+
}
|
|
652
|
+
function countListingsForCollectibleQueryOptions(params) {
|
|
653
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.collectibleId && params.config && (params.query?.enabled ?? true));
|
|
654
|
+
return queryOptions({
|
|
655
|
+
queryKey: [...collectableKeys.listingsCount, params],
|
|
656
|
+
queryFn: () => fetchCountListingsForCollectible({
|
|
657
|
+
chainId: params.chainId,
|
|
658
|
+
collectionAddress: params.collectionAddress,
|
|
659
|
+
collectibleId: params.collectibleId,
|
|
660
|
+
config: params.config,
|
|
661
|
+
filter: params.filter
|
|
662
|
+
}),
|
|
663
|
+
...params.query,
|
|
664
|
+
enabled
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
//#endregion
|
|
669
|
+
//#region src/react/queries/countOffersForCollectible.ts
|
|
670
|
+
/**
|
|
671
|
+
* Fetches count of offers for a collectible from the marketplace API
|
|
672
|
+
*/
|
|
673
|
+
async function fetchCountOffersForCollectible(params) {
|
|
674
|
+
const { collectionAddress, chainId, collectibleId, config, filter } = params;
|
|
675
|
+
const client = getMarketplaceClient(config);
|
|
676
|
+
const apiArgs = {
|
|
677
|
+
contractAddress: collectionAddress,
|
|
678
|
+
chainId: String(chainId),
|
|
679
|
+
tokenId: collectibleId,
|
|
680
|
+
filter
|
|
681
|
+
};
|
|
682
|
+
const result = await client.getCountOfOffersForCollectible(apiArgs);
|
|
683
|
+
return result.count;
|
|
684
|
+
}
|
|
685
|
+
function countOffersForCollectibleQueryOptions(params) {
|
|
686
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.collectibleId && params.config && (params.query?.enabled ?? true));
|
|
687
|
+
return queryOptions({
|
|
688
|
+
queryKey: [...collectableKeys.offersCount, params],
|
|
689
|
+
queryFn: () => fetchCountOffersForCollectible({
|
|
690
|
+
chainId: params.chainId,
|
|
691
|
+
collectionAddress: params.collectionAddress,
|
|
692
|
+
collectibleId: params.collectibleId,
|
|
693
|
+
config: params.config,
|
|
694
|
+
filter: params.filter
|
|
695
|
+
}),
|
|
696
|
+
...params.query,
|
|
697
|
+
enabled
|
|
698
|
+
});
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
//#endregion
|
|
702
|
+
//#region src/react/queries/floorOrder.ts
|
|
703
|
+
/**
|
|
704
|
+
* Fetches the floor order for a collection from the marketplace API
|
|
705
|
+
*/
|
|
706
|
+
async function fetchFloorOrder(params) {
|
|
707
|
+
const { collectionAddress, chainId, config,...additionalApiParams } = params;
|
|
708
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
709
|
+
const apiArgs = {
|
|
710
|
+
contractAddress: collectionAddress,
|
|
711
|
+
chainId: String(chainId),
|
|
712
|
+
...additionalApiParams
|
|
713
|
+
};
|
|
714
|
+
const result = await marketplaceClient.getFloorOrder(apiArgs);
|
|
715
|
+
return result.collectible;
|
|
716
|
+
}
|
|
717
|
+
function floorOrderQueryOptions(params) {
|
|
718
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.config && (params.query?.enabled ?? true));
|
|
719
|
+
return queryOptions({
|
|
720
|
+
queryKey: [...collectableKeys.floorOrders, params],
|
|
721
|
+
queryFn: () => fetchFloorOrder({
|
|
722
|
+
chainId: params.chainId,
|
|
723
|
+
collectionAddress: params.collectionAddress,
|
|
724
|
+
config: params.config,
|
|
725
|
+
...params.filter && { filter: params.filter } || {}
|
|
726
|
+
}),
|
|
727
|
+
...params.query,
|
|
728
|
+
enabled
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
//#endregion
|
|
733
|
+
//#region src/react/queries/highestOffer.ts
|
|
734
|
+
/**
|
|
735
|
+
* Fetches the highest offer for a collectible from the marketplace API
|
|
736
|
+
*/
|
|
737
|
+
async function fetchHighestOffer(params) {
|
|
738
|
+
const { collectionAddress, chainId, config,...additionalApiParams } = params;
|
|
739
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
740
|
+
const apiArgs = {
|
|
741
|
+
contractAddress: collectionAddress,
|
|
742
|
+
chainId: String(chainId),
|
|
743
|
+
...additionalApiParams
|
|
744
|
+
};
|
|
745
|
+
const result = await marketplaceClient.getCollectibleHighestOffer(apiArgs);
|
|
746
|
+
return result.order ?? null;
|
|
747
|
+
}
|
|
748
|
+
function highestOfferQueryOptions(params) {
|
|
749
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.tokenId && params.config && (params.query?.enabled ?? true));
|
|
750
|
+
return queryOptions({
|
|
751
|
+
queryKey: [...collectableKeys.highestOffers, params],
|
|
752
|
+
queryFn: () => fetchHighestOffer({
|
|
753
|
+
chainId: params.chainId,
|
|
754
|
+
collectionAddress: params.collectionAddress,
|
|
755
|
+
tokenId: params.tokenId,
|
|
756
|
+
config: params.config
|
|
757
|
+
}),
|
|
758
|
+
...params.query,
|
|
759
|
+
enabled
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
//#endregion
|
|
764
|
+
//#region src/react/queries/listListingsForCollectible.ts
|
|
765
|
+
/**
|
|
766
|
+
* Fetches listings for a specific collectible from the Marketplace API
|
|
767
|
+
*/
|
|
768
|
+
async function fetchListListingsForCollectible(params) {
|
|
769
|
+
const { collectionAddress, chainId, collectibleId, config,...additionalApiParams } = params;
|
|
770
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
771
|
+
const apiArgs = {
|
|
772
|
+
contractAddress: collectionAddress,
|
|
773
|
+
chainId: String(chainId),
|
|
774
|
+
tokenId: collectibleId,
|
|
775
|
+
...additionalApiParams
|
|
776
|
+
};
|
|
777
|
+
return await marketplaceClient.listCollectibleListings(apiArgs);
|
|
778
|
+
}
|
|
779
|
+
function listListingsForCollectibleQueryOptions(params) {
|
|
780
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.collectibleId && params.config && (params.query?.enabled ?? true));
|
|
781
|
+
return queryOptions({
|
|
782
|
+
queryKey: [...collectableKeys.listings, params],
|
|
783
|
+
queryFn: () => fetchListListingsForCollectible({
|
|
784
|
+
chainId: params.chainId,
|
|
785
|
+
collectionAddress: params.collectionAddress,
|
|
786
|
+
collectibleId: params.collectibleId,
|
|
787
|
+
config: params.config,
|
|
788
|
+
filter: params.filter,
|
|
789
|
+
page: params.page
|
|
790
|
+
}),
|
|
791
|
+
...params.query,
|
|
792
|
+
enabled
|
|
793
|
+
});
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
//#endregion
|
|
797
|
+
//#region src/react/queries/lowestListing.ts
|
|
798
|
+
/**
|
|
799
|
+
* Fetches the lowest listing for a collectible from the marketplace API
|
|
800
|
+
*/
|
|
801
|
+
async function fetchLowestListing(params) {
|
|
802
|
+
const { collectionAddress, chainId, config,...additionalApiParams } = params;
|
|
803
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
804
|
+
const apiArgs = {
|
|
805
|
+
contractAddress: collectionAddress,
|
|
806
|
+
chainId: String(chainId),
|
|
807
|
+
...additionalApiParams
|
|
808
|
+
};
|
|
809
|
+
const result = await marketplaceClient.getCollectibleLowestListing(apiArgs);
|
|
810
|
+
return result.order || null;
|
|
811
|
+
}
|
|
812
|
+
function lowestListingQueryOptions(params) {
|
|
813
|
+
const enabled = Boolean(params.collectionAddress && params.chainId && params.tokenId && params.config && (params.query?.enabled ?? true));
|
|
814
|
+
return queryOptions({
|
|
815
|
+
queryKey: [...collectableKeys.lowestListings, params],
|
|
816
|
+
queryFn: () => fetchLowestListing({
|
|
817
|
+
chainId: params.chainId,
|
|
818
|
+
collectionAddress: params.collectionAddress,
|
|
819
|
+
tokenId: params.tokenId,
|
|
820
|
+
config: params.config
|
|
821
|
+
}),
|
|
822
|
+
...params.query,
|
|
823
|
+
enabled
|
|
824
|
+
});
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
//#endregion
|
|
828
|
+
//#region src/react/queries/checkoutOptions.ts
|
|
829
|
+
/**
|
|
830
|
+
* Fetches checkout options from the Marketplace API
|
|
831
|
+
*/
|
|
832
|
+
async function fetchCheckoutOptions(params) {
|
|
833
|
+
const { chainId, walletAddress, orders, config, additionalFee } = params;
|
|
834
|
+
const client = getMarketplaceClient(config);
|
|
835
|
+
const apiArgs = {
|
|
836
|
+
chainId: String(chainId),
|
|
837
|
+
wallet: walletAddress,
|
|
838
|
+
orders: orders.map((order) => ({
|
|
839
|
+
contractAddress: order.collectionAddress,
|
|
840
|
+
orderId: order.orderId,
|
|
841
|
+
marketplace: order.marketplace
|
|
842
|
+
})),
|
|
843
|
+
additionalFee: additionalFee ?? 0
|
|
844
|
+
};
|
|
845
|
+
const result = await client.checkoutOptionsMarketplace(apiArgs);
|
|
846
|
+
return result;
|
|
847
|
+
}
|
|
848
|
+
function checkoutOptionsQueryOptions(params) {
|
|
849
|
+
const enabled = Boolean(params.chainId && params.walletAddress && params.orders?.length && params.config && (params.query?.enabled ?? true));
|
|
850
|
+
return queryOptions({
|
|
851
|
+
queryKey: [
|
|
852
|
+
"checkout",
|
|
853
|
+
"options",
|
|
854
|
+
params
|
|
855
|
+
],
|
|
856
|
+
queryFn: () => fetchCheckoutOptions({
|
|
857
|
+
chainId: params.chainId,
|
|
858
|
+
walletAddress: params.walletAddress,
|
|
859
|
+
orders: params.orders,
|
|
860
|
+
config: params.config,
|
|
861
|
+
additionalFee: params.additionalFee ?? 0
|
|
862
|
+
}),
|
|
863
|
+
...params.query,
|
|
864
|
+
enabled
|
|
865
|
+
});
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
//#endregion
|
|
869
|
+
//#region src/react/queries/checkoutOptionsSalesContract.ts
|
|
870
|
+
/**
|
|
871
|
+
* Fetches checkout options for sales contract from the Marketplace API
|
|
872
|
+
*/
|
|
873
|
+
async function fetchCheckoutOptionsSalesContract(params) {
|
|
874
|
+
const { chainId, walletAddress, contractAddress, collectionAddress, items, config } = params;
|
|
875
|
+
const client = getMarketplaceClient(config);
|
|
876
|
+
const apiArgs = {
|
|
877
|
+
chainId: String(chainId),
|
|
878
|
+
wallet: walletAddress,
|
|
879
|
+
contractAddress,
|
|
880
|
+
collectionAddress,
|
|
881
|
+
items
|
|
882
|
+
};
|
|
883
|
+
const result = await client.checkoutOptionsSalesContract(apiArgs);
|
|
884
|
+
return result;
|
|
885
|
+
}
|
|
886
|
+
function checkoutOptionsSalesContractQueryOptions(params) {
|
|
887
|
+
const enabled = Boolean(params.chainId && params.walletAddress && params.contractAddress && params.collectionAddress && params.items?.length && params.config && (params.query?.enabled ?? true));
|
|
888
|
+
return queryOptions({
|
|
889
|
+
queryKey: [
|
|
890
|
+
"checkout",
|
|
891
|
+
"options",
|
|
892
|
+
"salesContract",
|
|
893
|
+
params
|
|
894
|
+
],
|
|
895
|
+
queryFn: () => fetchCheckoutOptionsSalesContract({
|
|
896
|
+
chainId: params.chainId,
|
|
897
|
+
walletAddress: params.walletAddress,
|
|
898
|
+
contractAddress: params.contractAddress,
|
|
899
|
+
collectionAddress: params.collectionAddress,
|
|
900
|
+
items: params.items,
|
|
901
|
+
config: params.config
|
|
902
|
+
}),
|
|
903
|
+
...params.query,
|
|
904
|
+
enabled
|
|
905
|
+
});
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
//#endregion
|
|
909
|
+
//#region src/react/queries/convertPriceToUSD.ts
|
|
910
|
+
/**
|
|
911
|
+
* Converts a price amount from a specific currency to USD using exchange rates
|
|
912
|
+
*/
|
|
913
|
+
async function fetchConvertPriceToUSD(params) {
|
|
914
|
+
const { chainId, currencyAddress, amountRaw, config } = params;
|
|
915
|
+
const queryClient = getQueryClient();
|
|
916
|
+
const currencies = await queryClient.fetchQuery(marketCurrenciesQueryOptions({
|
|
917
|
+
chainId,
|
|
918
|
+
config
|
|
919
|
+
}));
|
|
920
|
+
const currencyDetails = currencies.find((c) => c.contractAddress.toLowerCase() === currencyAddress.toLowerCase());
|
|
921
|
+
if (!currencyDetails) throw new Error("Currency not found");
|
|
922
|
+
const amountDecimal = Number(formatUnits(BigInt(amountRaw), currencyDetails.decimals));
|
|
923
|
+
const usdAmount = amountDecimal * currencyDetails.exchangeRate;
|
|
924
|
+
return {
|
|
925
|
+
usdAmount,
|
|
926
|
+
usdAmountFormatted: usdAmount.toFixed(2)
|
|
927
|
+
};
|
|
928
|
+
}
|
|
929
|
+
function convertPriceToUSDQueryOptions(params) {
|
|
930
|
+
const enabled = Boolean(params.chainId && params.currencyAddress && params.amountRaw && params.config && (params.query?.enabled ?? true));
|
|
931
|
+
return queryOptions({
|
|
932
|
+
queryKey: [
|
|
933
|
+
"currency",
|
|
934
|
+
"convertPriceToUSD",
|
|
935
|
+
params
|
|
936
|
+
],
|
|
937
|
+
queryFn: () => fetchConvertPriceToUSD({
|
|
938
|
+
chainId: params.chainId,
|
|
939
|
+
currencyAddress: params.currencyAddress,
|
|
940
|
+
amountRaw: params.amountRaw,
|
|
941
|
+
config: params.config
|
|
942
|
+
}),
|
|
943
|
+
...params.query,
|
|
944
|
+
enabled
|
|
945
|
+
});
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
//#endregion
|
|
949
|
+
//#region src/react/queries/comparePrices.ts
|
|
950
|
+
/**
|
|
951
|
+
* Compares prices between different currencies by converting both to USD
|
|
952
|
+
*/
|
|
953
|
+
async function fetchComparePrices(params) {
|
|
954
|
+
const { chainId, priceAmountRaw, priceCurrencyAddress, compareToPriceAmountRaw, compareToPriceCurrencyAddress, config } = params;
|
|
955
|
+
const [priceUSD, compareToPriceUSD] = await Promise.all([fetchConvertPriceToUSD({
|
|
956
|
+
chainId,
|
|
957
|
+
currencyAddress: priceCurrencyAddress,
|
|
958
|
+
amountRaw: priceAmountRaw,
|
|
959
|
+
config
|
|
960
|
+
}), fetchConvertPriceToUSD({
|
|
961
|
+
chainId,
|
|
962
|
+
currencyAddress: compareToPriceCurrencyAddress,
|
|
963
|
+
amountRaw: compareToPriceAmountRaw,
|
|
964
|
+
config
|
|
965
|
+
})]);
|
|
966
|
+
const difference = priceUSD.usdAmount - compareToPriceUSD.usdAmount;
|
|
967
|
+
if (compareToPriceUSD.usdAmount === 0) throw new Error("Cannot compare to zero price");
|
|
968
|
+
const percentageDifference = difference / compareToPriceUSD.usdAmount * 100;
|
|
969
|
+
const isAbove = percentageDifference > 0;
|
|
970
|
+
const isSame = percentageDifference === 0;
|
|
971
|
+
return {
|
|
972
|
+
percentageDifference,
|
|
973
|
+
percentageDifferenceFormatted: Math.abs(percentageDifference).toFixed(2),
|
|
974
|
+
status: isAbove ? "above" : isSame ? "same" : "below"
|
|
975
|
+
};
|
|
976
|
+
}
|
|
977
|
+
function comparePricesQueryOptions(params) {
|
|
978
|
+
const enabled = Boolean(params.chainId && params.priceAmountRaw && params.priceCurrencyAddress && params.compareToPriceAmountRaw && params.compareToPriceCurrencyAddress && params.config && (params.query?.enabled ?? true));
|
|
979
|
+
return queryOptions({
|
|
980
|
+
queryKey: [
|
|
981
|
+
"currency",
|
|
982
|
+
"conversion",
|
|
983
|
+
"compare",
|
|
984
|
+
params
|
|
985
|
+
],
|
|
986
|
+
queryFn: () => fetchComparePrices({
|
|
987
|
+
chainId: params.chainId,
|
|
988
|
+
priceAmountRaw: params.priceAmountRaw,
|
|
989
|
+
priceCurrencyAddress: params.priceCurrencyAddress,
|
|
990
|
+
compareToPriceAmountRaw: params.compareToPriceAmountRaw,
|
|
991
|
+
compareToPriceCurrencyAddress: params.compareToPriceCurrencyAddress,
|
|
992
|
+
config: params.config
|
|
993
|
+
}),
|
|
994
|
+
...params.query,
|
|
995
|
+
enabled
|
|
996
|
+
});
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
//#endregion
|
|
1000
|
+
//#region src/react/queries/countOfPrimarySaleItems.ts
|
|
1001
|
+
async function fetchCountOfPrimarySaleItems(args, config) {
|
|
1002
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
1003
|
+
const { chainId, primarySaleContractAddress, filter } = args;
|
|
1004
|
+
const data = await marketplaceClient.getCountOfPrimarySaleItems({
|
|
1005
|
+
chainId: String(chainId),
|
|
1006
|
+
primarySaleContractAddress,
|
|
1007
|
+
filter
|
|
1008
|
+
});
|
|
1009
|
+
return data.count;
|
|
1010
|
+
}
|
|
1011
|
+
function countOfPrimarySaleItemsOptions(args, config) {
|
|
1012
|
+
return queryOptions({
|
|
1013
|
+
enabled: args.query?.enabled ?? true,
|
|
1014
|
+
queryKey: ["countOfPrimarySaleItems", args],
|
|
1015
|
+
queryFn: () => fetchCountOfPrimarySaleItems(args, config)
|
|
1016
|
+
});
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
//#endregion
|
|
1020
|
+
//#region src/react/queries/filters.ts
|
|
1021
|
+
/**
|
|
1022
|
+
* Fetches collection filters from the Metadata API with optional marketplace filtering
|
|
1023
|
+
*/
|
|
1024
|
+
async function fetchFilters(params) {
|
|
1025
|
+
const { chainId, collectionAddress, showAllFilters, excludePropertyValues, config } = params;
|
|
1026
|
+
const metadataClient = getMetadataClient(config);
|
|
1027
|
+
const filters = await metadataClient.getTokenMetadataPropertyFilters({
|
|
1028
|
+
chainID: chainId.toString(),
|
|
1029
|
+
contractAddress: collectionAddress,
|
|
1030
|
+
excludeProperties: [],
|
|
1031
|
+
excludePropertyValues
|
|
1032
|
+
}).then((resp) => resp.filters);
|
|
1033
|
+
if (showAllFilters) return filters;
|
|
1034
|
+
const queryClient = getQueryClient();
|
|
1035
|
+
const marketplaceConfig = await queryClient.fetchQuery(marketplaceConfigOptions(config));
|
|
1036
|
+
const collectionFilters = marketplaceConfig.market.collections.find((c) => compareAddress(c.itemsAddress, collectionAddress))?.filterSettings;
|
|
1037
|
+
if (!collectionFilters?.exclusions || collectionFilters.exclusions.length === 0 || !collectionFilters.filterOrder || collectionFilters.filterOrder.length === 0) return filters;
|
|
1038
|
+
const { filterOrder, exclusions } = collectionFilters;
|
|
1039
|
+
const sortedFilters = filters.toSorted((a, b) => {
|
|
1040
|
+
const aIndex = filterOrder.indexOf(a.name) > -1 ? filterOrder.indexOf(a.name) : filterOrder.length;
|
|
1041
|
+
const bIndex = filterOrder.indexOf(b.name) > -1 ? filterOrder.indexOf(b.name) : filterOrder.length;
|
|
1042
|
+
return aIndex - bIndex;
|
|
1043
|
+
});
|
|
1044
|
+
const filteredResults = sortedFilters.reduce((acc, filter) => {
|
|
1045
|
+
const exclusionRule = exclusions.find((rule) => rule.key === filter.name);
|
|
1046
|
+
if (!exclusionRule) {
|
|
1047
|
+
acc.push(filter);
|
|
1048
|
+
return acc;
|
|
1049
|
+
}
|
|
1050
|
+
if (exclusionRule.condition === FilterCondition.ENTIRE_KEY) return acc;
|
|
1051
|
+
if (exclusionRule.condition === FilterCondition.SPECIFIC_VALUE && exclusionRule.value) {
|
|
1052
|
+
const filteredValues = filter.values?.filter((value) => value !== exclusionRule.value) || [];
|
|
1053
|
+
if (filteredValues.length > 0) acc.push({
|
|
1054
|
+
...filter,
|
|
1055
|
+
values: filteredValues
|
|
1056
|
+
});
|
|
1057
|
+
}
|
|
1058
|
+
return acc;
|
|
1059
|
+
}, []);
|
|
1060
|
+
return filteredResults;
|
|
1061
|
+
}
|
|
1062
|
+
function filtersQueryOptions(params) {
|
|
1063
|
+
const enabled = Boolean(params.chainId && params.collectionAddress && params.config && (params.query?.enabled ?? true));
|
|
1064
|
+
return queryOptions({
|
|
1065
|
+
queryKey: ["filters", params],
|
|
1066
|
+
queryFn: () => fetchFilters({
|
|
1067
|
+
chainId: params.chainId,
|
|
1068
|
+
collectionAddress: params.collectionAddress,
|
|
1069
|
+
showAllFilters: params.showAllFilters,
|
|
1070
|
+
excludePropertyValues: params.excludePropertyValues,
|
|
1071
|
+
config: params.config
|
|
1072
|
+
}),
|
|
1073
|
+
...params.query,
|
|
1074
|
+
enabled
|
|
1075
|
+
});
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
//#endregion
|
|
1079
|
+
//#region src/react/queries/getTokenRanges.ts
|
|
1080
|
+
/**
|
|
1081
|
+
* Fetches token ID ranges for a collection from the Indexer API
|
|
1082
|
+
*/
|
|
1083
|
+
async function fetchGetTokenRanges(params) {
|
|
1084
|
+
const { chainId, collectionAddress, config } = params;
|
|
1085
|
+
const indexerClient = getIndexerClient(chainId, config);
|
|
1086
|
+
const response = await indexerClient.getTokenIDRanges({ contractAddress: collectionAddress });
|
|
1087
|
+
if (!response) throw new Error("Failed to fetch token ranges");
|
|
1088
|
+
return response;
|
|
1089
|
+
}
|
|
1090
|
+
function getTokenRangesQueryOptions(params) {
|
|
1091
|
+
const enabled = Boolean(params.chainId && params.collectionAddress && params.config && (params.query?.enabled ?? true));
|
|
1092
|
+
return queryOptions({
|
|
1093
|
+
queryKey: [
|
|
1094
|
+
"indexer",
|
|
1095
|
+
"tokenRanges",
|
|
1096
|
+
params
|
|
1097
|
+
],
|
|
1098
|
+
queryFn: () => fetchGetTokenRanges({
|
|
1099
|
+
chainId: params.chainId,
|
|
1100
|
+
collectionAddress: params.collectionAddress,
|
|
1101
|
+
config: params.config
|
|
1102
|
+
}),
|
|
1103
|
+
...params.query,
|
|
1104
|
+
enabled
|
|
1105
|
+
});
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
//#endregion
|
|
1109
|
+
//#region src/react/queries/inventory.ts
|
|
1110
|
+
const stateByCollection = /* @__PURE__ */ new Map();
|
|
1111
|
+
const clearInventoryState = () => {
|
|
1112
|
+
stateByCollection.clear();
|
|
1113
|
+
};
|
|
1114
|
+
const getCollectionKey = (args) => `${args.chainId}-${args.collectionAddress}-${args.accountAddress}`;
|
|
1115
|
+
function getOrInitState(collectionKey) {
|
|
1116
|
+
if (!stateByCollection.has(collectionKey)) stateByCollection.set(collectionKey, {
|
|
1117
|
+
seenTokenIds: /* @__PURE__ */ new Set(),
|
|
1118
|
+
marketplaceFinished: false,
|
|
1119
|
+
indexerTokensFetched: false,
|
|
1120
|
+
indexerTokenBalances: /* @__PURE__ */ new Map()
|
|
1121
|
+
});
|
|
1122
|
+
return stateByCollection.get(collectionKey);
|
|
1123
|
+
}
|
|
1124
|
+
function collectibleFromTokenBalance(token) {
|
|
1125
|
+
return {
|
|
1126
|
+
metadata: {
|
|
1127
|
+
tokenId: token.tokenID ?? "",
|
|
1128
|
+
attributes: token.tokenMetadata?.attributes ?? [],
|
|
1129
|
+
image: token.tokenMetadata?.image,
|
|
1130
|
+
name: token.tokenMetadata?.name ?? "",
|
|
1131
|
+
description: token.tokenMetadata?.description,
|
|
1132
|
+
video: token.tokenMetadata?.video,
|
|
1133
|
+
audio: token.tokenMetadata?.audio
|
|
1134
|
+
},
|
|
1135
|
+
contractInfo: token.contractInfo,
|
|
1136
|
+
contractType: token.contractType,
|
|
1137
|
+
balance: token.balance
|
|
1138
|
+
};
|
|
1139
|
+
}
|
|
1140
|
+
async function fetchAllIndexerTokens(chainId, accountAddress, collectionAddress, config, state, isLaos721) {
|
|
1141
|
+
if (isLaos721) {
|
|
1142
|
+
const laosClient = new LaosAPI();
|
|
1143
|
+
const { balances } = await laosClient.getTokenBalances({
|
|
1144
|
+
chainId: chainId.toString(),
|
|
1145
|
+
accountAddress,
|
|
1146
|
+
includeMetadata: true,
|
|
1147
|
+
contractAddress: collectionAddress,
|
|
1148
|
+
page: { sort: [{
|
|
1149
|
+
column: "CREATED_AT",
|
|
1150
|
+
order: "DESC"
|
|
1151
|
+
}] }
|
|
1152
|
+
});
|
|
1153
|
+
for (const balance of balances) if (balance.tokenID) state.indexerTokenBalances.set(balance.tokenID, collectibleFromTokenBalance(balance));
|
|
1154
|
+
state.indexerTokensFetched = true;
|
|
1155
|
+
return;
|
|
1156
|
+
}
|
|
1157
|
+
const indexerClient = getIndexerClient(chainId, config);
|
|
1158
|
+
let page = { pageSize: 50 };
|
|
1159
|
+
while (true) {
|
|
1160
|
+
const { balances, page: nextPage } = await indexerClient.getTokenBalances({
|
|
1161
|
+
accountAddress,
|
|
1162
|
+
contractAddress: collectionAddress,
|
|
1163
|
+
includeMetadata: true,
|
|
1164
|
+
page
|
|
1165
|
+
});
|
|
1166
|
+
for (const balance of balances) if (balance.tokenID) state.indexerTokenBalances.set(balance.tokenID, collectibleFromTokenBalance(balance));
|
|
1167
|
+
if (!nextPage.more) break;
|
|
1168
|
+
page = nextPage;
|
|
1169
|
+
}
|
|
1170
|
+
state.indexerTokensFetched = true;
|
|
1171
|
+
}
|
|
1172
|
+
function processRemainingIndexerTokens(state, page) {
|
|
1173
|
+
const allTokens = Array.from(state.indexerTokenBalances.values());
|
|
1174
|
+
const newTokens = allTokens.filter((token) => !state.seenTokenIds.has(token.metadata.tokenId));
|
|
1175
|
+
const startIndex = (page.page - 1) * page.pageSize;
|
|
1176
|
+
const endIndex = startIndex + page.pageSize;
|
|
1177
|
+
const paginatedTokens = newTokens.slice(startIndex, endIndex);
|
|
1178
|
+
for (const token of paginatedTokens) state.seenTokenIds.add(token.metadata.tokenId);
|
|
1179
|
+
return {
|
|
1180
|
+
collectibles: paginatedTokens,
|
|
1181
|
+
page: {
|
|
1182
|
+
page: page.page,
|
|
1183
|
+
pageSize: page.pageSize,
|
|
1184
|
+
more: endIndex < newTokens.length
|
|
1185
|
+
}
|
|
1186
|
+
};
|
|
1187
|
+
}
|
|
1188
|
+
function processMarketplaceCollectibles(collectibles, state, page) {
|
|
1189
|
+
for (const c of collectibles) state.seenTokenIds.add(c.metadata.tokenId);
|
|
1190
|
+
const enrichedCollectibles = collectibles.map((c) => {
|
|
1191
|
+
const tokenId = c.metadata.tokenId;
|
|
1192
|
+
const indexerData = state.indexerTokenBalances.get(tokenId);
|
|
1193
|
+
return {
|
|
1194
|
+
...c,
|
|
1195
|
+
balance: indexerData?.balance,
|
|
1196
|
+
contractInfo: indexerData?.contractInfo,
|
|
1197
|
+
contractType: indexerData?.contractType
|
|
1198
|
+
};
|
|
1199
|
+
});
|
|
1200
|
+
const marketplaceTokenIds = new Set(enrichedCollectibles.map((c) => c.metadata.tokenId));
|
|
1201
|
+
const missingTokens = Array.from(state.indexerTokenBalances.entries()).filter(([tokenId]) => !marketplaceTokenIds.has(tokenId)).map(([_, balance]) => balance).slice(0, page.pageSize);
|
|
1202
|
+
return {
|
|
1203
|
+
enrichedCollectibles,
|
|
1204
|
+
missingTokens
|
|
1205
|
+
};
|
|
1206
|
+
}
|
|
1207
|
+
async function fetchInventory(args, config, page) {
|
|
1208
|
+
const { accountAddress, collectionAddress, chainId, isLaos721 } = args;
|
|
1209
|
+
const collectionKey = getCollectionKey(args);
|
|
1210
|
+
const state = getOrInitState(collectionKey);
|
|
1211
|
+
if (!state.indexerTokensFetched) await fetchAllIndexerTokens(chainId, accountAddress, collectionAddress, config, state, isLaos721);
|
|
1212
|
+
if (state.marketplaceFinished) return processRemainingIndexerTokens(state, page);
|
|
1213
|
+
const marketplaceConfig = await fetchMarketplaceConfig({ config });
|
|
1214
|
+
const collectibles = await fetchListCollectibles({
|
|
1215
|
+
chainId,
|
|
1216
|
+
collectionAddress,
|
|
1217
|
+
filter: {
|
|
1218
|
+
inAccounts: [accountAddress],
|
|
1219
|
+
includeEmpty: true
|
|
1220
|
+
},
|
|
1221
|
+
side: OrderSide.listing,
|
|
1222
|
+
config
|
|
1223
|
+
}, marketplaceConfig, page);
|
|
1224
|
+
const { enrichedCollectibles, missingTokens } = processMarketplaceCollectibles(collectibles.collectibles, state, page);
|
|
1225
|
+
if (!collectibles.page?.more) {
|
|
1226
|
+
state.marketplaceFinished = true;
|
|
1227
|
+
return {
|
|
1228
|
+
collectibles: [...enrichedCollectibles, ...missingTokens],
|
|
1229
|
+
page: {
|
|
1230
|
+
page: collectibles.page?.page ?? page.page,
|
|
1231
|
+
pageSize: collectibles.page?.pageSize ?? page.pageSize,
|
|
1232
|
+
more: missingTokens.length > 0
|
|
1233
|
+
}
|
|
1234
|
+
};
|
|
1235
|
+
}
|
|
1236
|
+
return {
|
|
1237
|
+
collectibles: enrichedCollectibles,
|
|
1238
|
+
page: {
|
|
1239
|
+
page: collectibles.page?.page ?? page.page,
|
|
1240
|
+
pageSize: collectibles.page?.pageSize ?? page.pageSize,
|
|
1241
|
+
more: Boolean(collectibles.page?.more)
|
|
1242
|
+
}
|
|
1243
|
+
};
|
|
1244
|
+
}
|
|
1245
|
+
function inventoryOptions(args, config) {
|
|
1246
|
+
const collectionKey = getCollectionKey(args);
|
|
1247
|
+
const enabledQuery = args.query?.enabled ?? true;
|
|
1248
|
+
const enabled = enabledQuery && !!args.accountAddress && !!args.collectionAddress;
|
|
1249
|
+
return infiniteQueryOptions({
|
|
1250
|
+
queryKey: [
|
|
1251
|
+
"inventory",
|
|
1252
|
+
args.accountAddress,
|
|
1253
|
+
args.collectionAddress,
|
|
1254
|
+
args.chainId
|
|
1255
|
+
],
|
|
1256
|
+
queryFn: ({ pageParam }) => fetchInventory({
|
|
1257
|
+
...args,
|
|
1258
|
+
isLaos721: args.isLaos721 ?? false
|
|
1259
|
+
}, config, pageParam),
|
|
1260
|
+
initialPageParam: {
|
|
1261
|
+
page: 1,
|
|
1262
|
+
pageSize: 30
|
|
1263
|
+
},
|
|
1264
|
+
getNextPageParam: (lastPage) => lastPage.page?.more ? lastPage.page : void 0,
|
|
1265
|
+
enabled,
|
|
1266
|
+
meta: { onInvalidate: () => {
|
|
1267
|
+
stateByCollection.delete(collectionKey);
|
|
1268
|
+
} }
|
|
1269
|
+
});
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
//#endregion
|
|
1273
|
+
//#region src/react/queries/listTokenMetadata.ts
|
|
1274
|
+
/**
|
|
1275
|
+
* Fetches token metadata from the metadata API
|
|
1276
|
+
*/
|
|
1277
|
+
async function fetchListTokenMetadata(params) {
|
|
1278
|
+
const { chainId, contractAddress, tokenIds, config } = params;
|
|
1279
|
+
const metadataClient = getMetadataClient(config);
|
|
1280
|
+
const response = await metadataClient.getTokenMetadata({
|
|
1281
|
+
chainID: chainId.toString(),
|
|
1282
|
+
contractAddress,
|
|
1283
|
+
tokenIDs: tokenIds
|
|
1284
|
+
});
|
|
1285
|
+
return response.tokenMetadata;
|
|
1286
|
+
}
|
|
1287
|
+
function listTokenMetadataQueryOptions(params) {
|
|
1288
|
+
const enabled = Boolean(params.chainId && params.contractAddress && params.tokenIds?.length && params.config && (params.query?.enabled ?? true));
|
|
1289
|
+
return queryOptions({
|
|
1290
|
+
queryKey: [...tokenKeys.metadata, params],
|
|
1291
|
+
queryFn: () => fetchListTokenMetadata({
|
|
1292
|
+
chainId: params.chainId,
|
|
1293
|
+
contractAddress: params.contractAddress,
|
|
1294
|
+
tokenIds: params.tokenIds,
|
|
1295
|
+
config: params.config
|
|
1296
|
+
}),
|
|
1297
|
+
...params.query,
|
|
1298
|
+
enabled
|
|
1299
|
+
});
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
//#endregion
|
|
1303
|
+
//#region src/react/queries/primarySaleItems.ts
|
|
1304
|
+
/**
|
|
1305
|
+
* Fetches primary sale items from the marketplace API
|
|
1306
|
+
*/
|
|
1307
|
+
async function fetchPrimarySaleItems(params) {
|
|
1308
|
+
const { chainId, primarySaleContractAddress, filter, page, config } = params;
|
|
1309
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
1310
|
+
return marketplaceClient.listPrimarySaleItems({
|
|
1311
|
+
chainId: String(chainId),
|
|
1312
|
+
primarySaleContractAddress,
|
|
1313
|
+
filter,
|
|
1314
|
+
page
|
|
1315
|
+
});
|
|
1316
|
+
}
|
|
1317
|
+
const listPrimarySaleItemsQueryOptions = (params) => {
|
|
1318
|
+
const enabled = Boolean(params.primarySaleContractAddress && params.chainId && params.config && (params.query?.enabled ?? true));
|
|
1319
|
+
const initialPage = params.page || {
|
|
1320
|
+
page: 1,
|
|
1321
|
+
pageSize: 30
|
|
1322
|
+
};
|
|
1323
|
+
return infiniteQueryOptions({
|
|
1324
|
+
queryKey: ["listPrimarySaleItems", params],
|
|
1325
|
+
queryFn: async ({ pageParam }) => {
|
|
1326
|
+
return fetchPrimarySaleItems({
|
|
1327
|
+
chainId: params.chainId,
|
|
1328
|
+
primarySaleContractAddress: params.primarySaleContractAddress,
|
|
1329
|
+
filter: params.filter,
|
|
1330
|
+
page: pageParam,
|
|
1331
|
+
config: params.config
|
|
1332
|
+
});
|
|
1333
|
+
},
|
|
1334
|
+
initialPageParam: initialPage,
|
|
1335
|
+
getNextPageParam: (lastPage) => lastPage.page?.more ? lastPage.page : void 0,
|
|
1336
|
+
...params.query,
|
|
1337
|
+
enabled
|
|
1338
|
+
});
|
|
1339
|
+
};
|
|
1340
|
+
|
|
1341
|
+
//#endregion
|
|
1342
|
+
//#region src/react/queries/primarySaleItemsCount.ts
|
|
1343
|
+
/**
|
|
1344
|
+
* Fetches the count of primary sale items from the marketplace API
|
|
1345
|
+
*/
|
|
1346
|
+
async function fetchPrimarySaleItemsCount(params) {
|
|
1347
|
+
const { chainId, primarySaleContractAddress, filter, config } = params;
|
|
1348
|
+
const marketplaceClient = getMarketplaceClient(config);
|
|
1349
|
+
return marketplaceClient.getCountOfPrimarySaleItems({
|
|
1350
|
+
chainId: String(chainId),
|
|
1351
|
+
primarySaleContractAddress,
|
|
1352
|
+
filter
|
|
1353
|
+
});
|
|
1354
|
+
}
|
|
1355
|
+
const primarySaleItemsCountQueryOptions = (args) => {
|
|
1356
|
+
const enabled = Boolean(args.primarySaleContractAddress && args.chainId && args.config && (args.query?.enabled ?? true));
|
|
1357
|
+
return queryOptions({
|
|
1358
|
+
queryKey: ["primarySaleItemsCount", args],
|
|
1359
|
+
queryFn: () => fetchPrimarySaleItemsCount({
|
|
1360
|
+
chainId: args.chainId,
|
|
1361
|
+
primarySaleContractAddress: args.primarySaleContractAddress,
|
|
1362
|
+
filter: args.filter,
|
|
1363
|
+
config: args.config
|
|
1364
|
+
}),
|
|
1365
|
+
...args.query,
|
|
1366
|
+
enabled
|
|
1367
|
+
});
|
|
1368
|
+
};
|
|
1369
|
+
|
|
1370
|
+
//#endregion
|
|
1371
|
+
//#region src/react/queries/searchTokenMetadata.ts
|
|
1372
|
+
/**
|
|
1373
|
+
* Fetches token metadata from the metadata API using search filters
|
|
1374
|
+
*/
|
|
1375
|
+
async function fetchSearchTokenMetadata(params) {
|
|
1376
|
+
const { chainId, collectionAddress, filter, page, config } = params;
|
|
1377
|
+
const metadataClient = getMetadataClient(config);
|
|
1378
|
+
const response = await metadataClient.searchTokenMetadata({
|
|
1379
|
+
chainID: chainId.toString(),
|
|
1380
|
+
contractAddress: collectionAddress,
|
|
1381
|
+
filter: filter ?? {},
|
|
1382
|
+
page
|
|
1383
|
+
});
|
|
1384
|
+
return {
|
|
1385
|
+
tokenMetadata: response.tokenMetadata,
|
|
1386
|
+
page: response.page
|
|
1387
|
+
};
|
|
1388
|
+
}
|
|
1389
|
+
function searchTokenMetadataQueryOptions(params) {
|
|
1390
|
+
const enabled = Boolean(params.chainId && params.collectionAddress && params.config && (params.query?.enabled ?? true));
|
|
1391
|
+
const initialPageParam = {
|
|
1392
|
+
page: 1,
|
|
1393
|
+
pageSize: 30
|
|
1394
|
+
};
|
|
1395
|
+
return infiniteQueryOptions({
|
|
1396
|
+
queryKey: [
|
|
1397
|
+
...tokenKeys.metadata,
|
|
1398
|
+
"search",
|
|
1399
|
+
params
|
|
1400
|
+
],
|
|
1401
|
+
queryFn: ({ pageParam = initialPageParam }) => fetchSearchTokenMetadata({
|
|
1402
|
+
chainId: params.chainId,
|
|
1403
|
+
collectionAddress: params.collectionAddress,
|
|
1404
|
+
filter: params.filter,
|
|
1405
|
+
config: params.config,
|
|
1406
|
+
page: pageParam
|
|
1407
|
+
}),
|
|
1408
|
+
initialPageParam,
|
|
1409
|
+
getNextPageParam: (lastPage) => {
|
|
1410
|
+
if (!lastPage.page?.more) return void 0;
|
|
1411
|
+
return {
|
|
1412
|
+
page: (lastPage.page.page || 1) + 1,
|
|
1413
|
+
pageSize: lastPage.page.pageSize || 20
|
|
1414
|
+
};
|
|
1415
|
+
},
|
|
1416
|
+
...params.query,
|
|
1417
|
+
enabled
|
|
1418
|
+
});
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
//#endregion
|
|
1422
|
+
//#region src/react/queries/tokenSupplies.ts
|
|
1423
|
+
/**
|
|
1424
|
+
* Fetches token supplies with support for both indexer and LAOS APIs
|
|
1425
|
+
* Uses the more efficient single-contract APIs from both services
|
|
1426
|
+
*/
|
|
1427
|
+
async function fetchTokenSupplies(params) {
|
|
1428
|
+
const { chainId, collectionAddress, config, isLaos721,...rest } = params;
|
|
1429
|
+
if (isLaos721) {
|
|
1430
|
+
const laosApi = new LaosAPI();
|
|
1431
|
+
const laosPage = rest.page ? { sort: rest.page.sort?.map((sortBy) => ({
|
|
1432
|
+
column: sortBy.column,
|
|
1433
|
+
order: sortBy.order
|
|
1434
|
+
})) || [] } : void 0;
|
|
1435
|
+
const result$1 = await laosApi.getTokenSupplies({
|
|
1436
|
+
chainId: chainId.toString(),
|
|
1437
|
+
contractAddress: collectionAddress,
|
|
1438
|
+
includeMetadata: rest.includeMetadata,
|
|
1439
|
+
page: laosPage
|
|
1440
|
+
});
|
|
1441
|
+
return result$1;
|
|
1442
|
+
}
|
|
1443
|
+
const indexerClient = getIndexerClient(chainId, config);
|
|
1444
|
+
const apiArgs = {
|
|
1445
|
+
contractAddress: collectionAddress,
|
|
1446
|
+
...rest
|
|
1447
|
+
};
|
|
1448
|
+
const result = await indexerClient.getTokenSupplies(apiArgs);
|
|
1449
|
+
return result;
|
|
1450
|
+
}
|
|
1451
|
+
function tokenSuppliesQueryOptions(params) {
|
|
1452
|
+
const enabled = Boolean(params.chainId && params.collectionAddress && params.config && (params.query?.enabled ?? true));
|
|
1453
|
+
const initialPageParam = {
|
|
1454
|
+
page: 1,
|
|
1455
|
+
pageSize: 30
|
|
1456
|
+
};
|
|
1457
|
+
const queryFn = async ({ pageParam = initialPageParam }) => fetchTokenSupplies({
|
|
1458
|
+
chainId: params.chainId,
|
|
1459
|
+
collectionAddress: params.collectionAddress,
|
|
1460
|
+
config: params.config,
|
|
1461
|
+
isLaos721: params.isLaos721,
|
|
1462
|
+
includeMetadata: params.includeMetadata,
|
|
1463
|
+
metadataOptions: params.metadataOptions,
|
|
1464
|
+
page: pageParam
|
|
1465
|
+
});
|
|
1466
|
+
return infiniteQueryOptions({
|
|
1467
|
+
queryKey: [...tokenKeys.supplies, params],
|
|
1468
|
+
queryFn,
|
|
1469
|
+
initialPageParam,
|
|
1470
|
+
getNextPageParam: (lastPage) => lastPage.page?.more ? lastPage.page : void 0,
|
|
1471
|
+
...params.query,
|
|
1472
|
+
enabled
|
|
1473
|
+
});
|
|
1474
|
+
}
|
|
1475
|
+
|
|
1476
|
+
//#endregion
|
|
1477
|
+
export { balanceOfCollectibleOptions, checkoutOptionsQueryOptions, checkoutOptionsSalesContractQueryOptions, clearInventoryState, collectibleQueryOptions, collectionBalanceDetailsQueryOptions, collectionDetailsQueryOptions, collectionQueryOptions, comparePricesQueryOptions, convertPriceToUSDQueryOptions, countListingsForCollectibleQueryOptions, countOfCollectablesQueryOptions, countOfPrimarySaleItemsOptions, countOffersForCollectibleQueryOptions, currencyQueryOptions, fetchBalanceOfCollectible, fetchBalances, fetchCheckoutOptions, fetchCheckoutOptionsSalesContract, fetchCollectible, fetchCollection, fetchCollectionBalanceDetails, fetchCollectionDetails, fetchComparePrices, fetchConvertPriceToUSD, fetchCountListingsForCollectible, fetchCountOfCollectables, fetchCountOfPrimarySaleItems, fetchCountOffersForCollectible, fetchCurrency, fetchFilters, fetchFloorOrder, fetchGetTokenRanges, fetchHighestOffer, fetchInventory, fetchListCollectibleActivities, fetchListCollectibles, fetchListCollectiblesPaginated, fetchListCollectionActivities, fetchListCollections, fetchListListingsForCollectible, fetchListTokenMetadata, fetchLowestListing, fetchMarketCurrencies, fetchPrimarySaleItems, fetchPrimarySaleItemsCount, fetchSearchTokenMetadata, fetchTokenSupplies, filtersQueryOptions, floorOrderQueryOptions, getTokenRangesQueryOptions, highestOfferQueryOptions, inventoryOptions, listBalancesOptions, listCollectibleActivitiesQueryOptions, listCollectiblesPaginatedQueryOptions, listCollectiblesQueryOptions, listCollectionActivitiesQueryOptions, listCollectionsOptions, listCollectionsQueryOptions, listListingsForCollectibleQueryOptions, listPrimarySaleItemsQueryOptions, listTokenMetadataQueryOptions, lowestListingQueryOptions, marketCurrenciesQueryOptions, primarySaleItemsCountQueryOptions, searchTokenMetadataQueryOptions, tokenSuppliesQueryOptions };
|
|
1478
|
+
//# sourceMappingURL=queries-BYT4GJw3.js.map
|