@dcl/marketplace-site 0.0.0-2504158221.commit-5fc09e7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/asset-manifest.json +43 -0
  2. package/decentraland.png +0 -0
  3. package/favicon.ico +0 -0
  4. package/index.html +1 -0
  5. package/known_origin.png +0 -0
  6. package/makers_place.png +0 -0
  7. package/manifest.json +6 -0
  8. package/package.json +14 -0
  9. package/proximity.json +1 -0
  10. package/robots.txt +4 -0
  11. package/sitemap.static.xml +5 -0
  12. package/sitemap.xml +9 -0
  13. package/static/css/2.3ffeea52.chunk.css +724 -0
  14. package/static/css/2.3ffeea52.chunk.css.map +1 -0
  15. package/static/css/main.e7fb10f7.chunk.css +2 -0
  16. package/static/css/main.e7fb10f7.chunk.css.map +1 -0
  17. package/static/js/2.9823bc52.chunk.js +3 -0
  18. package/static/js/2.9823bc52.chunk.js.LICENSE.txt +182 -0
  19. package/static/js/2.9823bc52.chunk.js.map +1 -0
  20. package/static/js/3.6ba4dfb6.chunk.js +3 -0
  21. package/static/js/3.6ba4dfb6.chunk.js.LICENSE.txt +8 -0
  22. package/static/js/3.6ba4dfb6.chunk.js.map +1 -0
  23. package/static/js/4.a07b9883.chunk.js +2 -0
  24. package/static/js/4.a07b9883.chunk.js.map +1 -0
  25. package/static/js/main.1dacaabe.chunk.js +2 -0
  26. package/static/js/main.1dacaabe.chunk.js.map +1 -0
  27. package/static/js/runtime-main.ee924b6e.js +2 -0
  28. package/static/js/runtime-main.ee924b6e.js.map +1 -0
  29. package/static/media/0ab54153eeeca0ce03978cc463b257f7.38c6d8ba.woff2 +0 -0
  30. package/static/media/13db00b7a34fee4d819ab7f9838cc428.d68fa3e6.eot +0 -0
  31. package/static/media/701ae6abd4719e9c2ada3535a497b341.752905fa.eot +0 -0
  32. package/static/media/82f60bd0b94a1ed68b1e6e309ce2e8c3.9c4845b4.svg +366 -0
  33. package/static/media/8e3c7f5520f5ae906c6cf6d7f3ddcd19.a01e3f2d.eot +0 -0
  34. package/static/media/962a1bf31c081691065fe333d9fa8105.62d9dae4.svg +1518 -0
  35. package/static/media/9c74e172f87984c48ddf5c8108cabe67.99f63ae7.png +0 -0
  36. package/static/media/BodyShapeIcon.7d2d2181.svg +15 -0
  37. package/static/media/EarringsIcon.b5797b80.svg +24 -0
  38. package/static/media/EyebrowIcon.264226d0.svg +12 -0
  39. package/static/media/EyesIcon.0bf78f1d.svg +18 -0
  40. package/static/media/EyewearIcon.714cfd51.svg +26 -0
  41. package/static/media/FacilHairIcon.1955abf5.svg +11 -0
  42. package/static/media/FeetIcon.88fa8975.svg +19 -0
  43. package/static/media/FemaleIcon.eefd8bbb.svg +12 -0
  44. package/static/media/HairIcon.4f18f427.svg +12 -0
  45. package/static/media/HatIcon.0ec3953a.svg +14 -0
  46. package/static/media/HelmetIcon.dd7b36f0.svg +28 -0
  47. package/static/media/LowerBodyIcon.9ae60b69.svg +21 -0
  48. package/static/media/MaleIcon.bcbdebfe.svg +11 -0
  49. package/static/media/MaskIcon.6a35beb3.svg +28 -0
  50. package/static/media/MouthIcon.26f25edc.svg +14 -0
  51. package/static/media/SkinIcon.e5d460ab.svg +1 -0
  52. package/static/media/TiaraIcon.3c31fa49.svg +27 -0
  53. package/static/media/TopHeadIcon.1e7c50a5.svg +22 -0
  54. package/static/media/UnisexIcon.049c756e.svg +13 -0
  55. package/static/media/UpperBodyIcon.008bdffa.svg +16 -0
  56. package/static/media/a046592bac8f2fd96e994733faf3858c.cac87dc0.woff +0 -0
  57. package/static/media/a1a749e89f578a49306ec2b055c073da.6729d297.svg +1008 -0
  58. package/static/media/ad97afd3337e8cda302d10ff5a4026b8.53671035.ttf +0 -0
  59. package/static/media/b87b9ba532ace76ae9f6edfe9f72ded2.c656b8ca.ttf +0 -0
  60. package/static/media/brand-icons.278156e4.woff2 +0 -0
  61. package/static/media/brand-icons.65a2fb6d.ttf +0 -0
  62. package/static/media/brand-icons.6729d297.svg +1008 -0
  63. package/static/media/brand-icons.cac87dc0.woff +0 -0
  64. package/static/media/brand-icons.d68fa3e6.eot +0 -0
  65. package/static/media/c5ebe0b32dc1b5cc449a76c4204d13bb.65a2fb6d.ttf +0 -0
  66. package/static/media/cd6c777f1945164224dee082abaea03a.687a4990.woff2 +0 -0
  67. package/static/media/district.26895caf.svg +7 -0
  68. package/static/media/e8c322de9658cbeb8a774b6624167c2c.278156e4.woff2 +0 -0
  69. package/static/media/ef60a4f6c25ef7f39f2d25a748dbecfe.ddae9b1b.woff +0 -0
  70. package/static/media/faff92145777a3cbaf8e7367b4807987.425399f8.woff +0 -0
  71. package/static/media/filters-active.b715262f.svg +7 -0
  72. package/static/media/filters.661f6dea.svg +6 -0
  73. package/static/media/flags.99f63ae7.png +0 -0
  74. package/static/media/forward.90df4a1b.svg +6 -0
  75. package/static/media/fullscreen.6d910b69.svg +3 -0
  76. package/static/media/hero.0ac14959.png +0 -0
  77. package/static/media/icon-discord.00ad7cd7.svg +3 -0
  78. package/static/media/icon-facebook.d3844319.svg +3 -0
  79. package/static/media/icon-twitter.38aad811.svg +3 -0
  80. package/static/media/icon-website.0f33a82d.svg +3 -0
  81. package/static/media/icons.38c6d8ba.woff2 +0 -0
  82. package/static/media/icons.425399f8.woff +0 -0
  83. package/static/media/icons.62d9dae4.svg +1518 -0
  84. package/static/media/icons.a01e3f2d.eot +0 -0
  85. package/static/media/icons.c656b8ca.ttf +0 -0
  86. package/static/media/jump_in.64ccb30b.svg +6 -0
  87. package/static/media/logo_dark.ced4e507.svg +9 -0
  88. package/static/media/outline-icons.53671035.ttf +0 -0
  89. package/static/media/outline-icons.687a4990.woff2 +0 -0
  90. package/static/media/outline-icons.752905fa.eot +0 -0
  91. package/static/media/outline-icons.9c4845b4.svg +366 -0
  92. package/static/media/outline-icons.ddae9b1b.woff +0 -0
  93. package/static/media/pin-land.76bb433b.svg +6 -0
  94. package/static/media/plaza.914fe988.svg +7 -0
  95. package/static/media/preview-avatar-icon.982f15fe.svg +4 -0
  96. package/static/media/preview-wearable-icon.1d1f057b.svg +3 -0
  97. package/static/media/road.f6d1b92b.svg +7 -0
  98. package/static/media/search.15c090cb.svg +6 -0
  99. package/static/media/watermelon.77964463.svg +4 -0
  100. package/super_rare.png +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["components/Coordinate/Coordinate.module.css","components/AssetCard/EmoteTags/EmoteTags.module.css","components/AssetPage/Title/Title.module.css","components/AssetPage/Expiration/Expiration.module.css","components/AssetPage/Actions/Actions.module.css","components/AssetPage/ParcelDetail/ParcelDetail.module.css","components/AssetPage/WearableDetail/WearableDetail.module.css","components/AssetPage/EmoteDetail/EmoteDetail.module.css","components/CollectionList/CollectionList.module.css","modules/store/utils.ts","lib/environment.ts","components/ScrollToTop/ScrollToTop.tsx","setup.ts","lib/text.ts","modules/asset/types.ts","modules/vendor/decentraland/land/api.ts","contracts/ERC721Abi.ts","contracts/ERC721.ts","modules/contract/ContractFactory.ts","modules/nft/utils.ts","modules/vendor/decentraland/routing/types.ts","modules/vendor/super_rare/routing/types.ts","modules/vendor/makers_place/routing/types.ts","modules/vendor/known_origin/routing/types.ts","contracts/ConverterAbi.ts","contracts/Converter.ts","modules/vendor/TokenConverter.ts","modules/vendor/MarketplacePrice.ts","modules/vendor/routing/types.ts","modules/routing/types.ts","modules/nft/types.ts","modules/ui/types.ts","modules/ui/utils.ts","modules/routing/search.ts","modules/vendor/utils.ts","modules/vendor/makers_place/api.ts","modules/contract/types.ts","modules/vendor/makers_place/NFTService.ts","modules/vendor/makers_place/ContractService.ts","modules/vendor/known_origin/types.ts","contracts/MarketplaceAdapterAbi.ts","contracts/MarketplaceAdapter.ts","modules/vendor/makers_place/OrderService.ts","modules/vendor/makers_place/index.ts","modules/vendor/known_origin/api.ts","modules/vendor/known_origin/edition/fragments.ts","modules/vendor/known_origin/edition/api.ts","modules/vendor/known_origin/token/fragments.ts","modules/vendor/known_origin/token/api.ts","modules/vendor/known_origin/ContractService.ts","modules/vendor/known_origin/NFTService.ts","modules/vendor/types.ts","modules/vendor/known_origin/OrderService.ts","modules/vendor/known_origin/index.ts","modules/vendor/super_rare/ContractService.ts","modules/vendor/super_rare/api.ts","modules/vendor/super_rare/NFTService.ts","modules/vendor/super_rare/OrderService.ts","modules/vendor/super_rare/index.ts","modules/vendor/VendorFactory.ts","modules/contract/utils.ts","modules/vendor/decentraland/nft/api.ts","modules/vendor/decentraland/bid/api.ts","modules/vendor/decentraland/utils.ts","modules/vendor/decentraland/BidService.ts","modules/vendor/decentraland/ContractService.ts","modules/vendor/decentraland/NFTService.ts","modules/vendor/decentraland/order/api.ts","modules/vendor/decentraland/OrderService.ts","modules/vendor/decentraland/collection/api.ts","modules/vendor/decentraland/sale/api.ts","modules/vendor/decentraland/account/api.ts","modules/vendor/decentraland/index.ts","modules/routing/locations.ts","modules/wallet/utils.ts","modules/asset/utils.ts","lib/mana.ts","modules/order/actions.ts","modules/nft/actions.ts","modules/bid/actions.ts","modules/item/actions.ts","modules/ui/preview/actions.ts","modules/analytics/track.ts","modules/analytics/rollbar.ts","modules/translation/locales/index.ts","modules/account/actions.ts","modules/account/reducer.ts","modules/bid/utils.ts","modules/bid/reducer.ts","modules/item/reducer.ts","modules/nft/reducer.ts","modules/order/reducer.ts","modules/proximity/actions.ts","modules/proximity/reducer.ts","modules/routing/actions.ts","modules/routing/reducer.ts","modules/tile/actions.ts","modules/tile/reducer.ts","modules/ui/asset/homepage/reducer.ts","modules/ui/asset/reducer.ts","modules/ui/nft/bid/reducer.ts","modules/ui/nft/partner/reducer.ts","modules/ui/nft/reducer.ts","modules/ui/actions.ts","modules/ui/browse/reducer.ts","modules/ui/preview/reducer.ts","modules/ui/reducer.ts","modules/collection/actions.ts","modules/collection/reducer.ts","modules/store/actions.ts","modules/store/reducer.ts","modules/sale/actions.ts","modules/sale/reducer.ts","modules/identity/actions.ts","modules/identity/reducer.ts","modules/reducer.ts","modules/bid/sagas.ts","modules/nft/sagas.ts","modules/order/sagas.ts","modules/proximity/sagas.ts","lib/utils.ts","modules/nft/selectors.ts","modules/item/selectors.ts","modules/order/utils.ts","modules/order/selectors.ts","modules/nft/wearable/types.ts","modules/ui/browse/selectors.ts","modules/account/utils.ts","modules/account/selectors.ts","modules/routing/selectors.ts","modules/vendor/api.ts","modules/routing/utils.ts","modules/sale/selectors.ts","modules/routing/sagas.ts","modules/tile/sagas.ts","modules/toast/sagas.ts","modules/toast/toasts.tsx","modules/translation/sagas.ts","modules/ui/sagas.ts","modules/wallet/sagas.ts","modules/vendor/decentraland/item/api.ts","modules/item/sagas.ts","modules/collection/sagas.ts","modules/sale/sagas.ts","modules/account/sagas.ts","modules/identity/selectors.ts","modules/identity/utils.ts","modules/store/selectors.ts","modules/store/sagas.ts","modules/identity/sagas.ts","modules/sagas.ts","modules/store.ts","components/Navigation/Navigation.types.ts","components/IntroPopup/IntroPopup.tsx","components/UserMenu/UserMenu.tsx","components/UserMenu/index.ts","components/UserMenu/UserMenu.container.ts","components/Navbar/Navbar.tsx","components/Navbar/Navbar.container.ts","components/Footer/Footer.tsx","components/Navigation/Navigation.tsx","modules/tile/selectors.ts","components/Coordinate/Coordinate.tsx","components/Mana/Mana.tsx","components/Atlas/Popup/Popup.tsx","components/Atlas/Popup/index.ts","components/Atlas/Atlas.tsx","components/Atlas/Atlas.container.ts","components/Menu/Menu.tsx","components/Menu/MenuItem/MenuItem.tsx","components/Menu/DropdownMenu/DropdownMenu.tsx","components/Vendor/decentraland/NFTSections/NFTSectionsMenuItems/NFTSectionsMenuItems.tsx","components/Vendor/decentraland/NFTSections/NFTSectionsMenuItems/index.ts","components/AccountSidebar/CurrentAccountSidebar/CurrentAccountSidebar.tsx","components/AccountSidebar/CurrentAccountSidebar/index.ts","components/AccountSidebar/OtherAccountSidebar/OtherAccountSidebar.tsx","components/AccountSidebar/OtherAccountSidebar/index.ts","components/AccountSidebar/OtherAccountSidebar/OtherAccountSidebar.container.tsx","components/AccountSidebar/AccountSidebar.tsx","components/AccountSidebar/AccountSidebar.container.ts","modules/proximity/selectors.ts","modules/nft/parcel/utils.ts","modules/proximity/utils.ts","modules/proximity/hooks.ts","components/AssetCard/ProximityTags/ProximityTags.tsx","components/AssetCard/ProximityTags/ProximityTags.container.ts","components/AssetCard/ParcelTags/ParcelTags.tsx","components/AssetCard/EstateTags/EstateTags.tsx","components/RarityBadge/RarityBadge.tsx","components/RarityBadge/index.ts","components/RarityBadge/RarityBadge.container.ts","components/AssetPage/IconBadge/IconBadge.tsx","components/AssetPage/IconBadge/index.ts","components/GenderBadge/GenderBadge.tsx","components/AssetCard/WearableTags/WearableTags.tsx","components/GenderBadge/index.ts","components/AssetCard/EmoteTags/EmoteTags.tsx","components/AssetCard/ENSTags/ENSTags.tsx","modules/ui/preview/selectors.ts","contracts/EstateRegistryAbi.ts","contracts/EstateRegistry.ts","modules/nft/estate/utils.ts","components/AssetImage/AssetImage.tsx","components/AssetImage/AssetImage.container.ts","components/ListedBadge/index.ts","components/ListedBadge/ListedBadge.tsx","components/AssetCard/AssetCard.tsx","components/AssetCard/AssetCard.container.ts","components/AssetList/AssetList.tsx","components/AssetList/AssetList.container.ts","components/Layout/Row/Row.tsx","components/Layout/Column/Column.tsx","components/Vendor/decentraland/NFTSections/NFTSections.tsx","components/Vendor/decentraland/NFTSidebar/NFTSidebar.tsx","components/Vendor/NFTSidebar/NFTSidebar.tsx","components/Vendor/NFTSidebar/NFTSidebar.container.ts","components/Chip/Chip.tsx","lib/input.ts","components/Vendor/NFTFilters/TextFilter/TextFilter.tsx","components/Vendor/NFTFilters/ArrayFilter/ArrayFilter.tsx","components/Vendor/NFTFilters/SelectFilter/SelectFilter.tsx","components/Vendor/NFTFilters/FiltersMenu/FiltersMenu.tsx","components/Vendor/decentraland/NFTFilters/NFTFilters.tsx","components/Vendor/decentraland/NFTFilters/NFTFilters.container.ts","components/Vendor/PriceChangeNotice/PriceChangeNotice.tsx","components/Vendor/PriceChangeNotice/PriceChangeNotice.container.ts","components/Vendor/super_rare/NFTFilters/NFTFilters.tsx","components/Vendor/super_rare/NFTFilters/NFTFilters.container.ts","components/Vendor/makers_place/NFTFilters/NFTFilters.tsx","components/Vendor/makers_place/NFTFilters/NFTFilters.container.ts","components/Vendor/known_origin/NFTFilters/NFTFilters.tsx","components/Vendor/known_origin/NFTFilters/NFTFilters.container.ts","components/Vendor/NFTFilters/NFTFilters.tsx","components/Vendor/NFTFilters/NFTFilters.container.ts","components/AssetBrowse/Box/Box.tsx","components/AssetBrowse/ToggleBox/ToggleBox.tsx","components/OnSaleList/AssetCell/AssetCell.tsx","components/OnSaleList/AssetCell/index.ts","components/OnSaleList/OnSaleListElement/OnSaleListElement.tsx","components/OnSaleList/OnSaleListElement/index.ts","components/OnSaleList/utils.ts","components/OnSaleList/OnSaleList.tsx","components/OnSaleList/index.ts","components/OnSaleList/OnSaleList.container.ts","modules/collection/selectors.ts","components/CollectionProvider/CollectionProvider.tsx","components/CollectionProvider/index.ts","components/CollectionProvider/CollectionProvider.container.ts","components/CollectionImage/CollectionImage.tsx","components/CollectionImage/index.ts","components/CollectionList/CollectionList.tsx","components/CollectionList/index.ts","components/CollectionList/CollectionList.container.ts","components/StoreSettings/InputContainer/InputContainer.tsx","components/StoreSettings/InputContainer/index.ts","components/StoreSettings/CoverPicker/CoverPicker.tsx","components/StoreSettings/CoverPicker/index.ts","components/StoreSettings/TextInput/TextInput.tsx","components/StoreSettings/TextInput/index.ts","components/StoreSettings/StoreSettings.tsx","components/StoreSettings/index.ts","components/StoreSettings/StoreSettings.container.ts","components/Sales/Stats/Stats.tsx","components/Sales/Stats/index.ts","components/Sales/Stats/Stats.container.ts","components/Sales/Activity/Activity.tsx","components/Sales/Activity/Activity.container.ts","components/Sales/Activity/index.ts","components/Sales/Sales.tsx","components/Sales/index.ts","modules/bid/selectors.ts","modules/ui/nft/bid/selectors.ts","components/AssetProvider/AssetProvider.tsx","components/AssetProvider/AssetProvider.container.ts","modules/item/utils.ts","modules/nft/hooks.ts","components/Bid/AcceptButton/AcceptButton.tsx","components/Bid/WarningMessage/WarningMessage.tsx","lib/date.ts","components/ManaField/ManaField.tsx","components/ConfirmInputValueModal/ConfirmInputValueModal.tsx","components/Bid/Bid.tsx","components/Bid/Bid.container.ts","components/Bids/Bids.tsx","components/Bids/Bids.container.ts","components/AssetBrowse/AssetBrowse.tsx","components/AssetBrowse/AssetBrowse.container.ts","components/BrowsePage/BrowsePage.tsx","components/BrowsePage/BrowsePage.container.ts","components/PageHeader/PageHeader.tsx","lib/timer.ts","components/ExternalLinkModal/ExternalLinkModal.tsx","components/ExternalLinkModal/index.ts","components/AccountPage/AccountBanner/AccountBanner.tsx","components/AccountPage/AccountBanner/index.ts","components/AccountPage/AccountBanner/AccountBanner.container.tsx","components/AccountPage/AccountPage.tsx","components/AccountPage/AccountPage.container.ts","components/SignInPage/SignInPage.tsx","modules/transaction/utils.ts","components/SettingsPage/Authorization/utils.ts","components/SettingsPage/Authorization/Authorization.tsx","components/SettingsPage/Authorization/Authorization.container.ts","components/SettingsPage/SettingsPage.tsx","components/SettingsPage/SettingsPage.container.ts","components/AssetProviderPage/AssetProviderPage.tsx","components/AssetProviderPage/AssetProviderPage.container.ts","components/AssetPage/Network/Network.tsx","components/AssetPage/Description/Description.tsx","components/AssetPage/CategoryBadge/CategoryBadge.tsx","components/AssetPage/CategoryBadge/index.ts","components/AssetPage/SmartBadge/SmartBadge.tsx","components/AssetPage/SmartBadge/index.ts","components/AssetPage/Owner/Owner.tsx","components/AssetPage/Collection/Collection.tsx","components/AssetPage/Collection/index.ts","components/AssetPage/Price/Price.tsx","components/AssetPage/Price/index.ts","components/AssetPage/Price/Price.container.ts","components/AssetPage/Title/Title.tsx","components/AssetPage/Title/index.ts","components/AssetPage/BaseDetail/BaseDetail.tsx","components/AssetPage/BaseDetail/index.ts","modules/collection/utils.ts","components/AssetPage/TransactionHistory/TransactionHistory.tsx","components/AssetPage/ItemDetail/ItemDetail.tsx","components/AssetPage/ItemDetail/ItemDetail.container.ts","components/AssetPage/ErrorBoundary/ErrorBoundary.tsx","components/AssetPage/Expiration/Expiration.tsx","components/AssetPage/Expiration/index.ts","components/AssetPage/Expiration/Expiration.container.ts","components/AssetPage/Actions/Actions.tsx","components/AssetPage/Actions/Actions.container.ts","components/AssetPage/BidList/BidList.tsx","components/AssetPage/BidList/BidList.container.ts","components/AssetPage/JumpIn/JumpIn.tsx","components/AssetPage/Highlights/Highlights.tsx","components/AssetPage/Highlight/Highlight.tsx","components/AssetPage/ProximityHighlights/ProximityHighlights.tsx","components/AssetPage/ProximityHighlights/ProximityHighlights.container.ts","components/AssetPage/ParcelDetail/ParcelDetail.tsx","components/Collapsible/Collapsible.tsx","components/AssetPage/EstateDetail/ParcelCoordinates/ParcelCoordinates.tsx","components/AssetPage/EstateDetail/ParcelCoordinates/ParcelCoordinates.container.ts","components/AssetPage/EstateDetail/EstateDetail.tsx","components/AssetPage/WearableDetail/WearableDetail.tsx","components/AssetPage/ENSDetail/ENSDetail.tsx","components/AssetPage/EmoteDetail/EmoteDetail.tsx","components/AssetPage/AssetPage.tsx","components/AssetPage/AssetPage.container.tsx","components/Wallet/Wallet.tsx","components/Wallet/Wallet.container.ts","components/AuthorizationModal/AuthorizationModal.tsx","components/AuthorizationModal/AuthorizationModal.container.ts","components/AssetAction/AssetAction.tsx","components/AssetAction/AssetAction.container.ts","components/SellPage/SellModal/utils.ts","components/SellPage/SellModal/SellModal.tsx","components/SellPage/SellPage.tsx","components/SellPage/SellPage.container.ts","components/BuyPage/utils.ts","components/BuyPage/Price/Price.tsx","components/BuyPage/PriceTooLow/PriceTooLow.tsx","components/BuyPage/PriceTooLow/PriceTooLow.container.ts","components/BuyPage/Name/Name.tsx","components/BuyPage/BuyNFTModal/BuyNFTModal.tsx","components/BuyPage/BuyNFTModal/BuyNFTModal.containter.ts","components/BuyPage/MintItemModal/MintItemModal.tsx","components/BuyPage/MintItemModal/MintItemModal.containter.ts","components/BuyPage/BuyPage.tsx","components/BidPage/BidModal/BidModal.tsx","components/BidPage/BidPage.tsx","components/BidPage/BidPage.container.ts","components/CancelSalePage/CancelSalePage.tsx","components/CancelSalePage/CancelSalePage.container.ts","components/TransferPage/TransferPage.tsx","components/TransferPage/TransferPage.container.ts","components/ActivityPage/Transaction/TransactionDetail/TransactionDetail.tsx","components/ActivityPage/Transaction/Transaction.tsx","components/ActivityPage/ActivityPage.tsx","components/ActivityPage/ActivityPage.container.ts","modules/ui/asset/homepage/selectors.ts","components/HomePage/Slideshow/Slideshow.tsx","components/HomePage/HomePage.tsx","components/HomePage/HomePage.container.ts","components/LegacyNFTPage/LegacyNFTPage.tsx","components/LandsPage/LandsPage.tsx","components/LandsPage/LandsPage.container.ts","components/CollectionPage/CollectionPage.tsx","components/CollectionPage/index.ts","components/CollectionPage/CollectionPage.container.ts","components/Routes/Routes.tsx","index.tsx","modules/transaction/selectors.ts","components/AssetBrowse/ToggleBox/ToggleBox.module.css","components/CollectionPage/CollectionPage.module.css","components/OnSaleList/AssetCell/AssetCell.module.css","components/OnSaleList/OnSaleList.module.css","components/Collapsible/Collapsible.module.css","config/index.ts","modules/wallet/selectors.ts","components/RarityBadge/RarityBadge.module.css","components/AssetBrowse/Box/Box.module.css","components/AssetPage/Collection/Collection.module.css","components/AssetPage/EstateDetail/ParcelCoordinates/ParcelCoordinates.module.css","components/AssetCard/ParcelTags/ParcelTags.module.css","components/GenderBadge/GenderBadge.module.css","components/ListedBadge/ListedBadge.module.css","components/AssetProviderPage/AssetProviderPage.module.css","components/AssetPage/ItemDetail/ItemDetail.module.css","components/AssetPage/JumpIn/JumpIn.module.css","components/BuyPage/PriceTooLow/PriceTooLow.module.css","modules/store/types.ts"],"names":["module","exports","getStoreUrn","address","getPrefixedCoverName","coverName","startsWith","getEmptyStore","props","owner","cover","description","website","facebook","twitter","discord","getStoreFromEntity","entity","metadata","content","Error","hash","image","images","find","name","reference","cont","file","undefined","peerUrl","getLink","type","links","link","url","LinkType","WEBSITE","FACEBOOK","TWITTER","DISCORD","getEntityMetadataFromStore","store","pushLink","push","id","version","getEntityMetadataFilesFromStore","a","files","Map","fetch","response","arrayBuffer","key","set","Buffer","from","fetchStoreEntity","client","urn","fetchEntitiesByPointers","entities","length","deployStoreEntity","identity","options","pointers","timestamp","Date","now","buildEntity","authChain","Authenticator","signPayload","entityId","deployEntity","linkStartWiths","getIsValidLink","environment","config","get","builderUrl","ScrollToTop","pathname","useLocation","useEffect","window","scrollTo","React","memo","capitalize","str","toUpperCase","slice","toLowerCase","AssetType","ATLAS_SERVER_URL","ContractAbi","constant","inputs","outputs","payable","stateMutability","anonymous","indexed","ERC721","eth","abi","Contract","ContractFactory","getConnectedProvider","provider","Eth","constructor","Address","fromString","getNFTId","contractAddress","tokenId","getNFT","nfts","nftId","Section","internalType","Converter","_uniswapV2Router","pricesCache","TokenConverter","apiURL","converterAddress","converterExchange","this","ethAmount","marketEthToToken","coinId","exchange","json","coinTickers","ticker","tickers","converted_last","manaAddress","contractEthToToken","tokenAddress","build","converter","methods","calcNeededTokensForEther","call","MarketplacePrice","oneMillion","feePerMillion","maxPriceIncreasePercentage","Number","isNaN","BN","manaWeiAmount","bnAmount","toString","add","mul","div","divRound","computedPrice","price","percentage","toNumber","SortBy","SortDirection","NFTSortBy","Sections","decentraland","super_rare","superRare","makers_place","makersPlace","known_origin","knownOrigin","View","accountViews","Set","landSections","LAND","PARCELS","ESTATES","isAccountView","view","has","isLandSection","section","SEARCH_ARRAY_PARAM_SEPARATOR","getDefaultOptionsByView","onlyOnSale","sortBy","NEWEST","RECENTLY_LISTED","getSearchParams","params","URLSearchParams","assetType","isMap","isFullscreen","vendor","page","rarities","join","wearableGenders","contracts","search","network","Object","values","Network","includes","viewAsGuest","onlySmart","getCategoryFromSection","NFTCategory","PARCEL","ESTATE","ENS","EMOTES","EMOTE","WEARABLES","WEARABLES_HEAD","WEARABLES_EYEBROWS","WEARABLES_EYES","WEARABLES_FACIAL_HAIR","WEARABLES_HAIR","WEARABLES_MOUTH","WEARABLES_UPPER_BODY","WEARABLES_LOWER_BODY","WEARABLES_FEET","WEARABLES_ACCESSORIES","WEARABLES_EARRING","WEARABLES_EYEWEAR","WEARABLES_HAT","WEARABLES_HELMET","WEARABLES_MASK","WEARABLES_TIARA","WEARABLES_TOP_HEAD","WEARABLES_SKIN","WEARABLE","getSectionFromCategory","category","getSearchWearableCategory","WearableCategory","EYEBROWS","EYES","FACIAL_HAIR","HAIR","MOUTH","UPPER_BODY","LOWER_BODY","FEET","EARRING","EYEWEAR","HAT","HELMET","MASK","TIARA","TOP_HEAD","SKIN","getItemSortBy","CHEAPEST","ItemSortBy","NAME","RECENTLY_REVIEWED","RECENTLY_SOLD","getCollectionSortBy","CollectionSortBy","SIZE","getAssetOrderBy","orderBy","CREATED_AT","orderDirection","DESC","ASC","ORDER_CREATED_AT","PRICE","getURLParamArray","paramName","validValues","param","getURLParam","split","filter","item","getFilters","VendorName","DECENTRALAND","currentSection","isLand","isWearableHead","isWearableAccessory","wearableCategory","isWearableSmart","KNOWN_ORIGIN","isEdition","EDITIONS","isToken","TOKENS","SUPER_RARE","MAKERS_PLACE","getOriginURL","isVendor","isPartner","API_URL","MakersPlaceAPI","skip","page_size","Math","min","first","page_num","ceil","requestParams","on_sale","owner_address","q","sort","getSort","request","token_id","contract_address","method","path","status","errors","JSON","stringify","BaseAPI","makersPlaceAPI","NFTService","tokenConverter","marketplacePrice","oneEthInWei","Promise","all","getOneEthInMANA","oneEthInMANA","total","total_items","remoteNFTs","items","accounts","orders","asset","isValid","nft","toNFT","isOnSale","order","toOrder","activeOrderId","account","toAccount","nftIds","countParams","fetchOne","remoteNFT","wallet","toAddress","to","erc721","transferFrom","send","getTxHash","token_contract_address","image_url","getDefaultURL","data","chainId","ETHEREUM","issuedId","itemId","createdAt","updatedAt","soldAt","totalWei","addFee","price_in_wei","marketplaceAddress","sale_contract_address","buyer","ethPrice","ListingStatus","OPEN","sale_created_at","expiresAt","Infinity","marketEthToMANA","mana","toWei","origin","ContractName","AppNetwork","ROPSTEN","MAINNET","DIGITAL_MEDIA_CORE","ChainId","ETHEREUM_MAINNET","DIGITAL_MEDIA_CORE_2","MARKETPLACE_ADAPTER","ContractService","_address","TransferType","SAFE_TRANSFER_FROM","MarketplaceAdapter","_converter","_collector","_adapderFee","OrderService","contractService","contractNames","getContractNames","assetContractAddress","assetMarketAddress","manaTokenAddress","getContract","MANA","calldata","getCallData","transferType","getTransferType","contractEthToMANA","manaPrice","maxPrice","addMaxSlippage","marketplaceAdapter","buy","ABICoder","encodeFunctionCall","services","HttpLink","uri","ApolloClient","cache","InMemoryCache","defaultOptions","query","fetchPolicy","editionFragment","gql","EditionAPI","getNFTsQuery","variables","buildVariables","addType","editions","countQuery","getNFTsCountQuery","EDITION_BY_ID_QUERY","tokens","map","token","EDITION","EDITIONS_FILTERS","EDITIONS_ARGUMENTS","isCount","extraWhere","editionAPI","tokenFragment","TokenAPI","TOKEN_BY_ID_QUERY","TOKEN","TOKENS_FILTERS","TOKENS_ARGUMENTS","tokenAPI","filters","getAPI","fragments","count","fragment","editionCount","tokenCount","_contractAddress","DIGITAL_ASSET","getOwner","edition","priceInWei","artistAccount","createdTimestamp","currentOwner","ETHEREUM_ROPSTEN","SUPER_RARE_V2","SUPER_RARE_MARKET","SUPER_RARE_MARKET_V2","contract","TRANSFER","MAX_QUERY_SIZE","SuperRareAPI","API_KEY","buildFetchManyParams","buildFetchOneParams","getHeaders","headers","Authorization","asset_contract_addresses","asset_ids","offset","limit","owner_addresses","superRareAPI","fetchNFTs","fetchOrders","result","remoteOrders","remoteOrder","remoteElements","fetchNFT","fetchOrder","transaction","transfer","taker","amountWithFee","marketContractAddress","superRareV2","abiCoder","VendorFactory","Vendor","BidService","nftService","orderService","bidService","buildContracts","vendors","getContracts","found","keys","every","NFT_SERVER_URL","NFTAPI","queryParams","buildNFTQueryString","x","y","then","resp","contractWithoutVendor","append","getNFTSortBy","rarity","wearableGender","some","nftAPI","BidAPI","seller","bidder","bidAPI","getERC721ContractData","ERC721CollectionV2","fetchBySeller","bids","fetchByBidder","fetchByNFT","fingerprint","parseUnits","expiresIn","round","MATIC","Bid","sendTransaction","BidV2","bid","bidAddress","blockchainId","CN","MANAToken","MARKETPLACE","Marketplace","BIDS","MATIC_MUMBAI","MarketplaceV2","label","LEGACY_MARKETPLACE","CollectionStore","MATIC_MAINNET","hasFetched","fetchContracts","results","reduce","accumulator","nftResult","OrderAPI","orderAPI","_wallet","marketplace","createOrder","utils","parseEther","contractName","getContractName","safeExecuteOrder","executeOrder","cancelOrder","CollectionAPI","buildCollectionsQueryString","collectionUrn","creator","collectionAPI","SaleAPI","buildSalesQueryString","entries","value","saleAPI","AccountAPI","buildAccountsQueryString","accountAPI","locations","root","signIn","settings","lands","collectibles","collection","browse","currentAccount","defaultCurrentAccount","COLLECTIONS","parcel","estate","estateId","getResource","sell","cancel","activity","NFT","ITEM","TRANSACTIONS_API_URL","shortenAddress","addressEquals","address1","address2","getEth","LegacyProviderAdapter","getAssetName","t","getAssetImage","thumbnail","getAssetUrl","getAssetPrice","isOwnedBy","assetAddress","formatWeiMANA","wei","maximumFractionDigits","MAXIMUM_FRACTION_DIGITS","unit","fromWei","toLocaleString","parseMANANumber","strMana","parseFloat","toFixed","CREATE_ORDER_REQUEST","CREATE_ORDER_SUCCESS","CREATE_ORDER_FAILURE","createOrderSuccess","txHash","action","buildTransactionPayload","createOrderFailure","error","errorCode","EXECUTE_ORDER_REQUEST","EXECUTE_ORDER_SUCCESS","EXECUTE_ORDER_FAILURE","executeOrderSuccess","executeOrderFailure","CANCEL_ORDER_REQUEST","CANCEL_ORDER_SUCCESS","CANCEL_ORDER_FAILURE","cancelOrderSuccess","cancelOrderFailure","FETCH_NFTS_REQUEST","FETCH_NFTS_SUCCESS","FETCH_NFTS_FAILURE","DEFAULT_BASE_NFT_PARAMS","fetchNFTsRequest","fetchNFTsSuccess","fetchNFTsFailure","FETCH_NFT_REQUEST","FETCH_NFT_SUCCESS","FETCH_NFT_FAILURE","fetchNFTRequest","fetchNFTSuccess","fetchNFTFailure","TRANSFER_NFT_REQUEST","TRANSFER_NFT_SUCCESS","TRANSFER_NFT_FAILURE","transferNFTSuccess","transferNFTFailure","PLACE_BID_REQUEST","PLACE_BID_SUCCESS","PLACE_BID_FAILURE","placeBidSuccess","placeBidFailure","ARCHIVE_BID","UNARCHIVE_BID","ACCEPT_BID_REQUEST","ACCEPT_BID_SUCCESS","ACCEPT_BID_FAILURE","acceptBidSuccess","acceptBidFailure","CANCEL_BID_REQUEST","CANCEL_BID_SUCCESS","CANCEL_BID_FAILURE","cancelBidSuccess","cancelBidFailure","FETCH_BIDS_BY_ADDRESS_REQUEST","FETCH_BIDS_BY_ADDRESS_SUCCESS","FETCH_BIDS_BY_ADDRESS_FAILURE","fetchBidsByAddressSuccess","sellerBids","bidderBids","fetchBidsByAddressFailure","FETCH_BIDS_BY_NFT_REQUEST","FETCH_BIDS_BY_NFT_SUCCESS","FETCH_BIDS_BY_NFT_FAILURE","fetchBidsByNFTSuccess","fetchBidsByNFTFailure","FETCH_ITEMS_REQUEST","FETCH_ITEMS_SUCCESS","FETCH_ITEMS_FAILURE","fetchItemsRequest","fetchItemsSuccess","BUY_ITEM_REQUEST","BUY_ITEM_SUCCESS","BUY_ITEM_FAILURE","buyItemSuccess","FETCH_ITEM_REQUEST","FETCH_ITEM_SUCCESS","FETCH_ITEM_FAILURE","fetchItemRequest","fetchItemSuccess","fetchItemFailure","SET_IS_TRYING_ON","track","actionType","eventName","getPayload","payload","withCategory","FETCH_TRANSACTION_FAILURE","TransactionStatus","REVERTED","FIX_REVERTED_TRANSACTION","REPLACE_TRANSACTION_SUCCESS","GRANT_TOKEN_SUCCESS","REVOKE_TOKEN_SUCCESS","bidId","mode","_rollbarConfig","accessToken","captureUncaught","captureUnhandledRejections","enabled","is","Env","DEVELOPMENT","r","e","o","n","i","l","m","c","d","defineProperty","enumerable","Symbol","toStringTag","__esModule","create","bind","default","prototype","hasOwnProperty","p","s","rollbarJsUrl","async","setupShim","rollbar","Rollbar","loadFull","document","apply","arguments","console","_rollbarOldOnError","shimId","_rollbarShims","handler","messages","u","Array","shim","args","ts","createElement","getElementsByTagName","parentNode","crossOrigin","src","onload","onreadystatechange","readyState","removeChild","_rollbarDidLoad","shift","insertBefore","wrap","_isWrap","_rollbar_wrapped","String","_rollbarContext","_wrappedSource","_rollbarWrappedError","f","globalAlias","onerror","captureUncaughtExceptions","wrapGlobalEventHandlers","autoInstrument","addEventListener","captureLoad","captureDomContentLoaded","handleUncaughtException","anonymousErrorsPending","handleAnonymousErrors","_rollbarURH","belongsToShim","removeEventListener","reason","promise","detail","handleUnhandledRejection","_rollbarOldAdd","_rollbarOldRemove","impl","_swapAndProcessMessages","_rollbarInitialized","en","require","es","zh","FETCH_ACCOUNT_METRICS_REQUEST","FETCH_ACCOUNT_METRICS_SUCCESS","FETCH_ACCOUNT_METRICS_FAILURE","fetchAccountMetricsSuccess","accountMetrics","fetchAccountMetricsFailure","INITIAL_STATE","metrics","loading","accountReducer","state","loadingReducer","acc","obj","isInsufficientMANA","getNetworkProvider","providers","Web3Provider","balanceOf","balanceRaw","balance","formatEther","warn","message","checkFingerprint","toBidObject","bidReducer","itemReducer","nftReducer","orderReducer","FETCH_PROXIMITY_REQUEST","FETCH_PROXIMITY_SUCCESS","FETCH_PROXIMITY_FAILURE","fetchProximitySuccess","proximity","proximityReducer","BROWSE","FETCH_ASSETS_FROM_ROUTE","fetchAssetsFromRoute","SET_IS_LOAD_MORE","setIsLoadMore","isLoadMore","CLEAR_FILTERS","GO_BACK","goBack","defaultLocation","routingReducer","FETCH_TILES_REQUEST","FETCH_TILES_SUCCESS","FETCH_TILES_FAILURE","fetchTilesSuccess","tiles","tileReducer","assetReducer","combineReducers","homepage","itemIds","archived","partner","SET_VIEW","setView","lastTimestamp","isTryingOn","uiReducer","preview","FETCH_COLLECTIONS_REQUEST","FETCH_COLLECTIONS_SUCCESS","FETCH_COLLECTIONS_FAILURE","fetchCollectionsSuccess","collections","FETCH_SINGLE_COLLECTION_REQUEST","FETCH_SINGLE_COLLECTION_SUCCESS","FETCH_SINGLE_COLLECTION_FAILURE","fetchSingleCollectionSuccess","fetchSingleCollectionFailure","collectionReducer","FETCH_STORE_REQUEST","FETCH_STORE_SUCCESS","FETCH_STORE_FAILURE","fetchStoreRequest","UPDATE_STORE_REQUEST","UPDATE_STORE_SUCCESS","UPDATE_STORE_FAILURE","updateStoreSuccess","UPDATE_LOCAL_STORE","REVERT_LOCAL_STORE","revertLocalStore","localStore","storeReducer","previous","FETCH_SALES_REQUEST","FETCH_SALES_SUCCESS","FETCH_SALES_FAILURE","fetchSalesSuccess","sales","saleReducer","sale","GENERATE_IDENTITY_REQUEST","GENERATE_IDENTITY_SUCCESS","GENERATE_IDENTITY_FAILURE","generateIdentityRequest","generateIdentitySuccess","generateIdentityFailure","identityReducer","bidSaga","handlePlaceBidRequest","handleAcceptBidRequest","handleCancelBidRequest","handleFetchBidsByAddressRequest","handleFetchBidsByNFTRequest","takeEvery","select","getWallet","place","put","accept","vendorName","concat","nftSaga","handleFetchNFTsRequest","handleFetchNFTRequest","handleTransferNFTRequest","code","orderSaga","handleCreateOrderRequest","handleExecuteOrderRequest","handleCancelOrderRequest","execute","proximitySaga","handleFetchProximityRequest","handleFetchTilesSuccess","_action","omit","pick","getState","getData","getLoading","nftDetailMatchSelector","createMatchSelector","getContractAddress","createSelector","match","getTokenId","getCurrentNFT","getNFTsByOwner","nftsByOwner","getWalletNFTs","getAddress","getItems","itemsById","ItemDetailMatchSelector","getItemsByContractAddress","INPUT_FORMAT","getDefaultExpirationDate","date","dateFnsFormat","addDays","getActiveOrder","WearableGender","getCurrentOrder","ui","getView","getCount","getNFTs","getNFTData","nftsById","getItemData","getOnSaleItems","getOnSaleNFTs","getOrderData","ordersById","getOnSaleElements","addStrings","b","bnA","toBN","bnB","accountMatchSelector","getMetricsByAddressByNetwork","addresses","res","getAggregatedMetricsByAddress","mat","purchases","earned","royalties","spent","getMetricsByAddress","aggregatedMetrics","aggregated","getPathName","getLocation","location","getVendor","getRouterSearch","getSection","ALL","getPage","getSortBy","getOnlyOnSale","getIsSoldOut","getIsMap","getItemId","getIsFullscreen","getRarities","Rarity","getWearableGenders","getSearch","getNetwork","getAssetType","assetTypeParam","getViewAsGuest","getOnlySmart","hasFiltersEnabled","genders","hasNetworkFilter","hasGenderFilter","hasRarityFilter","hasContractsFilter","getCurrentLocationAddress","getWalletAddress","getAccountAddress","walletAddess","accountAddress","getPaginationUrlParams","getAssetsUrlParams","isSoldOut","getLandsUrlParams","getWearablesUrlParams","getCurrentBrowseOptions","paginationUrlParams","AssetsUrlParams","landsUrlParams","wearablesUrlParams","getMaxQuerySize","buildBrowseURL","browseOptions","ON_SALE","getSales","routingSaga","handleFetchAssetsFromRoute","handleClearFilters","handleBrowse","handleGoBack","getNewBrowseOptions","handleFetchOnSale","handleFetchSales","handleFetchCollections","deriveCurrentOptions","handleRedirectToActivity","newOptions","clearedBrowseOptions","race","changed","take","LOCATION_CHANGE","timeout","delay","replace","isItems","STORE_SETTINGS","SALES","spawn","current","deriveView","deriveVendor","shouldResetOptions","defaults","SaleSortBy","success","failure","SaleType","MINT","itemSales","tokenSales","itemSale","tokenSale","shouldFetchItems","nextCategory","prevCategory","tileSaga","handleFetchTilesRequest","handleConnectWalletSuccess","CONNECT_WALLET_SUCCESS","Atlas","fetchTiles","toastSaga","customToastSaga","successToastSagas","handleStoreUpdateSuccess","baseToastSaga","showToast","ToastType","INFO","title","body","closable","translationSaga","createTranslationSaga","translations","uiSaga","walletSaga","fullWalletSaga","handleWallet","baseWalletSaga","createWalletSaga","CHAIN_ID","POLL_INTERVAL","CHANGE_ACCOUNT","CHANGE_NETWORK","marketplaceEthereum","marketplaceMatic","legacyMarketplaceMatic","bidsEthereum","bidsMatic","manaEthereum","manaMatic","collectionStore","COLLECTION_STORE","authorizations","authorizedAddress","AuthorizationType","ALLOWANCE","APPROVAL","fetchAuthorizationsRequest","ItemAPI","buildItemsQueryString","itemAPI","itemSaga","handleFetchItemsRequest","handleFetchItemRequest","handleBuyItem","collectionSaga","handleFetchCollectionsRequest","handleFetchSingleCollectionRequest","itemsByContractAddress","size","saleSaga","handleFetchSalesRequest","accountSaga","handleFetchAccountMetricsRequest","getCurrentIdentity","identities","expiration","getIdentity","IDENTITY_EXPIRATION_IN_MINUTES","IDENTITY_ERROR","connectWalletRequest","CONNECT_WALLET_FAILURE","getStoresByOwner","getLocalStore","getIsLocalStoreDirty","storeData","storeSaga","handleLocationChange","handleFetchStoreRequest","handleUpdateStoreRequest","storeEntity","identitySaga","handleGenerateIdentityRequest","takeLatest","Account","publicKey","bufferToHex","privateKey","personal","Personal","initializeAuthChain","sign","rootSaga","analyticsSaga","createAnalyticsSaga","profileSaga","createProfileSaga","catalystClient","CatalystClient","catalystUrl","authorizationSaga","transactionSaga","history","createBrowserHistory","initStore","anyWindow","isDev","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","stateSanitizer","tile","compose","rootReducer","storageReducerWrapper","authorization","profile","routing","storage","toast","translation","router","connectRouter","sagasMiddleware","createSagasMiddleware","loggerMiddleware","createLogger","collapsed","predicate","_","transactionMiddleware","createTransactionMiddleware","createStorageMiddleware","storageKey","paths","actions","CLEAR_TRANSACTIONS","migrations","storageMiddleware","loadStorageMiddleware","analyticsMiddleware","createAnalyticsMiddleware","enhancer","applyMiddleware","routerMiddleware","createStore","run","dispatch","NavigationTab","POLYGON_INTRO_POPUP_LOCAL_STORAGE_KEY","IntroPopup","open","localStorage","getItem","handleDismiss","setItem","setState","className","position","br","blog_link","href","target","rel","account_link","manage_account","primary","onClick","trigger","PureComponent","UserMenu","connect","isSignedIn","isConnected","isSigningIn","isConnecting","isActivity","hasActivity","getTransactions","tx","isPending","onClickActivity","onClickSettings","Navbar","onNavigate","rightMenu","handleOnSignIn","useCallback","handleOnClickAccount","activePage","isSignIn","onSignIn","onClickAccount","hasPendingTransactions","locales","tranlsations","Footer","Navigation","activeTab","Left","Tab","active","LANDS","COLLECTIBLES","MY_STORE","ACTIVITY","getTiles","getTilesByEstateId","tilesByEstateId","estate_id","Coordinate","color","styles","pin","Mana","withTooltip","manaProps","disabled","Popup","visible","isEstate","style","top","left","opacity","sub","ZERO","debounce","getCoords","withNavigation","withPopup","showOnSale","useState","showPopup","setShowPopup","hoveredTile","setHoveredTile","mouseX","setMouseX","mouseY","setMouseY","setX","setY","useRef","selection","useMemo","pair","userTiles","Color","SUMMER_RED","topLeft","isSelected","next","center","forSaleLayer","selectedStrokeLayer","scale","selectedFillLayer","userLayer","handleClick","estates","land","fetchTokenId","handleHover","handleHidePopup","clearTimeout","setTimeout","handleMouseMove","event","offsetX","offsetY","layers","unshift","onMouseLeave","onHover","innerWidth","defaultProps","Menu","children","MenuItem","currentValue","subtitle","nestedLevel","withCaret","classNames","handleOnClick","alt","width","circular","DropdownMenu","onMenuItemClick","index","shouldRenderSection","sections","NFTSectionsMenuItems","onSectionClick","menuSection","CurrentAccountSidebar","onBrowse","OtherAccountSidebar","AccountSidebar","isCurrentAccount","handleOnBrowse","getProximities","getId","buildExplorerUrl","getDistanceText","distance","useProximity","proximities","getParcelProximity","estateProximity","parcels","parcelProximity","district","plaza","road","getEstateProximity","ProximityTags","_dispatch","ParcelTags","classnames","coordinates","EstateTags","RarityBadge","badge","backgroundColor","getColor","text","IconBadge","icon","childrenInt","GenderBadge","bodyShapes","withText","isUnisex","getIsUnisex","isGenderBodyShape","gender","isGender","BodyShape","MALE","FEMALE","WearableTags","wearable","isSmart","EmoteTags","emote","ENSTags","getIsTryingOn","EstateRegistry","estateRegistry","getFingerprint","valueToHex","colorToHex","isColor","g","maybeWrapped","isWrapped","maybeColor","AssetImage","isDraggable","hasPopup","zoom","isSmall","showMonospace","avatar","onSetIsTryingOn","ens","isLoadingWearablePreview","setIsLoadingWearablePreview","wearablePreviewError","setWearablePreviewError","handleLoad","handleError","handleTryOut","handleShowWearable","estateSelection","getSelection","isTracked","setIsTracked","previewEmote","poses","PreviewEmote","FASHION","FASHION_2","FASHION_3","random","isPreview","getAnalytics","xs","coords","ys","getCenter","wearablePreview","skin","hair","hasRepresentation","shape","bodyShape","missingBodyShape","isTryingOnEnabled","ethAddress","onLoad","onError","dev","getGradient","light","dark","backgroundImage","classes","showWearablePreview","subdomain","debounceDurationMs","placeholder","ref","actual","imageProps","AssetImageWrapper","rest","profiles","getProfiles","avatars","setIsTryingOn","ListedBadge","AssetCard","showListedTag","as","Link","Content","Header","inline","Meta","ownProps","Boolean","AssetList","isLoading","urlNext","assets","handleLoadMore","preventDefault","newPage","maxQuerySize","hasExtraPages","isLoadingNewPage","Group","inverted","isLoadingType","getLoadingNFTs","getLoadingItems","Row","Column","align","grow","shrink","NFTSections","NFTSidebar","Chip","isActive","isDisabled","TextFilter","onChange","ms","setText","handleChange","useInput","inputRef","focus","getClasses","ArrayFilter","option","getNewValues","SelectFilter","clearable","selectOnNavigation","fluid","noResultsMessage","_event","ALL_FILTER_OPTION","FiltersMenu","selectedCollection","selectedRarities","selectedGenders","selectedNetwork","isOnlySmart","onCollectionsChange","onRaritiesChange","onGendersChange","onNetworkChange","onOnlySmartChange","collectionOptions","rarityOptions","reverse","genderOptions","networkOptions","handleOnlySmartClick","toggle","checked","defaultValues","NFTFilters","onClearFilters","showFiltersMenu","setShowFiltersMenu","showFiltersModal","setShowFiltersModal","orderBydropdownOptions","typeDropdownOptions","appliedFilters","handleToggleOnlySmart","newOnlySmart","handleOnlyOnSaleChange","handleIsMapChange","handleOrderByDropdownChange","handleTypeByDropdownChange","handleRaritiesChange","handleGendersChange","handleCollectionsChange","handleSearch","newSearch","handleNetworkChange","newNetwork","searchPlaceholder","suffix","minWidth","Responsive","onlyTablet","direction","maxWidth","onlyMobile","onClose","stateProps","dispatchProps","PRICE_CHANGE_NOTICE_KEY","PriceChangeNotice","isValidView","isDismissed","isVisible","setIsVisible","handleClose","dropdownOptions","handleDropdownChange","Dropdown","Box","header","childrenClassName","box","ToggleBox","AssetCell","firstCell","imageContainer","OnSaleListElement","Cell","filterByName","elements","element","handleElement","elementA","elementB","getUpdatedAt","getName","paginate","perPage","start","end","_nft","handleItem","handleNFT","OnSaleList","sortOptions","setSearch","setSort","setPage","processedElements","elems","filtered","sorted","paginated","useProcessedElements","showPagination","searchNode","val","basic","HeaderCell","Body","empty","pagination","totalPages","onPageChange","getItemsLoading","getNFTsLoading","isArray","getCollections","collectionsByUrn","getCollectionsByAddress","CollectionDetailMatchSelector","CollectionProvider","withItems","onFetchCollection","fetchSingleCollectionRequest","CollectionImage","renderRow","row1","row2","rowHeight","height","CollectionList","pages","hasPagination","card","cardContent","detailsContainer","detailsLeft","detailsRight","listedBadge","InputContainer","CoverPicker","click","URL","createObjectURL","hidden","TextInput","Input","MAX_FILE_SIZE","StoreSettings","canSubmit","isSaving","onRevert","onSave","onFetchStore","coverSize","setCoverSize","setErrors","newErrors","sizeInMbs","max","hasErrors","getInputValue","handleInputOnChange","replaceAll","onbeforeunload","when","savedStore","emptyStore","baseStore","getStoreLoading","getError","updateLocalStore","updateStoreRequest","Stats","totalSales","totalEarnings","ethereumEarned","maticEarned","onFetchMetrics","Stat","emptyMetrics","getEmptyMetrics","Activity","formatDistanceToNow","addSuffix","getIsLoading","getSaleLoading","getItemLoading","getNftLoading","getItemsData","getNftData","getAssets","Sales","getSellerBids","getBidData","bidsById","getBidderBids","getArchivedBidIds","getNFTBids","AssetProvider","onFetchNFT","onFetchItem","getOrders","getNFTContractAddress","getNFTTokenId","getNFTLoading","getItemContractAddress","getItemTokenId","useFingerprint","setFingerprint","setIsLoading","finally","catch","AcceptButton","isLoadingFingerprint","hasInsufficientMANA","setHasInsufficientMANA","isValidFingerprint","isValidSeller","button","WarningMessage","locale","getCurrentLocale","formatDistanceToNowI18N","ManaField","iconPosition","ConfirmInputValueModal","headerTitle","valueToConfirm","onCancel","onConfirm","confirmedInput","setConfirmedInput","parsedValueToConfirm","onSubmit","Actions","archivedBidIds","onAccept","onArchive","onUnarchive","onUpdate","isArchivable","hasImage","isAcceptingBid","isArchived","isBidder","isSeller","showConfirmationModal","setShowConfirmationModal","handleConfirm","handleAccept","amount","cancelBidRequest","archiveBid","unarchiveBid","acceptBidRequest","Bids","onFetchBids","showArchived","setShowArchivedSeller","handleToggleSeller","unarchived","filteredSeller","Right","fetchBidsByAddressRequest","hasPrimarySales","DecentralandSection","AssetBrowse","onSetView","onFetchAssetsFromRoute","viewInState","setHasFetched","right","handleSetFullscreen","hanldeBrowseItems","toggleBoxI18nKey","mobileSections","BrowsePage","PageHeader","useTimer","isRunning","setRunningStatus","timeoutRef","ExternalLinkModal","AccountBanner","onBack","hasCopiedAddress","setHasCopiedAddress","openExternalLinkModal","setOpenExternalLinkModal","renderLink","imageOnly","textOnly","isMobile","onCopy","Icon","getAddressFromUrl","getAddressFromWallet","AccountPage","addressInUrl","onRedirect","AddressProvider","input","SignInPage","hasTransactionPending","transactions","isAuthorized","toLocaleLowerCase","onGrant","onRevoke","handleOnChange","isChecked","getChainConfiguration","Field","isEnabled","contract_link","symbol","getAuthorizations","pendingTransactions","getPendingAuthorizationTransactions","GRANT_TOKEN_REQUEST","REVOKE_TOKEN_REQUEST","areEqual","grantTokenRequest","revokeTokenRequest","SettingsPage","isLoadingAuthorization","hasError","hasCopiedText","authorizationsForSelling","computer","mobile","seed","isUserCanceled","isUserDeniedSignatureError","isContractAccountError","FETCH_AUTHORIZATIONS_REQUEST","Loading","NotFound","AssetProviderPage","isAssetLoading","Description","CategoryBadge","getSearchWearableSection","browseProps","SmartBadge","Owner","Collection","container","Price","Title","BaseDetail","assetImage","badges","below","getBuilderCollectionDetailUrl","encodeURIComponent","formatEventDate","newUpdatedAt","getTime","TransactionHistory","setSales","setTotalPages","firstItem","lastItem","ItemDetail","isOwner","canBuy","available","builderCollectionUrl","supply","getMaxSupply","ownerButtons","ErrorBoundary","errorInfo","_error","Component","Expiration","showLeavingSiteModal","setShowLeavingSiteModal","isBiddable","isENSName","canSell","canBid","vendor_link","BidList","filteredBids","fetchBidsByNFTRequest","JumpIn","jumpInIcon","Highlights","Highlight","ProximityHighlights","ParcelDetail","isPartOfEstate","estateInfo","estate_name","Collapsible","collapsedHeight","isCollapsed","setIsCollapsed","isCollapsible","setIsCollapsible","mainElement","handleChangeShowMore","setCollapsableUsingHeight","offsetHeight","collapsibleWrapper","showMore","ParcelCoordinates","parcelCoordinates","coordinate","EstateDetail","WearableDetail","issued","ENSDetail","EmoteDetail","AssetPage","absolute","mapAsset","itemMappers","nftMappers","fallback","NotConnected","sign_in","Wallet","AuthorizationModal","isAuthorizing","onProceed","settings_link","AssetAction","showPriceBelowMarketValueWarning","SellModal","isCreatingOrder","onCreateOrder","isUpdate","setPrice","setExpiresAt","showConfirm","setShowConfirm","showAuthorizationModal","setShowAuthorizationModal","handleCreateOrder","isInvalidDate","isInvalidPrice","toFixedMANAValue","hasAuthorization","SellPage","getLoadingAuthorizations","getLoadingOrders","createOrderRequest","isPriceTooLow","minSaleValue","getMinSaleValueInWei","parseInt","lt","PriceTooLow","onSwitchNetwork","humanNetwork","humanToken","paragraph","switchNetworkRequest","Name","BuyNFTModal","hasLowPrice","onExecuteOrder","isFingerprintLoading","handleExecuteOrder","handleSubmit","executeOrderRequest","MintItemModal","onBuyItem","secondary_market_link","buyItemRequest","BuyPage","networks","modalProps","BidModal","onPlaceBid","isPlacingBid","handlePlaceBid","BidPage","placeBidRequest","CancelSalePage","onCancelOrder","cancelOrderRequest","TransferPage","onTransfer","isTransfering","setAddress","isInvalidAddress","setIsInvalidAddress","canTransfer","subtitleClasses","test","transferNFTRequest","getHref","getTransactionHref","replacedBy","TransactionDetail","CONFIRMED","REPLACED","Transaction","authorized","assetTokenId","ActivityPage","onClearHistory","showConfirmation","setShowConfirmation","handleClear","handleCancel","clearTransactions","getHomepage","getHomepageLoading","nftLoading","itemLoading","Slideshow","isSubHeader","onViewAll","renderNfts","HomePage","homepageLoading","assetTypes","handleGetStarted","handleViewAll","views","isOverlay","centered","LegacyNFTPage","LandsPage","CollectionPage","currentAddress","isCollectionOwner","stacked","columnRight","compact","row","ellipsis","Item","Routes","APP_ID","exact","component","appId","alignment","ReactDOM","render","getElementById","main","createConfig","STAGING","stg","PRODUCTION","prod","baseGetAddress"],"mappings":"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VP,KAAM,iBACNO,KAAM,SAER,CACEwE,WAAW,EACXJ,OAAQ,CACN,CACEK,SAAS,EACThF,KAAM,SACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,YACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,QACNO,KAAM,WAGVP,KAAM,eACNO,KAAM,SAER,CACEwE,WAAW,EACXJ,OAAQ,CACN,CACEK,SAAS,EACThF,KAAM,YACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,UACNO,KAAM,YAGVP,KAAM,UACNO,KAAM,SAER,CACEwE,WAAW,EACXJ,OAAQ,CACN,CACEK,SAAS,EACThF,KAAM,YACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,UACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,eACNO,KAAM,YAGVP,KAAM,aACNO,KAAM,SAER,CACEwE,WAAW,EACXJ,OAAQ,CACN,CACEK,SAAS,EACThF,KAAM,WACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,UACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,YACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,QACNO,KAAM,WAGVP,KAAM,SACNO,KAAM,SAER,CACEwE,WAAW,EACXJ,OAAQ,CACN,CACEK,SAAS,EACThF,KAAM,YACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,YACNO,KAAM,YAGVP,KAAM,iBACNO,KAAM,SAER,CACEwE,WAAW,EACXJ,OAAQ,CACN,CACEK,SAAS,EACThF,KAAM,SACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,YACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,UACNO,KAAM,WAER,CACEyE,SAAS,EACThF,KAAM,YACNO,KAAM,SAGVP,KAAM,gBACNO,KAAM,SAER,CACEwE,WAAW,EACXJ,OAAQ,CACN,CACEK,SAAS,EACThF,KAAM,YACNO,KAAM,YAGVP,KAAM,kBACNO,KAAM,SAER,CACEwE,WAAW,EACXJ,OAAQ,CACN,CACEK,SAAS,EACThF,KAAM,eACNO,KAAM,UAER,CA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","file":"static/js/main.1dacaabe.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"pin\":\"Coordinate_pin__1IxsY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"EmoteTags\":\"EmoteTags_EmoteTags__3AzDb\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title\":\"Title_title__2PlpS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Expiration_container__10FVX\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Actions_container__1h5k-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"estateInfo\":\"ParcelDetail_estateInfo__2U0Mt\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"issued\":\"WearableDetail_issued__2iDQE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"issued\":\"EmoteDetail_issued__2xW_a\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"filters\":\"CollectionList_filters__4aNjn\",\"search\":\"CollectionList_search__2VJDq\",\"pagination\":\"CollectionList_pagination__Yg0Wp\",\"cardContent\":\"CollectionList_cardContent__14RC5\",\"detailsContainer\":\"CollectionList_detailsContainer__3Yy-u\",\"detailsLeft\":\"CollectionList_detailsLeft__3awjk\",\"image\":\"CollectionList_image__3hIS7\",\"name\":\"CollectionList_name__3a3CQ\",\"count\":\"CollectionList_count__3TElC\",\"listedBadge\":\"CollectionList_listedBadge__2G0VG\",\"empty\":\"CollectionList_empty__IYHSi\",\"link\":\"CollectionList_link__1ERXB\"};","import {\n BuildEntityWithoutFilesOptions,\n CatalystClient,\n DeploymentPreparationData\n} from 'dcl-catalyst-client'\nimport { Entity, EntityContentItemReference } from 'dcl-catalyst-commons'\nimport { LinkType, Store, StoreEntityMetadata } from './types'\nimport { peerUrl } from '../../lib/environment'\nimport { Authenticator, AuthIdentity } from 'dcl-crypto'\n\nexport const getPeerCoverUrl = (hash: string) =>\n `${peerUrl}/content/contents/${hash}`\n\nexport const getStoreUrn = (address: string) =>\n `urn:decentraland:off-chain:marketplace-stores:${address}`\n\nexport const getPrefixedCoverName = (coverName: string) =>\n coverName.startsWith('cover/') ? coverName : `cover/${coverName}`\n\nexport const getEmptyStore = (props: Partial<Store> = {}): Store => ({\n owner: '',\n cover: '',\n coverName: '',\n description: '',\n website: '',\n facebook: '',\n twitter: '',\n discord: '',\n ...props\n})\n\n// Mappings\n\nexport const getStoreFromEntity = (entity: Entity): Store => {\n const metadata: StoreEntityMetadata | undefined = entity.metadata\n const content: EntityContentItemReference[] | undefined = entity.content\n\n if (!metadata) {\n throw new Error('Metadata not found')\n }\n\n let cover = ''\n let coverName = ''\n\n const image = metadata.images.find(image => image.name === 'cover')\n\n const reference =\n image && content\n ? content.find((cont: any) => cont.file === image.file)\n : undefined\n\n if (reference) {\n cover = getPeerCoverUrl(reference.hash)\n coverName = reference.file\n }\n\n const getLink = (type: LinkType) =>\n metadata.links.find(link => link.name === type)?.url || ''\n\n return {\n cover,\n coverName,\n description: metadata.description,\n website: getLink(LinkType.WEBSITE),\n facebook: getLink(LinkType.FACEBOOK),\n twitter: getLink(LinkType.TWITTER),\n discord: getLink(LinkType.DISCORD),\n owner: metadata.owner\n }\n}\n\nexport const getEntityMetadataFromStore = (\n store: Store\n): StoreEntityMetadata => {\n const links: StoreEntityMetadata['links'] = []\n\n const pushLink = (type: LinkType) => {\n if (store[type]) {\n links.push({ name: type, url: store[type] })\n }\n }\n\n pushLink(LinkType.WEBSITE)\n pushLink(LinkType.FACEBOOK)\n pushLink(LinkType.TWITTER)\n pushLink(LinkType.DISCORD)\n\n const images: StoreEntityMetadata['images'] = []\n\n if (store.cover && store.coverName) {\n images.push({ name: 'cover', file: store.coverName })\n }\n\n const { owner } = store\n\n return {\n id: getStoreUrn(owner),\n description: store.description,\n images,\n links,\n owner,\n version: 1\n }\n}\n\nexport const getEntityMetadataFilesFromStore = async (store: Store) => {\n const files = new Map<string, Buffer>()\n\n if (store.cover) {\n const response: Response = await fetch(store.cover)\n const arrayBuffer: ArrayBuffer = await response.arrayBuffer()\n const key = store.coverName\n\n files.set(key, Buffer.from(arrayBuffer))\n }\n\n return files\n}\n\n// Requests\n\nexport const fetchStoreEntity = async (\n client: CatalystClient,\n address: string\n): Promise<Entity | null> => {\n const type: any = 'store'\n const urn = getStoreUrn(address)\n const entities = await client.fetchEntitiesByPointers(type, [urn])\n return entities.length === 0 ? null : entities[0]\n}\n\nexport const deployStoreEntity = async (\n client: CatalystClient,\n identity: AuthIdentity,\n store: Store\n) => {\n const { owner } = store\n const metadata = getEntityMetadataFromStore(store)\n const files = await getEntityMetadataFilesFromStore(store)\n\n const options: BuildEntityWithoutFilesOptions = {\n type: 'store' as any,\n pointers: [getStoreUrn(owner)],\n metadata,\n timestamp: Date.now()\n }\n\n const entity: DeploymentPreparationData = await client.buildEntity({\n ...options,\n files\n })\n\n const authChain = Authenticator.signPayload(identity, entity.entityId)\n\n return client.deployEntity({ ...entity, authChain })\n}\n\n// Validations\n\nexport const linkStartWiths: Record<LinkType, string> = {\n [LinkType.WEBSITE]: 'https://',\n [LinkType.FACEBOOK]: 'https://www.facebook.com/',\n [LinkType.TWITTER]: 'https://www.twitter.com/',\n [LinkType.DISCORD]: 'https://discord.com/channels/'\n}\n\nexport const getIsValidLink = (type: LinkType, link: string) => {\n switch (type) {\n case LinkType.WEBSITE:\n return link.startsWith(linkStartWiths.website)\n case LinkType.FACEBOOK:\n return link.startsWith(linkStartWiths.facebook)\n case LinkType.TWITTER:\n return link.startsWith(linkStartWiths.twitter)\n case LinkType.DISCORD:\n return link.startsWith(linkStartWiths.discord)\n default:\n throw new Error(`Invalid LinkType '${type}'`)\n }\n}\n","import { config } from '../config'\n\nexport const environment = config.get('ENVIRONMENT')!\nexport const peerUrl = config.get('PEER_URL')!\nexport const builderUrl = config.get('BUILDER_URL')!\n","import React, { useEffect } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nconst ScrollToTop = () => {\n const { pathname } = useLocation()\n\n useEffect(() => {\n window.scrollTo(0, 0)\n }, [pathname])\n\n return null\n}\n\nexport default React.memo(ScrollToTop)\n","import { config } from 'dotenv'\nconfig()\n","export function capitalize(str: string) {\n return str[0].toUpperCase() + str.slice(1).toLowerCase()\n}\n","import { Item } from '@dcl/schemas'\nimport { NFT } from '../nft/types'\n\nexport enum AssetType {\n ITEM = 'item',\n NFT = 'nft'\n}\n\nexport type Asset<T extends AssetType = AssetType> = T extends AssetType.NFT\n ? NFT\n : T extends AssetType.ITEM\n ? Item\n : NFT | Item\n","import { config } from '../../../../config'\n\nexport const ATLAS_SERVER_URL = config.get('ATLAS_SERVER_URL')!\n","import { ContractAbi } from 'web3x/contract'\nexport default new ContractAbi([\n {\n constant: true,\n inputs: [\n {\n name: '_interfaceId',\n type: 'bytes4'\n }\n ],\n name: 'supportsInterface',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'getApproved',\n outputs: [\n {\n name: '',\n type: 'address'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'approve',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'InterfaceId_ERC165',\n outputs: [\n {\n name: '',\n type: 'bytes4'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address'\n },\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'transferFrom',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'transfer',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address'\n },\n {\n name: '_index',\n type: 'uint256'\n }\n ],\n name: 'tokenOfOwnerByIndex',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address'\n },\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'safeTransferFrom',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'exists',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_index',\n type: 'uint256'\n }\n ],\n name: 'tokenByIndex',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'ownerOf',\n outputs: [\n {\n name: '',\n type: 'address'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address'\n }\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_approved',\n type: 'bool'\n }\n ],\n name: 'setApprovalForAll',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address'\n },\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n },\n {\n name: '_data',\n type: 'bytes'\n }\n ],\n name: 'safeTransferFrom',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'tokenURI',\n outputs: [\n {\n name: '',\n type: 'string'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address'\n },\n {\n name: '_operator',\n type: 'address'\n }\n ],\n name: 'isApprovedForAll',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [\n {\n name: '_name',\n type: 'string'\n },\n {\n name: '_symbol',\n type: 'string'\n }\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'constructor'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_from',\n type: 'address'\n },\n {\n indexed: true,\n name: '_to',\n type: 'address'\n },\n {\n indexed: true,\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'Transfer',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_owner',\n type: 'address'\n },\n {\n indexed: true,\n name: '_approved',\n type: 'address'\n },\n {\n indexed: true,\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'Approval',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_owner',\n type: 'address'\n },\n {\n indexed: true,\n name: '_operator',\n type: 'address'\n },\n {\n indexed: false,\n name: '_approved',\n type: 'bool'\n }\n ],\n name: 'ApprovalForAll',\n type: 'event'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n },\n {\n name: '_tokenURI',\n type: 'string'\n }\n ],\n name: 'mintUniqueTokenTo',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n }\n])\n","import BN from 'bn.js'\nimport { Address } from 'web3x/address'\nimport { EventLog, TransactionReceipt } from 'web3x/formatters'\nimport {\n Contract,\n ContractOptions,\n TxCall,\n TxSend,\n EventSubscriptionFactory\n} from 'web3x/contract'\nimport { Eth } from 'web3x/eth'\nimport abi from './ERC721Abi'\nexport type TransferEvent = {\n _from: Address\n _to: Address\n _tokenId: string\n}\nexport type ApprovalEvent = {\n _owner: Address\n _approved: Address\n _tokenId: string\n}\nexport type ApprovalForAllEvent = {\n _owner: Address\n _operator: Address\n _approved: boolean\n}\nexport interface TransferEventLog extends EventLog<TransferEvent, 'Transfer'> {}\nexport interface ApprovalEventLog extends EventLog<ApprovalEvent, 'Approval'> {}\nexport interface ApprovalForAllEventLog\n extends EventLog<ApprovalForAllEvent, 'ApprovalForAll'> {}\ninterface ERC721Events {\n Transfer: EventSubscriptionFactory<TransferEventLog>\n Approval: EventSubscriptionFactory<ApprovalEventLog>\n ApprovalForAll: EventSubscriptionFactory<ApprovalForAllEventLog>\n}\ninterface ERC721EventLogs {\n Transfer: TransferEventLog\n Approval: ApprovalEventLog\n ApprovalForAll: ApprovalForAllEventLog\n}\ninterface ERC721TxEventLogs {\n Transfer: TransferEventLog[]\n Approval: ApprovalEventLog[]\n ApprovalForAll: ApprovalForAllEventLog[]\n}\nexport interface ERC721TransactionReceipt\n extends TransactionReceipt<ERC721TxEventLogs> {}\ninterface ERC721Methods {\n supportsInterface(_interfaceId: string): TxCall<boolean>\n name(): TxCall<string>\n getApproved(_tokenId: number | string | BN): TxCall<Address>\n approve(\n _to: Address,\n _tokenId: number | string | BN\n ): TxSend<ERC721TransactionReceipt>\n totalSupply(): TxCall<string>\n InterfaceId_ERC165(): TxCall<string>\n transferFrom(\n _from: Address,\n _to: Address,\n _tokenId: number | string | BN\n ): TxSend<ERC721TransactionReceipt>\n transfer(\n _to: Address,\n _tokenId: number | string | BN\n ): TxSend<ERC721TransactionReceipt>\n tokenOfOwnerByIndex(\n _owner: Address,\n _index: number | string | BN\n ): TxCall<string>\n safeTransferFrom(\n _from: Address,\n _to: Address,\n _tokenId: number | string | BN\n ): TxSend<ERC721TransactionReceipt>\n exists(_tokenId: number | string | BN): TxCall<boolean>\n tokenByIndex(_index: number | string | BN): TxCall<string>\n ownerOf(_tokenId: number | string | BN): TxCall<Address>\n balanceOf(_owner: Address): TxCall<string>\n symbol(): TxCall<string>\n setApprovalForAll(\n _to: Address,\n _approved: boolean\n ): TxSend<ERC721TransactionReceipt>\n safeTransferFrom(\n _from: Address,\n _to: Address,\n _tokenId: number | string | BN,\n _data: string\n ): TxSend<ERC721TransactionReceipt>\n tokenURI(_tokenId: number | string | BN): TxCall<string>\n isApprovedForAll(_owner: Address, _operator: Address): TxCall<boolean>\n mintUniqueTokenTo(\n _to: Address,\n _tokenId: number | string | BN,\n _tokenURI: string\n ): TxSend<ERC721TransactionReceipt>\n}\nexport interface ERC721Definition {\n methods: ERC721Methods\n events: ERC721Events\n eventLogs: ERC721EventLogs\n}\nexport class ERC721 extends Contract<ERC721Definition> {\n constructor(eth: Eth, address?: Address, options?: ContractOptions) {\n super(eth, abi, address, options)\n }\n}\nexport var ERC721Abi = abi\n","import { Eth } from 'web3x/eth'\nimport { Address } from 'web3x/address'\nimport { ContractOptions } from 'web3x/contract'\nimport { getConnectedProvider } from 'decentraland-dapps/dist/lib/eth'\n\ntype ContractConstructor<T> = {\n new (eth: Eth, address?: Address, options?: ContractOptions): T\n}\n\nexport class ContractFactory {\n static async build<T>(Contract: ContractConstructor<T>, address: string) {\n const provider = await getConnectedProvider()\n if (!provider) {\n throw new Error('Could not connect to provider')\n }\n\n const eth = new Eth(provider)\n\n if (!address) {\n throw new Error(`Empty address for contract ${Contract.constructor.name}`)\n }\n\n return new Contract(eth, Address.fromString(address))\n }\n}\n","import { BodyShape } from '@dcl/schemas'\nimport { NFT } from './types'\n\nexport function getNFTId(contractAddress: string, tokenId: string) {\n return contractAddress + '-' + tokenId\n}\n\n// TODO: These methods are repeated on item/utils and can be moved to asset/utils:\n// - getNFT\n// - getNFTId\nexport function getNFT(\n contractAddress: string | null,\n tokenId: string | null,\n nfts: Record<string, NFT>\n): NFT | null {\n if (!contractAddress || !tokenId) {\n return null\n }\n\n const nftId = getNFTId(contractAddress, tokenId)\n return nftId in nfts ? nfts[nftId] : null\n}\n\nexport function isGender(bodyShapes: BodyShape[], gender: BodyShape) {\n if (bodyShapes.length !== 1) {\n return false\n }\n return bodyShapes[0] === gender\n}\n\nexport function isUnisex(bodyShapes: BodyShape[]) {\n return bodyShapes.length === 2\n}\n","export enum Section {\n ALL = 'all',\n\n LAND = 'land',\n PARCELS = 'parcels',\n ESTATES = 'estates',\n WEARABLES = 'wearables',\n\n WEARABLES_HEAD = 'wearables_head',\n WEARABLES_EYEBROWS = 'wearables_eyebrows',\n WEARABLES_EYES = 'wearables_eyes',\n WEARABLES_FACIAL_HAIR = 'wearables_facial_hair',\n WEARABLES_HAIR = 'wearables_hair',\n WEARABLES_MOUTH = 'wearables_mouth',\n\n WEARABLES_UPPER_BODY = 'wearables_upper_body',\n WEARABLES_LOWER_BODY = 'wearables_lower_body',\n WEARABLES_FEET = 'wearables_feet',\n\n WEARABLES_ACCESSORIES = 'wearables_accessories',\n WEARABLES_EARRING = 'wearables_earring',\n WEARABLES_EYEWEAR = 'wearables_eyewear',\n WEARABLES_HAT = 'wearables_hat',\n WEARABLES_HELMET = 'wearables_helmet',\n WEARABLES_MASK = 'wearables_mask',\n WEARABLES_TIARA = 'wearables_tiara',\n WEARABLES_TOP_HEAD = 'wearables_top_head',\n\n WEARABLES_SKIN = 'wearables_skin',\n\n EMOTES = 'emotes',\n ENS = 'ens',\n\n COLLECTIONS = 'collections',\n ON_SALE = 'on_sale',\n SALES = 'sales',\n BIDS = 'bids',\n STORE_SETTINGS = 'store_settings'\n}\n","export enum Section {\n ALL = 'all'\n}\n","export enum Section {\n ALL = 'all'\n}\n","export enum Section {\n ALL = 'all',\n EDITIONS = 'editions',\n TOKENS = 'tokens'\n}\n","import { ContractAbi } from 'web3x/contract'\nexport default new ContractAbi([\n {\n inputs: [\n {\n internalType: 'address',\n name: '_uniswapV2Router',\n type: 'address'\n }\n ],\n stateMutability: 'nonpayable',\n type: 'constructor'\n },\n {\n inputs: [\n {\n internalType: 'contract IERC20',\n name: '_dstToken',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '_etherAmount',\n type: 'uint256'\n }\n ],\n name: 'calcNeededTokensForEther',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256'\n }\n ],\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [],\n name: 'getTrader',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address'\n }\n ],\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'contract IERC20',\n name: '_dstToken',\n type: 'address'\n }\n ],\n name: 'swapEtherToToken',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256'\n }\n ],\n stateMutability: 'payable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'contract IERC20',\n name: '_srcToken',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '_srcAmount',\n type: 'uint256'\n },\n {\n internalType: 'uint256',\n name: '_maxDstAmount',\n type: 'uint256'\n }\n ],\n name: 'swapTokenToEther',\n outputs: [\n {\n internalType: 'uint256',\n name: 'dstAmount',\n type: 'uint256'\n },\n {\n internalType: 'uint256',\n name: 'srcRemainder',\n type: 'uint256'\n }\n ],\n stateMutability: 'nonpayable',\n type: 'function'\n }\n])\n","import BN from 'bn.js'\nimport { Address } from 'web3x/address'\nimport { TransactionReceipt } from 'web3x/formatters'\nimport { Contract, ContractOptions, TxCall, TxSend } from 'web3x/contract'\nimport { Eth } from 'web3x/eth'\nimport abi from './ConverterAbi'\ninterface ConverterEvents {}\ninterface ConverterEventLogs {}\ninterface ConverterTxEventLogs {}\nexport interface ConverterTransactionReceipt\n extends TransactionReceipt<ConverterTxEventLogs> {}\ninterface ConverterMethods {\n calcNeededTokensForEther(\n _dstToken: Address,\n _etherAmount: number | string | BN\n ): TxCall<string>\n getTrader(): TxCall<Address>\n swapEtherToToken(_dstToken: Address): TxSend<ConverterTransactionReceipt>\n swapTokenToEther(\n _srcToken: Address,\n _srcAmount: number | string | BN,\n _maxDstAmount: number | string | BN\n ): TxSend<ConverterTransactionReceipt>\n}\nexport interface ConverterDefinition {\n methods: ConverterMethods\n events: ConverterEvents\n eventLogs: ConverterEventLogs\n}\nexport class Converter extends Contract<ConverterDefinition> {\n constructor(eth: Eth, address?: Address, options?: ContractOptions) {\n super(eth, abi, address, options)\n }\n deploy(_uniswapV2Router: Address): TxSend<ConverterTransactionReceipt> {\n return super.deployBytecode(\n '0x60a060405234801561001057600080fd5b50604051610fa2380380610fa28339818101604052602081101561003357600080fd5b5051606081901b6001600160601b0319166080526001600160a01b0316610f1861008a6000398061016b52806101e6528061029c52806104b552806104ff52806105e152806107ee52806108a45250610f186000f3fe60806040526004361061003f5760003560e01c80633bba21dc146100445780637df493001461009c578063a683beb8146100cd578063b27f823614610105575b600080fd5b34801561005057600080fd5b506100836004803603606081101561006757600080fd5b506001600160a01b03813516906020810135906040013561013e565b6040805192835260208301919091528051918290030190f35b3480156100a857600080fd5b506100b16104b3565b604080516001600160a01b039092168252519081900360200190f35b6100f3600480360360208110156100e357600080fd5b50356001600160a01b03166104d7565b60408051918252519081900360200190f35b34801561011157600080fd5b506100f36004803603604081101561012857600080fd5b506001600160a01b038135169060200135610798565b60008061015c6001600160a01b03861633308763ffffffff610a3616565b6101966001600160a01b0386167f00000000000000000000000000000000000000000000000000000000000000008663ffffffff610a9616565b604080516002808252606080830184529260208301908036833701905050905085816000815181106101c457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561023d57600080fd5b505afa158015610251573d6000803e3d6000fd5b505050506040513d602081101561026757600080fd5b505181518290600190811061027857fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318cbafe58760008533426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015610348578181015183820152602001610330565b505050509050019650505050505050600060405180830381600087803b15801561037157600080fd5b505af1158015610385573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156103ae57600080fd5b81019080805160405193929190846401000000008211156103ce57600080fd5b9083019060208201858111156103e357600080fd5b825186602082028301116401000000008211171561040057600080fd5b82525081516020918201928201910280838360005b8381101561042d578181015183820152602001610415565b505050509050016040525050509050848160018151811061044a57fe5b60200260200101511461048e5760405162461bcd60e51b8152600401808060200182810382526028815260200180610e5b6028913960400191505060405180910390fd5b8060018151811061049b57fe5b60200260200101519350600092505050935093915050565b7f000000000000000000000000000000000000000000000000000000000000000090565b60408051600280825260608083018452600093909291906020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561055657600080fd5b505afa15801561056a573d6000803e3d6000fd5b505050506040513d602081101561058057600080fd5b50518151829060009061058f57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106105bd57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ff36ab53460008533426040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561068757818101518382015260200161066f565b50505050905001955050505050506000604051808303818588803b1580156106ae57600080fd5b505af11580156106c2573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405260208110156106ec57600080fd5b810190808051604051939291908464010000000082111561070c57600080fd5b90830190602082018581111561072157600080fd5b825186602082028301116401000000008211171561073e57600080fd5b82525081516020918201928201910280838360005b8381101561076b578181015183820152602001610753565b5050505090500160405250505090508060018151811061078757fe5b602002602001015192505050919050565b604080516002808252606080830184526000939092919060208301908036833701905050905083816000815181106107cc57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561084557600080fd5b505afa158015610859573d6000803e3d6000fd5b505050506040513d602081101561086f57600080fd5b505181518290600190811061088057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631f00ca7485846040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015610928578181015183820152602001610910565b50505050905001935050505060006040518083038186803b15801561094c57600080fd5b505afa158015610960573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561098957600080fd5b81019080805160405193929190846401000000008211156109a957600080fd5b9083019060208201858111156109be57600080fd5b82518660208202830111640100000000821117156109db57600080fd5b82525081516020918201928201910280838360005b83811015610a085781810151838201526020016109f0565b50505050905001604052505050905080600081518110610a2457fe5b60200260200101519250505092915050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610a90908590610bae565b50505050565b801580610b1c575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015610aee57600080fd5b505afa158015610b02573d6000803e3d6000fd5b505050506040513d6020811015610b1857600080fd5b5051155b610b575760405162461bcd60e51b8152600401808060200182810382526036815260200180610ead6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610ba9908490610bae565b505050565b6060610c03826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610c5f9092919063ffffffff16565b805190915015610ba957808060200190516020811015610c2257600080fd5b5051610ba95760405162461bcd60e51b815260040180806020018281038252602a815260200180610e83602a913960400191505060405180910390fd5b6060610c6e8484600085610c76565b949350505050565b6060610c8185610e21565b610cd2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310610d115780518252601f199092019160209182019101610cf2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610d73576040519150601f19603f3d011682016040523d82523d6000602084013e610d78565b606091505b50915091508115610d8c579150610c6e9050565b805115610d9c5780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610de6578181015183820152602001610dce565b50505050905090810190601f168015610e135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610c6e57505015159291505056fe556e69737761705632436f6e7665727465723a20546f6b656e203c3e204574686572206572726f725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220f83cdcde23d6641a68a717b1a95057c921492f14dc3b067f6e3549e83fc6088164736f6c63430006080033',\n _uniswapV2Router\n ) as any\n }\n}\nexport var ConverterAbi = abi\n","import { Address } from 'web3x/address'\nimport { config } from '../../config'\nimport { Converter } from '../../contracts/Converter'\nimport { ContractFactory } from '../contract/ContractFactory'\n\ntype Ticker = {\n converted_last: {\n eth: number\n }\n}\n\ntype CoinTickers = {\n name: string\n tickers: Ticker[]\n}\n\n// { coinId: {ethAmount: result } }\nconst pricesCache: Record<string, Record<number, number>> = {}\n\nexport class TokenConverter {\n apiURL: string\n converterAddress: string\n converterExchange: string\n\n constructor() {\n const apiURL = config.get('COINGECKO_API_URL')!\n const converterAddress = config.get('CONVERTER_ADDRESS')!\n const converterExchange = config.get('CONVERTER_EXCHANGE')!\n\n if (!apiURL) {\n throw new Error(`Invalid converter API URL \"${apiURL}\"`)\n }\n if (!converterAddress) {\n throw new Error(`Invalid converter address \"${converterAddress}\"`)\n }\n if (!converterExchange) {\n throw new Error(`Invalid converter exchange ${converterExchange}`)\n }\n\n this.apiURL = apiURL\n this.converterAddress = converterAddress\n this.converterExchange = converterExchange\n }\n\n async marketEthToMANA(ethAmount: number) {\n return this.marketEthToToken(\n ethAmount,\n 'decentraland',\n this.converterExchange\n )\n }\n\n async marketEthToToken(\n ethAmount: number,\n coinId: string,\n exchange: string = ''\n ) {\n if (!pricesCache[coinId]) {\n pricesCache[coinId] = {}\n }\n\n if (!pricesCache[coinId][ethAmount]) {\n const response = await window.fetch(\n `${this.apiURL}/coins/${coinId}/tickers?exchange_ids=${exchange}`\n )\n const coinTickers: CoinTickers = await response.json()\n const ticker = coinTickers.tickers[0]\n\n pricesCache[coinId][ethAmount] = ethAmount / ticker.converted_last.eth\n }\n\n return pricesCache[coinId][ethAmount]\n }\n\n async contractEthToMANA(ethAmount: string) {\n const manaAddress = config.get('MANA_ADDRESS')!\n return this.contractEthToToken(ethAmount, manaAddress)\n }\n\n async contractEthToToken(ethAmount: string, tokenAddress: string) {\n const converter = await ContractFactory.build(\n Converter,\n this.converterAddress\n )\n\n return converter.methods\n .calcNeededTokensForEther(Address.fromString(tokenAddress), ethAmount)\n .call()\n }\n}\n","import BN from 'bn.js'\nimport { config } from '../../config'\n\nexport class MarketplacePrice {\n public oneMillion: BN\n public feePerMillion: BN\n\n public maxPriceIncreasePercentage: number\n\n constructor() {\n const feePerMillion = config.get('MARKETPLACE_ADAPTER_FEE_PER_MILLION')\n\n const maxPriceIncreasePercentage = Number(\n config.get('MAX_PRICE_INCREASE_PERCENTAGE')\n )\n\n if (!feePerMillion) {\n throw new Error(`Invalid adapter fee ${feePerMillion}`)\n }\n\n if (!maxPriceIncreasePercentage || isNaN(maxPriceIncreasePercentage)) {\n throw new Error(\n `Invalid max price increase percentage ${maxPriceIncreasePercentage}`\n )\n }\n\n this.feePerMillion = new BN(feePerMillion)\n this.oneMillion = new BN('1000000')\n\n this.maxPriceIncreasePercentage = maxPriceIncreasePercentage\n }\n\n addFee(manaWeiAmount: string | number) {\n const bnAmount = new BN(manaWeiAmount.toString())\n\n return bnAmount\n .add(bnAmount.mul(this.feePerMillion).div(this.oneMillion))\n .toString()\n }\n\n addMaxSlippage(manaWeiAmount: string | number) {\n return new BN(manaWeiAmount).mul(new BN(110)).divRound(new BN(100)) // 10 percent increase\n }\n\n getPercentageIncrease(computedPrice: string, price: string) {\n if (Number(price) <= 0) {\n return 0\n }\n\n const percentage = new BN(computedPrice)\n .mul(new BN(100))\n .divRound(new BN(price))\n .toNumber()\n\n return percentage <= 100 ? 0 : percentage - 100\n }\n\n isAboveMaxIncreasePercentage(percentage: number) {\n return percentage > this.maxPriceIncreasePercentage\n }\n}\n","import * as decentraland from '../decentraland/routing/types'\nimport * as superRare from '../super_rare/routing/types'\nimport * as makersPlace from '../makers_place/routing/types'\nimport * as knownOrigin from '../known_origin/routing/types'\n\nexport type Sections = typeof Sections\n\nexport type Section =\n | decentraland.Section\n | superRare.Section\n | makersPlace.Section\n | knownOrigin.Section\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- Intentionally naming the variable the same as the type\nexport const Sections = {\n decentraland: { ...decentraland.Section },\n super_rare: { ...superRare.Section },\n makers_place: { ...makersPlace.Section },\n known_origin: { ...knownOrigin.Section }\n} as const\n","import { Network, Rarity } from '@dcl/schemas'\nimport { AssetType } from '../asset/types'\nimport { VendorName } from '../vendor/types'\nimport { View } from '../ui/types'\nimport { WearableGender } from '../nft/wearable/types'\n\nexport { Sections } from '../vendor/routing/types'\n\nexport enum SortBy {\n NAME = 'name',\n NEWEST = 'newest',\n RECENTLY_LISTED = 'recently_listed',\n CHEAPEST = 'cheapest',\n RECENTLY_REVIEWED = 'recently_reviewed',\n RECENTLY_SOLD = 'recently_sold',\n SIZE = 'size'\n}\n\nexport enum SortDirection {\n ASC = 'asc',\n DESC = 'desc'\n}\n\nexport type BrowseOptions = {\n assetType?: AssetType\n view?: View\n vendor?: VendorName\n page?: number\n section?: string\n sortBy?: SortBy\n onlyOnSale?: boolean\n onlySmart?: boolean\n isMap?: boolean\n isFullscreen?: boolean\n rarities?: Rarity[]\n wearableGenders?: WearableGender[]\n search?: string\n contracts?: string[]\n address?: string\n network?: Network\n viewAsGuest?: boolean\n}\n","import { NFT as BaseNFT, NFTCategory } from '@dcl/schemas'\nimport { View } from '../ui/types'\nimport { NFTsFetchFilters } from '../vendor/nft/types'\nimport { VendorName } from '../vendor/types'\nimport { SortDirection } from '../routing/types'\nimport { NFTData as DecentralandData } from '../vendor/decentraland/nft/types'\nimport { NFTData as SuperRareData } from '../vendor/super_rare/nft/types'\nimport { NFTData as MakersPlaceData } from '../vendor/makers_place/nft/types'\nimport { NFTData as KnownOriginData } from '../vendor/known_origin/nft/types'\n\nexport enum NFTSortBy {\n NAME = 'name',\n CREATED_AT = 'createdAt',\n ORDER_CREATED_AT = 'searchOrderCreatedAt',\n PRICE = 'searchOrderPrice'\n}\n\nexport type Data<V extends VendorName> = V extends VendorName.DECENTRALAND\n ? DecentralandData\n : V extends VendorName.SUPER_RARE\n ? SuperRareData\n : V extends VendorName.MAKERS_PLACE\n ? MakersPlaceData\n : V extends VendorName.KNOWN_ORIGIN\n ? KnownOriginData\n : V extends void\n ? DecentralandData | SuperRareData | MakersPlaceData | KnownOriginData\n : never\n\nexport type NFT<V extends VendorName = VendorName.DECENTRALAND> = Omit<\n BaseNFT,\n 'category' | 'data'\n> & {\n category: NFTCategory | 'art'\n vendor: VendorName\n data: Data<V>\n}\n\nexport type NFTsFetchParams = {\n first: number\n skip: number\n orderBy?: NFTSortBy\n orderDirection?: SortDirection\n category?: NFTCategory\n address?: string\n onlyOnSale?: boolean\n search?: string\n}\n\nexport type NFTsCountParams = Omit<NFTsFetchParams, 'first' | 'skip'>\n\nexport type NFTsFetchOptions = {\n vendor: VendorName\n view: View\n params: NFTsFetchParams\n filters?: NFTsFetchFilters\n}\n","export const View = {\n MARKET: 'market',\n ACCOUNT: 'account',\n CURRENT_ACCOUNT: 'current_account',\n HOME_NEW_ITEMS: 'home_new_items',\n HOME_SOLD_ITEMS: 'home_sold_items',\n HOME_WEARABLES: 'home_wearables',\n HOME_LAND: 'home_land',\n HOME_ENS: 'home_ens',\n PARTNERS_SUPER_RARE: 'super_rare',\n PARTNERS_MAKERS_PLACE: 'makers_place',\n PARTNERS_KNOWN_ORIGIN: 'known_origin',\n LOAD_MORE: 'load_more',\n ATLAS: 'atlas'\n} as const\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- Intentionally naming the variable the same as the type\nexport type View = typeof View[keyof typeof View]\n","import { Section, Sections } from '../vendor/routing/types'\nimport { View } from './types'\n\nconst accountViews = new Set<View>([View.ACCOUNT, View.CURRENT_ACCOUNT])\nconst landSections = new Set<Section>([\n Sections.decentraland.LAND,\n Sections.decentraland.PARCELS,\n Sections.decentraland.ESTATES\n])\n\nexport const isAccountView = (view: View) => accountViews.has(view)\nexport const isLandSection = (section?: Section) =>\n !!section && landSections.has(section)\n","import {\n CollectionSortBy,\n ItemSortBy,\n Network,\n NFTCategory,\n WearableCategory\n} from '@dcl/schemas'\nimport { View } from '../ui/types'\nimport { BrowseOptions, SortBy, SortDirection } from './types'\nimport { Section } from '../vendor/decentraland'\nimport { NFTSortBy } from '../nft/types'\nimport { isAccountView } from '../ui/utils'\n\nconst SEARCH_ARRAY_PARAM_SEPARATOR = '_'\n\nexport function getDefaultOptionsByView(view?: View): BrowseOptions {\n return {\n onlyOnSale: !view || !isAccountView(view),\n sortBy: view && isAccountView(view) ? SortBy.NEWEST : SortBy.RECENTLY_LISTED\n }\n}\n\nexport function getSearchParams(options?: BrowseOptions) {\n let params: URLSearchParams | undefined\n if (options) {\n params = new URLSearchParams()\n\n if (options.assetType) {\n params.set('assetType', options.assetType)\n }\n\n if (options.section) {\n params.set('section', options.section)\n }\n\n if (options.isMap !== undefined) {\n params.set('isMap', options.isMap.toString())\n // isFullscreen is only set if isMap is true\n if (options.isFullscreen !== undefined) {\n params.set('isFullscreen', options.isFullscreen.toString())\n }\n }\n\n if (options.vendor) {\n params.set('vendor', options.vendor)\n }\n if (options.page) {\n params.set('page', options.page.toString())\n }\n if (options.sortBy) {\n params.set('sortBy', options.sortBy)\n }\n if (options.onlyOnSale !== undefined) {\n params.set('onlyOnSale', options.onlyOnSale.toString())\n }\n if (options.rarities && options.rarities.length > 0) {\n params.set(\n 'rarities',\n options.rarities.join(SEARCH_ARRAY_PARAM_SEPARATOR)\n )\n }\n if (options.wearableGenders && options.wearableGenders.length > 0) {\n params.set(\n 'genders',\n options.wearableGenders.join(SEARCH_ARRAY_PARAM_SEPARATOR)\n )\n }\n\n if (options.contracts && options.contracts.length > 0) {\n params.set(\n 'contracts',\n options.contracts.join(SEARCH_ARRAY_PARAM_SEPARATOR)\n )\n }\n\n if (options.search) {\n params.set('search', options.search)\n }\n\n if (options.network && Object.values(Network).includes(options.network)) {\n params.set('network', options.network)\n }\n\n if (options.viewAsGuest !== undefined) {\n params.set('viewAsGuest', options.viewAsGuest.toString())\n }\n\n if (options.onlySmart !== undefined) {\n params.set('onlySmart', options.onlySmart.toString())\n }\n }\n return params\n}\n\nexport function getCategoryFromSection(section: string) {\n switch (section) {\n case Section.PARCELS:\n return NFTCategory.PARCEL\n case Section.ESTATES:\n return NFTCategory.ESTATE\n case Section.ENS:\n return NFTCategory.ENS\n case Section.EMOTES:\n return NFTCategory.EMOTE\n case Section.WEARABLES:\n case Section.WEARABLES_HEAD:\n case Section.WEARABLES_EYEBROWS:\n case Section.WEARABLES_EYES:\n case Section.WEARABLES_FACIAL_HAIR:\n case Section.WEARABLES_HAIR:\n case Section.WEARABLES_MOUTH:\n case Section.WEARABLES_UPPER_BODY:\n case Section.WEARABLES_LOWER_BODY:\n case Section.WEARABLES_FEET:\n case Section.WEARABLES_ACCESSORIES:\n case Section.WEARABLES_EARRING:\n case Section.WEARABLES_EYEWEAR:\n case Section.WEARABLES_HAT:\n case Section.WEARABLES_HELMET:\n case Section.WEARABLES_MASK:\n case Section.WEARABLES_TIARA:\n case Section.WEARABLES_TOP_HEAD:\n case Section.WEARABLES_SKIN:\n return NFTCategory.WEARABLE\n }\n}\n\nexport function getSectionFromCategory(category: NFTCategory) {\n switch (category) {\n case NFTCategory.PARCEL:\n return Section.PARCELS\n case NFTCategory.ESTATE:\n return Section.ESTATES\n case NFTCategory.ENS:\n return Section.ENS\n case NFTCategory.EMOTE:\n return Section.EMOTES\n case NFTCategory.WEARABLE:\n return Section.WEARABLES\n }\n}\n\nexport function getSearchWearableSection(category: WearableCategory) {\n for (const section of Object.values(Section)) {\n const sectionCategory = getSearchWearableCategory(section)\n if (category === sectionCategory) {\n return section\n }\n }\n}\n\nexport function getSearchWearableCategory(section: string) {\n switch (section) {\n case Section.WEARABLES_EYEBROWS:\n return WearableCategory.EYEBROWS\n case Section.WEARABLES_EYES:\n return WearableCategory.EYES\n case Section.WEARABLES_FACIAL_HAIR:\n return WearableCategory.FACIAL_HAIR\n case Section.WEARABLES_HAIR:\n return WearableCategory.HAIR\n case Section.WEARABLES_MOUTH:\n return WearableCategory.MOUTH\n case Section.WEARABLES_UPPER_BODY:\n return WearableCategory.UPPER_BODY\n case Section.WEARABLES_LOWER_BODY:\n return WearableCategory.LOWER_BODY\n case Section.WEARABLES_FEET:\n return WearableCategory.FEET\n case Section.WEARABLES_EARRING:\n return WearableCategory.EARRING\n case Section.WEARABLES_EYEWEAR:\n return WearableCategory.EYEWEAR\n case Section.WEARABLES_HAT:\n return WearableCategory.HAT\n case Section.WEARABLES_HELMET:\n return WearableCategory.HELMET\n case Section.WEARABLES_MASK:\n return WearableCategory.MASK\n case Section.WEARABLES_TIARA:\n return WearableCategory.TIARA\n case Section.WEARABLES_TOP_HEAD:\n return WearableCategory.TOP_HEAD\n case Section.WEARABLES_SKIN:\n return WearableCategory.SKIN\n }\n}\n\nexport function getItemSortBy(sortBy: SortBy): ItemSortBy {\n switch (sortBy) {\n case SortBy.CHEAPEST:\n return ItemSortBy.CHEAPEST\n case SortBy.NAME:\n return ItemSortBy.NAME\n case SortBy.NEWEST:\n return ItemSortBy.NEWEST\n case SortBy.RECENTLY_LISTED:\n return ItemSortBy.RECENTLY_REVIEWED\n case SortBy.RECENTLY_SOLD:\n return ItemSortBy.RECENTLY_SOLD\n default:\n return ItemSortBy.RECENTLY_REVIEWED\n }\n}\n\nexport function getCollectionSortBy(sortBy: SortBy): CollectionSortBy {\n switch (sortBy) {\n case SortBy.NAME:\n return CollectionSortBy.NAME\n case SortBy.NEWEST:\n return CollectionSortBy.NEWEST\n case SortBy.RECENTLY_REVIEWED:\n return CollectionSortBy.RECENTLY_REVIEWED\n case SortBy.SIZE:\n return CollectionSortBy.SIZE\n default:\n return CollectionSortBy.NEWEST\n }\n}\n\nexport function getAssetOrderBy(sortBy: SortBy) {\n let orderBy: NFTSortBy = NFTSortBy.CREATED_AT\n let orderDirection: SortDirection = SortDirection.DESC\n\n switch (sortBy) {\n case SortBy.NAME: {\n orderBy = NFTSortBy.NAME\n orderDirection = SortDirection.ASC\n break\n }\n case SortBy.NEWEST: {\n orderBy = NFTSortBy.CREATED_AT\n orderDirection = SortDirection.DESC\n break\n }\n case SortBy.RECENTLY_LISTED: {\n orderBy = NFTSortBy.ORDER_CREATED_AT\n orderDirection = SortDirection.DESC\n break\n }\n case SortBy.CHEAPEST: {\n orderBy = NFTSortBy.PRICE\n orderDirection = SortDirection.ASC\n break\n }\n }\n\n return [orderBy, orderDirection] as const\n}\n\nexport function getNFTSortBy(orderBy: NFTSortBy) {\n let sortBy: SortBy = SortBy.NEWEST\n\n switch (orderBy) {\n case NFTSortBy.NAME: {\n sortBy = SortBy.NAME\n break\n }\n case NFTSortBy.CREATED_AT: {\n sortBy = SortBy.NEWEST\n break\n }\n case NFTSortBy.ORDER_CREATED_AT: {\n sortBy = SortBy.RECENTLY_LISTED\n break\n }\n case NFTSortBy.PRICE: {\n sortBy = SortBy.CHEAPEST\n break\n }\n }\n\n return sortBy\n}\n\nexport function getURLParamArray<T extends string>(\n search: string,\n paramName: string,\n validValues: string[] = []\n) {\n const param = getURLParam<T>(search, paramName)\n return param === null\n ? []\n : (param\n .split(SEARCH_ARRAY_PARAM_SEPARATOR)\n .filter(item => validValues.includes(item as T)) as T[])\n}\n\nexport function getURLParam<T extends string>(\n search: string,\n paramName: string\n) {\n const param = new URLSearchParams(search).get(paramName) as T | null\n return param\n}\n","import { NFTCategory } from '@dcl/schemas'\nimport {\n getCategoryFromSection,\n getSearchWearableCategory\n} from '../routing/search'\nimport { BrowseOptions } from '../routing/types'\nimport { Sections } from './routing/types'\nimport { NFTsFetchFilters } from './nft/types'\nimport { VendorName, Disabled } from './types'\n\nexport function getFilters(\n vendor: VendorName,\n options: BrowseOptions\n): NFTsFetchFilters {\n const { section } = options\n\n switch (vendor) {\n case VendorName.DECENTRALAND: {\n const currentSection = Sections[VendorName.DECENTRALAND]\n\n const isLand = section === currentSection.LAND\n const isWearableHead = section === currentSection.WEARABLES_HEAD\n const isWearableAccessory =\n section === currentSection.WEARABLES_ACCESSORIES\n\n const category = getCategoryFromSection(section!)\n const wearableCategory =\n !isWearableAccessory && category === NFTCategory.WEARABLE\n ? getSearchWearableCategory(section!)\n : undefined\n\n const {\n rarities,\n wearableGenders,\n contracts,\n network,\n onlySmart\n } = options\n\n return {\n isLand,\n isWearableHead,\n isWearableAccessory,\n isWearableSmart: onlySmart,\n wearableCategory,\n rarities,\n wearableGenders,\n contracts,\n network\n } as NFTsFetchFilters<VendorName.DECENTRALAND>\n }\n case VendorName.KNOWN_ORIGIN: {\n const currentSection = Sections[VendorName.KNOWN_ORIGIN]\n\n return {\n isEdition: section === currentSection.EDITIONS,\n isToken: section === currentSection.TOKENS\n } as NFTsFetchFilters<VendorName.KNOWN_ORIGIN>\n }\n case VendorName.SUPER_RARE:\n case VendorName.MAKERS_PLACE:\n default:\n return {}\n }\n}\n\nexport function getOriginURL(vendor: VendorName) {\n switch (vendor) {\n case VendorName.DECENTRALAND:\n return 'https://market.decentraland.org'\n case VendorName.SUPER_RARE:\n return 'https://www.superrare.co'\n case VendorName.MAKERS_PLACE:\n return 'https://makersplace.com'\n case VendorName.KNOWN_ORIGIN:\n return 'https://knownorigin.io'\n default:\n throw new Error(`Base URL for ${vendor} not implemented`)\n }\n}\n\nexport function isVendor(vendor: string) {\n return Object.values(VendorName).includes(vendor as VendorName)\n}\n\nexport function isPartner(vendor: string) {\n return isVendor(vendor) && vendor !== VendorName.DECENTRALAND\n}\n\nexport function getPartners(): VendorName[] {\n const disabledVendors = Object.values(Disabled)\n\n return Object.values(VendorName).filter(\n vendor => isPartner(vendor) && !disabledVendors.includes(vendor)\n )\n}\n","import { AxiosRequestConfig } from 'axios'\nimport { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { SortDirection } from '../../routing/types'\nimport { capitalize } from '../../../lib/text'\nimport { NFTsFetchParams, NFTSortBy } from '../../nft/types'\nimport {\n Response,\n FetchSuccessResponse,\n FetchOneSuccessResponse,\n MakersPlaceFetchParams,\n MakersPlaceFetchOneParams,\n MakersPlaceSort\n} from './types'\nimport { config } from '../../../config'\n\nconst API_URL = config.get('MAKERS_PLACE_API_URL')!\n\nexport const MAX_QUERY_SIZE = 50\n\nclass MakersPlaceAPI extends BaseAPI {\n constructor(url: string) {\n super(url)\n\n if (!url) {\n throw new Error(`Invalid MakersPlace API URL \"${url}\"`)\n }\n }\n\n async fetch(params: NFTsFetchParams): Promise<FetchSuccessResponse> {\n const skip = params.skip || 0\n const page_size = Math.min(params.first, MAX_QUERY_SIZE)\n const page_num = Math.ceil(skip / page_size) + 1\n\n const requestParams: MakersPlaceFetchParams = {\n page_num,\n page_size,\n on_sale: 'True',\n owner_address: params.address,\n q: params.search,\n sort: this.getSort(params)\n }\n return this.request('get', '/assets/', requestParams)\n }\n\n async fetchOne(\n contractAddress: string,\n tokenId: string\n ): Promise<FetchOneSuccessResponse> {\n const requestParams: MakersPlaceFetchOneParams = {\n token_id: Number(tokenId),\n contract_address: contractAddress\n }\n return this.request('get', '/asset/', requestParams)\n }\n\n async request<T extends Response>(\n method: AxiosRequestConfig['method'],\n path: string,\n params: MakersPlaceFetchParams | MakersPlaceFetchOneParams\n ) {\n const response: Response = await super.request(method, path, params)\n\n if (response.status === 'failure') {\n const errors = JSON.stringify(response.errors, null, 2)\n throw new Error(`Error fetching MakersPlace path \"${path}\": ${errors}`)\n }\n\n return response as T\n }\n\n private getSort(params: NFTsFetchParams) {\n let sort\n switch (params.orderBy) {\n case NFTSortBy.PRICE:\n sort = 'price'\n break\n case NFTSortBy.ORDER_CREATED_AT:\n default:\n sort = 'createdAt'\n break\n }\n\n const direction = params.orderDirection || SortDirection.DESC\n return (sort + capitalize(direction)) as MakersPlaceSort\n }\n}\n\nexport const makersPlaceAPI = new MakersPlaceAPI(API_URL)\n","export enum Network {\n ROPSTEN = 'ropsten',\n MAINNET = 'mainnet'\n}\n","import BN from 'bn.js'\nimport { ListingStatus, Network, Order } from '@dcl/schemas'\nimport { Address } from 'web3x/address'\nimport { toWei } from 'web3x/utils'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { ERC721 } from '../../../contracts/ERC721'\nimport { ContractFactory } from '../../contract/ContractFactory'\nimport { NFT, NFTsFetchParams, NFTsCountParams } from '../../nft/types'\nimport { Account } from '../../account/types'\nimport { getNFTId } from '../../nft/utils'\nimport { TokenConverter } from '../TokenConverter'\nimport { MarketplacePrice } from '../MarketplacePrice'\nimport { NFTService as NFTServiceInterface } from '../services'\nimport { getOriginURL } from '../utils'\nimport { VendorName } from '../types'\nimport { MakersPlaceAsset } from './types'\nimport { makersPlaceAPI } from './api'\nimport { config } from '../../../config'\n\nexport class NFTService\n implements NFTServiceInterface<VendorName.MAKERS_PLACE> {\n private tokenConverter: TokenConverter\n private marketplacePrice: MarketplacePrice\n private oneEthInWei: BN\n\n constructor() {\n this.tokenConverter = new TokenConverter()\n this.marketplacePrice = new MarketplacePrice()\n this.oneEthInWei = new BN('1000000000000000000') // 10 ** 18\n }\n\n async fetch(params: NFTsFetchParams) {\n const [response, oneEthInMANA] = await Promise.all([\n makersPlaceAPI.fetch(params),\n this.getOneEthInMANA()\n ])\n const total = response.total_items\n\n const remoteNFTs = response.items\n\n const nfts: NFT<VendorName.MAKERS_PLACE>[] = []\n const accounts: Account[] = []\n const orders: Order[] = []\n\n for (const asset of remoteNFTs) {\n if (!this.isValid(asset)) {\n continue\n }\n const nft = this.toNFT(asset)\n\n if (this.isOnSale(asset)) {\n const order = this.toOrder(asset, oneEthInMANA)\n\n nft.activeOrderId = order.id\n\n orders.push(order)\n }\n\n let account = accounts.find(account => account.id === asset.owner)\n if (!account) {\n account = this.toAccount(asset.owner)\n }\n account.nftIds.push(nft.id)\n\n nfts.push(nft)\n accounts.push(account)\n }\n\n return [nfts, accounts, orders, total] as const\n }\n\n async count(countParams: NFTsCountParams) {\n const params: NFTsFetchParams = {\n ...countParams,\n first: 1,\n skip: 0\n }\n const response = await makersPlaceAPI.fetch(params)\n return response.total_items\n }\n\n async fetchOne(contractAddress: string, tokenId: string) {\n const [response, oneEthInMANA] = await Promise.all([\n makersPlaceAPI.fetchOne(contractAddress, tokenId),\n this.getOneEthInMANA()\n ])\n\n const remoteNFT = response.item\n if (!this.isValid(remoteNFT)) {\n throw new Error(\n `Invalid asset for contract \"${contractAddress}\" and id \"${tokenId}\"`\n )\n }\n\n const nft = this.toNFT(remoteNFT)\n let order: Order | undefined\n\n if (this.isOnSale(remoteNFT)) {\n order = this.toOrder(remoteNFT, oneEthInMANA)\n\n nft.activeOrderId = order.id\n }\n\n return [nft, order] as const\n }\n\n async transfer(\n wallet: Wallet | null,\n toAddress: string,\n nft: NFT<VendorName.MAKERS_PLACE>\n ) {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n const from = Address.fromString(wallet.address)\n const to = Address.fromString(toAddress)\n\n const erc721 = await ContractFactory.build(ERC721, nft.contractAddress)\n\n return erc721.methods\n .transferFrom(from, to, nft.tokenId)\n .send({ from })\n .getTxHash()\n }\n\n toNFT(asset: MakersPlaceAsset): NFT<VendorName.MAKERS_PLACE> {\n const tokenId = asset.token_id!.toString()\n const contractAddress = asset.token_contract_address.toLowerCase()\n return {\n id: getNFTId(contractAddress, tokenId),\n tokenId,\n contractAddress,\n activeOrderId: '',\n owner: asset.owner,\n name: asset.name,\n image: asset.image_url,\n url: asset.url || this.getDefaultURL(asset),\n data: {\n description: asset.description\n },\n category: 'art',\n vendor: VendorName.MAKERS_PLACE,\n chainId: Number(config.get('CHAIN_ID')!),\n network: Network.ETHEREUM,\n issuedId: null,\n itemId: null,\n createdAt: 0,\n updatedAt: 0,\n soldAt: 0\n }\n }\n\n toOrder(\n asset: MakersPlaceAsset,\n oneEthInMANA: string\n ): Order & { ethPrice: string } {\n const totalWei = this.marketplacePrice.addFee(asset.price_in_wei!)\n const weiPrice = new BN(totalWei).mul(new BN(oneEthInMANA))\n const price = weiPrice.div(this.oneEthInWei)\n\n return {\n id: `${VendorName.MAKERS_PLACE}-order-${asset.token_id}`,\n tokenId: asset.token_id!.toString(),\n contractAddress: asset.token_contract_address.toLowerCase(),\n marketplaceAddress: asset.sale_contract_address!,\n owner: asset.owner,\n buyer: null,\n price: price.toString(10),\n ethPrice: asset.price_in_wei!.toString(),\n status: ListingStatus.OPEN,\n createdAt: +asset.sale_created_at!,\n updatedAt: +asset.sale_created_at!,\n expiresAt: Infinity,\n network: Network.ETHEREUM,\n chainId: Number(config.get('CHAIN_ID')!)\n }\n }\n\n toAccount(address: string): Account {\n return {\n id: address,\n address,\n nftIds: []\n }\n }\n\n private async getOneEthInMANA() {\n const mana = await this.tokenConverter.marketEthToMANA(1)\n return toWei(mana.toString(), 'ether')\n }\n\n private isValid(asset: MakersPlaceAsset) {\n // For some reason, the API *sometimes* returns null on token_ids\n // We need to either skip or just throw when we found these\n return asset.token_id !== null\n }\n\n private isOnSale(asset: MakersPlaceAsset): boolean {\n return (\n asset.price_in_wei !== undefined &&\n asset.sale_contract_address !== undefined\n )\n }\n\n private getDefaultURL(asset: MakersPlaceAsset): string {\n const origin = getOriginURL(VendorName.MAKERS_PLACE)\n return `${origin}/authenticity/${asset.token_contract_address}/${asset.token_id}`\n }\n}\n","import { ChainId, Network } from '@dcl/schemas'\nimport {\n Contract,\n ContractService as ContractServiceInterface\n} from '../services'\nimport { Network as AppNetwork } from '../../contract/types'\nimport { TransferType } from '../types'\nimport { config } from '../../../config'\n\nconst network = config.get('NETWORK')! as AppNetwork\n\nexport enum ContractName {\n DIGITAL_MEDIA_CORE = 'DigitalMediaCore',\n DIGITAL_MEDIA_CORE_2 = 'DigitalMediaCore2',\n MARKETPLACE_ADAPTER = 'MarketplaceAdapter'\n}\n\nconst contracts = ({\n [AppNetwork.ROPSTEN]: [],\n [AppNetwork.MAINNET]: [\n {\n name: ContractName.DIGITAL_MEDIA_CORE,\n address: '0x2a46f2ffd99e19a89476e2f62270e0a35bbf0756',\n vendor: 'makers_place',\n category: 'art',\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.DIGITAL_MEDIA_CORE_2,\n address: '0x2d9e5de7d36f3830c010a28b29b3bdf5ca73198e',\n vendor: 'makers_place',\n category: 'art',\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.MARKETPLACE_ADAPTER,\n address: '0xf4fbd84193f9aaf9779dedbb415a806933eb1c95',\n vendor: 'makers_place',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n }\n ]\n} as Record<AppNetwork, Contract[]>)[network]\n\nexport class ContractService implements ContractServiceInterface {\n contracts = contracts\n\n async build() {}\n\n getContracts() {\n return this.contracts\n }\n\n getTransferType(_address: string) {\n return TransferType.SAFE_TRANSFER_FROM\n }\n}\n","export enum AssetType {\n TOKEN = 'token',\n EDITION = 'edition'\n}\n","import { ContractAbi } from 'web3x/contract'\nexport default new ContractAbi([\n {\n inputs: [\n {\n internalType: 'address',\n name: '_converter',\n type: 'address'\n },\n {\n internalType: 'address payable',\n name: '_collector',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '_adapderFee',\n type: 'uint256'\n }\n ],\n stateMutability: 'nonpayable',\n type: 'constructor'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'previousFee',\n type: 'uint256'\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'newFee',\n type: 'uint256'\n }\n ],\n name: 'AdapterFeeChange',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'registry',\n type: 'address'\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'tokenId',\n type: 'uint256'\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'marketplace',\n type: 'address'\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'orderValue',\n type: 'uint256'\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'orderFees',\n type: 'uint256'\n }\n ],\n name: 'ExecutedOrder',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'marketplace',\n type: 'address'\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'orderValue',\n type: 'uint256'\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'orderFees',\n type: 'uint256'\n },\n {\n indexed: false,\n internalType: 'bytes',\n name: 'marketplaceData',\n type: 'bytes'\n }\n ],\n name: 'ExecutedOrder',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'collector',\n type: 'address'\n }\n ],\n name: 'FeesCollectorChange',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'marketplace',\n type: 'address'\n },\n {\n indexed: false,\n internalType: 'bool',\n name: 'value',\n type: 'bool'\n }\n ],\n name: 'MarketplaceAllowance',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address'\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address'\n }\n ],\n name: 'OwnershipTransferred',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'converter',\n type: 'address'\n }\n ],\n name: 'SetConverter',\n type: 'event'\n },\n {\n inputs: [],\n name: 'ADAPTER_FEE_MAX',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256'\n }\n ],\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [],\n name: 'ADAPTER_FEE_PRECISION',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256'\n }\n ],\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [],\n name: 'adapterFeesCollector',\n outputs: [\n {\n internalType: 'address payable',\n name: '',\n type: 'address'\n }\n ],\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [],\n name: 'adapterTransactionFee',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256'\n }\n ],\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'contract ITransferableRegistry',\n name: '_registry',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '_tokenId',\n type: 'uint256'\n },\n {\n internalType: 'address',\n name: '_marketplace',\n type: 'address'\n },\n {\n internalType: 'bytes',\n name: '_encodedCallData',\n type: 'bytes'\n },\n {\n internalType: 'uint256',\n name: '_orderAmount',\n type: 'uint256'\n },\n {\n internalType: 'enum BuyAdapter.TransferType',\n name: '_transferType',\n type: 'uint8'\n },\n {\n internalType: 'address',\n name: '_beneficiary',\n type: 'address'\n }\n ],\n name: 'buy',\n outputs: [],\n stateMutability: 'payable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'contract ITransferableRegistry',\n name: '_registry',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '_tokenId',\n type: 'uint256'\n },\n {\n internalType: 'address',\n name: '_marketplace',\n type: 'address'\n },\n {\n internalType: 'bytes',\n name: '_encodedCallData',\n type: 'bytes'\n },\n {\n internalType: 'uint256',\n name: '_orderAmount',\n type: 'uint256'\n },\n {\n internalType: 'contract IERC20',\n name: '_paymentToken',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '_maxPaymentTokenAmount',\n type: 'uint256'\n },\n {\n internalType: 'enum BuyAdapter.TransferType',\n name: '_transferType',\n type: 'uint8'\n },\n {\n internalType: 'address',\n name: '_beneficiary',\n type: 'address'\n }\n ],\n name: 'buy',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '_marketplace',\n type: 'address'\n },\n {\n internalType: 'bytes',\n name: '_encodedCallData',\n type: 'bytes'\n },\n {\n internalType: 'uint256',\n name: '_orderAmount',\n type: 'uint256'\n },\n {\n internalType: 'contract IERC20',\n name: '_paymentToken',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '_maxPaymentTokenAmount',\n type: 'uint256'\n }\n ],\n name: 'buy',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '_marketplace',\n type: 'address'\n },\n {\n internalType: 'bytes',\n name: '_encodedCallData',\n type: 'bytes'\n },\n {\n internalType: 'uint256',\n name: '_orderAmount',\n type: 'uint256'\n }\n ],\n name: 'buy',\n outputs: [],\n stateMutability: 'payable',\n type: 'function'\n },\n {\n inputs: [],\n name: 'converterAddress',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address'\n }\n ],\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address'\n },\n {\n internalType: 'address',\n name: '',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256'\n },\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes'\n }\n ],\n name: 'onERC721Received',\n outputs: [\n {\n internalType: 'bytes4',\n name: '',\n type: 'bytes4'\n }\n ],\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address'\n },\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256'\n },\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes'\n }\n ],\n name: 'onERC721Received',\n outputs: [\n {\n internalType: 'bytes4',\n name: '',\n type: 'bytes4'\n }\n ],\n stateMutability: 'pure',\n type: 'function'\n },\n {\n inputs: [],\n name: 'owner',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address'\n }\n ],\n stateMutability: 'view',\n type: 'function'\n },\n {\n inputs: [],\n name: 'renounceOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '_transactionFee',\n type: 'uint256'\n }\n ],\n name: 'setAdapterFee',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: '_converter',\n type: 'address'\n }\n ],\n name: 'setConverter',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'address payable',\n name: '_collector',\n type: 'address'\n }\n ],\n name: 'setFeesCollector',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newOwner',\n type: 'address'\n }\n ],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function'\n }\n])\n","import BN from 'bn.js'\nimport { Address } from 'web3x/address'\nimport { EventLog, TransactionReceipt } from 'web3x/formatters'\nimport {\n Contract,\n ContractOptions,\n TxCall,\n TxSend,\n EventSubscriptionFactory\n} from 'web3x/contract'\nimport { Eth } from 'web3x/eth'\nimport abi from './MarketplaceAdapterAbi'\nexport type AdapterFeeChangeEvent = {\n previousFee: string\n newFee: string\n}\nexport type ExecutedOrderEvent = {\n registry: Address\n tokenId: string\n marketplace: Address\n orderValue: string\n orderFees: string\n}\nexport type FeesCollectorChangeEvent = {\n collector: Address\n}\nexport type MarketplaceAllowanceEvent = {\n marketplace: Address\n value: boolean\n}\nexport type OwnershipTransferredEvent = {\n previousOwner: Address\n newOwner: Address\n}\nexport type SetConverterEvent = {\n converter: Address\n}\nexport interface AdapterFeeChangeEventLog\n extends EventLog<AdapterFeeChangeEvent, 'AdapterFeeChange'> {}\nexport interface ExecutedOrderEventLog\n extends EventLog<ExecutedOrderEvent, 'ExecutedOrder'> {}\nexport interface FeesCollectorChangeEventLog\n extends EventLog<FeesCollectorChangeEvent, 'FeesCollectorChange'> {}\nexport interface MarketplaceAllowanceEventLog\n extends EventLog<MarketplaceAllowanceEvent, 'MarketplaceAllowance'> {}\nexport interface OwnershipTransferredEventLog\n extends EventLog<OwnershipTransferredEvent, 'OwnershipTransferred'> {}\nexport interface SetConverterEventLog\n extends EventLog<SetConverterEvent, 'SetConverter'> {}\ninterface MarketplaceAdapterEvents {\n AdapterFeeChange: EventSubscriptionFactory<AdapterFeeChangeEventLog>\n ExecutedOrder: EventSubscriptionFactory<ExecutedOrderEventLog>\n FeesCollectorChange: EventSubscriptionFactory<FeesCollectorChangeEventLog>\n MarketplaceAllowance: EventSubscriptionFactory<MarketplaceAllowanceEventLog>\n OwnershipTransferred: EventSubscriptionFactory<OwnershipTransferredEventLog>\n SetConverter: EventSubscriptionFactory<SetConverterEventLog>\n}\ninterface MarketplaceAdapterEventLogs {\n AdapterFeeChange: AdapterFeeChangeEventLog\n ExecutedOrder: ExecutedOrderEventLog\n FeesCollectorChange: FeesCollectorChangeEventLog\n MarketplaceAllowance: MarketplaceAllowanceEventLog\n OwnershipTransferred: OwnershipTransferredEventLog\n SetConverter: SetConverterEventLog\n}\ninterface MarketplaceAdapterTxEventLogs {\n AdapterFeeChange: AdapterFeeChangeEventLog[]\n ExecutedOrder: ExecutedOrderEventLog[]\n FeesCollectorChange: FeesCollectorChangeEventLog[]\n MarketplaceAllowance: MarketplaceAllowanceEventLog[]\n OwnershipTransferred: OwnershipTransferredEventLog[]\n SetConverter: SetConverterEventLog[]\n}\nexport interface MarketplaceAdapterTransactionReceipt\n extends TransactionReceipt<MarketplaceAdapterTxEventLogs> {}\ninterface MarketplaceAdapterMethods {\n ADAPTER_FEE_MAX(): TxCall<string>\n ADAPTER_FEE_PRECISION(): TxCall<string>\n adapterFeesCollector(): TxCall<Address>\n adapterTransactionFee(): TxCall<string>\n buy(\n _registry: Address,\n _tokenId: number | string | BN,\n _marketplace: Address,\n _encodedCallData: string,\n _orderAmount: number | string | BN,\n _transferType: number | string | BN,\n _beneficiary: Address\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n buy(\n _registry: Address,\n _tokenId: number | string | BN,\n _marketplace: Address,\n _encodedCallData: string,\n _orderAmount: number | string | BN,\n _paymentToken: Address,\n _maxPaymentTokenAmount: number | string | BN,\n _transferType: number | string | BN,\n _beneficiary: Address\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n buy(\n _marketplace: Address,\n _encodedCallData: string,\n _orderAmount: number | string | BN,\n _paymentToken: Address,\n _maxPaymentTokenAmount: number | string | BN\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n buy(\n _marketplace: Address,\n _encodedCallData: string,\n _orderAmount: number | string | BN\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n converterAddress(): TxCall<Address>\n onERC721Received(\n a0: Address,\n a1: Address,\n a2: number | string | BN,\n a3: string\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n onERC721Received(\n a0: Address,\n a1: number | string | BN,\n a2: string\n ): TxCall<string>\n owner(): TxCall<Address>\n renounceOwnership(): TxSend<MarketplaceAdapterTransactionReceipt>\n setAdapterFee(\n _transactionFee: number | string | BN\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n setConverter(\n _converter: Address\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n setFeesCollector(\n _collector: Address\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n transferOwnership(\n newOwner: Address\n ): TxSend<MarketplaceAdapterTransactionReceipt>\n}\nexport interface MarketplaceAdapterDefinition {\n methods: MarketplaceAdapterMethods\n events: MarketplaceAdapterEvents\n eventLogs: MarketplaceAdapterEventLogs\n}\nexport class MarketplaceAdapter extends Contract<MarketplaceAdapterDefinition> {\n constructor(eth: Eth, address?: Address, options?: ContractOptions) {\n super(eth, abi, address, options)\n }\n deploy(\n _converter: Address,\n _collector: Address,\n _adapderFee: number | string | BN\n ): TxSend<MarketplaceAdapterTransactionReceipt> {\n return super.deployBytecode(\n '0x60806040523480156200001157600080fd5b5060405162003f8638038062003f86833981810160405260608110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505060006200006e6200014f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555062000124836200015760201b60201c565b6200013582620002b060201b60201c565b62000146816200040960201b60201c565b50505062000584565b600033905090565b620001676200014f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000229576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fc06343c9448e37c4ed257861469b4b35c140991c9cf08a4c38d335a1bc6a75d360405160405180910390a250565b620002c06200014f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000382576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fba265e20be387f8937b3b82562be8389bc8d09d0342f59413cdbc3dd414e564260405160405180910390a250565b620004196200014f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620004db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80620249f0101562000539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018062003f636023913960400191505060405180910390fd5b7f552893ff1179f25b1926dceb67fd12d0cc80f321a3ab90033956728e3ab106b960035482604051808381526020018281526020019250505060405180910390a18060038190555050565b6139cf80620005946000396000f3fe6080604052600436106101025760003560e01c806391c0871c11610095578063bba3a7c711610064578063bba3a7c7146108ac578063ce45332614610991578063f0b9e5ba146109e8578063f2fde38b14610b2c578063fd7d4b8f14610b7d576101ab565b806391c0871c14610590578063aba1e2ba14610704578063b19337a414610820578063ba215f6314610871576101ab565b806370bbde42116100d157806370bbde42146103bb578063715018a6146103e6578063742e08e3146103fd5780638da5cb5b14610539576101ab565b8063150b7a02146101b05780632c5eadde14610314578063373071f21461033f57806345ce5f1914610390576101ab565b366101ab573273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f427579416461707465723a2073656e64657220696e76616c696400000000000081525060200191505060405180910390fd5b005b600080fd5b3480156101bc57600080fd5b506102c0600480360360808110156101d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184600183028401116401000000008311171561026e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610bd4565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b34801561032057600080fd5b50610329610be8565b6040518082815260200191505060405180910390f35b34801561034b57600080fd5b5061038e6004803603602081101561036257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bef565b005b34801561039c57600080fd5b506103a5610d3f565b6040518082815260200191505060405180910390f35b3480156103c757600080fd5b506103d0610d45565b6040518082815260200191505060405180910390f35b3480156103f257600080fd5b506103fb610d4c565b005b610537600480360360e081101561041357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561047a57600080fd5b82018360208201111561048c57600080fd5b803590602001918460018302840111640100000000831117156104ae57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ed4565b005b34801561054557600080fd5b5061054e610ff3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059c57600080fd5b5061070260048036036101208110156105b457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561061b57600080fd5b82018360208201111561062d57600080fd5b8035906020019184600183028401116401000000008311171561064f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803560ff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061101c565b005b34801561071057600080fd5b5061081e600480360360a081101561072757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561076457600080fd5b82018360208201111561077657600080fd5b8035906020019184600183028401116401000000008311171561079857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611467565b005b34801561082c57600080fd5b5061086f6004803603602081101561084357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118aa565b005b34801561087d57600080fd5b506108aa6004803603602081101561089457600080fd5b81019080803590602001909291905050506119fa565b005b61098f600480360360608110156108c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156108ff57600080fd5b82018360208201111561091157600080fd5b8035906020019184600183028401116401000000008311171561093357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611b6a565b005b34801561099d57600080fd5b506109a6611c81565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109f457600080fd5b50610ad860048036036060811015610a0b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610a5257600080fd5b820183602082011115610a6457600080fd5b80359060200191846001830284011164010000000083111715610a8657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611ca7565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b348015610b3857600080fd5b50610b7b60048036036020811015610b4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cba565b005b348015610b8957600080fd5b50610b92611ec7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600063150b7a0260e01b9050949350505050565b620249f081565b610bf7611eed565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fba265e20be387f8937b3b82562be8389bc8d09d0342f59413cdbc3dd414e564260405160405180910390a250565b60035481565b620f424081565b610d54611eed565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60026001541415610f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000610f6084611ef5565b90506000610f778286611f2890919063ffffffff16565b9050803414610fd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061390b602f913960400191505060405180910390fd5b610fe18989898989878a8a611fb0565b50506001808190555050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60026001541415611095576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060006110cf87611ef5565b905060006110e68289611f2890919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff1663b27f823689846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561116f57600080fd5b505afa158015611183573d6000803e3d6000fd5b505050506040513d602081101561119957600080fd5b8101908080519060200190929190505050905060008111611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138786026913960400191505060405180910390fd5b8681111561125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806137476037913960400191505060405180910390fd5b61128b3330838b73ffffffffffffffffffffffffffffffffffffffff1661248d909392919063ffffffff16565b6112d8600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828a73ffffffffffffffffffffffffffffffffffffffff1661257a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff16633bba21dc8b85876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200193505050506040805180830381600087803b15801561136957600080fd5b505af115801561137d573d6000803e3d6000fd5b505050506040513d604081101561139357600080fd5b8101908080519060200190929190805190602001909291905050509150915083821461140a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138266031913960400191505060405180910390fd5b600081111561143f5761143e33828c73ffffffffffffffffffffffffffffffffffffffff166127819092919063ffffffff16565b5b61144f8f8f8f8f8f8a8e8e611fb0565b50505050505060018081905550505050505050505050565b600260015414156114e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061151a85611ef5565b905060006115318287611f2890919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff1663b27f823687846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b1580156115ba57600080fd5b505afa1580156115ce573d6000803e3d6000fd5b505050506040513d60208110156115e457600080fd5b8101908080519060200190929190505050905060008111611650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806138786026913960400191505060405180910390fd5b848111156116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806137476037913960400191505060405180910390fd5b6116d63330838973ffffffffffffffffffffffffffffffffffffffff1661248d909392919063ffffffff16565b611723600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828873ffffffffffffffffffffffffffffffffffffffff1661257a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff16633bba21dc8985876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200193505050506040805180830381600087803b1580156117b457600080fd5b505af11580156117c8573d6000803e3d6000fd5b505050506040513d60408110156117de57600080fd5b81019080805190602001909291908051906020019092919050505091509150838214611855576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806138266031913960400191505060405180910390fd5b600081111561188a5761188933828a73ffffffffffffffffffffffffffffffffffffffff166127819092919063ffffffff16565b5b6118968b8b8b88612839565b505050505050600180819055505050505050565b6118b2611eed565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611973576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fc06343c9448e37c4ed257861469b4b35c140991c9cf08a4c38d335a1bc6a75d360405160405180910390a250565b611a02611eed565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80620249f01015611b1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806138e86023913960400191505060405180910390fd5b7f552893ff1179f25b1926dceb67fd12d0cc80f321a3ab90033956728e3ab106b960035482604051808381526020018281526020019250505060405180910390a18060038190555050565b60026001541415611be3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000611bf682611ef5565b90506000611c0d8284611f2890919063ffffffff16565b9050803414611c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061390b602f913960400191505060405180910390fd5b611c7385858585612839565b505060018081905550505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063f0b9e5ba60e01b90509392505050565b611cc2611eed565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e09576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806137216026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b6000611f21620f4240611f1360035485612c4c90919063ffffffff16565b612cd290919063ffffffff16565b9050919050565b600080828401905083811015611fa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008411612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f427579416461707465723a20696e76616c6964206f726465722076616c75650081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806137cd6026913960400191505060405180910390fd5b600047905060008773ffffffffffffffffffffffffffffffffffffffff1686886040518082805190602001908083835b6020831061212157805182526020820191506020810190506020830392506120fe565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612183576040519150601f19603f3d011682016040523d82523d6000602084013e612188565b606091505b50509050806121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806137f36033913960400191505060405180910390fd5b6121f58683612d1c90919063ffffffff16565b471461224c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061389e6025913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16636352211e8b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122b457600080fd5b505afa1580156122c8573d6000803e3d6000fd5b505050506040513d60208110156122de57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461235b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806136ff6022913960400191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050612407576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061377e602b913960400191505060405180910390fd5b6124138a8a8686612d66565b8773ffffffffffffffffffffffffffffffffffffffff16898b73ffffffffffffffffffffffffffffffffffffffff167f41db66efa207667201b031e90bc1ac58c2af27431cb9961a9391c8d9485c1c5b8989604051808381526020018281526020019250505060405180910390a450505050505050505050565b612574846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613220565b50505050565b6000811480612674575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561263757600080fd5b505afa15801561264b573d6000803e3d6000fd5b505050506040513d602081101561266157600080fd5b8101908080519060200190929190505050145b6126c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806139646036913960400191505060405180910390fd5b61277c8363095ea7b360e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613220565b505050565b6128348363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613220565b505050565b600082116128af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f427579416461707465723a20696e76616c6964206f726465722076616c75650081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612957576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806137cd6026913960400191505060405180910390fd5b600047905060008573ffffffffffffffffffffffffffffffffffffffff1684866040518082805190602001908083835b602083106129aa5780518252602082019150602081019050602083039250612987565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612a0c576040519150601f19603f3d011682016040523d82523d6000602084013e612a11565b606091505b5050905080612a6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806137f36033913960400191505060405180910390fd5b612a7e8483612d1c90919063ffffffff16565b4714612ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061389e6025913960400191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050612b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061377e602b913960400191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff167f252c6c3690d9bf864928fcc8c84eb799be8e3324c6cb81eb35bea7a4c76f21068585886040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c08578082015181840152602081019050612bed565b50505050905090810190601f168015612c355780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2505050505050565b600080831415612c5f5760009050612ccc565b6000828402905082848281612c7057fe5b0414612cc7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806138576021913960400191505060405180910390fd5b809150505b92915050565b6000612d1483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061330f565b905092915050565b6000612d5e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506133d5565b905092915050565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f427579416461707465723a20696e76616c69642062656e65666963696172790081525060200191505060405180910390fd5b60006002811115612e1557fe5b826002811115612e2157fe5b1415612eff578373ffffffffffffffffffffffffffffffffffffffff166342842e0e3083866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015612ee257600080fd5b505af1158015612ef6573d6000803e3d6000fd5b5050505061310b565b60016002811115612f0c57fe5b826002811115612f1857fe5b1415612ff6578373ffffffffffffffffffffffffffffffffffffffff166323b872dd3083866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015612fd957600080fd5b505af1158015612fed573d6000803e3d6000fd5b5050505061310a565b60028081111561300257fe5b82600281111561300e57fe5b14156130b8578373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561309b57600080fd5b505af11580156130af573d6000803e3d6000fd5b50505050613109565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806137a96024913960400191505060405180910390fd5b5b5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561317357600080fd5b505afa158015613187573d6000803e3d6000fd5b505050506040513d602081101561319d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461321a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806138c36025913960400191505060405180910390fd5b50505050565b6060613282826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166134959092919063ffffffff16565b905060008151111561330a578080602001905160208110156132a357600080fd5b8101908080519060200190929190505050613309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061393a602a913960400191505060405180910390fd5b5b505050565b600080831182906133bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613380578082015181840152602081019050613365565b50505050905090810190601f1680156133ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816133c757fe5b049050809150509392505050565b6000838311158290613482576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561344757808201518184015260208101905061342c565b50505050905090810190601f1680156134745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60606134a484846000856134ad565b90509392505050565b60606134b8856136b3565b61352a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061357a5780518252602082019150602081019050602083039250613557565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146135dc576040519150601f19603f3d011682016040523d82523d6000602084013e6135e1565b606091505b509150915081156135f65780925050506136ab565b6000815111156136095780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613670578082015181840152602081019050613655565b50505050905090810190601f16801561369d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156136f557506000801b8214155b9250505091905056fe427579416461707465723a20746f6b656e4964206e6f74207472616e7366657265644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373427579416461707465723a207061796d656e74546f6b656e416d6f756e74203e205f6d61785061796d656e74546f6b656e416d6f756e74427579416461707465723a206572726f722073656e64696e67206665657320746f20636f6c6c6563746f72427579416461707465723a20556e736f70706f72746564207472616e7366657254797065427579416461707465723a206665657320436f6c6c6563746f72206d75737420626520736574427579416461707465723a206d61726b6574706c616365206661696c656420746f206578656375746520627579206f72646572427579416461707465723a20696e76616c696420657468657220616d6f756e7420616674657220636f6e76657273696f6e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77427579416461707465723a207061796d656e74546f6b656e416d6f756e7420696e76616c6964427579416461707465723a20706f737463616c6c2062616c616e6365206d69736d61746368427579416461707465723a206572726f722077697468206173736574207472616e73666572427579416461707465723a20496e76616c6964207472616e73616374696f6e20666565427579416461707465723a20696e76616c6964206d73672e76616c756520213d20286f72646572202b2066656573295361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220ef4c536021024d97109b527ce9eec19b40e488e9250cbcb4b962d337e5a5c38f64736f6c63430006080033427579416461707465723a20496e76616c6964207472616e73616374696f6e20666565',\n _converter,\n _collector,\n _adapderFee\n ) as any\n }\n}\nexport var MarketplaceAdapterAbi = abi\n","import { Address } from 'web3x/address'\nimport { ABICoder } from 'web3x/contract/abi-coder'\nimport { Order } from '@dcl/schemas'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { MarketplaceAdapter } from '../../../contracts/MarketplaceAdapter'\nimport { ContractFactory } from '../../contract/ContractFactory'\nimport { NFT } from '../../nft/types'\nimport { TokenConverter } from '../TokenConverter'\nimport { MarketplacePrice } from '../MarketplacePrice'\nimport { getContractNames, VendorName } from '../types'\nimport { OrderService as OrderServiceInterface } from '../services'\nimport { ContractService } from './ContractService'\nimport { getContract } from '../../contract/utils'\n\nexport class OrderService\n implements OrderServiceInterface<VendorName.MAKERS_PLACE> {\n private tokenConverter: TokenConverter\n private marketplacePrice: MarketplacePrice\n\n constructor() {\n this.tokenConverter = new TokenConverter()\n this.marketplacePrice = new MarketplacePrice()\n }\n\n fetchByNFT(): any {\n throw new Error('Method: `fetchByNFT` is not implemented')\n }\n\n create(): any {\n throw new Error('Method: `create` is not implemented')\n }\n\n async execute(\n wallet: Wallet | null,\n nft: NFT<VendorName.MAKERS_PLACE>,\n order: Order\n ): Promise<string> {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n const contractService = new ContractService()\n const contractNames = getContractNames()\n\n // Addresses\n const assetContractAddress = Address.fromString(nft.contractAddress)\n const assetMarketAddress: Address = Address.fromString(\n order.marketplaceAddress\n )\n const manaTokenAddress = Address.fromString(\n getContract({ name: contractNames.MANA }).address\n )\n const from = Address.fromString(wallet.address)\n\n // Data\n const calldata = this.getCallData(nft)\n const transferType = contractService.getTransferType(nft.contractAddress)\n\n // Price\n const manaPrice = await this.tokenConverter.contractEthToMANA(\n (order as Order & { ethPrice: string }).ethPrice!\n )\n const maxPrice = this.marketplacePrice.addMaxSlippage(manaPrice)\n\n // Contract\n const marketplaceAdapter = await ContractFactory.build(\n MarketplaceAdapter,\n getContract({ name: contractNames.MARKETPLACE_ADAPTER }).address\n )\n return marketplaceAdapter.methods\n .buy(\n assetContractAddress,\n nft.tokenId,\n assetMarketAddress,\n calldata,\n (order as Order & { ethPrice: string }).ethPrice!,\n manaTokenAddress,\n maxPrice,\n transferType,\n from\n )\n .send({ from })\n .getTxHash()\n }\n\n cancel(): any {\n throw new Error('Method: `cancel` is not implemented')\n }\n\n canSell() {\n return false\n }\n\n private getCallData(nft: NFT<VendorName.MAKERS_PLACE>) {\n const abiCoder = new ABICoder()\n return abiCoder.encodeFunctionCall(\n {\n name: 'purchase',\n type: 'function',\n inputs: [\n { type: 'uint256', name: 'TOKEN_ID' },\n { type: 'address', name: 'ADDRESS_CONTRACT' }\n ]\n },\n [nft.tokenId, nft.contractAddress]\n )\n }\n}\n","import { NFTService } from './NFTService'\nimport { ContractService } from './ContractService'\nimport { OrderService } from './OrderService'\n\nexport const VendorName = 'makers_place'\n\nexport * from './types'\nexport * from './nft'\nexport * from './routing'\n\nexport * from './NFTService'\nexport * from './ContractService'\nexport * from './OrderService'\nexport const services = {\n NFTService,\n ContractService,\n OrderService\n}\n","import { ApolloClient } from 'apollo-client'\nimport { InMemoryCache } from 'apollo-cache-inmemory'\nimport { HttpLink } from 'apollo-link-http'\nimport { config } from '../../../config'\n\nexport const API_URL = config.get('KNOWN_ORIGIN_API_URL')\nexport const MAX_QUERY_SIZE = 1000\n\nconst link = new HttpLink({\n uri: API_URL\n})\n\nexport const client = new ApolloClient({\n link,\n cache: new InMemoryCache(),\n defaultOptions: {\n query: {\n fetchPolicy: 'no-cache'\n }\n }\n})\n","import { gql } from 'apollo-boost'\nimport { AssetType } from '../types'\n\nexport const editionFragment = () => gql`\n fragment editionFragment on Edition {\n id\n createdTimestamp\n artistAccount\n priceInWei\n totalSupply\n metadata {\n name\n image\n description\n }\n }\n`\n\nexport type EditionFragment = {\n id: string\n type: AssetType.EDITION\n artistAccount: string\n priceInWei: string\n totalSupply: string\n createdTimestamp: string\n metadata: {\n name: string\n image: string\n description: string\n }\n}\n","import { gql } from 'apollo-boost'\n\nimport { NFTsFetchParams, NFTSortBy } from '../../../nft/types'\nimport { client } from '../api'\nimport { AssetType } from '../types'\nimport { editionFragment, EditionFragment } from './fragments'\n\nclass EditionAPI {\n fetch = async (params: NFTsFetchParams) => {\n const query = getNFTsQuery(params)\n const variables = this.buildVariables(params)\n\n const { data } = await client.query<{ editions: EditionFragment[] }>({\n query,\n variables\n })\n\n return this.addType(data.editions)\n }\n\n async count(params: NFTsFetchParams) {\n const countQuery = getNFTsCountQuery(params)\n const variables = this.buildVariables(params)\n\n const { data } = await client.query<{ editions: EditionFragment[] }>({\n query: countQuery,\n variables\n })\n\n return data.editions.length\n }\n\n async fetchOne(id: string) {\n const { data } = await client.query<{ editions: EditionFragment[] }>({\n query: EDITION_BY_ID_QUERY,\n variables: {\n id\n }\n })\n return this.addType(data.editions)[0]\n }\n\n private addType(tokens: EditionFragment[]): EditionFragment[] {\n return tokens.map(token => ({ ...token, type: AssetType.EDITION }))\n }\n\n private buildVariables(params: NFTsFetchParams) {\n return {\n ...params,\n address: params.address,\n orderBy: this.getSort(params.orderBy)\n }\n }\n\n private getSort(sortBy?: NFTSortBy) {\n switch (sortBy) {\n case NFTSortBy.PRICE:\n return 'priceInWei'\n case NFTSortBy.CREATED_AT:\n case NFTSortBy.ORDER_CREATED_AT:\n return 'createdTimestamp'\n default:\n return undefined\n }\n }\n}\n\nconst EDITIONS_FILTERS = `\n $first: Int\n $skip: Int\n $orderBy: String\n $orderDirection: String\n\n $address: String\n`\n\nconst EDITIONS_ARGUMENTS = `\n first: $first\n skip: $skip\n orderBy: $orderBy\n orderDirection: $orderDirection\n`\n\nfunction getNFTsCountQuery(params: NFTsFetchParams) {\n return getNFTsQuery(params, true)\n}\n\nfunction getNFTsQuery(params: NFTsFetchParams, isCount = false) {\n let extraWhere: string[] = []\n\n if (params.address) {\n extraWhere.push('artistAccount: $address')\n }\n\n // TODO: Search?\n // TODO: onlyOnSale?\n\n return gql`\n query Editions(\n ${EDITIONS_FILTERS}\n ) {\n editions(\n where: {\n active: true,\n offersOnly: false,\n remainingSupply_gt: 0,\n priceInWei_gt: 0,\n ${extraWhere.join('\\n')}\n }\n ${EDITIONS_ARGUMENTS}\n ) {\n ${isCount ? 'id' : '...editionFragment'}\n }\n }\n ${isCount ? '' : editionFragment()}\n `\n}\n\nconst EDITION_BY_ID_QUERY = gql`\n query EditionById($id: String) {\n editions(where: { id: $id }, first: 1) {\n ...editionFragment\n }\n }\n ${editionFragment()}\n`\n\nexport const editionAPI = new EditionAPI()\n","import { gql } from 'apollo-boost'\nimport { AssetType } from '../types'\n\nexport const tokenFragment = () => gql`\n fragment tokenFragment on Token {\n id\n tokenId\n editionNumber\n currentOwner {\n id\n }\n metadata {\n name\n image\n description\n }\n }\n`\n\nexport type TokenFragment = {\n id: string\n type: AssetType.TOKEN\n editionNumber: string\n tokenId: string\n currentOwner: {\n id: string\n }\n metadata: {\n name: string\n image: string\n description: string\n }\n}\n","import { gql } from 'apollo-boost'\n\nimport { NFTsFetchParams, NFTSortBy } from '../../../nft/types'\nimport { client } from '../api'\nimport { AssetType } from '../types'\nimport { tokenFragment, TokenFragment } from './fragments'\n\nclass TokenAPI {\n fetch = async (params: NFTsFetchParams) => {\n const query = getNFTsQuery(params)\n const variables = this.buildVariables(params)\n\n const { data } = await client.query<{ tokens: TokenFragment[] }>({\n query,\n variables\n })\n\n return this.addType(data.tokens)\n }\n\n async count(params: NFTsFetchParams) {\n const countQuery = getNFTsCountQuery(params)\n const variables = this.buildVariables(params)\n\n const { data } = await client.query<{ tokens: TokenFragment[] }>({\n query: countQuery,\n variables\n })\n\n return data.tokens.length\n }\n\n async fetchOne(id: string) {\n const { data } = await client.query<{ tokens: TokenFragment[] }>({\n query: TOKEN_BY_ID_QUERY,\n variables: {\n id\n }\n })\n return this.addType(data.tokens)[0]\n }\n\n private addType(tokens: TokenFragment[]): TokenFragment[] {\n return tokens.map(token => ({ ...token, type: AssetType.TOKEN }))\n }\n\n private buildVariables(params: NFTsFetchParams) {\n return {\n ...params,\n address: params.address,\n orderBy: this.getSort(params.orderBy)\n }\n }\n\n private getSort(sortBy?: NFTSortBy) {\n switch (sortBy) {\n case NFTSortBy.CREATED_AT:\n return 'birthTimestamp'\n default:\n return undefined\n }\n }\n}\n\nconst TOKENS_FILTERS = `\n $first: Int\n $skip: Int\n $orderBy: String\n $orderDirection: String\n\n $address: String\n`\n\nconst TOKENS_ARGUMENTS = `\n first: $first\n skip: $skip\n orderBy: $orderBy\n orderDirection: $orderDirection\n`\n\nfunction getNFTsCountQuery(params: NFTsFetchParams) {\n return getNFTsQuery(params, true)\n}\n\nfunction getNFTsQuery(params: NFTsFetchParams, isCount = false) {\n let extraWhere: string[] = []\n\n if (params.address) {\n extraWhere.push('currentOwner: $address')\n }\n\n // TODO: Search?\n // TODO: onlyOnSale?\n\n return gql`\n query Tokens(\n ${TOKENS_FILTERS}\n ) {\n tokens(\n where: {\n ${extraWhere.join('\\n')}\n }\n ${TOKENS_ARGUMENTS}\n ) {\n ${isCount ? 'id' : '...tokenFragment'}\n }\n }\n ${isCount ? '' : tokenFragment()}\n `\n}\n\nconst TOKEN_BY_ID_QUERY = gql`\n query TokenById($id: String) {\n tokens(where: { id: $id }, first: 1) {\n ...tokenFragment\n }\n }\n ${tokenFragment()}\n`\n\nexport const tokenAPI = new TokenAPI()\n","import { ChainId, Network } from '@dcl/schemas'\nimport {\n Contract,\n ContractService as ContractServiceInterface\n} from '../services'\nimport { Network as AppNetwork } from '../../contract/types'\nimport { TransferType } from '../types'\nimport { config } from '../../../config'\n\nconst network = config.get('NETWORK')! as AppNetwork\n\nexport enum ContractName {\n DIGITAL_ASSET = 'DigitalAssset',\n MARKETPLACE_ADAPTER = 'MarketplaceAdapter'\n}\n\nconst contracts = ({\n [AppNetwork.ROPSTEN]: [],\n [AppNetwork.MAINNET]: [\n {\n name: ContractName.DIGITAL_ASSET,\n address: '0xfbeef911dc5821886e1dda71586d90ed28174b7d',\n vendor: 'known_origin',\n category: 'art',\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.MARKETPLACE_ADAPTER,\n address: '0xf4fbd84193f9aaf9779dedbb415a806933eb1c95',\n vendor: 'known_origin',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n }\n ]\n} as Record<AppNetwork, Contract[]>)[network]\n\nexport class ContractService implements ContractServiceInterface {\n contracts = contracts\n\n async build() {}\n\n getContracts() {\n return this.contracts\n }\n\n getTransferType(_address: string) {\n return TransferType.SAFE_TRANSFER_FROM\n }\n}\n","import BN from 'bn.js'\nimport { Address } from 'web3x/address'\nimport { toWei } from 'web3x/utils'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { ListingStatus, Network, Order } from '@dcl/schemas'\nimport { ERC721 } from '../../../contracts/ERC721'\nimport { ContractFactory } from '../../contract/ContractFactory'\nimport { NFT, NFTsFetchParams, NFTsCountParams } from '../../nft/types'\nimport { Account } from '../../account/types'\nimport { getNFTId } from '../../nft/utils'\nimport { TokenConverter } from '../TokenConverter'\nimport { MarketplacePrice } from '../MarketplacePrice'\nimport { NFTService as NFTServiceInterface } from '../services'\nimport { getOriginURL } from '../utils'\nimport { getContractNames, VendorName } from '../types'\nimport { getContract } from '../../contract/utils'\nimport { NFTsFetchFilters } from './nft/types'\nimport { EditionFragment } from './edition/fragments'\nimport { TokenFragment } from './token/fragments'\nimport { editionAPI } from './edition/api'\nimport { tokenAPI } from './token/api'\nimport { MAX_QUERY_SIZE } from './api'\nimport { AssetType } from './types'\nimport { config } from '../../../config'\n\ntype Fragment = TokenFragment | EditionFragment\n\nexport class NFTService\n implements NFTServiceInterface<VendorName.KNOWN_ORIGIN> {\n private tokenConverter: TokenConverter\n private marketplacePrice: MarketplacePrice\n private oneEthInWei: BN\n\n constructor() {\n this.tokenConverter = new TokenConverter()\n this.marketplacePrice = new MarketplacePrice()\n this.oneEthInWei = new BN('1000000000000000000') // 10 ** 18\n }\n\n async fetch(params: NFTsFetchParams, filters?: NFTsFetchFilters) {\n const fragments = await this.getAPI(filters).fetch(params)\n const [total, oneEthInMANA] = await Promise.all([\n this.count(params, filters),\n this.getOneEthInMANA()\n ])\n\n const nfts: NFT<VendorName.KNOWN_ORIGIN>[] = []\n const accounts: Account[] = []\n const orders: Order[] = []\n\n for (const fragment of fragments) {\n const nft = this.toNFT(fragment)\n\n if (fragment.type === AssetType.EDITION) {\n const order = this.toOrder(fragment, oneEthInMANA)\n\n nft.activeOrderId = order.id\n\n orders.push(order)\n }\n\n let account = accounts.find(account => account.id === nft.owner)\n if (!account) {\n account = this.toAccount(nft.owner)\n }\n account.nftIds.push(nft.id)\n\n nfts.push(nft)\n accounts.push(account)\n }\n\n return [nfts, accounts, orders, total] as const\n }\n\n async count(countParams: NFTsCountParams, filters?: NFTsFetchFilters) {\n const params: NFTsFetchParams = {\n ...countParams,\n first: MAX_QUERY_SIZE,\n skip: 0\n }\n if (!filters) {\n const [editionCount, tokenCount] = await Promise.all([\n tokenAPI.count(params),\n editionAPI.count(params)\n ])\n return editionCount + tokenCount\n } else {\n return this.getAPI(filters).count(params)\n }\n }\n\n async fetchOne(_contractAddress: string, tokenId: string) {\n const fragment = await this.getAPI().fetchOne(tokenId)\n const oneEthInMANA = await this.getOneEthInMANA()\n\n const nft = this.toNFT(fragment)\n let order: Order | undefined\n\n if (fragment.type === AssetType.EDITION) {\n order = this.toOrder(fragment, oneEthInMANA)\n\n nft.activeOrderId = order.id\n }\n\n return [nft, order] as const\n }\n\n async transfer(\n wallet: Wallet | null,\n toAddress: string,\n nft: NFT<VendorName.KNOWN_ORIGIN>\n ) {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n const from = Address.fromString(wallet.address)\n const to = Address.fromString(toAddress)\n\n const erc721 = await ContractFactory.build(ERC721, nft.contractAddress)\n\n return erc721.methods\n .transferFrom(from, to, nft.tokenId)\n .send({ from })\n .getTxHash()\n }\n\n toNFT(fragment: Fragment): NFT<VendorName.KNOWN_ORIGIN> {\n const tokenId = fragment.id\n const { name, description, image } = fragment.metadata\n\n const contractNames = getContractNames()\n\n const contractAddress = getContract({\n name: contractNames.DIGITAL_ASSET\n }).address\n\n return {\n id: getNFTId(contractAddress, tokenId),\n tokenId,\n contractAddress,\n activeOrderId: '',\n owner: this.getOwner(fragment),\n name,\n image,\n url: this.getDefaultURL(fragment),\n data: {\n description,\n isEdition: true\n },\n category: 'art',\n vendor: VendorName.KNOWN_ORIGIN,\n chainId: Number(config.get('CHAIN_ID')!),\n network: Network.ETHEREUM,\n issuedId: null,\n itemId: null,\n createdAt: 0,\n updatedAt: 0,\n soldAt: 0\n }\n }\n\n toOrder(\n edition: EditionFragment,\n oneEthInMANA: string\n ): Order & { ethPrice: string } {\n const totalWei = this.marketplacePrice.addFee(edition.priceInWei)\n const weiPrice = new BN(totalWei).mul(new BN(oneEthInMANA))\n const price = weiPrice.div(this.oneEthInWei)\n\n const contractNames = getContractNames()\n\n const contractAddress = getContract({\n name: contractNames.DIGITAL_ASSET\n }).address\n const marketplaceAddress = getContract({\n name: contractNames.MARKETPLACE_ADAPTER\n }).address\n\n return {\n id: `${VendorName.KNOWN_ORIGIN}-order-${edition.id}`,\n tokenId: edition.id,\n contractAddress,\n marketplaceAddress,\n owner: edition.artistAccount,\n buyer: null,\n price: price.toString(10),\n ethPrice: edition.priceInWei.toString(),\n status: ListingStatus.OPEN,\n createdAt: +edition.createdTimestamp,\n updatedAt: +edition.createdTimestamp,\n expiresAt: Infinity,\n network: Network.ETHEREUM,\n chainId: Number(config.get('CHAIN_ID')!)\n }\n }\n\n toAccount(address: string): Account {\n return {\n id: address,\n address,\n nftIds: []\n }\n }\n\n private getAPI(filters?: NFTsFetchFilters) {\n return filters && filters.isToken ? tokenAPI : editionAPI\n }\n\n private async getOneEthInMANA() {\n const mana = await this.tokenConverter.marketEthToMANA(1)\n return toWei(mana.toString(), 'ether')\n }\n\n private getOwner(fragment: Fragment): string {\n return fragment.type === AssetType.TOKEN\n ? fragment.currentOwner.id\n : fragment.artistAccount\n }\n\n private getDefaultURL(fragment: Fragment): string {\n const origin = getOriginURL(VendorName.KNOWN_ORIGIN)\n return `${origin}/${fragment.type}/${fragment.id}`\n }\n}\n","import * as decentraland from './decentraland'\nimport * as superRare from './super_rare'\nimport * as makersPlace from './makers_place'\nimport * as knownOrigin from './known_origin'\n\nexport enum VendorName {\n DECENTRALAND = 'decentraland',\n SUPER_RARE = 'super_rare',\n MAKERS_PLACE = 'makers_place',\n KNOWN_ORIGIN = 'known_origin'\n}\n\nexport const Disabled = {}\n\nconst ContractName = {\n ...decentraland.ContractName,\n ...superRare.ContractName,\n ...makersPlace.ContractName,\n ...knownOrigin.ContractName\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- Intentionally naming the variable the same as the type\nexport type ContractName = typeof ContractName\n\nexport const getContractNames = () =>\n ({\n ...decentraland.ContractName,\n ...superRare.ContractName,\n ...makersPlace.ContractName,\n ...knownOrigin.ContractName\n } as ContractName)\n\nexport enum TransferType {\n SAFE_TRANSFER_FROM = 0,\n TRANSFER_FROM = 1,\n TRANSFER = 2\n}\n","import { Address } from 'web3x/address'\nimport { ABICoder } from 'web3x/contract/abi-coder'\nimport { Order } from '@dcl/schemas'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { MarketplaceAdapter } from '../../../contracts/MarketplaceAdapter'\nimport { ContractFactory } from '../../contract/ContractFactory'\nimport { NFT } from '../../nft/types'\nimport { TokenConverter } from '../TokenConverter'\nimport { MarketplacePrice } from '../MarketplacePrice'\nimport { getContractNames, VendorName } from '../types'\nimport { OrderService as OrderServiceInterface } from '../services'\nimport { getContract } from '../../contract/utils'\n\nexport class OrderService\n implements OrderServiceInterface<VendorName.KNOWN_ORIGIN> {\n private tokenConverter: TokenConverter\n private marketplacePrice: MarketplacePrice\n\n constructor() {\n this.tokenConverter = new TokenConverter()\n this.marketplacePrice = new MarketplacePrice()\n }\n\n fetchByNFT(): any {\n throw new Error('Method: `fetchByNFT` is not implemented')\n }\n\n create(): any {\n throw new Error('Method: `create` is not implemented')\n }\n\n async execute(\n wallet: Wallet | null,\n nft: NFT<VendorName.KNOWN_ORIGIN>,\n order: Order\n ): Promise<string> {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n\n const contractNames = getContractNames()\n\n // Addresses\n const assetMarketAddress: Address = Address.fromString(\n order.marketplaceAddress\n )\n const manaTokenAddress = Address.fromString(\n getContract({ name: contractNames.MANA }).address\n )\n const from = Address.fromString(wallet.address)\n\n // Data\n const calldata = this.getCallData(wallet.address, nft)\n\n // Price\n const manaPrice = await this.tokenConverter.contractEthToMANA(\n (order as Order & { ethPrice: string }).ethPrice!\n )\n const maxPrice = this.marketplacePrice.addMaxSlippage(manaPrice)\n\n // Contract\n const marketplaceAdapter = await ContractFactory.build(\n MarketplaceAdapter,\n getContract({ name: contractNames.MARKETPLACE_ADAPTER }).address\n )\n return marketplaceAdapter.methods\n .buy(\n assetMarketAddress,\n calldata,\n (order as Order & { ethPrice: string }).ethPrice!,\n manaTokenAddress,\n maxPrice\n )\n .send({ from })\n .getTxHash()\n }\n\n cancel(): any {\n throw new Error('Method: `cancel` is not implemented')\n }\n\n canSell() {\n return false\n }\n\n private getCallData(to: string, nft: NFT<VendorName.KNOWN_ORIGIN>) {\n const abiCoder = new ABICoder()\n return abiCoder.encodeFunctionCall(\n {\n name: 'purchaseTo',\n type: 'function',\n inputs: [\n { type: 'address', name: '_to' },\n { type: 'uint256', name: '_editionNumber' }\n ]\n },\n [to, nft.tokenId]\n )\n }\n}\n","import { NFTService } from './NFTService'\nimport { ContractService } from './ContractService'\nimport { OrderService } from './OrderService'\n\nexport const VendorName = 'known_origin'\n\nexport * from './nft'\nexport * from './routing'\n\nexport * from './NFTService'\nexport * from './ContractService'\nexport * from './OrderService'\nexport const services = {\n NFTService,\n ContractService,\n OrderService\n}\n","import { ChainId, Network } from '@dcl/schemas'\nimport { config } from '../../../config'\nimport { Network as AppNetwork } from '../../contract/types'\nimport { getContract } from '../../contract/utils'\nimport {\n Contract,\n ContractService as ContractServiceInterface\n} from '../services'\nimport { TransferType } from '../types'\n\nconst network = config.get('NETWORK')! as AppNetwork\n\nexport enum ContractName {\n SUPER_RARE = 'SuperRare',\n SUPER_RARE_V2 = 'SuperRareV2',\n SUPER_RARE_MARKET = 'SuperRareMarket',\n SUPER_RARE_MARKET_V2 = 'SuperRareMarketV2',\n MARKETPLACE_ADAPTER = 'MarketplaceAdapter'\n}\n\nconst contracts = ({\n [AppNetwork.ROPSTEN]: [\n {\n name: ContractName.MARKETPLACE_ADAPTER,\n address: '0xd1e4e2880ff56cd0d5c68da9bed58bfbf0150948',\n vendor: 'super_rare',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_ROPSTEN\n }\n ],\n [AppNetwork.MAINNET]: [\n {\n name: ContractName.SUPER_RARE,\n address: '0x41a322b28d0ff354040e2cbc676f0320d8c8850d',\n vendor: 'super_rare',\n category: 'art',\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.SUPER_RARE_V2,\n address: '0xb932a70a57673d89f4acffbe830e8ed7f75fb9e0',\n vendor: 'super_rare',\n category: 'art',\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.SUPER_RARE_MARKET,\n address: '0x41a322b28d0ff354040e2cbc676f0320d8c8850d',\n vendor: 'super_rare',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.SUPER_RARE_MARKET_V2,\n address: '0x2947f98c42597966a0ec25e92843c09ac17fbaa7',\n vendor: 'super_rare',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.MARKETPLACE_ADAPTER,\n address: '0xf4fbd84193f9aaf9779dedbb415a806933eb1c95',\n vendor: 'super_rare',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n }\n ]\n} as Record<AppNetwork, Contract[]>)[network]\n\nexport class ContractService implements ContractServiceInterface {\n contracts = contracts\n\n async build() {}\n\n getContracts() {\n return this.contracts\n }\n\n getTransferType(address: string) {\n const contract = getContract({ address })\n if (!contract) {\n throw new Error('Invalid address: not found in contracts')\n }\n switch (contract.name) {\n case ContractName.SUPER_RARE:\n return TransferType.TRANSFER\n case ContractName.SUPER_RARE_V2:\n return TransferType.SAFE_TRANSFER_FROM\n default:\n throw new Error(\n `Invalid contract name: expected \"${ContractName.SUPER_RARE}\" or \"${ContractName.SUPER_RARE_V2}\" but got \"${contract.name}\" instead`\n )\n }\n }\n}\n","import { AxiosRequestConfig } from 'axios'\nimport { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { config } from '../../../config'\nimport { NFTsFetchParams, NFTSortBy } from '../../nft/types'\nimport {\n SuperRareOrder,\n SuperRareAsset,\n SuperRareFetchNFTOptions,\n SuperRareFetchOrderParams\n} from './types'\n\nconst API_URL = config.get('SUPER_RARE_API_URL')!\n\nexport const MAX_QUERY_SIZE = 100\n\nclass SuperRareAPI extends BaseAPI {\n public API_KEY: string = ''\n\n constructor(url: string) {\n super(url)\n\n if (!url) {\n throw new Error(`Invalid SuperRare API URL \"${url}\"`)\n }\n\n this.API_KEY = config.get('SUPER_RARE_API_KEY')!\n if (!this.API_KEY) {\n throw new Error(`Invalid SuperRare API KEY \"${this.API_KEY}\"`)\n }\n }\n\n async fetchNFTs(params: NFTsFetchParams): Promise<SuperRareAsset[]> {\n return this.request(\n 'get',\n '/nfts/assets',\n this.buildFetchManyParams(params)\n )\n }\n\n async fetchOrders(params: NFTsFetchParams): Promise<SuperRareOrder[]> {\n return this.request(\n 'get',\n '/nfts/orders',\n this.buildFetchManyParams(params)\n )\n }\n\n async fetchNFT(\n contractAddress: string,\n tokenId: string\n ): Promise<SuperRareAsset> {\n const nfts: SuperRareAsset[] = await this.request(\n 'get',\n '/nfts/assets',\n this.buildFetchOneParams(contractAddress, tokenId)\n )\n return nfts[0]\n }\n\n async fetchOrder(\n contractAddress: string,\n tokenId: string\n ): Promise<SuperRareOrder> {\n const orders: SuperRareOrder[] = await this.request(\n 'get',\n '/nfts/orders',\n this.buildFetchOneParams(contractAddress, tokenId)\n )\n return orders[0]\n }\n\n request(\n method: AxiosRequestConfig['method'],\n path: string,\n params: SuperRareFetchOrderParams\n ) {\n return super.request(method, path, params, this.getHeaders())\n }\n\n private getHeaders() {\n return {\n headers: { Authorization: `Bearer ${this.API_KEY}` }\n }\n }\n\n private buildFetchOneParams(\n contractAddress: string,\n tokenId: string\n ): SuperRareFetchNFTOptions {\n return {\n type: 'sell',\n asset_contract_addresses: [contractAddress],\n asset_ids: [Number(tokenId)]\n }\n }\n\n private buildFetchManyParams(\n params: NFTsFetchParams\n ): SuperRareFetchOrderParams {\n const requestParams: SuperRareFetchOrderParams = {\n type: 'sell',\n offset: params.skip,\n limit: Math.min(params.first, MAX_QUERY_SIZE),\n sort: this.getSort(params.orderBy),\n name: params.search,\n order: params.orderDirection\n }\n\n if (params.address) {\n requestParams.owner_addresses = [params.address]\n }\n\n return requestParams\n }\n\n private getSort(sortBy?: NFTSortBy) {\n switch (sortBy) {\n case NFTSortBy.PRICE:\n return 'price'\n case NFTSortBy.ORDER_CREATED_AT:\n return 'timestamp'\n default:\n return undefined\n }\n }\n}\n\nexport const superRareAPI = new SuperRareAPI(API_URL)\n","import BN from 'bn.js'\nimport { Address } from 'web3x/address'\nimport { toWei } from 'web3x/utils'\nimport { ListingStatus, Network, Order } from '@dcl/schemas'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { ERC721 } from '../../../contracts/ERC721'\nimport { ContractFactory } from '../../contract/ContractFactory'\nimport { NFT, NFTsFetchParams, NFTsCountParams } from '../../nft/types'\nimport { Account } from '../../account/types'\nimport { getNFTId } from '../../nft/utils'\nimport { TokenConverter } from '../TokenConverter'\nimport { MarketplacePrice } from '../MarketplacePrice'\nimport { NFTService as NFTServiceInterface } from '../services'\nimport { VendorName, TransferType } from '../types'\nimport { ContractService } from './ContractService'\nimport { SuperRareAsset, SuperRareOrder, SuperRareOwner } from './types'\nimport { superRareAPI, MAX_QUERY_SIZE } from './api'\nimport { config } from '../../../config'\n\nexport class NFTService implements NFTServiceInterface<VendorName.SUPER_RARE> {\n private tokenConverter: TokenConverter\n private marketplacePrice: MarketplacePrice\n private oneEthInWei: BN\n\n constructor() {\n this.tokenConverter = new TokenConverter()\n this.marketplacePrice = new MarketplacePrice()\n this.oneEthInWei = new BN('1000000000000000000') // 10 ** 18\n }\n\n async fetch(params: NFTsFetchParams) {\n let remoteNFTs: SuperRareAsset[]\n let remoteOrders: SuperRareOrder[]\n\n if ((params.address && !params.onlyOnSale) || !params.onlyOnSale) {\n const result = await Promise.all([\n superRareAPI.fetchNFTs(params),\n superRareAPI.fetchOrders(params)\n ])\n remoteNFTs = result[0]\n remoteOrders = result[1]\n } else {\n remoteOrders = await superRareAPI.fetchOrders(params)\n remoteNFTs = remoteOrders.map(order => order.asset)\n }\n\n const nfts: NFT<VendorName.SUPER_RARE>[] = []\n const accounts: Account[] = []\n const orders: Order[] = []\n\n const total = await this.count(params)\n const oneEthInMANA = await this.getOneEthInMANA()\n\n for (const asset of remoteNFTs) {\n const nft = this.toNFT(asset)\n\n const remoteOrder = remoteOrders.find(\n order => order.asset.id === asset.id\n )\n\n if (remoteOrder) {\n const order = this.toOrder(remoteOrder, oneEthInMANA)\n\n nft.activeOrderId = order.id\n\n orders.push(order)\n }\n\n let account = accounts.find(account => account.id === asset.owner.address)\n if (!account) {\n account = this.toAccount(asset.owner)\n }\n account.nftIds.push(nft.id)\n\n nfts.push(nft)\n accounts.push(account)\n }\n\n return [nfts, accounts, orders, total] as const\n }\n\n async count(countParams: NFTsCountParams) {\n const params: NFTsFetchParams = {\n ...countParams,\n first: MAX_QUERY_SIZE,\n skip: 0\n }\n\n let remoteElements\n if (params.address) {\n remoteElements = await superRareAPI.fetchNFTs(params)\n } else {\n remoteElements = await superRareAPI.fetchOrders(params)\n }\n\n return remoteElements.length\n }\n\n async fetchOne(contractAddress: string, tokenId: string) {\n const [remoteNFT, remoteOrder, oneEthInMANA] = await Promise.all([\n superRareAPI.fetchNFT(contractAddress, tokenId),\n superRareAPI.fetchOrder(contractAddress, tokenId),\n this.getOneEthInMANA()\n ])\n\n const nft = this.toNFT(remoteNFT)\n let order: Order | undefined\n\n if (remoteOrder) {\n order = this.toOrder(remoteOrder, oneEthInMANA)\n\n nft.activeOrderId = order.id\n }\n\n return [nft, order] as const\n }\n\n async transfer(\n wallet: Wallet | null,\n toAddress: string,\n nft: NFT<VendorName.SUPER_RARE>\n ) {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n const from = Address.fromString(wallet.address)\n const to = Address.fromString(toAddress)\n\n const erc721 = await ContractFactory.build(ERC721, nft.contractAddress)\n const transferType = new ContractService().getTransferType(\n nft.contractAddress\n )\n let transaction\n\n switch (transferType) {\n case TransferType.TRANSFER:\n transaction = erc721.methods.transfer(to, nft.tokenId)\n break\n case TransferType.SAFE_TRANSFER_FROM:\n default:\n transaction = erc721.methods.transferFrom(from, to, nft.tokenId)\n break\n }\n\n return transaction.send({ from }).getTxHash()\n }\n\n toNFT(asset: SuperRareAsset): NFT<VendorName.SUPER_RARE> {\n return {\n id: getNFTId(asset.contractAddress, asset.id.toString()),\n tokenId: asset.id.toString(),\n contractAddress: asset.contractAddress,\n activeOrderId: '',\n owner: asset.owner.address,\n name: asset.name,\n image: asset.image,\n url: asset.url,\n data: {\n description: asset.description\n },\n category: 'art',\n vendor: VendorName.SUPER_RARE,\n chainId: Number(config.get('CHAIN_ID')!),\n network: Network.ETHEREUM,\n issuedId: null,\n itemId: null,\n createdAt: 0,\n updatedAt: 0,\n soldAt: 0\n }\n }\n\n toOrder(\n order: SuperRareOrder,\n oneEthInMANA: string\n ): Order & { ethPrice: string } {\n const { asset, taker } = order\n\n const totalWei = this.marketplacePrice.addFee(order.amountWithFee)\n const weiPrice = new BN(totalWei).mul(new BN(oneEthInMANA))\n const price = weiPrice.div(this.oneEthInWei)\n\n return {\n id: `${VendorName.SUPER_RARE}-order-${asset.id}`,\n tokenId: asset.id.toString(),\n contractAddress: asset.contractAddress,\n marketplaceAddress: order.marketContractAddress,\n owner: asset.owner.address,\n buyer: taker ? taker.address : null,\n price: price.toString(10),\n ethPrice: order.amountWithFee.toString(),\n status: ListingStatus.OPEN,\n createdAt: +order.timestamp,\n updatedAt: +order.timestamp,\n expiresAt: Infinity,\n chainId: Number(config.get('CHAIN_ID')!),\n network: Network.ETHEREUM\n }\n }\n\n toAccount(account: SuperRareOwner): Account {\n return {\n id: account.address,\n address: account.address,\n nftIds: []\n }\n }\n\n private async getOneEthInMANA() {\n const mana = await this.tokenConverter.marketEthToMANA(1)\n return toWei(mana.toString(), 'ether')\n }\n}\n","import { Address } from 'web3x/address'\nimport { ABICoder } from 'web3x/contract/abi-coder'\nimport { Order } from '@dcl/schemas'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { MarketplaceAdapter } from '../../../contracts/MarketplaceAdapter'\nimport { ContractFactory } from '../../contract/ContractFactory'\nimport { NFT } from '../../nft/types'\nimport { TokenConverter } from '../TokenConverter'\nimport { MarketplacePrice } from '../MarketplacePrice'\nimport { getContractNames, VendorName } from '../types'\nimport { OrderService as OrderServiceInterface } from '../services'\nimport { ContractService } from './ContractService'\nimport { getContract } from '../../contract/utils'\n\nexport class OrderService\n implements OrderServiceInterface<VendorName.SUPER_RARE> {\n private tokenConverter: TokenConverter\n private marketplacePrice: MarketplacePrice\n\n constructor() {\n this.tokenConverter = new TokenConverter()\n this.marketplacePrice = new MarketplacePrice()\n }\n\n fetchByNFT(): any {\n throw new Error('Method: `fetchByNFT` is not implemented')\n }\n\n create(): any {\n throw new Error('Method: `create` is not implemented')\n }\n\n async execute(\n wallet: Wallet | null,\n nft: NFT<VendorName.SUPER_RARE>,\n order: Order\n ): Promise<string> {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n const contractService = new ContractService()\n\n const contractNames = getContractNames()\n\n // Addresses\n const assetContractAddress = Address.fromString(nft.contractAddress)\n const assetMarketAddress: Address = Address.fromString(\n order.marketplaceAddress\n )\n const manaTokenAddress = Address.fromString(\n getContract({ name: contractNames.MANA }).address\n )\n const from = Address.fromString(wallet.address)\n\n // Data\n const calldata = this.getCallData(nft)\n const transferType = contractService.getTransferType(nft.contractAddress)\n\n // Price\n const manaPrice = await this.tokenConverter.contractEthToMANA(\n (order as Order & { ethPrice: string }).ethPrice!\n )\n const maxPrice = this.marketplacePrice.addMaxSlippage(manaPrice)\n\n // Contract\n const marketplaceAdapter = await ContractFactory.build(\n MarketplaceAdapter,\n getContract({ name: contractNames.MARKETPLACE_ADAPTER }).address\n )\n return marketplaceAdapter.methods\n .buy(\n assetContractAddress,\n nft.tokenId,\n assetMarketAddress,\n calldata,\n (order as Order & { ethPrice: string }).ethPrice!,\n manaTokenAddress,\n maxPrice,\n transferType,\n from\n )\n .send({ from })\n .getTxHash()\n }\n\n cancel(): any {\n throw new Error('Method: `cancel` is not implemented')\n }\n\n canSell() {\n return false\n }\n\n private getCallData(nft: NFT<VendorName.SUPER_RARE>) {\n const contractNames = getContractNames()\n const superRare = getContract({ name: contractNames.SUPER_RARE })\n const superRareV2 = getContract({\n name: contractNames.SUPER_RARE_V2\n })\n const abiCoder = new ABICoder()\n\n switch (nft.contractAddress) {\n case superRare.address:\n return abiCoder.encodeFunctionCall(\n {\n name: 'buy',\n type: 'function',\n inputs: [{ type: 'uint256', name: 'TOKEN_ID' }]\n },\n [nft.tokenId]\n )\n case superRareV2.address:\n return abiCoder.encodeFunctionCall(\n {\n name: 'buy',\n type: 'function',\n inputs: [\n { type: 'address', name: 'ADDRESS_CONTRACT' },\n { type: 'uint256', name: 'TOKEN_ID' }\n ]\n },\n [nft.contractAddress, nft.tokenId]\n )\n default:\n throw new Error(`Invalid SuperRare address ${nft.contractAddress}`)\n }\n }\n}\n","import { NFTService } from './NFTService'\nimport { ContractService } from './ContractService'\nimport { OrderService } from './OrderService'\n\nexport const VendorName = 'super_rare'\n\nexport * from './types'\nexport * from './nft'\nexport * from './routing'\n\nexport * from './NFTService'\nexport * from './ContractService'\nexport * from './OrderService'\nexport const services = {\n NFTService,\n ContractService,\n OrderService\n}\n","import { services as decentraland } from './decentraland'\nimport { services as superRare } from './super_rare'\nimport { services as makersPlace } from './makers_place'\nimport { services as knownOrigin } from './known_origin'\nimport {\n ContractService,\n NFTService,\n OrderService,\n BidService\n} from './services'\nimport { VendorName } from './types'\n\nexport class VendorFactory {\n static build(vendor: VendorName): Vendor<VendorName> {\n switch (vendor) {\n case VendorName.DECENTRALAND:\n return new Vendor<VendorName.DECENTRALAND>(\n vendor,\n new decentraland.ContractService(),\n new decentraland.NFTService(),\n new decentraland.OrderService(),\n new decentraland.BidService()\n )\n case VendorName.SUPER_RARE:\n return new Vendor(\n vendor,\n new superRare.ContractService(),\n new superRare.NFTService(),\n new superRare.OrderService()\n )\n case VendorName.MAKERS_PLACE:\n return new Vendor(\n vendor,\n new makersPlace.ContractService(),\n new makersPlace.NFTService(),\n new makersPlace.OrderService()\n )\n case VendorName.KNOWN_ORIGIN:\n return new Vendor(\n vendor,\n new knownOrigin.ContractService(),\n new knownOrigin.NFTService(),\n new knownOrigin.OrderService()\n )\n default:\n throw new Error(`Invalid vendor \"${vendor}\"`)\n }\n }\n}\n\nexport class Vendor<V extends VendorName> {\n constructor(\n public type: V,\n public contractService: ContractService,\n public nftService: NFTService<V>,\n public orderService: OrderService<V>,\n public bidService?: BidService<V>\n ) {}\n}\n","import { VendorFactory } from '../vendor/VendorFactory'\nimport { VendorName } from '../vendor/types'\nimport { Contract } from '../vendor/services'\n\nexport let contracts: Contract[] = []\n\nexport async function buildContracts() {\n const vendors = Object.values(VendorName).map(VendorFactory.build)\n\n for (const vendor of vendors) {\n const { contractService } = vendor\n\n await contractService.build()\n\n contracts = [...contracts, ...contractService.getContracts()]\n }\n}\n\nexport function getContract(query: Partial<Contract>): Contract {\n const found = contracts.find(contract =>\n Object.keys(query).every(\n key =>\n query[key as keyof Contract]?.toString().toLowerCase() ===\n contract[key as keyof Contract]?.toString().toLowerCase()\n )\n )\n if (!found) {\n throw new Error(`Contract not found, query=${JSON.stringify(query)}`)\n }\n return found\n}\n","import { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { NFTsFetchParams } from '../../../nft/types'\nimport { NFTsFetchFilters, NFTResponse, NFTResult } from './types'\nimport { ATLAS_SERVER_URL } from '../land'\nimport { Contract } from '../../services'\nimport { contracts } from '../../../contract/utils'\nimport { VendorName } from '../../types'\nimport { getNFTSortBy } from '../../../routing/search'\nimport { config } from '../../../../config'\n\nexport const NFT_SERVER_URL = config.get('NFT_SERVER_URL')!\n\nclass NFTAPI extends BaseAPI {\n fetch = async (\n params: NFTsFetchParams,\n filters?: NFTsFetchFilters\n ): Promise<NFTResponse> => {\n const queryParams = this.buildNFTQueryString(params, filters)\n return this.request('get', `/nfts?${queryParams}`)\n }\n\n async fetchOne(contractAddress: string, tokenId: string): Promise<NFTResult> {\n const response: NFTResponse = await this.request('get', '/nfts', {\n contractAddress,\n tokenId\n })\n\n if (response.data.length === 0) {\n throw new Error('Not found')\n }\n\n return response.data[0]\n }\n\n async fetchTokenId(x: number, y: number) {\n try {\n const { id } = await fetch(\n `${ATLAS_SERVER_URL}/v2/parcels/${x}/${y}`\n ).then(resp => resp.json())\n return id\n } catch (error) {\n return null\n }\n }\n\n async fetchContracts(): Promise<Contract[]> {\n try {\n const response: {\n data: Omit<Contract, 'vendor'>[]\n total: number\n } = await this.request('get', '/contracts', { first: 0 })\n const contracts: Contract[] = response.data.map(\n contractWithoutVendor => ({\n ...contractWithoutVendor,\n vendor: VendorName.DECENTRALAND\n })\n )\n return contracts\n } catch (error) {\n return []\n }\n }\n\n private buildNFTQueryString(\n params: NFTsFetchParams,\n filters?: NFTsFetchFilters\n ): string {\n const queryParams = new URLSearchParams()\n queryParams.append('first', params.first.toString())\n queryParams.append('skip', params.skip.toString())\n if (params.orderBy) {\n queryParams.append('sortBy', getNFTSortBy(params.orderBy))\n }\n if (params.category) {\n queryParams.append('category', params.category)\n }\n if (params.address) {\n queryParams.append('owner', params.address)\n }\n if (params.onlyOnSale) {\n queryParams.append('isOnSale', 'true')\n }\n\n if (params.search) {\n queryParams.set('search', params.search)\n }\n if (filters) {\n if (filters.rarities) {\n for (const rarity of filters.rarities) {\n queryParams.append('itemRarity', rarity)\n }\n }\n if (filters.isLand) {\n queryParams.append('isLand', 'true')\n }\n if (filters.isWearableHead) {\n queryParams.append('isWearableHead', 'true')\n }\n if (filters.isWearableAccessory) {\n queryParams.append('isWearableAccessory', 'true')\n }\n if (filters.isWearableSmart) {\n queryParams.append('isWearableSmart', 'true')\n }\n if (filters.wearableCategory) {\n queryParams.append('wearableCategory', filters.wearableCategory)\n }\n if (filters.wearableGenders) {\n for (const wearableGender of filters.wearableGenders) {\n queryParams.append('wearableGender', wearableGender)\n }\n }\n if (filters.contracts) {\n for (const address of filters.contracts) {\n if (contracts.some(contract => contract.address === address)) {\n queryParams.append('contractAddress', address)\n }\n }\n }\n if (filters.network) {\n queryParams.append('network', filters.network)\n }\n }\n\n return queryParams.toString()\n }\n}\n\nexport const nftAPI = new NFTAPI(NFT_SERVER_URL)\n","import { Bid, ListingStatus } from '@dcl/schemas'\nimport { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { NFT_SERVER_URL } from '../nft'\n\nclass BidAPI extends BaseAPI {\n async fetch(options: Record<string, string>): Promise<Bid[]> {\n const queryParams = new URLSearchParams()\n for (const key of Object.keys(options)) {\n queryParams.append(key, options[key])\n }\n try {\n const response: { data: Bid[]; total: number } = await this.request(\n 'get',\n `/bids?${queryParams.toString()}`\n )\n return response.data\n } catch (error) {\n return []\n }\n }\n async fetchBySeller(seller: string) {\n return this.fetch({ seller, status: ListingStatus.OPEN })\n }\n\n async fetchByBidder(bidder: string) {\n return this.fetch({ bidder, status: ListingStatus.OPEN })\n }\n\n async fetchByNFT(\n contractAddress: string,\n tokenId: string,\n status: ListingStatus = ListingStatus.OPEN\n ) {\n return this.fetch({ contractAddress, tokenId, status })\n }\n}\n\nexport const bidAPI = new BidAPI(NFT_SERVER_URL)\n","import { ChainId, Network } from '@dcl/schemas'\nimport {\n ContractData,\n ContractName,\n getContract\n} from 'decentraland-transactions'\n\nexport function getERC721ContractData(data: {\n contractAddress: string\n network: Network\n chainId: ChainId\n}) {\n const contract: ContractData =\n /* We need to use the ERC721CollectionV2 instead of ERC721 for non-ethereum transfers otherwise \n the meta-tx would fail due to wrong domain and version.\n If some day we have other types of NFTs other than ERC721CollectionV2 we will need to handle them appropiately too.\n */\n data.network !== Network.ETHEREUM\n ? {\n ...getContract(ContractName.ERC721CollectionV2, data.chainId),\n address: data.contractAddress\n }\n : {\n ...getContract(ContractName.ERC721, data.chainId),\n address: data.contractAddress\n }\n return contract\n}\n","import { parseUnits } from '@ethersproject/units'\nimport { Bid, ListingStatus, Network } from '@dcl/schemas'\nimport {\n ContractData,\n ContractName,\n getContract\n} from 'decentraland-transactions'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { sendTransaction } from 'decentraland-dapps/dist/modules/wallet/utils'\nimport { NFT } from '../../nft/types'\nimport { VendorName } from '../types'\nimport { BidService as BidServiceInterface } from '../services'\nimport { bidAPI } from './bid/api'\nimport { getERC721ContractData } from './utils'\n\nexport class BidService\n implements BidServiceInterface<VendorName.DECENTRALAND> {\n async fetchBySeller(seller: string) {\n const bids = await bidAPI.fetchBySeller(seller)\n return bids\n }\n\n async fetchByBidder(bidder: string) {\n const bids = await bidAPI.fetchByBidder(bidder)\n return bids\n }\n\n async fetchByNFT(nft: NFT, status: ListingStatus = ListingStatus.OPEN) {\n const bids = await bidAPI.fetchByNFT(\n nft.contractAddress,\n nft.tokenId,\n status\n )\n return bids\n }\n\n async place(\n wallet: Wallet | null,\n nft: NFT,\n price: number,\n expiresAt: number,\n fingerprint?: string\n ) {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n\n const priceInWei = parseUnits(price.toString(), 'ether')\n const expiresIn = Math.round((expiresAt - Date.now()) / 1000)\n\n switch (nft.network) {\n case Network.ETHEREUM: {\n const contract: ContractData = getContract(\n ContractName.Bid,\n nft.chainId\n )\n return sendTransaction(contract, bids => {\n if (fingerprint) {\n return bids['placeBid(address,uint256,uint256,uint256,bytes)'](\n nft.contractAddress,\n nft.tokenId,\n priceInWei,\n expiresIn,\n fingerprint\n )\n } else {\n return bids['placeBid(address,uint256,uint256,uint256)'](\n nft.contractAddress,\n nft.tokenId,\n priceInWei,\n expiresIn\n )\n }\n })\n }\n case Network.MATIC: {\n const contract: ContractData = getContract(\n ContractName.BidV2,\n nft.chainId\n )\n return sendTransaction(contract, bids =>\n bids['placeBid(address,uint256,uint256,uint256)'](\n nft.contractAddress,\n nft.tokenId,\n priceInWei,\n expiresIn\n )\n )\n }\n }\n }\n\n async accept(wallet: Wallet | null, bid: Bid) {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n\n const contract: ContractData = getERC721ContractData(bid)\n\n return sendTransaction(contract, erc721 =>\n erc721['safeTransferFrom(address,address,uint256,bytes)'](\n wallet.address,\n bid.bidAddress,\n bid.tokenId,\n bid.blockchainId\n )\n )\n }\n\n async cancel(wallet: Wallet | null, bid: Bid) {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n\n const contract: ContractData =\n bid.network === Network.ETHEREUM\n ? getContract(ContractName.Bid, bid.chainId)\n : getContract(ContractName.BidV2, bid.chainId)\n return sendTransaction(contract, bids =>\n bids['cancelBid(address,uint256)'](bid.contractAddress, bid.tokenId)\n )\n }\n}\n","import { ChainId, Network } from '@dcl/schemas'\nimport { getContract, ContractName as CN } from 'decentraland-transactions'\nimport {\n Contract,\n ContractService as ContractServiceInterface\n} from '../services'\nimport { Network as AppNetwork } from '../../contract/types'\nimport { TransferType } from '../types'\nimport { nftAPI } from './nft'\nimport { config } from '../../../config'\n\nconst network = config.get('NETWORK')! as AppNetwork\n\nexport enum ContractName {\n MANA = 'MANA',\n MARKETPLACE = 'Marketplace',\n LEGACY_MARKETPLACE = 'LegacyMarketplace',\n BIDS = 'Bids',\n COLLECTION_STORE = 'CollectionStore'\n}\n\nconst contracts = ({\n [AppNetwork.ROPSTEN]: [\n {\n name: ContractName.MANA,\n address: getContract(CN.MANAToken, ChainId.ETHEREUM_ROPSTEN).address,\n vendor: 'decentraland',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_ROPSTEN\n },\n {\n name: ContractName.MARKETPLACE,\n address: getContract(CN.Marketplace, ChainId.ETHEREUM_ROPSTEN).address,\n vendor: 'decentraland',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_ROPSTEN\n },\n {\n name: ContractName.BIDS,\n address: getContract(CN.Bid, ChainId.ETHEREUM_ROPSTEN).address,\n vendor: 'decentraland',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_ROPSTEN\n },\n {\n name: ContractName.MANA,\n address: getContract(CN.MANAToken, ChainId.MATIC_MUMBAI).address,\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MUMBAI\n },\n {\n name: ContractName.MARKETPLACE,\n address: getContract(CN.MarketplaceV2, ChainId.MATIC_MUMBAI).address,\n label: 'MarketplaceV2',\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MUMBAI\n },\n {\n name: ContractName.LEGACY_MARKETPLACE,\n address: getContract(CN.Marketplace, ChainId.MATIC_MUMBAI).address,\n label: 'MarketplaceV1',\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MUMBAI\n },\n {\n name: CN.CollectionStore,\n address: getContract(CN.CollectionStore, ChainId.MATIC_MUMBAI).address,\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MUMBAI\n },\n {\n name: ContractName.BIDS,\n address: getContract(CN.BidV2, ChainId.MATIC_MUMBAI).address,\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MUMBAI\n }\n ],\n [AppNetwork.MAINNET]: [\n {\n name: ContractName.MANA,\n address: getContract(CN.MANAToken, ChainId.ETHEREUM_MAINNET).address,\n vendor: 'decentraland',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.MARKETPLACE,\n address: getContract(CN.Marketplace, ChainId.ETHEREUM_MAINNET).address,\n vendor: 'decentraland',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.BIDS,\n address: getContract(CN.Bid, ChainId.ETHEREUM_MAINNET).address,\n vendor: 'decentraland',\n category: null,\n network: Network.ETHEREUM,\n chainId: ChainId.ETHEREUM_MAINNET\n },\n {\n name: ContractName.MANA,\n address: getContract(CN.MANAToken, ChainId.MATIC_MAINNET).address,\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MAINNET\n },\n {\n name: ContractName.MARKETPLACE,\n address: getContract(CN.MarketplaceV2, ChainId.MATIC_MAINNET).address,\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MAINNET\n },\n {\n name: ContractName.LEGACY_MARKETPLACE,\n address: getContract(CN.Marketplace, ChainId.MATIC_MAINNET).address,\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MAINNET\n },\n {\n name: CN.CollectionStore,\n address: getContract(CN.CollectionStore, ChainId.MATIC_MAINNET).address,\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MAINNET\n },\n {\n name: ContractName.BIDS,\n address: getContract(CN.BidV2, ChainId.MATIC_MAINNET).address,\n vendor: 'decentraland',\n category: null,\n network: Network.MATIC,\n chainId: ChainId.MATIC_MAINNET\n }\n ]\n} as Record<AppNetwork, Contract[]>)[network]\n\nexport class ContractService implements ContractServiceInterface {\n contracts = contracts\n\n hasFetched = false\n\n async build() {\n if (this.hasFetched) {\n return\n }\n\n const contracts = await nftAPI.fetchContracts()\n for (const contract of contracts) {\n this.contracts.push(contract)\n }\n\n this.hasFetched = true\n }\n\n getContracts() {\n return this.contracts\n }\n\n getTransferType(_address: string) {\n return TransferType.SAFE_TRANSFER_FROM\n }\n}\n","import { Order } from '@dcl/schemas'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { sendTransaction } from 'decentraland-dapps/dist/modules/wallet/utils'\nimport { NFT, NFTsFetchParams, NFTsCountParams } from '../../nft/types'\nimport { Account } from '../../account/types'\nimport { NFTService as NFTServiceInterface } from '../services'\nimport { NFTsFetchFilters } from './nft/types'\nimport { VendorName } from '../types'\nimport { nftAPI } from './nft/api'\nimport { getERC721ContractData } from './utils'\n\nexport class NFTService\n implements NFTServiceInterface<VendorName.DECENTRALAND> {\n async fetch(params: NFTsFetchParams, filters?: NFTsFetchFilters) {\n const { data: results, total } = await nftAPI.fetch(params, filters)\n\n const accounts: Account[] = results.reduce((accumulator, nftResult) => {\n const address = nftResult.nft.owner\n let account = accumulator.find(account => account.id === address)\n if (!account) {\n account = this.toAccount(address)\n accumulator.push(account)\n }\n account.nftIds.push(nftResult.nft.id)\n return accumulator\n }, [] as Account[])\n\n const nfts: NFT[] = results.map(nftResult => ({\n ...nftResult.nft,\n vendor: VendorName.DECENTRALAND\n }))\n\n const orders: Order[] = results\n .filter(nftResult => nftResult.order)\n .map(nftResult => nftResult.order as Order)\n\n return [nfts, accounts, orders, total] as const\n }\n\n async count(countParams: NFTsCountParams, filters?: NFTsFetchFilters) {\n const result = await nftAPI.fetch(\n { ...countParams, first: 0, skip: 0 },\n filters\n )\n return result.total\n }\n\n async fetchOne(contractAddress: string, tokenId: string) {\n const response = await nftAPI.fetchOne(contractAddress, tokenId)\n const nft: NFT = { ...response.nft, vendor: VendorName.DECENTRALAND }\n return [nft, response.order || undefined] as const\n }\n\n async transfer(wallet: Wallet | null, to: string, nft: NFT) {\n if (!wallet) {\n throw new Error('Invalid address. Wallet must be connected.')\n }\n\n const contract = getERC721ContractData(nft)\n\n return sendTransaction(contract, erc721 =>\n erc721.transferFrom(wallet.address, to, nft.tokenId)\n )\n }\n\n toAccount(address: string): Account {\n return {\n id: address,\n address,\n nftIds: []\n }\n }\n}\n","import { ListingStatus, Order } from '@dcl/schemas'\nimport { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { NFT_SERVER_URL } from '../nft'\n\nclass OrderAPI extends BaseAPI {\n async fetchByNFT(\n contractAddress: string,\n tokenId: string,\n status?: ListingStatus\n ): Promise<Order[]> {\n const response: { data: Order[]; total: number } = await this.request(\n 'get',\n '/orders',\n { contractAddress, tokenId, status }\n )\n return response.data\n }\n}\n\nexport const orderAPI = new OrderAPI(NFT_SERVER_URL)\n","import { utils } from 'ethers'\nimport { ListingStatus, Network, Order } from '@dcl/schemas'\nimport {\n ContractName,\n getContract,\n getContractName\n} from 'decentraland-transactions'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { sendTransaction } from 'decentraland-dapps/dist/modules/wallet/utils'\nimport { NFT } from '../../nft/types'\nimport { orderAPI } from './order/api'\nimport { VendorName } from '../types'\nimport { OrderService as OrderServiceInterface } from '../services'\n\nexport class OrderService\n implements OrderServiceInterface<VendorName.DECENTRALAND> {\n fetchByNFT(nft: NFT, status?: ListingStatus): Promise<Order[]> {\n return orderAPI.fetchByNFT(nft.contractAddress, nft.tokenId, status)\n }\n\n async create(\n _wallet: Wallet | null,\n nft: NFT,\n price: number,\n expiresAt: number\n ) {\n const contract = getContract(\n nft.network === Network.ETHEREUM\n ? ContractName.Marketplace\n : ContractName.MarketplaceV2,\n nft.chainId\n )\n return sendTransaction(contract, marketplace =>\n marketplace.createOrder(\n nft.contractAddress,\n nft.tokenId,\n utils.parseEther(price.toString()),\n expiresAt\n )\n )\n }\n\n async execute(\n _wallet: Wallet | null,\n nft: NFT,\n order: Order,\n fingerprint?: string\n ) {\n const contractName = getContractName(order.marketplaceAddress)\n const contract = getContract(contractName, order.chainId)\n if (fingerprint) {\n return sendTransaction(contract, marketplace =>\n marketplace.safeExecuteOrder(\n nft.contractAddress,\n nft.tokenId,\n order.price,\n fingerprint\n )\n )\n } else {\n return sendTransaction(contract, marketplace =>\n marketplace.executeOrder(nft.contractAddress, nft.tokenId, order.price)\n )\n }\n }\n\n async cancel(_wallet: Wallet | null, order: Order) {\n const contractName = getContractName(order.marketplaceAddress)\n const contract = getContract(contractName, order.chainId)\n return sendTransaction(contract, marketplace =>\n marketplace.cancelOrder(order.contractAddress, order.tokenId)\n )\n }\n\n canSell() {\n return true\n }\n}\n","import { Collection, CollectionFilters } from '@dcl/schemas'\nimport { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { NFT_SERVER_URL } from '../nft'\nimport { CollectionResponse } from './types'\n\nclass CollectionAPI extends BaseAPI {\n fetch = async (\n filters: CollectionFilters = {}\n ): Promise<CollectionResponse> => {\n const queryParams = this.buildCollectionsQueryString(filters)\n return this.request('get', `/collections?${queryParams}`)\n }\n\n fetchOne = async (collectionUrn: string): Promise<Collection> => {\n const { data }: CollectionResponse = await this.request(\n 'get',\n '/collections',\n {\n urn: collectionUrn\n }\n )\n\n if (data.length === 0) {\n throw new Error('Not found')\n }\n\n return data[0]\n }\n\n private buildCollectionsQueryString(filters: CollectionFilters): string {\n const queryParams = new URLSearchParams()\n\n if (filters.first) {\n queryParams.append('first', filters.first.toString())\n }\n\n if (filters.skip) {\n queryParams.append('skip', filters.skip.toString())\n }\n\n if (filters.sortBy) {\n queryParams.append('sortBy', filters.sortBy)\n }\n\n if (filters.search) {\n queryParams.set('search', filters.search)\n }\n\n if (filters.creator) {\n queryParams.append('creator', filters.creator)\n }\n\n if (filters.isOnSale) {\n queryParams.append('isOnSale', 'true')\n }\n\n if (filters.contractAddress) {\n queryParams.append('contractAddress', filters.contractAddress)\n }\n\n if (filters.network) {\n queryParams.append('network', filters.network)\n }\n\n return queryParams.toString()\n }\n}\n\nexport const collectionAPI = new CollectionAPI(NFT_SERVER_URL)\n","import { SaleFilters } from '@dcl/schemas'\nimport { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { NFT_SERVER_URL } from '../nft'\nimport { SaleResponse } from './types'\n\nclass SaleAPI extends BaseAPI {\n fetch = async (filters: SaleFilters = {}): Promise<SaleResponse> => {\n const queryParams = this.buildSalesQueryString(filters)\n return this.request('get', `/sales?${queryParams}`)\n }\n\n private buildSalesQueryString(filters: SaleFilters): string {\n const queryParams = new URLSearchParams()\n\n const entries = Object.entries(filters)\n\n for (let [key, value] of entries) {\n queryParams.append(key, value.toString())\n }\n\n return queryParams.toString()\n }\n}\n\nexport const saleAPI = new SaleAPI(NFT_SERVER_URL)\n","import { Account, AccountFilters } from '@dcl/schemas'\nimport { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { NFT_SERVER_URL } from '../nft'\nimport { AccountResponse } from './types'\n\nclass AccountAPI extends BaseAPI {\n fetch = async (filters: AccountFilters = {}): Promise<AccountResponse> => {\n const queryParams = this.buildAccountsQueryString(filters)\n return this.request('get', `/accounts?${queryParams}`)\n }\n\n fetchOne = async (address: string): Promise<Account> => {\n const { data }: AccountResponse = await this.request(\n 'get',\n '/collections',\n {\n address\n }\n )\n\n if (data.length === 0) {\n throw new Error('Not found')\n }\n\n return data[0]\n }\n\n private buildAccountsQueryString(filters: AccountFilters): string {\n const queryParams = new URLSearchParams()\n\n if (filters.first) {\n queryParams.append('first', filters.first.toString())\n }\n\n if (filters.skip) {\n queryParams.append('skip', filters.skip.toString())\n }\n\n if (filters.sortBy) {\n queryParams.append('sortBy', filters.sortBy)\n }\n\n if (filters.id) {\n queryParams.set('id', filters.id)\n }\n\n if (filters.address) {\n queryParams.set('address', filters.address)\n }\n\n if (filters.network) {\n queryParams.append('network', filters.network)\n }\n\n return queryParams.toString()\n }\n}\n\nexport const accountAPI = new AccountAPI(NFT_SERVER_URL)\n","import { BidService } from './BidService'\nimport { ContractService } from './ContractService'\nimport { NFTService } from './NFTService'\nimport { OrderService } from './OrderService'\n\nexport const VendorName = 'decentraland' as const\n\nexport * from './bid'\nexport * from './land'\nexport * from './nft'\nexport * from './order'\nexport * from './routing'\nexport * from './collection'\nexport * from './sale'\nexport * from './account'\n\nexport * from './BidService'\nexport * from './ContractService'\nexport * from './NFTService'\nexport * from './OrderService'\n\nexport const services = {\n BidService,\n ContractService,\n NFTService,\n OrderService\n}\n","import { AssetType } from '../asset/types'\nimport { Section } from '../vendor/decentraland'\nimport { getSearchParams } from './search'\nimport { BrowseOptions } from './types'\n\nexport const locations = {\n root: () => '/',\n signIn: () => '/sign-in',\n settings: () => '/settings',\n lands: (options?: BrowseOptions) => {\n const params = getSearchParams(options)\n return params ? `/lands?${params.toString()}` : '/lands'\n },\n collectibles: () => '/collectibles',\n collection: (contractAddress: string = ':contractAddress') =>\n `/collections/${contractAddress}`,\n browse: (options?: BrowseOptions) => {\n const params = getSearchParams(options)\n return params ? `/browse?${params.toString()}` : '/browse'\n },\n currentAccount: (options?: BrowseOptions) => {\n const params = getSearchParams(options)\n return params ? `/account?${params.toString()}` : '/account'\n },\n defaultCurrentAccount: function() {\n return this.currentAccount({\n section: Section.COLLECTIONS\n })\n },\n account: (address: string = ':address', options?: BrowseOptions) => {\n const params = getSearchParams(options)\n return params\n ? `/accounts/${address}?${params.toString()}`\n : `/accounts/${address}`\n },\n nft: (\n contractAddress: string = ':contractAddress',\n tokenId: string = ':tokenId'\n ) => `/contracts/${contractAddress}/tokens/${tokenId}`,\n item: (\n contractAddress: string = ':contractAddress',\n itemId: string = ':itemId'\n ) => `/contracts/${contractAddress}/items/${itemId}`,\n parcel: (x: string = ':x', y: string = ':y') => `/parcels/${x}/${y}/detail`,\n estate: (estateId: string = ':estateId') => `/estates/${estateId}/detail`,\n buy: (\n type: AssetType,\n contractAddress: string = ':contractAddress',\n tokenId: string = ':tokenId'\n ) => `/contracts/${contractAddress}/${getResource(type)}/${tokenId}/buy`,\n sell: (\n contractAddress: string = ':contractAddress',\n tokenId: string = ':tokenId'\n ) => `/contracts/${contractAddress}/tokens/${tokenId}/sell`,\n cancel: (\n contractAddress: string = ':contractAddress',\n tokenId: string = ':tokenId'\n ) => `/contracts/${contractAddress}/tokens/${tokenId}/cancel`,\n transfer: (\n contractAddress: string = ':contractAddress',\n tokenId: string = ':tokenId'\n ) => `/contracts/${contractAddress}/tokens/${tokenId}/transfer`,\n bid: (\n contractAddress: string = ':contractAddress',\n tokenId: string = ':tokenId'\n ) => `/contracts/${contractAddress}/tokens/${tokenId}/bid`,\n activity: () => `/activity`\n}\n\nfunction getResource(type: AssetType) {\n switch (type) {\n case AssetType.NFT:\n return 'tokens'\n case AssetType.ITEM:\n return 'items'\n default:\n throw new Error(`Invalid type ${type}`)\n }\n}\n","import { Eth } from 'web3x/eth'\nimport { Provider } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { getConnectedProvider } from 'decentraland-dapps/dist/lib/eth'\nimport { LegacyProviderAdapter } from 'web3x/providers'\nimport { config } from '../../config'\n\nexport const TRANSACTIONS_API_URL = config.get('TRANSACTIONS_API_URL')\n\nexport function shortenAddress(address: string) {\n if (address) {\n return address.slice(0, 6) + '...' + address.slice(42 - 5)\n }\n}\n\nexport function addressEquals(address1?: string, address2?: string) {\n return (\n address1 !== undefined &&\n address2 !== undefined &&\n address1.toLowerCase() === address2.toLowerCase()\n )\n}\n\nexport async function getEth(): Promise<Eth> {\n const provider: Provider | null = await getConnectedProvider()\n\n if (!provider) {\n throw new Error('Could not get a valid connected Wallet')\n }\n\n return new Eth(new LegacyProviderAdapter(provider as any))\n}\n","import { NFT, NFTCategory, Order } from '@dcl/schemas'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { locations } from '../routing/locations'\nimport { addressEquals } from '../wallet/utils'\nimport { Asset } from './types'\n\nexport function getAssetName(asset: Asset) {\n if (asset.name) {\n return asset.name\n }\n\n switch (asset.category) {\n case NFTCategory.PARCEL:\n return t('global.parcel_with_coords', (asset as NFT).data.parcel)\n\n case NFTCategory.ESTATE:\n return t('global.estate')\n\n case NFTCategory.WEARABLE:\n return t('global.wearable')\n\n case NFTCategory.ENS:\n return t('global.ens')\n\n case 'art':\n return t('global.art')\n\n default:\n return t('global.nft')\n }\n}\n\nexport function getAssetImage(asset: Asset) {\n if ('image' in asset) {\n return asset.image\n }\n if ('thumbnail' in asset) {\n return asset.thumbnail\n }\n return ''\n}\n\nexport function getAssetUrl(asset: Asset) {\n if ('tokenId' in asset) {\n return locations.nft(asset.contractAddress, asset.tokenId)\n }\n if ('itemId' in asset) {\n return locations.item(asset.contractAddress, asset.itemId)\n }\n return ''\n}\n\nexport function getAssetPrice(asset: Asset, order?: Order) {\n return 'price' in asset\n ? asset.isOnSale\n ? asset.price\n : null\n : order\n ? order.price\n : null\n}\n\nexport function isOwnedBy(asset: Asset, wallet: Wallet | null) {\n const assetAddress = 'owner' in asset ? asset.owner : asset.creator\n return addressEquals(wallet?.address, assetAddress)\n}\n","import { MAXIMUM_FRACTION_DIGITS } from 'decentraland-dapps/dist/lib/mana'\nimport { fromWei, unitMap } from 'web3x/utils'\n\n/**\n * Format wei to a supported unit ('ether' by default) and localizes it with the desired fraction digits (2 by default)\n */\nexport function formatWeiMANA(\n wei: string,\n maximumFractionDigits: number = MAXIMUM_FRACTION_DIGITS,\n unit: keyof typeof unitMap = 'ether'\n): string {\n return Number(fromWei(wei, unit)).toLocaleString(undefined, {\n maximumFractionDigits\n })\n}\n\n/**\n * Takes a string representing an ether MANA value and converts it to a two-place decimal number.\n * If the mana value is either negative or invalid, it'll return 0\n */\nexport function parseMANANumber(\n strMana: string,\n maximumFractionDigits = MAXIMUM_FRACTION_DIGITS\n): number {\n const mana = parseFloat(strMana)\n\n if (strMana.length === 0 || isNaN(Number(strMana)) || mana < 0) {\n return 0\n }\n\n return parseFloat(mana.toFixed(maximumFractionDigits))\n}\n","import { action } from 'typesafe-actions'\nimport { Order } from '@dcl/schemas'\nimport { buildTransactionPayload } from 'decentraland-dapps/dist/modules/transaction/utils'\nimport { ErrorCode } from 'decentraland-transactions'\n\nimport { NFT } from '../nft/types'\nimport { getAssetName } from '../asset/utils'\nimport { formatWeiMANA } from '../../lib/mana'\n\n// Create Order (aka Sell)\n\nexport const CREATE_ORDER_REQUEST = '[Request] Create Order'\nexport const CREATE_ORDER_SUCCESS = '[Success] Create Order'\nexport const CREATE_ORDER_FAILURE = '[Failure] Create Order'\n\nexport const createOrderRequest = (\n nft: NFT,\n price: number,\n expiresAt: number\n) => action(CREATE_ORDER_REQUEST, { nft, price, expiresAt })\nexport const createOrderSuccess = (\n nft: NFT,\n price: number,\n expiresAt: number,\n txHash: string\n) =>\n action(CREATE_ORDER_SUCCESS, {\n nft,\n price,\n expiresAt,\n ...buildTransactionPayload(nft.chainId, txHash, {\n tokenId: nft.tokenId,\n contractAddress: nft.contractAddress,\n network: nft.network,\n name: getAssetName(nft),\n price\n })\n })\nexport const createOrderFailure = (\n nft: NFT,\n price: number,\n expiresAt: number,\n error: string,\n errorCode?: ErrorCode\n) => action(CREATE_ORDER_FAILURE, { nft, price, expiresAt, error, errorCode })\n\nexport type CreateOrderRequestAction = ReturnType<typeof createOrderRequest>\nexport type CreateOrderSuccessAction = ReturnType<typeof createOrderSuccess>\nexport type CreateOrderFailureAction = ReturnType<typeof createOrderFailure>\n\n// Execute Order (aka Buy)\n\nexport const EXECUTE_ORDER_REQUEST = '[Request] Execute Order'\nexport const EXECUTE_ORDER_SUCCESS = '[Success] Execute Order'\nexport const EXECUTE_ORDER_FAILURE = '[Failure] Execute Order'\n\nexport const executeOrderRequest = (\n order: Order,\n nft: NFT,\n fingerprint?: string\n) => action(EXECUTE_ORDER_REQUEST, { order, nft, fingerprint })\nexport const executeOrderSuccess = (order: Order, nft: NFT, txHash: string) =>\n action(EXECUTE_ORDER_SUCCESS, {\n order,\n nft,\n ...buildTransactionPayload(nft.chainId, txHash, {\n tokenId: nft.tokenId,\n contractAddress: nft.contractAddress,\n network: nft.network,\n name: getAssetName(nft),\n price: formatWeiMANA(order.price)\n })\n })\nexport const executeOrderFailure = (\n order: Order,\n nft: NFT,\n error: string,\n errorCode?: ErrorCode\n) => action(EXECUTE_ORDER_FAILURE, { order, nft, error, errorCode })\n\nexport type ExecuteOrderRequestAction = ReturnType<typeof executeOrderRequest>\nexport type ExecuteOrderSuccessAction = ReturnType<typeof executeOrderSuccess>\nexport type ExecuteOrderFailureAction = ReturnType<typeof executeOrderFailure>\n\n// Cancel Order (aka Cancel Sale)\n\nexport const CANCEL_ORDER_REQUEST = '[Request] Cancel Order'\nexport const CANCEL_ORDER_SUCCESS = '[Success] Cancel Order'\nexport const CANCEL_ORDER_FAILURE = '[Failure] Cancel Order'\n\nexport const cancelOrderRequest = (order: Order, nft: NFT) =>\n action(CANCEL_ORDER_REQUEST, { order, nft })\nexport const cancelOrderSuccess = (order: Order, nft: NFT, txHash: string) =>\n action(CANCEL_ORDER_SUCCESS, {\n order,\n nft,\n ...buildTransactionPayload(nft.chainId, txHash, {\n tokenId: nft.tokenId,\n contractAddress: nft.contractAddress,\n network: nft.network,\n name: getAssetName(nft),\n price: formatWeiMANA(order.price)\n })\n })\nexport const cancelOrderFailure = (\n order: Order,\n nft: NFT,\n error: string,\n errorCode?: ErrorCode\n) => action(CANCEL_ORDER_FAILURE, { order, nft, error, errorCode })\n\nexport type CancelOrderRequestAction = ReturnType<typeof cancelOrderRequest>\nexport type CancelOrderSuccessAction = ReturnType<typeof cancelOrderSuccess>\nexport type CancelOrderFailureAction = ReturnType<typeof cancelOrderFailure>\n","import { action } from 'typesafe-actions'\nimport { Order } from '@dcl/schemas'\nimport { buildTransactionPayload } from 'decentraland-dapps/dist/modules/transaction/utils'\nimport { ErrorCode } from 'decentraland-transactions'\n\nimport { SortDirection } from '../routing/types'\nimport { Account } from '../account/types'\nimport { getAssetName } from '../asset/utils'\nimport { NFT, NFTSortBy, NFTsFetchOptions, NFTsFetchParams } from './types'\n\n// Fetch NFTs\n\nexport const FETCH_NFTS_REQUEST = '[Request] Fetch NFTs'\nexport const FETCH_NFTS_SUCCESS = '[Success] Fetch NFTs'\nexport const FETCH_NFTS_FAILURE = '[Failure] Fetch NFTs'\n\nexport const DEFAULT_BASE_NFT_PARAMS: NFTsFetchParams = {\n first: 24,\n skip: 0,\n orderBy: NFTSortBy.CREATED_AT,\n orderDirection: SortDirection.DESC,\n onlyOnSale: false\n}\n\nexport const fetchNFTsRequest = (options: NFTsFetchOptions) =>\n action(FETCH_NFTS_REQUEST, {\n options,\n timestamp: Date.now()\n })\n\nexport const fetchNFTsSuccess = (\n options: NFTsFetchOptions,\n nfts: NFT[],\n accounts: Account[],\n orders: Order[],\n count: number,\n timestamp: number\n) =>\n action(FETCH_NFTS_SUCCESS, {\n options,\n nfts,\n accounts,\n orders,\n count,\n timestamp\n })\nexport const fetchNFTsFailure = (\n options: NFTsFetchOptions,\n error: string,\n timestamp: number\n) => action(FETCH_NFTS_FAILURE, { options, error, timestamp })\n\nexport type FetchNFTsRequestAction = ReturnType<typeof fetchNFTsRequest>\nexport type FetchNFTsSuccessAction = ReturnType<typeof fetchNFTsSuccess>\nexport type FetchNFTsFailureAction = ReturnType<typeof fetchNFTsFailure>\n\n// Fetch NFT\n\nexport const FETCH_NFT_REQUEST = '[Request] Fetch NFT'\nexport const FETCH_NFT_SUCCESS = '[Success] Fetch NFT'\nexport const FETCH_NFT_FAILURE = '[Failure] Fetch NFT'\n\nexport const fetchNFTRequest = (contractAddress: string, tokenId: string) =>\n action(FETCH_NFT_REQUEST, { contractAddress, tokenId })\nexport const fetchNFTSuccess = (nft: NFT, order?: Order) =>\n action(FETCH_NFT_SUCCESS, { nft, order })\nexport const fetchNFTFailure = (\n contractAddress: string,\n tokenId: string,\n error: string\n) => action(FETCH_NFT_FAILURE, { contractAddress, tokenId, error })\n\nexport type FetchNFTRequestAction = ReturnType<typeof fetchNFTRequest>\nexport type FetchNFTSuccessAction = ReturnType<typeof fetchNFTSuccess>\nexport type FetchNFTFailureAction = ReturnType<typeof fetchNFTFailure>\n\n// Transfer NFT\n\nexport const TRANSFER_NFT_REQUEST = '[Request] Transfer NFT'\nexport const TRANSFER_NFT_SUCCESS = '[Success] Transfer NFT'\nexport const TRANSFER_NFT_FAILURE = '[Failure] Transfer NFT'\n\nexport const transferNFTRequest = (nft: NFT, address: string) =>\n action(TRANSFER_NFT_REQUEST, { nft, address })\nexport const transferNFTSuccess = (nft: NFT, address: string, txHash: string) =>\n action(TRANSFER_NFT_SUCCESS, {\n nft,\n address,\n ...buildTransactionPayload(nft.chainId, txHash, {\n tokenId: nft.tokenId,\n contractAddress: nft.contractAddress,\n name: getAssetName(nft),\n address\n })\n })\nexport const transferNFTFailure = (\n nft: NFT,\n address: string,\n error: string,\n errorCode?: ErrorCode\n) => action(TRANSFER_NFT_FAILURE, { nft, address, error, errorCode })\n\nexport type TransferNFTRequestAction = ReturnType<typeof transferNFTRequest>\nexport type TransferNFTSuccessAction = ReturnType<typeof transferNFTSuccess>\nexport type TransferNFTFailureAction = ReturnType<typeof transferNFTFailure>\n","import { action } from 'typesafe-actions'\nimport { Bid, ChainId } from '@dcl/schemas'\nimport { buildTransactionPayload } from 'decentraland-dapps/dist/modules/transaction/utils'\nimport { NFT } from '../nft/types'\nimport { formatWeiMANA } from '../../lib/mana'\n\n// Place Bid\nexport const PLACE_BID_REQUEST = '[Request] Place Bid'\nexport const PLACE_BID_SUCCESS = '[Success] Place Bid'\nexport const PLACE_BID_FAILURE = '[Failure] Place Bid'\n\nexport const placeBidRequest = (\n nft: NFT,\n price: number,\n expiresAt: number,\n fingerprint?: string\n) => action(PLACE_BID_REQUEST, { nft, price, expiresAt, fingerprint })\nexport const placeBidSuccess = (\n nft: NFT,\n price: number,\n expiresAt: number,\n chainId: ChainId,\n txHash: string,\n bidder: string,\n fingerprint?: string\n) =>\n action(PLACE_BID_SUCCESS, {\n nft,\n price,\n expiresAt,\n bidder,\n fingerprint,\n ...buildTransactionPayload(chainId, txHash, {\n tokenId: nft.tokenId,\n contractAddress: nft.contractAddress,\n price\n })\n })\nexport const placeBidFailure = (\n nft: NFT,\n price: number,\n expiresAt: number,\n error: string,\n fingerprint?: string\n) =>\n action(PLACE_BID_FAILURE, {\n nft,\n price,\n expiresAt,\n error,\n fingerprint\n })\n\nexport type PlaceBidRequestAction = ReturnType<typeof placeBidRequest>\nexport type PlaceBidSuccessAction = ReturnType<typeof placeBidSuccess>\nexport type PlaceBidFailureAction = ReturnType<typeof placeBidFailure>\n\n// Archive Bid\nexport const ARCHIVE_BID = 'Archive bid'\nexport const archiveBid = (bid: Bid) => action(ARCHIVE_BID, { bid })\nexport type ArchiveBidAction = ReturnType<typeof archiveBid>\n\n// Unarchive Bid\nexport const UNARCHIVE_BID = 'Unarchive bid'\nexport const unarchiveBid = (bid: Bid) => action(UNARCHIVE_BID, { bid })\nexport type UnarchiveBidAction = ReturnType<typeof unarchiveBid>\n\n// Accept Bid\nexport const ACCEPT_BID_REQUEST = '[Request] Accept Bid'\nexport const ACCEPT_BID_SUCCESS = '[Success] Accept Bid'\nexport const ACCEPT_BID_FAILURE = '[Failure] Accept Bid'\n\nexport const acceptBidRequest = (bid: Bid) =>\n action(ACCEPT_BID_REQUEST, { bid })\nexport const acceptBidSuccess = (bid: Bid, txHash: string) =>\n action(ACCEPT_BID_SUCCESS, {\n bid,\n ...buildTransactionPayload(bid.chainId, txHash, {\n tokenId: bid.tokenId,\n contractAddress: bid.contractAddress,\n price: formatWeiMANA(bid.price)\n })\n })\nexport const acceptBidFailure = (bid: Bid, error: string) =>\n action(ACCEPT_BID_FAILURE, { bid, error })\n\nexport type AcceptBidRequestAction = ReturnType<typeof acceptBidRequest>\nexport type AcceptBidSuccessAction = ReturnType<typeof acceptBidSuccess>\nexport type AcceptBidFailureAction = ReturnType<typeof acceptBidFailure>\n\n// Cancel Bid\nexport const CANCEL_BID_REQUEST = '[Request] Cancel Bid'\nexport const CANCEL_BID_SUCCESS = '[Success] Cancel Bid'\nexport const CANCEL_BID_FAILURE = '[Failure] Cancel Bid'\n\nexport const cancelBidRequest = (bid: Bid) =>\n action(CANCEL_BID_REQUEST, { bid })\nexport const cancelBidSuccess = (bid: Bid, txHash: string) =>\n action(CANCEL_BID_SUCCESS, {\n bid,\n ...buildTransactionPayload(bid.chainId, txHash, {\n tokenId: bid.tokenId,\n contractAddress: bid.contractAddress,\n price: formatWeiMANA(bid.price)\n })\n })\nexport const cancelBidFailure = (bid: Bid, error: string) =>\n action(CANCEL_BID_FAILURE, { bid, error })\n\nexport type CancelBidRequestAction = ReturnType<typeof cancelBidRequest>\nexport type CancelBidSuccessAction = ReturnType<typeof cancelBidSuccess>\nexport type CancelBidFailureAction = ReturnType<typeof cancelBidFailure>\n\n// Fetch Bids By Address\nexport const FETCH_BIDS_BY_ADDRESS_REQUEST = '[Request] Fetch bids by address'\nexport const FETCH_BIDS_BY_ADDRESS_SUCCESS = '[Success] Fetch bids by address'\nexport const FETCH_BIDS_BY_ADDRESS_FAILURE = '[Failure] Fetch bids by address'\n\nexport const fetchBidsByAddressRequest = (address: string) =>\n action(FETCH_BIDS_BY_ADDRESS_REQUEST, { address })\n\nexport const fetchBidsByAddressSuccess = (\n address: string,\n sellerBids: Bid[],\n bidderBids: Bid[]\n) => action(FETCH_BIDS_BY_ADDRESS_SUCCESS, { address, sellerBids, bidderBids })\n\nexport const fetchBidsByAddressFailure = (address: string, error: string) =>\n action(FETCH_BIDS_BY_ADDRESS_FAILURE, { address, error })\n\nexport type FetchBidsByAddressRequestAction = ReturnType<\n typeof fetchBidsByAddressRequest\n>\nexport type FetchBidsByAddressSuccessAction = ReturnType<\n typeof fetchBidsByAddressSuccess\n>\nexport type FetchBidsByAddressFailureAction = ReturnType<\n typeof fetchBidsByAddressFailure\n>\n\n// Fetch Bids By NFT\nexport const FETCH_BIDS_BY_NFT_REQUEST = '[Request] Fetch bids by NFT'\nexport const FETCH_BIDS_BY_NFT_SUCCESS = '[Success] Fetch bids by NFT'\nexport const FETCH_BIDS_BY_NFT_FAILURE = '[Failure] Fetch bids by NFT'\n\nexport const fetchBidsByNFTRequest = (nft: NFT) =>\n action(FETCH_BIDS_BY_NFT_REQUEST, { nft })\n\nexport const fetchBidsByNFTSuccess = (nft: NFT, bids: Bid[]) =>\n action(FETCH_BIDS_BY_NFT_SUCCESS, { nft, bids })\n\nexport const fetchBidsByNFTFailure = (nft: NFT, error: string) =>\n action(FETCH_BIDS_BY_NFT_FAILURE, { nft, error })\n\nexport type FetchBidsByNFTRequestAction = ReturnType<\n typeof fetchBidsByNFTRequest\n>\nexport type FetchBidsByNFTSuccessAction = ReturnType<\n typeof fetchBidsByNFTSuccess\n>\nexport type FetchBidsByNFTFailureAction = ReturnType<\n typeof fetchBidsByNFTFailure\n>\n","import { ChainId, Item } from '@dcl/schemas'\nimport { buildTransactionPayload } from 'decentraland-dapps/dist/modules/transaction/utils'\nimport { action } from 'typesafe-actions'\nimport { formatWeiMANA } from '../../lib/mana'\nimport { getAssetName } from '../asset/utils'\nimport { ItemBrowseOptions } from './types'\n\n// Fetch Items\n\nexport const FETCH_ITEMS_REQUEST = '[Request] Fetch Items'\nexport const FETCH_ITEMS_SUCCESS = '[Success] Fetch Items'\nexport const FETCH_ITEMS_FAILURE = '[Failure] Fetch Items'\n\nexport const fetchItemsRequest = (options: ItemBrowseOptions) =>\n action(FETCH_ITEMS_REQUEST, options)\n\nexport const fetchItemsSuccess = (\n items: Item[],\n total: number,\n options: ItemBrowseOptions,\n timestamp: number\n) => action(FETCH_ITEMS_SUCCESS, { items, total, options, timestamp })\n\nexport const fetchItemsFailure = (error: string, options: ItemBrowseOptions) =>\n action(FETCH_ITEMS_FAILURE, { error, options })\n\nexport type FetchItemsRequestAction = ReturnType<typeof fetchItemsRequest>\nexport type FetchItemsSuccessAction = ReturnType<typeof fetchItemsSuccess>\nexport type FetchItemsFailureAction = ReturnType<typeof fetchItemsFailure>\n\n// Buy Item\nexport const BUY_ITEM_REQUEST = '[Request] Buy item'\nexport const BUY_ITEM_SUCCESS = '[Success] Buy item'\nexport const BUY_ITEM_FAILURE = '[Failure] Buy item'\n\nexport const buyItemRequest = (item: Item) => action(BUY_ITEM_REQUEST, { item })\n\nexport const buyItemSuccess = (chainId: ChainId, txHash: string, item: Item) =>\n action(BUY_ITEM_SUCCESS, {\n item,\n ...buildTransactionPayload(chainId, txHash, {\n itemId: item.itemId,\n contractAddress: item.contractAddress,\n network: item.network,\n name: getAssetName(item),\n price: formatWeiMANA(item.price)\n })\n })\n\nexport const buyItemFailure = (error: string) =>\n action(BUY_ITEM_FAILURE, { error })\n\nexport type BuyItemRequestAction = ReturnType<typeof buyItemRequest>\nexport type BuyItemSuccessAction = ReturnType<typeof buyItemSuccess>\nexport type BuyItemFailureAction = ReturnType<typeof buyItemFailure>\n\n// Fetch Item\n\nexport const FETCH_ITEM_REQUEST = '[Request] Fetch Item'\nexport const FETCH_ITEM_SUCCESS = '[Success] Fetch Item'\nexport const FETCH_ITEM_FAILURE = '[Failure] Fetch Item'\n\nexport const fetchItemRequest = (contractAddress: string, tokenId: string) =>\n action(FETCH_ITEM_REQUEST, { contractAddress, tokenId })\nexport const fetchItemSuccess = (item: Item) =>\n action(FETCH_ITEM_SUCCESS, { item })\nexport const fetchItemFailure = (\n contractAddress: string,\n tokenId: string,\n error: string\n) => action(FETCH_ITEM_FAILURE, { contractAddress, tokenId, error })\n\nexport type FetchItemRequestAction = ReturnType<typeof fetchItemRequest>\nexport type FetchItemSuccessAction = ReturnType<typeof fetchItemSuccess>\nexport type FetchItemFailureAction = ReturnType<typeof fetchItemFailure>\n","import { action } from 'typesafe-actions'\n\nexport const SET_IS_TRYING_ON = 'Set is trying on'\nexport const setIsTryingOn = (value: boolean) =>\n action(SET_IS_TRYING_ON, { value })\nexport type SetIsTryingOnAction = ReturnType<typeof setIsTryingOn>\n","import {\n EventName,\n GetPayload\n} from 'decentraland-dapps/dist/modules/analytics/types'\nimport {\n FETCH_TRANSACTION_FAILURE,\n FIX_REVERTED_TRANSACTION,\n REPLACE_TRANSACTION_SUCCESS,\n FetchTransactionFailureAction,\n FixRevertedTransactionAction,\n ReplaceTransactionSuccessAction\n} from 'decentraland-dapps/dist/modules/transaction/actions'\nimport {\n GrantTokenSuccessAction,\n GRANT_TOKEN_SUCCESS,\n RevokeTokenSuccessAction,\n REVOKE_TOKEN_SUCCESS\n} from 'decentraland-dapps/dist/modules/authorization/actions'\nimport { TransactionStatus } from 'decentraland-dapps/dist/modules/transaction/types'\nimport { add } from 'decentraland-dapps/dist/modules/analytics/utils'\nimport { PayloadAction } from 'typesafe-actions'\nimport { capitalize } from '../../lib/text'\nimport {\n EXECUTE_ORDER_SUCCESS,\n CREATE_ORDER_SUCCESS,\n CANCEL_ORDER_SUCCESS,\n ExecuteOrderSuccessAction,\n CreateOrderSuccessAction,\n CancelOrderSuccessAction\n} from '../order/actions'\nimport {\n TRANSFER_NFT_SUCCESS,\n TransferNFTSuccessAction,\n FETCH_NFTS_SUCCESS,\n FetchNFTsSuccessAction\n} from '../nft/actions'\nimport {\n PLACE_BID_SUCCESS,\n ACCEPT_BID_SUCCESS,\n CANCEL_BID_SUCCESS,\n ARCHIVE_BID,\n UNARCHIVE_BID,\n PlaceBidSuccessAction,\n AcceptBidSuccessAction,\n CancelBidSuccessAction,\n ArchiveBidAction,\n UnarchiveBidAction\n} from '../bid/actions'\nimport {\n BuyItemSuccessAction,\n BUY_ITEM_SUCCESS,\n FetchItemsSuccessAction,\n FETCH_ITEMS_SUCCESS\n} from '../item/actions'\nimport { SetIsTryingOnAction, SET_IS_TRYING_ON } from '../ui/preview/actions'\nimport { fromWei } from 'web3x/utils'\n\nfunction track<T extends PayloadAction<string, any>>(\n actionType: string,\n eventName: string | ((action: T) => string),\n getPayload = (action: T) => action.payload\n) {\n add(actionType, eventName as EventName, getPayload as GetPayload)\n}\n\nfunction withCategory(eventName: string, item: { category: string }) {\n const category = capitalize(item.category)\n return `${eventName} ${category}`\n}\n\ntrack<ExecuteOrderSuccessAction>(\n EXECUTE_ORDER_SUCCESS,\n ({ payload }) => withCategory('Buy', payload.nft),\n ({ payload }) => ({\n category: payload.nft.category,\n nft: payload.nft.id,\n price: payload.order.price,\n seller: payload.order.owner,\n buyer: payload.order.buyer\n })\n)\n\ntrack<CreateOrderSuccessAction>(\n CREATE_ORDER_SUCCESS,\n ({ payload }) => withCategory('Publish', payload.nft),\n ({ payload }) => ({\n category: payload.nft.category,\n tokenId: payload.nft.tokenId,\n price: payload.price\n })\n)\n\ntrack<CancelOrderSuccessAction>(\n CANCEL_ORDER_SUCCESS,\n ({ payload }) => withCategory('Cancel Sale', payload.nft),\n ({ payload }) => ({\n category: payload.nft.category,\n tokenId: payload.nft.tokenId,\n price: payload.order.price\n })\n)\n\ntrack<TransferNFTSuccessAction>(\n TRANSFER_NFT_SUCCESS,\n ({ payload }) => withCategory('Transfer NFT', payload.nft),\n ({ payload }) => ({\n category: payload.nft.category,\n tokenId: payload.nft.tokenId,\n to: payload.address\n })\n)\n\ntrack<FetchTransactionFailureAction>(FETCH_TRANSACTION_FAILURE, ({ payload }) =>\n payload.status === TransactionStatus.REVERTED\n ? 'Transaction Failed'\n : 'Transaction Dropped'\n)\n\ntrack<FixRevertedTransactionAction>(\n FIX_REVERTED_TRANSACTION,\n 'Transaction Fixed'\n)\n\ntrack<ReplaceTransactionSuccessAction>(\n REPLACE_TRANSACTION_SUCCESS,\n 'Transaction Replaced'\n)\n\ntrack<GrantTokenSuccessAction>(GRANT_TOKEN_SUCCESS, () => 'Authorize')\n\ntrack<RevokeTokenSuccessAction>(REVOKE_TOKEN_SUCCESS, () => 'Unauthorize')\n\ntrack<PlaceBidSuccessAction>(\n PLACE_BID_SUCCESS,\n ({ payload }) => withCategory('Bid', payload.nft),\n ({ payload }) => ({\n category: payload.nft.category,\n tokenId: payload.nft.tokenId,\n price: payload.price,\n bidder: payload.bidder\n })\n)\n\ntrack<AcceptBidSuccessAction>(\n ACCEPT_BID_SUCCESS,\n 'Accept bid',\n ({ payload }) => ({\n tokenId: payload.bid.tokenId,\n bidId: payload.bid.id,\n bidder: payload.bid.bidder,\n seller: payload.bid.seller\n })\n)\n\ntrack<CancelBidSuccessAction>(\n CANCEL_BID_SUCCESS,\n 'Cancel bid',\n ({ payload }) => ({\n tokenId: payload.bid.tokenId,\n bidId: payload.bid.id,\n bidder: payload.bid.bidder\n })\n)\n\ntrack<ArchiveBidAction>(ARCHIVE_BID, 'Archive Bid', ({ payload }) => ({\n tokenId: payload.bid.tokenId,\n bidId: payload.bid.id,\n price: payload.bid.price\n}))\n\ntrack<UnarchiveBidAction>(UNARCHIVE_BID, 'Unarchive Bid', ({ payload }) => ({\n tokenId: payload.bid.tokenId,\n bidId: payload.bid.id,\n price: payload.bid.price\n}))\n\ntrack<FetchNFTsSuccessAction>(\n FETCH_NFTS_SUCCESS,\n 'Fetch NFTs',\n ({ payload }) => ({\n ...payload.options.params,\n view: payload.options.view,\n vendor: payload.options.vendor,\n count: payload.count\n })\n)\n\ntrack<FetchItemsSuccessAction>(\n FETCH_ITEMS_SUCCESS,\n 'Fetch Items',\n ({ payload }) => ({\n options: payload.options,\n total: payload.total\n })\n)\n\ntrack<BuyItemSuccessAction>(BUY_ITEM_SUCCESS, 'Buy Item', ({ payload }) => ({\n itemId: payload.item.itemId,\n contractAddress: payload.item.contractAddress,\n rarity: payload.item.rarity,\n network: payload.item.network,\n chainId: payload.item.chainId,\n price: Number(fromWei(payload.item.price, 'ether')),\n data: payload.item.data\n}))\n\ntrack<SetIsTryingOnAction>(\n SET_IS_TRYING_ON,\n 'Toggle Preview Mode',\n ({ payload }) => ({\n mode: payload.value ? 'avatar' : 'wearable'\n })\n)\n","/* eslint-disable */\nimport { Env } from '@dcl/ui-env'\nimport { config } from '../../config'\nimport { environment } from '../../lib/environment'\n\nlet _rollbarConfig = {\n accessToken: config.get('ROLLBAR_ACCESS_TOKEN')!,\n captureUncaught: true,\n captureUnhandledRejections: true,\n payload: {\n environment\n },\n enabled: !config.is(Env.DEVELOPMENT)\n}\n\n// prettier-ignore\n// @ts-ignore\n// tslint:disable-next-line\n!function(r){var e={};function o(n){if(e[n])return e[n].exports;var t=e[n]={i:n,l:!1,exports:{}};return r[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.m=r,o.c=e,o.d=function(r,e,n){o.o(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:n})},o.r=function(r){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(r,\"__esModule\",{value:!0})},o.t=function(r,e){if(1&e&&(r=o(r)),8&e)return r;if(4&e&&\"object\"==typeof r&&r&&r.__esModule)return r;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:r}),2&e&&\"string\"!=typeof r)for(var t in r)o.d(n,t,function(e){return r[e]}.bind(null,t));return n},o.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return o.d(e,\"a\",e),e},o.o=function(r,e){return Object.prototype.hasOwnProperty.call(r,e)},o.p=\"\",o(o.s=0)}([function(r,e,o){\"use strict\";var n=o(1),t=o(5);_rollbarConfig=_rollbarConfig||{},_rollbarConfig.rollbarJsUrl=_rollbarConfig.rollbarJsUrl||\"https://cdn.rollbar.com/rollbarjs/refs/tags/v2.23.0/rollbar.min.js\",_rollbarConfig.async=void 0===_rollbarConfig.async||_rollbarConfig.async;var a=n.setupShim(window,_rollbarConfig),l=t(_rollbarConfig);window.rollbar=n.Rollbar,a.loadFull(window,document,!_rollbarConfig.async,_rollbarConfig,l)},function(r,e,o){\"use strict\";var n=o(2),t=o(3);function a(r){return function(){try{return r.apply(this,arguments)}catch(r){try{console.error(\"[Rollbar]: Internal error\",r)}catch(r){}}}}var l=0;function i(r,e){this.options=r,this._rollbarOldOnError=null;var o=l++;this.shimId=function(){return o},\"undefined\"!=typeof window&&window._rollbarShims&&(window._rollbarShims[o]={handler:e,messages:[]})}var s=o(4),d=function(r,e){return new i(r,e)},c=function(r){return new s(d,r)};function u(r){return a((function(){var e=this,o=Array.prototype.slice.call(arguments,0),n={shim:e,method:r,args:o,ts:new Date};window._rollbarShims[this.shimId()].messages.push(n)}))}i.prototype.loadFull=function(r,e,o,n,t){var l=!1,i=e.createElement(\"script\"),s=e.getElementsByTagName(\"script\")[0],d=s.parentNode;i.crossOrigin=\"\",i.src=n.rollbarJsUrl,o||(i.async=!0),i.onload=i.onreadystatechange=a((function(){if(!(l||this.readyState&&\"loaded\"!==this.readyState&&\"complete\"!==this.readyState)){i.onload=i.onreadystatechange=null;try{d.removeChild(i)}catch(r){}l=!0,function(){var e;if(void 0===r._rollbarDidLoad){e=new Error(\"rollbar.js did not load\");for(var o,n,a,l,i=0;o=r._rollbarShims[i++];)for(o=o.messages||[];n=o.shift();)for(a=n.args||[],i=0;i<a.length;++i)if(\"function\"==typeof(l=a[i])){l(e);break}}\"function\"==typeof t&&t(e)}()}})),d.insertBefore(i,s)},i.prototype.wrap=function(r,e,o){try{var n;if(n=\"function\"==typeof e?e:function(){return e||{}},\"function\"!=typeof r)return r;if(r._isWrap)return r;if(!r._rollbar_wrapped&&(r._rollbar_wrapped=function(){o&&\"function\"==typeof o&&o.apply(this,arguments);try{return r.apply(this,arguments)}catch(o){var e=o;throw e&&(\"string\"==typeof e&&(e=new String(e)),e._rollbarContext=n()||{},e._rollbarContext._wrappedSource=r.toString(),window._rollbarWrappedError=e),e}},r._rollbar_wrapped._isWrap=!0,r.hasOwnProperty))for(var t in r)r.hasOwnProperty(t)&&(r._rollbar_wrapped[t]=r[t]);return r._rollbar_wrapped}catch(e){return r}};for(var p=\"log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,captureEvent,captureDomContentLoaded,captureLoad\".split(\",\"),f=0;f<p.length;++f)i.prototype[p[f]]=u(p[f]);r.exports={setupShim:function(r,e){if(r){var o=e.globalAlias||\"Rollbar\";if(\"object\"==typeof r[o])return r[o];r._rollbarShims={},r._rollbarWrappedError=null;var l=new c(e);return a((function(){e.captureUncaught&&(l._rollbarOldOnError=r.onerror,n.captureUncaughtExceptions(r,l,!0),e.wrapGlobalEventHandlers&&t(r,l,!0)),e.captureUnhandledRejections&&n.captureUnhandledRejections(r,l,!0);var a=e.autoInstrument;return!1!==e.enabled&&(void 0===a||!0===a||\"object\"==typeof a&&a.network)&&r.addEventListener&&(r.addEventListener(\"load\",l.captureLoad.bind(l)),r.addEventListener(\"DOMContentLoaded\",l.captureDomContentLoaded.bind(l))),r[o]=l,l}))()}},Rollbar:c}},function(r,e,o){\"use strict\";function n(r,e,o,n){r._rollbarWrappedError&&(n[4]||(n[4]=r._rollbarWrappedError),n[5]||(n[5]=r._rollbarWrappedError._rollbarContext),r._rollbarWrappedError=null);var t=e.handleUncaughtException.apply(e,n);o&&o.apply(r,n),\"anonymous\"===t&&(e.anonymousErrorsPending+=1)}r.exports={captureUncaughtExceptions:function(r,e,o){if(r){var t;if(\"function\"==typeof e._rollbarOldOnError)t=e._rollbarOldOnError;else if(r.onerror){for(t=r.onerror;t._rollbarOldOnError;)t=t._rollbarOldOnError;e._rollbarOldOnError=t}e.handleAnonymousErrors();var a=function(){var o=Array.prototype.slice.call(arguments,0);n(r,e,t,o)};o&&(a._rollbarOldOnError=t),r.onerror=a}},captureUnhandledRejections:function(r,e,o){if(r){\"function\"==typeof r._rollbarURH&&r._rollbarURH.belongsToShim&&r.removeEventListener(\"unhandledrejection\",r._rollbarURH);var n=function(r){var o,n,t;try{o=r.reason}catch(r){o=void 0}try{n=r.promise}catch(r){n=\"[unhandledrejection] error getting `promise` from event\"}try{t=r.detail,!o&&t&&(o=t.reason,n=t.promise)}catch(r){}o||(o=\"[unhandledrejection] error getting `reason` from event\"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(o,n)};n.belongsToShim=o,r._rollbarURH=n,r.addEventListener(\"unhandledrejection\",n)}}}},function(r,e,o){\"use strict\";function n(r,e,o){if(e.hasOwnProperty&&e.hasOwnProperty(\"addEventListener\")){for(var n=e.addEventListener;n._rollbarOldAdd&&n.belongsToShim;)n=n._rollbarOldAdd;var t=function(e,o,t){n.call(this,e,r.wrap(o),t)};t._rollbarOldAdd=n,t.belongsToShim=o,e.addEventListener=t;for(var a=e.removeEventListener;a._rollbarOldRemove&&a.belongsToShim;)a=a._rollbarOldRemove;var l=function(r,e,o){a.call(this,r,e&&e._rollbar_wrapped||e,o)};l._rollbarOldRemove=a,l.belongsToShim=o,e.removeEventListener=l}}r.exports=function(r,e,o){if(r){var t,a,l=\"EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload\".split(\",\");for(t=0;t<l.length;++t)r[a=l[t]]&&r[a].prototype&&n(e,r[a].prototype,o)}}},function(r,e,o){\"use strict\";function n(r,e){this.impl=r(e,this),this.options=e,function(r){for(var e=function(r){return function(){var e=Array.prototype.slice.call(arguments,0);if(this.impl[r])return this.impl[r].apply(this.impl,e)}},o=\"log,debug,info,warn,warning,error,critical,global,configure,handleUncaughtException,handleAnonymousErrors,handleUnhandledRejection,_createItem,wrap,loadFull,shimId,captureEvent,captureDomContentLoaded,captureLoad\".split(\",\"),n=0;n<o.length;n++)r[o[n]]=e(o[n])}(n.prototype)}n.prototype._swapAndProcessMessages=function(r,e){var o,n,t;for(this.impl=r(this.options);o=e.shift();)n=o.method,t=o.args,this[n]&&\"function\"==typeof this[n]&&(\"captureDomContentLoaded\"===n||\"captureLoad\"===n?this[n].apply(this,[t[0],o.ts]):this[n].apply(this,t));return this},r.exports=n},function(r,e,o){\"use strict\";r.exports=function(r){return function(e){if(!e&&!window._rollbarInitialized){for(var o,n,t=(r=r||{}).globalAlias||\"Rollbar\",a=window.rollbar,l=function(r){return new a(r)},i=0;o=window._rollbarShims[i++];)n||(n=o.handler),o.handler._swapAndProcessMessages(l,o.messages);window[t]=n,window._rollbarInitialized=!0}}}}]);\n","const en = require('./en.json')\nconst es = require('./es.json')\nconst zh = require('./zh.json')\nexport { en, es, zh }\n","import { AccountFilters as AccountMetricsFilters } from '@dcl/schemas'\nimport { Network } from '@dcl/schemas'\nimport { action } from 'typesafe-actions'\nimport { AccountMetrics } from './types'\n\n// Fetch account metrics\n\nexport const FETCH_ACCOUNT_METRICS_REQUEST = '[Request] Fetch accounts'\nexport const FETCH_ACCOUNT_METRICS_SUCCESS = '[Success] Fetch accounts'\nexport const FETCH_ACCOUNT_METRICS_FAILURE = '[Failure] Fetch accounts'\n\nexport const fetchAccountMetricsRequest = (filters: AccountMetricsFilters) =>\n action(FETCH_ACCOUNT_METRICS_REQUEST, { filters })\nexport const fetchAccountMetricsSuccess = (\n filters: AccountMetricsFilters,\n accountMetrics: Record<Network, AccountMetrics[]>\n) => action(FETCH_ACCOUNT_METRICS_SUCCESS, { filters, accountMetrics })\nexport const fetchAccountMetricsFailure = (\n filters: AccountMetricsFilters,\n error: string\n) => action(FETCH_ACCOUNT_METRICS_FAILURE, { filters, error })\n\nexport type FetchAccountMetricsRequestAction = ReturnType<\n typeof fetchAccountMetricsRequest\n>\nexport type FetchAccountMetricsSuccessAction = ReturnType<\n typeof fetchAccountMetricsSuccess\n>\nexport type FetchAccountMetricsFailureAction = ReturnType<\n typeof fetchAccountMetricsFailure\n>\n","import { Network } from '@dcl/schemas'\nimport {\n LoadingState,\n loadingReducer\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n FetchNFTsRequestAction,\n FetchNFTsSuccessAction,\n FetchNFTsFailureAction,\n FETCH_NFTS_REQUEST,\n FETCH_NFTS_SUCCESS,\n FETCH_NFTS_FAILURE\n} from '../nft/actions'\nimport {\n FetchAccountMetricsFailureAction,\n FetchAccountMetricsRequestAction,\n FetchAccountMetricsSuccessAction,\n FETCH_ACCOUNT_METRICS_FAILURE,\n FETCH_ACCOUNT_METRICS_REQUEST,\n FETCH_ACCOUNT_METRICS_SUCCESS\n} from './actions'\nimport { Account, AccountMetrics } from './types'\n\nexport type AccountState = {\n data: Record<string, Account>\n metrics: Record<Network, Record<string, AccountMetrics>>\n loading: LoadingState\n error: string | null\n}\n\nconst INITIAL_STATE: AccountState = {\n data: {},\n metrics: {\n [Network.ETHEREUM]: {},\n [Network.MATIC]: {}\n },\n loading: [],\n error: null\n}\n\ntype AccountReducerAction =\n | FetchNFTsRequestAction\n | FetchNFTsSuccessAction\n | FetchNFTsFailureAction\n | FetchAccountMetricsRequestAction\n | FetchAccountMetricsSuccessAction\n | FetchAccountMetricsFailureAction\n\nexport function accountReducer(\n state: AccountState = INITIAL_STATE,\n action: AccountReducerAction\n): AccountState {\n switch (action.type) {\n case FETCH_ACCOUNT_METRICS_REQUEST:\n case FETCH_NFTS_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n case FETCH_ACCOUNT_METRICS_SUCCESS: {\n const { accountMetrics } = action.payload\n\n const metrics = {\n [Network.ETHEREUM]: accountMetrics.ETHEREUM.reduce(\n (acc, metrics) => {\n acc[metrics.address] = metrics\n return acc\n },\n { ...state.metrics.ETHEREUM }\n ),\n [Network.MATIC]: accountMetrics.MATIC.reduce(\n (acc, metrics) => {\n acc[metrics.address] = metrics\n return acc\n },\n { ...state.metrics.MATIC }\n )\n }\n\n return {\n ...state,\n metrics,\n error: null,\n loading: loadingReducer(state.loading, action)\n }\n }\n case FETCH_NFTS_SUCCESS: {\n return {\n ...state,\n data: {\n ...state.data,\n ...action.payload.accounts.reduce((obj, account) => {\n obj[account.address] = account\n return obj\n }, {} as Record<string, Account>)\n },\n loading: loadingReducer(state.loading, action),\n error: null\n }\n }\n case FETCH_ACCOUNT_METRICS_FAILURE:\n case FETCH_NFTS_FAILURE: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: action.payload.error\n }\n }\n default:\n return state\n }\n}\n","import { Contract, providers, utils } from 'ethers'\nimport { Bid } from '@dcl/schemas'\nimport { getNetworkProvider } from 'decentraland-dapps/dist/lib/eth'\nimport { ContractName, getContract } from 'decentraland-transactions'\n\nexport async function isInsufficientMANA(bid: Bid) {\n try {\n const provider = await getNetworkProvider(bid.chainId)\n const contract = getContract(ContractName.MANAToken, bid.chainId)\n const mana = new Contract(\n contract.address,\n contract.abi,\n new providers.Web3Provider(provider)\n )\n const balanceRaw = await mana.balanceOf(bid.bidder)\n const balance = parseFloat(utils.formatEther(balanceRaw))\n const price = parseFloat(utils.formatEther(bid.price))\n\n return balance < price\n } catch (error) {\n console.warn(error.message)\n }\n return false\n}\n\nexport function checkFingerprint(bid: Bid, fingerprint: string | undefined) {\n if (fingerprint && bid.fingerprint) {\n return fingerprint === bid.fingerprint\n }\n return true\n}\n\nexport function toBidObject(bids: Bid[]) {\n return bids.reduce((obj, bid) => {\n obj[bid.id] = bid\n return obj\n }, {} as Record<string, Bid>)\n}\n","import { Bid } from '@dcl/schemas'\nimport {\n LoadingState,\n loadingReducer\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport { toBidObject } from './utils'\nimport {\n FetchBidsByAddressRequestAction,\n FetchBidsByAddressSuccessAction,\n FetchBidsByAddressFailureAction,\n FETCH_BIDS_BY_ADDRESS_REQUEST,\n FETCH_BIDS_BY_ADDRESS_SUCCESS,\n FETCH_BIDS_BY_ADDRESS_FAILURE,\n FetchBidsByNFTRequestAction,\n FetchBidsByNFTSuccessAction,\n FetchBidsByNFTFailureAction,\n FETCH_BIDS_BY_NFT_REQUEST,\n FETCH_BIDS_BY_NFT_SUCCESS,\n FETCH_BIDS_BY_NFT_FAILURE,\n ACCEPT_BID_REQUEST,\n CANCEL_BID_REQUEST,\n PLACE_BID_REQUEST,\n PLACE_BID_SUCCESS,\n ACCEPT_BID_SUCCESS,\n CANCEL_BID_SUCCESS,\n PLACE_BID_FAILURE,\n ACCEPT_BID_FAILURE,\n CANCEL_BID_FAILURE,\n PlaceBidRequestAction,\n PlaceBidFailureAction,\n PlaceBidSuccessAction,\n AcceptBidRequestAction,\n AcceptBidFailureAction,\n AcceptBidSuccessAction,\n CancelBidRequestAction,\n CancelBidFailureAction,\n CancelBidSuccessAction\n} from './actions'\n\nexport type BidState = {\n data: Record<string, Bid>\n loading: LoadingState\n error: string | null\n}\n\nconst INITIAL_STATE: BidState = {\n data: {},\n loading: [],\n error: null\n}\n\ntype BidReducerAction =\n | FetchBidsByAddressRequestAction\n | FetchBidsByAddressSuccessAction\n | FetchBidsByAddressFailureAction\n | FetchBidsByNFTRequestAction\n | FetchBidsByNFTSuccessAction\n | FetchBidsByNFTFailureAction\n | PlaceBidRequestAction\n | PlaceBidFailureAction\n | PlaceBidSuccessAction\n | AcceptBidRequestAction\n | AcceptBidFailureAction\n | AcceptBidSuccessAction\n | CancelBidRequestAction\n | CancelBidFailureAction\n | CancelBidSuccessAction\n\nexport function bidReducer(state = INITIAL_STATE, action: BidReducerAction) {\n switch (action.type) {\n case PLACE_BID_REQUEST:\n case ACCEPT_BID_REQUEST:\n case CANCEL_BID_REQUEST:\n case FETCH_BIDS_BY_NFT_REQUEST:\n case FETCH_BIDS_BY_ADDRESS_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n\n case FETCH_BIDS_BY_NFT_SUCCESS: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null,\n data: {\n ...state.data,\n ...toBidObject(action.payload.bids)\n }\n }\n }\n\n case FETCH_BIDS_BY_ADDRESS_SUCCESS: {\n const { sellerBids, bidderBids } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null,\n data: {\n ...state.data,\n ...toBidObject(sellerBids),\n ...toBidObject(bidderBids)\n }\n }\n }\n\n case PLACE_BID_SUCCESS:\n case ACCEPT_BID_SUCCESS:\n case CANCEL_BID_SUCCESS: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null\n }\n }\n\n case PLACE_BID_FAILURE:\n case ACCEPT_BID_FAILURE:\n case CANCEL_BID_FAILURE:\n case FETCH_BIDS_BY_NFT_FAILURE:\n case FETCH_BIDS_BY_ADDRESS_FAILURE: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: action.payload.error\n }\n }\n\n default:\n return state\n }\n}\n","import { Item } from '@dcl/schemas'\nimport {\n loadingReducer,\n LoadingState\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n BuyItemFailureAction,\n BuyItemRequestAction,\n BuyItemSuccessAction,\n BUY_ITEM_FAILURE,\n BUY_ITEM_REQUEST,\n BUY_ITEM_SUCCESS,\n FetchItemsFailureAction,\n FetchItemsRequestAction,\n FetchItemsSuccessAction,\n FETCH_ITEMS_FAILURE,\n FETCH_ITEMS_REQUEST,\n FETCH_ITEMS_SUCCESS,\n FetchItemFailureAction,\n FetchItemRequestAction,\n FetchItemSuccessAction,\n FETCH_ITEM_FAILURE,\n FETCH_ITEM_REQUEST,\n FETCH_ITEM_SUCCESS\n} from './actions'\n\nexport type ItemState = {\n data: Record<string, Item>\n loading: LoadingState\n error: string | null\n}\n\nexport const INITIAL_STATE: ItemState = {\n data: {},\n loading: [],\n error: null\n}\n\ntype ItemReducerAction =\n | FetchItemsRequestAction\n | FetchItemsSuccessAction\n | FetchItemsFailureAction\n | FetchItemFailureAction\n | FetchItemRequestAction\n | FetchItemSuccessAction\n | BuyItemRequestAction\n | BuyItemSuccessAction\n | BuyItemFailureAction\n\nexport function itemReducer(\n state = INITIAL_STATE,\n action: ItemReducerAction\n): ItemState {\n switch (action.type) {\n case BUY_ITEM_REQUEST:\n case BUY_ITEM_SUCCESS:\n case FETCH_ITEMS_REQUEST:\n case FETCH_ITEM_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n case FETCH_ITEMS_SUCCESS: {\n const { items } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n data: {\n ...state.data,\n ...items.reduce((obj, item) => {\n obj[item.id] = item\n return obj\n }, {} as Record<string, Item>)\n },\n error: null\n }\n }\n case FETCH_ITEM_SUCCESS: {\n const { item } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n data: {\n ...state.data,\n [item.id]: { ...item }\n },\n error: null\n }\n }\n\n case BUY_ITEM_FAILURE:\n case FETCH_ITEMS_FAILURE:\n case FETCH_ITEM_FAILURE: {\n const { error } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error\n }\n }\n default:\n return state\n }\n}\n","import {\n LoadingState,\n loadingReducer\n} from 'decentraland-dapps/dist/modules/loading/reducer'\n\nimport { NFT } from './types'\nimport {\n FetchNFTRequestAction,\n FetchNFTSuccessAction,\n FetchNFTFailureAction,\n FETCH_NFT_REQUEST,\n FETCH_NFT_SUCCESS,\n FETCH_NFT_FAILURE,\n FetchNFTsRequestAction,\n FetchNFTsSuccessAction,\n FetchNFTsFailureAction,\n FETCH_NFTS_REQUEST,\n FETCH_NFTS_SUCCESS,\n FETCH_NFTS_FAILURE,\n TRANSFER_NFT_REQUEST,\n TRANSFER_NFT_FAILURE,\n TRANSFER_NFT_SUCCESS,\n TransferNFTRequestAction,\n TransferNFTSuccessAction,\n TransferNFTFailureAction\n} from './actions'\n\nexport type NFTState = {\n data: Record<string, NFT>\n loading: LoadingState\n error: string | null\n}\n\nconst INITIAL_STATE = {\n data: {},\n loading: [],\n error: null\n}\n\ntype NFTReducerAction =\n | FetchNFTRequestAction\n | FetchNFTSuccessAction\n | FetchNFTFailureAction\n | FetchNFTsRequestAction\n | FetchNFTsSuccessAction\n | FetchNFTsFailureAction\n | TransferNFTRequestAction\n | TransferNFTSuccessAction\n | TransferNFTFailureAction\n\nexport function nftReducer(\n state: NFTState = INITIAL_STATE,\n action: NFTReducerAction\n) {\n switch (action.type) {\n case TRANSFER_NFT_REQUEST:\n case FETCH_NFTS_REQUEST:\n case FETCH_NFT_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n case TRANSFER_NFT_FAILURE:\n case FETCH_NFTS_FAILURE:\n case FETCH_NFT_FAILURE: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: action.payload.error\n }\n }\n case FETCH_NFT_SUCCESS: {\n const { nft } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n data: {\n ...state.data,\n [nft.id]: nft\n },\n error: null\n }\n }\n case FETCH_NFTS_SUCCESS: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n data: {\n ...state.data,\n ...action.payload.nfts.reduce((obj, nft) => {\n obj[nft.id] = nft\n return obj\n }, {} as Record<string, NFT>)\n }\n }\n }\n case TRANSFER_NFT_SUCCESS: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null\n }\n }\n default:\n return state\n }\n}\n","import { Order } from '@dcl/schemas'\nimport {\n LoadingState,\n loadingReducer\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n FetchNFTsRequestAction,\n FetchNFTsSuccessAction,\n FetchNFTsFailureAction,\n FETCH_NFTS_REQUEST,\n FETCH_NFTS_SUCCESS,\n FETCH_NFTS_FAILURE,\n FetchNFTSuccessAction,\n FETCH_NFT_SUCCESS\n} from '../nft/actions'\nimport {\n CancelOrderFailureAction,\n CancelOrderRequestAction,\n CancelOrderSuccessAction,\n CANCEL_ORDER_FAILURE,\n CANCEL_ORDER_REQUEST,\n CANCEL_ORDER_SUCCESS,\n CreateOrderFailureAction,\n CreateOrderRequestAction,\n CreateOrderSuccessAction,\n CREATE_ORDER_FAILURE,\n CREATE_ORDER_REQUEST,\n CREATE_ORDER_SUCCESS,\n ExecuteOrderFailureAction,\n ExecuteOrderRequestAction,\n ExecuteOrderSuccessAction,\n EXECUTE_ORDER_FAILURE,\n EXECUTE_ORDER_REQUEST,\n EXECUTE_ORDER_SUCCESS\n} from './actions'\n\nexport type OrderState = {\n data: Record<string, Order>\n loading: LoadingState\n error: string | null\n}\n\nconst INITIAL_STATE = {\n data: {},\n loading: [],\n error: null\n}\n\ntype OrderReducerAction =\n | FetchNFTsRequestAction\n | FetchNFTsSuccessAction\n | FetchNFTsFailureAction\n | FetchNFTSuccessAction\n | CreateOrderRequestAction\n | CreateOrderFailureAction\n | CreateOrderSuccessAction\n | ExecuteOrderRequestAction\n | ExecuteOrderFailureAction\n | ExecuteOrderSuccessAction\n | CancelOrderRequestAction\n | CancelOrderFailureAction\n | CancelOrderSuccessAction\n\nexport function orderReducer(\n state: OrderState = INITIAL_STATE,\n action: OrderReducerAction\n): OrderState {\n switch (action.type) {\n case CREATE_ORDER_REQUEST:\n case EXECUTE_ORDER_REQUEST:\n case CANCEL_ORDER_REQUEST:\n case FETCH_NFTS_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n case CREATE_ORDER_SUCCESS:\n case EXECUTE_ORDER_SUCCESS:\n case CANCEL_ORDER_SUCCESS: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null\n }\n }\n case FETCH_NFTS_SUCCESS: {\n return {\n ...state,\n data: {\n ...state.data,\n ...action.payload.orders.reduce((obj, order) => {\n obj[order.id] = order\n return obj\n }, {} as Record<string, Order>)\n },\n loading: loadingReducer(state.loading, action),\n error: null\n }\n }\n case CREATE_ORDER_FAILURE:\n case EXECUTE_ORDER_FAILURE:\n case CANCEL_ORDER_FAILURE:\n case FETCH_NFTS_FAILURE: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: action.payload.error\n }\n }\n case FETCH_NFT_SUCCESS: {\n const { order } = action.payload\n if (order) {\n return {\n ...state,\n data: {\n ...state.data,\n [order.id]: order\n }\n }\n }\n return state\n }\n default:\n return state\n }\n}\n","import { action } from 'typesafe-actions'\nimport { Proximity } from './types'\n\nexport const FETCH_PROXIMITY_REQUEST = '[Request] Fetch Proximity'\nexport const FETCH_PROXIMITY_SUCCESS = '[Success] Fetch Proximity'\nexport const FETCH_PROXIMITY_FAILURE = '[Failure] Fetch Proximity'\n\nexport const fetchProximityRequest = () => action(FETCH_PROXIMITY_REQUEST)\nexport const fetchProximitySuccess = (proximity: Record<string, Proximity>) =>\n action(FETCH_PROXIMITY_SUCCESS, { proximity })\nexport const fetchProximityFailure = (error: string) =>\n action(FETCH_PROXIMITY_FAILURE, { error })\n\nexport type FetchProximityRequestAction = ReturnType<\n typeof fetchProximityRequest\n>\nexport type FetchProximitySuccessAction = ReturnType<\n typeof fetchProximitySuccess\n>\nexport type FetchProximityFailureAction = ReturnType<\n typeof fetchProximityFailure\n>\n","import {\n LoadingState,\n loadingReducer\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n FetchProximityRequestAction,\n FetchProximitySuccessAction,\n FetchProximityFailureAction,\n FETCH_PROXIMITY_REQUEST,\n FETCH_PROXIMITY_SUCCESS,\n FETCH_PROXIMITY_FAILURE\n} from './actions'\nimport { Proximity } from './types'\n\ntype ProximityState = {\n data: Record<string, Proximity>\n loading: LoadingState\n error: string | null\n}\n\nconst INITIAL_STATE: ProximityState = {\n data: {},\n loading: [],\n error: null\n}\n\ntype ProximityReducerAction =\n | FetchProximityRequestAction\n | FetchProximitySuccessAction\n | FetchProximityFailureAction\n\nexport function proximityReducer(\n state = INITIAL_STATE,\n action: ProximityReducerAction\n) {\n switch (action.type) {\n case FETCH_PROXIMITY_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n case FETCH_PROXIMITY_SUCCESS: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null,\n data: action.payload.proximity\n }\n }\n case FETCH_PROXIMITY_FAILURE: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: action.payload.error\n }\n }\n default:\n return state\n }\n}\n","import { action } from 'typesafe-actions'\n\nimport { BrowseOptions } from './types'\n\n// Browse NFTs\n\nexport const BROWSE = 'Browse'\n\nexport const browse = (options: BrowseOptions) => action(BROWSE, { options })\n\nexport type BrowseAction = ReturnType<typeof browse>\n\n// Navigate\n\nexport const FETCH_ASSETS_FROM_ROUTE = 'Fetch assets from route'\n\nexport const fetchAssetsFromRoute = (options: BrowseOptions) =>\n action(FETCH_ASSETS_FROM_ROUTE, { options })\n\nexport type FetchAssetsFromRouteAction = ReturnType<typeof fetchAssetsFromRoute>\n\n// Load More\n\nexport const SET_IS_LOAD_MORE = 'Set is load more'\n\nexport const setIsLoadMore = (isLoadMore: boolean) =>\n action(SET_IS_LOAD_MORE, { isLoadMore })\n\nexport type SetIsLoadMoreAction = ReturnType<typeof setIsLoadMore>\n\n// Clear filters\n\nexport const CLEAR_FILTERS = 'Clear filters'\n\nexport const clearFilters = () => action(CLEAR_FILTERS)\n\nexport type ClearFiltersAction = ReturnType<typeof clearFilters>\n\n// Go Back\n\nexport const GO_BACK = 'Go back'\n\n/**\n * @param defaultLocation location to which the router will navigate in case there is no more back history.\n * defaults to root.\n */\nexport const goBack = (defaultLocation?: string) =>\n action(GO_BACK, { defaultLocation })\n\nexport type GoBackAction = ReturnType<typeof goBack>\n","import { SET_IS_LOAD_MORE, SetIsLoadMoreAction } from './actions'\n\nexport type RoutingState = {\n isLoadMore: boolean\n}\n\nconst INITIAL_STATE: RoutingState = {\n isLoadMore: false\n}\n\ntype RoutingReducerAction = SetIsLoadMoreAction\n\nexport function routingReducer(\n state: RoutingState = INITIAL_STATE,\n action: RoutingReducerAction\n) {\n switch (action.type) {\n case SET_IS_LOAD_MORE: {\n return {\n ...state,\n isLoadMore: action.payload.isLoadMore\n }\n }\n default:\n return state\n }\n}\n","import { action } from 'typesafe-actions'\nimport { AtlasTile } from 'decentraland-ui'\n\nexport const FETCH_TILES_REQUEST = '[Request] Fetch Tiles'\nexport const FETCH_TILES_SUCCESS = '[Success] Fetch Tiles'\nexport const FETCH_TILES_FAILURE = '[Failure] Fetch Tiles'\n\nexport const fetchTilesRequest = () => action(FETCH_TILES_REQUEST)\nexport const fetchTilesSuccess = (tiles: Record<string, AtlasTile>) =>\n action(FETCH_TILES_SUCCESS, { tiles })\nexport const fetchTilesFailure = (error: string) =>\n action(FETCH_TILES_FAILURE, { error })\n\nexport type FetchTilesRequestAction = ReturnType<typeof fetchTilesRequest>\nexport type FetchTilesSuccessAction = ReturnType<typeof fetchTilesSuccess>\nexport type FetchTilesFailureAction = ReturnType<typeof fetchTilesFailure>\n","import { AtlasTile } from 'decentraland-ui'\nimport {\n LoadingState,\n loadingReducer\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n FetchTilesRequestAction,\n FetchTilesSuccessAction,\n FetchTilesFailureAction,\n FETCH_TILES_REQUEST,\n FETCH_TILES_SUCCESS,\n FETCH_TILES_FAILURE\n} from './actions'\n\nexport type TileState = {\n data: Record<string, AtlasTile>\n loading: LoadingState\n error: string | null\n}\n\nconst INITIAL_STATE: TileState = {\n data: {},\n loading: [],\n error: null\n}\n\ntype TileReducerAction =\n | FetchTilesRequestAction\n | FetchTilesSuccessAction\n | FetchTilesFailureAction\n\nexport function tileReducer(state = INITIAL_STATE, action: TileReducerAction) {\n switch (action.type) {\n case FETCH_TILES_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n case FETCH_TILES_SUCCESS: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null,\n data: action.payload.tiles\n }\n }\n case FETCH_TILES_FAILURE: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: action.payload.error\n }\n }\n default:\n return state\n }\n}\n","import {\n FetchItemsSuccessAction,\n FETCH_ITEMS_SUCCESS\n} from '../../../item/actions'\nimport {\n FetchNFTsSuccessAction,\n FETCH_NFTS_SUCCESS\n} from '../../../nft/actions'\nimport { View } from '../../types'\n\nexport type HomepageUIState = {\n [View.HOME_NEW_ITEMS]: string[]\n [View.HOME_SOLD_ITEMS]: string[]\n [View.HOME_WEARABLES]: string[]\n [View.HOME_LAND]: string[]\n [View.HOME_ENS]: string[]\n}\n\nconst INITIAL_STATE: HomepageUIState = {\n [View.HOME_NEW_ITEMS]: [],\n [View.HOME_SOLD_ITEMS]: [],\n [View.HOME_WEARABLES]: [],\n [View.HOME_LAND]: [],\n [View.HOME_ENS]: []\n}\n\ntype UIReducerAction = FetchItemsSuccessAction | FetchNFTsSuccessAction\n\nexport function homepageReducer(\n state: HomepageUIState = INITIAL_STATE,\n action: UIReducerAction\n) {\n switch (action.type) {\n case FETCH_ITEMS_SUCCESS: {\n const { items, options } = action.payload\n const itemIds = items.map(items => items.id)\n\n switch (options.view) {\n case View.HOME_NEW_ITEMS: {\n return {\n ...state,\n [View.HOME_NEW_ITEMS]: itemIds\n }\n }\n case View.HOME_SOLD_ITEMS: {\n return {\n ...state,\n [View.HOME_SOLD_ITEMS]: itemIds\n }\n }\n default:\n return state\n }\n }\n case FETCH_NFTS_SUCCESS: {\n const { nfts, options } = action.payload\n const nftIds = nfts.map(nft => nft.id)\n\n switch (options.view) {\n case View.HOME_WEARABLES: {\n return {\n ...state,\n [View.HOME_WEARABLES]: nftIds\n }\n }\n case View.HOME_LAND: {\n return {\n ...state,\n [View.HOME_LAND]: nftIds\n }\n }\n case View.HOME_ENS: {\n return {\n ...state,\n [View.HOME_ENS]: nftIds\n }\n }\n default:\n return state\n }\n }\n default:\n return state\n }\n}\n","import { combineReducers } from 'redux'\nimport {\n homepageReducer as homepage,\n HomepageUIState\n} from './homepage/reducer'\n\nexport type AssetUIState = {\n homepage: HomepageUIState\n}\n\nexport const assetReducer = combineReducers({\n homepage\n})\n","import {\n FETCH_BIDS_BY_NFT_SUCCESS,\n FETCH_BIDS_BY_ADDRESS_SUCCESS,\n ARCHIVE_BID,\n UNARCHIVE_BID,\n FetchBidsByAddressSuccessAction,\n ArchiveBidAction,\n UnarchiveBidAction,\n FetchBidsByNFTSuccessAction\n} from '../../../bid/actions'\n\nexport type BidUIState = {\n seller: string[]\n bidder: string[]\n archived: string[]\n nft: string[]\n}\n\nconst INITIAL_STATE: BidUIState = {\n seller: [],\n bidder: [],\n archived: [],\n nft: []\n}\n\ntype UIReducerAction =\n | FetchBidsByAddressSuccessAction\n | FetchBidsByNFTSuccessAction\n | ArchiveBidAction\n | UnarchiveBidAction\n\nexport function bidReducer(\n state: BidUIState = INITIAL_STATE,\n action: UIReducerAction\n) {\n switch (action.type) {\n case FETCH_BIDS_BY_ADDRESS_SUCCESS: {\n const { sellerBids, bidderBids } = action.payload\n return {\n ...state,\n seller: sellerBids.map(bid => bid.id),\n bidder: bidderBids.map(bid => bid.id)\n }\n }\n case FETCH_BIDS_BY_NFT_SUCCESS: {\n const { bids } = action.payload\n return {\n ...state,\n nft: bids.map(bid => bid.id)\n }\n }\n case ARCHIVE_BID: {\n const { bid } = action.payload\n return {\n ...state,\n archived: [...state.archived.filter(id => id !== bid.id), bid.id]\n }\n }\n case UNARCHIVE_BID: {\n const { bid } = action.payload\n return {\n ...state,\n archived: [...state.archived.filter(id => id !== bid.id)]\n }\n }\n default:\n return state\n }\n}\n","import {\n FetchNFTsSuccessAction,\n FETCH_NFTS_SUCCESS\n} from '../../../nft/actions'\nimport { View } from '../../types'\n\nexport type PartnerUIState = {\n [View.PARTNERS_SUPER_RARE]: string[]\n [View.PARTNERS_MAKERS_PLACE]: string[]\n [View.PARTNERS_KNOWN_ORIGIN]: string[]\n}\n\nconst INITIAL_STATE: PartnerUIState = {\n [View.PARTNERS_SUPER_RARE]: [],\n [View.PARTNERS_MAKERS_PLACE]: [],\n [View.PARTNERS_KNOWN_ORIGIN]: []\n}\n\ntype UIReducerAction = FetchNFTsSuccessAction\n\nexport function partnerReducer(\n state: PartnerUIState = INITIAL_STATE,\n action: UIReducerAction\n) {\n switch (action.type) {\n case FETCH_NFTS_SUCCESS: {\n const nftIds = action.payload.nfts.map(nft => nft.id)\n\n switch (action.payload.options.view) {\n case View.PARTNERS_SUPER_RARE: {\n return {\n ...state,\n [View.PARTNERS_SUPER_RARE]: nftIds\n }\n }\n case View.PARTNERS_MAKERS_PLACE: {\n return {\n ...state,\n [View.PARTNERS_MAKERS_PLACE]: nftIds\n }\n }\n case View.PARTNERS_KNOWN_ORIGIN: {\n return {\n ...state,\n [View.PARTNERS_KNOWN_ORIGIN]: nftIds\n }\n }\n default:\n return state\n }\n }\n default:\n return state\n }\n}\n","import { combineReducers } from 'redux'\nimport { bidReducer as bid, BidUIState } from './bid/reducer'\nimport { partnerReducer as partner, PartnerUIState } from './partner/reducer'\n\nexport type NFTUIState = {\n bid: BidUIState\n partner: PartnerUIState\n}\n\nexport const nftReducer = combineReducers({\n bid,\n partner\n})\n","import { action } from 'typesafe-actions'\n\nimport { View } from './types'\n\n// Set View\n\nexport const SET_VIEW = 'Set View'\n\nexport const setView = (view: View) => action(SET_VIEW, { view })\n\nexport type SetViewAction = ReturnType<typeof setView>\n","import {\n FetchItemsRequestAction,\n FetchItemsSuccessAction,\n FETCH_ITEMS_REQUEST,\n FETCH_ITEMS_SUCCESS\n} from '../../item/actions'\nimport {\n FetchNFTsRequestAction,\n FetchNFTsSuccessAction,\n FETCH_NFTS_REQUEST,\n FETCH_NFTS_SUCCESS\n} from '../../nft/actions'\nimport { BrowseAction, BROWSE } from '../../routing/actions'\nimport { SetViewAction, SET_VIEW } from '../actions'\nimport { View } from '../types'\n\nexport type BrowseUIState = {\n view?: View\n nftIds: string[]\n itemIds: string[]\n lastTimestamp: number\n count?: number\n}\n\nconst INITIAL_STATE: BrowseUIState = {\n view: undefined,\n nftIds: [],\n itemIds: [],\n count: undefined,\n lastTimestamp: 0\n}\n\ntype UIReducerAction =\n | SetViewAction\n | FetchNFTsRequestAction\n | FetchNFTsSuccessAction\n | BrowseAction\n | FetchItemsRequestAction\n | FetchItemsSuccessAction\n\nexport function browseReducer(\n state: BrowseUIState = INITIAL_STATE,\n action: UIReducerAction\n): BrowseUIState {\n switch (action.type) {\n case SET_VIEW: {\n return {\n ...state,\n view: action.payload.view\n }\n }\n case BROWSE: {\n const { view } = action.payload.options\n return {\n ...state,\n nftIds: view ? [] : [...state.nftIds]\n }\n }\n case FETCH_NFTS_REQUEST: {\n const { view } = action.payload.options\n switch (view) {\n case View.ATLAS:\n return state\n case View.LOAD_MORE:\n return {\n ...state,\n nftIds: [...state.nftIds],\n count: undefined\n }\n default:\n return {\n ...state,\n nftIds: [],\n count: undefined\n }\n }\n }\n case FETCH_NFTS_SUCCESS: {\n if (action.payload.timestamp < state.lastTimestamp) {\n return state\n }\n const view = action.payload.options.view\n switch (view) {\n case View.MARKET:\n case View.CURRENT_ACCOUNT:\n case View.ACCOUNT: {\n return {\n ...state,\n view,\n nftIds: action.payload.nfts.map(nft => nft.id),\n count: action.payload.count,\n lastTimestamp: action.payload.timestamp\n }\n }\n case View.LOAD_MORE: {\n return {\n ...state,\n nftIds: [\n ...state.nftIds,\n ...action.payload.nfts.map(nft => nft.id)\n ],\n count: action.payload.count,\n lastTimestamp: action.payload.timestamp\n }\n }\n default:\n return state\n }\n }\n case FETCH_ITEMS_REQUEST: {\n const { view } = action.payload\n switch (view) {\n case View.ATLAS:\n return state\n case View.LOAD_MORE:\n return {\n ...state,\n itemIds: [...state.itemIds],\n count: undefined\n }\n default:\n return {\n ...state,\n nftIds: [],\n count: undefined\n }\n }\n }\n case FETCH_ITEMS_SUCCESS: {\n if (action.payload.timestamp < state.lastTimestamp) {\n return state\n }\n const view = action.payload.options.view\n switch (view) {\n case View.MARKET:\n case View.CURRENT_ACCOUNT:\n case View.ACCOUNT: {\n return {\n ...state,\n view,\n itemIds: action.payload.items.map(item => item.id),\n count: action.payload.total,\n lastTimestamp: action.payload.timestamp\n }\n }\n case View.LOAD_MORE: {\n return {\n ...state,\n itemIds: [\n ...state.itemIds,\n ...action.payload.items.map(item => item.id)\n ],\n count: action.payload.total,\n lastTimestamp: action.payload.timestamp\n }\n }\n default:\n return state\n }\n }\n default:\n return state\n }\n}\n","import { SetIsTryingOnAction, SET_IS_TRYING_ON } from './actions'\n\nexport type PreviewState = {\n isTryingOn: boolean\n}\n\nconst INITIAL_STATE: PreviewState = {\n isTryingOn: false\n}\n\ntype PreviewReducerAction = SetIsTryingOnAction\n\nexport function previewReducer(\n state = INITIAL_STATE,\n action: PreviewReducerAction\n): PreviewState {\n switch (action.type) {\n case SET_IS_TRYING_ON: {\n return {\n ...state,\n isTryingOn: action.payload.value\n }\n }\n default:\n return state\n }\n}\n","import { combineReducers } from 'redux'\nimport { assetReducer as asset, AssetUIState } from './asset/reducer'\nimport { nftReducer as nft, NFTUIState } from './nft/reducer'\nimport { browseReducer as browse, BrowseUIState } from './browse/reducer'\nimport { previewReducer as preview, PreviewState } from './preview/reducer'\n\nexport type UIState = {\n asset: AssetUIState\n nft: NFTUIState\n browse: BrowseUIState\n preview: PreviewState\n}\n\nexport const uiReducer = combineReducers({\n asset,\n nft,\n browse,\n preview\n})\n","import { Collection, CollectionFilters } from '@dcl/schemas'\nimport { action } from 'typesafe-actions'\n\n// FETCH COLLECTIONS\n\nexport const FETCH_COLLECTIONS_REQUEST = '[Request] Fetch collections'\nexport const FETCH_COLLECTIONS_SUCCESS = '[Success] Fetch collections'\nexport const FETCH_COLLECTIONS_FAILURE = '[Failure] Fetch collections'\n\nexport const fetchCollectionsRequest = (\n filters: CollectionFilters,\n shouldFetchItems?: boolean\n) => action(FETCH_COLLECTIONS_REQUEST, { filters, shouldFetchItems })\nexport const fetchCollectionsSuccess = (\n collections: Collection[],\n count: number\n) =>\n action(FETCH_COLLECTIONS_SUCCESS, {\n collections,\n count\n })\nexport const fetchCollectionsFailure = (error: string) =>\n action(FETCH_COLLECTIONS_FAILURE, { error })\n\nexport type FetchCollectionsRequestAction = ReturnType<\n typeof fetchCollectionsRequest\n>\nexport type FetchCollectionsSuccessAction = ReturnType<\n typeof fetchCollectionsSuccess\n>\nexport type FetchCollectionsFailureAction = ReturnType<\n typeof fetchCollectionsFailure\n>\n\n// FETCH SINGLE COLLECTION\n\nexport const FETCH_SINGLE_COLLECTION_REQUEST =\n '[Request] Fetch single collection'\nexport const FETCH_SINGLE_COLLECTION_SUCCESS =\n '[Success] Fetch single collection'\nexport const FETCH_SINGLE_COLLECTION_FAILURE =\n '[Failure] Fetch single collection'\n\nexport const fetchSingleCollectionRequest = (\n contractAddress: string,\n shouldFetchItems?: boolean\n) =>\n action(FETCH_SINGLE_COLLECTION_REQUEST, { contractAddress, shouldFetchItems })\nexport const fetchSingleCollectionSuccess = (collection: Collection) =>\n action(FETCH_SINGLE_COLLECTION_SUCCESS, {\n collection\n })\nexport const fetchSingleCollectionFailure = (error: string) =>\n action(FETCH_SINGLE_COLLECTION_FAILURE, {\n error\n })\n\nexport type FetchSingleCollectionRequestAction = ReturnType<\n typeof fetchSingleCollectionRequest\n>\nexport type FetchSingleCollectionSuccessAction = ReturnType<\n typeof fetchSingleCollectionSuccess\n>\nexport type FetchSingleCollectionFailureAction = ReturnType<\n typeof fetchSingleCollectionFailure\n>\n","import { Collection } from '@dcl/schemas'\nimport {\n loadingReducer,\n LoadingState\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n FetchCollectionsFailureAction,\n FetchCollectionsRequestAction,\n FetchCollectionsSuccessAction,\n FetchSingleCollectionFailureAction,\n FetchSingleCollectionRequestAction,\n FetchSingleCollectionSuccessAction,\n FETCH_COLLECTIONS_FAILURE,\n FETCH_COLLECTIONS_REQUEST,\n FETCH_COLLECTIONS_SUCCESS,\n FETCH_SINGLE_COLLECTION_FAILURE,\n FETCH_SINGLE_COLLECTION_REQUEST,\n FETCH_SINGLE_COLLECTION_SUCCESS\n} from './actions'\n\nexport type CollectionState = {\n data: Record<string, Collection>\n count: number\n loading: LoadingState\n error: string | null\n}\n\nexport const INITIAL_STATE: CollectionState = {\n data: {},\n count: 0,\n loading: [],\n error: null\n}\n\ntype CollectionReducerAction =\n | FetchCollectionsRequestAction\n | FetchCollectionsSuccessAction\n | FetchCollectionsFailureAction\n | FetchSingleCollectionRequestAction\n | FetchSingleCollectionSuccessAction\n | FetchSingleCollectionFailureAction\n\nexport function collectionReducer(\n state = INITIAL_STATE,\n action: CollectionReducerAction\n): CollectionState {\n switch (action.type) {\n case FETCH_COLLECTIONS_REQUEST:\n case FETCH_SINGLE_COLLECTION_REQUEST:\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n\n case FETCH_COLLECTIONS_SUCCESS:\n const { collections, count } = action.payload\n\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null,\n data: collections.reduce((acc, collection) => {\n acc[collection.urn] = collection\n return acc\n }, {} as CollectionState['data']),\n count\n }\n\n case FETCH_SINGLE_COLLECTION_SUCCESS:\n const { collection } = action.payload\n\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null,\n data: { ...state.data, [collection.urn]: collection }\n }\n\n case FETCH_COLLECTIONS_FAILURE:\n case FETCH_SINGLE_COLLECTION_FAILURE:\n const { error } = action.payload\n\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error\n }\n default:\n return state\n }\n}\n","import { action } from 'typesafe-actions'\nimport { Store } from './types'\n\n// Fetch Store\n\nexport const FETCH_STORE_REQUEST = '[Request] Fetch store'\nexport const FETCH_STORE_SUCCESS = '[Success] Fetch store'\nexport const FETCH_STORE_FAILURE = '[Failure] Fetch store'\n\nexport const fetchStoreRequest = (address: string) =>\n action(FETCH_STORE_REQUEST, { address })\nexport const fetchStoreSuccess = (store?: Store) =>\n action(FETCH_STORE_SUCCESS, { store })\nexport const fetchStoreFailure = (error: string) =>\n action(FETCH_STORE_FAILURE, { error })\n\nexport type FetchStoreRequestAction = ReturnType<typeof fetchStoreRequest>\nexport type FetchStoreSuccessAction = ReturnType<typeof fetchStoreSuccess>\nexport type FetchStoreFailureAction = ReturnType<typeof fetchStoreFailure>\n\n// Update Store\n\nexport const UPDATE_STORE_REQUEST = '[Request] Update store'\nexport const UPDATE_STORE_SUCCESS = '[Success] Update store'\nexport const UPDATE_STORE_FAILURE = '[Failure] Update store'\n\nexport const updateStoreRequest = (store: Store) =>\n action(UPDATE_STORE_REQUEST, { store })\nexport const updateStoreSuccess = (store: Store) =>\n action(UPDATE_STORE_SUCCESS, { store })\nexport const updateStoreFailure = (error: string) =>\n action(UPDATE_STORE_FAILURE, { error })\n\nexport type UpdateStoreRequestAction = ReturnType<typeof updateStoreRequest>\nexport type UpdateStoreSuccessAction = ReturnType<typeof updateStoreSuccess>\nexport type UpdateStoreFailureAction = ReturnType<typeof updateStoreFailure>\n\n// Update Local Store\n\nexport const UPDATE_LOCAL_STORE = 'Update local store'\n\nexport const updateLocalStore = (store: Store | null) =>\n action(UPDATE_LOCAL_STORE, { store: store })\n\nexport type UpdateLocalStoreAction = ReturnType<typeof updateLocalStore>\n\n// Revert Local Store\n\nexport const REVERT_LOCAL_STORE = 'Revert local store'\n\nexport const revertLocalStore = (address: string) =>\n action(REVERT_LOCAL_STORE, { address })\n\nexport type RevertLocalStoreAction = ReturnType<typeof revertLocalStore>\n","import {\n loadingReducer,\n LoadingState\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n FetchStoreFailureAction,\n FetchStoreRequestAction,\n FetchStoreSuccessAction,\n FETCH_STORE_FAILURE,\n FETCH_STORE_REQUEST,\n FETCH_STORE_SUCCESS,\n RevertLocalStoreAction,\n REVERT_LOCAL_STORE,\n UpdateLocalStoreAction,\n UpdateStoreFailureAction,\n UpdateStoreRequestAction,\n UpdateStoreSuccessAction,\n UPDATE_LOCAL_STORE,\n UPDATE_STORE_FAILURE,\n UPDATE_STORE_REQUEST,\n UPDATE_STORE_SUCCESS\n} from './actions'\nimport { Store } from './types'\n\nexport type StoreState = {\n data: Record<string, Store>\n localStore: Store | null\n loading: LoadingState\n error: string | null\n}\n\nexport const INITIAL_STATE: StoreState = {\n data: {},\n localStore: null,\n loading: [],\n error: null\n}\n\ntype StoreReducerAction =\n | UpdateLocalStoreAction\n | RevertLocalStoreAction\n | UpdateStoreRequestAction\n | UpdateStoreSuccessAction\n | UpdateStoreFailureAction\n | FetchStoreRequestAction\n | FetchStoreSuccessAction\n | FetchStoreFailureAction\n\nexport function storeReducer(\n state = INITIAL_STATE,\n action: StoreReducerAction\n): StoreState {\n switch (action.type) {\n case FETCH_STORE_REQUEST:\n case UPDATE_STORE_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n case FETCH_STORE_SUCCESS: {\n const { store } = action.payload\n return {\n ...state,\n data: !store\n ? state.data\n : {\n ...state.data,\n [store.owner]: store\n },\n loading: loadingReducer(state.loading, action),\n error: null\n }\n }\n case UPDATE_STORE_SUCCESS: {\n const { store } = action.payload\n return {\n ...state,\n data: {\n ...state.data,\n [store.owner]: store\n },\n localStore: null,\n loading: loadingReducer(state.loading, action),\n error: null\n }\n }\n case FETCH_STORE_FAILURE:\n case UPDATE_STORE_FAILURE: {\n const { error } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error\n }\n }\n case UPDATE_LOCAL_STORE:\n const { store } = action.payload\n return {\n ...state,\n localStore: store\n }\n case REVERT_LOCAL_STORE: {\n const { address } = action.payload\n const previous = state.data[address]\n\n return {\n ...state,\n localStore: previous ? { ...previous } : null\n }\n }\n default:\n return state\n }\n}\n","import { Sale, SaleFilters } from '@dcl/schemas'\nimport { action } from 'typesafe-actions'\n\nexport const FETCH_SALES_REQUEST = '[Request] Fetch sales'\nexport const FETCH_SALES_SUCCESS = '[Success] Fetch sales'\nexport const FETCH_SALES_FAILURE = '[Failure] Fetch sales'\n\nexport const fetchSalesRequest = (filters: SaleFilters) =>\n action(FETCH_SALES_REQUEST, { filters })\nexport const fetchSalesSuccess = (sales: Sale[], count: number) =>\n action(FETCH_SALES_SUCCESS, { sales, count })\nexport const fetchSalesFailure = (error: string) =>\n action(FETCH_SALES_FAILURE, { error })\n\nexport type FetchSalesRequestAction = ReturnType<typeof fetchSalesRequest>\nexport type FetchSalesSuccessAction = ReturnType<typeof fetchSalesSuccess>\nexport type FetchSalesFailureAction = ReturnType<typeof fetchSalesFailure>\n","import { Sale } from '@dcl/schemas'\nimport {\n loadingReducer,\n LoadingState\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n FetchSalesFailureAction,\n FetchSalesRequestAction,\n FetchSalesSuccessAction,\n FETCH_SALES_FAILURE,\n FETCH_SALES_REQUEST,\n FETCH_SALES_SUCCESS\n} from './actions'\n\nexport type SaleState = {\n data: Record<string, Sale>\n count: number\n loading: LoadingState\n error: string | null\n}\n\nexport const INITIAL_STATE: SaleState = {\n data: {},\n count: 0,\n loading: [],\n error: null\n}\n\ntype SaleReducerAction =\n | FetchSalesRequestAction\n | FetchSalesSuccessAction\n | FetchSalesFailureAction\n\nexport function saleReducer(\n state = INITIAL_STATE,\n action: SaleReducerAction\n): SaleState {\n switch (action.type) {\n case FETCH_SALES_REQUEST:\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n case FETCH_SALES_SUCCESS:\n const { sales, count } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null,\n data: sales.reduce((acc, sale) => {\n acc[sale.id] = sale\n return acc\n }, {} as Record<string, Sale>),\n count\n }\n case FETCH_SALES_FAILURE:\n const { error } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error\n }\n default:\n return state\n }\n}\n","import { action } from 'typesafe-actions'\nimport { AuthIdentity } from 'dcl-crypto'\n\n// Generate identity\n\nexport const GENERATE_IDENTITY_REQUEST = '[Request] Generate Identity'\nexport const GENERATE_IDENTITY_SUCCESS = '[Success] Generate Identity'\nexport const GENERATE_IDENTITY_FAILURE = '[Failure] Generate Identity'\n\nexport const generateIdentityRequest = (address: string) =>\n action(GENERATE_IDENTITY_REQUEST, { address })\nexport const generateIdentitySuccess = (\n address: string,\n identity: AuthIdentity\n) => action(GENERATE_IDENTITY_SUCCESS, { address, identity })\nexport const generateIdentityFailure = (address: string, error: string) =>\n action(GENERATE_IDENTITY_FAILURE, { address, error })\n\nexport type GenerateIdentityRequestAction = ReturnType<\n typeof generateIdentityRequest\n>\nexport type GenerateIdentitySuccessAction = ReturnType<\n typeof generateIdentitySuccess\n>\nexport type GenerateIdentityFailureAction = ReturnType<\n typeof generateIdentityFailure\n>\n","import { AuthIdentity } from 'dcl-crypto'\nimport {\n loadingReducer,\n LoadingState\n} from 'decentraland-dapps/dist/modules/loading/reducer'\nimport {\n GenerateIdentityRequestAction,\n GenerateIdentitySuccessAction,\n GenerateIdentityFailureAction,\n GENERATE_IDENTITY_REQUEST,\n GENERATE_IDENTITY_SUCCESS,\n GENERATE_IDENTITY_FAILURE\n} from './actions'\n\nexport type IdentityState = {\n data: Record<string, AuthIdentity>\n loading: LoadingState\n error: string | null\n}\n\nexport const INITIAL_STATE: IdentityState = {\n data: {},\n loading: [],\n error: null\n}\n\nexport type IdentityReducerAction =\n | GenerateIdentityRequestAction\n | GenerateIdentitySuccessAction\n | GenerateIdentityFailureAction\n\nexport function identityReducer(\n state: IdentityState = INITIAL_STATE,\n action: IdentityReducerAction\n): IdentityState {\n switch (action.type) {\n case GENERATE_IDENTITY_REQUEST: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action)\n }\n }\n case GENERATE_IDENTITY_SUCCESS: {\n const { address, identity } = action.payload\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: null,\n data: {\n ...state.data,\n [address]: identity\n }\n }\n }\n case GENERATE_IDENTITY_FAILURE: {\n return {\n ...state,\n loading: loadingReducer(state.loading, action),\n error: action.payload.error\n }\n }\n default:\n return state\n }\n}\n","import { combineReducers } from 'redux'\nimport { connectRouter } from 'connected-react-router'\nimport { History } from 'history'\nimport { walletReducer as wallet } from 'decentraland-dapps/dist/modules/wallet/reducer'\nimport { translationReducer as translation } from 'decentraland-dapps/dist/modules/translation/reducer'\nimport { storageReducer as storage } from 'decentraland-dapps/dist/modules/storage/reducer'\nimport { transactionReducer as transaction } from 'decentraland-dapps/dist/modules/transaction/reducer'\nimport { profileReducer as profile } from 'decentraland-dapps/dist/modules/profile/reducer'\nimport { authorizationReducer as authorization } from 'decentraland-dapps/dist/modules/authorization/reducer'\nimport { toastReducer as toast } from 'decentraland-dapps/dist/modules/toast/reducer'\n\nimport { accountReducer as account } from './account/reducer'\nimport { bidReducer as bid } from './bid/reducer'\nimport { itemReducer as item } from './item/reducer'\nimport { nftReducer as nft } from './nft/reducer'\nimport { orderReducer as order } from './order/reducer'\nimport { proximityReducer as proximity } from './proximity/reducer'\nimport { routingReducer as routing } from './routing/reducer'\nimport { tileReducer as tile } from './tile/reducer'\nimport { uiReducer as ui } from './ui/reducer'\nimport { collectionReducer as collection } from './collection/reducer'\nimport { storeReducer as store } from './store/reducer'\nimport { saleReducer as sale } from './sale/reducer'\nimport { identityReducer as identity } from './identity/reducer'\n\nexport const createRootReducer = (history: History) =>\n combineReducers({\n account,\n authorization,\n bid,\n item,\n nft,\n order,\n profile,\n proximity,\n routing,\n storage,\n tile,\n toast,\n transaction,\n translation,\n ui,\n wallet,\n router: connectRouter(history),\n collection,\n store,\n sale,\n identity\n })\n\nexport type RootState = ReturnType<ReturnType<typeof createRootReducer>>\n","import { Bid } from '@dcl/schemas'\nimport { takeEvery, put, select, call } from 'redux-saga/effects'\nimport {\n PLACE_BID_REQUEST,\n PlaceBidRequestAction,\n placeBidFailure,\n placeBidSuccess,\n FETCH_BIDS_BY_ADDRESS_REQUEST,\n fetchBidsByAddressSuccess,\n fetchBidsByAddressFailure,\n FetchBidsByAddressRequestAction,\n ACCEPT_BID_REQUEST,\n CANCEL_BID_REQUEST,\n AcceptBidRequestAction,\n acceptBidSuccess,\n acceptBidFailure,\n CancelBidRequestAction,\n cancelBidSuccess,\n cancelBidFailure,\n FETCH_BIDS_BY_NFT_REQUEST,\n FetchBidsByNFTRequestAction,\n fetchBidsByNFTSuccess,\n fetchBidsByNFTFailure\n} from './actions'\nimport { getWallet } from '../wallet/selectors'\nimport { VendorFactory } from '../vendor/VendorFactory'\nimport { getContract } from '../contract/utils'\nimport { VendorName } from '../vendor/types'\n\nexport function* bidSaga() {\n yield takeEvery(PLACE_BID_REQUEST, handlePlaceBidRequest)\n yield takeEvery(ACCEPT_BID_REQUEST, handleAcceptBidRequest)\n yield takeEvery(CANCEL_BID_REQUEST, handleCancelBidRequest)\n yield takeEvery(\n FETCH_BIDS_BY_ADDRESS_REQUEST,\n handleFetchBidsByAddressRequest\n )\n yield takeEvery(FETCH_BIDS_BY_NFT_REQUEST, handleFetchBidsByNFTRequest)\n}\n\nfunction* handlePlaceBidRequest(action: PlaceBidRequestAction) {\n const { nft, price, expiresAt, fingerprint } = action.payload\n try {\n const { bidService } = VendorFactory.build(nft.vendor)\n\n const wallet: ReturnType<typeof getWallet> = yield select(getWallet)\n const txHash: string = yield call(() =>\n bidService!.place(wallet, nft, price, expiresAt, fingerprint)\n )\n yield put(\n placeBidSuccess(\n nft,\n price,\n expiresAt,\n nft.chainId,\n txHash,\n wallet!.address,\n fingerprint\n )\n )\n } catch (error) {\n yield put(placeBidFailure(nft, price, expiresAt, error, fingerprint))\n }\n}\n\nfunction* handleAcceptBidRequest(action: AcceptBidRequestAction) {\n const { bid } = action.payload\n try {\n const contract = getContract({ address: bid.contractAddress })\n if (!contract.vendor) {\n throw new Error(\n `Couldn't find a valid vendor for contract ${contract.address}`\n )\n }\n const { bidService } = VendorFactory.build(contract.vendor)\n\n const wallet: ReturnType<typeof getWallet> = yield select(getWallet)\n const txHash: string = yield call(() => bidService!.accept(wallet, bid))\n\n yield put(acceptBidSuccess(bid, txHash))\n } catch (error) {\n yield put(acceptBidFailure(bid, error.message))\n }\n}\n\nfunction* handleCancelBidRequest(action: CancelBidRequestAction) {\n const { bid } = action.payload\n try {\n const contract = getContract({ address: bid.contractAddress })\n if (!contract.vendor) {\n throw new Error(\n `Couldn't find a valid vendor for contract ${contract.address}`\n )\n }\n const { bidService } = VendorFactory.build(contract.vendor)\n\n const wallet: ReturnType<typeof getWallet> = yield select(getWallet)\n const txHash: string = yield call(() => bidService!.cancel(wallet, bid))\n\n yield put(cancelBidSuccess(bid, txHash))\n } catch (error) {\n yield put(cancelBidFailure(bid, error.message))\n }\n}\n\nfunction* handleFetchBidsByAddressRequest(\n action: FetchBidsByAddressRequestAction\n) {\n const { address } = action.payload\n try {\n let sellerBids: Bid[] = []\n let bidderBids: Bid[] = []\n\n for (const vendorName of Object.values(VendorName)) {\n const { bidService } = VendorFactory.build(vendorName)\n if (bidService === undefined) {\n continue\n }\n\n const bids: [Bid[], Bid[]] = yield call(() =>\n Promise.all([\n bidService.fetchBySeller(address),\n bidService.fetchByBidder(address)\n ])\n )\n sellerBids = sellerBids.concat(bids[0])\n bidderBids = bidderBids.concat(bids[1])\n }\n\n yield put(fetchBidsByAddressSuccess(address, sellerBids, bidderBids))\n } catch (error) {\n yield put(fetchBidsByAddressFailure(address, error.message))\n }\n}\n\nfunction* handleFetchBidsByNFTRequest(action: FetchBidsByNFTRequestAction) {\n const { nft } = action.payload\n try {\n const { bidService } = VendorFactory.build(nft.vendor)\n\n const bids: Bid[] = yield call(() => bidService!.fetchByNFT(nft))\n\n yield put(fetchBidsByNFTSuccess(nft, bids))\n } catch (error) {\n yield put(fetchBidsByNFTFailure(nft, error.message))\n }\n}\n","import { takeEvery, call, put, select } from 'redux-saga/effects'\nimport {\n DEFAULT_BASE_NFT_PARAMS,\n FETCH_NFTS_REQUEST,\n FetchNFTsRequestAction,\n fetchNFTsSuccess,\n fetchNFTsFailure,\n FETCH_NFT_REQUEST,\n FetchNFTRequestAction,\n fetchNFTSuccess,\n fetchNFTFailure,\n TRANSFER_NFT_REQUEST,\n TransferNFTRequestAction,\n transferNFTSuccess,\n transferNFTFailure\n} from './actions'\nimport { getWallet } from '../wallet/selectors'\nimport { Vendor, VendorFactory } from '../vendor/VendorFactory'\nimport { AwaitFn } from '../types'\nimport { getContract } from '../contract/utils'\nimport { NFT } from './types'\nimport { VendorName } from '../vendor/types'\n\nexport function* nftSaga() {\n yield takeEvery(FETCH_NFTS_REQUEST, handleFetchNFTsRequest)\n yield takeEvery(FETCH_NFT_REQUEST, handleFetchNFTRequest)\n yield takeEvery(TRANSFER_NFT_REQUEST, handleTransferNFTRequest)\n}\n\nfunction* handleFetchNFTsRequest(action: FetchNFTsRequestAction) {\n const { options, timestamp } = action.payload\n const { vendor: VendorName, filters } = options\n const params = {\n ...DEFAULT_BASE_NFT_PARAMS,\n ...action.payload.options.params\n }\n\n try {\n const vendor: Vendor<VendorName> = yield call(\n VendorFactory.build,\n VendorName\n )\n\n const [\n nfts,\n accounts,\n orders,\n count\n ]: AwaitFn<typeof vendor.nftService.fetch> = yield call(\n [vendor.nftService, 'fetch'],\n params,\n filters\n )\n\n yield put(\n fetchNFTsSuccess(\n options,\n nfts as NFT[],\n accounts,\n orders,\n count,\n timestamp\n )\n )\n } catch (error) {\n yield put(fetchNFTsFailure(options, error.message, timestamp))\n }\n}\n\nfunction* handleFetchNFTRequest(action: FetchNFTRequestAction) {\n const { contractAddress, tokenId } = action.payload\n\n try {\n const contract: ReturnType<typeof getContract> = yield call(getContract, {\n address: contractAddress\n })\n if (!contract.vendor) {\n throw new Error(\n `Couldn't find a valid vendor for contract ${contract.address}`\n )\n }\n\n const vendor: Vendor<VendorName> = yield call(\n VendorFactory.build,\n contract.vendor\n )\n\n const [nft, order]: AwaitFn<typeof vendor.nftService.fetchOne> = yield call(\n [vendor.nftService, 'fetchOne'],\n contractAddress,\n tokenId\n )\n\n yield put(fetchNFTSuccess(nft as NFT, order))\n } catch (error) {\n yield put(fetchNFTFailure(contractAddress, tokenId, error.message))\n }\n}\n\nfunction* handleTransferNFTRequest(action: TransferNFTRequestAction) {\n const { nft, address } = action.payload\n try {\n const vendor: Vendor<VendorName> = yield call(\n VendorFactory.build,\n nft.vendor\n )\n\n const wallet: ReturnType<typeof getWallet> = yield select(getWallet)\n if (!wallet) {\n throw new Error('A wallet is needed to perform a NFT transfer request')\n }\n\n const txHash: string = yield call(\n [vendor.nftService, 'transfer'],\n wallet,\n address,\n nft\n )\n\n yield put(transferNFTSuccess(nft, address, txHash))\n } catch (error) {\n yield put(transferNFTFailure(nft, address, error.message, error.code))\n }\n}\n","import { put, call, takeEvery, select } from 'redux-saga/effects'\nimport {\n CREATE_ORDER_REQUEST,\n CreateOrderRequestAction,\n createOrderFailure,\n createOrderSuccess,\n EXECUTE_ORDER_REQUEST,\n executeOrderSuccess,\n executeOrderFailure,\n ExecuteOrderRequestAction,\n CANCEL_ORDER_REQUEST,\n CancelOrderRequestAction,\n cancelOrderSuccess,\n cancelOrderFailure\n} from './actions'\nimport { getWallet } from '../wallet/selectors'\nimport { VendorFactory } from '../vendor/VendorFactory'\n\nexport function* orderSaga() {\n yield takeEvery(CREATE_ORDER_REQUEST, handleCreateOrderRequest)\n yield takeEvery(EXECUTE_ORDER_REQUEST, handleExecuteOrderRequest)\n yield takeEvery(CANCEL_ORDER_REQUEST, handleCancelOrderRequest)\n}\n\nfunction* handleCreateOrderRequest(action: CreateOrderRequestAction) {\n const { nft, price, expiresAt } = action.payload\n try {\n const { orderService } = VendorFactory.build(nft.vendor)\n\n const wallet: ReturnType<typeof getWallet> = yield select(getWallet)\n const txHash: string = yield call(() =>\n orderService.create(wallet, nft, price, expiresAt)\n )\n yield put(createOrderSuccess(nft, price, expiresAt, txHash))\n } catch (error) {\n yield put(\n createOrderFailure(nft, price, expiresAt, error.message, error.code)\n )\n }\n}\n\nfunction* handleExecuteOrderRequest(action: ExecuteOrderRequestAction) {\n const { order, nft, fingerprint } = action.payload\n try {\n if (\n nft.contractAddress !== order.contractAddress &&\n nft.tokenId !== order.tokenId\n ) {\n throw new Error('The order does not match the NFT')\n }\n const { orderService } = VendorFactory.build(nft.vendor)\n\n const wallet: ReturnType<typeof getWallet> = yield select(getWallet)\n const txHash: string = yield call(() =>\n orderService.execute(wallet, nft, order, fingerprint)\n )\n\n yield put(executeOrderSuccess(order, nft, txHash))\n } catch (error) {\n yield put(executeOrderFailure(order, nft, error.message, error.code))\n }\n}\n\nfunction* handleCancelOrderRequest(action: CancelOrderRequestAction) {\n const { order, nft } = action.payload\n try {\n if (\n nft.contractAddress !== order.contractAddress &&\n nft.tokenId !== order.tokenId\n ) {\n throw new Error('The order does not match the NFT')\n }\n const { orderService } = VendorFactory.build(nft.vendor)\n\n const wallet: ReturnType<typeof getWallet> = yield select(getWallet)\n const txHash: string = yield call(() => orderService.cancel(wallet, order))\n yield put(cancelOrderSuccess(order, nft, txHash))\n } catch (error) {\n yield put(cancelOrderFailure(order, nft, error.message, error.code))\n }\n}\n","import { takeEvery, call, put } from 'redux-saga/effects'\nimport {\n FETCH_PROXIMITY_REQUEST,\n FetchProximityRequestAction,\n fetchProximitySuccess,\n fetchProximityFailure,\n fetchProximityRequest\n} from './actions'\nimport { FETCH_TILES_SUCCESS, FetchTilesSuccessAction } from '../tile/actions'\nimport { Proximity } from './types'\n\nexport function* proximitySaga() {\n yield takeEvery(FETCH_TILES_SUCCESS, handleFetchTilesSuccess)\n yield takeEvery(FETCH_PROXIMITY_REQUEST, handleFetchProximityRequest)\n}\n\nfunction* handleFetchProximityRequest(_action: FetchProximityRequestAction) {\n try {\n const proximity: Record<string, Proximity> = yield call(async () => {\n const resp = await fetch('/proximity.json')\n return resp.json()\n })\n yield put(fetchProximitySuccess(proximity))\n } catch (error) {\n yield put(fetchProximityFailure(error.message))\n }\n}\n\nfunction* handleFetchTilesSuccess(_action: FetchTilesSuccessAction) {\n yield put(fetchProximityRequest())\n}\n","/**\n * Return a copy of the object, filtered to omit the blacklisted array of valid keys\n * @param obj\n * @param keys\n */\nexport function omit(\n obj: Record<string, unknown>,\n keys: string[]\n): Record<string, unknown> {\n const newKeys = Object.keys(obj).filter(key => !keys.includes(key))\n return pick(obj, newKeys)\n}\n\n/**\n * Return a copy of the object, filtered to only have values for the whitelisted array of valid keys\n * @param obj\n * @param keys\n */\nexport function pick(\n obj: Record<string, unknown>,\n keys: string[]\n): Record<string, unknown> {\n const result = {} as Record<string, unknown>\n\n for (const key of keys) {\n if (obj.hasOwnProperty(key)) {\n result[key] = obj[key]\n }\n }\n\n return result\n}\n","import { createSelector } from 'reselect'\nimport { createMatchSelector } from 'connected-react-router'\nimport { getAddress } from 'decentraland-dapps/dist/modules/wallet/selectors'\nimport { locations } from '../routing/locations'\nimport { RootState } from '../reducer'\nimport { NFTState } from './reducer'\nimport { NFT } from './types'\nimport { getNFT } from './utils'\n\nexport const getState = (state: RootState) => state.nft\nexport const getData = (state: RootState) => getState(state).data\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getError = (state: RootState) => getState(state).error\n\nconst nftDetailMatchSelector = createMatchSelector<\n RootState,\n {\n contractAddress: string\n tokenId: string\n }\n>(locations.nft(':contractAddress', ':tokenId'))\n\nexport const getContractAddress = createSelector<\n RootState,\n ReturnType<typeof nftDetailMatchSelector>,\n string | null\n>(\n nftDetailMatchSelector,\n match => match?.params.contractAddress.toLowerCase() || null\n)\n\nexport const getTokenId = createSelector<\n RootState,\n ReturnType<typeof nftDetailMatchSelector>,\n string | null\n>(nftDetailMatchSelector, match => match?.params.tokenId || null)\n\nexport const getCurrentNFT = createSelector<\n RootState,\n string | null,\n string | null,\n NFTState['data'],\n NFT | null\n>(\n state => getContractAddress(state),\n state => getTokenId(state),\n state => getData(state),\n (contractAddress, tokenId, nfts) => getNFT(contractAddress, tokenId, nfts)\n)\n\nexport const getNFTsByOwner = createSelector<\n RootState,\n NFTState['data'],\n Record<string, NFT[]>\n>(\n state => getData(state),\n data => {\n let nftsByOwner: Record<string, NFT[]> = {}\n for (const id of Object.keys(data)) {\n const nft = data[id]\n const key = nft.owner.toLowerCase()\n if (!nftsByOwner[key]) {\n nftsByOwner[key] = []\n }\n nftsByOwner[key].push(nft)\n }\n return nftsByOwner\n }\n)\n\nexport const getWalletNFTs = createSelector<\n RootState,\n Record<string, NFT[]>,\n string | undefined,\n NFT[]\n>(\n state => getNFTsByOwner(state),\n state => getAddress(state),\n (nftsByOwner, address) => {\n if (address && address.toLowerCase() in nftsByOwner) {\n return nftsByOwner[address.toLowerCase()]\n }\n return []\n }\n)\n","import { createSelector } from 'reselect'\nimport { createMatchSelector } from 'connected-react-router'\nimport { Item } from '@dcl/schemas'\nimport { locations } from '../routing/locations'\nimport { RootState } from '../reducer'\n\nexport const getState = (state: RootState) => state.item\nexport const getData = (state: RootState) => getState(state).data\nexport const getError = (state: RootState) => getState(state).error\nexport const getLoading = (state: RootState) => getState(state).loading\n\nexport const getItems = createSelector<\n RootState,\n ReturnType<typeof getData>,\n Item[]\n>(getData, itemsById => Object.values(itemsById))\n\nconst ItemDetailMatchSelector = createMatchSelector<\n RootState,\n {\n contractAddress: string\n tokenId: string\n }\n>(locations.item(':contractAddress', ':tokenId'))\n\nexport const getContractAddress = createSelector<\n RootState,\n ReturnType<typeof ItemDetailMatchSelector>,\n string | null\n>(\n ItemDetailMatchSelector,\n match => match?.params.contractAddress.toLowerCase() || null\n)\n\nexport const getTokenId = createSelector<\n RootState,\n ReturnType<typeof ItemDetailMatchSelector>,\n string | null\n>(ItemDetailMatchSelector, match => match?.params.tokenId || null)\n\nexport const getItemsByContractAddress = createSelector(getItems, items =>\n items.reduce((acc, item) => {\n const { contractAddress } = item\n if (!acc[contractAddress]) acc[contractAddress] = []\n acc[contractAddress].push(item)\n return acc\n }, {} as Record<string, Item[]>)\n)\n","import { Order } from '@dcl/schemas'\nimport addDays from 'date-fns/addDays'\nimport dateFnsFormat from 'date-fns/format'\nimport { Asset } from '../asset/types'\n\nexport const DEFAULT_EXPIRATION_IN_DAYS = 30\nexport const INPUT_FORMAT = 'yyyy-MM-dd'\nexport const getDefaultExpirationDate = (date = Date.now()) =>\n dateFnsFormat(\n addDays(new Date(date), DEFAULT_EXPIRATION_IN_DAYS),\n INPUT_FORMAT\n )\n\nexport function isExpired(expiresAt: string) {\n return parseInt(expiresAt, 10) < Date.now()\n}\n\nexport function getActiveOrder(\n asset: Asset | null,\n orders: Record<string, Order>\n) {\n if (\n asset &&\n 'activeOrderId' in asset &&\n !!asset.activeOrderId &&\n asset.activeOrderId in orders\n ) {\n return orders[asset.activeOrderId]\n }\n return null\n}\n","import { Order } from '@dcl/schemas'\nimport { RootState } from '../reducer'\nimport { createSelector } from 'reselect'\nimport { getCurrentNFT } from '../nft/selectors'\nimport { NFT } from '../nft/types'\nimport { OrderState } from './reducer'\nimport { getActiveOrder } from './utils'\n\nexport const getState = (state: RootState) => state.order\nexport const getData = (state: RootState) => getState(state).data\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getError = (state: RootState) => getState(state).error\nexport const getCurrentOrder = createSelector<\n RootState,\n NFT | null,\n OrderState['data'],\n Order | null\n>(\n state => getCurrentNFT(state),\n state => getData(state),\n (nft, orders) => getActiveOrder(nft, orders)\n)\n","export enum WearableGender {\n MALE = 'male',\n FEMALE = 'female'\n}\n","import { createSelector } from 'reselect'\nimport { Item, Order } from '@dcl/schemas'\nimport { getData as getNFTData } from '../../nft/selectors'\nimport { getData as getItemData } from '../../item/selectors'\nimport { getData as getOrderData } from '../../order/selectors'\nimport { NFTState } from '../../nft/reducer'\nimport { RootState } from '../../reducer'\nimport { BrowseUIState } from './reducer'\nimport { NFT } from '../../nft/types'\nimport { ItemState } from '../../item/reducer'\nimport { VendorName } from '../../vendor'\nimport { getAddress } from '../../wallet/selectors'\nimport { OnSaleElement, OnSaleNFT } from './types'\n\nexport const getState = (state: RootState) => state.ui.browse\nexport const getView = (state: RootState) => getState(state).view\nexport const getCount = (state: RootState) => getState(state).count\n\nexport const getNFTs = createSelector<\n RootState,\n BrowseUIState,\n NFTState['data'],\n NFT[]\n>(getState, getNFTData, (browse, nftsById) =>\n browse.nftIds.map(id => nftsById[id])\n)\n\nexport const getItems = createSelector<\n RootState,\n BrowseUIState,\n ItemState['data'],\n Item[]\n>(getState, getItemData, (browse, itemsById) =>\n browse.itemIds.map(id => itemsById[id])\n)\n\nexport const getOnSaleItems = createSelector<\n RootState,\n ReturnType<typeof getAddress>,\n ReturnType<typeof getItemData>,\n Item[]\n>(getAddress, getItemData, (address, itemsById) =>\n Object.values(itemsById).filter(\n item => item.isOnSale && item.creator === address\n )\n)\n\nexport const getOnSaleNFTs = createSelector<\n RootState,\n ReturnType<typeof getAddress>,\n ReturnType<typeof getNFTData>,\n ReturnType<typeof getOrderData>,\n OnSaleNFT[]\n>(getAddress, getNFTData, getOrderData, (address, nftsById, ordersById) =>\n Object.values(nftsById)\n .reduce((acc, nft) => {\n const { activeOrderId } = nft\n const order = activeOrderId ? ordersById[activeOrderId] : undefined\n if (order) {\n acc.push([nft, order])\n }\n return acc\n }, [] as [NFT<VendorName.DECENTRALAND>, Order][])\n .filter(([nft]) => nft.owner === address)\n)\n\nexport const getOnSaleElements = createSelector<\n RootState,\n ReturnType<typeof getOnSaleItems>,\n ReturnType<typeof getOnSaleNFTs>,\n OnSaleElement[]\n>(getOnSaleItems, getOnSaleNFTs, (items, nfts) => [...items, ...nfts])\n","import { toBN } from 'web3x/utils'\nimport { AccountMetrics } from './types'\n\nconst addStrings = (a: string, b: string) => {\n const bnA = toBN(a)\n const bnB = toBN(b)\n\n return bnA.add(bnB).toString()\n}\n\nexport const sumAccountMetrics = (a: AccountMetrics, b: AccountMetrics) => {\n return {\n ...a,\n purchases: a.purchases + b.purchases,\n sales: a.sales + b.sales,\n earned: addStrings(a.earned, b.earned),\n royalties: addStrings(a.royalties, b.royalties),\n spent: addStrings(a.spent, b.spent)\n }\n}\n","import { createSelector } from 'reselect'\nimport { createMatchSelector } from 'connected-react-router'\nimport { Network } from '@dcl/schemas'\nimport { RootState } from '../reducer'\nimport { locations } from '../routing/locations'\nimport { AccountMetrics } from './types'\nimport { sumAccountMetrics } from './utils'\n\nexport const getState = (state: RootState) => state.account\nexport const getData = (state: RootState) => getState(state).data\nexport const getMetricsByNetworkByAddress = (state: RootState) =>\n getState(state).metrics\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getError = (state: RootState) => getState(state).error\n\nconst accountMatchSelector = createMatchSelector<\n RootState,\n { address: string }\n>(locations.account(':address'))\n\nexport const getAddress = createSelector<\n RootState,\n ReturnType<typeof accountMatchSelector>,\n string | undefined\n>(accountMatchSelector, match => match?.params.address?.toLowerCase())\n\nexport const getMetricsByAddressByNetwork = createSelector(\n getMetricsByNetworkByAddress,\n metrics => {\n const addresses = new Set([\n ...Object.keys(metrics.ETHEREUM),\n ...Object.keys(metrics.MATIC)\n ])\n\n const res: Record<string, Record<Network, AccountMetrics>> = {}\n\n for (const address of addresses) {\n res[address] = {\n [Network.ETHEREUM]: metrics[Network.ETHEREUM][address],\n [Network.MATIC]: metrics[Network.MATIC][address]\n }\n }\n\n return res\n }\n)\n\nexport const getAggregatedMetricsByAddress = createSelector(\n getMetricsByAddressByNetwork,\n metrics => {\n const addresses = Object.keys(metrics)\n const res: Record<string, AccountMetrics> = {}\n\n for (const address of addresses) {\n const eth = metrics[address].ETHEREUM\n const mat = metrics[address].MATIC\n\n if (eth && !mat) {\n res[address] = eth\n } else if (!eth && mat) {\n res[address] = mat\n } else if (eth && mat) {\n res[address] = sumAccountMetrics(eth, mat)\n }\n }\n\n return res\n }\n)\n\nexport const getMetricsByAddress = createSelector(\n getMetricsByAddressByNetwork,\n getAggregatedMetricsByAddress,\n (metrics, aggregatedMetrics) =>\n Object.keys(metrics).reduce(\n (acc, address) => {\n acc[address] = {\n ...metrics[address],\n aggregated: aggregatedMetrics[address]\n }\n return acc\n },\n {} as Record<\n string,\n {\n [Network.ETHEREUM]: AccountMetrics\n [Network.MATIC]: AccountMetrics\n aggregated: AccountMetrics\n }\n >\n )\n)\n","import { createSelector } from 'reselect'\nimport {\n getSearch as getRouterSearch,\n getLocation\n} from 'connected-react-router'\nimport { Network, Rarity } from '@dcl/schemas'\nimport { getView } from '../ui/browse/selectors'\nimport { View } from '../ui/types'\nimport { WearableGender } from '../nft/wearable/types'\nimport { VendorName } from '../vendor/types'\nimport { isVendor } from '../vendor/utils'\nimport { Section, Sections } from '../vendor/routing/types'\nimport { contracts } from '../contract/utils'\nimport { RootState } from '../reducer'\nimport {\n getDefaultOptionsByView,\n getURLParamArray,\n getURLParam\n} from './search'\nimport { BrowseOptions, SortBy } from './types'\nimport { locations } from './locations'\nimport { AssetType } from '../asset/types'\nimport { getAddress as getWalletAddress } from '../wallet/selectors'\nimport { getAddress as getAccountAddress } from '../account/selectors'\n\nexport const getState = (state: RootState) => state.routing\n\nconst getPathName = createSelector<\n RootState,\n ReturnType<typeof getLocation>,\n string\n>(getLocation, location => location.pathname)\n\nexport const getVendor = createSelector<RootState, string, VendorName>(\n getRouterSearch,\n search => {\n const vendor = getURLParam<VendorName>(search, 'vendor')\n if (vendor && isVendor(vendor)) {\n return vendor\n }\n return VendorName.DECENTRALAND\n }\n)\n\nexport const getSection = createSelector<\n RootState,\n string,\n ReturnType<typeof getPathName>,\n VendorName,\n Section\n>(getRouterSearch, getPathName, getVendor, (search, pathname, vendor) => {\n const section = getURLParam<string>(search, 'section') ?? ''\n if (!section && pathname === locations.lands()) {\n return Sections.decentraland.LAND\n }\n\n if (\n (!section || section === Sections[vendor].ALL) &&\n pathname === locations.browse() &&\n vendor === VendorName.DECENTRALAND\n ) {\n return Sections.decentraland.WEARABLES\n }\n\n if (!section || !(section.toUpperCase() in Sections[vendor])) {\n return Sections[vendor].ALL\n }\n\n return section as Section\n})\n\nexport const getPage = createSelector<RootState, string, number>(\n getRouterSearch,\n search => {\n const page = getURLParam(search, 'page')\n return page === null || isNaN(+page) ? 1 : +page\n }\n)\n\nexport const getSortBy = createSelector<\n RootState,\n string,\n View | undefined,\n SortBy | undefined\n>(\n getRouterSearch,\n getView,\n (search, view) =>\n getURLParam<SortBy>(search, 'sortBy') ||\n getDefaultOptionsByView(view).sortBy\n)\n\nexport const getOnlyOnSale = createSelector<\n RootState,\n string,\n View | undefined,\n boolean | undefined\n>(getRouterSearch, getView, (search, view) => {\n const onlyOnSale = getURLParam(search, 'onlyOnSale')\n let result: boolean\n switch (onlyOnSale) {\n case 'true':\n result = true\n break\n case 'false':\n result = false\n break\n default:\n const defaultOptions = getDefaultOptionsByView(view)\n result = defaultOptions.onlyOnSale!\n break\n }\n return result\n})\n\nexport const getIsSoldOut = createSelector<\n RootState,\n string,\n boolean | undefined\n>(getRouterSearch, search => {\n const isSoldOut = getURLParam(search, 'isSoldOut')\n return isSoldOut === 'true'\n})\n\nexport const getIsMap = createSelector<RootState, string, boolean | undefined>(\n getRouterSearch,\n search => {\n const isMap = getURLParam(search, 'isMap')\n return isMap === null ? undefined : isMap === 'true'\n }\n)\n\nexport const getItemId = createSelector<RootState, string, string | undefined>(\n getRouterSearch,\n search => {\n const itemId = getURLParam(search, 'isSoldOut')\n return itemId ? itemId : undefined\n }\n)\n\nexport const getIsFullscreen = createSelector<\n RootState,\n string,\n boolean | undefined,\n boolean | undefined\n>(getRouterSearch, getIsMap, (search, isMap) => {\n const isFullscreen = getURLParam(search, 'isFullscreen')\n return isFullscreen === null ? undefined : isMap && isFullscreen === 'true'\n})\n\nexport const getRarities = createSelector<RootState, string, Rarity[]>(\n getRouterSearch,\n search =>\n getURLParamArray<Rarity>(\n search,\n 'rarities',\n Object.values(Rarity).filter(\n value => typeof value === 'string'\n ) as string[]\n )\n)\n\nexport const getWearableGenders = createSelector<\n RootState,\n string,\n WearableGender[]\n>(getRouterSearch, search =>\n getURLParamArray<WearableGender>(\n search,\n 'genders',\n Object.values(WearableGender)\n )\n)\n\nexport const getContracts = createSelector<RootState, string, string[]>(\n getRouterSearch,\n search =>\n getURLParamArray<string>(\n search,\n 'contracts',\n contracts.map(contract => contract.address)\n )\n)\n\nexport const getSearch = createSelector<RootState, string, string>(\n getRouterSearch,\n search => getURLParam(search, 'search') || ''\n)\n\nexport const getNetwork = createSelector<\n RootState,\n string,\n Network | undefined\n>(\n getRouterSearch,\n search => (getURLParam(search, 'network') as Network) || undefined\n)\n\nexport const getAssetType = createSelector<\n RootState,\n string,\n string,\n VendorName,\n AssetType\n>(getRouterSearch, getPathName, getVendor, (search, pathname, vendor) => {\n let assetTypeParam = getURLParam(search, 'assetType') ?? ''\n\n if (!assetTypeParam || !(assetTypeParam.toUpperCase() in AssetType)) {\n if (vendor === VendorName.DECENTRALAND && pathname === locations.browse()) {\n return AssetType.ITEM\n }\n return AssetType.NFT\n }\n return assetTypeParam as AssetType\n})\n\nexport const getViewAsGuest = createSelector<RootState, string, boolean>(\n getRouterSearch,\n search => getURLParam(search, 'viewAsGuest') === 'true'\n)\nexport const getOnlySmart = createSelector<RootState, string, boolean>(\n getRouterSearch,\n search => getURLParam(search, 'onlySmart') === 'true'\n)\n\nexport const hasFiltersEnabled = createSelector<\n RootState,\n string | undefined,\n WearableGender[],\n Rarity[],\n string[],\n boolean\n>(\n getNetwork,\n getWearableGenders,\n getRarities,\n getContracts,\n (network, genders, rarities, contracts) => {\n const hasNetworkFilter = network !== undefined\n const hasGenderFilter = genders.length > 0\n const hasRarityFilter = rarities.length > 0\n const hasContractsFilter = contracts.length > 0\n return (\n hasNetworkFilter ||\n hasGenderFilter ||\n hasRarityFilter ||\n hasContractsFilter\n )\n }\n)\n\nexport const getCurrentLocationAddress = createSelector<\n RootState,\n string,\n string | undefined,\n string | undefined,\n string | undefined\n>(\n getPathName,\n getWalletAddress,\n getAccountAddress,\n (pathname, walletAddess, accountAddress) => {\n let address: string | undefined\n\n if (pathname === locations.currentAccount()) {\n address = walletAddess\n } else {\n address = accountAddress\n }\n\n return address ? address.toLowerCase() : undefined\n }\n)\n\nexport const getPaginationUrlParams = createSelector(\n getPage,\n getSortBy,\n getSearch,\n (page, sortBy, search) => ({ page, sortBy, search })\n)\n\nexport const getAssetsUrlParams = createSelector(\n getOnlyOnSale,\n getOnlySmart,\n getIsSoldOut,\n getItemId,\n getContracts,\n (onlyOnSale, onlySmart, isSoldOut, itemId, contracts) => ({\n onlyOnSale,\n onlySmart,\n isSoldOut,\n itemId,\n contracts\n })\n)\n\nexport const getLandsUrlParams = createSelector(\n getIsMap,\n getIsFullscreen,\n (isMap, isFullscreen) => ({ isMap, isFullscreen })\n)\n\nexport const getWearablesUrlParams = createSelector(\n getRarities,\n getWearableGenders,\n getView,\n getViewAsGuest,\n (rarities, wearableGenders, view, viewAsGuest) => ({\n rarities,\n wearableGenders,\n view,\n viewAsGuest\n })\n)\n\nexport const getCurrentBrowseOptions = createSelector(\n getAssetType,\n getCurrentLocationAddress,\n getVendor,\n getSection,\n getNetwork,\n getPaginationUrlParams,\n getAssetsUrlParams,\n getLandsUrlParams,\n getWearablesUrlParams,\n (\n assetType,\n address,\n vendor,\n section,\n network,\n paginationUrlParams,\n AssetsUrlParams,\n landsUrlParams,\n wearablesUrlParams\n ) =>\n ({\n assetType,\n address,\n vendor,\n section,\n network,\n ...AssetsUrlParams,\n ...paginationUrlParams,\n ...landsUrlParams,\n ...wearablesUrlParams\n } as BrowseOptions)\n)\n","import { VendorName } from './types'\n\nexport const MAX_QUERY_SIZE = 1000\nexport const MAX_PAGE = 10000\nexport const PAGE_SIZE = 24\n\nexport function getMaxQuerySize(vendor: VendorName) {\n switch (vendor) {\n case VendorName.DECENTRALAND:\n return MAX_QUERY_SIZE\n case VendorName.SUPER_RARE:\n return MAX_QUERY_SIZE\n case VendorName.MAKERS_PLACE:\n return MAX_QUERY_SIZE\n case VendorName.KNOWN_ORIGIN:\n return MAX_QUERY_SIZE\n }\n}\n","import { BrowseOptions } from './types'\nimport { Section } from '../vendor/decentraland'\nimport { getSearchParams } from './search'\n\nexport const COLLECTIONS_PER_PAGE = 6\nexport const SALES_PER_PAGE = 6\n\nexport function buildBrowseURL(\n pathname: string,\n browseOptions: BrowseOptions\n): string {\n let params: URLSearchParams | undefined\n\n if (browseOptions.section === Section.ON_SALE) {\n params = getSearchParams({ section: Section.ON_SALE })\n } else {\n params = getSearchParams(browseOptions)\n }\n\n return params ? `${pathname}?${params.toString()}` : pathname\n}\n","import { createSelector } from 'reselect'\nimport { RootState } from '../reducer'\nimport { Sale } from '@dcl/schemas'\n\nexport const getState = (state: RootState) => state.sale\nexport const getData = (state: RootState) => getState(state).data\nexport const getCount = (state: RootState) => getState(state).count\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getError = (state: RootState) => getState(state).error\n\nexport const getSales = createSelector<\n RootState,\n ReturnType<typeof getData>,\n Sale[]\n>(getData, data => {\n return Object.values(data)\n})\n","import {\n takeEvery,\n put,\n select,\n call,\n take,\n delay,\n race,\n spawn\n} from 'redux-saga/effects'\nimport {\n push,\n getLocation,\n goBack,\n LOCATION_CHANGE,\n replace\n} from 'connected-react-router'\nimport { NFTCategory, Sale, SaleSortBy, SaleType } from '@dcl/schemas'\nimport { omit } from '../../lib/utils'\nimport { AssetType } from '../asset/types'\nimport {\n BUY_ITEM_SUCCESS,\n fetchItemRequest,\n fetchItemsRequest\n} from '../item/actions'\nimport { VendorName } from '../vendor/types'\nimport { View } from '../ui/types'\nimport {\n getNetwork,\n getOnlySmart,\n getCurrentBrowseOptions,\n getCurrentLocationAddress\n} from '../routing/selectors'\nimport {\n fetchNFTRequest,\n fetchNFTsRequest,\n TRANSFER_NFT_SUCCESS\n} from '../nft/actions'\nimport { setView } from '../ui/actions'\nimport { getFilters } from '../vendor/utils'\nimport {\n MAX_PAGE,\n PAGE_SIZE,\n getMaxQuerySize,\n MAX_QUERY_SIZE\n} from '../vendor/api'\nimport { locations } from './locations'\nimport {\n getCategoryFromSection,\n getDefaultOptionsByView,\n getSearchWearableCategory,\n getItemSortBy,\n getAssetOrderBy,\n getCollectionSortBy\n} from './search'\nimport {\n getRarities,\n getWearableGenders,\n getContracts,\n getSearch\n} from './selectors'\nimport {\n BROWSE,\n BrowseAction,\n FETCH_ASSETS_FROM_ROUTE,\n FetchAssetsFromRouteAction,\n setIsLoadMore,\n CLEAR_FILTERS,\n GO_BACK,\n GoBackAction\n} from './actions'\nimport { BrowseOptions, Sections, SortBy } from './types'\nimport { Section } from '../vendor/decentraland'\nimport { fetchCollectionsRequest } from '../collection/actions'\nimport { COLLECTIONS_PER_PAGE, SALES_PER_PAGE } from './utils'\nimport {\n FetchSalesFailureAction,\n fetchSalesRequest,\n FETCH_SALES_FAILURE,\n FETCH_SALES_SUCCESS\n} from '../sale/actions'\nimport { getSales } from '../sale/selectors'\nimport {\n CANCEL_ORDER_SUCCESS,\n CREATE_ORDER_SUCCESS,\n EXECUTE_ORDER_SUCCESS\n} from '../order/actions'\nimport {\n ACCEPT_BID_SUCCESS,\n CANCEL_BID_SUCCESS,\n PLACE_BID_SUCCESS\n} from '../bid/actions'\nimport { buildBrowseURL } from './utils'\n\nexport function* routingSaga() {\n yield takeEvery(FETCH_ASSETS_FROM_ROUTE, handleFetchAssetsFromRoute)\n yield takeEvery(BROWSE, handleBrowse)\n yield takeEvery(CLEAR_FILTERS, handleClearFilters)\n yield takeEvery(GO_BACK, handleGoBack)\n yield takeEvery(\n [\n CREATE_ORDER_SUCCESS,\n EXECUTE_ORDER_SUCCESS,\n CANCEL_ORDER_SUCCESS,\n PLACE_BID_SUCCESS,\n ACCEPT_BID_SUCCESS,\n CANCEL_BID_SUCCESS,\n BUY_ITEM_SUCCESS,\n TRANSFER_NFT_SUCCESS\n ],\n handleRedirectToActivity\n )\n}\n\nfunction* handleFetchAssetsFromRoute(action: FetchAssetsFromRouteAction) {\n const newOptions: BrowseOptions = yield getNewBrowseOptions(\n action.payload.options\n )\n yield fetchAssetsFromRoute(newOptions)\n}\n\nfunction* handleClearFilters() {\n const browseOptions: BrowseOptions = yield select(getCurrentBrowseOptions)\n const { pathname }: ReturnType<typeof getLocation> = yield select(getLocation)\n\n const clearedBrowseOptions: BrowseOptions = omit(browseOptions, [\n 'rarities',\n 'wearableGenders',\n 'network',\n 'contracts',\n 'page'\n ])\n\n yield call(fetchAssetsFromRoute, clearedBrowseOptions)\n yield put(push(buildBrowseURL(pathname, clearedBrowseOptions)))\n}\n\nexport function* handleBrowse(action: BrowseAction) {\n const options: BrowseOptions = yield call(\n getNewBrowseOptions,\n action.payload.options\n )\n const { pathname }: ReturnType<typeof getLocation> = yield select(getLocation)\n\n yield fetchAssetsFromRoute(options)\n yield put(push(buildBrowseURL(pathname, options)))\n}\n\nfunction* handleGoBack(action: GoBackAction) {\n const { defaultLocation } = action.payload\n\n yield put(goBack())\n\n const { timeout }: { timeout?: boolean } = yield race({\n changed: take(LOCATION_CHANGE),\n timeout: delay(250)\n })\n\n if (timeout) {\n yield put(replace(defaultLocation || locations.root()))\n }\n}\n\nexport function* fetchAssetsFromRoute(options: BrowseOptions) {\n const isItems = options.assetType === AssetType.ITEM\n const view = options.view!\n const vendor = options.vendor!\n const page = options.page!\n const section = options.section!\n const sortBy = options.sortBy!\n const { search, onlyOnSale, onlySmart, isMap, contracts } = options\n\n const address =\n options.address || ((yield select(getCurrentLocationAddress)) as string)\n\n const isLoadMore = view === View.LOAD_MORE\n\n yield put(setIsLoadMore(isLoadMore))\n\n if (isMap) {\n yield put(setView(view))\n }\n\n const category = getCategoryFromSection(section)\n\n switch (section) {\n case Section.BIDS:\n case Section.STORE_SETTINGS:\n break\n case Section.ON_SALE:\n yield handleFetchOnSale(address, options.view!)\n break\n case Section.SALES:\n yield spawn(handleFetchSales, address, page)\n break\n case Section.COLLECTIONS:\n yield handleFetchCollections(page, address, sortBy, search)\n break\n default:\n const offset = isLoadMore ? page - 1 : 0\n const skip = Math.min(offset, MAX_PAGE) * PAGE_SIZE\n const first = Math.min(page * PAGE_SIZE - skip, getMaxQuerySize(vendor))\n\n if (isItems) {\n // TODO: clean up\n const isWearableHead =\n section === Sections[VendorName.DECENTRALAND].WEARABLES_HEAD\n const isWearableAccessory =\n section === Sections[VendorName.DECENTRALAND].WEARABLES_ACCESSORIES\n\n const wearableCategory = !isWearableAccessory\n ? getSearchWearableCategory(section)\n : undefined\n\n const { rarities, wearableGenders } = options\n\n yield put(\n fetchItemsRequest({\n view,\n page,\n filters: {\n first,\n skip,\n sortBy: getItemSortBy(sortBy),\n isOnSale: onlyOnSale,\n creator: address,\n wearableCategory,\n isWearableHead,\n isWearableAccessory,\n isWearableSmart: onlySmart,\n search,\n category,\n rarities: rarities,\n contractAddress: contracts && contracts[0],\n wearableGenders\n }\n })\n )\n } else {\n const [orderBy, orderDirection] = getAssetOrderBy(sortBy)\n yield put(\n fetchNFTsRequest({\n vendor,\n view,\n params: {\n first,\n skip,\n orderBy,\n orderDirection,\n onlyOnSale,\n address,\n category,\n search\n },\n filters: getFilters(vendor, options) // TODO: move to routing\n })\n )\n }\n }\n}\n\nexport function* getNewBrowseOptions(\n current: BrowseOptions\n): Generator<unknown, BrowseOptions, any> {\n let previous: BrowseOptions = yield select(getCurrentBrowseOptions)\n current = yield deriveCurrentOptions(previous, current)\n const view = deriveView(previous, current)\n const vendor = deriveVendor(previous, current)\n\n if (shouldResetOptions(previous, current)) {\n previous = {\n page: 1,\n onlyOnSale: previous.onlyOnSale,\n sortBy: previous.sortBy,\n isMap: previous.isMap,\n isFullscreen: previous.isFullscreen,\n viewAsGuest: previous.viewAsGuest\n }\n }\n\n const defaults = getDefaultOptionsByView(view)\n return {\n ...defaults,\n ...previous,\n ...current,\n view,\n vendor\n }\n}\n\nfunction* handleFetchOnSale(address: string, view: View) {\n yield put(\n fetchItemsRequest({\n filters: { creator: address, isOnSale: true }\n })\n )\n\n yield put(\n fetchNFTsRequest({\n view,\n vendor: VendorName.DECENTRALAND,\n params: { first: MAX_QUERY_SIZE, skip: 0, onlyOnSale: true, address }\n })\n )\n}\n\nfunction* handleFetchSales(address: string, page: number) {\n yield put(\n fetchSalesRequest({\n first: SALES_PER_PAGE,\n skip: (page - 1) * SALES_PER_PAGE,\n seller: address,\n sortBy: SaleSortBy.RECENTLY_SOLD\n })\n )\n\n const result: { failure: FetchSalesFailureAction } = yield race({\n success: take(FETCH_SALES_SUCCESS),\n failure: take(FETCH_SALES_FAILURE)\n })\n\n if (result.failure) {\n return\n }\n\n const sales: ReturnType<typeof getSales> = yield select(getSales)\n\n const { itemSales, tokenSales } = sales.reduce(\n (acc: { itemSales: Sale[]; tokenSales: Sale[] }, sale) => {\n if (sale.type === SaleType.MINT) {\n acc.itemSales.push(sale)\n } else {\n acc.tokenSales.push(sale)\n }\n return acc\n },\n { itemSales: [], tokenSales: [] }\n )\n\n for (const itemSale of itemSales) {\n yield put(fetchItemRequest(itemSale.contractAddress, itemSale.itemId!))\n }\n\n for (const tokenSale of tokenSales) {\n yield put(fetchNFTRequest(tokenSale.contractAddress, tokenSale.tokenId))\n }\n}\n\nfunction* handleFetchCollections(\n page: number,\n creator: string,\n sortBy: SortBy,\n search?: string\n) {\n yield put(\n fetchCollectionsRequest(\n {\n first: COLLECTIONS_PER_PAGE,\n skip: (page - 1) * COLLECTIONS_PER_PAGE,\n creator,\n search,\n sortBy: getCollectionSortBy(sortBy)\n },\n true\n )\n )\n}\n\n// TODO: Consider moving this should live to each vendor\nfunction* deriveCurrentOptions(\n previous: BrowseOptions,\n current: BrowseOptions\n) {\n let newOptions = {\n ...current,\n assetType: current.assetType || previous.assetType,\n section: current.section || previous.section\n }\n\n const nextCategory = getCategoryFromSection(newOptions.section!)\n\n switch (nextCategory) {\n case NFTCategory.WEARABLE: {\n const prevCategory = getCategoryFromSection(previous.section!)\n\n // Category specific logic to keep filters if the category doesn't change\n if (prevCategory && prevCategory === nextCategory) {\n newOptions = {\n rarities: yield select(getRarities),\n wearableGenders: yield select(getWearableGenders),\n search: yield select(getSearch),\n network: yield select(getNetwork),\n contracts: yield select(getContracts),\n onlySmart: yield select(getOnlySmart),\n ...newOptions\n }\n }\n break\n }\n case NFTCategory.EMOTE: {\n const prevCategory = getCategoryFromSection(previous.section!)\n\n // Category specific logic to keep filters if the category doesn't change\n if (prevCategory && prevCategory === nextCategory) {\n newOptions = {\n rarities: yield select(getRarities),\n ...newOptions\n }\n }\n break\n }\n default: {\n newOptions = { ...newOptions, assetType: AssetType.NFT }\n }\n }\n\n return newOptions\n}\n\nfunction deriveView(previous: BrowseOptions, current: BrowseOptions) {\n return previous.page! < current.page!\n ? View.LOAD_MORE\n : current.view || previous.view\n}\n\nfunction deriveVendor(previous: BrowseOptions, current: BrowseOptions) {\n return current.vendor || previous.vendor || VendorName.DECENTRALAND\n}\n\nfunction shouldResetOptions(previous: BrowseOptions, current: BrowseOptions) {\n return (\n (current.vendor && current.vendor !== previous.vendor) ||\n (current.section && current.section !== previous.section) ||\n (current.assetType && current.assetType !== previous.assetType)\n )\n}\n\nfunction* handleRedirectToActivity() {\n yield put(push(locations.activity()))\n}\n","import { takeEvery, call, put } from 'redux-saga/effects'\nimport { Atlas, AtlasTile } from 'decentraland-ui'\nimport { ATLAS_SERVER_URL } from '../../modules/vendor/decentraland'\nimport {\n FETCH_TILES_REQUEST,\n FetchTilesRequestAction,\n fetchTilesSuccess,\n fetchTilesFailure\n} from './actions'\nimport {\n ConnectWalletSuccessAction,\n CONNECT_WALLET_SUCCESS\n} from 'decentraland-dapps/dist/modules/wallet/actions'\nimport { fetchNFTsRequest } from '../nft/actions'\nimport { VendorName } from '../vendor'\nimport { View } from '../ui/types'\n\nexport function* tileSaga() {\n yield takeEvery(FETCH_TILES_REQUEST, handleFetchTilesRequest)\n yield takeEvery(CONNECT_WALLET_SUCCESS, handleConnectWalletSuccess)\n}\n\nfunction* handleFetchTilesRequest(_action: FetchTilesRequestAction) {\n try {\n const tiles: Record<string, AtlasTile> = yield call(() =>\n Atlas.fetchTiles(ATLAS_SERVER_URL + '/v1/tiles')\n )\n yield put(fetchTilesSuccess(tiles))\n } catch (error) {\n yield put(fetchTilesFailure(error.message))\n }\n}\n\nfunction* handleConnectWalletSuccess(action: ConnectWalletSuccessAction) {\n yield put(\n fetchNFTsRequest({\n vendor: VendorName.DECENTRALAND,\n view: View.ATLAS,\n params: {\n first: 1000,\n skip: 0,\n address: action.payload.wallet.address.toLowerCase()\n },\n filters: {\n isLand: true\n }\n })\n )\n}\n","import { all, takeEvery, put } from 'redux-saga/effects'\nimport { toastSaga as baseToastSaga } from 'decentraland-dapps/dist/modules/toast/sagas'\nimport { showToast } from 'decentraland-dapps/dist/modules/toast/actions'\nimport { getStoreUpdateSucessToast } from './toasts'\nimport { UPDATE_STORE_SUCCESS } from '../store/actions'\n\nexport function* toastSaga() {\n yield all([baseToastSaga(), customToastSaga()])\n}\n\nfunction* customToastSaga() {\n yield all([successToastSagas()])\n}\n\nfunction* successToastSagas() {\n yield takeEvery(UPDATE_STORE_SUCCESS, handleStoreUpdateSuccess)\n}\n\nfunction* handleStoreUpdateSuccess() {\n yield put(showToast(getStoreUpdateSucessToast()))\n}\n","import { ToastType } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nexport function getStoreUpdateSucessToast() {\n return {\n type: ToastType.INFO,\n title: t('toast.store_update_success.title'),\n body: t('toast.store_update_success.body'),\n timeout: 6000,\n closable: true\n }\n}\n","import { createTranslationSaga } from 'decentraland-dapps/dist/modules/translation/sagas'\nimport * as translations from './locales'\n\nexport const translationSaga = createTranslationSaga({\n translations\n})\n","import { takeEvery, put, select } from 'redux-saga/effects'\nimport {\n CONNECT_WALLET_SUCCESS,\n ConnectWalletSuccessAction\n} from 'decentraland-dapps/dist/modules/wallet/actions'\nimport { push, getLocation } from 'connected-react-router'\nimport { locations } from '../routing/locations'\n\nexport function* uiSaga() {\n yield takeEvery(CONNECT_WALLET_SUCCESS, handleConnectWalletSuccess)\n}\n\nfunction* handleConnectWalletSuccess(_action: ConnectWalletSuccessAction) {\n const location: ReturnType<typeof getLocation> = yield select(getLocation)\n if (location.pathname === locations.signIn()) {\n yield put(push(locations.defaultCurrentAccount()))\n }\n}\n","import { takeEvery, all, put } from 'redux-saga/effects'\nimport { Network, NFTCategory } from '@dcl/schemas'\nimport { ContractName } from 'decentraland-transactions'\nimport { createWalletSaga } from 'decentraland-dapps/dist/modules/wallet/sagas'\nimport {\n ConnectWalletSuccessAction,\n CONNECT_WALLET_SUCCESS,\n ChangeAccountAction,\n ChangeNetworkAction,\n CHANGE_ACCOUNT,\n CHANGE_NETWORK\n} from 'decentraland-dapps/dist/modules/wallet/actions'\nimport { fetchAuthorizationsRequest } from 'decentraland-dapps/dist/modules/authorization/actions'\nimport {\n Authorization,\n AuthorizationType\n} from 'decentraland-dapps/dist/modules/authorization/types'\nimport { getContractNames } from '../vendor'\nimport { contracts, getContract } from '../contract/utils'\nimport { isPartner } from '../vendor/utils'\nimport { TRANSACTIONS_API_URL } from './utils'\nimport { config } from '../../config'\n\nconst baseWalletSaga = createWalletSaga({\n CHAIN_ID: Number(config.get('CHAIN_ID')!),\n POLL_INTERVAL: 0,\n TRANSACTIONS_API_URL\n})\n\nexport function* walletSaga() {\n yield all([baseWalletSaga(), fullWalletSaga()])\n}\n\nfunction* fullWalletSaga() {\n yield takeEvery(CONNECT_WALLET_SUCCESS, handleWallet)\n yield takeEvery(CHANGE_ACCOUNT, handleWallet)\n yield takeEvery(CHANGE_NETWORK, handleWallet)\n}\n\nfunction* handleWallet(\n action: ConnectWalletSuccessAction | ChangeAccountAction | ChangeNetworkAction\n) {\n const { address } = action.payload.wallet\n\n const contractNames = getContractNames()\n\n const marketplaceEthereum = getContract({\n name: contractNames.MARKETPLACE,\n network: Network.ETHEREUM\n })\n\n const marketplaceMatic = getContract({\n name: contractNames.MARKETPLACE,\n network: Network.MATIC\n })\n\n const legacyMarketplaceMatic = getContract({\n name: contractNames.LEGACY_MARKETPLACE,\n network: Network.MATIC\n })\n\n const marketplaceAdapter = getContract({\n name: contractNames.MARKETPLACE_ADAPTER\n })\n\n const bidsEthereum = getContract({\n name: contractNames.BIDS,\n network: Network.ETHEREUM\n })\n\n const bidsMatic = getContract({\n name: contractNames.BIDS,\n network: Network.MATIC\n })\n\n const manaEthereum = getContract({\n name: contractNames.MANA,\n network: Network.ETHEREUM\n })\n\n const manaMatic = getContract({\n name: contractNames.MANA,\n network: Network.MATIC\n })\n\n const collectionStore = getContract({\n name: contractNames.COLLECTION_STORE,\n network: Network.MATIC\n })\n\n const authorizations: Authorization[] = []\n\n authorizations.push({\n address,\n authorizedAddress: marketplaceEthereum.address,\n contractAddress: manaEthereum.address,\n contractName: ContractName.MANAToken,\n chainId: manaEthereum.chainId,\n type: AuthorizationType.ALLOWANCE\n })\n\n authorizations.push({\n address,\n authorizedAddress: marketplaceMatic.address,\n contractAddress: manaMatic.address,\n contractName: ContractName.MANAToken,\n chainId: manaMatic.chainId,\n type: AuthorizationType.ALLOWANCE\n })\n\n authorizations.push({\n address,\n authorizedAddress: legacyMarketplaceMatic.address,\n contractAddress: manaMatic.address,\n contractName: ContractName.MANAToken,\n chainId: manaMatic.chainId,\n type: AuthorizationType.ALLOWANCE\n })\n\n authorizations.push({\n address,\n authorizedAddress: marketplaceAdapter.address,\n contractAddress: manaEthereum.address,\n contractName: ContractName.MANAToken,\n chainId: manaEthereum.chainId,\n type: AuthorizationType.ALLOWANCE\n })\n\n authorizations.push({\n address,\n authorizedAddress: bidsEthereum.address,\n contractAddress: manaEthereum.address,\n contractName: ContractName.MANAToken,\n chainId: manaEthereum.chainId,\n type: AuthorizationType.ALLOWANCE\n })\n\n authorizations.push({\n address,\n authorizedAddress: bidsMatic.address,\n contractAddress: manaMatic.address,\n contractName: ContractName.MANAToken,\n chainId: manaMatic.chainId,\n type: AuthorizationType.ALLOWANCE\n })\n\n authorizations.push({\n address,\n authorizedAddress: collectionStore.address,\n contractAddress: manaMatic.address,\n contractName: ContractName.MANAToken,\n chainId: manaMatic.chainId,\n type: AuthorizationType.ALLOWANCE\n })\n\n for (const contract of contracts.filter(c => c.category !== null)) {\n const marketplace = getContract({\n name:\n contract.vendor && isPartner(contract.vendor)\n ? contractNames.MARKETPLACE_ADAPTER\n : contractNames.MARKETPLACE,\n network: contract.network\n })!\n\n // Skip SuperRare contract since it's not ERC721 compliant (lacks approveForAll)\n if (contract.name === contractNames.SUPER_RARE) {\n continue\n }\n\n authorizations.push({\n address,\n authorizedAddress: marketplace.address,\n contractAddress: contract.address,\n contractName:\n contract.category === NFTCategory.WEARABLE &&\n contract.network === Network.MATIC\n ? ContractName.ERC721CollectionV2\n : ContractName.ERC721,\n chainId: contract.chainId,\n type: AuthorizationType.APPROVAL\n })\n }\n\n yield put(fetchAuthorizationsRequest(authorizations))\n}\n","import { BaseAPI } from 'decentraland-dapps/dist/lib/api'\nimport { Item } from '@dcl/schemas'\nimport { NFT_SERVER_URL } from '../nft'\nimport { ItemFilters, ItemResponse } from './types'\n\nclass ItemAPI extends BaseAPI {\n fetch = async (filters: ItemFilters = {}): Promise<ItemResponse> => {\n const queryParams = this.buildItemsQueryString(filters)\n return this.request('get', `/items?${queryParams}`)\n }\n\n fetchOne = async (contractAddress: string, itemId: string): Promise<Item> => {\n const response: ItemResponse = await this.request('get', '/items', {\n contractAddress,\n itemId\n })\n\n if (response.data.length === 0) {\n throw new Error('Not found')\n }\n\n return response.data[0]\n }\n\n private buildItemsQueryString(filters: ItemFilters): string {\n const queryParams = new URLSearchParams()\n\n if (filters.first) {\n queryParams.append('first', filters.first.toString())\n }\n\n // TODO: remove\n // queryParams.append('first', '1000')\n\n if (filters.skip) {\n queryParams.append('skip', filters.skip.toString())\n }\n\n if (filters.sortBy) {\n queryParams.append('sortBy', filters.sortBy)\n }\n\n if (filters.category) {\n queryParams.append('category', filters.category)\n }\n\n if (filters.creator) {\n queryParams.append('creator', filters.creator)\n }\n\n if (filters.isSoldOut) {\n queryParams.append('isSoldOut', 'true')\n }\n\n if (filters.isOnSale) {\n queryParams.append('isOnSale', 'true')\n }\n\n if (filters.search) {\n queryParams.set('search', filters.search)\n }\n\n if (filters.rarities) {\n for (const rarity of filters.rarities) {\n queryParams.append('rarity', rarity)\n }\n }\n if (filters.isWearableHead) {\n queryParams.append('isWearableHead', 'true')\n }\n\n if (filters.isWearableAccessory) {\n queryParams.append('isWearableAccessory', 'true')\n }\n\n if (filters.isWearableSmart) {\n queryParams.append('isWearableSmart', 'true')\n }\n\n if (filters.wearableCategory) {\n queryParams.append('wearableCategory', filters.wearableCategory)\n }\n if (filters.wearableGenders) {\n for (const wearableGender of filters.wearableGenders) {\n queryParams.append('wearableGender', wearableGender)\n }\n }\n if (filters.contractAddress) {\n queryParams.append('contractAddress', filters.contractAddress)\n }\n if (filters.itemId) {\n queryParams.append('itemId', filters.itemId)\n }\n if (filters.network) {\n queryParams.append('network', filters.network)\n }\n\n return queryParams.toString()\n }\n}\n\nexport const itemAPI = new ItemAPI(NFT_SERVER_URL)\n","import { Item } from '@dcl/schemas'\nimport { put, takeEvery } from '@redux-saga/core/effects'\nimport { ContractName, getContract } from 'decentraland-transactions'\nimport { sendTransaction } from 'decentraland-dapps/dist/modules/wallet/utils'\nimport { call, select } from 'redux-saga/effects'\nimport { itemAPI } from '../vendor/decentraland/item/api'\nimport { getWallet } from '../wallet/selectors'\nimport {\n buyItemFailure,\n BuyItemRequestAction,\n buyItemSuccess,\n BUY_ITEM_REQUEST,\n fetchItemsFailure,\n FetchItemsRequestAction,\n fetchItemsSuccess,\n FETCH_ITEMS_REQUEST,\n fetchItemFailure,\n FetchItemRequestAction,\n fetchItemSuccess,\n FETCH_ITEM_REQUEST\n} from './actions'\n\nexport function* itemSaga() {\n yield takeEvery(FETCH_ITEMS_REQUEST, handleFetchItemsRequest)\n yield takeEvery(BUY_ITEM_REQUEST, handleBuyItem)\n yield takeEvery(FETCH_ITEM_REQUEST, handleFetchItemRequest)\n}\n\nfunction* handleFetchItemsRequest(action: FetchItemsRequestAction) {\n const { filters } = action.payload\n try {\n const { data, total }: { data: Item[]; total: number } = yield call(\n [itemAPI, 'fetch'],\n filters\n )\n\n yield put(fetchItemsSuccess(data, total, action.payload, Date.now()))\n } catch (error) {\n yield put(fetchItemsFailure(error.message, action.payload))\n }\n}\n\nfunction* handleFetchItemRequest(action: FetchItemRequestAction) {\n const { contractAddress, tokenId } = action.payload\n try {\n const item: Item = yield call(\n [itemAPI, 'fetchOne'],\n contractAddress,\n tokenId\n )\n yield put(fetchItemSuccess(item))\n } catch (error) {\n yield put(fetchItemFailure(contractAddress, tokenId, error.message))\n }\n}\n\nfunction* handleBuyItem(action: BuyItemRequestAction) {\n try {\n const { item } = action.payload\n\n const wallet: ReturnType<typeof getWallet> = yield select(getWallet)\n\n if (!wallet) {\n throw new Error('A defined wallet is required to buy an item')\n }\n\n const contract = getContract(ContractName.CollectionStore, item.chainId)\n\n const txHash: string = yield call(\n sendTransaction,\n contract,\n collectionStore =>\n collectionStore.buy([\n [item.contractAddress, [item.itemId], [item.price], [wallet.address]]\n ])\n )\n\n yield put(buyItemSuccess(item.chainId, txHash, item))\n } catch (error) {\n yield put(buyItemFailure(error.message))\n }\n}\n","import { call, takeEvery, put, select } from '@redux-saga/core/effects'\nimport { fetchItemsRequest } from '../item/actions'\nimport { getItemsByContractAddress } from '../item/selectors'\nimport { collectionAPI } from '../vendor/decentraland'\nimport { CollectionResponse } from '../vendor/decentraland/collection/types'\nimport {\n fetchCollectionsFailure,\n FetchCollectionsRequestAction,\n fetchCollectionsSuccess,\n fetchSingleCollectionFailure,\n FetchSingleCollectionRequestAction,\n fetchSingleCollectionSuccess,\n FETCH_COLLECTIONS_REQUEST,\n FETCH_SINGLE_COLLECTION_REQUEST\n} from './actions'\n\nexport function* collectionSaga() {\n yield takeEvery(FETCH_COLLECTIONS_REQUEST, handleFetchCollectionsRequest)\n yield takeEvery(\n FETCH_SINGLE_COLLECTION_REQUEST,\n handleFetchSingleCollectionRequest\n )\n}\n\nexport function* handleFetchCollectionsRequest(\n action: FetchCollectionsRequestAction\n) {\n const { filters, shouldFetchItems } = action.payload\n\n try {\n const { data: collections, total }: CollectionResponse = yield call(\n [collectionAPI, collectionAPI.fetch],\n filters\n )\n\n yield put(fetchCollectionsSuccess(collections, total))\n\n if (shouldFetchItems) {\n const itemsByContractAddress: ReturnType<typeof getItemsByContractAddress> = yield select(\n getItemsByContractAddress\n )\n\n for (let collection of collections) {\n const items = itemsByContractAddress[collection.contractAddress]\n\n if (!items || items.length !== collection.size) {\n yield put(\n fetchItemsRequest({\n filters: {\n first: collection.size,\n contractAddress: collection.contractAddress\n }\n })\n )\n }\n }\n }\n } catch (error) {\n yield put(fetchCollectionsFailure(error.message))\n }\n}\n\nexport function* handleFetchSingleCollectionRequest(\n action: FetchSingleCollectionRequestAction\n) {\n const { contractAddress, shouldFetchItems } = action.payload\n\n try {\n const { data: collections }: CollectionResponse = yield call(\n [collectionAPI, collectionAPI.fetch],\n { contractAddress }\n )\n\n if (collections.length === 0) {\n yield put(\n fetchSingleCollectionFailure(\n `Could not get Collection \"${contractAddress}\"`\n )\n )\n return\n }\n\n const [collection] = collections\n\n yield put(fetchSingleCollectionSuccess(collection))\n\n if (shouldFetchItems) {\n const itemsByContractAddress: ReturnType<typeof getItemsByContractAddress> = yield select(\n getItemsByContractAddress\n )\n\n const items = itemsByContractAddress[collection.contractAddress]\n\n if (!items || items.length !== collection.size) {\n yield put(\n fetchItemsRequest({\n filters: {\n first: collection.size,\n contractAddress: collection.contractAddress\n }\n })\n )\n }\n }\n } catch (error) {\n yield put(fetchSingleCollectionFailure(error.message))\n }\n}\n","import { call, takeEvery, put } from '@redux-saga/core/effects'\nimport { saleAPI } from '../vendor/decentraland'\nimport { SaleResponse } from '../vendor/decentraland/sale/types'\nimport {\n fetchSalesFailure,\n FetchSalesRequestAction,\n fetchSalesSuccess,\n FETCH_SALES_REQUEST\n} from './actions'\n\nexport function* saleSaga() {\n yield takeEvery(FETCH_SALES_REQUEST, handleFetchSalesRequest)\n}\n\nexport function* handleFetchSalesRequest(action: FetchSalesRequestAction) {\n const { filters } = action.payload\n\n try {\n const { data: sales, total }: SaleResponse = yield call(\n [saleAPI, saleAPI.fetch],\n filters\n )\n\n yield put(fetchSalesSuccess(sales, total))\n } catch (error) {\n yield put(fetchSalesFailure(error.message))\n }\n}\n","import { Network } from '@dcl/schemas'\nimport { call, takeEvery, put, all } from '@redux-saga/core/effects'\nimport { accountAPI } from '../vendor/decentraland'\nimport { AccountResponse } from '../vendor/decentraland/account/types'\nimport {\n fetchAccountMetricsFailure,\n FetchAccountMetricsRequestAction,\n fetchAccountMetricsSuccess,\n FETCH_ACCOUNT_METRICS_REQUEST\n} from './actions'\n\nexport function* accountSaga() {\n yield takeEvery(\n FETCH_ACCOUNT_METRICS_REQUEST,\n handleFetchAccountMetricsRequest\n )\n}\n\nexport function* handleFetchAccountMetricsRequest(\n action: FetchAccountMetricsRequestAction\n) {\n const { filters } = action.payload\n\n try {\n const results: AccountResponse[] = yield all([\n call([accountAPI, accountAPI.fetch], {\n ...filters,\n network: Network.ETHEREUM\n }),\n call([accountAPI, accountAPI.fetch], {\n ...filters,\n network: Network.MATIC\n })\n ])\n\n yield put(\n fetchAccountMetricsSuccess(filters, {\n [Network.ETHEREUM]: results[0].data,\n [Network.MATIC]: results[1].data\n })\n )\n } catch (error) {\n yield put(fetchAccountMetricsFailure(filters, error.message))\n }\n}\n","import { createSelector } from 'reselect'\nimport { RootState } from '../reducer'\nimport { getAddress } from '../wallet/selectors'\nimport { isValid } from './utils'\n\nexport const getState = (state: RootState) => state.identity\nexport const getData = (state: RootState) => getState(state).data\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getError = (state: RootState) => getState(state).error\n\nexport const getCurrentIdentity = createSelector(\n getData,\n getAddress,\n (identities, address) => {\n if (!address) {\n return null\n }\n\n const identity = identities[address]\n\n if (!isValid(identity)) {\n return null\n }\n\n return identity\n }\n)\n","import { select, put, race, take, call } from 'redux-saga/effects'\nimport { getCurrentIdentity } from './selectors'\nimport {\n generateIdentityRequest,\n GenerateIdentitySuccessAction,\n GENERATE_IDENTITY_FAILURE,\n GENERATE_IDENTITY_SUCCESS\n} from './actions'\nimport { getAddress } from '../wallet/selectors'\nimport {\n connectWalletRequest,\n CONNECT_WALLET_SUCCESS,\n CONNECT_WALLET_FAILURE,\n ConnectWalletSuccessAction\n} from 'decentraland-dapps/dist/modules/wallet/actions'\nimport { AuthIdentity } from 'dcl-crypto'\nimport { config } from '../../config'\n\nconst ONE_MONTH_IN_MINUTES = 31 * 24 * 60\n\nexport const IDENTITY_EXPIRATION_IN_MINUTES = (() => {\n const expiration = config.get('IDENTITY_EXPIRATION_MINUTES')\n\n if (!expiration) {\n return ONE_MONTH_IN_MINUTES\n }\n\n return Number(expiration)\n})()\n\nconst IDENTITY_ERROR = 'Could not get identity'\n\n// Helper that always yields a valid identity\n// If the wallet is not connected it will try to connect\n// If the identity is invalid or has not been generated. It will try to generate it\nexport function* getIdentity(): Generator<any, AuthIdentity, any> {\n const address: ReturnType<typeof getAddress> = yield select(getAddress)\n\n if (!address) {\n yield put(connectWalletRequest())\n\n const { success }: { success: ConnectWalletSuccessAction } = yield race({\n success: take(CONNECT_WALLET_SUCCESS),\n failure: take(CONNECT_WALLET_FAILURE)\n })\n\n if (success) {\n return yield call(getIdentity)\n }\n\n throw new Error(IDENTITY_ERROR)\n }\n\n const identity: ReturnType<typeof getCurrentIdentity> = yield select(\n getCurrentIdentity\n )\n\n if (identity) {\n return identity\n }\n\n yield put(generateIdentityRequest(address))\n\n const { success }: { success: GenerateIdentitySuccessAction } = yield race({\n success: take(GENERATE_IDENTITY_SUCCESS),\n failure: take(GENERATE_IDENTITY_FAILURE)\n })\n\n if (success) {\n return yield call(getIdentity)\n } else {\n throw new Error(IDENTITY_ERROR)\n }\n}\n\n// Return if an identity is valid according to its expiration\n// or its nullity\nexport function isValid(identity?: AuthIdentity | null) {\n return !!identity && Date.now() < +new Date(identity.expiration)\n}\n","import { createSelector } from 'reselect'\nimport { Store } from './types'\nimport { RootState } from '../reducer'\n\nexport const getState = (state: RootState) => state.store\nexport const getData = (state: RootState) => getState(state).data\nexport const getStoresByOwner = getData\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getLocalStore = (state: RootState) => getState(state).localStore\nexport const getError = (state: RootState) => getState(state).error\n\nexport const getIsLocalStoreDirty = createSelector<\n RootState,\n Record<string, Store>,\n Store | null,\n boolean\n>(getData, getLocalStore, (storeData, localStore) => {\n return (\n !!localStore &&\n !Object.values(storeData).some(store => store === localStore)\n )\n})\n","import { call, put, select, takeEvery } from 'redux-saga/effects'\nimport { LocationChangeAction, LOCATION_CHANGE } from 'connected-react-router'\nimport { getAddress } from 'decentraland-dapps/dist/modules/wallet/selectors'\nimport { AuthIdentity } from 'dcl-crypto'\nimport { CatalystClient } from 'dcl-catalyst-client'\nimport { Entity } from 'dcl-catalyst-commons'\nimport { getIdentity } from '../identity/utils'\nimport {\n fetchStoreFailure,\n FetchStoreRequestAction,\n fetchStoreSuccess,\n FETCH_STORE_REQUEST,\n updateStoreFailure,\n UpdateStoreRequestAction,\n updateStoreSuccess,\n UPDATE_STORE_REQUEST,\n revertLocalStore\n} from './actions'\nimport {\n deployStoreEntity,\n fetchStoreEntity,\n getStoreFromEntity\n} from './utils'\nimport { getIsLocalStoreDirty } from './selectors'\n\nexport function* storeSaga(client: CatalystClient) {\n yield takeEvery(FETCH_STORE_REQUEST, handleFetchStoreRequest)\n yield takeEvery(UPDATE_STORE_REQUEST, handleUpdateStoreRequest)\n yield takeEvery(LOCATION_CHANGE, handleLocationChange)\n\n function* handleLocationChange({\n payload: { location }\n }: LocationChangeAction) {\n const isLocalStoreDirty: boolean = yield select(getIsLocalStoreDirty)\n if (!isLocalStoreDirty) {\n return\n }\n\n const address: string = yield select(getAddress)\n const allowed = ['section=store_settings&', 'viewAsGuest=true']\n if (!allowed.some(value => location.search.includes(value))) {\n yield put(revertLocalStore(address))\n }\n }\n\n function* handleFetchStoreRequest({\n payload: { address }\n }: FetchStoreRequestAction) {\n try {\n const storeEntity: Entity | null = yield call(\n fetchStoreEntity,\n client,\n address\n )\n\n yield put(\n fetchStoreSuccess(\n storeEntity ? getStoreFromEntity(storeEntity) : undefined\n )\n )\n } catch (e) {\n yield put(fetchStoreFailure(e.message))\n }\n }\n\n function* handleUpdateStoreRequest({\n payload: { store }\n }: UpdateStoreRequestAction) {\n try {\n const identity: AuthIdentity = yield call(getIdentity)\n\n yield call(deployStoreEntity, client, identity, store)\n\n yield put(updateStoreSuccess(store))\n } catch (e) {\n yield put(updateStoreFailure(e.message))\n }\n }\n}\n","import {\n takeLatest,\n put,\n call\n} from 'redux-saga/effects'\nimport { Eth } from 'web3x/eth'\nimport { Personal } from 'web3x/personal'\nimport { Address } from 'web3x/address'\nimport { bufferToHex } from 'web3x/utils'\nimport { Account } from 'web3x/account'\nimport { Authenticator, AuthIdentity } from 'dcl-crypto'\nimport { getEth } from '../wallet/utils'\n\nimport {\n GENERATE_IDENTITY_REQUEST,\n GenerateIdentityRequestAction,\n generateIdentityFailure,\n generateIdentitySuccess\n} from './actions'\nimport { IDENTITY_EXPIRATION_IN_MINUTES } from './utils'\n\nexport function* identitySaga() {\n yield takeLatest(GENERATE_IDENTITY_REQUEST, handleGenerateIdentityRequest)\n}\n\nfunction* handleGenerateIdentityRequest(action: GenerateIdentityRequestAction) {\n const address = action.payload.address.toLowerCase()\n\n try {\n const eth: Eth = yield call(getEth)\n const account = Account.create()\n\n const payload = {\n address: account.address.toString(),\n publicKey: bufferToHex(account.publicKey),\n privateKey: bufferToHex(account.privateKey)\n }\n\n const personal = new Personal(eth.provider)\n\n const identity: AuthIdentity = yield Authenticator.initializeAuthChain(\n address,\n payload,\n IDENTITY_EXPIRATION_IN_MINUTES,\n message => personal.sign(message, Address.fromString(address), '')\n )\n\n yield put(generateIdentitySuccess(address, identity))\n } catch (error) {\n yield put(generateIdentityFailure(address, error))\n }\n}\n","import { all } from 'redux-saga/effects'\nimport { authorizationSaga } from 'decentraland-dapps/dist/modules/authorization/sagas'\nimport { createAnalyticsSaga } from 'decentraland-dapps/dist/modules/analytics/sagas'\nimport { createProfileSaga } from 'decentraland-dapps/dist/modules/profile/sagas'\nimport { transactionSaga } from 'decentraland-dapps/dist/modules/transaction/sagas'\nimport { CatalystClient } from 'dcl-catalyst-client'\n\nimport { bidSaga } from './bid/sagas'\nimport { nftSaga } from './nft/sagas'\nimport { orderSaga } from './order/sagas'\nimport { proximitySaga } from './proximity/sagas'\nimport { routingSaga } from './routing/sagas'\nimport { tileSaga } from './tile/sagas'\nimport { toastSaga } from './toast/sagas'\nimport { translationSaga } from './translation/sagas'\nimport { uiSaga } from './ui/sagas'\nimport { walletSaga } from './wallet/sagas'\nimport { itemSaga } from './item/sagas'\nimport { collectionSaga } from './collection/sagas'\nimport { saleSaga } from './sale/sagas'\nimport { accountSaga } from './account/sagas'\nimport { storeSaga } from './store/sagas'\nimport { identitySaga } from './identity/sagas'\nimport { peerUrl } from '../lib/environment'\n\nconst analyticsSaga = createAnalyticsSaga()\nconst profileSaga = createProfileSaga({ peerUrl })\nconst catalystClient = new CatalystClient({\n catalystUrl: peerUrl\n})\n\nexport function* rootSaga() {\n yield all([\n analyticsSaga(),\n authorizationSaga(),\n bidSaga(),\n itemSaga(),\n nftSaga(),\n orderSaga(),\n profileSaga(),\n proximitySaga(),\n routingSaga(),\n tileSaga(),\n toastSaga(),\n transactionSaga(),\n translationSaga(),\n uiSaga(),\n walletSaga(),\n collectionSaga(),\n saleSaga(),\n accountSaga(),\n collectionSaga(),\n storeSaga(catalystClient),\n identitySaga()\n ])\n}\n","import { applyMiddleware, compose, createStore } from 'redux'\nimport createSagasMiddleware from 'redux-saga'\nimport { routerMiddleware } from 'connected-react-router'\nimport { createLogger } from 'redux-logger'\nimport { Env } from '@dcl/ui-env'\nimport { createStorageMiddleware } from 'decentraland-dapps/dist/modules/storage/middleware'\nimport { storageReducerWrapper } from 'decentraland-dapps/dist/modules/storage/reducer'\nimport { createTransactionMiddleware } from 'decentraland-dapps/dist/modules/transaction/middleware'\nimport { createAnalyticsMiddleware } from 'decentraland-dapps/dist/modules/analytics/middleware'\nimport { CLEAR_TRANSACTIONS } from 'decentraland-dapps/dist/modules/transaction/actions'\n\nimport { createRootReducer, RootState } from './reducer'\nimport { rootSaga } from './sagas'\nimport { fetchTilesRequest } from './tile/actions'\nimport { ARCHIVE_BID, UNARCHIVE_BID } from './bid/actions'\nimport { GENERATE_IDENTITY_SUCCESS } from './identity/actions'\nimport { SET_IS_TRYING_ON } from './ui/preview/actions'\nimport { config } from '../config'\n\nexport const history = require('history').createBrowserHistory()\n\nexport function initStore() {\n const anyWindow = window as any\n\n const isDev = config.is(Env.DEVELOPMENT)\n\n const composeEnhancers =\n isDev && anyWindow.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? anyWindow.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n stateSanitizer: (state: RootState) => {\n const { tile, proximity, ...sanitized } = { ...state }\n return sanitized\n }\n })\n : compose\n\n const rootReducer = storageReducerWrapper(createRootReducer(history))\n\n const sagasMiddleware = createSagasMiddleware()\n const loggerMiddleware = createLogger({\n collapsed: () => true,\n predicate: (_: any, action) => isDev || action.type.includes('Failure')\n })\n const transactionMiddleware = createTransactionMiddleware()\n const { storageMiddleware, loadStorageMiddleware } = createStorageMiddleware({\n storageKey: 'marketplace-v2', // this is the key used to save the state in localStorage (required)\n paths: [\n ['ui', 'archivedBidIds'],\n ['ui', 'preview', 'isTryingOn'],\n ['identity', 'data']\n ], // array of paths from state to be persisted (optional)\n actions: [\n CLEAR_TRANSACTIONS,\n ARCHIVE_BID,\n UNARCHIVE_BID,\n GENERATE_IDENTITY_SUCCESS,\n SET_IS_TRYING_ON\n ], // array of actions types that will trigger a SAVE (optional)\n migrations: {} // migration object that will migrate your localstorage (optional)\n })\n const analyticsMiddleware = createAnalyticsMiddleware(\n config.get('SEGMENT_API_KEY')!\n )\n\n const middleware = applyMiddleware(\n sagasMiddleware,\n routerMiddleware(history),\n loggerMiddleware,\n transactionMiddleware,\n storageMiddleware,\n analyticsMiddleware\n )\n const enhancer = composeEnhancers(middleware)\n const store = createStore(rootReducer, enhancer)\n\n sagasMiddleware.run(rootSaga)\n loadStorageMiddleware(store)\n\n if (isDev) {\n const _window = window as any\n _window.getState = store.getState\n }\n\n // fetch tiles\n store.dispatch(fetchTilesRequest())\n\n return store\n}\n","export enum NavigationTab {\n LANDS = 'lands',\n BROWSE = 'browse',\n COLLECTIBLES = 'collectibles',\n MY_STORE = 'my_store',\n ACTIVITY = 'activity'\n}\n\nexport type Props = {\n activeTab?: NavigationTab\n isFullscreen?: boolean\n}\n\nexport type MapStateProps = {}\nexport type MapDispatchProps = {}\n","import { PureComponent } from 'react'\nimport { Button, Column, Header, Popup } from 'decentraland-ui'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Props, State } from './IntroPopup.types'\nimport './IntroPopup.css'\n\nconst POLYGON_INTRO_POPUP_LOCAL_STORAGE_KEY = 'polygon-intro-popup'\n\nexport default class IntroPopup extends PureComponent<Props, State> {\n state: State = {\n open: !localStorage.getItem(POLYGON_INTRO_POPUP_LOCAL_STORAGE_KEY)\n }\n\n handleDismiss = () => {\n localStorage.setItem(POLYGON_INTRO_POPUP_LOCAL_STORAGE_KEY, '1')\n this.setState({ open: false })\n }\n\n render() {\n const { open } = this.state\n return (\n <>\n {open ? <div className=\"IntroPopupOverlay\" /> : null}\n <Popup\n position=\"top center\"\n open={open}\n className=\"IntroPopup\"\n content={\n <Column>\n <Header>{t('intro_popup.title')}</Header>\n <p className=\"content\">\n <T\n id=\"intro_popup.content\"\n values={{\n br: (\n <>\n <br />\n <br />\n </>\n ),\n blog_link: (\n <a\n href=\"https://decentraland.org/blog/announcements/polygon-mana/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {t('intro_popup.blog_link')}\n </a>\n ),\n account_link: (\n <a\n href=\"https://account.decentraland.org\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {t('intro_popup.account_link')}\n </a>\n ),\n manage_account: <b>{t('intro_popup.manage_account')}</b>\n }}\n />\n </p>\n <Button primary size=\"small\" onClick={this.handleDismiss}>\n {t('intro_popup.dismiss')}\n </Button>\n </Column>\n }\n trigger={<div className=\"IntroPopupTarget\" />}\n />\n </>\n )\n }\n}\n","import React from 'react'\nimport { UserMenu as BaseUserMenu } from 'decentraland-dapps/dist/containers'\nimport { IntroPopup } from '../IntroPopup'\nimport { Props } from './UserMenu.types'\n\nexport default class UserMenu extends React.PureComponent<Props> {\n render() {\n return (\n <>\n <BaseUserMenu {...this.props} />\n <IntroPopup />\n </>\n )\n }\n}\n","import UserMenu from './UserMenu.container'\n\nexport default UserMenu\n","import { connect } from 'react-redux'\nimport { getLocation, push } from 'connected-react-router'\nimport { isPending } from 'decentraland-dapps/dist/modules/transaction/utils'\nimport {\n isConnected,\n isConnecting\n} from 'decentraland-dapps/dist/modules/wallet/selectors'\nimport { getTransactions } from '../../modules/transaction/selectors'\nimport { locations } from '../../modules/routing/locations'\nimport { RootState } from '../../modules/reducer'\nimport { MapStateProps, MapDispatch, MapDispatchProps } from './UserMenu.types'\nimport UserMenu from './UserMenu'\n\nconst mapState = (state: RootState): MapStateProps => {\n return {\n isSignedIn: isConnected(state),\n isSigningIn: isConnecting(state),\n isActivity: getLocation(state).pathname === locations.activity(),\n hasActivity: getTransactions(state).some(tx => isPending(tx.status))\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onClickActivity: () => dispatch(push(locations.activity())),\n onClickSettings: () => dispatch(push(locations.settings()))\n})\n\nexport default connect(mapState, mapDispatch)(UserMenu)\n","import React, { useCallback } from 'react'\nimport { Navbar as BaseNavbar } from 'decentraland-dapps/dist/containers'\n\nimport { locations } from '../../modules/routing/locations'\nimport UserMenu from '../UserMenu'\nimport { Props } from './Navbar.types'\nimport './Navbar.css'\n\nconst Navbar = (props: Props) => {\n const { pathname, onNavigate, isConnected } = props\n\n if (isConnected) {\n props = { ...props, rightMenu: <UserMenu /> }\n }\n\n const handleOnSignIn = useCallback(() => {\n onNavigate(locations.signIn())\n }, [onNavigate])\n\n const handleOnClickAccount = useCallback(() => {\n onNavigate(locations.settings())\n }, [onNavigate])\n\n return (\n <BaseNavbar\n {...props}\n activePage=\"marketplace\"\n isFullscreen={props.isFullscreen}\n isSignIn={pathname === locations.signIn()}\n onSignIn={handleOnSignIn}\n onClickAccount={handleOnClickAccount}\n />\n )\n}\n\nexport default React.memo(Navbar)\n","import { connect } from 'react-redux'\nimport { push, getLocation } from 'connected-react-router'\nimport { isPending } from 'decentraland-dapps/dist/modules/transaction/utils'\n\nimport { RootState } from '../../modules/reducer'\nimport { getTransactions } from '../../modules/transaction/selectors'\nimport { isConnected } from '../../modules/wallet/selectors'\nimport { MapStateProps, MapDispatch, MapDispatchProps } from './Navbar.types'\nimport Navbar from './Navbar'\n\nconst mapState = (state: RootState): MapStateProps => ({\n isConnected: isConnected(state),\n pathname: getLocation(state).pathname,\n hasPendingTransactions: getTransactions(state).some(tx =>\n isPending(tx.status)\n )\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path))\n})\n\nexport default connect(mapState, mapDispatch)(Navbar)\n","import React from 'react'\nimport { FooterProps } from 'decentraland-ui'\nimport { Footer as BaseFooter } from 'decentraland-dapps/dist/containers'\nimport * as tranlsations from '../../modules/translation/locales'\n\nconst locales = Object.keys(tranlsations)\n\nconst Footer = (props: FooterProps) => (\n <BaseFooter locales={locales} {...props} />\n)\n\nexport default React.memo(Footer)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Tabs, Mobile } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { locations } from '../../modules/routing/locations'\nimport { VendorName } from '../../modules/vendor'\nimport { SortBy } from '../../modules/routing/types'\nimport * as decentraland from '../../modules/vendor/decentraland'\nimport { Props, NavigationTab } from './Navigation.types'\n\nconst Navigation = (props: Props) => {\n const { activeTab, isFullscreen } = props\n return (\n <Tabs isFullscreen={isFullscreen}>\n <Tabs.Left>\n <Link to={locations.lands()}>\n <Tabs.Tab active={activeTab === NavigationTab.LANDS}>\n {t('navigation.land')}\n </Tabs.Tab>\n </Link>\n <Link\n to={locations.browse({\n section: decentraland.Section.WEARABLES,\n vendor: VendorName.DECENTRALAND,\n page: 1,\n sortBy: SortBy.RECENTLY_LISTED,\n onlyOnSale: true\n })}\n >\n <Tabs.Tab active={activeTab === NavigationTab.COLLECTIBLES}>\n {t('navigation.collectibles')}\n </Tabs.Tab>\n </Link>\n <Link to={locations.defaultCurrentAccount()}>\n <Tabs.Tab active={activeTab === NavigationTab.MY_STORE}>\n {t('navigation.my_store')}\n </Tabs.Tab>\n </Link>\n <Mobile>\n <Link to={locations.activity()}>\n <Tabs.Tab active={activeTab === NavigationTab.ACTIVITY}>\n {t('navigation.activity')}\n </Tabs.Tab>\n </Link>\n </Mobile>\n </Tabs.Left>\n </Tabs>\n )\n}\n\nexport default React.memo(Navigation)\n","import { createSelector } from 'reselect'\nimport { TileState } from './reducer'\nimport { RootState } from '../reducer'\nimport { Tile } from '../../components/Atlas/Atlas.types'\n\nexport const getState = (state: RootState) => state.tile\nexport const getTiles = (state: RootState) => getState(state).data\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getError = (state: RootState) => getState(state).error\n\nexport const getTilesByEstateId = createSelector<\n RootState,\n TileState['data'],\n Record<string, Tile[]>\n>(getTiles, tiles => {\n const tilesByEstateId: Record<string, Tile[]> = {}\n for (const tile of Object.values(tiles) as Tile[]) {\n if (tile.estate_id) {\n if (!tilesByEstateId[tile.estate_id]) {\n tilesByEstateId[tile.estate_id] = []\n }\n tilesByEstateId[tile.estate_id].push(tile)\n }\n }\n return tilesByEstateId\n})\n","import React from 'react'\nimport { Badge } from 'decentraland-ui'\nimport { Props } from './Coordinate.types'\nimport styles from './Coordinate.module.css'\n\nconst Coordinate = (props: Props) => {\n const { x, y, className } = props\n\n return (\n <Badge className={className} color=\"#37333D\">\n <i className={styles.pin} />\n {`${x},${y}`}\n </Badge>\n )\n}\n\nexport default React.memo(Coordinate)\n","import React from 'react'\nimport { Network } from '@dcl/schemas'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Mana as BaseMana, Popup } from 'decentraland-ui'\nimport { Props } from './Mana.types'\n\nconst Mana = (props: Props) => {\n const { withTooltip, ...manaProps } = props\n\n if (withTooltip && !manaProps.network) {\n throw new Error(\n \"You need to specify the MANA network if you're going to show a tooltip\"\n )\n }\n\n return (\n <Popup\n content={t('mana.running_on', {\n network: t(\n `networks.${(manaProps.network || Network.ETHEREUM).toLowerCase()}`\n )\n })}\n disabled={!withTooltip}\n position=\"top center\"\n trigger={<BaseMana {...manaProps} />}\n />\n )\n}\n\nexport default React.memo(Mana)\n","import * as React from 'react'\nimport { Address } from 'web3x/address'\nimport { Row, Section, Header } from 'decentraland-ui'\nimport { Profile } from 'decentraland-dapps/dist/containers'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Coordinate } from '../../Coordinate'\nimport { Mana } from '../../Mana'\nimport { Props } from './Popup.types'\nimport './Popup.css'\n\nexport default class Popup extends React.PureComponent<Props> {\n render() {\n const { x, y, visible, tile, position } = this.props\n const isEstate = !!tile.estate_id\n return (\n <div\n className={`AtlasPopup ${position} ${\n tile.owner ? 'has-owner' : 'no-owner'\n }`}\n style={{ top: y, left: x, opacity: visible ? 1 : 0 }}\n >\n <Section className=\"land-name\">\n <Row className=\"name-row\">\n <span className=\"name\">\n {tile.name ||\n (!isEstate ? t('global.parcel') : t('global.estate'))}\n </span>\n <Coordinate className=\"coordinates\" x={tile.x} y={tile.y} />\n </Row>\n </Section>\n\n <Section className=\"owner\">\n <Header sub>{t('asset_page.owner')}</Header>\n <Profile\n address={tile.owner || Address.ZERO.toString()}\n debounce={500}\n />\n </Section>\n\n {tile.price ? (\n <Section className=\"price\">\n <Header sub>{t('asset_page.price')}</Header>\n <Mana>{tile.price.toLocaleString()}</Mana>\n </Section>\n ) : null}\n </div>\n )\n }\n}\n","import Popup from './Popup'\nexport default Popup\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { NFTCategory } from '@dcl/schemas'\nimport {\n Atlas as AtlasComponent,\n AtlasTile,\n Color,\n Layer\n} from 'decentraland-ui'\nimport { locations } from '../../modules/routing/locations'\nimport { nftAPI } from '../../modules/vendor/decentraland/nft/api'\nimport { Props, Tile } from './Atlas.types'\nimport { VendorName } from '../../modules/vendor'\nimport { getContract } from '../../modules/contract/utils'\nimport { NFT } from '../../modules/nft/types'\nimport Popup from './Popup'\nimport './Atlas.css'\n\nconst getCoords = (x: number | string, y: number | string) => `${x},${y}`\n\nconst Atlas: React.FC<Props> = (props: Props) => {\n const {\n tiles,\n onNavigate,\n isEstate,\n withNavigation,\n nfts,\n withPopup,\n showOnSale,\n tilesByEstateId\n } = props\n\n const [showPopup, setShowPopup] = useState(false)\n const [hoveredTile, setHoveredTile] = useState<Tile | null>(null)\n const [mouseX, setMouseX] = useState(-1)\n const [mouseY, setMouseY] = useState(-1)\n const [x, setX] = useState(0)\n const [y, setY] = useState(0)\n const timeout = useRef<NodeJS.Timer | null>(null)\n\n const selection = useMemo(\n () =>\n (props.selection || []).reduce(\n (set, pair) => set.add(getCoords(pair.x, pair.y)),\n new Set<string>()\n ),\n [props.selection]\n )\n\n const userTiles = useMemo(\n () =>\n nfts.reduce((lands, nft) => {\n if (nft.vendor === VendorName.DECENTRALAND) {\n switch (nft.category) {\n case NFTCategory.PARCEL: {\n const parcel = (nft as NFT<VendorName.DECENTRALAND>).data.parcel!\n lands.set(getCoords(parcel.x, parcel.y), {\n color: Color.SUMMER_RED\n })\n break\n }\n case NFTCategory.ESTATE: {\n const estateId = nft.tokenId\n if (estateId in tilesByEstateId) {\n for (const tile of tilesByEstateId[estateId]) {\n lands.set(getCoords(tile.x, tile.y), {\n color: Color.SUMMER_RED,\n top: !!tile.top,\n left: !!tile.left,\n topLeft: !!tile.topLeft\n })\n }\n }\n }\n }\n }\n return lands\n }, new Map<string, ReturnType<Layer>>()),\n [nfts, tilesByEstateId]\n )\n\n const isSelected = useCallback(\n (x: number, y: number) => {\n if (selection.has(getCoords(x, y))) return true\n // This is a workaround to paint the large estates, because GraphQL can return only up to 1000 results\n // and some Estates have more parcels than thats\n if (!tiles) return false\n const id = selection.values().next().value as string\n const center = tiles[id] as Tile\n const tile = tiles[getCoords(x, y)] as Tile\n if (\n center &&\n tile &&\n center.estate_id &&\n tile.estate_id &&\n center.estate_id === tile.estate_id &&\n isEstate\n ) {\n return true\n }\n return false\n },\n [selection, tiles, isEstate]\n )\n\n const forSaleLayer: Layer = useCallback(\n (x, y) => {\n const key = getCoords(x, y)\n const tile = tiles[key] as AtlasTile & { price?: string }\n if (tile && 'price' in tile) {\n return {\n color: '#00d3ff',\n left: !!tile.left,\n top: !!tile.top,\n topLeft: !!tile.topLeft\n }\n }\n return null\n },\n [tiles]\n )\n\n const selectedStrokeLayer: Layer = useCallback(\n (x, y) => {\n return isSelected(x, y) ? { color: '#ff0044', scale: 1.4 } : null\n },\n [isSelected]\n )\n\n const selectedFillLayer: Layer = useCallback(\n (x, y) => {\n return isSelected(x, y) ? { color: '#ff9990', scale: 1.2 } : null\n },\n [isSelected]\n )\n\n const userLayer: Layer = useCallback(\n (x, y) => userTiles.get(getCoords(x, y)) || null,\n [userTiles]\n )\n\n const handleClick = useCallback(\n async (x: number, y: number) => {\n if (!withNavigation) {\n return\n }\n const tile = tiles[getCoords(x, y)] as Tile\n if (!tile) {\n return\n }\n if (tile.estate_id) {\n const estates = getContract({\n category: NFTCategory.ESTATE\n })\n onNavigate(locations.nft(estates.address, tile.estate_id))\n } else {\n try {\n const land = getContract({\n category: NFTCategory.PARCEL\n })\n const tokenId = await nftAPI.fetchTokenId(tile.x, tile.y)\n onNavigate(locations.nft(land.address, tokenId))\n } catch (error) {\n console.warn(\n `Couldn't fetch parcel ${tile.x},${tile.y}: ${error.message}`\n )\n }\n }\n },\n [withNavigation, onNavigate, tiles]\n )\n\n const handleHover = useCallback(\n (x: number, y: number) => {\n if (!withPopup) return\n if (selection.has(getCoords(x, y))) {\n setShowPopup(false)\n return\n }\n const id = getCoords(x, y)\n const tile = tiles[id]\n if (tile && !showPopup) {\n setShowPopup(true)\n setHoveredTile(tile)\n setMouseX(-1)\n setMouseY(-1)\n } else if (tile && tile !== hoveredTile) {\n setHoveredTile(tile)\n setMouseX(-1)\n setMouseY(-1)\n } else if (!tile && showPopup) {\n setShowPopup(false)\n }\n },\n [hoveredTile, showPopup, tiles, withPopup, selection]\n )\n\n const handleHidePopup = useCallback(() => {\n setShowPopup(false)\n setMouseX(-1)\n setMouseY(-1)\n }, [])\n\n // fade effect\n useEffect(() => {\n if (!showPopup) {\n timeout.current = setTimeout(() => setHoveredTile(null), 250)\n } else if (timeout.current) {\n clearTimeout(timeout.current)\n timeout.current = null\n }\n }, [showPopup])\n\n // mouse move\n useEffect(() => {\n function handleMouseMove(event: MouseEvent) {\n if (showPopup && mouseX === -1 && mouseY === -1) {\n setMouseX(event.offsetX)\n setMouseY(event.offsetY)\n setX(event.offsetX)\n setY(event.offsetY)\n }\n }\n if (withPopup) {\n document.addEventListener('mousemove', handleMouseMove)\n }\n return () => {\n if (withPopup) {\n document.removeEventListener('mousemove', handleMouseMove)\n }\n }\n }, [withPopup, showPopup, mouseX, mouseY])\n\n // layers\n const layers = [\n userLayer,\n ...(props.layers || []),\n selectedStrokeLayer,\n selectedFillLayer\n ]\n\n if (showOnSale) {\n layers.unshift(forSaleLayer)\n }\n\n return (\n <div className=\"atlas-wrapper\" onMouseLeave={handleHidePopup}>\n <AtlasComponent\n {...props}\n tiles={tiles}\n onClick={handleClick}\n onHover={handleHover}\n layers={layers}\n />\n {hoveredTile ? (\n <Popup\n x={x}\n y={y}\n visible={showPopup}\n tile={hoveredTile}\n position={x > window.innerWidth - 280 ? 'left' : 'right'}\n />\n ) : null}\n </div>\n )\n}\n\nAtlas.defaultProps = {\n showOnSale: true\n}\n\nexport default Atlas\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { getTiles, getTilesByEstateId } from '../../modules/tile/selectors'\nimport { RootState } from '../../modules/reducer'\nimport { getWalletNFTs } from '../../modules/nft/selectors'\nimport { MapStateProps, MapDispatch, MapDispatchProps } from './Atlas.types'\nimport Atlas from './Atlas'\n\nconst mapState = (state: RootState): MapStateProps => ({\n tiles: getTiles(state),\n nfts: getWalletNFTs(state),\n tilesByEstateId: getTilesByEstateId(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path))\n})\n\nexport default connect(mapState, mapDispatch)(Atlas)\n","import React from 'react'\n\nimport { Props } from './Menu.types'\nimport './Menu.css'\n\nconst Menu = (props: Props) => {\n const { className = '', children } = props\n\n return <ul className={`Menu ${className}`}>{children}</ul>\n}\n\nexport default React.memo(Menu)\n","import React, { useCallback } from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Image } from 'decentraland-ui'\n\nimport { Props } from './MenuItem.types'\nimport './MenuItem.css'\n\nconst MenuItem = <T extends unknown>(props: Props<T>) => {\n const {\n className = '',\n value,\n currentValue,\n subtitle,\n image,\n nestedLevel,\n withCaret,\n onClick\n } = props\n\n const classNames: string[] = ['MenuItem', className]\n\n if (currentValue === value) {\n classNames.push('active')\n }\n if (nestedLevel) {\n classNames.push('sub sub-' + nestedLevel)\n }\n\n const handleOnClick = useCallback(() => {\n onClick(value)\n }, [value, onClick])\n\n return (\n <li className={classNames.join(' ')} onClick={handleOnClick}>\n {image && <Image alt={image} src={image} width=\"25\" circular />}\n\n <div className=\"content\">\n {t(`menu.${value}`)}\n {subtitle ? <div className=\"subtitle\">{subtitle}</div> : null}\n </div>\n {withCaret ? <i className=\"dropdown icon\" /> : null}\n </li>\n )\n}\n\nexport default React.memo(MenuItem) as typeof MenuItem\n","import React from 'react'\n\nimport { MenuItem } from '../../Menu/MenuItem'\nimport { Props } from './DropdownMenu.types'\n\nconst DropdownMenu = <T extends unknown>(props: Props<T>) => {\n const { values, currentValue, onMenuItemClick } = props\n\n return (\n <>\n <MenuItem\n value={values[0]}\n currentValue={currentValue}\n onClick={onMenuItemClick}\n nestedLevel={1}\n withCaret={true}\n />\n <ul className=\"submenu\">\n {values.includes(currentValue!)\n ? values\n .slice(1)\n .map((value, index) => (\n <MenuItem<T>\n key={index}\n value={value}\n currentValue={currentValue}\n onClick={onMenuItemClick}\n nestedLevel={2}\n />\n ))\n : null}\n </ul>\n </>\n )\n}\n\nexport default React.memo(DropdownMenu) as typeof DropdownMenu\n","import React from 'react'\n\nimport { Section } from '../../../../../modules/vendor/decentraland/routing/types'\nimport { DropdownMenu } from '../../../../Menu/DropdownMenu'\nimport { MenuItem } from '../../../../Menu/MenuItem'\nimport { Props } from '../NFTSections.types'\n\nconst shouldRenderSection = (section: Section, sections: Section[]) => {\n return sections.includes(section) || sections.includes(Section.ALL)\n}\n\nconst NFTSectionsMenuItems = ({ section, sections, onSectionClick }: Props) => {\n return (\n <>\n {sections.includes(Section.ALL) && (\n <MenuItem\n key={Section.ALL}\n value={Section.ALL}\n currentValue={section}\n onClick={onSectionClick}\n />\n )}\n {shouldRenderSection(Section.LAND, sections) && (\n <>\n <MenuItem\n key={Section.LAND}\n value={Section.LAND}\n currentValue={section}\n onClick={onSectionClick}\n />\n {[Section.LAND, Section.PARCELS, Section.ESTATES].includes(section!)\n ? [Section.PARCELS, Section.ESTATES].map(menuSection => (\n <MenuItem\n key={menuSection}\n value={menuSection}\n currentValue={section}\n onClick={onSectionClick}\n nestedLevel={1}\n />\n ))\n : null}\n </>\n )}\n {shouldRenderSection(Section.WEARABLES, sections) && (\n <>\n <MenuItem\n value={Section.WEARABLES}\n currentValue={section}\n onClick={onSectionClick}\n />\n {[\n Section.WEARABLES,\n Section.WEARABLES_HEAD,\n Section.WEARABLES_FACIAL_HAIR,\n Section.WEARABLES_HAIR,\n Section.WEARABLES_EYES,\n Section.WEARABLES_EYEBROWS,\n Section.WEARABLES_MOUTH,\n Section.WEARABLES_UPPER_BODY,\n Section.WEARABLES_LOWER_BODY,\n Section.WEARABLES_FEET,\n Section.WEARABLES_ACCESSORIES,\n Section.WEARABLES_EARRING,\n Section.WEARABLES_EYEWEAR,\n Section.WEARABLES_HAT,\n Section.WEARABLES_HELMET,\n Section.WEARABLES_MASK,\n Section.WEARABLES_TIARA,\n Section.WEARABLES_TOP_HEAD,\n Section.WEARABLES_SKIN\n ].includes(section!) ? (\n <>\n <DropdownMenu\n values={[\n Section.WEARABLES_HEAD,\n Section.WEARABLES_FACIAL_HAIR,\n Section.WEARABLES_HAIR,\n Section.WEARABLES_EYES,\n Section.WEARABLES_EYEBROWS,\n Section.WEARABLES_MOUTH\n ]}\n currentValue={section}\n onMenuItemClick={onSectionClick}\n />\n\n {[\n Section.WEARABLES_UPPER_BODY,\n Section.WEARABLES_LOWER_BODY,\n Section.WEARABLES_FEET\n ].map(menuSection => (\n <MenuItem\n key={menuSection}\n value={menuSection}\n currentValue={section}\n onClick={onSectionClick}\n nestedLevel={1}\n />\n ))}\n\n <DropdownMenu\n values={[\n Section.WEARABLES_ACCESSORIES,\n Section.WEARABLES_EARRING,\n Section.WEARABLES_EYEWEAR,\n Section.WEARABLES_HAT,\n Section.WEARABLES_HELMET,\n Section.WEARABLES_MASK,\n Section.WEARABLES_TIARA,\n Section.WEARABLES_TOP_HEAD\n ]}\n currentValue={section}\n onMenuItemClick={onSectionClick}\n />\n\n <MenuItem\n value={Section.WEARABLES_SKIN}\n currentValue={section}\n onClick={onSectionClick}\n nestedLevel={1}\n />\n </>\n ) : null}\n </>\n )}\n {shouldRenderSection(Section.EMOTES, sections) && (\n <MenuItem\n value={Section.EMOTES}\n currentValue={section}\n onClick={onSectionClick}\n />\n )}\n {shouldRenderSection(Section.ENS, sections) && (\n <MenuItem\n value={Section.ENS}\n currentValue={section}\n onClick={onSectionClick}\n />\n )}\n </>\n )\n}\n\nexport default React.memo(NFTSectionsMenuItems)\n","import NFTSectionsMenuItems from './NFTSectionsMenuItems'\n\nexport default NFTSectionsMenuItems\n","import React from 'react'\nimport { Header } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Sections } from '../../../modules/routing/types'\nimport { Section } from '../../../modules/vendor/decentraland'\nimport { VendorName } from '../../../modules/vendor/types'\nimport { Menu } from '../../Menu'\nimport { MenuItem } from '../../Menu/MenuItem'\nimport { Props } from './CurrentAccountSidebar.types'\nimport NFTSectionsMenuItems from '../../Vendor/decentraland/NFTSections/NFTSectionsMenuItems'\n\nconst decentraland = VendorName.DECENTRALAND\n\nconst {\n COLLECTIONS,\n LAND,\n WEARABLES,\n EMOTES,\n ENS,\n ON_SALE,\n SALES,\n BIDS,\n STORE_SETTINGS\n} = Sections.decentraland\n\nconst CurrentAccountSidebar = ({ section, onBrowse }: Props) => (\n <>\n <Menu>\n <Header sub>{t('account_sidebar.assets')}</Header>\n <MenuItem\n key={COLLECTIONS}\n value={COLLECTIONS}\n currentValue={section}\n onClick={section => onBrowse(decentraland, section)}\n />\n <NFTSectionsMenuItems\n sections={[LAND, WEARABLES, EMOTES, ENS]}\n section={section as Section}\n onSectionClick={section => onBrowse(decentraland, section)}\n />\n </Menu>\n <Menu>\n <Header sub>{t('account_sidebar.store')}</Header>\n <MenuItem\n key={ON_SALE}\n value={ON_SALE}\n currentValue={section}\n onClick={section => onBrowse(decentraland, section)}\n />\n <MenuItem\n key={SALES}\n value={SALES}\n currentValue={section}\n onClick={section => onBrowse(decentraland, section)}\n />\n <MenuItem\n key={BIDS}\n value={BIDS}\n currentValue={section}\n onClick={section => onBrowse(decentraland, section)}\n />\n <MenuItem\n key={STORE_SETTINGS}\n value={STORE_SETTINGS}\n currentValue={section}\n onClick={section => onBrowse(decentraland, section)}\n />\n </Menu>\n </>\n)\n\nexport default React.memo(CurrentAccountSidebar)\n","import CurrentAccountSidebar from './CurrentAccountSidebar'\n\nexport default CurrentAccountSidebar\n","import React from 'react'\nimport { Header } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport classNames from 'classnames'\nimport { Sections } from '../../../modules/routing/types'\nimport { Section } from '../../../modules/vendor/decentraland'\nimport { Menu } from '../../Menu'\nimport { Props } from './OtherAccountSidebar.types'\nimport NFTSectionsMenuItems from '../../Vendor/decentraland/NFTSections/NFTSectionsMenuItems'\nimport { AssetType } from '../../../modules/asset/types'\n\nconst { ALL, LAND, WEARABLES, EMOTES, ENS } = Sections.decentraland\n\nconst OtherAccountSidebar = ({ section, assetType, onBrowse }: Props) => (\n <>\n <Menu>\n <Header sub>{t('account_sidebar.store')}</Header>\n <div\n className={classNames(\n 'alternative-menu-item',\n assetType === AssetType.ITEM && 'selected'\n )}\n onClick={() =>\n onBrowse({ section: WEARABLES, assetType: AssetType.ITEM })\n }\n >\n <div className=\"main-text\">{t('account_sidebar.originals')}</div>\n <div className=\"detail-text\">\n {t('account_sidebar.originals_detail')}\n </div>\n </div>\n <div\n className={classNames(\n 'alternative-menu-item',\n assetType === AssetType.NFT && 'selected'\n )}\n onClick={() => onBrowse({ section: ALL, assetType: AssetType.NFT })}\n >\n <div className=\"main-text\">{t('account_sidebar.listings')}</div>\n <div className=\"detail-text\">\n {t('account_sidebar.listings_detail')}\n </div>\n </div>\n </Menu>\n <Menu>\n <Header sub>\n {assetType === AssetType.ITEM ? 'CATEGORIES' : 'ASSETS'}\n </Header>\n <NFTSectionsMenuItems\n sections={\n assetType === AssetType.ITEM\n ? [WEARABLES]\n : [ALL, WEARABLES, LAND, EMOTES, ENS]\n }\n section={section as Section}\n onSectionClick={section => onBrowse({ section, assetType })}\n />\n </Menu>\n </>\n)\n\nexport default React.memo(OtherAccountSidebar)\n","import OtherAccountSidebar from './OtherAccountSidebar.container'\n\nexport default OtherAccountSidebar\n","import { connect } from 'react-redux'\nimport { RootState } from '../../../modules/reducer'\nimport { getAssetType } from '../../../modules/routing/selectors'\nimport { MapStateProps, MapDispatchProps } from './OtherAccountSidebar.types'\nimport OtherAccountSidebar from './OtherAccountSidebar'\nimport { BrowseOptions } from '../../../modules/routing/types'\nimport { browse } from '../../../modules/routing/actions'\nimport { Dispatch } from 'redux'\nimport { VendorName } from '../../../modules/vendor'\n\nconst mapState = (state: RootState): MapStateProps => ({\n assetType: getAssetType(state)\n})\n\nconst mapDispatch = (dispatch: Dispatch): MapDispatchProps => ({\n onBrowse: (options: BrowseOptions) =>\n dispatch(browse({ vendor: VendorName.DECENTRALAND, ...options }))\n})\n\nexport default connect(mapState, mapDispatch)(OtherAccountSidebar)\n","import React, { useCallback } from 'react'\nimport { AssetType } from '../../modules/asset/types'\nimport { VendorName } from '../../modules/vendor/types'\nimport { Props } from './AccountSidebar.types'\nimport CurrentAccountSidebar from './CurrentAccountSidebar'\nimport OtherAccountSidebar from './OtherAccountSidebar'\nimport './AccountSidebar.css'\n\nconst AccountSidebar = ({\n address,\n section,\n isCurrentAccount,\n onBrowse\n}: Props) => {\n const handleOnBrowse = useCallback(\n (vendor: VendorName, section: string, assetType?: AssetType) => {\n onBrowse({ vendor, section, address, assetType })\n },\n [address, onBrowse]\n )\n\n return (\n <div className=\"AccountSidebar\">\n {isCurrentAccount ? (\n <CurrentAccountSidebar section={section} onBrowse={handleOnBrowse} />\n ) : (\n <OtherAccountSidebar section={section} />\n )}\n </div>\n )\n}\n\nexport default React.memo(AccountSidebar)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../modules/reducer'\nimport { browse } from '../../modules/routing/actions'\nimport { getSection } from '../../modules/routing/selectors'\nimport {\n MapDispatch,\n MapDispatchProps,\n MapStateProps\n} from './AccountSidebar.types'\nimport AccountSidebar from './AccountSidebar'\n\nconst mapState = (state: RootState): MapStateProps => ({\n section: getSection(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onBrowse: options => dispatch(browse(options))\n})\n\nexport default connect(mapState, mapDispatch)(AccountSidebar)\n","import { RootState } from '../reducer'\n\nexport const getState = (state: RootState) => state.proximity\nexport const getProximities = (state: RootState) => getState(state).data\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getError = (state: RootState) => getState(state).error\n","export function getId(x: number | string, y: number | string) {\n return x + ',' + y\n}\n\nexport function buildExplorerUrl(x: string | number, y: string | number) {\n return `https://play.decentraland.org/?position=${x},${y}`\n}\n","import { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { getId } from '../nft/parcel/utils'\nimport { NFT } from '../nft/types'\nimport { Proximity } from './types'\n\nexport const getDistanceText = (distance: number) =>\n distance === 0\n ? t('proximity.adjacent')\n : t('proximity.distance', { distance })\n\nexport const getParcelProximity = (\n parcel: NFT['data']['parcel'],\n proximities: Record<string, Proximity>\n) => {\n const id = getId(parcel!.x, parcel!.y)\n return proximities[id]\n}\n\nexport const getEstateProximity = (\n estate: NFT['data']['estate'],\n proximities: Record<string, Proximity>\n) => {\n let estateProximity: Proximity | undefined\n for (const { x, y } of estate!.parcels) {\n const id = getId(x, y)\n const parcelProximity = proximities[id]\n if (parcelProximity) {\n if (estateProximity === undefined) {\n estateProximity = {}\n }\n if (\n parcelProximity.district !== undefined &&\n (estateProximity.district === undefined ||\n parcelProximity.district < estateProximity.district)\n ) {\n estateProximity.district = parcelProximity.district\n }\n if (\n parcelProximity.plaza !== undefined &&\n (estateProximity.plaza === undefined ||\n parcelProximity.plaza < estateProximity.plaza)\n ) {\n estateProximity.plaza = parcelProximity.plaza\n }\n if (\n parcelProximity.road !== undefined &&\n (estateProximity.road === undefined ||\n parcelProximity.road < estateProximity.road)\n ) {\n estateProximity.road = parcelProximity.road\n }\n }\n }\n return estateProximity\n}\n","import { NFTCategory } from '@dcl/schemas'\nimport { useMemo } from 'react'\nimport { NFT } from '../nft/types'\nimport { VendorName } from '../vendor/types'\nimport { getParcelProximity, getEstateProximity } from './utils'\nimport { Proximity } from './types'\n\nexport const useProximity = (\n nft: NFT<VendorName.DECENTRALAND>,\n proximities: Record<string, Proximity>\n) =>\n useMemo(() => {\n switch (nft.category) {\n case NFTCategory.PARCEL:\n return getParcelProximity(nft.data.parcel!, proximities)\n case NFTCategory.ESTATE:\n return getEstateProximity(nft.data.estate!, proximities)\n default:\n return\n }\n }, [nft, proximities])\n","import { useProximity } from '../../../modules/proximity/hooks'\nimport { getDistanceText } from '../../../modules/proximity/utils'\nimport { Props } from './ProximityTags.types'\nimport './ProximityTags.css'\n\nconst ProximityTags = (props: Props) => {\n const { nft, proximities } = props\n const proximity = useProximity(nft, proximities)\n return (\n <>\n {proximity?.plaza !== undefined ? (\n <div\n className=\"ProximityTag plaza\"\n title={getDistanceText(proximity.plaza)}\n />\n ) : null}\n {proximity?.road !== undefined ? (\n <div\n className=\"ProximityTag road\"\n title={getDistanceText(proximity.road)}\n />\n ) : null}\n {proximity?.district !== undefined ? (\n <div\n className=\"ProximityTag district\"\n title={getDistanceText(proximity.district)}\n />\n ) : null}\n </>\n )\n}\n\nexport default ProximityTags\n","import { connect } from 'react-redux'\nimport { RootState } from '../../../modules/reducer'\nimport { getProximities } from '../../../modules/proximity/selectors'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './ProximityTags.types'\nimport ProximityTags from './ProximityTags'\n\nconst mapState = (state: RootState): MapStateProps => ({\n proximities: getProximities(state)\n})\n\nconst mapDispatch = (_dispatch: MapDispatch): MapDispatchProps => ({})\n\nexport default connect(mapState, mapDispatch)(ProximityTags)\n","import classnames from 'classnames'\nimport { Coordinate } from '../../Coordinate'\nimport { ProximityTags } from '../ProximityTags'\nimport { Props } from './ParcelTags.types'\nimport styles from './ParcelTags.module.css'\n\nconst ParcelTags = (props: Props) => {\n const { nft } = props\n const { x, y } = nft.data.parcel!\n return (\n <div className={classnames([styles.ParcelTags, 'tags'])}>\n <Coordinate className={styles.coordinates} x={Number(x)} y={Number(y)} />\n <ProximityTags nft={nft} />\n </div>\n )\n}\n\nexport default ParcelTags\n","import { ProximityTags } from '../ProximityTags'\nimport { Props } from './EstateTags.types'\nimport './EstateTags.css'\n\nconst EstateTags = (props: Props) => {\n const { nft } = props\n const estate = nft.data.estate!\n return (\n <div className=\"EstateTags tags\">\n <div className=\"size\">{estate.size.toLocaleString()} LAND</div>\n <ProximityTags nft={nft} />\n </div>\n )\n}\n\nexport default EstateTags\n","import React from 'react'\nimport classnames from 'classnames'\nimport { Popup } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Rarity } from '@dcl/schemas'\nimport { Props } from './RarityBadge.types'\nimport styles from './RarityBadge.module.css'\n\nconst RarityBadge = ({ rarity, size, withTooltip, onClick }: Props) => {\n const trigger = (\n <div\n className={classnames([styles.badge, styles[size]])}\n style={{\n backgroundColor: Rarity.getColor(rarity)\n }}\n title={!withTooltip ? t(`rarity_description.${rarity}`) : ''}\n onClick={onClick}\n >\n <span className={styles.text}>{t(`rarity.${rarity}`)}</span>\n </div>\n )\n\n return withTooltip ? (\n <Popup\n position=\"top center\"\n content={t(`rarity_description.${rarity}`)}\n trigger={trigger}\n />\n ) : (\n trigger\n )\n}\n\nRarityBadge.defaultProps = {\n size: 'medium',\n withTooltip: true\n}\n\nexport default React.memo(RarityBadge)\n","import RarityBadge from './RarityBadge.container'\n\nexport default RarityBadge\n","import { push } from 'connected-react-router'\nimport { connect } from 'react-redux'\nimport { Dispatch } from 'redux'\nimport { locations } from '../../modules/routing/locations'\nimport { getSectionFromCategory } from '../../modules/routing/search'\nimport { MapDispatchProps, OwnProps } from './RarityBadge.types'\nimport RarityBadge from './RarityBadge'\n\nconst mapDispatch = (\n dispatch: Dispatch,\n { rarity, category, assetType }: OwnProps\n): MapDispatchProps => ({\n onClick: () =>\n dispatch(\n push(\n locations.browse({\n assetType: assetType,\n section: getSectionFromCategory(category),\n rarities: [rarity]\n })\n )\n )\n})\n\nexport default connect(null, mapDispatch)(RarityBadge)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport classNames from 'classnames'\nimport { Props } from './IconBadge.types'\nimport './IconBadge.css'\n\nconst IconBadge = ({\n icon,\n text,\n onClick,\n href,\n className,\n children\n}: Props) => {\n const childrenInt = React.useMemo(\n () => (\n <>\n {children ? (\n <span className=\"custom-icon\">{children}</span>\n ) : (\n <span className={classNames('icon', icon)} />\n )}\n <span className=\"text\">{text}</span>\n </>\n ),\n [children, icon, text]\n )\n\n return href ? (\n <Link\n className={classNames('IconBadge', className)}\n onClick={onClick}\n to={href}\n >\n {childrenInt}\n </Link>\n ) : (\n <div className={classNames('IconBadge', className)} onClick={onClick}>\n {childrenInt}\n </div>\n )\n}\n\nexport default React.memo(IconBadge)\n","import IconBadge from './IconBadge'\n\nexport default IconBadge\n","import React, { useMemo } from 'react'\nimport { BodyShape, WearableGender } from '@dcl/schemas'\nimport classNames from 'classnames'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { isGender, isUnisex as getIsUnisex } from '../../modules/nft/utils'\nimport { locations } from '../../modules/routing/locations'\nimport IconBadge from '../AssetPage/IconBadge'\nimport { Props } from './GenderBadge.types'\nimport styles from './GenderBadge.module.css'\n\nconst GenderBadge = ({ bodyShapes, withText, assetType, section }: Props) => {\n const isUnisex = getIsUnisex(bodyShapes)\n const isGenderBodyShape = isGender(bodyShapes, BodyShape.MALE)\n\n const href = useMemo(\n () =>\n locations.browse({\n assetType: assetType,\n section: section,\n wearableGenders: isUnisex\n ? [WearableGender.MALE, WearableGender.FEMALE]\n : isGenderBodyShape\n ? [WearableGender.MALE]\n : [WearableGender.FEMALE]\n }),\n [assetType, section, isUnisex, isGenderBodyShape]\n )\n\n const icon = isUnisex ? 'Unisex' : bodyShapes[0]\n\n return withText ? (\n <IconBadge\n icon={icon}\n text={\n isUnisex\n ? t('body_shape.unisex')\n : isGenderBodyShape\n ? t('body_shape.male')\n : t('body_shape.female')\n }\n href={href}\n />\n ) : (\n <span className={classNames(styles.icon, styles[icon])} />\n )\n}\n\nGenderBadge.defaultProps = {\n withText: true\n}\n\nexport default React.memo(GenderBadge)\n","import { NFTCategory } from '@dcl/schemas'\nimport { SmartIcon } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Section } from '../../../modules/vendor/decentraland'\nimport RarityBadge from '../../RarityBadge'\nimport GenderBadge from '../../GenderBadge/GenderBadge'\nimport { AssetType } from '../../../modules/asset/types'\nimport { Props } from './WearableTags.types'\nimport './WearableTags.css'\n\nconst WearableTags = (props: Props) => {\n const { asset } = props\n const { rarity, category, bodyShapes, isSmart } = asset.data.wearable!\n return (\n <div className=\"WearableTags tags\">\n <RarityBadge\n size=\"small\"\n rarity={rarity}\n assetType={AssetType.NFT}\n category={NFTCategory.EMOTE}\n withTooltip={false}\n />\n <div\n className={'icon ' + category}\n title={t(`wearable.category.${category}`)}\n />\n <GenderBadge\n bodyShapes={bodyShapes}\n assetType={AssetType.NFT}\n withText={false}\n section={Section.WEARABLES}\n />\n {isSmart ? (\n <div className=\"icon smart\" title={t(`wearable.smart`)}>\n <SmartIcon />\n </div>\n ) : null}\n </div>\n )\n}\n\nexport default WearableTags\n","import GenderBadge from './GenderBadge'\n\nexport default GenderBadge\n","import { NFTCategory } from '@dcl/schemas'\nimport classnames from 'classnames'\nimport { AssetType } from '../../../modules/asset/types'\nimport RarityBadge from '../../RarityBadge'\nimport GenderBadge from '../../GenderBadge'\nimport { Props } from './EmoteTags.types'\nimport styles from './EmoteTags.module.css'\nimport { Section } from '../../../modules/vendor/decentraland'\n\nconst EmoteTags = (props: Props) => {\n const { nft } = props\n const { rarity, bodyShapes } = nft.data.emote!\n return (\n <div className={classnames([styles.EmoteTags, 'tags'])}>\n <RarityBadge\n size=\"small\"\n rarity={rarity}\n assetType={AssetType.NFT}\n category={NFTCategory.EMOTE}\n withTooltip={false}\n />\n <GenderBadge\n bodyShapes={bodyShapes}\n assetType={AssetType.NFT}\n section={Section.EMOTES}\n withText={false}\n />\n </div>\n )\n}\n\nexport default EmoteTags\n","import { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Props } from './ENSTags.types'\nimport './ENSTags.css'\n\nconst ENSTags = (_: Props) => {\n return (\n <div className=\"ENSTags tags\">\n <div className=\"badge\">{t('global.ens')}</div>\n </div>\n )\n}\n\nexport default ENSTags\n","import { RootState } from '../../reducer'\n\nexport const getState = (state: RootState) => state.ui.preview\nexport const getIsTryingOn = (state: RootState) => getState(state).isTryingOn\n","import { ContractAbi } from 'web3x/contract'\nexport default new ContractAbi([\n {\n constant: true,\n inputs: [\n {\n name: '_interfaceId',\n type: 'bytes4'\n }\n ],\n name: 'supportsInterface',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_name',\n type: 'string'\n },\n {\n name: '_symbol',\n type: 'string'\n },\n {\n name: '_registry',\n type: 'address'\n }\n ],\n name: 'initialize',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'address'\n },\n {\n name: '',\n type: 'address'\n }\n ],\n name: 'updateManager',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'getApproved',\n outputs: [\n {\n name: '',\n type: 'address'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'approve',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n name: 'landIdEstate',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_operator',\n type: 'address'\n },\n {\n name: '_from',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n },\n {\n name: '_data',\n type: 'bytes'\n }\n ],\n name: 'onERC721Received',\n outputs: [\n {\n name: '',\n type: 'bytes4'\n }\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n }\n ],\n name: 'getFingerprint',\n outputs: [\n {\n name: 'result',\n type: 'bytes32'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n },\n {\n name: 'landId',\n type: 'uint256'\n },\n {\n name: 'operator',\n type: 'address'\n }\n ],\n name: 'setLandUpdateOperator',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address'\n },\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'transferFrom',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n },\n {\n name: 'landId',\n type: 'uint256'\n },\n {\n name: 'data',\n type: 'string'\n }\n ],\n name: 'updateLandData',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address'\n },\n {\n name: '_index',\n type: 'uint256'\n }\n ],\n name: 'tokenOfOwnerByIndex',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'uint256'\n },\n {\n name: '',\n type: 'uint256'\n }\n ],\n name: 'estateLandIds',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_estateId',\n type: 'uint256'\n },\n {\n name: '_landIds',\n type: 'uint256[]'\n },\n {\n name: '_operator',\n type: 'address'\n }\n ],\n name: 'setManyLandUpdateOperator',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n },\n {\n name: 'landIds',\n type: 'uint256[]'\n },\n {\n name: 'destinatary',\n type: 'address'\n }\n ],\n name: 'transferManyLands',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n },\n {\n name: 'landIds',\n type: 'uint256[]'\n },\n {\n name: 'data',\n type: 'string'\n }\n ],\n name: 'updateManyLandData',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address'\n },\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'safeTransferFrom',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_name',\n type: 'string'\n },\n {\n name: '_symbol',\n type: 'string'\n }\n ],\n name: 'initialize',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'exists',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_index',\n type: 'uint256'\n }\n ],\n name: 'tokenByIndex',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_registry',\n type: 'address'\n }\n ],\n name: 'setLANDRegistry',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n },\n {\n name: 'metadata',\n type: 'string'\n }\n ],\n name: 'updateMetadata',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [],\n name: 'ping',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'ownerOf',\n outputs: [\n {\n name: '',\n type: 'address'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: 'operator',\n type: 'address'\n },\n {\n name: 'estateId',\n type: 'uint256'\n }\n ],\n name: 'isUpdateAuthorized',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address'\n }\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_estateIds',\n type: 'uint256[]'\n },\n {\n name: '_operator',\n type: 'address'\n }\n ],\n name: 'setManyUpdateOperator',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'from',\n type: 'address'\n },\n {\n name: 'to',\n type: 'address'\n },\n {\n name: 'estateIds',\n type: 'uint256[]'\n }\n ],\n name: 'safeTransferManyFrom',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'registry',\n outputs: [\n {\n name: '',\n type: 'address'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [],\n name: 'initialize',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'owner',\n outputs: [\n {\n name: '',\n type: 'address'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n },\n {\n name: 'fingerprint',\n type: 'bytes'\n }\n ],\n name: 'verifyFingerprint',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n name: 'updateOperator',\n outputs: [\n {\n name: '',\n type: 'address'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '',\n type: 'uint256'\n },\n {\n name: '',\n type: 'uint256'\n }\n ],\n name: 'estateLandIndex',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_approved',\n type: 'bool'\n }\n ],\n name: 'setApprovalForAll',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n },\n {\n name: 'landId',\n type: 'uint256'\n },\n {\n name: 'destinatary',\n type: 'address'\n }\n ],\n name: 'transferLand',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n }\n ],\n name: 'getMetadata',\n outputs: [\n {\n name: '',\n type: 'string'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n },\n {\n name: 'operator',\n type: 'address'\n }\n ],\n name: 'setUpdateOperator',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address'\n },\n {\n name: '_to',\n type: 'address'\n },\n {\n name: '_tokenId',\n type: 'uint256'\n },\n {\n name: '_data',\n type: 'bytes'\n }\n ],\n name: 'safeTransferFrom',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: 'landId',\n type: 'uint256'\n }\n ],\n name: 'getLandEstateId',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: 'contractName',\n type: 'string'\n },\n {\n name: 'migrationId',\n type: 'string'\n }\n ],\n name: 'isMigrated',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_sender',\n type: 'address'\n }\n ],\n name: 'initialize',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'tokenURI',\n outputs: [\n {\n name: '',\n type: 'string'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'to',\n type: 'address'\n },\n {\n name: 'metadata',\n type: 'string'\n }\n ],\n name: 'mint',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'from',\n type: 'address'\n },\n {\n name: 'to',\n type: 'address'\n },\n {\n name: 'estateIds',\n type: 'uint256[]'\n },\n {\n name: 'data',\n type: 'bytes'\n }\n ],\n name: 'safeTransferManyFrom',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address'\n },\n {\n name: '_operator',\n type: 'address'\n }\n ],\n name: 'isApprovedForAll',\n outputs: [\n {\n name: '',\n type: 'bool'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: '_owner',\n type: 'address'\n },\n {\n name: '_operator',\n type: 'address'\n },\n {\n name: '_approved',\n type: 'bool'\n }\n ],\n name: 'setUpdateManager',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: false,\n inputs: [\n {\n name: 'newOwner',\n type: 'address'\n }\n ],\n name: 'transferOwnership',\n outputs: [],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function'\n },\n {\n constant: true,\n inputs: [\n {\n name: 'estateId',\n type: 'uint256'\n }\n ],\n name: 'getEstateSize',\n outputs: [\n {\n name: '',\n type: 'uint256'\n }\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'previousOwner',\n type: 'address'\n },\n {\n indexed: true,\n name: 'newOwner',\n type: 'address'\n }\n ],\n name: 'OwnershipTransferred',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_from',\n type: 'address'\n },\n {\n indexed: true,\n name: '_to',\n type: 'address'\n },\n {\n indexed: true,\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'Transfer',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_owner',\n type: 'address'\n },\n {\n indexed: true,\n name: '_approved',\n type: 'address'\n },\n {\n indexed: true,\n name: '_tokenId',\n type: 'uint256'\n }\n ],\n name: 'Approval',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_owner',\n type: 'address'\n },\n {\n indexed: true,\n name: '_operator',\n type: 'address'\n },\n {\n indexed: false,\n name: '_approved',\n type: 'bool'\n }\n ],\n name: 'ApprovalForAll',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_owner',\n type: 'address'\n },\n {\n indexed: true,\n name: '_estateId',\n type: 'uint256'\n },\n {\n indexed: false,\n name: '_data',\n type: 'string'\n }\n ],\n name: 'CreateEstate',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_estateId',\n type: 'uint256'\n },\n {\n indexed: true,\n name: '_landId',\n type: 'uint256'\n }\n ],\n name: 'AddLand',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_estateId',\n type: 'uint256'\n },\n {\n indexed: true,\n name: '_landId',\n type: 'uint256'\n },\n {\n indexed: true,\n name: '_destinatary',\n type: 'address'\n }\n ],\n name: 'RemoveLand',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_assetId',\n type: 'uint256'\n },\n {\n indexed: true,\n name: '_holder',\n type: 'address'\n },\n {\n indexed: true,\n name: '_operator',\n type: 'address'\n },\n {\n indexed: false,\n name: '_data',\n type: 'string'\n }\n ],\n name: 'Update',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_estateId',\n type: 'uint256'\n },\n {\n indexed: true,\n name: '_operator',\n type: 'address'\n }\n ],\n name: 'UpdateOperator',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_owner',\n type: 'address'\n },\n {\n indexed: true,\n name: '_operator',\n type: 'address'\n },\n {\n indexed: true,\n name: '_caller',\n type: 'address'\n },\n {\n indexed: false,\n name: '_approved',\n type: 'bool'\n }\n ],\n name: 'UpdateManager',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: '_registry',\n type: 'address'\n }\n ],\n name: 'SetLANDRegistry',\n type: 'event'\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n name: 'contractName',\n type: 'string'\n },\n {\n indexed: false,\n name: 'migrationId',\n type: 'string'\n }\n ],\n name: 'Migrated',\n type: 'event'\n }\n])\n","import BN from 'bn.js'\nimport { Address } from 'web3x/address'\nimport { EventLog, TransactionReceipt } from 'web3x/formatters'\nimport {\n Contract,\n ContractOptions,\n TxCall,\n TxSend,\n EventSubscriptionFactory\n} from 'web3x/contract'\nimport { Eth } from 'web3x/eth'\nimport abi from './EstateRegistryAbi'\nexport type OwnershipTransferredEvent = {\n previousOwner: Address\n newOwner: Address\n}\nexport type TransferEvent = {\n _from: Address\n _to: Address\n _tokenId: string\n}\nexport type ApprovalEvent = {\n _owner: Address\n _approved: Address\n _tokenId: string\n}\nexport type ApprovalForAllEvent = {\n _owner: Address\n _operator: Address\n _approved: boolean\n}\nexport type CreateEstateEvent = {\n _owner: Address\n _estateId: string\n _data: string\n}\nexport type AddLandEvent = {\n _estateId: string\n _landId: string\n}\nexport type RemoveLandEvent = {\n _estateId: string\n _landId: string\n _destinatary: Address\n}\nexport type UpdateEvent = {\n _assetId: string\n _holder: Address\n _operator: Address\n _data: string\n}\nexport type UpdateOperatorEvent = {\n _estateId: string\n _operator: Address\n}\nexport type UpdateManagerEvent = {\n _owner: Address\n _operator: Address\n _caller: Address\n _approved: boolean\n}\nexport type SetLANDRegistryEvent = {\n _registry: Address\n}\nexport type MigratedEvent = {\n contractName: string\n migrationId: string\n}\nexport interface OwnershipTransferredEventLog\n extends EventLog<OwnershipTransferredEvent, 'OwnershipTransferred'> {}\nexport interface TransferEventLog extends EventLog<TransferEvent, 'Transfer'> {}\nexport interface ApprovalEventLog extends EventLog<ApprovalEvent, 'Approval'> {}\nexport interface ApprovalForAllEventLog\n extends EventLog<ApprovalForAllEvent, 'ApprovalForAll'> {}\nexport interface CreateEstateEventLog\n extends EventLog<CreateEstateEvent, 'CreateEstate'> {}\nexport interface AddLandEventLog extends EventLog<AddLandEvent, 'AddLand'> {}\nexport interface RemoveLandEventLog\n extends EventLog<RemoveLandEvent, 'RemoveLand'> {}\nexport interface UpdateEventLog extends EventLog<UpdateEvent, 'Update'> {}\nexport interface UpdateOperatorEventLog\n extends EventLog<UpdateOperatorEvent, 'UpdateOperator'> {}\nexport interface UpdateManagerEventLog\n extends EventLog<UpdateManagerEvent, 'UpdateManager'> {}\nexport interface SetLANDRegistryEventLog\n extends EventLog<SetLANDRegistryEvent, 'SetLANDRegistry'> {}\nexport interface MigratedEventLog extends EventLog<MigratedEvent, 'Migrated'> {}\ninterface EstateRegistryEvents {\n OwnershipTransferred: EventSubscriptionFactory<OwnershipTransferredEventLog>\n Transfer: EventSubscriptionFactory<TransferEventLog>\n Approval: EventSubscriptionFactory<ApprovalEventLog>\n ApprovalForAll: EventSubscriptionFactory<ApprovalForAllEventLog>\n CreateEstate: EventSubscriptionFactory<CreateEstateEventLog>\n AddLand: EventSubscriptionFactory<AddLandEventLog>\n RemoveLand: EventSubscriptionFactory<RemoveLandEventLog>\n Update: EventSubscriptionFactory<UpdateEventLog>\n UpdateOperator: EventSubscriptionFactory<UpdateOperatorEventLog>\n UpdateManager: EventSubscriptionFactory<UpdateManagerEventLog>\n SetLANDRegistry: EventSubscriptionFactory<SetLANDRegistryEventLog>\n Migrated: EventSubscriptionFactory<MigratedEventLog>\n}\ninterface EstateRegistryEventLogs {\n OwnershipTransferred: OwnershipTransferredEventLog\n Transfer: TransferEventLog\n Approval: ApprovalEventLog\n ApprovalForAll: ApprovalForAllEventLog\n CreateEstate: CreateEstateEventLog\n AddLand: AddLandEventLog\n RemoveLand: RemoveLandEventLog\n Update: UpdateEventLog\n UpdateOperator: UpdateOperatorEventLog\n UpdateManager: UpdateManagerEventLog\n SetLANDRegistry: SetLANDRegistryEventLog\n Migrated: MigratedEventLog\n}\ninterface EstateRegistryTxEventLogs {\n OwnershipTransferred: OwnershipTransferredEventLog[]\n Transfer: TransferEventLog[]\n Approval: ApprovalEventLog[]\n ApprovalForAll: ApprovalForAllEventLog[]\n CreateEstate: CreateEstateEventLog[]\n AddLand: AddLandEventLog[]\n RemoveLand: RemoveLandEventLog[]\n Update: UpdateEventLog[]\n UpdateOperator: UpdateOperatorEventLog[]\n UpdateManager: UpdateManagerEventLog[]\n SetLANDRegistry: SetLANDRegistryEventLog[]\n Migrated: MigratedEventLog[]\n}\nexport interface EstateRegistryTransactionReceipt\n extends TransactionReceipt<EstateRegistryTxEventLogs> {}\ninterface EstateRegistryMethods {\n supportsInterface(_interfaceId: string): TxCall<boolean>\n name(): TxCall<string>\n initialize(\n _name: string,\n _symbol: string,\n _registry: Address\n ): TxSend<EstateRegistryTransactionReceipt>\n updateManager(a0: Address, a1: Address): TxCall<boolean>\n getApproved(_tokenId: number | string | BN): TxCall<Address>\n approve(\n _to: Address,\n _tokenId: number | string | BN\n ): TxSend<EstateRegistryTransactionReceipt>\n landIdEstate(a0: number | string | BN): TxCall<string>\n onERC721Received(\n _operator: Address,\n _from: Address,\n _tokenId: number | string | BN,\n _data: string\n ): TxSend<EstateRegistryTransactionReceipt>\n getFingerprint(estateId: number | string | BN): TxCall<string>\n totalSupply(): TxCall<string>\n setLandUpdateOperator(\n estateId: number | string | BN,\n landId: number | string | BN,\n operator: Address\n ): TxSend<EstateRegistryTransactionReceipt>\n transferFrom(\n _from: Address,\n _to: Address,\n _tokenId: number | string | BN\n ): TxSend<EstateRegistryTransactionReceipt>\n updateLandData(\n estateId: number | string | BN,\n landId: number | string | BN,\n data: string\n ): TxSend<EstateRegistryTransactionReceipt>\n tokenOfOwnerByIndex(\n _owner: Address,\n _index: number | string | BN\n ): TxCall<string>\n estateLandIds(\n a0: number | string | BN,\n a1: number | string | BN\n ): TxCall<string>\n setManyLandUpdateOperator(\n _estateId: number | string | BN,\n _landIds: (number | string | BN)[],\n _operator: Address\n ): TxSend<EstateRegistryTransactionReceipt>\n transferManyLands(\n estateId: number | string | BN,\n landIds: (number | string | BN)[],\n destinatary: Address\n ): TxSend<EstateRegistryTransactionReceipt>\n updateManyLandData(\n estateId: number | string | BN,\n landIds: (number | string | BN)[],\n data: string\n ): TxSend<EstateRegistryTransactionReceipt>\n safeTransferFrom(\n _from: Address,\n _to: Address,\n _tokenId: number | string | BN\n ): TxSend<EstateRegistryTransactionReceipt>\n initialize(\n _name: string,\n _symbol: string\n ): TxSend<EstateRegistryTransactionReceipt>\n exists(_tokenId: number | string | BN): TxCall<boolean>\n tokenByIndex(_index: number | string | BN): TxCall<string>\n setLANDRegistry(_registry: Address): TxSend<EstateRegistryTransactionReceipt>\n updateMetadata(\n estateId: number | string | BN,\n metadata: string\n ): TxSend<EstateRegistryTransactionReceipt>\n ping(): TxSend<EstateRegistryTransactionReceipt>\n ownerOf(_tokenId: number | string | BN): TxCall<Address>\n isUpdateAuthorized(\n operator: Address,\n estateId: number | string | BN\n ): TxCall<boolean>\n balanceOf(_owner: Address): TxCall<string>\n setManyUpdateOperator(\n _estateIds: (number | string | BN)[],\n _operator: Address\n ): TxSend<EstateRegistryTransactionReceipt>\n safeTransferManyFrom(\n from: Address,\n to: Address,\n estateIds: (number | string | BN)[]\n ): TxSend<EstateRegistryTransactionReceipt>\n registry(): TxCall<Address>\n initialize(): TxSend<EstateRegistryTransactionReceipt>\n owner(): TxCall<Address>\n verifyFingerprint(\n estateId: number | string | BN,\n fingerprint: string\n ): TxCall<boolean>\n symbol(): TxCall<string>\n updateOperator(a0: number | string | BN): TxCall<Address>\n estateLandIndex(\n a0: number | string | BN,\n a1: number | string | BN\n ): TxCall<string>\n setApprovalForAll(\n _to: Address,\n _approved: boolean\n ): TxSend<EstateRegistryTransactionReceipt>\n transferLand(\n estateId: number | string | BN,\n landId: number | string | BN,\n destinatary: Address\n ): TxSend<EstateRegistryTransactionReceipt>\n getMetadata(estateId: number | string | BN): TxCall<string>\n setUpdateOperator(\n estateId: number | string | BN,\n operator: Address\n ): TxSend<EstateRegistryTransactionReceipt>\n safeTransferFrom(\n _from: Address,\n _to: Address,\n _tokenId: number | string | BN,\n _data: string\n ): TxSend<EstateRegistryTransactionReceipt>\n getLandEstateId(landId: number | string | BN): TxCall<string>\n isMigrated(contractName: string, migrationId: string): TxCall<boolean>\n initialize(_sender: Address): TxSend<EstateRegistryTransactionReceipt>\n tokenURI(_tokenId: number | string | BN): TxCall<string>\n mint(to: Address, metadata: string): TxSend<EstateRegistryTransactionReceipt>\n safeTransferManyFrom(\n from: Address,\n to: Address,\n estateIds: (number | string | BN)[],\n data: string\n ): TxSend<EstateRegistryTransactionReceipt>\n isApprovedForAll(_owner: Address, _operator: Address): TxCall<boolean>\n setUpdateManager(\n _owner: Address,\n _operator: Address,\n _approved: boolean\n ): TxSend<EstateRegistryTransactionReceipt>\n transferOwnership(newOwner: Address): TxSend<EstateRegistryTransactionReceipt>\n getEstateSize(estateId: number | string | BN): TxCall<string>\n}\nexport interface EstateRegistryDefinition {\n methods: EstateRegistryMethods\n events: EstateRegistryEvents\n eventLogs: EstateRegistryEventLogs\n}\nexport class EstateRegistry extends Contract<EstateRegistryDefinition> {\n constructor(eth: Eth, address?: Address, options?: ContractOptions) {\n super(eth, abi, address, options)\n }\n deploy(): TxSend<EstateRegistryTransactionReceipt> {\n return super.deployBytecode(\n '0x608060405234801561001057600080fd5b5061472b806100206000396000f3006080604052600436106102715763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a7811461027657806306fdde03146102ac578063077f224a1461033657806307ecec3e146103da578063081812fc14610401578063095ea7b3146104355780630a354fce14610459578063150b7a0214610483578063159a64751461050f57806318160ddd146105275780631d11016a1461053c57806323b872dd1461056357806328b34ef61461058d5780632f745c59146105ed5780633970bfd3146106115780633dcbeb001461062c5780634080704914610691578063426a0af3146106c157806342842e0e146107595780634cd88b76146107835780634f558e791461081a5780634f6ccce714610832578063535a920c1461084a57806353c8388e1461086b5780635c36b1861461088f5780636352211e146108a457806365937ab9146108bc57806370a08231146108e057806372554ff51461090157806373b913fa146109615780637b103999146109cc5780638129fc1c146109e15780638da5cb5b146109f65780638f9f4b6314610a0b57806395d89b4114610a695780639d40b85014610a7e5780639f813b1b14610a96578063a22cb46514610ab1578063a506e5dc14610ad7578063a574cea414610afe578063b0b02c6014610b16578063b88d4fde14610b3a578063bb96913214610ba9578063c0bac1a814610bc1578063c4d66de814610c58578063c87b56dd14610c79578063d0def52114610c91578063d93eeb5c14610cbe578063e985e9c514610d67578063ef1db76214610d8e578063f2fde38b14610dba578063f4a4344814610ddb575b600080fd5b34801561028257600080fd5b50610298600160e060020a031960043516610df3565b604080519115158252519081900360200190f35b3480156102b857600080fd5b506102c1610e04565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102fb5781810151838201526020016102e3565b50505050905090810190601f1680156103285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d894369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375094975050509235600160a060020a03169350610e9b92505050565b005b3480156103e657600080fd5b50610298600160a060020a03600435811690602435166112a2565b34801561040d57600080fd5b506104196004356112c2565b60408051600160a060020a039092168252519081900360200190f35b34801561044157600080fd5b506103d8600160a060020a03600435166024356112dd565b34801561046557600080fd5b50610471600435611386565b60408051918252519081900360200190f35b34801561048f57600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526104f294600160a060020a0381358116956024803590921695604435953695608494019181908401838280828437509497506113989650505050505050565b60408051600160e060020a03199092168252519081900360200190f35b34801561051b57600080fd5b50610471600435611467565b34801561053357600080fd5b506104716115e1565b34801561054857600080fd5b506103d8600435602435600160a060020a03604435166115e7565b34801561056f57600080fd5b506103d8600160a060020a036004358116906024351660443561175f565b34801561059957600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526103d894823594602480359536959460649492019190819084018382808284375094975061178b9650505050505050565b3480156105f957600080fd5b50610471600160a060020a0360043516602435611796565b34801561061d57600080fd5b506104716004356024356117e3565b34801561063857600080fd5b506040805160206004602480358281013584810280870186019097528086526103d89684359636966044959194909101929182918501908490808284375094975050509235600160a060020a0316935061181392505050565b34801561069d57600080fd5b506103d8600480359060248035908101910135600160a060020a03604435166119ff565b3480156106cd57600080fd5b506040805160206004602480358281013584810280870186019097528086526103d89684359636966044959194909101929182918501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611aa19650505050505050565b34801561076557600080fd5b506103d8600160a060020a0360043581169060243516604435611adf565b34801561078f57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d894369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611b5f9650505050505050565b34801561082657600080fd5b50610298600435611ed6565b34801561083e57600080fd5b50610471600435611ef3565b34801561085657600080fd5b506103d8600160a060020a0360043516611f28565b34801561087757600080fd5b506103d86004803590602480359081019101356120a3565b34801561089b57600080fd5b506103d86121a8565b3480156108b057600080fd5b50610419600435612228565b3480156108c857600080fd5b50610298600160a060020a036004351660243561224c565b3480156108ec57600080fd5b50610471600160a060020a036004351661225f565b34801561090d57600080fd5b50604080516020600480358082013583810280860185019096528085526103d89536959394602494938501929182918501908490808284375094975050509235600160a060020a0316935061229292505050565b34801561096d57600080fd5b5060408051602060046044358181013583810280860185019096528085526103d8958335600160a060020a0390811696602480359092169636969560649592949301928291850190849080828437509497506122c79650505050505050565b3480156109d857600080fd5b506104196122e3565b3480156109ed57600080fd5b506103d86122f2565b348015610a0257600080fd5b5061041961263f565b348015610a1757600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261029895833595369560449491939091019190819084018382808284375094975061264e9650505050505050565b348015610a7557600080fd5b506102c161266a565b348015610a8a57600080fd5b506104196004356126cb565b348015610aa257600080fd5b506104716004356024356126e6565b348015610abd57600080fd5b506103d8600160a060020a03600435166024351515612703565b348015610ae357600080fd5b506103d8600435602435600160a060020a0360443516612787565b348015610b0a57600080fd5b506102c16004356127f0565b348015610b2257600080fd5b506103d8600435600160a060020a0360243516612891565b348015610b4657600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103d894600160a060020a0381358116956024803590921695604435953695608494019181908401838280828437509497506129769650505050505050565b348015610bb557600080fd5b506104716004356129f6565b348015610bcd57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261029894369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750612a089650505050505050565b348015610c6457600080fd5b506103d8600160a060020a0360043516612acf565b348015610c8557600080fd5b506102c1600435612e3b565b348015610c9d57600080fd5b5061047160048035600160a060020a03169060248035908101910135612eb9565b348015610cca57600080fd5b5060408051602060046044358181013583810280860185019096528085526103d8958335600160a060020a03908116966024803590921696369695606495929493019282918501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750612f869650505050505050565b348015610d7357600080fd5b50610298600160a060020a0360043581169060243516612fbd565b348015610d9a57600080fd5b506103d8600160a060020a03600435811690602435166044351515612feb565b348015610dc657600080fd5b506103d8600160a060020a0360043516613173565b348015610de757600080fd5b506104716004356131fb565b6000610dfe8261320d565b92915050565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e905780601f10610e6557610100808354040283529160200191610e90565b820191906000526020600020905b815481529060010190602001808311610e7357829003601f168201915b505050505090505b90565b6040805190810160405280600e81526020017f45737461746552656769737472790000000000000000000000000000000000008152506040805190810160405280600581526020017f302e302e32000000000000000000000000000000000000000000000000000000815250610f34826040805190810160405280600b81526020016000805160206146c08339815191528152506132ae565b610f3e82826132ae565b600160a060020a0383161515610fc4576040805160e560020a62461bcd02815260206004820152602660248201527f5468652072656769737472792073686f756c6420626520612076616c6964206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b610fce8585611b5f565b610fd733612acf565b600d8054600160a060020a031916600160a060020a0385161790556040805181815283519181019190915282516000805160206146a08339815191529184918491908190602080830191606084019187019080838360005b8381101561104757818101518382015260200161102f565b50505050905090810190601f1680156110745780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156110a757818101518382015260200161108f565b50505050905090810190601f1680156110d45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b602083106111175780518252601f1990920191602091820191016110f8565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b602083106111735780518252601f199092019160209182019101611154565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b602083106111e55780518252601f1990920191602091820191016111c6565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b8087526000805160206146c083398151915293870193845291519095945092508291908083835b6020831061125e5780518252601f19909201916020918201910161123f565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505050505050565b601360209081526000928352604080842090915290825290205460ff1681565b600090815260026020526040902054600160a060020a031690565b60006112e882612228565b9050600160a060020a03838116908216141561130357600080fd5b33600160a060020a038216148061131f575061131f8133612fbd565b151561132a57600080fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600f6020526000908152604090205481565b600d546000908190600160a060020a03163314611425576040805160e560020a62461bcd02815260206004820152602960248201527f4f6e6c79207468652072656769737472792063616e206d616b6520746869732060448201527f6f7065726174696f6e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61142e83613337565b905061143a8185613342565b7f150b7a020000000000000000000000000000000000000000000000000000000091505b50949350505050565b60008060008360405160200180807f65737461746549640000000000000000000000000000000000000000000000008152506008018281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106114e35780518252601f1990920191602091820191016114c4565b51815160209384036101000a6000190180199092169116179052604080519290940182900390912060008a8152600e909252928120549297509195509093505050505b818110156115da576000848152600e6020526040902080548290811061154857fe5b9060005260206000200154604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b602083106115a15780518252601f199092019160209182019101611582565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209590951894505050600101611526565b5050919050565b60095490565b8260006115f382612228565b90506115ff33836135b6565b8061162d5750600160a060020a038116600090815260136020908152604080832033845290915290205460ff165b1515611671576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614660833981519152604482015290519081900360640190fd5b6000848152600f602052604090205485146116d2576040805160e560020a62461bcd0281526020600482015260226024820152600080516020614680833981519152604482015260f060020a61746502606482015290519081900360840190fd5b600d54604080517fb0b02c6000000000000000000000000000000000000000000000000000000000815260048101879052600160a060020a0386811660248301529151919092169163b0b02c6091604480830192600092919082900301818387803b15801561174057600080fd5b505af1158015611754573d6000803e3d6000fd5b505050505050505050565b60008181526012602052604090208054600160a060020a031916905561178683838361360d565b505050565b6117868383836136fa565b60006117a18361225f565b82106117ac57600080fd5b600160a060020a03831660009081526007602052604090208054839081106117d057fe5b9060005260206000200154905092915050565b600e602052816000526040600020818154811015156117fe57fe5b90600052602060002001600091509150505481565b600083600061182182612228565b905061182d33836135b6565b8061185b5750600160a060020a038116600090815260136020908152604080832033845290915290205460ff165b151561189f576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614660833981519152604482015290519081900360640190fd5b600092505b84518310156119375785600f600087868151811015156118c057fe5b9060200190602002015181526020019081526020016000205414151561192c576040805160e560020a62461bcd0281526020600482015260226024820152600080516020614680833981519152604482015260f060020a61746502606482015290519081900360840190fd5b6001909201916118a4565b600d54604080517f72554ff5000000000000000000000000000000000000000000000000000000008152600160a060020a038781166024830152600482019283528851604483015288519316926372554ff592899289928291606401906020808701910280838360005b838110156119b95781810151838201526020016119a1565b505050509050019350505050600060405180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b50505050505050505050565b60008085611a0d33826135b6565b1515611a60576040805160e560020a62461bcd02815260206004820152602360248201526000805160206146e0833981519152604482015260e960020a623332b902606482015290519081900360840190fd5b849250600091505b82821015611a9857611a8d87878785818110611a8057fe5b9050602002013586613947565b600190910190611a68565b50505050505050565b815160005b81811015611ad857611ad0858583815181101515611ac057fe5b90602001906020020151856136fa565b600101611aa6565b5050505050565b80611aea33826135b6565b1515611b3d576040805160e560020a62461bcd02815260206004820152602360248201526000805160206146e0833981519152604482015260e960020a623332b902606482015290519081900360840190fd5b611b598484846020604051908101604052806000815250612976565b50505050565b6040805190810160405280600b81526020017f455243373231546f6b656e0000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e392e30000000000000000000000000000000000000000000000000000000815250611bf8826040805190810160405280600b81526020016000805160206146c08339815191528152506132ae565b611c0282826132ae565b8351611c159060059060208701906145a7565b508251611c299060069060208601906145a7565b506000805160206146a08339815191528282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611c7c578181015183820152602001611c64565b50505050905090810190601f168015611ca95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015611cdc578181015183820152602001611cc4565b50505050905090810190601f168015611d095780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b60208310611d4c5780518252601f199092019160209182019101611d2d565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310611da85780518252601f199092019160209182019101611d89565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b60208310611e1a5780518252601f199092019160209182019101611dfb565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b8087526000805160206146c083398151915293870193845291519095945092508291908083835b60208310611e935780518252601f199092019160209182019101611e74565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff191693151593909317909255505050505050565b600090815260016020526040902054600160a060020a0316151590565b6000611efd6115e1565b8210611f0857600080fd5b6009805483908110611f1657fe5b90600052602060002001549050919050565b600c54600160a060020a03163314611f3f57600080fd5b611f5181600160a060020a0316613be5565b1515611fcd576040805160e560020a62461bcd02815260206004820152602e60248201527f546865204c414e4420726567697374727920616464726573732073686f756c6460448201527f206265206120636f6e7472616374000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0381161515612053576040805160e560020a62461bcd02815260206004820152602960248201527f546865204c414e4420726567697374727920616464726573732073686f756c6460448201527f2062652076616c69640000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600d8054600160a060020a031916600160a060020a0383811691909117918290556040519116907f2e88792af6f2248ed486ffffc86edf9bc197596990f7b406d5f867a1dd930ba590600090a250565b826120ae3382613bed565b1515612104576040805160e560020a62461bcd02815260206004820152601160248201527f556e617574686f72697a65642075736572000000000000000000000000000000604482015290519081900360640190fd5b61213e8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843750613c61945050505050565b3361214885612228565b600160a060020a0316857f47c705b9219229ad762fca605f08fb024a3415d0ae78af5d319820c72e51041486866040518080602001828103825284848281815260200192508082843760405192018290039550909350505050a450505050565b600d60009054906101000a9004600160a060020a0316600160a060020a0316635c36b1866040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561221457600080fd5b505af1158015611b59573d6000803e3d6000fd5b600081815260016020526040812054600160a060020a0316801515610dfe57600080fd5b60006122588383613bed565b9392505050565b6000600160a060020a038216151561227657600080fd5b50600160a060020a031660009081526003602052604090205490565b60005b8251811015611786576122bf83828151811015156122af57fe5b9060200190602002015183612891565b600101612295565b6117868383836020604051908101604052806000815250612f86565b600d54600160a060020a031681565b6040805190810160405280600a81526020017f4d696772617461626c65000000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e322e3100000000000000000000000000000000000000000000000000000081525061238b826040805190810160405280600b81526020016000805160206146c08339815191528152506132ae565b61239582826132ae565b6000805160206146a08339815191528282604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156123e75781810151838201526020016123cf565b50505050905090810190601f1680156124145780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561244757818101518382015260200161242f565b50505050905090810190601f1680156124745780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b602083106124b75780518252601f199092019160209182019101612498565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b602083106125135780518252601f1990920191602091820191016124f4565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b602083106125855780518252601f199092019160209182019101612566565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b8087526000805160206146c083398151915293870193845291519095945092508291908083835b602083106125fe5780518252601f1990920191602091820191016125df565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505050565b600c54600160a060020a031681565b600061265982613c80565b61266284611467565b149392505050565b60068054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e905780601f10610e6557610100808354040283529160200191610e90565b601260205260009081526040902054600160a060020a031681565b601060209081526000928352604080842090915290825290205481565b600160a060020a03821633141561271957600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b8261279233826135b6565b15156127e5576040805160e560020a62461bcd02815260206004820152602360248201526000805160206146e0833981519152604482015260e960020a623332b902606482015290519081900360840190fd5b611b59848484613947565b60008181526011602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156128855780601f1061285a57610100808354040283529160200191612885565b820191906000526020600020905b81548152906001019060200180831161286857829003601f168201915b50505050509050919050565b81600061289d82612228565b90506128a933836135b6565b806128d75750600160a060020a038116600090815260136020908152604080832033845290915290205460ff165b151561291b576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614660833981519152604482015290519081900360640190fd5b6000848152601260205260408082208054600160a060020a031916600160a060020a0387169081179091559051909186917f9d9dd80a56a16f715df6eb40b771e24ff8cbea6eed9de28473ce0f28fe5602a99190a350505050565b8161298133826135b6565b15156129d4576040805160e560020a62461bcd02815260206004820152602360248201526000805160206146e0833981519152604482015260e960020a623332b902606482015290519081900360840190fd5b6129df85858561175f565b6129eb85858585613d18565b1515611ad857600080fd5b6000908152600f602052604090205490565b600080836040518082805190602001908083835b60208310612a3b5780518252601f199092019160209182019101612a1c565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310612a975780518252601f199092019160209182019101612a78565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1695945050505050565b6040805190810160405280600781526020017f4f776e61626c65000000000000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e392e30000000000000000000000000000000000000000000000000000000815250612b68826040805190810160405280600b81526020016000805160206146c08339815191528152506132ae565b612b7282826132ae565b600c8054600160a060020a031916600160a060020a0385161790556040805181815283519181019190915282516000805160206146a08339815191529184918491908190602080830191606084019187019080838360005b83811015612be2578181015183820152602001612bca565b50505050905090810190601f168015612c0f5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612c42578181015183820152602001612c2a565b50505050905090810190601f168015612c6f5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b60208310612cb25780518252601f199092019160209182019101612c93565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310612d0e5780518252601f199092019160209182019101612cef565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b60208310612d805780518252601f199092019160209182019101612d61565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b8087526000805160206146c083398151915293870193845291519095945092508291908083835b60208310612df95780518252601f199092019160209182019101612dda565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff1916931515939093179092555050505050565b6060612e4682611ed6565b1515612e5157600080fd5b6000828152600b602090815260409182902080548351601f6002600019610100600186161502019093169290920491820184900484028101840190945280845290918301828280156128855780601f1061285a57610100808354040283529160200191612885565b600d54600090600160a060020a03163314612f44576040805160e560020a62461bcd02815260206004820152602960248201527f4f6e6c79207468652072656769737472792063616e206d616b6520746869732060448201527f6f7065726174696f6e0000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612f7e8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843750613e80945050505050565b949350505050565b60005b8251811015611ad857612fb585858584815181101515612fa557fe5b9060200190602002015185612976565b600101612f89565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b600160a060020a038216331415613072576040805160e560020a62461bcd02815260206004820152602b60248201527f546865206f70657261746f722073686f756c6420626520646966666572656e7460448201527f2066726f6d206f776e6572000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383163314806130ac5750600160a060020a038316600090815260046020908152604080832033845290915290205460ff165b1515613102576040805160e560020a62461bcd02815260206004820152601160248201527f556e617574686f72697a65642075736572000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03838116600081815260136020908152604080832094871680845294825291829020805460ff191686151590811790915582519081529151339493927fd79fbfe1644c022b9150727d871532bfcc3e27ffee86fc596a062770ac97b04292908290030190a4505050565b600c54600160a060020a0316331461318a57600080fd5b600160a060020a038116151561319f57600080fd5b600c54604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600c8054600160a060020a031916600160a060020a0392909216919091179055565b6000908152600e602052604090205490565b600061321882613fd1565b806132605750604080517f6765744d657461646174612875696e743235362900000000000000000000000081529051908190036014019020600160e060020a03198381169116145b80610dfe5750604080517f76657269667946696e6765727072696e742875696e743235362c62797465732981529051908190036020019020600160e060020a03198381169116149050919050565b6132b88282612a08565b15613333576040805160e560020a62461bcd02815260206004820152603260248201527f52657175657374656420746172676574206d6967726174696f6e20494420686160448201527f7320616c7265616479206265656e2072756e0000000000000000000000000000606482015290519081900360840190fd5b5050565b6000610dfe82613c80565b61334b82611ed6565b15156133a1576040805160e560020a62461bcd02815260206004820152601a60248201527f546865204573746174652069642073686f756c64206578697374000000000000604482015290519081900360640190fd5b6000818152600f60205260409020541561342b576040805160e560020a62461bcd02815260206004820152602660248201527f546865204c414e4420697320616c7265616479206f776e656420627920616e2060448201527f4573746174650000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600d54604080517f6352211e0000000000000000000000000000000000000000000000000000000081526004810184905290513092600160a060020a031691636352211e9160248083019260209291908290030181600087803b15801561349157600080fd5b505af11580156134a5573d6000803e3d6000fd5b505050506040513d60208110156134bb57600080fd5b5051600160a060020a031614613541576040805160e560020a62461bcd02815260206004820152602960248201527f5468652045737461746552656769737472792063616e6e6f74206d616e61676560448201527f20746865204c414e440000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6000828152600e60209081526040808320805460018101825581855283852001859055848452600f835281842086905585845254601083528184208585529092528083209190915551829184917fff0e52667d53255667dc777a00af81038a4646367b0d73d8ee8540ca5b0c9a2e9190a35050565b6000806135c283612228565b905080600160a060020a031684600160a060020a031614806135fd575083600160a060020a03166135f2846112c2565b600160a060020a0316145b80612f7e5750612f7e8185612fbd565b8061361833826135b6565b151561366b576040805160e560020a62461bcd02815260206004820152602360248201526000805160206146e0833981519152604482015260e960020a623332b902606482015290519081900360840190fd5b600160a060020a038416151561368057600080fd5b600160a060020a038316151561369557600080fd5b61369f8483614046565b6136a984836140a8565b6136b383836141e1565b8183600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b600080848461370a33838361422a565b151561374e576040805160e560020a62461bcd0281526020600482015260116024820152600080516020614660833981519152604482015290519081900360640190fd5b6000868152600f602052604090205487146137af576040805160e560020a62461bcd0281526020600482015260226024820152600080516020614680833981519152604482015260f060020a61746502606482015290519081900360840190fd5b600d54604080517f7efd9112000000000000000000000000000000000000000000000000000000008152600481018990528151600160a060020a0390931692637efd9112926024808401939192918290030181600087803b15801561381357600080fd5b505af1158015613827573d6000803e3d6000fd5b505050506040513d604081101561383d57600080fd5b508051602091820151600d546040517fd4dd159400000000000000000000000000000000000000000000000000000000815260048101848152602482018490526060604483019081528b5160648401528b51959a50939850600160a060020a039092169463d4dd1594948a948a948d949093919260849091019185019080838360005b838110156138d85781810151838201526020016138c0565b50505050905090810190601f1680156139055780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561392657600080fd5b505af115801561393a573d6000803e3d6000fd5b5050505050505050505050565b600080808080600160a060020a03861615156139d3576040805160e560020a62461bcd02815260206004820152602d60248201527f596f752063616e206e6f74207472616e73666572204c414e4420746f20616e2060448201527f656d707479206164647265737300000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600e60209081526040808320601083528184208b85529283905292205491965094501515613a4c576040805160e560020a62461bcd0281526020600482015260226024820152600080516020614680833981519152604482015260f060020a61746502606482015290519081900360840190fd5b8454613a5f90600163ffffffff6142e216565b600088815260208690526040902054909350613a8290600163ffffffff6142e216565b91508483815481101515613a9257fe5b6000918252602090912001549050613ab182600163ffffffff6142f416565b60008281526020869052604090205584548190869084908110613ad057fe5b6000918252602090912001558454859084908110613aea57fe5b600091825260208220015582613b008682614625565b50600087815260208581526040808320839055600f909152808220829055600d5481517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152600160a060020a038a81166024830152604482018c9052925192909116926342842e0e9260648084019382900301818387803b158015613b8b57600080fd5b505af1158015613b9f573d6000803e3d6000fd5b5050505085600160a060020a031687897f7932eb5ab0d4d4d172776074ee15d13d708465ff5476902ed15a4965434fcab160405160405180910390a45050505050505050565b6000903b1190565b600080613bf983612228565b9050613c0584846135b6565b80613c295750600083815260126020526040902054600160a060020a038581169116145b80612f7e5750600160a060020a0380821660009081526013602090815260408083209388168352929052205460ff1691505092915050565b60008281526011602090815260409091208251611786928401906145a7565b600080805b8351811015613d1157613c9f81600863ffffffff61430116565b8482815181101515613cad57fe5b60209101015160029190910a7f0100000000000000000000000000000000000000000000000000000000000000918290049091027fff0000000000000000000000000000000000000000000000000000000000000016049190911790600101613c85565b5092915050565b600080613d2d85600160a060020a0316613be5565b1515613d3c576001915061145e565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03898116602485015260448401889052608060648501908152875160848601528751918a169463150b7a0294938c938b938b93909160a490910190602085019080838360005b83811015613dcf578181015183820152602001613db7565b50505050905090810190601f168015613dfc5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613e1e57600080fd5b505af1158015613e32573d6000803e3d6000fd5b505050506040513d6020811015613e4857600080fd5b5051600160e060020a0319167f150b7a0200000000000000000000000000000000000000000000000000000000149695505050505050565b600080600160a060020a0384161515613f08576040805160e560020a62461bcd028152602060048201526024808201527f596f752063616e206e6f74206d696e7420746f20616e20656d7074792061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b613f1061432a565b9050613f1c848261434a565b613f268184613c61565b8084600160a060020a03167fd66691e9db811aef0bc0900328bd314b23f1f2285d5cb6d4baa4d959b3645a3c856040518080602001828103825283818151815260200191508051906020019080838360005b83811015613f90578181015183820152602001613f78565b50505050905090810190601f168015613fbd5780820380516001836020036101000a031916815260200191505b509250505060405180910390a39392505050565b6000613fdc82614399565b806140105750600160e060020a031982167f780e9d6300000000000000000000000000000000000000000000000000000000145b80610dfe575050600160e060020a0319167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b81600160a060020a031661405982612228565b600160a060020a03161461406c57600080fd5b600081815260026020526040902054600160a060020a0316156133335760009081526002602052604090208054600160a060020a031916905550565b60008060006140b7858561440e565b600084815260086020908152604080832054600160a060020a03891684526007909252909120549093506140f290600163ffffffff6142e216565b600160a060020a03861660009081526007602052604090208054919350908390811061411a57fe5b90600052602060002001549050806007600087600160a060020a0316600160a060020a031681526020019081526020016000208481548110151561415a57fe5b6000918252602080832090910192909255600160a060020a038716815260079091526040812080548490811061418c57fe5b6000918252602080832090910192909255600160a060020a03871681526007909152604090208054906141c3906000198301614625565b50600093845260086020526040808520859055908452909220555050565b60006141ed8383614497565b50600160a060020a039091166000908152600760209081526040808320805460018101825590845282842081018590559383526008909152902055565b60006142368484613bed565b80612f7e5750600d54604080517f9d40b850000000000000000000000000000000000000000000000000000000008152600481018590529051600160a060020a03808816931691639d40b8509160248083019260209291908290030181600087803b1580156142a457600080fd5b505af11580156142b8573d6000803e3d6000fd5b505050506040513d60208110156142ce57600080fd5b5051600160a060020a031614949350505050565b6000828211156142ee57fe5b50900390565b81810182811015610dfe57fe5b600082151561431257506000610dfe565b5081810281838281151561432257fe5b0414610dfe57fe5b600061434560016143396115e1565b9063ffffffff6142f416565b905090565b614354828261451a565b600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af015550565b60006143a482614575565b806143d85750600160e060020a031982167f80ac58cd00000000000000000000000000000000000000000000000000000000145b80610dfe575050600160e060020a0319167f4f558e79000000000000000000000000000000000000000000000000000000001490565b81600160a060020a031661442182612228565b600160a060020a03161461443457600080fd5b600160a060020a03821660009081526003602052604090205461445e90600163ffffffff6142e216565b600160a060020a039092166000908152600360209081526040808320949094559181526001909152208054600160a060020a0319169055565b600081815260016020526040902054600160a060020a0316156144b957600080fd5b60008181526001602081815260408084208054600160a060020a031916600160a060020a03881690811790915584526003909152909120546144fa916142f4565b600160a060020a0390921660009081526003602052604090209190915550565b600160a060020a038216151561452f57600080fd5b61453982826141e1565b6040518190600160a060020a038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600160e060020a031981167f01ffc9a70000000000000000000000000000000000000000000000000000000014919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106145e857805160ff1916838001178555614615565b82800160010185558215614615579182015b828111156146155782518255916020019190600101906145fa565b50614621929150614645565b5090565b815481835581811115611786576000838152602090206117869181019083015b610e9891905b80821115614621576000815560010161464b5600756e617574686f72697a65642075736572000000000000000000000000000000546865204c414e44206973206e6f742070617274206f66207468652045737461dd117a11c22118c9dee4b5a67ce578bc44529dce21ee0ccc439588fbb9fb4ea3696e697469616c697a65640000000000000000000000000000000000000000004f6e6c79206f776e6572206f72206f70657261746f722063616e207472616e73a165627a7a7230582045f34176ffa9292b346d1694a7734989d9d47a833be247a8467a2eb115a9104a0029'\n ) as any\n }\n}\nexport var EstateRegistryAbi = abi\n","import { Eth } from 'web3x/eth'\nimport { Address } from 'web3x/address'\nimport { NFTCategory } from '@dcl/schemas'\nimport { getConnectedProvider } from 'decentraland-dapps/dist/lib/eth'\nimport { EstateRegistry } from '../../../contracts/EstateRegistry'\nimport { NFT } from '../types'\nimport { getContract } from '../../contract/utils'\n\nexport const getSelection = (estate: NFT['data']['estate']) => {\n return estate!.parcels.map(pair => ({\n x: +pair.x,\n y: +pair.y\n }))\n}\n\nexport const getCenter = (selection: { x: number; y: number }[]) => {\n const xs = [...new Set(selection.map(coords => coords.x).sort())]\n const ys = [...new Set(selection.map(coords => coords.y).sort())]\n const x = xs[(xs.length / 2) | 0]\n const y = ys[(ys.length / 2) | 0]\n return [x, y]\n}\n\nexport async function getFingerprint(estateId: string) {\n const provider = await getConnectedProvider()\n if (provider) {\n const eth = new Eth(provider)\n const estate = getContract({ category: NFTCategory.ESTATE })\n const estateRegistry = new EstateRegistry(\n eth,\n Address.fromString(estate.address)\n )\n return estateRegistry.methods.getFingerprint(estateId).call()\n }\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { LazyImage } from 'react-lazy-images'\nimport classNames from 'classnames'\nimport { BodyShape, NFTCategory, PreviewEmote, Rarity } from '@dcl/schemas'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { getAnalytics } from 'decentraland-dapps/dist/modules/analytics/utils'\nimport { Button, Center, Loader, Popup, WearablePreview } from 'decentraland-ui'\n\nimport { getAssetImage, getAssetName } from '../../modules/asset/utils'\nimport { getSelection, getCenter } from '../../modules/nft/estate/utils'\nimport { Atlas } from '../Atlas'\nimport { Props } from './AssetImage.types'\nimport './AssetImage.css'\nimport { config } from '../../config'\nimport { Env } from '@dcl/ui-env'\n\n// 1x1 transparent pixel\nconst PIXEL =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiYAAAAAkAAxkR2eQAAAAASUVORK5CYII='\n\nconst DEFAULT_COLOR = 'bbbbbb'\n\ntype Color = { r: number; g: number; b: number }\ntype WrappedColor = { color: Color }\n\nconst valueToHex = (value: number) =>\n ('00' + Math.min(255, (value * 255) | 0).toString(16)).slice(-2)\n\nconst colorToHex = (color: Color): string => {\n if (isColor(color)) {\n return valueToHex(color.r) + valueToHex(color.g) + valueToHex(color.b)\n }\n const maybeWrapped = (color as unknown) as Partial<WrappedColor>\n if (isWrapped(maybeWrapped)) {\n return colorToHex(maybeWrapped.color!)\n }\n\n return DEFAULT_COLOR\n}\n\n// sometimes the color come from the catalyst wrapped in an extra \"color\": { } object\nconst isWrapped = (maybeWrapped: Partial<WrappedColor>) =>\n maybeWrapped.color && isColor(maybeWrapped.color)\nconst isColor = (maybeColor: Partial<Color>) =>\n typeof maybeColor.r === 'number' &&\n typeof maybeColor.g === 'number' &&\n typeof maybeColor.b === 'number'\n\nconst AssetImage = (props: Props) => {\n const {\n asset,\n isDraggable,\n withNavigation,\n hasPopup,\n zoom,\n isSmall,\n showMonospace,\n avatar,\n isTryingOn,\n onSetIsTryingOn\n } = props\n const { parcel, estate, wearable, emote, ens } = asset.data\n\n const [isLoadingWearablePreview, setIsLoadingWearablePreview] = useState(\n isDraggable\n )\n const [wearablePreviewError, setWearablePreviewError] = useState(false)\n const handleLoad = useCallback(() => {\n setIsLoadingWearablePreview(false)\n setWearablePreviewError(false)\n }, [])\n const handleError = useCallback(error => {\n console.warn(error)\n setWearablePreviewError(true)\n setIsLoadingWearablePreview(false)\n }, [])\n const handleTryOut = useCallback(() => {\n if (!isTryingOn) {\n onSetIsTryingOn(true)\n setIsLoadingWearablePreview(true)\n }\n }, [isTryingOn, onSetIsTryingOn])\n const handleShowWearable = useCallback(() => {\n if (isTryingOn) {\n onSetIsTryingOn(false)\n setIsLoadingWearablePreview(true)\n }\n }, [isTryingOn, onSetIsTryingOn])\n\n const estateSelection = useMemo(() => (estate ? getSelection(estate) : []), [\n estate\n ])\n\n const [isTracked, setIsTracked] = useState(false)\n\n // pick a random emote\n const previewEmote = useMemo(() => {\n const poses = [\n PreviewEmote.FASHION,\n PreviewEmote.FASHION_2,\n PreviewEmote.FASHION_3\n ]\n return isTryingOn ? poses[(Math.random() * poses.length) | 0] : undefined\n }, [isTryingOn])\n\n // This effect is here just to track on which mode the preview is initialized, that's why it has an empty dependency array, so this is triggered once on mount\n useEffect(() => {\n const isPreview = asset.category === NFTCategory.WEARABLE && isDraggable\n if (!isTracked && isPreview) {\n getAnalytics().track('Init Preview', {\n mode: isTryingOn ? 'avatar' : 'wearable'\n })\n setIsTracked(true)\n }\n }, []) // eslint-disable-line\n\n switch (asset.category) {\n case NFTCategory.PARCEL: {\n const x = +parcel!.x\n const y = +parcel!.y\n const selection = [{ x, y }]\n return (\n <Atlas\n x={x}\n y={y}\n isDraggable={isDraggable}\n withPopup={hasPopup}\n withNavigation={withNavigation}\n selection={selection}\n zoom={zoom}\n />\n )\n }\n\n case NFTCategory.ESTATE: {\n const [x, y] = getCenter(estateSelection)\n return (\n <Atlas\n x={x}\n y={y}\n isDraggable={isDraggable}\n withPopup={hasPopup}\n withNavigation={withNavigation}\n selection={estateSelection}\n zoom={zoom}\n isEstate\n />\n )\n }\n\n case NFTCategory.WEARABLE: {\n let wearablePreview = null\n\n if (isDraggable) {\n let itemId: string | undefined\n let tokenId: string | undefined\n let skin\n let hair\n if ('itemId' in asset && asset.itemId) {\n itemId = asset.itemId\n } else if ('tokenId' in asset && asset.tokenId) {\n tokenId = asset.tokenId\n }\n if (avatar) {\n skin = colorToHex(avatar.avatar.skin.color)\n hair = colorToHex(avatar.avatar.hair.color)\n }\n\n const hasRepresentation = avatar\n ? wearable &&\n wearable.bodyShapes.some(shape =>\n avatar.avatar.bodyShape.includes(shape)\n )\n : true\n\n const missingBodyShape =\n hasRepresentation || !avatar\n ? null\n : avatar.avatar.bodyShape.includes(BodyShape.MALE)\n ? t('wearable_preview.missing_representation_error.male')\n : t('wearable_preview.missing_representation_error.female')\n\n const isTryingOnEnabled = isTryingOn && hasRepresentation\n\n wearablePreview = (\n <>\n <WearablePreview\n contractAddress={asset.contractAddress}\n itemId={itemId}\n tokenId={tokenId}\n profile={\n isTryingOnEnabled\n ? avatar\n ? avatar.ethAddress\n : 'default'\n : undefined\n }\n skin={skin}\n hair={hair}\n emote={previewEmote}\n onLoad={handleLoad}\n onError={handleError}\n dev={config.is(Env.DEVELOPMENT)}\n />\n {isLoadingWearablePreview ? (\n <Center>\n <Loader\n className=\"wearable-preview-loader\"\n active\n size=\"large\"\n />\n </Center>\n ) : null}\n <Popup\n content={\n <T\n id=\"wearable_preview.missing_representation_error.message\"\n values={{ bodyShape: <b>{missingBodyShape}</b> }}\n />\n }\n trigger={\n <div className=\"preview-toggle-wrapper\">\n <Popup\n position=\"top center\"\n content={<T id=\"wearable_preview.toggle_wearable\" />}\n trigger={\n <Button\n size=\"small\"\n className={classNames(\n 'preview-toggle',\n 'preview-toggle-wearable',\n {\n 'is-active': !isTryingOnEnabled\n }\n )}\n onClick={handleShowWearable}\n />\n }\n disabled={!hasRepresentation}\n />\n <Popup\n position=\"top center\"\n content={<T id=\"wearable_preview.toggle_avatar\" />}\n trigger={\n <Button\n size=\"small\"\n className={classNames(\n 'preview-toggle',\n 'preview-toggle-avatar',\n {\n 'is-active': isTryingOnEnabled,\n 'is-disabled': !hasRepresentation\n }\n )}\n onClick={hasRepresentation ? handleTryOut : undefined}\n />\n }\n disabled={!hasRepresentation}\n />\n </div>\n }\n position=\"top center\"\n disabled={hasRepresentation}\n />\n </>\n )\n }\n const [light, dark] = Rarity.getGradient(wearable!.rarity)\n const backgroundImage = `radial-gradient(${light}, ${dark})`\n const classes =\n 'rarity-background ' +\n (isLoadingWearablePreview ? 'is-loading-wearable-preview' : '')\n const showWearablePreview = !!wearablePreview && !wearablePreviewError\n return (\n <div\n className={classes}\n style={{\n backgroundImage\n }}\n >\n {showWearablePreview ? (\n wearablePreview\n ) : (\n <img\n alt={getAssetName(asset)}\n className=\"image\"\n src={getAssetImage(asset)}\n />\n )}\n </div>\n )\n }\n\n case NFTCategory.EMOTE: {\n let wearablePreview = null\n let itemId: string | undefined\n let tokenId: string | undefined\n if ('itemId' in asset && asset.itemId) {\n itemId = asset.itemId\n } else if ('tokenId' in asset && asset.tokenId) {\n tokenId = asset.tokenId\n }\n\n if (isDraggable) {\n wearablePreview = (\n <>\n <WearablePreview\n contractAddress={asset.contractAddress}\n itemId={itemId}\n tokenId={tokenId}\n profile={avatar ? avatar.ethAddress : 'default'}\n onLoad={handleLoad}\n onError={handleError}\n dev={config.is(Env.DEVELOPMENT)}\n />\n {isLoadingWearablePreview ? (\n <Center>\n <Loader\n className=\"wearable-preview-loader\"\n active\n size=\"large\"\n />\n </Center>\n ) : null}\n </>\n )\n }\n const [light, dark] = Rarity.getGradient(emote!.rarity)\n const backgroundImage = `radial-gradient(${light}, ${dark})`\n const classes =\n 'rarity-background ' +\n (isLoadingWearablePreview ? 'is-loading-wearable-preview' : '')\n const showWearablePreview = !!wearablePreview && !wearablePreviewError\n return (\n <div\n className={classes}\n style={{\n backgroundImage\n }}\n >\n {showWearablePreview ? (\n wearablePreview\n ) : (\n <img\n alt={getAssetName(asset)}\n className=\"image\"\n src={getAssetImage(asset)}\n />\n )}\n </div>\n )\n }\n\n case NFTCategory.ENS: {\n let name = ens!.subdomain\n let classes = ['ens-subdomain']\n if (isSmall) {\n name = name.slice(0, 2)\n classes.push('small')\n }\n return (\n <div className={classes.join(' ')}>\n <div className=\"name\">{name}</div>\n {showMonospace ? <div className=\"monospace\">{name}</div> : null}\n </div>\n )\n }\n\n default: {\n return (\n <LazyImage\n src={getAssetImage(asset)}\n alt={getAssetName(asset)}\n debounceDurationMs={1000}\n placeholder={({ ref }) => (\n <div ref={ref}>\n <Loader size=\"small\" active />\n </div>\n )}\n actual={({ imageProps }) => (\n <img className=\"image\" alt={getAssetName(asset)} {...imageProps} />\n )}\n />\n )\n }\n }\n}\n\n// the purpose of this wrapper is to make the div always be square, by using a 1x1 transparent pixel\nconst AssetImageWrapper = (props: Props) => {\n const { asset, className, ...rest } = props\n\n let classes = 'AssetImage'\n if (className) {\n classes += ' ' + className\n }\n\n return (\n <div className={classes}>\n <img src={PIXEL} alt=\"pixel\" className=\"pixel\" />\n <div className=\"image-wrapper\">\n <AssetImage asset={asset} {...rest} />\n </div>\n </div>\n )\n}\n\nAssetImage.defaultProps = {\n isDraggable: false,\n withNavigation: false,\n zoom: 0.5,\n isSmall: false,\n showMonospace: false\n}\n\nexport default React.memo(AssetImageWrapper)\n","import { getData as getProfiles } from 'decentraland-dapps/dist/modules/profile/selectors'\nimport { Avatar } from '@dcl/schemas'\nimport { connect } from 'react-redux'\nimport { RootState } from '../../modules/reducer'\nimport { getWallet } from '../../modules/wallet/selectors'\nimport { getIsTryingOn } from '../../modules/ui/preview/selectors'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './AssetImage.types'\nimport AssetImage from './AssetImage'\nimport { setIsTryingOn } from '../../modules/ui/preview/actions'\n\nconst mapState = (state: RootState): MapStateProps => {\n const profiles = getProfiles(state)\n const wallet = getWallet(state)\n let avatar: Avatar | undefined = undefined\n if (wallet && !!profiles[wallet.address]) {\n const profile = profiles[wallet.address]\n avatar = profile.avatars[0]\n }\n return {\n avatar,\n isTryingOn: getIsTryingOn(state)\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onSetIsTryingOn: value => dispatch(setIsTryingOn(value))\n})\n\nexport default connect(mapState, mapDispatch)(AssetImage)\n","import ListedBadge from './ListedBadge'\n\nexport default ListedBadge\n","import classNames from 'classnames'\nimport { Badge, Color, Icon } from 'decentraland-ui'\nimport styles from './ListedBadge.module.css'\n\ntype Props = {\n className?: string\n}\n\nconst ListedBadge = ({ className }: Props) => (\n <Badge\n className={classNames(styles.badge, className)}\n color={Color.SUMMER_RED}\n >\n <Icon className={styles.icon} name=\"tag\" />\n </Badge>\n)\n\nexport default ListedBadge\n","import React from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Link } from 'react-router-dom'\nimport { Card } from 'decentraland-ui'\nimport { formatWeiMANA } from '../../lib/mana'\nimport { getAssetName, getAssetUrl } from '../../modules/asset/utils'\nimport { NFT } from '../../modules/nft/types'\nimport { Mana } from '../Mana'\nimport { ParcelTags } from './ParcelTags'\nimport { EstateTags } from './EstateTags'\nimport { WearableTags } from './WearableTags'\nimport { EmoteTags } from './EmoteTags'\nimport { ENSTags } from './ENSTags'\nimport { AssetImage } from '../AssetImage'\nimport { Props } from './AssetCard.types'\nimport ListedBadge from '../ListedBadge'\nimport './AssetCard.css'\n\nconst AssetCard = (props: Props) => {\n const { asset, price, showListedTag } = props\n\n const title = getAssetName(asset)\n const { parcel, estate, wearable, emote, ens } = asset.data\n\n return (\n <Card className=\"AssetCard\" link as={Link} to={getAssetUrl(asset)}>\n <AssetImage asset={asset} showMonospace />\n {showListedTag && <ListedBadge className=\"listed-badge\" />}\n <Card.Content>\n <Card.Header>\n <div className=\"title\">{title}</div>\n {price ? (\n <Mana network={asset.network} inline>\n {formatWeiMANA(price)}\n </Mana>\n ) : null}\n </Card.Header>\n <Card.Meta>{t(`networks.${asset.network.toLowerCase()}`)}</Card.Meta>\n {parcel ? <ParcelTags nft={asset as NFT} /> : null}\n {estate ? <EstateTags nft={asset as NFT} /> : null}\n {wearable ? <WearableTags asset={asset} /> : null}\n {emote ? <EmoteTags nft={asset as NFT} /> : null}\n {ens ? <ENSTags nft={asset as NFT} /> : null}\n </Card.Content>\n </Card>\n )\n}\n\nexport default React.memo(AssetCard)\n","import { connect } from 'react-redux'\nimport { RootState } from '../../modules/reducer'\nimport { getData } from '../../modules/order/selectors'\nimport { getActiveOrder } from '../../modules/order/utils'\nimport { MapStateProps, OwnProps, MapDispatchProps } from './AssetCard.types'\nimport AssetCard from './AssetCard'\nimport { getView } from '../../modules/ui/browse/selectors'\nimport { getAssetPrice } from '../../modules/asset/utils'\nimport { View } from '../../modules/ui/types'\n\nconst mapState = (state: RootState, ownProps: OwnProps): MapStateProps => {\n let { order, asset } = ownProps\n\n if (!order) {\n const orders = getData(state)\n order = getActiveOrder(asset, orders) || undefined\n }\n\n const view = getView(state)\n const price = getAssetPrice(asset, order)\n\n return {\n price: getAssetPrice(asset, order),\n showListedTag: Boolean(view === View.CURRENT_ACCOUNT && price)\n }\n}\n\nconst mapDispatch = (): MapDispatchProps => ({})\n\nexport default connect(mapState, mapDispatch)(AssetCard)\n","import React, { useCallback } from 'react'\nimport { Card, Button, Loader } from 'decentraland-ui'\nimport { Item } from '@dcl/schemas'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { getAnalytics } from 'decentraland-dapps/dist/modules/analytics/utils'\n\nimport { getMaxQuerySize, MAX_PAGE, PAGE_SIZE } from '../../modules/vendor/api'\nimport { AssetType } from '../../modules/asset/types'\nimport { NFT } from '../../modules/nft/types'\nimport { AssetCard } from '../AssetCard'\nimport { Props } from './AssetList.types'\n\nconst AssetList = (props: Props) => {\n const {\n vendor,\n assetType,\n items,\n nfts,\n page,\n count,\n isLoading,\n onBrowse,\n urlNext\n } = props\n\n const assets: (NFT | Item)[] = assetType === AssetType.ITEM ? items : nfts\n\n const handleLoadMore = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n e.preventDefault()\n const newPage = page + 1\n onBrowse({ page: newPage })\n getAnalytics().track('Load more', { page: newPage })\n }, [onBrowse, page])\n\n const maxQuerySize = getMaxQuerySize(vendor)\n\n const hasExtraPages =\n (assets.length !== count || count === maxQuerySize) && page <= MAX_PAGE\n\n const isLoadingNewPage = isLoading && nfts.length >= PAGE_SIZE\n\n return (\n <>\n <Card.Group>\n {assets.length > 0\n ? assets.map((assets, index) => (\n <AssetCard\n key={assetType + '-' + assets.id + '-' + index}\n asset={assets}\n />\n ))\n : null}\n\n {isLoading ? (\n <>\n <div className=\"overlay\" />\n <Loader size=\"massive\" active />\n </>\n ) : null}\n </Card.Group>\n\n {assets.length === 0 && !isLoading ? (\n <div className=\"empty\">{t('nft_list.empty')}</div>\n ) : null}\n\n {assets.length > 0 &&\n hasExtraPages &&\n (!isLoading || isLoadingNewPage) ? (\n <div className=\"load-more\">\n <Button \n as=\"a\" \n href={urlNext} \n loading={isLoading} \n inverted\n primary\n onClick={handleLoadMore}\n >\n {t('global.load_more')}\n </Button>\n </div>\n ) : null}\n </>\n )\n}\n\nexport default React.memo(AssetList)\n","import { connect } from 'react-redux'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\n\nimport { RootState } from '../../modules/reducer'\nimport { FETCH_NFTS_REQUEST } from '../../modules/nft/actions'\nimport { browse } from '../../modules/routing/actions'\nimport { getNFTs, getCount, getItems } from '../../modules/ui/browse/selectors'\nimport {\n getVendor,\n getPage,\n getAssetType,\n getCurrentBrowseOptions\n} from '../../modules/routing/selectors'\nimport { getLoading as getLoadingNFTs } from '../../modules/nft/selectors'\nimport { getLoading as getLoadingItems } from '../../modules/item/selectors'\nimport { MapStateProps, MapDispatch, MapDispatchProps } from './AssetList.types'\nimport AssetList from './AssetList'\nimport { FETCH_ITEMS_REQUEST } from '../../modules/item/actions'\nimport { buildBrowseURL } from '../../modules/routing/utils'\nimport { getLocation } from 'connected-react-router'\n\nconst mapState = (state: RootState): MapStateProps => {\n const page = getPage(state)\n return {\n vendor: getVendor(state),\n assetType: getAssetType(state),\n nfts: getNFTs(state),\n items: getItems(state),\n page: page,\n count: getCount(state),\n isLoading:\n isLoadingType(getLoadingNFTs(state), FETCH_NFTS_REQUEST) ||\n isLoadingType(getLoadingItems(state), FETCH_ITEMS_REQUEST),\n urlNext: buildBrowseURL(getLocation(state).pathname, {\n ...getCurrentBrowseOptions(state),\n page: page + 1\n })\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onBrowse: options => dispatch(browse(options))\n})\n\nexport default connect(mapState, mapDispatch)(AssetList)\n","import React from 'react'\n\nimport { Props } from './Row.types'\nimport './Row.css'\n\nconst Row = (props: Props) => {\n const { className, children, onClick } = props\n\n return (\n <div className={`Row ${className}`} onClick={onClick}>\n {children}\n </div>\n )\n}\n\nRow.defaultProps = {\n className: ''\n}\n\nexport default React.memo(Row)\n","import React from 'react'\nimport classnames from 'classnames'\n\nimport { Props } from './Column.types'\nimport './Column.css'\n\nconst Column = (props: Props) => {\n const { className, align, grow, shrink, children, onClick } = props\n const classes = classnames('Column', align, className, {\n grow,\n shrink\n })\n\n return (\n <div className={classes} onClick={onClick}>\n {children}\n </div>\n )\n}\n\nColumn.defaultProps = {\n align: 'left',\n className: '',\n grow: false,\n shrink: false\n}\n\nexport default React.memo(Column)\n","import React from 'react'\nimport { Menu } from '../../../Menu'\nimport { Props } from './NFTSections.types'\nimport NFTSectionsMenuItems from './NFTSectionsMenuItems'\n\nconst NFTSections = (props: Props) => {\n return (\n <Menu className=\"NFTSections\">\n <NFTSectionsMenuItems {...props} />\n </Menu>\n )\n}\n\nexport default React.memo(NFTSections)\n","import React from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Header } from 'decentraland-ui'\n\nimport { NFTSections } from '../NFTSections'\nimport { Props } from './NFTSidebar.types'\nimport './NFTSidebar.css'\n\nconst NFTSidebar = (props: Props) => {\n const { section, sections, onMenuItemClick } = props\n\n return (\n <div className=\"NFTSidebar\">\n <Header sub>{t('nft_sidebar.categories')}</Header>\n <NFTSections\n section={section}\n sections={sections}\n onSectionClick={onMenuItemClick}\n />\n </div>\n )\n}\n\nexport default React.memo(NFTSidebar)\n","import React, { useCallback } from 'react'\n\nimport { Sections } from '../../../modules/vendor/routing/types'\nimport { Section as DecentralandSection } from '../../../modules/vendor/decentraland/routing/types'\nimport { VendorName } from '../../../modules/vendor/types'\nimport { NFTSidebar as DecentralandNFTSidebar } from '../decentraland/NFTSidebar'\nimport { Props } from './NFTSidebar.types'\n\nconst NFTSidebar = (props: Props) => {\n const { vendor, section, sections, onBrowse } = props\n\n const handleOnBrowse = useCallback(\n (section: string) => {\n onBrowse({ section })\n },\n [onBrowse]\n )\n\n switch (vendor) {\n case VendorName.SUPER_RARE:\n case VendorName.MAKERS_PLACE:\n case VendorName.KNOWN_ORIGIN:\n return null\n case VendorName.DECENTRALAND:\n default:\n return (\n <DecentralandNFTSidebar\n section={section as DecentralandSection}\n sections={\n (sections as DecentralandSection[]) ?? [Sections.decentraland.ALL]\n }\n onMenuItemClick={handleOnBrowse}\n />\n )\n }\n}\n\nexport default React.memo(NFTSidebar)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../modules/reducer'\nimport { browse } from '../../../modules/routing/actions'\nimport { getVendor, getSection } from '../../../modules/routing/selectors'\nimport {\n MapStateProps,\n MapDispatch,\n MapDispatchProps,\n OwnProps\n} from './NFTSidebar.types'\nimport NFTSidebar from './NFTSidebar'\n\nconst mapState = (state: RootState, ownProps: OwnProps): MapStateProps => ({\n vendor: getVendor(state),\n section: ownProps.section || getSection(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onBrowse: options => dispatch(browse(options))\n})\n\nexport default connect(mapState, mapDispatch)(NFTSidebar)\n","import * as React from 'react'\nimport { Icon } from 'decentraland-ui'\n\nimport { Props } from './Chip.types'\n\nimport './Chip.css'\n\nconst Chip = (props: Props) => {\n const { type, text, icon, className, isActive, isDisabled, onClick } = props\n if (!text && !icon) {\n throw new Error('You need to provide at least one prop: text or icon')\n }\n\n const classNames = ['Chip', type]\n\n if (className) {\n classNames.push(className)\n }\n if (isActive) {\n classNames.push('active')\n }\n if (isDisabled) {\n classNames.push('disabled')\n }\n if (onClick && !isDisabled) {\n classNames.push('clickeable')\n }\n\n return (\n <div\n className={classNames.join(' ')}\n onClick={isActive || isDisabled ? undefined : onClick}\n >\n {text ? (\n <span className=\"text\">{text}</span>\n ) : icon ? (\n <Icon name={icon} />\n ) : null}\n </div>\n )\n}\n\nChip.defaultProps = {\n text: '',\n icon: '',\n type: 'square',\n isDisabled: false,\n isActive: false\n}\n\nexport default React.memo(Chip)\n","import { useState, useCallback, useEffect, useRef } from 'react'\n\nlet timeout: NodeJS.Timeout | null = null\n\nexport const useInput = (\n value: string,\n onChange: (newValue: string) => void,\n ms = 500\n) => {\n const [text, setText] = useState(value)\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => setText(event.target.value),\n [setText]\n )\n\n // flag to skip debounce\n let skip = useRef(false)\n\n // when value is changed from outside (controlled prop)\n // should update internal value and skip debounce\n useEffect(() => {\n if (value !== text) {\n skip.current = true\n setText(value)\n }\n // eslint-disable-next-line\n }, [value])\n\n // When internal value changes it\n // should start a debounced call to onChange\n useEffect(() => {\n if (timeout) {\n clearTimeout(timeout)\n }\n if (skip.current) {\n skip.current = false\n return\n }\n timeout = setTimeout(() => {\n timeout = null\n onChange(text)\n }, ms)\n }, [text, ms, onChange])\n\n return [text, handleChange] as const\n}\n","import { useEffect, useRef } from 'react'\nimport { Header } from 'decentraland-ui'\n\nimport { useInput } from '../../../../lib/input'\nimport { Props } from './TextFilter.types'\nimport './TextFilter.css'\n\nconst TextFilter = (props: Props) => {\n const { name, value, placeholder, onChange } = props\n\n const [text, setText] = useInput(value, onChange)\n const inputRef = useRef<HTMLInputElement | null>(null)\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus()\n }\n }, [])\n\n return (\n <div className=\"TextFilter Filter\">\n {name ? (\n <Header sub className=\"name\">\n {name}\n </Header>\n ) : null}\n <div className=\"text-input\">\n <input\n ref={inputRef}\n value={text}\n onChange={setText}\n placeholder={placeholder}\n />\n </div>\n </div>\n )\n}\n\nexport default TextFilter\n","import { Header } from 'decentraland-ui'\n\nimport { Props } from './ArrayFilter.types'\nimport './ArrayFilter.css'\n\nconst getClasses = (value: string, values: string[]) => {\n const classes = ['option']\n if (values.includes(value)) {\n classes.push('selected')\n }\n return classes.join(' ')\n}\n\nconst getNewValues = (value: string, values: string[]) => {\n return values.some(x => x === value)\n ? values.filter(x => x !== value)\n : [...values, value]\n}\n\nconst ArrayFilter = (props: Props) => {\n const { name, values, options, onChange } = props\n return (\n <div className=\"ArrayFilter Filter\">\n <Header sub className=\"name\">\n {name}\n </Header>\n <div className=\"options\">\n {options.map(option => (\n <div\n key={option.text}\n className={getClasses(option.value, values)}\n onClick={() => onChange(getNewValues(option.value, values))}\n >\n {option.text}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport default ArrayFilter\n","import { Header, Dropdown } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { Props } from './SelectFilter.types'\nimport './SelectFilter.css'\n\nconst SelectFilter = (props: Props) => {\n const { name, options, value, clearable, onChange } = props\n return (\n <div className=\"SelectFilter Filter\">\n <Header sub className=\"name\">\n {name}\n </Header>\n <Dropdown\n value={value}\n options={options}\n clearable={clearable}\n selection\n search\n selectOnNavigation={false}\n fluid\n noResultsMessage={t('filters.no_results')}\n onChange={(_event, props) => onChange(props.value as string)}\n />\n </div>\n )\n}\n\nexport default SelectFilter\n","import React, { useCallback, useMemo } from 'react'\nimport classNames from 'classnames'\nimport { Network, NFTCategory, Rarity } from '@dcl/schemas'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport {\n Row,\n Column,\n SmartIcon,\n Popup,\n Mobile,\n NotMobile,\n Header,\n Radio\n} from 'decentraland-ui'\nimport { WearableGender } from '../../../../modules/nft/wearable/types'\nimport { contracts } from '../../../../modules/contract/utils'\nimport { ArrayFilter } from '../ArrayFilter'\nimport { SelectFilter } from '../SelectFilter'\nimport { Props } from './FiltersMenu.types'\n\nexport const ALL_FILTER_OPTION = 'ALL'\n\nconst FiltersMenu = (props: Props) => {\n const {\n selectedCollection,\n selectedRarities,\n selectedGenders,\n selectedNetwork,\n isOnlySmart,\n onCollectionsChange,\n onRaritiesChange,\n onGendersChange,\n onNetworkChange,\n onOnlySmartChange\n } = props\n\n const collectionOptions = useMemo(() => {\n return [\n {\n value: ALL_FILTER_OPTION,\n text: t('nft_filters.all_collections')\n },\n ...contracts\n .filter(contract => contract.category === NFTCategory.WEARABLE)\n .map(contract => ({\n value: contract.address,\n text: contract.name\n }))\n ]\n }, [])\n\n const rarityOptions = useMemo(() => {\n const options = Object.values(Rarity)\n .filter(value => typeof value === 'string')\n .reverse() as string[]\n return options.map(rarity => ({\n value: rarity,\n text: t(`rarity.${rarity}`)\n }))\n }, [])\n\n const genderOptions = useMemo(() => {\n const options = Object.values(WearableGender)\n return options.map(gender => ({\n value: gender,\n text: t(`body_shape.${gender}`)\n }))\n }, [])\n\n const networkOptions = useMemo(() => {\n const options = Object.values(Network).filter(\n value => typeof value === 'string'\n ) as Network[]\n return [\n {\n value: ALL_FILTER_OPTION,\n text: t('nft_filters.all_networks')\n },\n ...options.map(network => ({\n value: network,\n text: t(`networks.${network.toLowerCase()}`)\n }))\n ]\n }, [])\n\n const handleOnlySmartClick = useCallback(\n () => onOnlySmartChange(!isOnlySmart),\n [onOnlySmartChange, isOnlySmart]\n )\n\n return (\n <>\n <Row>\n <SelectFilter\n name={t('nft_filters.collection')}\n value={selectedCollection || ALL_FILTER_OPTION}\n clearable={!!selectedCollection}\n options={collectionOptions}\n onChange={onCollectionsChange}\n />\n <SelectFilter\n name={t('nft_filters.network')}\n value={selectedNetwork || ALL_FILTER_OPTION}\n clearable={!!selectedNetwork}\n options={networkOptions}\n onChange={network => onNetworkChange(network as Network)}\n />\n <Mobile>\n <Header sub>{t('nft_filters.smart_wearables')}</Header>\n <Radio\n className=\"smart-toggle-mobile\"\n toggle\n checked={isOnlySmart}\n onChange={handleOnlySmartClick}\n />\n </Mobile>\n <NotMobile>\n <Popup\n content={t('nft_filters.smart_wearables')}\n position=\"top center\"\n trigger={\n <div\n className={classNames(`smart-toggle`, {\n 'is-enabled': isOnlySmart\n })}\n onClick={handleOnlySmartClick}\n >\n <SmartIcon />\n </div>\n }\n ></Popup>\n </NotMobile>\n </Row>\n <Row>\n <Column>\n <ArrayFilter\n name={t('nft_filters.rarity')}\n values={selectedRarities}\n options={rarityOptions}\n onChange={onRaritiesChange}\n />\n </Column>\n <Column>\n <ArrayFilter\n name={t('nft_filters.gender')}\n values={selectedGenders}\n options={genderOptions}\n onChange={onGendersChange}\n />\n </Column>\n </Row>\n </>\n )\n}\n\nFiltersMenu.defaultValues = {\n selectedRarities: [],\n selectedGenders: []\n}\n\nexport default React.memo(FiltersMenu)\n","import React, { useCallback, useEffect, useState } from 'react'\nimport {\n Radio,\n CheckboxProps,\n Button,\n Header,\n Dropdown,\n DropdownProps,\n Responsive,\n Modal,\n Icon,\n NotMobile\n} from 'decentraland-ui'\nimport { Network, NFTCategory, Rarity } from '@dcl/schemas'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { SortBy } from '../../../../modules/routing/types'\nimport { WearableGender } from '../../../../modules/nft/wearable/types'\nimport { Section } from '../../../../modules/vendor/decentraland/routing/types'\nimport { getCategoryFromSection } from '../../../../modules/routing/search'\nimport { MAX_QUERY_SIZE } from '../../../../modules/vendor/api'\nimport { NFTSidebar } from '../../NFTSidebar'\nimport { Chip } from '../../../Chip'\nimport { TextFilter } from '../../NFTFilters/TextFilter'\nimport { FiltersMenu } from '../../NFTFilters/FiltersMenu'\nimport { Props } from './NFTFilters.types'\nimport { AssetType } from '../../../../modules/asset/types'\n\nconst NFTFilters = (props: Props) => {\n const {\n section,\n search,\n count,\n onlyOnSale,\n onlySmart,\n isMap,\n rarities,\n wearableGenders,\n contracts,\n network,\n onBrowse,\n assetType,\n hasFiltersEnabled,\n onClearFilters\n } = props\n\n const category = section ? getCategoryFromSection(section) : undefined\n\n const [showFiltersMenu, setShowFiltersMenu] = useState(false)\n const [showFiltersModal, setShowFiltersModal] = useState(false)\n\n const orderBydropdownOptions = [\n { value: SortBy.RECENTLY_SOLD, text: t('filters.recently_sold') },\n { value: SortBy.NEWEST, text: t('filters.newest') },\n { value: SortBy.NAME, text: t('filters.name') }\n ]\n const typeDropdownOptions = [\n { value: AssetType.ITEM, text: t('filters.item') },\n { value: AssetType.NFT, text: t('filters.nft') }\n ]\n\n if (onlyOnSale) {\n orderBydropdownOptions.unshift({\n value: SortBy.RECENTLY_LISTED,\n text: t('filters.recently_listed')\n })\n orderBydropdownOptions.unshift({\n value: SortBy.CHEAPEST,\n text: t('filters.cheapest')\n })\n }\n\n const sortBy = orderBydropdownOptions.find(\n option => option.value === props.sortBy\n )\n ? props.sortBy\n : orderBydropdownOptions[0].value\n\n const appliedFilters = []\n if (rarities.length > 0) {\n appliedFilters.push(t('nft_filters.rarity'))\n }\n if (wearableGenders.length > 0) {\n appliedFilters.push(t('nft_filters.gender'))\n }\n if (contracts.length > 0) {\n appliedFilters.push(t('nft_filters.collection'))\n }\n\n const handleToggleOnlySmart = useCallback(\n (newOnlySmart: boolean) => onBrowse({ onlySmart: newOnlySmart }),\n [onBrowse]\n )\n\n const handleOnlyOnSaleChange = useCallback(\n (_, props: CheckboxProps) => {\n onBrowse({ sortBy: SortBy.NEWEST, onlyOnSale: !!props.checked })\n },\n [onBrowse]\n )\n\n const handleIsMapChange = useCallback(\n (isMap: boolean) => {\n onBrowse({ isMap, isFullscreen: isMap, search: '' })\n },\n [onBrowse]\n )\n\n const handleOrderByDropdownChange = useCallback(\n (_, props: DropdownProps) => {\n onBrowse({ sortBy: props.value as SortBy })\n },\n [onBrowse]\n )\n\n const handleTypeByDropdownChange = useCallback(\n (_, props: DropdownProps) => {\n onBrowse({ assetType: props.value as AssetType })\n },\n [onBrowse]\n )\n\n const handleRaritiesChange = useCallback(\n (options: string[]) => {\n onBrowse({ rarities: options as Rarity[] })\n },\n [onBrowse]\n )\n\n const handleGendersChange = useCallback(\n (options: string[]) => {\n onBrowse({ wearableGenders: options as WearableGender[] })\n },\n [onBrowse]\n )\n\n const handleCollectionsChange = useCallback(\n (contract?: string) => {\n onBrowse({ contracts: contract ? [contract] : undefined })\n },\n [onBrowse]\n )\n\n const handleSearch = useCallback(\n (newSearch: string) => {\n if (search !== newSearch) {\n onBrowse({ search: newSearch, isMap: false, isFullscreen: false })\n }\n },\n [search, onBrowse]\n )\n\n const handleNetworkChange = useCallback(\n (newNetwork: Network) => {\n if (network !== newNetwork) {\n onBrowse({ network: newNetwork })\n }\n },\n [network, onBrowse]\n )\n\n useEffect(() => setShowFiltersMenu(category === NFTCategory.WEARABLE), [\n category,\n setShowFiltersMenu\n ])\n\n const searchPlaceholder = isMap\n ? t('nft_filters.search_land')\n : count === undefined\n ? t('global.loading') + '...'\n : t('nft_filters.search', {\n suffix:\n count < MAX_QUERY_SIZE\n ? t('nft_filters.results', {\n count: count.toLocaleString()\n })\n : t('nft_filters.more_than_results', {\n count: count.toLocaleString()\n })\n })\n\n return (\n <div className=\"NFTFilters\">\n <div className=\"topbar\">\n {isMap ? (\n <>\n <TextFilter\n value={search}\n placeholder={searchPlaceholder}\n onChange={handleSearch}\n />\n <Responsive\n minWidth={Responsive.onlyTablet.minWidth}\n className=\"topbar-filter\"\n >\n <Radio\n toggle\n checked={onlyOnSale}\n onChange={handleOnlyOnSaleChange}\n label={t('nft_filters.on_sale')}\n />\n </Responsive>\n </>\n ) : (\n <>\n <TextFilter\n value={search}\n placeholder={searchPlaceholder}\n onChange={handleSearch}\n />\n <NotMobile>\n {hasFiltersEnabled && (\n <div className=\"clear-filters\" onClick={onClearFilters}>\n <Icon\n aria-label=\"Clear filters\"\n aria-hidden=\"false\"\n name=\"close\"\n />\n <span>{t('filters.clear')}</span>\n </div>\n )}\n </NotMobile>\n <Responsive\n minWidth={Responsive.onlyTablet.minWidth}\n className=\"topbar-filter\"\n >\n <Dropdown\n direction=\"left\"\n value={sortBy}\n options={orderBydropdownOptions}\n onChange={handleOrderByDropdownChange}\n />\n </Responsive>\n <Responsive\n minWidth={Responsive.onlyTablet.minWidth}\n className=\"topbar-filter\"\n >\n <Radio\n toggle\n checked={onlyOnSale}\n onChange={handleOnlyOnSaleChange}\n label={t('nft_filters.on_sale')}\n />\n </Responsive>\n </>\n )}\n\n <Responsive maxWidth={Responsive.onlyMobile.maxWidth}>\n <div\n className=\"open-filters-wrapper\"\n onClick={() => setShowFiltersModal(!showFiltersModal)}\n >\n <div className=\"label\">{t('nft_filters.filter')}</div>\n <div\n className={`open-filters ${\n showFiltersMenu || appliedFilters.length > 0 ? 'active' : ''\n }`}\n />\n </div>\n </Responsive>\n\n {section === Section.LAND ||\n section === Section.PARCELS ||\n section === Section.ESTATES ? (\n <div className=\"topbar-filter\">\n <div className=\"toggle-map\">\n <Chip\n className=\"grid\"\n icon=\"table\"\n isActive={!isMap}\n onClick={() => handleIsMapChange(false)}\n />\n <Chip\n className=\"atlas\"\n icon=\"map marker alternate\"\n isActive={isMap}\n onClick={() => handleIsMapChange(true)}\n />\n </div>\n </div>\n ) : null}\n </div>\n\n {showFiltersMenu ? (\n <Responsive\n minWidth={Responsive.onlyTablet.minWidth}\n className=\"filters\"\n >\n <FiltersMenu\n assetType={assetType}\n selectedNetwork={network}\n selectedCollection={contracts[0]}\n selectedRarities={rarities}\n selectedGenders={wearableGenders}\n isOnlySmart={!!onlySmart}\n onCollectionsChange={handleCollectionsChange}\n onGendersChange={handleGendersChange}\n onRaritiesChange={handleRaritiesChange}\n onNetworkChange={handleNetworkChange}\n onOnlySmartChange={handleToggleOnlySmart}\n />\n </Responsive>\n ) : null}\n\n <Modal\n className=\"FiltersModal\"\n open={showFiltersModal}\n onClose={() => setShowFiltersModal(false)}\n >\n <Modal.Header>{t('nft_filters.filter')}</Modal.Header>\n <Modal.Content>\n {hasFiltersEnabled && (\n <div className=\"filter-row\">\n <div className=\"clear-filters-modal\" onClick={onClearFilters}>\n <Icon\n aria-label=\"Clear filters\"\n aria-hidden=\"false\"\n name=\"close\"\n />\n <span>{t('filters.clear')}</span>\n </div>\n </div>\n )}\n {category === NFTCategory.WEARABLE ? (\n <>\n <div className=\"filter-row\">\n <Header sub>{t('filters.type')}</Header>\n <Dropdown\n direction=\"left\"\n value={assetType}\n options={typeDropdownOptions}\n onChange={handleTypeByDropdownChange}\n />\n </div>\n <FiltersMenu\n assetType={assetType}\n selectedNetwork={network}\n selectedCollection={contracts[0]}\n selectedRarities={rarities}\n selectedGenders={wearableGenders}\n isOnlySmart={!!onlySmart}\n onCollectionsChange={handleCollectionsChange}\n onGendersChange={handleGendersChange}\n onRaritiesChange={handleRaritiesChange}\n onNetworkChange={handleNetworkChange}\n onOnlySmartChange={handleToggleOnlySmart}\n />\n </>\n ) : null}\n <div className=\"filter-row\">\n <Header sub>{t('nft_filters.order_by')}</Header>\n <Dropdown\n direction=\"left\"\n value={sortBy}\n options={orderBydropdownOptions}\n onChange={handleOrderByDropdownChange}\n />\n </div>\n <div className=\"filter-row\">\n <Header sub>{t('nft_filters.on_sale')}</Header>\n <Radio\n toggle\n checked={onlyOnSale}\n onChange={handleOnlyOnSaleChange}\n />\n </div>\n <NFTSidebar />\n <Button\n className=\"apply-filters\"\n primary\n onClick={() => setShowFiltersModal(false)}\n >\n {t('global.apply')}\n </Button>\n </Modal.Content>\n </Modal>\n </div>\n )\n}\n\nexport default React.memo(NFTFilters)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../../modules/reducer'\nimport { clearFilters } from '../../../../modules/routing/actions'\nimport {\n getOnlySmart,\n hasFiltersEnabled\n} from '../../../../modules/routing/selectors'\nimport { getCount } from '../../../../modules/ui/browse/selectors'\nimport {\n getSection,\n getSortBy,\n getOnlyOnSale,\n getIsMap,\n getRarities,\n getWearableGenders,\n getSearch,\n getContracts,\n getNetwork,\n getAssetType\n} from '../../../../modules/routing/selectors'\nimport {\n MapStateProps,\n MapDispatchProps,\n OwnProps,\n Props,\n MapDispatch\n} from './NFTFilters.types'\nimport NFTFilters from './NFTFilters'\n\nconst mapState = (state: RootState): MapStateProps => ({\n assetType: getAssetType(state),\n count: getCount(state),\n section: getSection(state),\n sortBy: getSortBy(state),\n search: getSearch(state),\n onlyOnSale: getOnlyOnSale(state),\n onlySmart: getOnlySmart(state),\n isMap: getIsMap(state),\n rarities: getRarities(state),\n wearableGenders: getWearableGenders(state),\n contracts: getContracts(state),\n network: getNetwork(state),\n hasFiltersEnabled: hasFiltersEnabled(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onClearFilters: () => dispatch(clearFilters())\n})\n\nconst mergeProps = (\n stateProps: MapStateProps,\n dispatchProps: MapDispatchProps,\n ownProps: OwnProps\n): Props => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps\n})\n\nexport default connect(mapState, mapDispatch, mergeProps)(NFTFilters)\n","import React, { useCallback, useEffect, useState } from 'react'\nimport { Card, Icon } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Props } from './PriceChangeNotice.types'\nimport { isAccountView } from '../../../modules/ui/utils'\nimport './PriceChangeNotice.css'\n\nconst PRICE_CHANGE_NOTICE_KEY = 'price-change-notice'\n\nconst PriceChangeNotice = (props: Props) => {\n const { view } = props\n\n const isValidView = useCallback(\n () => view !== undefined && !isAccountView(view),\n [view]\n )\n\n const isDismissed = localStorage.getItem(PRICE_CHANGE_NOTICE_KEY) !== null\n const [isVisible, setIsVisible] = useState(isValidView())\n\n useEffect(() => {\n setIsVisible(isValidView())\n }, [setIsVisible, isValidView])\n\n const handleClose = useCallback(() => {\n setIsVisible(false)\n localStorage.setItem(PRICE_CHANGE_NOTICE_KEY, '1')\n }, [setIsVisible])\n\n return !isDismissed && isVisible ? (\n <Card fluid className=\"PriceChangeNotice\">\n <Card.Content>\n <Card.Meta>\n <div className=\"message\">{t('price_change_notice.message')}</div>\n <Icon name=\"close\" onClick={handleClose} />\n </Card.Meta>\n </Card.Content>\n </Card>\n ) : null\n}\n\nexport default React.memo(PriceChangeNotice)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../modules/reducer'\nimport { getView } from '../../../modules/ui/browse/selectors'\nimport { MapStateProps } from './PriceChangeNotice.types'\nimport PriceChangeNotice from './PriceChangeNotice'\n\nconst mapState = (state: RootState): MapStateProps => ({\n view: getView(state)\n})\n\nconst mapDispatch = () => ({})\n\nexport default connect(mapState, mapDispatch)(PriceChangeNotice)\n","import React, { useCallback, useState } from 'react'\nimport {\n Button,\n Header,\n Dropdown,\n DropdownProps,\n CheckboxProps,\n Radio,\n Responsive,\n Modal\n} from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { SortBy } from '../../../../modules/routing/types'\nimport { MAX_QUERY_SIZE } from '../../../../modules/vendor/super_rare/api'\nimport { TextFilter } from '../../NFTFilters/TextFilter'\nimport { PriceChangeNotice } from '../../PriceChangeNotice'\nimport { Props } from './NFTFilters.types'\n\nconst NFTFilters = (props: Props) => {\n const { search, count, onlyOnSale, onBrowse } = props\n\n const [showFiltersModal, setShowFiltersModal] = useState(false)\n\n const dropdownOptions = [\n { value: SortBy.RECENTLY_LISTED, text: t('filters.recently_listed') },\n { value: SortBy.CHEAPEST, text: t('filters.cheapest') }\n ]\n\n const sortBy = dropdownOptions.find(option => option.value === props.sortBy)\n ? props.sortBy\n : dropdownOptions[0].value\n\n const handleOnlyOnSaleChange = useCallback(\n (_, props: CheckboxProps) => {\n onBrowse({ onlyOnSale: !!props.checked })\n },\n [onBrowse]\n )\n\n const handleDropdownChange = useCallback(\n (_, props: DropdownProps) => {\n onBrowse({ sortBy: props.value as SortBy })\n },\n [onBrowse]\n )\n\n const handleSearch = useCallback(\n (newSearch: string) => {\n if (search !== newSearch) {\n onBrowse({ search: newSearch })\n }\n },\n [search, onBrowse]\n )\n\n const searchPlaceholder =\n count === undefined\n ? t('global.loading') + '...'\n : t('nft_filters.search', {\n suffix:\n count < MAX_QUERY_SIZE\n ? t('nft_filters.results', {\n count: count.toLocaleString()\n })\n : t('nft_filters.more_than_results', {\n count: count.toLocaleString()\n })\n })\n\n return (\n <div className=\"NFTFilters\">\n <div className=\"topbar\">\n <TextFilter\n value={search}\n placeholder={searchPlaceholder}\n onChange={handleSearch}\n />\n {onlyOnSale ? (\n <Responsive\n as={Dropdown}\n className=\"topbar-filter\"\n minWidth={Responsive.onlyTablet.minWidth}\n direction=\"left\"\n value={sortBy}\n options={dropdownOptions}\n onChange={handleDropdownChange}\n />\n ) : null}\n <Responsive\n minWidth={Responsive.onlyTablet.minWidth}\n className=\"topbar-filter\"\n >\n <Radio\n toggle\n checked={onlyOnSale}\n onChange={handleOnlyOnSaleChange}\n label={t('nft_filters.on_sale')}\n />\n </Responsive>\n\n <Responsive maxWidth={Responsive.onlyMobile.maxWidth}>\n <div\n className=\"open-filters-wrapper\"\n onClick={() => setShowFiltersModal(!showFiltersModal)}\n >\n <div className=\"label\">{t('nft_filters.filter')}</div>\n <div className=\"open-filters\" />\n </div>\n </Responsive>\n </div>\n\n <PriceChangeNotice />\n\n <Modal\n className=\"FiltersModal\"\n open={showFiltersModal}\n onClose={() => setShowFiltersModal(false)}\n >\n <Modal.Header>{t('nft_filters.filter')}</Modal.Header>\n <Modal.Content>\n <div className=\"filter-row\">\n {onlyOnSale ? (\n <>\n <Header sub>{t('nft_filters.order_by')}</Header>\n <Dropdown\n direction=\"left\"\n value={sortBy}\n options={dropdownOptions}\n onChange={handleDropdownChange}\n />\n </>\n ) : null}\n </div>\n <div className=\"filter-row\">\n <Header sub>{t('nft_filters.on_sale')}</Header>\n <Radio\n toggle\n checked={onlyOnSale}\n onChange={handleOnlyOnSaleChange}\n />\n </div>\n <Button\n className=\"apply-filters\"\n primary\n onClick={() => setShowFiltersModal(false)}\n >\n {t('global.apply')}\n </Button>\n </Modal.Content>\n </Modal>\n </div>\n )\n}\n\nexport default React.memo(NFTFilters)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../../modules/reducer'\nimport { getCount } from '../../../../modules/ui/browse/selectors'\nimport {\n getSection,\n getSortBy,\n getOnlyOnSale,\n getSearch\n} from '../../../../modules/routing/selectors'\nimport { MapStateProps } from './NFTFilters.types'\nimport NFTFilters from './NFTFilters'\n\nconst mapState = (state: RootState): MapStateProps => ({\n count: getCount(state),\n section: getSection(state),\n sortBy: getSortBy(state),\n search: getSearch(state),\n onlyOnSale: getOnlyOnSale(state)\n})\n\nconst mapDispatch = () => ({})\n\nexport default connect(mapState, mapDispatch)(NFTFilters)\n","import React, { useCallback, useState } from 'react'\nimport {\n Button,\n Header,\n Dropdown,\n DropdownProps,\n Responsive,\n Modal\n} from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { SortBy } from '../../../../modules/routing/types'\nimport { MAX_QUERY_SIZE } from '../../../../modules/vendor/super_rare/api'\nimport { TextFilter } from '../../NFTFilters/TextFilter'\nimport { PriceChangeNotice } from '../../PriceChangeNotice'\nimport { Props } from './NFTFilters.types'\n\nconst NFTFilters = (props: Props) => {\n const { search, count, onBrowse } = props\n\n const [showFiltersModal, setShowFiltersModal] = useState(false)\n\n const dropdownOptions = [\n { value: SortBy.RECENTLY_LISTED, text: t('filters.recently_listed') },\n { value: SortBy.CHEAPEST, text: t('filters.cheapest') }\n ]\n\n const sortBy = dropdownOptions.find(option => option.value === props.sortBy)\n ? props.sortBy\n : dropdownOptions[0].value\n\n const handleDropdownChange = useCallback(\n (_, props: DropdownProps) => {\n onBrowse({ sortBy: props.value as SortBy })\n },\n [onBrowse]\n )\n\n const handleSearch = useCallback(\n (newSearch: string) => {\n if (search !== newSearch) {\n onBrowse({ search: newSearch })\n }\n },\n [search, onBrowse]\n )\n\n const searchPlaceholder =\n count === undefined\n ? t('global.loading') + '...'\n : t('nft_filters.search', {\n suffix:\n count < MAX_QUERY_SIZE\n ? t('nft_filters.results', {\n count: count.toLocaleString()\n })\n : t('nft_filters.more_than_results', {\n count: count.toLocaleString()\n })\n })\n\n return (\n <div className=\"NFTFilters\">\n <div className=\"topbar\">\n <TextFilter\n value={search}\n placeholder={searchPlaceholder}\n onChange={handleSearch}\n />\n <Responsive\n as={Dropdown}\n className=\"topbar-filter\"\n minWidth={Responsive.onlyTablet.minWidth}\n direction=\"left\"\n value={sortBy}\n options={dropdownOptions}\n onChange={handleDropdownChange}\n />\n\n <Responsive maxWidth={Responsive.onlyMobile.maxWidth}>\n <div\n className=\"open-filters-wrapper\"\n onClick={() => setShowFiltersModal(!showFiltersModal)}\n >\n <div className=\"label\">{t('nft_filters.filter')}</div>\n <div className=\"open-filters\" />\n </div>\n </Responsive>\n </div>\n\n <PriceChangeNotice />\n\n <Modal\n className=\"FiltersModal\"\n open={showFiltersModal}\n onClose={() => setShowFiltersModal(false)}\n >\n <Modal.Header>{t('nft_filters.filter')}</Modal.Header>\n <Modal.Content>\n <div className=\"filter-row\">\n <Header sub>{t('nft_filters.order_by')}</Header>\n <Dropdown\n direction=\"left\"\n value={sortBy}\n options={dropdownOptions}\n onChange={handleDropdownChange}\n />\n </div>\n <Button\n className=\"apply-filters\"\n primary\n onClick={() => setShowFiltersModal(false)}\n >\n {t('global.apply')}\n </Button>\n </Modal.Content>\n </Modal>\n </div>\n )\n}\n\nexport default React.memo(NFTFilters)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../../modules/reducer'\nimport { getCount } from '../../../../modules/ui/browse/selectors'\nimport {\n getSection,\n getSortBy,\n getOnlyOnSale,\n getSearch\n} from '../../../../modules/routing/selectors'\nimport { MapStateProps } from './NFTFilters.types'\nimport NFTFilters from './NFTFilters'\n\nconst mapState = (state: RootState): MapStateProps => ({\n count: getCount(state),\n section: getSection(state),\n sortBy: getSortBy(state),\n search: getSearch(state),\n onlyOnSale: getOnlyOnSale(state)\n})\n\nconst mapDispatch = () => ({})\n\nexport default connect(mapState, mapDispatch)(NFTFilters)\n","import React, { useCallback, useState } from 'react'\nimport {\n Button,\n Header,\n Dropdown,\n DropdownProps,\n Responsive,\n Modal\n} from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { Section } from '../../../../modules/vendor/known_origin/routing/types'\nimport { SortBy } from '../../../../modules/routing/types'\nimport { PriceChangeNotice } from '../../PriceChangeNotice'\nimport { Props } from './NFTFilters.types'\n\nconst NFTFilters = (props: Props) => {\n const { section, onBrowse } = props\n\n const [showFiltersModal, setShowFiltersModal] = useState(false)\n\n const dropdownOptions =\n section === Section.ALL || section === Section.EDITIONS\n ? [\n { value: SortBy.RECENTLY_LISTED, text: t('filters.recently_listed') },\n { value: SortBy.CHEAPEST, text: t('filters.cheapest') }\n ]\n : section === Section.TOKENS\n ? [{ value: SortBy.NEWEST, text: t('filters.newest') }]\n : []\n\n const sortBy = dropdownOptions.find(option => option.value === props.sortBy)\n ? props.sortBy\n : dropdownOptions[0].value\n\n const handleDropdownChange = useCallback(\n (_, props: DropdownProps) => {\n onBrowse({ sortBy: props.value as SortBy })\n },\n [onBrowse]\n )\n\n return (\n <div className=\"NFTFilters\">\n <div className=\"topbar\">\n <div className=\"full-width\" />\n\n <Responsive\n as={Dropdown}\n className=\"topbar-filter\"\n minWidth={Responsive.onlyTablet.minWidth}\n direction=\"left\"\n value={sortBy}\n options={dropdownOptions}\n onChange={handleDropdownChange}\n />\n\n <Responsive maxWidth={Responsive.onlyMobile.maxWidth}>\n <div\n className=\"open-filters-wrapper\"\n onClick={() => setShowFiltersModal(!showFiltersModal)}\n >\n <div className=\"label\">{t('nft_filters.filter')}</div>\n <div className=\"open-filters\" />\n </div>\n </Responsive>\n </div>\n\n <PriceChangeNotice />\n\n <Modal\n className=\"FiltersModal\"\n open={showFiltersModal}\n onClose={() => setShowFiltersModal(false)}\n >\n <Modal.Header>{t('nft_filters.filter')}</Modal.Header>\n <Modal.Content>\n <div className=\"filter-row\">\n <Header sub>{t('nft_filters.order_by')}</Header>\n <Dropdown\n direction=\"left\"\n value={sortBy}\n options={dropdownOptions}\n onChange={handleDropdownChange}\n />\n </div>\n <Button\n className=\"apply-filters\"\n primary\n onClick={() => setShowFiltersModal(false)}\n >\n {t('global.apply')}\n </Button>\n </Modal.Content>\n </Modal>\n </div>\n )\n}\n\nexport default React.memo(NFTFilters)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../../modules/reducer'\nimport {\n getSection,\n getSortBy,\n getOnlyOnSale\n} from '../../../../modules/routing/selectors'\nimport { MapStateProps } from './NFTFilters.types'\nimport NFTFilters from './NFTFilters'\n\nconst mapState = (state: RootState): MapStateProps => ({\n section: getSection(state),\n sortBy: getSortBy(state),\n onlyOnSale: getOnlyOnSale(state)\n})\n\nconst mapDispatch = () => ({})\n\nexport default connect(mapState, mapDispatch)(NFTFilters)\n","import React from 'react'\n\nimport { VendorName } from '../../../modules/vendor/types'\nimport { NFTFilters as DecentralandNFTFilters } from '../decentraland/NFTFilters'\nimport { NFTFilters as SuperRareNFTFilters } from '../super_rare/NFTFilters'\nimport { NFTFilters as MakersPlaceNFTFilters } from '../makers_place/NFTFilters'\nimport { NFTFilters as KnownOriginNFTFilters } from '../known_origin/NFTFilters'\nimport { Props } from './NFTFilters.types'\nimport './NFTFilters.css'\n\n// TODO: Code on each NFTFilters can be extracted\nconst NFTFilters = (props: Props) => {\n const { vendor, isMap, onBrowse } = props\n\n switch (vendor) {\n case VendorName.SUPER_RARE:\n return <SuperRareNFTFilters onBrowse={onBrowse} />\n case VendorName.MAKERS_PLACE:\n return <MakersPlaceNFTFilters onBrowse={onBrowse} />\n case VendorName.KNOWN_ORIGIN:\n return <KnownOriginNFTFilters onBrowse={onBrowse} />\n case VendorName.DECENTRALAND:\n default:\n return <DecentralandNFTFilters isMap={isMap} onBrowse={onBrowse} />\n }\n}\n\nexport default React.memo(NFTFilters)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../modules/reducer'\nimport { browse } from '../../../modules/routing/actions'\nimport { getVendor } from '../../../modules/routing/selectors'\nimport {\n MapStateProps,\n MapDispatch,\n MapDispatchProps,\n Props,\n OwnProps\n} from './NFTFilters.types'\nimport NFTFilters from './NFTFilters'\n\nconst mapState = (state: RootState): MapStateProps => ({\n vendor: getVendor(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onBrowse: options => dispatch(browse(options))\n})\n\nconst mergeProps = (\n stateProps: MapStateProps,\n dispatchProps: MapDispatchProps,\n ownProps: OwnProps\n): Props => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps\n})\n\nexport default connect(mapState, mapDispatch, mergeProps)(NFTFilters)\n","import React from 'react'\nimport classNames from 'classnames'\nimport { Props } from './Box.types'\nimport styles from './Box.module.css'\n\nconst Box = ({ className, header, children, childrenClassName }: Props) => {\n return (\n <div className={classNames(styles.box, className)}>\n {header && <div className={styles.header}>{header}</div>}\n <div className={classNames(styles.children, childrenClassName)}>\n {children}\n </div>\n </div>\n )\n}\n\nexport default React.memo(Box)\n","import React from 'react'\nimport classNames from 'classnames'\nimport { Box } from '../Box'\nimport { Props } from './ToggleBox.types'\nimport styles from './ToggleBox.module.css'\n\nconst ToggleBox = (props: Props) => {\n const { className, items } = props\n return (\n <Box header={props.header} className={className}>\n {items.map((item, index) => (\n <div\n key={index}\n className={classNames(styles.item, {\n [styles.active]: !!item.active,\n [styles.disabled]: !!item.disabled\n })}\n onClick={() => !item.disabled && item.onClick(item, index)}\n >\n <div className={styles.title}>{item.title}</div>\n <div className={styles.description}>{item.description}</div>\n </div>\n ))}\n </Box>\n )\n}\n\nexport default React.memo(ToggleBox)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { NFTCategory } from '@dcl/schemas'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { locations } from '../../../modules/routing/locations'\nimport { AssetImage } from '../../AssetImage'\nimport { Props } from './AssetCell.types'\nimport styles from './AssetCell.module.css'\n\nconst AssetCell = ({ asset }: Props) => {\n let subtitle: string | undefined\n\n switch (asset.category) {\n case NFTCategory.ESTATE:\n subtitle = t('global.parcel_count', {\n count: asset.data.estate!.parcels.length\n })\n break\n case NFTCategory.PARCEL:\n const { x, y } = asset.data.parcel!\n subtitle = `${x},${y}`\n }\n\n const link =\n 'tokenId' in asset\n ? locations.nft(asset.contractAddress, asset.tokenId)\n : locations.item(asset.contractAddress, asset.itemId!)\n\n return (\n <Link to={link}>\n <div className={styles.firstCell}>\n <div className={styles.imageContainer}>\n <AssetImage asset={asset} isSmall />\n </div>\n <div>\n <div className={styles.title}>{asset.name}</div>\n {subtitle && <div className={styles.subtitle}>{subtitle}</div>}\n </div>\n </div>\n </Link>\n )\n}\n\nexport default React.memo(AssetCell)\n","import AssetCell from './AssetCell'\n\nexport default AssetCell\n","import React from 'react'\nimport { Mobile, NotMobile, Table } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Mana } from '../../Mana'\nimport { formatWeiMANA } from '../../../lib/mana'\nimport { Props } from './OnSaleListElement.types'\nimport AssetCell from '../AssetCell'\nimport './OnSaleListElement.css'\n\nconst OnSaleListElement = ({ nft, item, order }: Props) => {\n const category = item?.category || nft!.category\n\n return (\n <>\n <Mobile>\n <div className=\"mobile-row\">\n <AssetCell asset={item || nft!} />\n <Mana network={item?.network || nft!.network} inline>\n {formatWeiMANA(item?.price || order!.price)}\n </Mana>\n </div>\n </Mobile>\n <NotMobile>\n <Table.Row>\n <Table.Cell>\n <AssetCell asset={item || nft!} />\n </Table.Cell>\n <Table.Cell>{t(`global.${category}`)}</Table.Cell>\n <Table.Cell>\n {t(`global.${item ? 'primary' : 'secondary'}`)}\n </Table.Cell>\n <Table.Cell>\n <Mana network={item?.network || nft!.network} inline>\n {formatWeiMANA(item?.price || order!.price)}\n </Mana>\n </Table.Cell>\n </Table.Row>\n </NotMobile>\n </>\n )\n}\n\nexport default React.memo(OnSaleListElement)\n","import OnSaleListElement from './OnSaleListElement'\n\nexport default OnSaleListElement\n","import { Item, Order } from '@dcl/schemas'\nimport { NFT } from '../../modules/nft/types'\nimport { useMemo } from 'react'\nimport { SortBy } from '../../modules/routing/types'\nimport { Props as Element } from './OnSaleListElement/OnSaleListElement.types'\n\nexport const useProcessedElements = (\n elems: Element[],\n search: string,\n sortBy: SortBy,\n page: number,\n perPage: number\n) => {\n const filtered = useMemo(() => filterByName(elems, search), [elems, search])\n const total = useMemo(() => filtered.length, [filtered])\n const sorted = useMemo(() => sort(filtered, sortBy), [filtered, sortBy])\n const paginated = useMemo(() => paginate(sorted, page, perPage), [\n sorted,\n page,\n perPage\n ])\n\n return {\n paginated,\n total\n }\n}\n\nexport const filterByName = (elements: Element[], name: string) =>\n elements.filter(element =>\n handleElement(\n element,\n item => item.name.toLowerCase().includes(name.toLowerCase()),\n nft => nft.name.toLowerCase().includes(name.toLowerCase())\n )\n )\n\nexport const sort = (elements: Element[], sortBy: SortBy) =>\n [...elements].sort((elementA, elementB) => {\n switch (sortBy) {\n case SortBy.NEWEST:\n return getUpdatedAt(elementA) > getUpdatedAt(elementB) ? -1 : 0\n case SortBy.NAME:\n return getName(elementA) < getName(elementB) ? -1 : 0\n default:\n return 0\n }\n })\n\nexport const paginate = (\n elements: Element[],\n page: number,\n perPage: number\n) => {\n const start = (page - 1) * perPage\n const end = Math.min(start + perPage, elements.length)\n return elements.slice(start, end)\n}\n\nconst getName = (element: Element) =>\n handleElement(\n element,\n item => item.name,\n nft => nft.name\n )\n\nconst getUpdatedAt = (element: Element) =>\n handleElement(\n element,\n item => item.updatedAt,\n (_nft, order) => order.updatedAt\n )\n\nconst handleElement = <T>(\n { item, nft, order }: Element,\n handleItem: (item: Item) => T,\n handleNFT: (nft: NFT, order: Order) => T\n) => (item ? handleItem(item) : handleNFT(nft!, order!))\n","import React, { useMemo, useRef, useState } from 'react'\nimport {\n Table,\n Loader,\n TextFilter,\n Dropdown,\n Pagination,\n NotMobile\n} from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Props } from './OnSaleList.types'\nimport OnSaleListElement from './OnSaleListElement'\nimport { SortBy } from '../../modules/routing/types'\nimport { useProcessedElements } from './utils'\nimport styles from './OnSaleList.module.css'\n\nconst OnSaleList = ({ elements, isLoading }: Props) => {\n const perPage = useRef(12)\n const sortOptions = useRef([\n { value: SortBy.NEWEST, text: t('filters.newest') },\n { value: SortBy.NAME, text: t('filters.name') }\n ])\n\n const [search, setSearch] = useState('')\n const [sort, setSort] = useState(SortBy.NEWEST)\n const [page, setPage] = useState(1)\n\n const processedElements = useProcessedElements(\n elements,\n search,\n sort,\n page,\n perPage.current\n )\n\n const showPagination = processedElements.total / perPage.current > 1\n\n const searchNode = useMemo(\n () => (\n <TextFilter\n value={search}\n onChange={val => {\n setSearch(val)\n setPage(1)\n }}\n placeholder={t('on_sale_list.search', { count: elements.length })}\n />\n ),\n [elements.length, search]\n )\n\n return (\n <>\n <div className={styles.filters}>\n <div className={styles.search}>{searchNode}</div>\n <Dropdown\n direction=\"left\"\n value={sort}\n options={sortOptions.current}\n onChange={(_, data) => setSort(data.value as any)}\n />\n </div>\n {isLoading ? (\n <>\n <div className=\"overlay\" />\n <Loader size=\"massive\" active />\n </>\n ) : (\n <>\n <Table basic=\"very\">\n <NotMobile>\n <Table.Header>\n <Table.Row>\n <Table.HeaderCell>{t('global.item')}</Table.HeaderCell>\n <Table.HeaderCell>{t('global.type')}</Table.HeaderCell>\n <Table.HeaderCell>{t('global.sale_type')}</Table.HeaderCell>\n <Table.HeaderCell>{t('global.sell_price')}</Table.HeaderCell>\n </Table.Row>\n </Table.Header>\n </NotMobile>\n <Table.Body>\n {processedElements.paginated.map(element => (\n <OnSaleListElement\n key={\n element.item\n ? `i-${element.item.id}`\n : `n-${element.nft!.id}`\n }\n {...element}\n />\n ))}\n </Table.Body>\n </Table>\n {processedElements.total === 0 && (\n <div className={styles.empty}>{t('global.no_results')}</div>\n )}\n {showPagination && (\n <div className={styles.pagination}>\n <Pagination\n totalPages={Math.ceil(\n processedElements.total / perPage.current\n )}\n activePage={page}\n onPageChange={(_, data) => setPage(Number(data.activePage))}\n />\n </div>\n )}\n </>\n )}\n </>\n )\n}\n\nexport default React.memo(OnSaleList)\n","import OnSaleList from './OnSaleList.container'\n\nexport default OnSaleList\n","import { connect } from 'react-redux'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { getLoading as getItemsLoading } from '../../modules/item/selectors'\nimport { getLoading as getNFTsLoading } from '../../modules/nft/selectors'\nimport { RootState } from '../../modules/reducer'\nimport OnSaleList from './OnSaleList'\nimport { MapStateProps } from './OnSaleList.types'\n\nimport { FETCH_ITEMS_REQUEST } from '../../modules/item/actions'\nimport { FETCH_NFTS_REQUEST } from '../../modules/nft/actions'\nimport { getOnSaleElements } from '../../modules/ui/browse/selectors'\nimport { OnSaleNFT } from '../../modules/ui/browse/types'\nimport { Item } from '@dcl/schemas'\n\nconst mapState = (state: RootState): MapStateProps => {\n const isLoading =\n isLoadingType(getItemsLoading(state), FETCH_ITEMS_REQUEST) ||\n isLoadingType(getNFTsLoading(state), FETCH_NFTS_REQUEST)\n\n return {\n elements: isLoading\n ? []\n : getOnSaleElements(state).map(element => {\n if (Array.isArray(element)) {\n const [nft, order] = element as OnSaleNFT\n return { nft, order }\n } else {\n const item = element as Item\n return { item }\n }\n }),\n isLoading\n }\n}\n\nexport default connect(mapState)(OnSaleList)\n","import { Collection } from '@dcl/schemas'\nimport { createMatchSelector } from 'connected-react-router'\nimport { createSelector } from 'reselect'\nimport { locations } from '../routing/locations'\nimport { RootState } from '../reducer'\n\nexport const getState = (state: RootState) => state.collection\nexport const getCollectionsByUrn = (state: RootState) => getState(state).data\nexport const getCount = (state: RootState) => getState(state).count\nexport const getError = (state: RootState) => getState(state).error\nexport const getLoading = (state: RootState) => getState(state).loading\n\nexport const getCollections = createSelector<\n RootState,\n ReturnType<typeof getCollectionsByUrn>,\n Collection[]\n>(getCollectionsByUrn, collectionsByUrn => Object.values(collectionsByUrn))\n\nexport const getCollectionsByAddress = createSelector<\n RootState,\n ReturnType<typeof getCollections>,\n Record<string, Collection>\n>(getCollections, collections =>\n Object.values(collections).reduce((acc, collection) => {\n acc[collection.contractAddress] = collection\n return acc\n }, {} as Record<string, Collection>)\n)\n\nconst CollectionDetailMatchSelector = createMatchSelector<\n RootState,\n { contractAddress: string }\n>(locations.collection(':contractAddress'))\n\nexport const getContractAddress = createSelector<\n RootState,\n ReturnType<typeof CollectionDetailMatchSelector>,\n string | null\n>(\n CollectionDetailMatchSelector,\n match => match?.params.contractAddress.toLowerCase() || null\n)\n","import React, { useEffect } from 'react'\nimport { Props } from './CollectionProvider.types'\n\nconst CollectionProvider = ({\n collection,\n items,\n isLoading,\n withItems,\n onFetchCollection,\n children\n}: Props) => {\n useEffect(() => {\n if (isLoading) {\n return\n }\n\n if (\n !collection ||\n (withItems && (!items || items.length !== collection.size))\n ) {\n onFetchCollection()\n }\n }, [collection, items, withItems, isLoading, onFetchCollection])\n\n return <>{children({ collection, items, isLoading })}</>\n}\n\nexport default React.memo(CollectionProvider)\n","import CollectionProvider from './CollectionProvider.container'\n\nexport default CollectionProvider\n","import { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { connect } from 'react-redux'\nimport { Dispatch } from 'redux'\nimport {\n fetchSingleCollectionRequest,\n FETCH_COLLECTIONS_REQUEST,\n FETCH_SINGLE_COLLECTION_REQUEST\n} from '../../modules/collection/actions'\nimport {\n getLoading,\n getCollectionsByAddress\n} from '../../modules/collection/selectors'\nimport { FETCH_ITEMS_REQUEST } from '../../modules/item/actions'\nimport {\n getItemsByContractAddress,\n getLoading as getLoadingItems\n} from '../../modules/item/selectors'\nimport { RootState } from '../../modules/reducer'\nimport CollectionProvider from './CollectionProvider'\nimport {\n MapStateProps,\n MapDispatchProps,\n OwnProps\n} from './CollectionProvider.types'\n\nconst mapState = (state: RootState, ownProps: OwnProps): MapStateProps => ({\n collection: getCollectionsByAddress(state)[ownProps.contractAddress],\n items: getItemsByContractAddress(state)[ownProps.contractAddress],\n isLoading:\n isLoadingType(getLoading(state), FETCH_COLLECTIONS_REQUEST) ||\n isLoadingType(getLoading(state), FETCH_SINGLE_COLLECTION_REQUEST) ||\n (!!ownProps.withItems &&\n isLoadingType(getLoadingItems(state), FETCH_ITEMS_REQUEST))\n})\n\nconst mapDispatch = (\n dispatch: Dispatch,\n { contractAddress, withItems }: OwnProps\n): MapDispatchProps => ({\n onFetchCollection: () =>\n dispatch(fetchSingleCollectionRequest(contractAddress, withItems))\n})\n\nexport default connect(mapState, mapDispatch)(CollectionProvider)\n","import React from 'react'\nimport { Loader } from 'decentraland-ui'\nimport { Item } from '@dcl/schemas'\nimport { Props } from './CollectionImage.types'\nimport { AssetImage } from '../AssetImage'\nimport classNames from 'classnames'\nimport CollectionProvider from '../CollectionProvider'\n\nimport './CollectionImage.css'\n\nconst CollectionImage = ({ contractAddress }: Props) => {\n return (\n <div className=\"CollectionImage\">\n <CollectionProvider contractAddress={contractAddress} withItems>\n {({ items, isLoading }) => {\n const renderRow = (items: Item[]) =>\n items.map((item, index) => <AssetImage key={index} asset={item} />)\n\n if (isLoading || !items) {\n return (\n <div className=\"item-row\">\n <Loader active size=\"tiny\" inline />\n </div>\n )\n }\n\n const row1 = items.slice(0, 2)\n const row2 = items.slice(2, 4)\n const rowHeight = { height: row2.length ? '50%' : '100%' }\n\n if (items.length === 0) {\n return <div className=\"item-row empty\" />\n }\n\n return (\n <>\n {row1.length > 0 ? (\n <div\n className={classNames(\n 'item-row',\n items?.length === 2 && 'full-width-image'\n )}\n style={rowHeight}\n >\n {renderRow(row1)}\n </div>\n ) : null}\n {row2.length > 0 ? (\n <div className=\"item-row\" style={rowHeight}>\n {renderRow(row2)}\n </div>\n ) : null}\n </>\n )\n }}\n </CollectionProvider>\n </div>\n )\n}\n\nexport default React.memo(CollectionImage)\n","import CollectionImage from './CollectionImage'\n\nexport default CollectionImage\n","import React, { useRef } from 'react'\nimport { Card, Loader, Dropdown, TextFilter, Pagination } from 'decentraland-ui'\nimport { Link } from 'react-router-dom'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Props } from './CollectionList.types'\nimport { SortBy } from '../../modules/routing/types'\nimport { COLLECTIONS_PER_PAGE } from '../../modules/routing/utils'\nimport CollectionImage from '../CollectionImage'\nimport { locations } from '../../modules/routing/locations'\nimport styles from './CollectionList.module.css'\nimport ListedBadge from '../ListedBadge'\n\nconst CollectionList = ({\n collections,\n count,\n isLoading,\n search,\n sortBy,\n page,\n onBrowse\n}: Props) => {\n const sortOptions = useRef([\n { value: SortBy.NAME, text: t('filters.name') },\n { value: SortBy.NEWEST, text: t('filters.newest') },\n {\n value: SortBy.RECENTLY_REVIEWED,\n text: t('filters.recently_reviewed')\n },\n { value: SortBy.SIZE, text: t('filters.size') }\n ])\n\n const pages = Math.ceil(count / COLLECTIONS_PER_PAGE)\n\n const hasPagination = pages > 1\n\n return (\n <>\n <div className={styles.filters}>\n <div className={styles.search}>\n <TextFilter\n value={search}\n onChange={newSearch => {\n if (search !== newSearch) {\n onBrowse({ search: newSearch, page: 1 })\n }\n }}\n placeholder={t('collection_list.search', {\n count: isLoading ? 0 : count\n })}\n />\n </div>\n <Dropdown\n direction=\"left\"\n value={sortBy}\n options={sortOptions.current}\n onChange={(_, data) => {\n if (sortBy !== data.value) {\n onBrowse({ sortBy: data.value as SortBy })\n }\n }}\n />\n </div>\n {isLoading ? (\n <>\n <div className=\"overlay\" />\n <Loader size=\"massive\" active />\n </>\n ) : (\n <>\n {collections.length === 0 ? (\n <div className={styles.empty}>{t('global.no_results')}</div>\n ) : (\n collections.map(collection => (\n <Card\n key={collection.contractAddress}\n className={styles.card}\n fluid\n >\n <Link\n className={styles.link}\n to={locations.collection(collection.contractAddress)}\n >\n <Card.Content className={styles.cardContent}>\n <div className={styles.detailsContainer}>\n <div className={styles.detailsLeft}>\n <div className={styles.image}>\n <CollectionImage\n contractAddress={collection.contractAddress}\n />\n </div>\n </div>\n <div className={styles.detailsRight}>\n <div className={styles.name}>{collection.name}</div>\n <div className={styles.count}>\n {t('collection_list.item_count', {\n count: collection.size\n })}\n </div>\n </div>\n </div>\n {collection.isOnSale && (\n <ListedBadge className={styles.listedBadge} />\n )}\n </Card.Content>\n </Link>\n </Card>\n ))\n )}\n {hasPagination && (\n <div className={styles.pagination}>\n <Pagination\n totalPages={pages}\n activePage={page}\n onPageChange={(_, data) => {\n if (page !== data.activePage) {\n onBrowse({ page: Number(data.activePage) })\n }\n }}\n />\n </div>\n )}\n </>\n )}\n </>\n )\n}\n\nexport default React.memo(CollectionList)\n","import CollectionList from './CollectionList.container'\n\nexport default CollectionList\n","import { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { connect } from 'react-redux'\nimport { FETCH_COLLECTIONS_REQUEST } from '../../modules/collection/actions'\nimport {\n getCollections,\n getCount,\n getLoading\n} from '../../modules/collection/selectors'\nimport { RootState } from '../../modules/reducer'\nimport { browse } from '../../modules/routing/actions'\nimport { getPage, getSearch, getSortBy } from '../../modules/routing/selectors'\nimport CollectionList from './CollectionList'\nimport {\n MapStateProps,\n MapDispatch,\n MapDispatchProps\n} from './CollectionList.types'\n\nconst mapState = (state: RootState): MapStateProps => ({\n collections: getCollections(state),\n count: getCount(state),\n isLoading: isLoadingType(getLoading(state), FETCH_COLLECTIONS_REQUEST),\n search: getSearch(state),\n sortBy: getSortBy(state),\n page: getPage(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onBrowse: options => dispatch(browse(options))\n})\n\nexport default connect(mapState, mapDispatch)(CollectionList)\n","import React from 'react'\nimport { Props } from './InputContainer.types'\nimport './InputContainer.css'\n\nconst InputContainer = ({ title, children }: Props) => {\n return (\n <div className=\"InputContainer\">\n <div className=\"title\">{title}</div>\n {children}\n </div>\n )\n}\n\nexport default React.memo(InputContainer)\n","import InputContainer from './InputContainer'\n\nexport default InputContainer\n","import React, { useRef } from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Button, Center, Empty } from 'decentraland-ui'\nimport { Props } from './CoverPicker.types'\nimport './CoverPicker.css'\n\nconst CoverPicker = ({ src, onChange }: Props) => {\n const inputRef = useRef<HTMLInputElement>(null)\n\n return (\n <div className=\"CoverPicker\">\n <div className=\"image-container\">\n {src ? (\n <img src={src} alt=\"cover\"></img>\n ) : (\n <Empty>\n <Center>\n <div className=\"watermelon\" />\n <button\n className=\"add-cover\"\n onClick={() => inputRef.current?.click()}\n >\n {t('store_settings.add_cover_picture')}\n </button>\n </Center>\n </Empty>\n )}\n {src && (\n <div className=\"buttons\">\n <Button\n circular\n icon=\"camera\"\n onClick={() => inputRef.current?.click()}\n />\n <Button\n circular\n icon=\"cancel\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n onChange()\n }}\n />\n </div>\n )}\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={async e => {\n const file = e.target.files?.[0]\n\n if (file) {\n const src = URL.createObjectURL(file)\n onChange(src, file.name, file.size)\n } else {\n onChange()\n }\n }}\n hidden\n />\n </div>\n )\n}\n\nexport default React.memo(CoverPicker)\n","import CoverPicker from './CoverPicker'\n\nexport default CoverPicker\n","import React from 'react'\nimport { Props } from './TextInput.types'\nimport './TextInput.css'\n\nconst TextInput = ({ type, value, onChange }: Props) => {\n const Input = type\n\n return (\n <Input\n className=\"TextInput\"\n value={value}\n onChange={e => onChange(e.target.value)}\n />\n )\n}\n\nexport default React.memo(TextInput)\n","import TextInput from './TextInput'\n\nexport default TextInput\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Header, Row, Column, Button, Loader } from 'decentraland-ui'\nimport { Link, Prompt } from 'react-router-dom'\nimport { Location } from 'history'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport InputContainer from './InputContainer'\nimport CoverPicker from './CoverPicker'\nimport TextInput from './TextInput'\nimport { Props } from './StoreSettings.types'\nimport { locations } from '../../modules/routing/locations'\nimport { LinkType, Store } from '../../modules/store/types'\nimport {\n getIsValidLink,\n getPrefixedCoverName,\n linkStartWiths\n} from '../../modules/store/utils'\nimport './StoreSettings.css'\n\nconst MAX_FILE_SIZE = 1000000\n\nconst StoreSettings = ({\n address,\n store,\n canSubmit,\n error,\n isLoading,\n isSaving,\n onChange,\n onRevert,\n onSave,\n onFetchStore\n}: Props) => {\n const { cover, description, website, facebook, twitter, discord } = store\n\n const [coverSize, setCoverSize] = useState<number>()\n\n const [errors, setErrors] = useState<\n { [key in keyof Store]?: string } & { size?: string }\n >({})\n\n useEffect(() => {\n onFetchStore(address)\n }, [onFetchStore, address])\n\n useEffect(() => {\n const newErrors: typeof errors = {}\n\n if (website && !getIsValidLink(LinkType.WEBSITE, website)) {\n newErrors[LinkType.WEBSITE] = t('store_settings.link_start_with_error', {\n value: linkStartWiths[LinkType.WEBSITE]\n })\n }\n\n if (coverSize !== undefined && coverSize > MAX_FILE_SIZE) {\n newErrors.size = t(`store_settings.size_error`, {\n max: sizeInMbs(MAX_FILE_SIZE),\n current: sizeInMbs(coverSize)\n })\n }\n\n setErrors(newErrors)\n\n function sizeInMbs(size: number) {\n return (\n (size / 1000000).toLocaleString(undefined, {\n maximumFractionDigits: 2\n }) + 'MB'\n )\n }\n }, [coverSize, website])\n\n const hasErrors = useMemo(\n () => Object.values(errors).some(error => !!error),\n [errors]\n )\n\n const getInputValue = useCallback(\n (type: LinkType) => store[type].replace(linkStartWiths[type], ''),\n [store]\n )\n\n const handleInputOnChange = useCallback(\n (type: LinkType, value: string) =>\n onChange({\n ...store,\n [type]: (!value ? '' : linkStartWiths[type] + value).replaceAll(' ', '')\n }),\n [store, onChange]\n )\n\n useEffect(() => {\n if (canSubmit) {\n window.onbeforeunload = () => true\n } else {\n window.onbeforeunload = null\n }\n return () => {\n window.onbeforeunload = null\n }\n }, [canSubmit])\n\n // returns true to allow the navigation to the next location\n const getPromptMessage = (location: Location<unknown>) => {\n if (location.search.includes('viewAsGuest=true')) return true\n return t('store_settings.unsaved_changes')\n }\n\n return (\n <div className=\"StoreSettings\">\n <Prompt when={canSubmit} message={getPromptMessage} />\n <Row className=\"top\">\n <Column>\n <Header>{t('store_settings.settings')}</Header>\n </Column>\n <Column align=\"right\">\n <Link\n className={'see-store-as-guest'}\n to={locations.currentAccount({ viewAsGuest: true })}\n >\n {t('store_settings.see_store_as_guest')}\n </Link>\n </Column>\n </Row>\n {isLoading ? (\n <Loader size=\"massive\" active />\n ) : (\n <>\n <div className=\"elements\">\n <InputContainer title={t('store_settings.store_cover')}>\n <CoverPicker\n src={cover}\n onChange={(src, name, size) => {\n setCoverSize(size)\n onChange({\n ...store,\n cover: src || '',\n coverName: name ? getPrefixedCoverName(name) : ''\n })\n }}\n />\n {errors.size && <div className=\"error\">{errors.size}</div>}\n </InputContainer>\n <InputContainer title={t('store_settings.description')}>\n <TextInput\n type=\"textarea\"\n value={description}\n onChange={description => onChange({ ...store, description })}\n />\n </InputContainer>\n <InputContainer title={t('store_settings.website')}>\n <TextInput\n type=\"input\"\n value={website}\n onChange={website => onChange({ ...store, website })}\n />\n {errors.website && <div className=\"error\">{errors.website}</div>}\n </InputContainer>\n <InputContainer title={t('store_settings.facebook')}>\n <TextInput\n type=\"input\"\n value={getInputValue(LinkType.FACEBOOK)}\n onChange={value =>\n handleInputOnChange(LinkType.FACEBOOK, value)\n }\n />\n <div className=\"info\">{facebook}</div>\n </InputContainer>\n <InputContainer title={t('store_settings.twitter')}>\n <TextInput\n type=\"input\"\n value={getInputValue(LinkType.TWITTER)}\n onChange={value => handleInputOnChange(LinkType.TWITTER, value)}\n />\n <div className=\"info\">{twitter}</div>\n </InputContainer>\n <InputContainer title={t('store_settings.discord')}>\n <TextInput\n type=\"input\"\n value={getInputValue(LinkType.DISCORD)}\n onChange={value => handleInputOnChange(LinkType.DISCORD, value)}\n />\n <div className=\"info\">{discord}</div>\n </InputContainer>\n </div>\n <div className=\"bottom\">\n <Button\n onClick={() => onSave(store)}\n primary\n disabled={!canSubmit || hasErrors || isSaving}\n loading={isSaving}\n >\n {t('store_settings.save')}\n </Button>\n <Button\n onClick={() => {\n setErrors({})\n onRevert(address)\n }}\n disabled={isSaving || !canSubmit}\n >\n {t('store_settings.revert')}\n </Button>\n </div>\n {error && <div className=\"store-request-error\">{error}</div>}\n </>\n )}\n </div>\n )\n}\n\nexport default React.memo(StoreSettings)\n","import StoreSettings from './StoreSettings.container'\n\nexport default StoreSettings\n","import { connect } from 'react-redux'\nimport { Dispatch } from 'redux'\nimport { getAddress } from 'decentraland-dapps/dist/modules/wallet/selectors'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { RootState } from '../../modules/reducer'\nimport { MapStateProps, MapDispatchProps } from './StoreSettings.types'\nimport StoreSettings from './StoreSettings'\nimport {\n getStoresByOwner,\n getLocalStore,\n getLoading as getStoreLoading,\n getError\n} from '../../modules/store/selectors'\nimport { Store } from '../../modules/store/types'\nimport {\n fetchStoreRequest,\n FETCH_STORE_REQUEST,\n revertLocalStore,\n updateLocalStore,\n updateStoreRequest,\n UPDATE_STORE_REQUEST\n} from '../../modules/store/actions'\nimport { getEmptyStore } from '../../modules/store/utils'\n\nconst mapState = (state: RootState): MapStateProps => {\n const address = getAddress(state)!\n const savedStore = getStoresByOwner(state)[address!]\n const emptyStore = getEmptyStore({ owner: address })\n const localStore = getLocalStore(state)\n const baseStore = savedStore || emptyStore\n const store = localStore || baseStore\n const canSubmit = JSON.stringify(store) !== JSON.stringify(baseStore)\n const isLoading = isLoadingType(getStoreLoading(state), FETCH_STORE_REQUEST)\n const isSaving = isLoadingType(getStoreLoading(state), UPDATE_STORE_REQUEST)\n const error = getError(state)\n\n return {\n address,\n store,\n error,\n canSubmit,\n isLoading,\n isSaving\n }\n}\n\nconst mapDispatch = (dispatch: Dispatch): MapDispatchProps => {\n return {\n onChange: (store: Store) => dispatch(updateLocalStore(store)),\n onRevert: (address: string) => dispatch(revertLocalStore(address)),\n onSave: (store: Store) => dispatch(updateStoreRequest(store)),\n onFetchStore: (address: string) => dispatch(fetchStoreRequest(address))\n }\n}\n\nexport default connect(mapState, mapDispatch)(StoreSettings)\n","import React, { ReactNode, useEffect } from 'react'\nimport { Icon, Loader } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { formatWeiMANA } from '../../../lib/mana'\nimport { Props } from './Stats.types'\nimport { Mana } from '../../Mana'\nimport { Network } from '@dcl/schemas'\nimport './Stats.css'\n\nconst Stats = ({\n address,\n totalSales,\n totalEarnings,\n ethereumEarned,\n maticEarned,\n royalties,\n isLoading,\n onFetchMetrics\n}: Props) => {\n useEffect(() => onFetchMetrics(address), [address, onFetchMetrics])\n\n return (\n <div className=\"Stats\">\n <Stat\n subtitle={t('sales.total_sales')}\n value={totalSales.toLocaleString()}\n isLoading={isLoading}\n icon={<Icon className=\"total-sales-icon\" name=\"tag\" size=\"large\" />}\n />\n <Stat\n subtitle={t('sales.total_earnings')}\n value={formatWeiMANA(totalEarnings)}\n isLoading={isLoading}\n icon={\n <Icon\n className=\"total-earnings-icon\"\n name=\"shopping bag\"\n size=\"large\"\n />\n }\n />\n <Stat\n subtitle={t('sales.royalties')}\n value={formatWeiMANA(royalties)}\n isLoading={isLoading}\n icon={<Icon className=\"royalties-icon\" name=\"star\" size=\"large\" />}\n />\n <Stat\n subtitle={t('sales.ethereum_earnings')}\n value={formatWeiMANA(ethereumEarned)}\n isLoading={isLoading}\n icon={\n <Mana\n className=\"ethereum-earnings-icon\"\n network={Network.ETHEREUM}\n size=\"large\"\n />\n }\n />\n <Stat\n subtitle={t('sales.polygon_earnings')}\n value={formatWeiMANA(maticEarned)}\n isLoading={isLoading}\n icon={\n <Mana\n className=\"polygon-earnings-icon\"\n network={Network.MATIC}\n size=\"medium\"\n />\n }\n />\n </div>\n )\n}\n\nconst Stat = ({\n value,\n subtitle,\n isLoading,\n icon\n}: {\n value: string\n subtitle: string\n isLoading: boolean\n icon: ReactNode\n}) => {\n return (\n <div className=\"Stat\">\n {isLoading ? (\n <div className=\"loader-container\">\n <Loader inline active />\n </div>\n ) : (\n <>\n <div className=\"icon\">{icon}</div>\n <div className=\"details\">\n <div className=\"value\">{value}</div>\n <div className=\"subtitle\">{subtitle}</div>\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default React.memo(Stats)\n","import Stats from './Stats.container'\n\nexport default Stats\n","import { connect } from 'react-redux'\nimport { RootState } from '../../../modules/reducer'\nimport { MapStateProps, MapDispatchProps } from './Stats.types'\nimport Stats from './Stats'\nimport { getMetricsByAddress } from '../../../modules/account/selectors'\nimport { getAddress } from '../../../modules/wallet/selectors'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { getLoading } from '../../../modules/account/selectors'\nimport {\n fetchAccountMetricsRequest,\n FETCH_ACCOUNT_METRICS_REQUEST\n} from '../../../modules/account/actions'\nimport { Dispatch } from 'redux'\n\nconst getEmptyMetrics = (address: string) => ({\n address,\n earned: '0',\n spent: '0',\n royalties: '0',\n purchases: 0,\n sales: 0\n})\n\nconst mapState = (state: RootState): MapStateProps => {\n const address = getAddress(state)!\n const metrics = getMetricsByAddress(state)[address]\n const emptyMetrics = getEmptyMetrics(address)\n const isLoading = isLoadingType(\n getLoading(state),\n FETCH_ACCOUNT_METRICS_REQUEST\n )\n\n return {\n address,\n totalSales: metrics?.aggregated?.sales || emptyMetrics.sales,\n totalEarnings: metrics?.aggregated?.earned || emptyMetrics.earned,\n ethereumEarned: metrics?.ETHEREUM?.earned || emptyMetrics.earned,\n maticEarned: metrics?.MATIC?.earned || emptyMetrics.earned,\n royalties: metrics?.aggregated?.royalties || emptyMetrics.royalties,\n isLoading\n }\n}\n\nconst mapDispatch = (dispatch: Dispatch): MapDispatchProps => {\n return {\n onFetchMetrics: address => dispatch(fetchAccountMetricsRequest({ address }))\n }\n}\n\nexport default connect(mapState, mapDispatch)(Stats)\n","import React, { ReactNode } from 'react'\nimport { formatDistanceToNow } from 'date-fns'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport {\n Header,\n Loader,\n Mobile,\n NotMobile,\n Pagination,\n Table\n} from 'decentraland-ui'\nimport { Profile } from 'decentraland-dapps/dist/containers'\nimport { Link } from 'react-router-dom'\nimport { SALES_PER_PAGE } from '../../../modules/routing/utils'\nimport AssetCell from '../../OnSaleList/AssetCell'\nimport { Props } from './Activity.types'\nimport { Mana } from '../../Mana'\nimport { formatWeiMANA } from '../../../lib/mana'\nimport { locations } from '../../../modules/routing/locations'\nimport './Activity.css'\n\nconst Activity = ({\n count,\n sales,\n assets,\n page,\n isLoading,\n onBrowse\n}: Props) => {\n const pages = Math.ceil(count / SALES_PER_PAGE)\n\n const hasPagination = pages > 1\n\n return (\n <div className=\"Activity\">\n <Header>{t('sales.activity')}</Header>\n {isLoading ? (\n <div className=\"loader-container\">\n <Loader active inline />\n </div>\n ) : (\n <>\n <Mobile>\n {sales.reduce((acc, sale) => {\n const asset = assets[sale.id]\n if (asset) {\n acc.push(\n <div key={sale.id} className=\"mobile-row\">\n <AssetCell asset={assets[sale.id]} />\n\n <Mana network={sale.network} inline>\n {formatWeiMANA(sale.price)}\n </Mana>\n </div>\n )\n }\n return acc\n }, [] as ReactNode[])}\n </Mobile>\n <NotMobile>\n <Table basic=\"very\">\n <Table.Header>\n <Table.Row>\n <Table.HeaderCell>{t('global.item')}</Table.HeaderCell>\n <Table.HeaderCell>{t('global.time')}</Table.HeaderCell>\n <Table.HeaderCell>{t('global.buyer')}</Table.HeaderCell>\n <Table.HeaderCell>{t('global.type')}</Table.HeaderCell>\n <Table.HeaderCell>{t('global.price')}</Table.HeaderCell>\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {sales.reduce((acc, sale) => {\n const asset = assets[sale.id]\n if (asset) {\n acc.push(\n <Table.Row key={sale.id}>\n <Table.Cell>\n <AssetCell asset={assets[sale.id]} />\n </Table.Cell>\n <Table.Cell>\n {formatDistanceToNow(sale.timestamp, {\n addSuffix: true\n })}\n </Table.Cell>\n <Table.Cell>\n <Link to={locations.account(sale.buyer)}>\n <Profile address={sale.buyer} inline />\n </Link>\n </Table.Cell>\n <Table.Cell>{t(`global.${sale.type}`)}</Table.Cell>\n <Table.Cell>\n <Mana network={sale.network} inline>\n {formatWeiMANA(sale.price)}\n </Mana>\n </Table.Cell>\n </Table.Row>\n )\n }\n return acc\n }, [] as ReactNode[])}\n </Table.Body>\n </Table>\n </NotMobile>\n {count === 0 && <div className=\"empty\">{t('global.no_results')}</div>}\n {hasPagination && (\n <div className=\"pagination\">\n <Pagination\n totalPages={pages}\n activePage={page}\n onPageChange={(_, data) => {\n if (page !== data.activePage) {\n onBrowse({ page: Number(data.activePage) })\n }\n }}\n />\n </div>\n )}\n </>\n )}\n </div>\n )\n}\n\nexport default React.memo(Activity)\n","import { Item, Sale, SaleType } from '@dcl/schemas'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { connect } from 'react-redux'\nimport { NFT } from '../../../modules/nft/types'\nimport { RootState } from '../../../modules/reducer'\nimport {\n getSales,\n getCount,\n getLoading as getSaleLoading\n} from '../../../modules/sale/selectors'\nimport {\n getData as getItemsData,\n getLoading as getItemLoading\n} from '../../../modules/item/selectors'\nimport {\n getData as getNftData,\n getLoading as getNftLoading\n} from '../../../modules/nft/selectors'\nimport Activity from './Activity'\nimport { FETCH_SALES_REQUEST } from '../../../modules/sale/actions'\nimport { FETCH_ITEM_REQUEST } from '../../../modules/item/actions'\nimport { FETCH_NFT_REQUEST } from '../../../modules/nft/actions'\nimport { MapStateProps, MapDispatchProps } from './Activity.types'\nimport { browse } from '../../../modules/routing/actions'\nimport { Dispatch } from 'redux'\nimport { getPage } from '../../../modules/routing/selectors'\nimport { Asset } from '../../../modules/asset/types'\n\nconst getAssets = (\n sales: Sale[],\n items: Record<string, Item>,\n nfts: Record<string, NFT>\n) =>\n sales.reduce((acc, sale) => {\n const { contractAddress, itemId, tokenId, type } = sale\n\n const item = items[`${contractAddress}-${itemId}`]\n const nft = nfts[`${contractAddress}-${tokenId}`]\n\n if (type === SaleType.MINT && item) {\n acc[sale.id] = item\n } else if (nft) {\n acc[sale.id] = nft\n }\n\n return acc\n }, {} as Record<string, Asset>)\n\nconst getIsLoading = (state: RootState) =>\n isLoadingType(getSaleLoading(state), FETCH_SALES_REQUEST) ||\n isLoadingType(getItemLoading(state), FETCH_ITEM_REQUEST) ||\n isLoadingType(getNftLoading(state), FETCH_NFT_REQUEST)\n\nconst mapState = (state: RootState): MapStateProps => {\n const sales = getSales(state)\n const count = getCount(state)\n const items = getItemsData(state)\n const nfts = getNftData(state)\n const page = getPage(state)\n const assets = getAssets(sales, items, nfts)\n const isLoading = getIsLoading(state)\n\n return {\n sales,\n assets,\n count,\n page,\n isLoading\n }\n}\n\nconst mapDispatch = (dispatch: Dispatch): MapDispatchProps => {\n return {\n onBrowse: options => dispatch(browse(options))\n }\n}\n\nexport default connect(mapState, mapDispatch)(Activity)\n","import Activity from './Activity.container'\n\nexport default Activity\n","import React from 'react'\nimport { Header } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport Stats from './Stats'\nimport Activity from './Activity'\nimport './Sales.css'\n\nconst Sales = () => {\n return (\n <div className=\"Sales\">\n <div className=\"header-with-filter\">\n <Header>{t('sales.stats')}</Header>\n </div>\n <Stats />\n <Activity />\n </div>\n )\n}\n\nexport default React.memo(Sales)\n","import Sales from './Sales'\n\nexport default Sales\n","import { RootState } from '../reducer'\n\nexport const getState = (state: RootState) => state.bid\nexport const getData = (state: RootState) => getState(state).data\nexport const getLoading = (state: RootState) => getState(state).loading\nexport const getError = (state: RootState) => getState(state).error\n","import { createSelector } from 'reselect'\nimport { Bid } from '@dcl/schemas'\nimport { getData as getBidData } from '../../../bid/selectors'\nimport { RootState } from '../../../reducer'\nimport { BidState } from '../../../bid/reducer'\nimport { BidUIState } from './reducer'\n\nexport const getState = (state: RootState) => state.ui.nft.bid\n\nexport const getSellerBids = createSelector<\n RootState,\n BidUIState,\n BidState['data'],\n Bid[]\n>(getState, getBidData, (bid, bidsById) => bid.seller.map(id => bidsById[id]))\n\nexport const getBidderBids = createSelector<\n RootState,\n BidUIState,\n BidState['data'],\n Bid[]\n>(getState, getBidData, (ui, bidsById) => ui.bidder.map(id => bidsById[id]))\n\nexport const getArchivedBidIds = (state: RootState) => getState(state).archived\n\nexport const getNFTBids = createSelector<\n RootState,\n BidUIState,\n BidState['data'],\n Bid[]\n>(getState, getBidData, (bid, bidsById) => bid.nft.map(id => bidsById[id]))\n","import React, { useEffect } from 'react'\nimport { AssetType } from '../../modules/asset/types'\nimport { Props } from './AssetProvider.types'\n\nconst AssetProvider = (props: Props) => {\n const {\n type,\n asset,\n order,\n isLoading,\n children,\n onFetchNFT,\n onFetchItem,\n contractAddress,\n tokenId\n } = props\n\n useEffect(() => {\n if (contractAddress && tokenId) {\n switch (type) {\n case AssetType.NFT:\n onFetchNFT(contractAddress, tokenId)\n break\n case AssetType.ITEM:\n onFetchItem(contractAddress, tokenId)\n break\n default:\n throw new Error(`Invalid Asset type ${type}`)\n }\n }\n }, [contractAddress, tokenId, type, onFetchNFT, onFetchItem])\n\n return <>{children(asset, order, isLoading)}</>\n}\n\nexport default React.memo(AssetProvider)\n","import { connect } from 'react-redux'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { RootState } from '../../modules/reducer'\nimport { fetchNFTRequest, FETCH_NFT_REQUEST } from '../../modules/nft/actions'\nimport {\n fetchItemRequest,\n FETCH_ITEM_REQUEST\n} from '../../modules/item/actions'\nimport {\n getContractAddress as getNFTContractAddress,\n getTokenId as getNFTTokenId,\n getLoading as getNFTLoading,\n getData as getNFTs\n} from '../../modules/nft/selectors'\nimport {\n getContractAddress as getItemContractAddress,\n getTokenId as getItemTokenId,\n getLoading as getItemLoading,\n getData as getItems\n} from '../../modules/item/selectors'\nimport { getData as getOrders } from '../../modules/order/selectors'\nimport { getNFT } from '../../modules/nft/utils'\nimport { getItem } from '../../modules/item/utils'\nimport { getActiveOrder } from '../../modules/order/utils'\nimport { Asset, AssetType } from '../../modules/asset/types'\nimport {\n MapDispatch,\n MapDispatchProps,\n MapStateProps,\n OwnProps\n} from './AssetProvider.types'\nimport AssetProvider from './AssetProvider'\n\nconst mapState = (state: RootState, ownProps: OwnProps): MapStateProps => {\n let contractAddress = ownProps.contractAddress\n let tokenId = ownProps.tokenId\n const orders = getOrders(state)\n\n let asset: Asset | null = null\n let isLoading = false\n switch (ownProps.type) {\n case AssetType.NFT: {\n const nfts = getNFTs(state)\n contractAddress = contractAddress || getNFTContractAddress(state)\n tokenId = tokenId || getNFTTokenId(state)\n asset = getNFT(contractAddress, tokenId, nfts)\n isLoading = isLoadingType(getNFTLoading(state), FETCH_NFT_REQUEST)\n break\n }\n case AssetType.ITEM: {\n const items = getItems(state)\n contractAddress = contractAddress || getItemContractAddress(state)\n tokenId = tokenId || getItemTokenId(state)\n asset = getItem(contractAddress, tokenId, items)\n isLoading = isLoadingType(getItemLoading(state), FETCH_ITEM_REQUEST)\n break\n }\n default:\n throw new Error(`Invalid Asset type ${ownProps.type}`)\n }\n const order = getActiveOrder(asset, orders)\n\n return {\n tokenId,\n contractAddress,\n asset,\n order,\n isLoading: !asset && isLoading\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onFetchNFT: (contractAddress: string, tokenId: string) =>\n dispatch(fetchNFTRequest(contractAddress, tokenId)),\n onFetchItem: (contractAddress: string, tokenId: string) =>\n dispatch(fetchItemRequest(contractAddress, tokenId))\n})\n\nconst mergeProps = (\n stateProps: MapStateProps,\n dispatchProps: MapDispatchProps,\n ownProps: OwnProps\n) => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps\n})\n\nexport default connect(mapState, mapDispatch, mergeProps)(AssetProvider) as <\n T extends AssetType = AssetType\n>(\n props: OwnProps<T>\n) => JSX.Element\n","import { Item } from '@dcl/schemas'\n\nexport function getItem(\n contractAddress: string | null,\n tokenId: string | null,\n items: Record<string, Item>\n): Item | null {\n if (!contractAddress || !tokenId) {\n return null\n }\n\n const itemId = getItemId(contractAddress, tokenId)\n return itemId in items ? items[itemId] : null\n}\n\nexport function getItemId(contractAddress: string, tokenId: string) {\n return contractAddress + '-' + tokenId\n}\n","import { useEffect, useState } from 'react'\nimport { NFTCategory } from '@dcl/schemas'\nimport { getFingerprint } from './estate/utils'\nimport { NFT } from './types'\n\nexport const useFingerprint = (nft: NFT | null) => {\n const [fingerprint, setFingerprint] = useState<string>()\n const [isLoading, setIsLoading] = useState(false)\n\n useEffect(() => {\n if (nft) {\n switch (nft.category) {\n case NFTCategory.ESTATE: {\n setIsLoading(true)\n getFingerprint(nft.tokenId)\n .then(result => setFingerprint(result))\n .finally(() => setIsLoading(false))\n .catch(error =>\n console.error(\n `Error getting fingerprint for nft ${nft.tokenId}`,\n error\n )\n )\n break\n }\n default:\n break\n }\n }\n }, [nft, setFingerprint, setIsLoading])\n\n return [fingerprint, isLoading] as const\n}\n","import React, { useEffect, useState } from 'react'\nimport { Button, Popup } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { useFingerprint } from '../../../modules/nft/hooks'\nimport {\n isInsufficientMANA,\n checkFingerprint\n} from '../../../modules/bid/utils'\nimport { Props } from './AcceptButton.types'\n\nconst AcceptButton = (props: Props) => {\n const { nft, bid, onClick } = props\n\n const [fingerprint, isLoadingFingerprint] = useFingerprint(nft)\n const [hasInsufficientMANA, setHasInsufficientMANA] = useState(false)\n\n useEffect(() => {\n isInsufficientMANA(bid)\n .then(setHasInsufficientMANA)\n .catch(error =>\n console.error(`Could not get the MANA from bidder ${bid.bidder}`, error)\n )\n }, [bid])\n\n const isValidFingerprint = checkFingerprint(bid, fingerprint)\n const isValidSeller = !!nft && nft.owner === bid.seller\n\n const isDisabled =\n !nft ||\n isLoadingFingerprint ||\n hasInsufficientMANA ||\n !isValidFingerprint ||\n !isValidSeller\n\n let button = (\n <Button primary disabled={isDisabled} onClick={onClick}>\n {t('global.accept')}\n </Button>\n )\n\n if (hasInsufficientMANA) {\n button = (\n <Popup\n content={t('bid.not_enough_mana_on_bid_received')}\n position=\"top center\"\n trigger={<div className=\"popup-button\">{button}</div>}\n />\n )\n } else if (!isValidFingerprint) {\n button = (\n <Popup\n content={t('bid.invalid_fingerprint_on_bid_received')}\n position=\"top center\"\n trigger={<div className=\"popup-button\">{button}</div>}\n />\n )\n } else if (!isValidSeller) {\n button = (\n <Popup\n content={t('bid.invalid_seller')}\n position=\"top center\"\n trigger={<div className=\"popup-button\">{button}</div>}\n />\n )\n }\n\n return <div className=\"AcceptButton\">{button}</div>\n}\n\nexport default React.memo(AcceptButton)\n","import React, { useEffect, useState } from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { useFingerprint } from '../../../modules/nft/hooks'\nimport {\n isInsufficientMANA,\n checkFingerprint\n} from '../../../modules/bid/utils'\nimport { Props } from './WarningMessage.types'\nimport './WarningMessage.css'\n\nconst WarningMessage = (props: Props) => {\n const { nft, bid } = props\n\n const [fingerprint] = useFingerprint(nft)\n const [hasInsufficientMANA, setHasInsufficientMANA] = useState(false)\n\n useEffect(() => {\n isInsufficientMANA(bid)\n .then(setHasInsufficientMANA)\n .catch(error =>\n console.error(`Could not get the MANA from bidder ${bid.bidder}`, error)\n )\n }, [bid])\n\n const isValidFingerprint = checkFingerprint(bid, fingerprint)\n\n if (hasInsufficientMANA) {\n return (\n <div className=\"WarningMessage\">\n {t('bid.not_enough_mana_on_bid_placed')}\n </div>\n )\n } else if (!isValidFingerprint) {\n return (\n <div className=\"WarningMessage\">\n {t('bid.invalid_fingerprint_on_bid_placed')}\n </div>\n )\n }\n\n return null\n}\n\nexport default React.memo(WarningMessage)\n","import { getCurrentLocale } from 'decentraland-dapps/dist/modules/translation/utils'\nimport formatDistanceToNowI18N from 'date-fns/formatDistanceToNow'\nimport en from 'date-fns/locale/en-US'\nimport es from 'date-fns/locale/es'\nimport zh from 'date-fns/locale/zh-CN'\n\nconst locales: Record<string, Locale> = {\n en,\n es,\n zh\n}\n\nexport function formatDistanceToNow(\n date: number | Date,\n options: {\n includeSeconds?: boolean\n addSuffix?: boolean\n locale?: Locale\n } = {}\n) {\n const locale = locales[getCurrentLocale().locale]\n\n if (locale) {\n options.locale = locale\n }\n\n return formatDistanceToNowI18N(date, options)\n}\n","import React from 'react'\nimport { Field, Mana } from 'decentraland-ui'\nimport { Props } from './ManaField.types'\nimport './ManaField.css'\n\nexport default class ManaField extends React.PureComponent<Props> {\n render() {\n const { className, network, ...rest } = this.props\n let classes = `ManaField ${network}`\n if (className) {\n classes += ' ' + className\n }\n return (\n <Field\n {...rest}\n className={classes}\n icon={<Mana network={network} />}\n iconPosition=\"left\"\n />\n )\n }\n}\n","import React, { useState } from 'react'\nimport { Modal, Button, Form } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Props } from './ConfirmInputValueModal.types'\nimport { ManaField } from '../ManaField'\nimport './ConfirmInputValueModal.css'\n\nconst ConfirmInputValueModal = ({\n open,\n content,\n headerTitle,\n valueToConfirm,\n onCancel,\n onConfirm,\n loading = false,\n disabled = false,\n network\n}: Props) => {\n const [confirmedInput, setConfirmedInput] = useState<string>('')\n\n const parsedValueToConfirm = parseFloat(valueToConfirm).toString()\n\n const isDisabled = disabled || parsedValueToConfirm !== confirmedInput\n\n return (\n <Modal size=\"small\" open={open} className=\"ConfirmInputValueModal\">\n <Modal.Header>{headerTitle}</Modal.Header>\n <Form onSubmit={onConfirm}>\n <Modal.Content>\n {content}\n <ManaField\n label={t('global.price')}\n network={network}\n placeholder={parsedValueToConfirm}\n value={confirmedInput}\n onChange={(_event, props) => {\n setConfirmedInput(props.value)\n }}\n />\n </Modal.Content>\n <Modal.Actions>\n <Button\n type=\"button\"\n onClick={() => {\n setConfirmedInput('')\n onCancel()\n }}\n >\n {t('global.cancel')}\n </Button>\n <Button type=\"submit\" primary disabled={isDisabled} loading={loading}>\n {t('global.proceed')}\n </Button>\n </Modal.Actions>\n </Form>\n </Modal>\n )\n}\n\nexport default React.memo(ConfirmInputValueModal)\n","import React, { useCallback, useState } from 'react'\nimport { utils } from 'ethers'\nimport { Link } from 'react-router-dom'\nimport { Loader, Stats, Button } from 'decentraland-ui'\nimport { Profile } from 'decentraland-dapps/dist/containers'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { locations } from '../../modules/routing/locations'\nimport { addressEquals } from '../../modules/wallet/utils'\nimport { AssetType } from '../../modules/asset/types'\nimport { AssetProvider } from '../AssetProvider'\nimport { AssetImage } from '../AssetImage'\nimport { Mana } from '../Mana'\nimport { AcceptButton } from './AcceptButton'\nimport { WarningMessage } from './WarningMessage'\nimport { formatWeiMANA } from '../../lib/mana'\nimport { formatDistanceToNow } from '../../lib/date'\nimport { Props } from './Bid.types'\nimport { ConfirmInputValueModal } from '../ConfirmInputValueModal'\nimport { getAssetName } from '../../modules/asset/utils'\nimport './Bid.css'\n\nconst Bid = (props: Props) => {\n const {\n bid,\n wallet,\n archivedBidIds,\n onAccept,\n onArchive,\n onUnarchive,\n onCancel,\n onUpdate,\n isArchivable,\n hasImage,\n isAcceptingBid\n } = props\n\n const isArchived = archivedBidIds.includes(bid.id)\n const isBidder = !!wallet && addressEquals(wallet.address, bid.bidder)\n const isSeller = !!wallet && addressEquals(wallet.address, bid.seller)\n\n const [showConfirmationModal, setShowConfirmationModal] = useState(false)\n const handleConfirm = useCallback(() => onAccept(bid), [bid, onAccept])\n const handleAccept = () => setShowConfirmationModal(true)\n\n return (\n <>\n <div className=\"Bid\">\n <div className=\"bid-row\">\n {hasImage ? (\n <div className=\"image\">\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={bid.contractAddress}\n tokenId={bid.tokenId}\n >\n {(nft, isLoading) => (\n <>\n {!nft && isLoading ? <Loader active /> : null}\n {nft ? (\n <Link\n to={locations.nft(bid.contractAddress, bid.tokenId)}\n >\n <AssetImage asset={nft} />{' '}\n </Link>\n ) : null}\n </>\n )}\n </AssetProvider>\n </div>\n ) : null}\n <div className=\"wrapper\">\n <div className=\"info\">\n <Stats className=\"from\" title={t('bid.from')}>\n <Link to={locations.account(bid.bidder)}>\n <Profile address={bid.bidder} />\n </Link>\n </Stats>\n <Stats className=\"price\" title={t('bid.price')}>\n <Mana network={bid.network}>{formatWeiMANA(bid.price)}</Mana>\n </Stats>\n <Stats title={t('bid.time_left')}>\n {formatDistanceToNow(+bid.expiresAt)}\n </Stats>\n </div>\n {isBidder || isSeller ? (\n <div className=\"actions\">\n {isBidder ? (\n <>\n <Button primary onClick={() => onUpdate(bid)}>\n {t('global.update')}\n </Button>\n <Button onClick={() => onCancel(bid)}>\n {t('global.cancel')}\n </Button>\n </>\n ) : null}\n {isSeller ? (\n <>\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={bid.contractAddress}\n tokenId={bid.tokenId}\n >\n {nft => (\n <AcceptButton\n nft={nft}\n bid={bid}\n onClick={handleAccept}\n />\n )}\n </AssetProvider>\n\n {isArchivable ? (\n !isArchived ? (\n <Button onClick={() => onArchive(bid)}>\n {t('my_bids_page.archive')}\n </Button>\n ) : (\n <Button onClick={() => onUnarchive(bid)}>\n {t('my_bids_page.unarchive')}\n </Button>\n )\n ) : null}\n </>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n {isBidder ? (\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={bid.contractAddress}\n tokenId={bid.tokenId}\n >\n {nft => <WarningMessage nft={nft} bid={bid} />}\n </AssetProvider>\n ) : null}\n </div>\n {showConfirmationModal ? (\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={bid.contractAddress}\n tokenId={bid.tokenId}\n >\n {nft =>\n nft && (\n <ConfirmInputValueModal\n open={showConfirmationModal}\n headerTitle={t('bid_page.confirm.title')}\n content={\n <>\n <T\n id=\"bid_page.confirm.accept_bid_line_one\"\n values={{\n name: <b>{getAssetName(nft)}</b>,\n amount: (\n <Mana network={nft.network} inline>\n {formatWeiMANA(bid.price)}\n </Mana>\n )\n }}\n />\n <br />\n <T id=\"bid_page.confirm.accept_bid_line_two\" />\n </>\n }\n onConfirm={handleConfirm}\n valueToConfirm={utils.formatEther(bid.price)}\n network={nft.network}\n onCancel={() => setShowConfirmationModal(false)}\n loading={isAcceptingBid}\n disabled={isAcceptingBid}\n />\n )\n }\n </AssetProvider>\n ) : null}\n </>\n )\n}\n\nBid.defaultProps = {\n isArchivable: true,\n hasImage: true\n}\n\nexport default React.memo(Bid)\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { getLoading } from '../../modules/bid/selectors'\nimport { RootState } from '../../modules/reducer'\nimport { getArchivedBidIds } from '../../modules/ui/nft/bid/selectors'\nimport { locations } from '../../modules/routing/locations'\nimport {\n cancelBidRequest,\n archiveBid,\n unarchiveBid,\n acceptBidRequest,\n ACCEPT_BID_REQUEST\n} from '../../modules/bid/actions'\nimport { getWallet } from '../../modules/wallet/selectors'\nimport { MapStateProps, MapDispatchProps, MapDispatch } from './Bid.types'\nimport Bid from './Bid'\n\nconst mapState = (state: RootState): MapStateProps => ({\n wallet: getWallet(state),\n archivedBidIds: getArchivedBidIds(state),\n isAcceptingBid: isLoadingType(getLoading(state), ACCEPT_BID_REQUEST)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onUpdate: bid =>\n dispatch(push(locations.bid(bid.contractAddress, bid.tokenId))),\n onCancel: bid => dispatch(cancelBidRequest(bid)),\n onArchive: bid => dispatch(archiveBid(bid)),\n onUnarchive: bid => dispatch(unarchiveBid(bid)),\n onAccept: bid => dispatch(acceptBidRequest(bid))\n})\n\nexport default connect(mapState, mapDispatch)(Bid)\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { Loader, HeaderMenu, Header, Button } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { locations } from '../../modules/routing/locations'\nimport { Bid } from '../Bid'\nimport { Props } from './Bids.types'\nimport './Bids.css'\n\nconst Bids = (props: Props) => {\n const {\n wallet,\n isConnecting,\n isLoading,\n bidderBids,\n sellerBids,\n archivedBidIds,\n onNavigate,\n onFetchBids\n } = props\n\n const [showArchived, setShowArchivedSeller] = useState(false)\n\n const handleToggleSeller = useCallback(\n () => setShowArchivedSeller(!showArchived),\n [showArchived, setShowArchivedSeller]\n )\n\n // Redirect to signIn if trying to access current account without a wallet\n useEffect(() => {\n if (!isConnecting && !wallet) {\n onNavigate(locations.signIn())\n }\n }, [isConnecting, wallet, onNavigate])\n\n useEffect(() => {\n if (wallet) {\n onFetchBids(wallet.address)\n }\n }, [wallet, onFetchBids])\n\n const archived = sellerBids.filter(bid => archivedBidIds.includes(bid.id))\n const unarchived = sellerBids.filter(bid => !archivedBidIds.includes(bid.id))\n const filteredSeller = showArchived ? archived : unarchived\n\n return (\n <div className=\"Bids\">\n {isConnecting || !wallet ? (\n <Loader size=\"massive\" active />\n ) : (\n <>\n <HeaderMenu>\n <HeaderMenu.Left>\n <Header sub>\n {t(\n showArchived\n ? 'my_bids_page.bids_archived'\n : 'my_bids_page.bids_received'\n )}\n </Header>\n </HeaderMenu.Left>\n <HeaderMenu.Right>\n {showArchived || archived.length > 0 ? (\n <Button basic onClick={handleToggleSeller}>\n {showArchived\n ? t('my_bids_page.show_received', {\n amount: unarchived.length\n })\n : t('my_bids_page.show_archived', {\n amount: archived.length\n })}\n </Button>\n ) : null}\n </HeaderMenu.Right>\n </HeaderMenu>\n <div className=\"bids\">\n {filteredSeller.length === 0 && isLoading ? (\n <div className=\"center\">\n <Loader active />\n </div>\n ) : null}\n {filteredSeller.length === 0 && !isLoading ? (\n <div className=\"center\">\n <div className=\"empty\">\n {t(\n showArchived\n ? 'my_bids_page.empty_archived'\n : 'my_bids_page.empty_received'\n )}\n </div>\n </div>\n ) : null}\n {filteredSeller.length > 0\n ? filteredSeller.map(bid => <Bid key={bid.id} bid={bid} />)\n : null}\n </div>\n <HeaderMenu>\n <HeaderMenu.Left>\n <Header sub>{t('my_bids_page.bids_placed')}</Header>\n </HeaderMenu.Left>\n </HeaderMenu>\n <div className=\"bids\">\n {bidderBids.length === 0 && isLoading ? (\n <div className=\"center\">\n <Loader active />\n </div>\n ) : null}\n {bidderBids.length === 0 && !isLoading ? (\n <div className=\"center\">\n <div className=\"empty\">{t('my_bids_page.empty_placed')}</div>\n </div>\n ) : null}\n {bidderBids.length > 0\n ? bidderBids.map(bid => <Bid key={bid.id} bid={bid} />)\n : null}\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default React.memo(Bids)\n","import { connect } from 'react-redux'\nimport { replace } from 'connected-react-router'\n\nimport { RootState } from '../../modules/reducer'\nimport { getWallet, isConnecting } from '../../modules/wallet/selectors'\nimport {\n getBidderBids,\n getSellerBids,\n getArchivedBidIds\n} from '../../modules/ui/nft/bid/selectors'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { getLoading } from '../../modules/bid/selectors'\nimport {\n fetchBidsByAddressRequest,\n FETCH_BIDS_BY_ADDRESS_REQUEST\n} from '../../modules/bid/actions'\nimport { MapStateProps, MapDispatch, MapDispatchProps } from './Bids.types'\nimport Bids from './Bids'\n\nconst mapState = (state: RootState): MapStateProps => {\n return {\n wallet: getWallet(state),\n sellerBids: getSellerBids(state),\n bidderBids: getBidderBids(state),\n archivedBidIds: getArchivedBidIds(state),\n isConnecting: isConnecting(state),\n isLoading: isLoadingType(getLoading(state), FETCH_BIDS_BY_ADDRESS_REQUEST)\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(replace(path)),\n onFetchBids: address => dispatch(fetchBidsByAddressRequest(address))\n})\n\nexport default connect(mapState, mapDispatch)(Bids)\n","import React, { ReactNode, useCallback, useEffect, useState } from 'react'\nimport { Container, Mobile, NotMobile, Page, Tabs } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { View } from '../../modules/ui/types'\nimport { Section as DecentralandSection } from '../../modules/vendor/decentraland'\nimport { AssetType } from '../../modules/asset/types'\nimport { VendorName } from '../../modules/vendor'\nimport { Section, Sections } from '../../modules/vendor/routing/types'\nimport { Atlas } from '../Atlas'\nimport { AccountSidebar } from '../AccountSidebar'\nimport { AssetList } from '../AssetList'\nimport { Row } from '../Layout/Row'\nimport { Column } from '../Layout/Column'\nimport { NFTFilters } from '../Vendor/NFTFilters'\nimport { NFTSidebar } from '../Vendor/NFTSidebar'\nimport { Props } from './AssetBrowse.types'\nimport { ToggleBox } from './ToggleBox'\nimport classNames from 'classnames'\nimport { isAccountView, isLandSection } from '../../modules/ui/utils'\nimport OnSaleList from '../OnSaleList'\nimport CollectionList from '../CollectionList'\nimport StoreSettings from '../StoreSettings'\nimport Sales from '../Sales'\nimport { Bids } from '../Bids'\nimport './AssetBrowse.css'\n\nconst hasPrimarySales = (section?: Section) => {\n switch (section) {\n case DecentralandSection.WEARABLES:\n case DecentralandSection.WEARABLES_HEAD:\n case DecentralandSection.WEARABLES_EYEBROWS:\n case DecentralandSection.WEARABLES_EYES:\n case DecentralandSection.WEARABLES_FACIAL_HAIR:\n case DecentralandSection.WEARABLES_HAIR:\n case DecentralandSection.WEARABLES_MOUTH:\n case DecentralandSection.WEARABLES_UPPER_BODY:\n case DecentralandSection.WEARABLES_LOWER_BODY:\n case DecentralandSection.WEARABLES_FEET:\n case DecentralandSection.WEARABLES_ACCESSORIES:\n case DecentralandSection.WEARABLES_EARRING:\n case DecentralandSection.WEARABLES_EYEWEAR:\n case DecentralandSection.WEARABLES_HAT:\n case DecentralandSection.WEARABLES_HELMET:\n case DecentralandSection.WEARABLES_MASK:\n case DecentralandSection.WEARABLES_TIARA:\n case DecentralandSection.WEARABLES_TOP_HEAD:\n case DecentralandSection.WEARABLES_SKIN:\n case DecentralandSection.EMOTES: {\n return true\n }\n default:\n return false\n }\n}\n\nconst AssetBrowse = (props: Props) => {\n const {\n vendor,\n view,\n isMap,\n isFullscreen,\n address,\n onSetView,\n onFetchAssetsFromRoute,\n onBrowse,\n section,\n sections,\n assetType,\n onlyOnSale,\n onlySmart,\n viewInState\n } = props\n\n // Prevent fetching more than once while browsing\n const [hasFetched, setHasFetched] = useState(false)\n\n // Kick things off\n useEffect(() => {\n onSetView(view)\n }, [onSetView, view])\n\n // When the view changes, we unset the hasFetched flag\n useEffect(() => {\n if (view !== viewInState) {\n setHasFetched(false)\n }\n }, [view, viewInState])\n\n useEffect(() => {\n if (viewInState === view && !hasFetched) {\n onFetchAssetsFromRoute({\n vendor,\n view,\n section,\n address,\n onlyOnSale,\n onlySmart\n })\n setHasFetched(true)\n }\n }, [\n view,\n vendor,\n section,\n address,\n onlyOnSale,\n onlySmart,\n viewInState,\n onFetchAssetsFromRoute,\n hasFetched\n ])\n\n // Handlers\n const handleSetFullscreen = useCallback(\n () => onBrowse({ isMap: true, isFullscreen: true }),\n [onBrowse]\n )\n\n const hanldeBrowseItems = useCallback(\n () => onBrowse({ assetType: AssetType.ITEM }),\n [onBrowse]\n )\n\n const handleBrowse = useCallback(\n () => onBrowse({ assetType: AssetType.NFT }),\n [onBrowse]\n )\n\n const toggleBoxI18nKey = isAccountView(view) ? 'account_page' : 'browse_page'\n\n const left = (\n <>\n {!isAccountView(view) && !isLandSection(section) && (\n <ToggleBox\n className=\"result-type-toggle\"\n header={t('filters.type')}\n items={[\n {\n title: t(`${toggleBoxI18nKey}.primary_market_title`),\n active: assetType === AssetType.ITEM,\n description: t(`${toggleBoxI18nKey}.primary_market_subtitle`),\n disabled:\n !hasPrimarySales(section) || vendor !== VendorName.DECENTRALAND,\n onClick: hanldeBrowseItems\n },\n {\n title: t(`${toggleBoxI18nKey}.secondary_market_title`),\n active:\n assetType === AssetType.NFT ||\n vendor !== VendorName.DECENTRALAND,\n description: t(`${toggleBoxI18nKey}.secondary_market_subtitle`),\n onClick: handleBrowse\n }\n ]}\n />\n )}\n <NotMobile>\n {view === View.ACCOUNT ? (\n <AccountSidebar address={address!} />\n ) : view === View.CURRENT_ACCOUNT ? (\n <AccountSidebar address={address!} isCurrentAccount />\n ) : (\n <NFTSidebar section={section} sections={sections} />\n )}\n </NotMobile>\n </>\n )\n\n let right: ReactNode\n\n switch (section) {\n case DecentralandSection.COLLECTIONS:\n right = <CollectionList />\n break\n case DecentralandSection.ON_SALE:\n right = <OnSaleList />\n break\n case DecentralandSection.SALES:\n right = <Sales />\n break\n case DecentralandSection.BIDS:\n right = <Bids />\n break\n case DecentralandSection.STORE_SETTINGS:\n right = <StoreSettings />\n break\n default:\n right = (\n <>\n {isMap && isFullscreen ? (\n <div className=\"blur-background\">\n <Container>\n <NFTFilters isMap={isMap} />\n </Container>\n </div>\n ) : (\n <NFTFilters isMap={Boolean(isMap)} />\n )}\n {isMap ? (\n <div className=\"Atlas\">\n <Atlas withNavigation withPopup showOnSale={onlyOnSale} />\n <div\n className=\"fullscreen-button\"\n onClick={handleSetFullscreen}\n />\n </div>\n ) : (\n <AssetList />\n )}\n </>\n )\n }\n\n const mobileSections = [\n Sections.decentraland.COLLECTIONS,\n Sections.decentraland.LAND,\n Sections.decentraland.WEARABLES,\n Sections.decentraland.EMOTES,\n Sections.decentraland.ENS,\n Sections.decentraland.ON_SALE,\n Sections.decentraland.SALES,\n Sections.decentraland.BIDS,\n Sections.decentraland.STORE_SETTINGS\n ]\n\n return (\n <>\n {view === View.CURRENT_ACCOUNT ? (\n <Mobile>\n <Tabs isFullscreen>\n <Tabs.Left>\n {mobileSections.map((value, key) => (\n <Tabs.Tab\n key={key}\n active={section === value}\n onClick={() => onBrowse({ section: value })}\n >\n {t(`menu.${value}`)}\n </Tabs.Tab>\n ))}\n </Tabs.Left>\n </Tabs>\n </Mobile>\n ) : null}\n <Page\n className={classNames('AssetBrowse', isMap && 'is-map')}\n isFullscreen={isFullscreen}\n >\n <Row>\n {!isFullscreen && (\n <Column align=\"left\" className=\"sidebar\">\n {left}\n </Column>\n )}\n <Column align=\"right\" grow={true}>\n {right}\n </Column>\n </Row>\n </Page>\n </>\n )\n}\n\nexport default React.memo(AssetBrowse)\n","import { connect } from 'react-redux'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\n\nimport { RootState } from '../../modules/reducer'\nimport { setView } from '../../modules/ui/actions'\nimport { browse, fetchAssetsFromRoute } from '../../modules/routing/actions'\nimport { FETCH_NFTS_REQUEST } from '../../modules/nft/actions'\nimport { getLoading as getLoadingNFTs } from '../../modules/nft/selectors'\nimport { getLoading as getLoadingItems } from '../../modules/item/selectors'\nimport {\n getIsMap,\n getOnlyOnSale,\n getAssetType,\n getSection,\n getOnlySmart\n} from '../../modules/routing/selectors'\nimport { getView } from '../../modules/ui/browse/selectors'\nimport { FETCH_ITEMS_REQUEST } from '../../modules/item/actions'\nimport {\n MapDispatch,\n MapDispatchProps,\n MapStateProps,\n OwnProps,\n Props\n} from './AssetBrowse.types'\nimport AssetBrowse from './AssetBrowse'\n\nconst mapState = (state: RootState): MapStateProps => ({\n isMap: getIsMap(state),\n onlyOnSale: getOnlyOnSale(state),\n section: getSection(state),\n isLoading:\n isLoadingType(getLoadingNFTs(state), FETCH_NFTS_REQUEST) ||\n isLoadingType(getLoadingItems(state), FETCH_ITEMS_REQUEST),\n assetType: getAssetType(state),\n viewInState: getView(state),\n onlySmart: getOnlySmart(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onSetView: view => dispatch(setView(view)),\n onFetchAssetsFromRoute: options => dispatch(fetchAssetsFromRoute(options)),\n onBrowse: options => dispatch(browse(options))\n})\n\nconst mergeProps = (\n stateProps: MapStateProps,\n dispatchProps: MapDispatchProps,\n ownProps: OwnProps\n): Props => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps,\n section: ownProps.section ?? stateProps.section,\n isMap: stateProps.isMap ?? ownProps.isMap\n})\n\nexport default connect(mapState, mapDispatch, mergeProps)(AssetBrowse)\n","import React from 'react'\n\nimport { isVendor } from '../../modules/vendor/utils'\nimport { VendorName } from '../../modules/vendor/types'\nimport { View } from '../../modules/ui/types'\nimport { Section } from '../../modules/vendor/decentraland'\nimport { NavigationTab } from '../Navigation/Navigation.types'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Navigation } from '../Navigation'\nimport { AssetBrowse } from '../AssetBrowse'\nimport { Props } from './BrowsePage.types'\n\nconst BrowsePage = (props: Props) => {\n const { isFullscreen, section } = props\n const vendor = isVendor(props.vendor) ? props.vendor : VendorName.DECENTRALAND\n\n const activeTab = NavigationTab.COLLECTIBLES\n\n return (\n <>\n <Navbar isFullscreen />\n <Navigation activeTab={activeTab} isFullscreen={isFullscreen} />\n <AssetBrowse\n vendor={vendor}\n isFullscreen={Boolean(isFullscreen)}\n view={View.MARKET}\n section={section}\n sections={[Section.WEARABLES, Section.EMOTES, Section.ENS]}\n />\n <Footer isFullscreen={isFullscreen} />\n </>\n )\n}\n\nexport default React.memo(BrowsePage)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../modules/reducer'\nimport {\n getIsFullscreen,\n getAssetType,\n getSection,\n getVendor\n} from '../../modules/routing/selectors'\nimport { MapStateProps } from './BrowsePage.types'\nimport BrowsePage from './BrowsePage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n vendor: getVendor(state),\n assetType: getAssetType(state),\n section: getSection(state),\n isFullscreen: getIsFullscreen(state)\n})\n\nconst mapDispatch = () => ({})\n\nexport default connect(mapState, mapDispatch)(BrowsePage)\n","import React from 'react'\n\nimport { Props } from './PageHeader.types'\nimport './PageHeader.css'\nimport classNames from 'classnames'\n\nconst PageHeader = ({ style, className, children }: Props) => (\n <div className={classNames('PageHeader', className)} style={style}>\n {children}\n </div>\n)\n\nexport default React.memo(PageHeader)\n","import { useState, useCallback, useRef } from 'react'\n\nexport const useTimer = (delay: number): [boolean, () => void] => {\n const [isRunning, setRunningStatus] = useState(false)\n const timeoutRef = useRef<NodeJS.Timeout>()\n\n const startTimer = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n setRunningStatus(true)\n timeoutRef.current = setTimeout(() => setRunningStatus(false), delay)\n }, [delay, timeoutRef])\n\n return [isRunning, startTimer]\n}\n","import React from 'react'\nimport { Button, Icon, Modal } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Props } from './ExternalLinkModal.types'\nimport './ExternalLinkModal.css'\n\nconst ExternalLinkModal = ({ link, onClose }: Props) => {\n return (\n <Modal className=\"ExternalLinkModal\" open onClose={onClose} size=\"small\">\n <Modal.Header>\n <Icon name=\"warning sign\" />\n <span>{t('external_link_modal.header')}</span>\n </Modal.Header>\n <Modal.Content>\n <p>{t('external_link_modal.before_link')}</p>\n <p className=\"bold\">{link}</p>\n <p>{t('external_link_modal.after_link')}</p>\n </Modal.Content>\n <Modal.Actions>\n <Button onClick={onClose}>{t('global.cancel')}</Button>\n <Button\n as={'a'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n primary\n href={link}\n onClick={onClose}\n >\n {t('global.proceed')}\n </Button>\n </Modal.Actions>\n </Modal>\n )\n}\n\nexport default React.memo(ExternalLinkModal)\n","import ExternalLinkModal from './ExternalLinkModal'\n\nexport default ExternalLinkModal\n","import React, { useState, useEffect } from 'react'\nimport CopyToClipboard from 'react-copy-to-clipboard'\nimport { Back, Container, Loader } from 'decentraland-ui'\nimport { Icon } from 'semantic-ui-react'\nimport classNames from 'classnames'\nimport { Profile } from 'decentraland-dapps/dist/containers'\nimport { isMobile } from 'decentraland-dapps/dist/lib/utils'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { PageHeader } from '../../PageHeader'\nimport { Column } from '../../Layout/Column'\nimport { Props } from './AccountBanner.types'\nimport { useTimer } from '../../../lib/timer'\nimport { getIsValidLink } from '../../../modules/store/utils'\nimport { LinkType } from '../../../modules/store/types'\nimport { shortenAddress } from '../../../modules/wallet/utils'\nimport ExternalLinkModal from '../../ExternalLinkModal'\nimport './AccountBanner.css'\n\nconst AccountBanner = ({\n address,\n store,\n isLoading,\n onBack,\n onFetchStore\n}: Props) => {\n const [hasCopiedAddress, setHasCopiedAddress] = useTimer(1200)\n const [openExternalLinkModal, setOpenExternalLinkModal] = useState<string>()\n\n useEffect(() => {\n onFetchStore(address)\n }, [onFetchStore, address])\n\n const renderLink = (type: LinkType) =>\n store?.[type] &&\n getIsValidLink(type, store[type]) && (\n <div\n className={classNames('icon', type)}\n onClick={() => setOpenExternalLinkModal(store[type])}\n />\n )\n\n return (\n <>\n <PageHeader className=\"AccountBanner\">\n {isLoading ? (\n <Loader size=\"massive\" active />\n ) : (\n <>\n {store?.cover && (\n <img className=\"cover\" src={store.cover} alt=\"cover\" />\n )}\n <Container>\n <div className=\"cover-top\">\n <Back onClick={onBack} />\n <div className=\"icons\">\n {renderLink(LinkType.WEBSITE)}\n {renderLink(LinkType.FACEBOOK)}\n {renderLink(LinkType.TWITTER)}\n {renderLink(LinkType.DISCORD)}\n </div>\n </div>\n </Container>\n <Column>\n <Profile address={address} imageOnly inline={false} size=\"huge\" />\n <div className=\"profile-name\">\n <Profile address={address} textOnly inline={false} />\n </div>\n <div className=\"profile-address\">\n <div className=\"profile-address-hash\">\n {shortenAddress(address)}\n </div>\n {!isMobile() && (\n <div>\n <CopyToClipboard\n text={address}\n onCopy={setHasCopiedAddress}\n >\n <Icon\n aria-label=\"Copy address\"\n aria-hidden=\"false\"\n className=\"copy\"\n name=\"copy outline\"\n />\n </CopyToClipboard>\n {hasCopiedAddress && (\n <span className=\"profile-copied-text-desktop copied\">\n {t('account_page.copied')}\n </span>\n )}\n </div>\n )}\n </div>\n {isMobile() && (\n <div className=\"profile-copy-text-mobile\">\n <CopyToClipboard text={address} onCopy={setHasCopiedAddress}>\n {hasCopiedAddress ? (\n <span className=\"copied\">\n {t('account_page.copied_capitalized')}\n </span>\n ) : (\n <span className=\"copy\">\n {t('account_page.copy_address')}\n </span>\n )}\n </CopyToClipboard>\n </div>\n )}\n {store?.description && (\n <div className=\"description\">{store.description}</div>\n )}\n </Column>\n </>\n )}\n </PageHeader>\n {openExternalLinkModal && (\n <ExternalLinkModal\n link={openExternalLinkModal}\n onClose={() => setOpenExternalLinkModal(undefined)}\n />\n )}\n </>\n )\n}\n\nexport default React.memo(AccountBanner)\n","import AccountBanner from './AccountBanner.container'\n\nexport default AccountBanner\n","import { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { connect } from 'react-redux'\nimport { Dispatch } from 'redux'\nimport { getAddress as getAddressFromUrl } from '../../../modules/account/selectors'\nimport { RootState } from '../../../modules/reducer'\nimport { goBack } from '../../../modules/routing/actions'\nimport { getViewAsGuest } from '../../../modules/routing/selectors'\nimport {\n fetchStoreRequest,\n FETCH_STORE_REQUEST\n} from '../../../modules/store/actions'\nimport {\n getStoresByOwner,\n getLocalStore,\n getLoading as getStoreLoading\n} from '../../../modules/store/selectors'\nimport { Store } from '../../../modules/store/types'\nimport { getAddress as getAddressFromWallet } from '../../../modules/wallet/selectors'\nimport AccountBanner from './AccountBanner'\nimport { MapStateProps, MapDispatchProps } from './AccountBanner.types'\n\nconst mapState = (state: RootState): MapStateProps => {\n const viewAsGuest = getViewAsGuest(state)\n const address = getAddressFromUrl(state) || getAddressFromWallet(state)\n const isLoading = isLoadingType(getStoreLoading(state), FETCH_STORE_REQUEST)\n\n let store: Store | undefined = address\n ? getStoresByOwner(state)[address]\n : undefined\n\n if (viewAsGuest) {\n store = getLocalStore(state) || store\n }\n\n return {\n store,\n isLoading\n }\n}\n\nconst mapDispatch = (dispatch: Dispatch): MapDispatchProps => {\n return {\n onBack: () => dispatch(goBack()),\n onFetchStore: (address: string) => dispatch(fetchStoreRequest(address))\n }\n}\n\nexport default connect(mapState, mapDispatch)(AccountBanner)\n","import React, { useEffect } from 'react'\nimport { Page, Loader, Center } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { AddressProvider } from 'decentraland-dapps/dist/containers/AddressProvider'\nimport { View } from '../../modules/ui/types'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { AssetBrowse } from '../AssetBrowse'\nimport { Navigation } from '../Navigation'\nimport { NavigationTab } from '../Navigation/Navigation.types'\nimport { locations } from '../../modules/routing/locations'\nimport { Props } from './AccountPage.types'\nimport AccountBanner from './AccountBanner'\nimport './AccountPage.css'\n\nconst AccountPage = ({\n addressInUrl,\n vendor,\n wallet,\n isConnecting,\n isFullscreen,\n viewAsGuest,\n onRedirect\n}: Props) => {\n const isCurrentAccount =\n (!addressInUrl || wallet?.address === addressInUrl) && !viewAsGuest\n\n // Redirect to signIn if trying to access current account without a wallet\n useEffect(() => {\n if (!addressInUrl && !isConnecting && !wallet) {\n onRedirect(locations.signIn())\n }\n }, [addressInUrl, isConnecting, wallet, onRedirect])\n\n return (\n <div className=\"AccountPage\">\n <Navbar isFullscreen />\n <Navigation\n isFullscreen={!isCurrentAccount || isFullscreen}\n activeTab={isCurrentAccount ? NavigationTab.MY_STORE : undefined}\n />\n <AddressProvider input={addressInUrl || wallet?.address || ''}>\n {({ address, isLoading, error }) => (\n <>\n {isLoading || isConnecting ? (\n <Page>\n <Loader size=\"massive\" active />\n </Page>\n ) : error ? (\n <Page>\n <Center>\n <p className=\"secondary-text\">{t(`address.${error}`)}</p>\n </Center>\n </Page>\n ) : address ? (\n <>\n {!isCurrentAccount ? <AccountBanner address={address} /> : null}\n <AssetBrowse\n vendor={vendor}\n address={address}\n view={isCurrentAccount ? View.CURRENT_ACCOUNT : View.ACCOUNT}\n isFullscreen={Boolean(isFullscreen)}\n />\n </>\n ) : null}\n </>\n )}\n </AddressProvider>\n <Footer isFullscreen={isFullscreen} />\n </div>\n )\n}\n\nexport default React.memo(AccountPage)\n","import { connect } from 'react-redux'\nimport { replace } from 'connected-react-router'\n\nimport { RootState } from '../../modules/reducer'\nimport {\n getIsFullscreen,\n getVendor,\n getViewAsGuest\n} from '../../modules/routing/selectors'\nimport { getWallet, isConnecting } from '../../modules/wallet/selectors'\nimport {\n MapStateProps,\n MapDispatch,\n MapDispatchProps,\n OwnProps\n} from './AccountPage.types'\nimport AccountPage from './AccountPage'\n\nconst mapState = (state: RootState, ownProps: OwnProps): MapStateProps => {\n const { address } = ownProps.match.params\n\n return {\n addressInUrl: address?.toLowerCase(),\n vendor: getVendor(state),\n wallet: getWallet(state),\n isConnecting: isConnecting(state),\n isFullscreen: getIsFullscreen(state),\n viewAsGuest: getViewAsGuest(state)\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onRedirect: path => dispatch(replace(path))\n})\n\nexport default connect(mapState, mapDispatch)(AccountPage)\n","import React from 'react'\nimport { default as SignIn } from 'decentraland-dapps/dist/containers/SignInPage'\nimport { Page } from 'decentraland-ui'\n\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport './SignInPage.css'\n\nconst SignInPage = () => {\n return (\n <>\n <Navbar isFullscreen />\n <Page className=\"SignInPage\" isFullscreen>\n <SignIn />\n </Page>\n <Footer isFullscreen />\n </>\n )\n}\n\nexport default React.memo(SignInPage)\n","import {\n GrantTokenRequestAction,\n RevokeTokenRequestAction\n} from 'decentraland-dapps/dist/modules/authorization/actions'\nimport { Transaction } from 'decentraland-dapps/dist/modules/transaction/types'\n\nexport function hasTransactionPending(\n transactions: Transaction[],\n authorizedAddress: string,\n contractAddress: string\n) {\n return transactions.some((transaction: any) => {\n const { authorization } = transaction.payload as\n | GrantTokenRequestAction['payload']\n | RevokeTokenRequestAction['payload']\n return (\n authorization.authorizedAddress.toLowerCase() ===\n authorizedAddress.toLowerCase() &&\n authorization.contractAddress.toLowerCase() ===\n contractAddress.toLowerCase()\n )\n })\n}\n\n// TODO: This is a replacement for future `ErrorCode`s. Needs an overhaul on decentraland-dapps\nexport function isUserCanceled(error: string) {\n return error.search(/User canceled/) !== -1\n}\n\nexport function isUserDeniedSignatureError(error: string) {\n return (\n error.search(\n /User (denied|rejected the) (transaction|message)( signature)?/\n ) !== -1\n )\n}\n\n// TODO: This is a replacement for future `ErrorCode`s. Needs an overhaul on decentraland-dapps\nexport function isContractAccountError(error: string) {\n return error.search('Contract accounts are not supported') !== -1\n}\n","import { Authorization } from 'decentraland-dapps/dist/modules/authorization/types'\n\nexport function isAuthorized(\n authorization: Authorization,\n authorizations: Authorization[]\n) {\n return authorizations.some(\n a =>\n a.address.toLocaleLowerCase() === authorization.address.toLowerCase() &&\n a.authorizedAddress.toLowerCase() ===\n authorization.authorizedAddress.toLowerCase() &&\n a.contractAddress.toLowerCase() ===\n authorization.contractAddress.toLowerCase() &&\n a.chainId === authorization.chainId &&\n a.type === authorization.type\n )\n}\n","import React, { useCallback } from 'react'\nimport { Link } from 'react-router-dom'\nimport { t, T } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { ChainCheck, TransactionLink } from 'decentraland-dapps/dist/containers'\nimport { getChainConfiguration } from 'decentraland-dapps/dist/lib/chainConfiguration'\nimport { Form, Radio, Loader, Popup, RadioProps } from 'decentraland-ui'\nimport { locations } from '../../../modules/routing/locations'\nimport { getContract } from '../../../modules/contract/utils'\nimport { isAuthorized } from './utils'\nimport { Props } from './Authorization.types'\nimport './Authorization.css'\n\nconst Authorization = (props: Props) => {\n const { authorization, authorizations, isLoading, onGrant, onRevoke } = props\n\n const handleOnChange = useCallback(\n (isChecked: boolean) =>\n isChecked ? onGrant(authorization) : onRevoke(authorization),\n [authorization, onGrant, onRevoke]\n )\n\n const { contractAddress, authorizedAddress } = authorization\n\n const contract = getContract({ address: authorizedAddress })\n const token = getContract({ address: contractAddress })\n\n const { network } = getChainConfiguration(token.chainId)\n\n return (\n <div className=\"Authorization\">\n <Form.Field\n key={contractAddress}\n className={isLoading ? 'is-pending' : ''}\n >\n <Popup\n content={t('settings_page.pending_tx')}\n position=\"top left\"\n trigger={\n <Link to={locations.activity()} className=\"loader-tooltip\">\n <Loader active size=\"mini\" />\n </Link>\n }\n />\n <ChainCheck chainId={authorization.chainId}>\n {isEnabled => (\n <Radio\n checked={isAuthorized(authorization, authorizations)}\n label={token.name}\n disabled={!isEnabled}\n onClick={(_, props: RadioProps) =>\n handleOnChange(!!props.checked)\n }\n />\n )}\n </ChainCheck>\n <div className=\"radio-description secondary-text\">\n <T\n id=\"authorization.authorize\"\n values={{\n contract_link: (\n <TransactionLink\n address={authorizedAddress}\n txHash=\"\"\n chainId={authorization.chainId}\n >\n {contract.label || contract.name}\n </TransactionLink>\n ),\n symbol: token.name,\n network: t(`networks.${network.toLowerCase()}`)\n }}\n />\n </div>\n </Form.Field>\n </div>\n )\n}\n\nexport default React.memo(Authorization)\n","import { connect } from 'react-redux'\nimport {\n getData as getAuthorizations,\n getLoading\n} from 'decentraland-dapps/dist/modules/authorization/selectors'\nimport {\n GrantTokenRequestAction,\n GRANT_TOKEN_REQUEST,\n RevokeTokenRequestAction,\n REVOKE_TOKEN_REQUEST,\n grantTokenRequest,\n revokeTokenRequest\n} from 'decentraland-dapps/dist/modules/authorization/actions'\nimport { areEqual } from 'decentraland-dapps/dist/modules/authorization/utils'\nimport { hasTransactionPending } from '../../../modules/transaction/utils'\nimport { RootState } from '../../../modules/reducer'\nimport { getPendingAuthorizationTransactions } from '../../../modules/transaction/selectors'\nimport {\n OwnProps,\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './Authorization.types'\nimport Authorization from './Authorization'\n\nconst mapState = (\n state: RootState,\n { authorization }: OwnProps\n): MapStateProps => {\n const { contractAddress, authorizedAddress } = authorization\n\n const authorizations = getAuthorizations(state)\n const pendingTransactions = getPendingAuthorizationTransactions(state)\n\n const isLoading = getLoading(state).some(action => {\n if (\n action.type === GRANT_TOKEN_REQUEST ||\n action.type === REVOKE_TOKEN_REQUEST\n ) {\n const { payload } = action as\n | GrantTokenRequestAction\n | RevokeTokenRequestAction\n return areEqual(authorization, payload.authorization)\n }\n return false\n })\n\n return {\n authorizations,\n pendingTransactions,\n isLoading:\n isLoading ||\n hasTransactionPending(\n pendingTransactions,\n authorizedAddress,\n contractAddress\n )\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onGrant: authorization => dispatch(grantTokenRequest(authorization)),\n onRevoke: authorization => dispatch(revokeTokenRequest(authorization))\n})\n\nexport default connect(mapState, mapDispatch)(Authorization)\n","import React, { useEffect } from 'react'\nimport CopyToClipboard from 'react-copy-to-clipboard'\nimport { Network } from '@dcl/schemas'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Footer } from 'decentraland-dapps/dist/containers'\nimport { isMobile } from 'decentraland-dapps/dist/lib/utils'\nimport { AuthorizationType } from 'decentraland-dapps/dist/modules/authorization/types'\nimport { Page, Grid, Blockie, Loader, Form } from 'decentraland-ui'\nimport { ContractName } from 'decentraland-transactions'\n\nimport { locations } from '../../modules/routing/locations'\nimport { shortenAddress } from '../../modules/wallet/utils'\nimport { Navbar } from '../Navbar'\nimport { Navigation } from '../Navigation'\nimport { Authorization } from './Authorization'\nimport { getContractNames } from '../../modules/vendor'\nimport { getContract } from '../../modules/contract/utils'\nimport { useTimer } from '../../lib/timer'\nimport { Props } from './SettingsPage.types'\nimport './SettingsPage.css'\n\nconst SettingsPage = (props: Props) => {\n const {\n wallet,\n authorizations,\n isLoadingAuthorization,\n isConnecting,\n hasError,\n onNavigate\n } = props\n\n const [hasCopiedText, setHasCopiedAddress] = useTimer(1200)\n\n useEffect(() => {\n if (!isConnecting && !wallet) {\n onNavigate(locations.signIn())\n }\n }, [isConnecting, wallet, onNavigate])\n\n const contractNames = getContractNames()\n\n const marketplaceEthereum = getContract({\n name: contractNames.MARKETPLACE,\n network: Network.ETHEREUM\n })\n\n const marketplaceMatic = getContract({\n name: contractNames.MARKETPLACE,\n network: Network.MATIC\n })\n\n const marketplaceAdapter = getContract({\n name: contractNames.MARKETPLACE_ADAPTER\n })\n\n const bids = getContract({\n name: contractNames.BIDS\n })\n\n const manaEthereum = getContract({\n name: contractNames.MANA,\n network: Network.ETHEREUM\n })\n\n const manaMatic = getContract({\n name: contractNames.MANA,\n network: Network.MATIC\n })\n\n const authorizationsForSelling = authorizations.filter(authorization => {\n const contract = getContract({ address: authorization.contractAddress })\n return contract.category != null\n })\n\n return (\n <>\n <Navbar isFullscreen />\n <Navigation />\n <Page className=\"SettingsPage\">\n {isConnecting ? (\n <Loader size=\"massive\" active />\n ) : wallet ? (\n <Grid>\n <Grid.Row>\n <Grid.Column\n className=\"left-column secondary-text\"\n computer={4}\n mobile={16}\n >\n {t('global.address')}\n </Grid.Column>\n <Grid.Column computer={12} mobile={16}>\n <div className=\"blockie-container\">\n <Blockie seed={wallet.address} scale={12} />\n </div>\n <div className=\"address-container\">\n <div className=\"address\">\n {isMobile()\n ? shortenAddress(wallet.address)\n : wallet.address}\n </div>\n <CopyToClipboard\n text={wallet.address}\n onCopy={setHasCopiedAddress}\n >\n {hasCopiedText ? (\n <span className=\"copy-text\">\n {t('settings_page.copied')}\n </span>\n ) : (\n <span className=\"copy-text link\">\n {t('settings_page.copy_address')}\n </span>\n )}\n </CopyToClipboard>\n </div>\n </Grid.Column>\n </Grid.Row>\n <Grid.Row>\n <Grid.Column\n className=\"left-column secondary-text\"\n computer={4}\n mobile={16}\n >\n {t('settings_page.authorizations')}\n </Grid.Column>\n <Grid.Column computer={12} mobile={16}>\n {isLoadingAuthorization ? (\n <Loader size=\"massive\" active />\n ) : (\n <div className=\"authorization-checks-container\">\n {hasError ? (\n <div className=\"authorization-checks\">\n <p className=\"danger-text\">\n {t('settings_page.authorization_error')}\n <br />\n {t('settings_page.authorization_error_contact')}\n </p>\n </div>\n ) : (\n <Form>\n <div className=\"authorization-checks\">\n <label className=\"secondary-text\">\n {t('settings_page.for_buying')}\n </label>\n <Authorization\n authorization={{\n address: wallet.address,\n authorizedAddress: marketplaceEthereum.address,\n contractAddress: manaEthereum.address,\n contractName: ContractName.MANAToken,\n chainId: manaEthereum.chainId,\n type: AuthorizationType.ALLOWANCE\n }}\n />\n <Authorization\n authorization={{\n address: wallet.address,\n authorizedAddress: marketplaceAdapter.address,\n contractAddress: manaEthereum.address,\n contractName: ContractName.MANAToken,\n chainId: manaEthereum.chainId,\n type: AuthorizationType.ALLOWANCE\n }}\n />\n <Authorization\n authorization={{\n address: wallet.address,\n authorizedAddress: marketplaceMatic.address,\n contractAddress: manaMatic.address,\n contractName: ContractName.MANAToken,\n chainId: manaMatic.chainId,\n type: AuthorizationType.ALLOWANCE\n }}\n />\n </div>\n\n <div className=\"authorization-checks\">\n <label className=\"secondary-text\">\n {t('settings_page.for_bidding')}\n </label>\n <Authorization\n authorization={{\n address: wallet.address,\n authorizedAddress: bids.address,\n contractAddress: manaEthereum.address,\n contractName: ContractName.MANAToken,\n chainId: manaEthereum.chainId,\n type: AuthorizationType.ALLOWANCE\n }}\n />\n </div>\n\n {authorizationsForSelling.length > 0 ? (\n <div className=\"authorization-checks\">\n <label className=\"secondary-text\">\n {t('settings_page.for_selling')}\n </label>\n\n {authorizationsForSelling.map(authorization => {\n return (\n <Authorization\n key={\n authorization.authorizedAddress +\n authorization.contractAddress\n }\n authorization={authorization}\n />\n )\n })}\n </div>\n ) : null}\n </Form>\n )}\n </div>\n )}\n </Grid.Column>\n </Grid.Row>\n </Grid>\n ) : null}\n </Page>\n <Footer />\n </>\n )\n}\n\nexport default React.memo(SettingsPage)\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport {\n getData as getAuthorizations,\n getLoading,\n getError\n} from 'decentraland-dapps/dist/modules/authorization/selectors'\nimport { FETCH_AUTHORIZATIONS_REQUEST } from 'decentraland-dapps/dist/modules/authorization/actions'\n\nimport { RootState } from '../../modules/reducer'\nimport {\n isUserCanceled,\n isUserDeniedSignatureError,\n isContractAccountError\n} from '../../modules/transaction/utils'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { getWallet, isConnecting } from '../../modules/wallet/selectors'\nimport {\n MapStateProps,\n MapDispatch,\n MapDispatchProps\n} from './SettingsPage.types'\nimport SettingsPage from './SettingsPage'\n\nconst mapState = (state: RootState): MapStateProps => {\n const wallet = getWallet(state)\n\n const error = getError(state)\n\n // TODO: Change this to use ErrorCodes. Needs an overhaul on decentraland-dapps\n const hasError =\n !!error &&\n !isUserCanceled(error) &&\n !isUserDeniedSignatureError(error) &&\n !isContractAccountError(error)\n\n return {\n wallet,\n authorizations: getAuthorizations(state),\n isLoadingAuthorization: isLoadingType(\n getLoading(state),\n FETCH_AUTHORIZATIONS_REQUEST\n ),\n isConnecting: isConnecting(state),\n hasError\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path))\n})\n\nexport default connect(mapState, mapDispatch)(SettingsPage)\n","import React from 'react'\nimport { Loader } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { AssetProvider } from '../AssetProvider'\nimport { Props } from './AssetProviderPage.types'\nimport styles from './AssetProviderPage.module.css'\n\nconst Loading = () => (\n <div className={styles.center}>\n <Loader active size=\"huge\" />\n </div>\n)\n\n// Exporting to reuse in the BuyPage as a quick fix\nexport const NotFound = () => (\n <div className={styles.center}>\n <p className=\"secondary-text\">{t('global.not_found')}&hellip;</p>\n </div>\n)\n\nconst AssetProviderPage = (props: Props) => {\n const { type, isConnecting, children } = props\n return (\n <AssetProvider type={type}>\n {(asset, order, isAssetLoading) => {\n const isLoading = isConnecting || isAssetLoading\n\n return (\n <>\n {isLoading ? <Loading /> : null}\n {!isLoading && !asset ? <NotFound /> : null}\n {!isLoading && asset ? children(asset, order) : null}\n </>\n )\n }}\n </AssetProvider>\n )\n}\n\nexport default React.memo(AssetProviderPage)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../modules/reducer'\nimport { AssetType } from '../../modules/asset/types'\nimport { isConnecting } from '../../modules/wallet/selectors'\nimport { MapStateProps, OwnProps } from './AssetProviderPage.types'\nimport AssetProviderPage from './AssetProviderPage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n isConnecting: isConnecting(state)\n})\n\nconst mapDispatch = () => ({})\n\nexport default connect(mapState, mapDispatch)(AssetProviderPage) as <\n T extends AssetType = AssetType\n>(\n props: OwnProps<T>\n) => JSX.Element\n","import React from 'react'\nimport { Stats } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { Props } from './Network.types'\n\nconst Network = (props: Props) => {\n const { asset } = props\n\n return (\n <Stats title={t('global.network')}>\n {t(`networks.${asset.network.toLowerCase()}`)}\n </Stats>\n )\n}\n\nexport default React.memo(Network)\n","import React from 'react'\nimport { Header } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Props } from './Description.types'\nimport './Description.css'\n\nconst Description = (props: Props) => {\n return props.text ? (\n <div className=\"Description\">\n <Header sub>{t('asset_page.description')}</Header>\n <div className=\"description-text\">{props.text}</div>\n </div>\n ) : null\n}\n\nexport default React.memo(Description)\n","import React, { useMemo, useEffect } from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { getSearchWearableSection } from '../../../modules/routing/search'\nimport { locations } from '../../../modules/routing/locations'\nimport IconBadge from '../IconBadge'\nimport { BrowseOptions } from '../../../modules/routing/types'\nimport { Props } from './CategoryBadge.types'\n\nconst CategoryBadge = ({ wearable, assetType }: Props) => {\n const section = getSearchWearableSection(wearable.category)\n\n const href = useMemo(() => {\n const browseProps: BrowseOptions = { assetType: assetType }\n if (section) {\n browseProps.section = section\n }\n\n return locations.browse(browseProps)\n }, [assetType, section])\n\n // TODO: we have to handle these types of errors and report them somewhere\n useEffect(() => {\n if (!section) {\n throw new Error(`Invalid wearable category ${wearable.category}`)\n }\n }, [section, wearable.category])\n\n return (\n <IconBadge\n icon={wearable.category}\n text={t(`wearable.category.${wearable.category}`)}\n href={href}\n />\n )\n}\n\nexport default React.memo(CategoryBadge)\n","import CategoryBadge from './CategoryBadge'\n\nexport default CategoryBadge\n","import React, { useMemo } from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { SmartIcon } from 'decentraland-ui'\nimport { Section } from '../../../modules/vendor/decentraland'\nimport { locations } from '../../../modules/routing/locations'\nimport IconBadge from '../IconBadge'\nimport { Props } from './SmartBadge.types'\nimport './SmartBadge.css'\n\nconst SmartBadge = ({ assetType }: Props) => {\n const href = useMemo(\n () =>\n locations.browse({\n assetType: assetType,\n section: Section.WEARABLES,\n onlySmart: true\n }),\n [assetType]\n )\n\n return (\n <IconBadge\n className=\"SmartBadge\"\n text={t('wearable.smart_badge')}\n href={href}\n >\n <SmartIcon />\n </IconBadge>\n )\n}\n\nexport default React.memo(SmartBadge)\n","import SmartBadge from './SmartBadge'\n\nexport default SmartBadge\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Profile } from 'decentraland-dapps/dist/containers'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Stats } from 'decentraland-ui'\nimport { locations } from '../../../modules/routing/locations'\nimport { BrowseOptions } from '../../../modules/routing/types'\nimport { Section } from '../../../modules/vendor/decentraland'\nimport { AssetType } from '../../../modules/asset/types'\nimport { Props } from './Owner.types'\n\nimport './Owner.css'\n\nconst Owner = (props: Props) => {\n const { asset } = props\n\n let label: string\n let address: string\n let browseOptions: BrowseOptions = {}\n\n if ('owner' in asset) {\n label = t('asset_page.owner')\n address = asset.owner\n browseOptions = {\n assetType: AssetType.NFT,\n vendor: asset.vendor,\n section: Section.ALL\n }\n } else {\n label = t('asset_page.creator')\n address = asset.creator\n browseOptions = {\n assetType: AssetType.ITEM,\n section: Section.WEARABLES\n }\n }\n\n return (\n <Stats title={label}>\n <Link to={locations.account(address, browseOptions)}>\n <div className=\"Owner\">\n <Profile size=\"huge\" address={address} />\n </div>\n </Link>\n </Stats>\n )\n}\n\nexport default React.memo(Owner)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { locations } from '../../../modules/routing/locations'\nimport { Props } from './Collection.types'\nimport CollectionImage from '../../CollectionImage'\nimport { Stats } from 'decentraland-ui'\nimport CollectionProvider from '../../CollectionProvider'\nimport styles from './Collection.module.css'\n\nconst Collection = (props: Props) => {\n const { asset } = props\n\n return (\n <CollectionProvider contractAddress={asset.contractAddress}>\n {({ collection, isLoading }) => {\n if (isLoading || !collection) {\n return null\n }\n\n return (\n <Stats title={t('global.collection')}>\n <Link to={locations.collection(asset.contractAddress)}>\n <div className={styles.container}>\n <div className={styles.image}>\n <CollectionImage contractAddress={asset.contractAddress} />\n </div>\n <span className={styles.name}>{collection.name}</span>\n </div>\n </Link>\n </Stats>\n )\n }}\n </CollectionProvider>\n )\n}\n\nexport default React.memo(Collection)\n","import Collection from './Collection'\n\nexport default Collection\n","import React from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Mana, Stats } from 'decentraland-ui'\nimport { formatWeiMANA } from '../../../lib/mana'\nimport { Props } from './Price.types'\n\nconst Price = ({ asset, price }: Props) => {\n if (!price) {\n return null\n }\n\n return (\n <Stats title={t('asset_page.price')}>\n <Mana network={asset.network} withTooltip>\n {formatWeiMANA(price)}\n </Mana>\n </Stats>\n )\n}\n\nexport default React.memo(Price)\n","import Price from './Price.container'\n\nexport default Price\n","import { connect } from 'react-redux'\nimport { MapStateProps, OwnProps } from './Price.types'\nimport Price from './Price'\nimport { RootState } from '../../../modules/reducer'\nimport { getCurrentOrder } from '../../../modules/order/selectors'\nimport { Item } from '@dcl/schemas'\n\nconst mapState = (state: RootState, { asset }: OwnProps): MapStateProps => {\n let price: string | undefined\n\n if ('price' in asset) {\n price = (asset as Item).price\n }\n\n if ('activeOrderId' in asset) {\n price = getCurrentOrder(state)?.price\n }\n\n return {\n price\n }\n}\n\nexport default connect(mapState)(Price)\n","import React from 'react'\nimport { getAssetName } from '../../../modules/asset/utils'\nimport { Props } from './Title.types'\nimport styles from './Title.module.css'\n\nconst Title = ({ asset }: Props) => {\n return <div className={styles.title}>{getAssetName(asset)}</div>\n}\n\nexport default React.memo(Title)\n","import Title from './Title'\n\nexport default Title\n","import React from 'react'\nimport classNames from 'classnames'\nimport { Container } from 'decentraland-ui'\nimport { PageHeader } from '../../PageHeader'\nimport Title from '../Title'\nimport { Box } from '../../AssetBrowse/Box'\nimport { Props } from './BaseDetail.types'\nimport './BaseDetail.css'\n\nconst BaseDetail = ({\n asset,\n assetImage,\n badges,\n left,\n box,\n below,\n className\n}: Props) => {\n return (\n <div className={classNames('BaseDetail', className)}>\n <PageHeader>{assetImage}</PageHeader>\n <Container>\n <div className=\"info\">\n <div className=\"left\">\n <div>\n <Title asset={asset} />\n <div className=\"badges\">{badges}</div>\n </div>\n {left}\n </div>\n <div className=\"right\">\n <Box className=\"box\" childrenClassName=\"box-children\">\n {box}\n </Box>\n </div>\n </div>\n {below}\n </Container>\n </div>\n )\n}\n\nexport default React.memo(BaseDetail)\n","import BaseDetail from './BaseDetail'\n\nexport default BaseDetail\n","import { config } from '../../config'\n\nexport const getBuilderCollectionDetailUrl = (contractAddress: string) =>\n `${config.get('BUILDER_URL')}?redirectTo=${encodeURIComponent(\n JSON.stringify({\n type: 'COLLECTION_DETAIL_BY_CONTRACT_ADDRESS',\n data: { contractAddress }\n })\n )}`\n","import { Link } from 'react-router-dom'\nimport React, { useState, useEffect } from 'react'\nimport { Sale } from '@dcl/schemas'\nimport {\n Header,\n Table,\n Mobile,\n NotMobile,\n Pagination,\n Loader,\n Row\n} from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Profile } from 'decentraland-dapps/dist/containers'\nimport dateFnsFormat from 'date-fns/format'\n\nimport { Mana } from '../../Mana'\nimport { locations } from '../../../modules/routing/locations'\nimport { saleAPI } from '../../../modules/vendor/decentraland'\nimport { formatDistanceToNow } from '../../../lib/date'\nimport { formatWeiMANA } from '../../../lib/mana'\nimport { Props } from './TransactionHistory.types'\nimport './TransactionHistory.css'\n\nconst INPUT_FORMAT = 'PPP'\nconst WEEK_IN_MILLISECONDS = 7 * 24 * 60 * 60 * 1000\nconst ROWS_PER_PAGE = 12\n\nconst formatEventDate = (updatedAt: number) => {\n const newUpdatedAt = new Date(updatedAt)\n return Date.now() - newUpdatedAt.getTime() > WEEK_IN_MILLISECONDS\n ? dateFnsFormat(newUpdatedAt, INPUT_FORMAT)\n : formatDistanceToNow(newUpdatedAt, { addSuffix: true })\n}\n\nconst formatDateTitle = (updatedAt: number) => {\n return new Date(updatedAt).toLocaleString()\n}\n\nconst TransactionHistory = (props: Props) => {\n const { asset } = props\n\n const [sales, setSales] = useState([] as Sale[])\n const [page, setPage] = useState(1)\n const [totalPages, setTotalPages] = useState(1)\n const [isLoading, setIsLoading] = useState(false)\n\n // We're doing this outside of redux to avoid having to store all orders when we only care about the last open one\n useEffect(() => {\n if (asset) {\n setIsLoading(true)\n let params: Record<string, string | number> = {\n contractAddress: asset.contractAddress,\n first: ROWS_PER_PAGE,\n skip: (page - 1) * ROWS_PER_PAGE\n }\n if ('tokenId' in asset) {\n params.tokenId = asset.tokenId\n } else {\n params.itemId = asset.itemId\n }\n saleAPI\n .fetch(params)\n .then(response => {\n setSales(response.data)\n setTotalPages((response.total / ROWS_PER_PAGE) | 0)\n })\n .finally(() => setIsLoading(false))\n .catch(error => {\n console.error(error)\n })\n }\n }, [asset, setIsLoading, setSales, page])\n\n const network = asset ? asset.network : undefined\n\n return (\n <div className=\"TransactionHistory\">\n {isLoading && sales.length === 0 ? null : sales.length > 0 ? (\n <>\n <Header sub>{t('transaction_history.title')}</Header>\n <NotMobile>\n <Table basic=\"very\">\n <Table.Header>\n <Table.Row>\n <Table.HeaderCell>\n {t('transaction_history.from')}\n </Table.HeaderCell>\n <Table.HeaderCell>\n {t('transaction_history.to')}\n </Table.HeaderCell>\n <Table.HeaderCell>\n {t('transaction_history.type')}\n </Table.HeaderCell>\n <Table.HeaderCell>\n {t('transaction_history.when')}\n </Table.HeaderCell>\n <Table.HeaderCell>\n {t('transaction_history.price')}\n </Table.HeaderCell>\n </Table.Row>\n </Table.Header>\n\n <Table.Body className={isLoading ? 'is-loading' : ''}>\n {sales.map(sale => (\n <Table.Row key={sale.id}>\n <Table.Cell>\n <Link to={locations.account(sale.seller)}>\n <Profile address={sale.seller} />\n </Link>\n </Table.Cell>\n <Table.Cell>\n <Link to={locations.account(sale.buyer)}>\n <Profile address={sale.buyer} />\n </Link>\n </Table.Cell>\n <Table.Cell>{t(`global.${sale.type}`)}</Table.Cell>\n <Table.Cell title={formatDateTitle(sale.timestamp)}>\n {formatEventDate(sale.timestamp)}\n </Table.Cell>\n <Table.Cell>\n <Mana network={network} inline>\n {formatWeiMANA(sale.price)}\n </Mana>\n </Table.Cell>\n </Table.Row>\n ))}\n {isLoading ? <Loader active /> : null}\n </Table.Body>\n </Table>\n </NotMobile>\n <Mobile>\n <div className=\"mobile-tx-history\">\n {sales.map(sale => (\n <div className=\"mobile-tx-history-row\" key={sale.id}>\n <div className=\"price\">\n <Mana network={network} inline>\n {formatWeiMANA(sale.price)}\n </Mana>\n </div>\n <div className=\"when\">{formatEventDate(sale.timestamp)}</div>\n </div>\n ))}\n </div>\n </Mobile>\n {totalPages > 1 ? (\n <Row center>\n <Pagination\n activePage={page}\n totalPages={totalPages}\n onPageChange={(_event, props) => setPage(+props.activePage!)}\n firstItem={null}\n lastItem={null}\n />\n </Row>\n ) : null}\n </>\n ) : null}\n </div>\n )\n}\n\nexport default React.memo(TransactionHistory)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Button, Header, Stats } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { BodyShape, NFTCategory, Rarity } from '@dcl/schemas'\nimport { locations } from '../../../modules/routing/locations'\nimport { Network } from '../Network'\nimport { Description } from '../Description'\nimport { Props } from './ItemDetail.types'\nimport RarityBadge from '../../RarityBadge'\nimport { AssetType } from '../../../modules/asset/types'\nimport GenderBadge from '../../GenderBadge'\nimport CategoryBadge from '../CategoryBadge'\nimport SmartBadge from '../SmartBadge'\nimport { Owner } from '../Owner'\nimport Collection from '../Collection'\nimport Price from '../Price'\nimport BaseDetail from '../BaseDetail'\nimport { Section } from '../../../modules/vendor/decentraland'\nimport { getBuilderCollectionDetailUrl } from '../../../modules/collection/utils'\nimport { TransactionHistory } from '../TransactionHistory'\nimport { AssetImage } from '../../AssetImage'\nimport styles from './ItemDetail.module.css'\n\nconst ItemDetail = ({ item, wallet }: Props) => {\n const isOwner = wallet?.address === item.creator\n const canBuy = !isOwner && item.isOnSale && item.available > 0\n const builderCollectionUrl = getBuilderCollectionDetailUrl(\n item.contractAddress\n )\n\n let description = ''\n let bodyShapes: BodyShape[] = []\n switch (item.category) {\n case NFTCategory.WEARABLE:\n description = item.data.wearable!.description\n bodyShapes = item.data.wearable!.bodyShapes\n break\n case NFTCategory.EMOTE:\n description = item.data.emote!.description\n bodyShapes = item.data.emote!.bodyShapes\n break\n }\n\n return (\n <BaseDetail\n asset={item}\n assetImage={<AssetImage asset={item} isDraggable />}\n isOnSale={item.isOnSale}\n badges={\n <>\n <RarityBadge\n rarity={item.rarity}\n assetType={AssetType.ITEM}\n category={NFTCategory.WEARABLE}\n />\n {item.category === NFTCategory.WEARABLE && (\n <CategoryBadge\n wearable={item.data.wearable!}\n assetType={AssetType.ITEM}\n />\n )}\n {bodyShapes.length > 0 && (\n <GenderBadge\n bodyShapes={bodyShapes}\n assetType={AssetType.ITEM}\n section={\n item.category === NFTCategory.WEARABLE\n ? Section.WEARABLES\n : Section.EMOTES\n }\n />\n )}\n {item.category === NFTCategory.WEARABLE &&\n item.data.wearable!.isSmart && (\n <SmartBadge assetType={AssetType.ITEM} />\n )}\n </>\n }\n left={\n <>\n <Description text={description} />\n <div className=\"BaseDetail row\">\n <Owner asset={item} />\n <Collection asset={item} />\n </div>\n </>\n }\n box={\n <>\n {item.isOnSale && <Price asset={item} />}\n <div className=\"BaseDetail row\">\n <Stats title={t('asset_page.stock')}>\n {item.available > 0 ? (\n <Header>\n {item.available.toLocaleString()}\n <span className={styles.supply}>\n /{Rarity.getMaxSupply(item.rarity).toLocaleString()}\n </span>\n </Header>\n ) : (\n t('asset_page.sold_out')\n )}\n </Stats>\n <Network asset={item} />\n </div>\n {isOwner ? (\n <div className={styles.ownerButtons}>\n <Button as=\"a\" href={builderCollectionUrl} fluid>\n {t('asset_page.actions.edit_price')}\n </Button>\n <Button as=\"a\" href={builderCollectionUrl} fluid>\n {t('asset_page.actions.change_beneficiary')}\n </Button>\n <Button as=\"a\" href={builderCollectionUrl} fluid>\n {t('asset_page.actions.mint_item')}\n </Button>\n </div>\n ) : (\n canBuy && (\n <Button\n fluid\n as={Link}\n to={locations.buy(\n AssetType.ITEM,\n item.contractAddress,\n item.itemId\n )}\n primary\n >\n {t('asset_page.actions.buy')}\n </Button>\n )\n )}\n </>\n }\n below={<TransactionHistory asset={item} />}\n />\n )\n}\n\nexport default React.memo(ItemDetail)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../modules/reducer'\nimport { getWallet } from '../../../modules/wallet/selectors'\nimport { MapStateProps } from './ItemDetail.types'\nimport ItemDetail from './ItemDetail'\n\nconst mapState = (state: RootState): MapStateProps => ({\n wallet: getWallet(state)\n})\n\nconst mapDispatch = () => ({})\n\nexport default connect(mapState, mapDispatch)(ItemDetail)\n","import React from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Center } from 'decentraland-ui'\nimport { Props, State } from './ErrorBoundary.types'\n\nexport default class ErrorBoundary extends React.Component<Props, State> {\n constructor(props: Props) {\n super(props)\n this.state = { hasError: false }\n }\n\n static getDerivedStateFromError(_error: Error) {\n return { hasError: true }\n }\n\n componentDidCatch(error: Error, errorInfo: any) {\n console.error(error, errorInfo)\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <Center>\n <div className=\"secondary-text\">{t('error_boundary.message')}</div>\n </Center>\n )\n }\n\n return this.props.children\n }\n}\n","import React from 'react'\nimport { Icon } from 'decentraland-ui'\nimport { Props } from './Expiration.types'\nimport { formatDistanceToNow } from '../../../lib/date'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport styles from './Expiration.module.css'\n\nconst Expiration = ({ order }: Props) => {\n if (!order) {\n return null\n }\n\n return (\n <div className={styles.container}>\n <Icon name=\"clock outline\" />\n {t('asset_page.expires')}{' '}\n {formatDistanceToNow(+order.expiresAt, {\n addSuffix: true\n })}\n </div>\n )\n}\n\nexport default React.memo(Expiration)\n","import Expiration from './Expiration.container'\n\nexport default Expiration\n","import { connect } from 'react-redux'\nimport { MapStateProps } from './Expiration.types'\nimport Expiration from './Expiration'\nimport { RootState } from '../../../modules/reducer'\nimport { getCurrentOrder } from '../../../modules/order/selectors'\n\nconst mapState = (state: RootState): MapStateProps => ({\n order: getCurrentOrder(state) || undefined\n})\n\nexport default connect(mapState)(Expiration)\n","import React, { useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Modal, Button } from 'decentraland-ui'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { isOwnedBy } from '../../../modules/asset/utils'\nimport { locations } from '../../../modules/routing/locations'\nimport { AssetType } from '../../../modules/asset/types'\nimport { VendorFactory } from '../../../modules/vendor'\nimport { Props } from './Actions.types'\nimport styles from './Actions.module.css'\nimport { builderUrl } from '../../../lib/environment'\n\nconst Actions = (props: Props) => {\n const { wallet, nft, order, bids } = props\n const { vendor, contractAddress, tokenId, data } = nft\n\n const [showLeavingSiteModal, setShowLeavingSiteModal] = useState(false)\n\n const { bidService, orderService } = VendorFactory.build(nft.vendor)\n const isBiddable = bidService !== undefined\n\n const isOwner = isOwnedBy(nft, wallet)\n const isENSName = !!data.ens\n\n const canSell = orderService.canSell()\n const canBid =\n !isOwner &&\n isBiddable &&\n (!wallet || !bids.some(bid => bid.bidder === wallet.address))\n\n return (\n <div className={styles.container}>\n {order ? (\n isOwner && canSell ? (\n <>\n <Button\n as={Link}\n to={locations.sell(contractAddress, tokenId)}\n primary\n fluid\n >\n {t('asset_page.actions.update')}\n </Button>\n <Button\n as={Link}\n to={locations.cancel(contractAddress, tokenId)}\n fluid\n >\n {t('asset_page.actions.cancel_sale')}\n </Button>\n </>\n ) : !isOwner ? (\n <>\n <Button\n as={Link}\n to={locations.buy(AssetType.NFT, contractAddress, tokenId)}\n primary\n fluid\n >\n {t('asset_page.actions.buy')}\n </Button>\n {canBid ? (\n <Button\n as={Link}\n to={locations.bid(contractAddress, tokenId)}\n fluid\n >\n {t('asset_page.actions.bid')}\n </Button>\n ) : null}\n </>\n ) : (\n <Button onClick={() => setShowLeavingSiteModal(true)} primary fluid>\n {t('asset_page.actions.see_listing')}\n </Button>\n )\n ) : isOwner && canSell ? (\n <Button\n as={Link}\n to={locations.sell(contractAddress, tokenId)}\n primary\n fluid\n >\n {t('asset_page.actions.sell')}\n </Button>\n ) : isOwner && !canSell ? (\n <Button onClick={() => setShowLeavingSiteModal(true)} primary fluid>\n {t('asset_page.actions.sell')}\n </Button>\n ) : canBid ? (\n <Button\n as={Link}\n to={locations.bid(contractAddress, tokenId)}\n primary\n fluid\n >\n {t('asset_page.actions.bid')}\n </Button>\n ) : null}\n {isOwner && !order ? (\n <Button\n as={Link}\n to={locations.transfer(contractAddress, tokenId)}\n fluid\n >\n {t('asset_page.actions.transfer')}\n </Button>\n ) : null}\n {isOwner && isENSName && (\n <Button as=\"a\" href={`${builderUrl}/names`} fluid>\n {t('asset_page.actions.manage')}\n </Button>\n )}\n\n <Modal\n className=\"LeavingSiteModal\"\n size=\"small\"\n open={showLeavingSiteModal}\n onClose={() => setShowLeavingSiteModal(false)}\n >\n <Modal.Header>\n {t('asset_page.actions.leaving_decentraland')}\n </Modal.Header>\n <Modal.Content>\n <p>\n <T\n id=\"asset_page.actions.leaving_decentraland_description\"\n values={{\n vendor: t(`vendors.${vendor}`),\n vendor_link: (\n <a href={nft.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {nft.url}\n </a>\n )\n }}\n />\n <br />\n <br />\n <small>\n <i>{t('asset_page.actions.leaving_decentraland_disclaimer')}</i>\n </small>\n </p>\n </Modal.Content>\n <Modal.Actions>\n <Button onClick={() => setShowLeavingSiteModal(false)}>\n {t('global.cancel')}\n </Button>\n <Button\n primary\n as=\"a\"\n href={nft.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => setShowLeavingSiteModal(false)}\n >\n {t('global.proceed')}\n </Button>\n </Modal.Actions>\n </Modal>\n </div>\n )\n}\n\nexport default React.memo(Actions)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../../modules/reducer'\nimport { getWallet } from '../../../modules/wallet/selectors'\nimport { getCurrentOrder } from '../../../modules/order/selectors'\nimport { getNFTBids } from '../../../modules/ui/nft/bid/selectors'\nimport { MapStateProps } from './Actions.types'\nimport Actions from './Actions'\n\nconst mapState = (state: RootState): MapStateProps => ({\n wallet: getWallet(state),\n order: getCurrentOrder(state),\n bids: getNFTBids(state)\n})\n\nconst mapDispatch = () => ({})\n\nexport default connect(mapState, mapDispatch)(Actions)\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { Header } from 'decentraland-ui'\nimport { Props } from './BidList.types'\nimport { Bid } from '../../Bid'\nimport './BidList.css'\n\nconst BidList = (props: Props) => {\n const { nft, bids, onFetchBids } = props\n\n const [hasFetched, setHasFetched] = useState(false)\n\n // this is because when you change from one nft detail to another you would still see the previous nft bids\n const filteredBids = useMemo(\n () =>\n bids.filter(\n bid =>\n bid.contractAddress === nft.contractAddress &&\n bid.tokenId === nft.tokenId\n ),\n [nft, bids]\n )\n\n useEffect(() => {\n if (!hasFetched) {\n setHasFetched(true)\n onFetchBids(nft)\n }\n }, [hasFetched, onFetchBids, nft])\n\n // reset the flag if the nft changes\n useEffect(() => {\n if (nft) {\n setHasFetched(false)\n }\n }, [nft])\n\n return bids.length > 0 ? (\n <div className=\"BidList\">\n <Header sub>Bids</Header>\n <div className=\"list\">\n {filteredBids.map(bid => (\n <Bid key={bid.id} bid={bid} isArchivable={false} hasImage={false} />\n ))}\n </div>\n </div>\n ) : null\n}\n\nexport default React.memo(BidList)\n","import { MapStateProps, MapDispatchProps, MapDispatch } from './BidList.types'\nimport { RootState } from '../../../modules/reducer'\nimport { getNFTBids } from '../../../modules/ui/nft/bid/selectors'\nimport { fetchBidsByNFTRequest } from '../../../modules/bid/actions'\nimport { connect } from 'react-redux'\nimport BidList from './BidList'\n\nconst mapState = (state: RootState): MapStateProps => ({\n bids: getNFTBids(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onFetchBids: nft => dispatch(fetchBidsByNFTRequest(nft))\n})\n\nexport default connect(mapState, mapDispatch)(BidList)\n","import React from 'react'\nimport classNames from 'classnames'\nimport { Badge } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { buildExplorerUrl } from '../../../modules/nft/parcel/utils'\nimport { Props } from './JumpIn.types'\nimport styles from './JumpIn.module.css'\n\nconst JumpIn = (props: Props) => {\n const { x, y, className } = props\n\n return (\n <Badge className={classNames([styles.JumpIn, className])} color=\"#ff2d55\">\n <a\n href={buildExplorerUrl(x, y)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {t('asset_page.jump_in')}\n <i className={styles.jumpInIcon} />\n </a>\n </Badge>\n )\n}\n\nexport default React.memo(JumpIn)\n","import React from 'react'\nimport classnames from 'classnames'\nimport { Header } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { Row } from '../../Layout/Row'\nimport { Props } from './Highlights.types'\nimport './Highlights.css'\n\nconst Highlights = (props: Props) => {\n const { className, children } = props\n return (\n <div className={classnames(['Highlights', className])}>\n <Header sub>{t('highlights.title')}</Header>\n <Row>{children}</Row>\n </div>\n )\n}\n\nexport default React.memo(Highlights)\n","import React from 'react'\n\nimport { Row } from '../../Layout/Row'\nimport { Column } from '../../Layout/Column'\nimport { Props } from './Highlight.types'\nimport './Highlight.css'\n\nconst Highlight = (props: Props) => {\n const { icon, name, description, onClick } = props\n const classes = ['Highlight']\n if (onClick) {\n classes.push('clickable')\n }\n return (\n <Column className={classes.join(' ')} onClick={onClick}>\n <Row>\n <Column align=\"left\">{icon}</Column>\n <Column align=\"right\">\n <div className=\"name\">{name}</div>\n {description ? (\n <div className=\"description\">{description}</div>\n ) : null}\n </Column>\n </Row>\n </Column>\n )\n}\n\nexport default React.memo(Highlight)\n","import React from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { getDistanceText } from '../../../modules/proximity/utils'\nimport { Highlights } from '../Highlights'\nimport { Props } from './ProximityHighlights.types'\nimport { Highlight } from '../Highlight'\nimport { useProximity } from '../../../modules/proximity/hooks'\nimport { VendorName } from '../../../modules/vendor'\nimport { NFT } from '../../../modules/nft/types'\nimport './ProximityHighlights.css'\n\nconst ProximityHighlights = (props: Props) => {\n const { nft, proximities } = props\n const proximity = useProximity(\n nft as NFT<VendorName.DECENTRALAND>,\n proximities\n )\n\n return proximity ? (\n <div className=\"ProximityHighlights\">\n <Highlights>\n {proximity?.plaza !== undefined ? (\n <Highlight\n icon={<div className=\"plaza\" />}\n name={t('asset_page.plaza')}\n description={getDistanceText(proximity?.plaza)}\n />\n ) : null}\n {proximity?.road !== undefined ? (\n <Highlight\n icon={<div className=\"road\" />}\n name={t('asset_page.road')}\n description={getDistanceText(proximity?.road)}\n />\n ) : null}\n {proximity?.district !== undefined ? (\n <Highlight\n icon={<div className=\"district\" />}\n name={t('asset_page.district')}\n description={getDistanceText(proximity?.district)}\n />\n ) : null}\n </Highlights>\n </div>\n ) : null\n}\n\nexport default React.memo(ProximityHighlights)\n","import { connect } from 'react-redux'\nimport { RootState } from '../../../modules/reducer'\nimport { getProximities } from '../../../modules/proximity/selectors'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './ProximityHighlights.types'\nimport ProximityHighlights from './ProximityHighlights'\n\nconst mapState = (state: RootState): MapStateProps => ({\n proximities: getProximities(state)\n})\n\nconst mapDispatch = (_dispatch: MapDispatch): MapDispatchProps => ({})\n\nexport default connect(mapState, mapDispatch)(ProximityHighlights)\n","import React from 'react'\nimport { NFTCategory } from '@dcl/schemas'\nimport { T } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Link } from 'react-router-dom'\nimport { Network } from '../Network'\nimport { Description } from '../Description'\nimport { Props } from './ParcelDetail.types'\nimport { Owner } from '../Owner'\nimport Price from '../Price'\nimport Expiration from '../Expiration'\nimport { Actions } from '../Actions'\nimport { BidList } from '../BidList'\nimport { TransactionHistory } from '../TransactionHistory'\nimport { Coordinate } from '../../Coordinate'\nimport { JumpIn } from '../JumpIn'\nimport { ProximityHighlights } from '../ProximityHighlights'\nimport { locations } from '../../../modules/routing/locations'\nimport BaseDetail from '../BaseDetail'\nimport { AssetImage } from '../../AssetImage'\nimport styles from './ParcelDetail.module.css'\n\nconst ParcelDetail = ({ nft }: Props) => {\n const parcel = nft.data.parcel!\n const { x, y } = parcel\n const isPartOfEstate = nft.category === NFTCategory.PARCEL && parcel.estate\n\n return (\n <BaseDetail\n asset={nft}\n assetImage={\n <AssetImage asset={nft} isDraggable withNavigation hasPopup />\n }\n isOnSale={!!nft.activeOrderId}\n badges={\n <>\n <Coordinate x={Number(x)} y={Number(y)} />\n <JumpIn x={Number(x)} y={Number(y)} />\n </>\n }\n left={\n <>\n <Description text={parcel.description} />\n <Owner asset={nft} />\n <ProximityHighlights nft={nft} />\n </>\n }\n box={\n <>\n {isPartOfEstate && (\n <div className={styles.estateInfo}>\n <T\n id=\"asset_page.part_of_estate\"\n values={{\n estate_name: (\n <Link\n title={parcel.estate!.name}\n to={locations.nft(nft.owner, parcel.estate!.tokenId)}\n >\n {parcel.estate!.name}\n </Link>\n )\n }}\n />\n </div>\n )}\n <Price asset={nft} />\n <Network asset={nft} />\n <Actions nft={nft} />\n <Expiration />\n </>\n }\n below={\n <>\n <BidList nft={nft} />\n <TransactionHistory asset={nft} />\n </>\n }\n />\n )\n}\n\nexport default React.memo(ParcelDetail)\n","import React, { useCallback, useRef, useState, useEffect } from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Row } from '../Layout/Row'\nimport styles from './Collapsible.module.css'\nimport { Props } from './Collapsible.types'\n\nconst Collapsible = (props: Props) => {\n const { children, collapsedHeight } = props\n const [isCollapsed, setIsCollapsed] = useState(true)\n const [isCollapsible, setIsCollapsible] = useState(false)\n const mainElement = useRef<HTMLDivElement>(null)\n const handleChangeShowMore = useCallback(() => setIsCollapsed(!isCollapsed), [\n isCollapsed\n ])\n\n useEffect(() => {\n setIsCollapsed(true)\n }, [children])\n\n useEffect(() => {\n function setCollapsableUsingHeight() {\n if (!mainElement.current) return\n\n setIsCollapsible(mainElement.current.offsetHeight > collapsedHeight)\n }\n\n setCollapsableUsingHeight()\n window.addEventListener('resize', setCollapsableUsingHeight)\n return () => window.removeEventListener('resize', setCollapsableUsingHeight)\n }, [collapsedHeight, children, setIsCollapsible])\n\n return (\n <div className={styles.Collapsible}>\n <div\n style={{ height: isCollapsed ? collapsedHeight : 'auto' }}\n className={styles.collapsibleWrapper}\n >\n <div ref={mainElement} className={styles.children}>\n {children}\n </div>\n </div>\n {isCollapsible && (\n <Row className={styles.showMore}>\n <span onClick={handleChangeShowMore}>\n {isCollapsed\n ? t('parcel_coordinates.show_more')\n : t('parcel_coordinates.show_less')}\n </span>\n </Row>\n )}\n </div>\n )\n}\n\nexport default React.memo(Collapsible)\n","import React from 'react'\nimport { Header } from 'decentraland-ui'\nimport { Link } from 'react-router-dom'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { locations } from '../../../../modules/routing/locations'\nimport { Row } from '../../../Layout/Row'\nimport Coordinate from '../../../Coordinate/Coordinate'\nimport { Collapsible } from '../../../Collapsible'\nimport { Props } from './ParcelCoordinates.types'\nimport styles from './ParcelCoordinates.module.css'\n\nconst ParcelCoordinates = (props: Props) => {\n const { parcelCoordinates } = props\n\n return (\n <div className={styles.ParcelCoordinates}>\n <Header sub>{t('parcel_coordinates.title')}</Header>\n <Collapsible collapsedHeight={60}>\n <Row className={styles.coordinates}>\n {parcelCoordinates.map((parcel, index) => (\n <Link\n key={index}\n to={locations.parcel(parcel.x.toString(), parcel.y.toString())}\n >\n <Coordinate\n className={styles.coordinate}\n x={parcel.x}\n y={parcel.y}\n />\n </Link>\n ))}\n </Row>\n </Collapsible>\n </div>\n )\n}\n\nexport default React.memo(ParcelCoordinates)\n","import { connect } from 'react-redux'\nimport { RootState } from '../../../../modules/reducer'\nimport { getTilesByEstateId } from '../../../../modules/tile/selectors'\nimport { MapStateProps, OwnProps } from './ParcelCoordinates.types'\nimport ParcelCoordinates from './ParcelCoordinates'\n\nconst mapState = (state: RootState, ownProps: OwnProps): MapStateProps => ({\n parcelCoordinates: getTilesByEstateId(state)[ownProps.estateId] ?? []\n})\n\nexport default connect(mapState)(ParcelCoordinates)\n","import React from 'react'\nimport classNames from 'classnames'\nimport { Badge } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Network } from '../Network'\nimport { Description } from '../Description'\nimport { Props } from './EstateDetail.types'\nimport { Owner } from '../Owner'\nimport Price from '../Price'\nimport Expiration from '../Expiration'\nimport { Actions } from '../Actions'\nimport { BidList } from '../BidList'\nimport { TransactionHistory } from '../TransactionHistory'\nimport { JumpIn } from '../JumpIn'\nimport { ProximityHighlights } from '../ProximityHighlights'\nimport { ParcelCoordinates } from './ParcelCoordinates'\nimport BaseDetail from '../BaseDetail'\nimport { AssetImage } from '../../AssetImage'\nimport './EstateDetail.css'\n\nconst EstateDetail = ({ nft }: Props) => {\n const estate = nft.data.estate!\n let x = 0\n let y = 0\n\n if (estate.size > 0) {\n x = estate.parcels[0].x\n y = estate.parcels[0].y\n }\n\n return (\n <BaseDetail\n className=\"EstateDetail\"\n asset={nft}\n assetImage={\n <>\n <AssetImage\n className={classNames(estate.size === 0 && 'dissolved')}\n asset={nft}\n isDraggable\n withNavigation\n hasPopup\n />\n {estate.size === 0 && (\n <div className=\"dissolved-wrapper\">\n <div className=\"dissolved-notice\">\n {t('estate_detail.dissolved')}\n </div>\n </div>\n )}\n </>\n }\n isOnSale={!!nft.activeOrderId}\n badges={\n <>\n <Badge color=\"#37333d\">{estate.size.toLocaleString()} LAND</Badge>\n {estate.size > 0 ? <JumpIn x={x} y={y} /> : null}\n </>\n }\n left={\n <>\n <Description text={estate.description} />\n <Owner asset={nft} />\n <ProximityHighlights nft={nft} />\n </>\n }\n box={\n <>\n <Price asset={nft} />\n <Network asset={nft} />\n {estate.size > 0 && <Actions nft={nft} />}\n <Expiration />\n </>\n }\n below={\n <>\n <BidList nft={nft} />\n {estate.size > 0 && <ParcelCoordinates estateId={nft.tokenId} />}\n <TransactionHistory asset={nft} />\n </>\n }\n />\n )\n}\n\nexport default React.memo(EstateDetail)\n","import React from 'react'\nimport { Header, Stats } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { NFTCategory, Rarity } from '@dcl/schemas'\nimport { Network } from '../Network'\nimport { Description } from '../Description'\nimport { Props } from './WearableDetail.types'\nimport RarityBadge from '../../RarityBadge'\nimport { AssetType } from '../../../modules/asset/types'\nimport GenderBadge from '../../GenderBadge'\nimport SmartBadge from '../SmartBadge'\nimport CategoryBadge from '../CategoryBadge'\nimport { Owner } from '../Owner'\nimport Collection from '../Collection'\nimport Price from '../Price'\nimport Expiration from '../Expiration'\nimport { Actions } from '../Actions'\nimport { BidList } from '../BidList'\nimport { TransactionHistory } from '../TransactionHistory'\nimport BaseDetail from '../BaseDetail'\nimport { AssetImage } from '../../AssetImage'\nimport styles from './WearableDetail.module.css'\nimport { Section } from '../../../modules/vendor/decentraland'\n\nconst WearableDetail = ({ nft }: Props) => {\n const wearable = nft.data.wearable!\n\n return (\n <BaseDetail\n asset={nft}\n assetImage={<AssetImage asset={nft} isDraggable />}\n isOnSale={!!nft.activeOrderId}\n badges={\n <>\n <RarityBadge\n rarity={wearable.rarity}\n assetType={AssetType.NFT}\n category={NFTCategory.WEARABLE}\n />\n <CategoryBadge wearable={wearable} assetType={AssetType.NFT} />\n <GenderBadge\n bodyShapes={wearable.bodyShapes}\n assetType={AssetType.NFT}\n section={Section.WEARABLES}\n />\n {wearable.isSmart ? <SmartBadge assetType={AssetType.NFT} /> : null}\n </>\n }\n left={\n <>\n <Description text={wearable.description} />\n <div className=\"BaseDetail row\">\n <Owner asset={nft} />\n <Collection asset={nft} />\n </div>\n </>\n }\n box={\n <>\n <Price asset={nft} />\n <div className=\"BaseDetail row\">\n {nft.issuedId ? (\n <Stats title={t('global.issue_number')}>\n <Header>\n {Number(nft.issuedId).toLocaleString()}\n <span className={styles.issued}>\n /{Rarity.getMaxSupply(wearable.rarity).toLocaleString()}\n </span>\n </Header>\n </Stats>\n ) : null}\n <Network asset={nft} />\n </div>\n <Actions nft={nft} />\n <Expiration />\n </>\n }\n below={\n <>\n <BidList nft={nft} />\n <TransactionHistory asset={nft} />\n </>\n }\n />\n )\n}\n\nexport default React.memo(WearableDetail)\n","import React from 'react'\nimport { Badge } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Network } from '../Network'\nimport { Props } from './ENSDetail.types'\nimport { Owner } from '../Owner'\nimport Price from '../Price'\nimport Expiration from '../Expiration'\nimport { Actions } from '../Actions'\nimport { BidList } from '../BidList'\nimport { TransactionHistory } from '../TransactionHistory'\nimport BaseDetail from '../BaseDetail'\nimport { AssetImage } from '../../AssetImage'\n\nconst ENSDetail = ({ nft }: Props) => (\n <BaseDetail\n asset={nft}\n assetImage={<AssetImage asset={nft} showMonospace />}\n isOnSale={!!nft.activeOrderId}\n badges={<Badge color=\"#37333d\">{t('global.ens')}</Badge>}\n left={<Owner asset={nft} />}\n box={\n <>\n <Price asset={nft} />\n <Network asset={nft} />\n <Actions nft={nft} />\n <Expiration />\n </>\n }\n below={\n <>\n <BidList nft={nft} />\n <TransactionHistory asset={nft} />\n </>\n }\n />\n)\n\nexport default React.memo(ENSDetail)\n","import React from 'react'\nimport { Header, Stats } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { NFTCategory, Rarity } from '@dcl/schemas'\nimport { Network } from '../Network'\nimport { Description } from '../Description'\nimport { Props } from './EmoteDetail.types'\nimport RarityBadge from '../../RarityBadge'\nimport { AssetType } from '../../../modules/asset/types'\nimport { Section } from '../../../modules/vendor/decentraland'\nimport GenderBadge from '../../GenderBadge'\nimport { Owner } from '../Owner'\nimport Collection from '../Collection'\nimport Price from '../Price'\nimport Expiration from '../Expiration'\nimport { Actions } from '../Actions'\nimport { BidList } from '../BidList'\nimport { TransactionHistory } from '../TransactionHistory'\nimport BaseDetail from '../BaseDetail'\nimport { AssetImage } from '../../AssetImage'\nimport styles from './EmoteDetail.module.css'\n\nconst EmoteDetail = ({ nft }: Props) => {\n const emote = nft.data.emote!\n\n return (\n <BaseDetail\n asset={nft}\n assetImage={<AssetImage asset={nft} isDraggable />}\n isOnSale={!!nft.activeOrderId}\n badges={\n <>\n <RarityBadge\n rarity={emote.rarity}\n assetType={AssetType.NFT}\n category={NFTCategory.EMOTE}\n />\n <GenderBadge\n bodyShapes={emote.bodyShapes}\n assetType={AssetType.NFT}\n section={Section.EMOTES}\n />\n </>\n }\n left={\n <>\n <Description text={emote.description} />\n <div className=\"BaseDetail row\">\n <Owner asset={nft} />\n <Collection asset={nft} />\n </div>\n </>\n }\n box={\n <>\n <Price asset={nft} />\n <div className=\"BaseDetail row\">\n {nft.issuedId ? (\n <Stats title={t('global.issue_number')}>\n <Header>\n {Number(nft.issuedId).toLocaleString()}\n <span className={styles.issued}>\n /{Rarity.getMaxSupply(emote.rarity).toLocaleString()}\n </span>\n </Header>\n </Stats>\n ) : null}\n <Network asset={nft} />\n </div>\n <Actions nft={nft} />\n <Expiration />\n </>\n }\n below={\n <>\n <BidList nft={nft} />\n <TransactionHistory asset={nft} />\n </>\n }\n />\n )\n}\n\nexport default React.memo(EmoteDetail)\n","import React from 'react'\nimport { Page, Section, Column, Back, Narrow } from 'decentraland-ui'\nimport { Asset, AssetType } from '../../modules/asset/types'\nimport { AssetProviderPage } from '../AssetProviderPage'\nimport { ItemDetail } from './ItemDetail'\nimport { ErrorBoundary } from './ErrorBoundary'\nimport { Props } from './AssetPage.types'\nimport { ParcelDetail } from './ParcelDetail'\nimport { EstateDetail } from './EstateDetail'\nimport { WearableDetail } from './WearableDetail'\nimport { ENSDetail } from './ENSDetail'\nimport { Navbar } from '../Navbar'\nimport { Navigation } from '../Navigation'\nimport { Footer } from '../Footer'\nimport { EmoteDetail } from './EmoteDetail'\nimport { AssetProvider } from '../AssetProvider'\nimport { locations } from '../../modules/routing/locations'\nimport { Sections } from '../../modules/routing/types'\nimport './AssetPage.css'\n\nconst AssetPage = ({ type, onBack }: Props) => {\n return (\n <>\n <Navbar isFullscreen />\n <Navigation />\n <Page className=\"AssetPage\">\n <ErrorBoundary>\n <Section>\n <Column>\n <AssetProvider type={type}>\n {asset => (\n <Back\n className=\"back\"\n absolute\n onClick={() =>\n onBack(\n mapAsset(\n asset,\n {\n wearable: () =>\n locations.browse({\n assetType: type,\n section: Sections.decentraland.WEARABLES\n }),\n emote: () =>\n locations.browse({\n assetType: type,\n section: Sections.decentraland.EMOTES\n })\n },\n {\n ens: () =>\n locations.browse({\n assetType: type,\n section: Sections.decentraland.ENS\n }),\n estate: () =>\n locations.lands({\n assetType: type,\n section: Sections.decentraland.ESTATES,\n isMap: false,\n isFullscreen: false\n }),\n parcel: () =>\n locations.lands({\n assetType: type,\n section: Sections.decentraland.PARCELS,\n isMap: false,\n isFullscreen: false\n }),\n wearable: () =>\n locations.browse({\n assetType: type,\n section: Sections.decentraland.WEARABLES\n }),\n emote: () =>\n locations.browse({\n assetType: type,\n section: Sections.decentraland.EMOTES\n })\n },\n () => undefined\n )\n )\n }\n />\n )}\n </AssetProvider>\n <Narrow>\n <AssetProviderPage type={type}>\n {asset =>\n mapAsset<React.ReactNode>(\n asset,\n {\n wearable: item => <ItemDetail item={item} />,\n emote: item => <ItemDetail item={item} />\n },\n {\n ens: nft => <ENSDetail nft={nft} />,\n estate: nft => <EstateDetail nft={nft} />,\n parcel: nft => <ParcelDetail nft={nft} />,\n wearable: nft => <WearableDetail nft={nft} />,\n emote: nft => <EmoteDetail nft={nft} />\n },\n () => null\n )\n }\n </AssetProviderPage>\n </Narrow>\n </Column>\n </Section>\n </ErrorBoundary>\n </Page>\n <Footer />\n </>\n )\n\n function mapAsset<T>(\n asset: Asset | null,\n itemMappers: {\n wearable: (asset: Asset<AssetType.ITEM>) => T\n emote: (asset: Asset<AssetType.ITEM>) => T\n },\n nftMappers: {\n wearable: (asset: Asset<AssetType.NFT>) => T\n emote: (asset: Asset<AssetType.NFT>) => T\n parcel: (asset: Asset<AssetType.NFT>) => T\n estate: (asset: Asset<AssetType.NFT>) => T\n ens: (asset: Asset<AssetType.NFT>) => T\n },\n fallback: () => T\n ) {\n if (!asset) {\n return fallback()\n }\n\n switch (type) {\n case AssetType.ITEM: {\n const item = asset as Asset<AssetType.ITEM>\n const { wearable, emote } = item.data as any\n if (wearable) {\n return itemMappers.wearable(item)\n }\n\n if (emote) {\n return itemMappers.emote(item)\n }\n\n break\n }\n\n case AssetType.NFT: {\n const nft = asset as Asset<AssetType.NFT>\n const { parcel, estate, wearable, emote, ens } = nft.data as any\n\n if (parcel) {\n return nftMappers.parcel(nft)\n }\n\n if (estate) {\n return nftMappers.estate(nft)\n }\n\n if (wearable) {\n return nftMappers.wearable(nft)\n }\n\n if (ens) {\n return nftMappers.ens(nft)\n }\n\n if (emote) {\n return nftMappers.emote(nft)\n }\n\n break\n }\n }\n\n return fallback()\n }\n}\n\nexport default React.memo(AssetPage)\n","import { connect } from 'react-redux'\nimport { Dispatch } from 'redux'\nimport { goBack } from '../../modules/routing/actions'\nimport AssetPage from './AssetPage'\nimport { MapDispatchProps } from './AssetPage.types'\n\nconst mapDispatch = (dispatch: Dispatch): MapDispatchProps => ({\n onBack: (location?: string) => dispatch(goBack(location))\n})\n\nexport default connect(null, mapDispatch)(AssetPage)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Loader } from 'decentraland-ui'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { locations } from '../../modules/routing/locations'\nimport { Props } from './Wallet.types'\nimport './Wallet.css'\n\nconst Loading = () => (\n <div className=\"wallet-center\">\n <Loader active size=\"huge\" />\n </div>\n)\n\nconst NotConnected = () => (\n <div className=\"wallet-center\">\n <p className=\"secondary-text\">\n <T\n id=\"wallet.sign_in_required\"\n values={{\n sign_in: <Link to={locations.signIn()}>{t('wallet.sign_in')}</Link>\n }}\n />\n </p>\n </div>\n)\n\nconst Wallet = (props: Props) => {\n const { wallet, isLoading, children } = props\n return (\n <>\n {isLoading ? <Loading /> : null}\n {!wallet && !isLoading ? <NotConnected /> : null}\n {wallet && !isLoading ? children(wallet) : null}\n </>\n )\n}\n\nexport default React.memo(Wallet)\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { RootState } from '../../modules/reducer'\nimport { getWallet, isConnecting } from '../../modules/wallet/selectors'\nimport { MapStateProps, MapDispatchProps, MapDispatch } from './Wallet.types'\nimport Wallet from './Wallet'\n\nconst mapState = (state: RootState): MapStateProps => {\n return {\n isLoading: isConnecting(state),\n wallet: getWallet(state)\n }\n}\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path))\n})\n\nexport default connect(mapState, mapDispatch)(Wallet)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Modal, Button } from 'decentraland-ui'\nimport { t, T } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { locations } from '../../modules/routing/locations'\nimport { getContract } from '../../modules/contract/utils'\nimport { isAuthorized } from '../SettingsPage/Authorization/utils'\nimport { Authorization } from '../SettingsPage/Authorization'\nimport { Props } from './AuthorizationModal.types'\n\nconst AuthorizationModal = (props: Props) => {\n const {\n open,\n authorization,\n authorizations,\n isLoading,\n isAuthorizing,\n onCancel,\n onProceed\n } = props\n\n const contract = getContract({\n address: authorization.authorizedAddress\n })\n const token = getContract({\n address: authorization.contractAddress\n })\n\n return (\n <Modal open={open} size=\"small\" className=\"AuthorizationModal\">\n <Modal.Header>\n {t('authorization_modal.title', {\n token: token.name\n })}\n </Modal.Header>\n <Modal.Description>\n <T\n id=\"authorization_modal.description\"\n values={{\n contract: contract.name,\n token: token.name,\n settings_link: (\n <Link to={locations.settings()}>{t('global.settings')}</Link>\n ),\n br: (\n <>\n <br />\n <br />\n </>\n )\n }}\n />\n </Modal.Description>\n <Modal.Content>\n <Authorization\n key={authorization.authorizedAddress}\n authorization={authorization}\n />\n </Modal.Content>\n <Modal.Actions>\n <Button onClick={onCancel}>{t('global.cancel')}</Button>\n <Button\n primary\n loading={isLoading}\n disabled={\n isLoading ||\n isAuthorizing ||\n !isAuthorized(authorization, authorizations)\n }\n onClick={onProceed}\n >\n {t('global.proceed')}\n </Button>\n </Modal.Actions>\n </Modal>\n )\n}\n\nexport default React.memo(AuthorizationModal)\n","import { connect } from 'react-redux'\nimport {\n GRANT_TOKEN_REQUEST,\n REVOKE_TOKEN_REQUEST\n} from 'decentraland-dapps/dist/modules/authorization/actions'\nimport { getData as getAuthorizations } from 'decentraland-dapps/dist/modules/authorization/selectors'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { getLoading } from 'decentraland-dapps/dist/modules/authorization/selectors'\nimport { RootState } from '../../modules/reducer'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './AuthorizationModal.types'\nimport AuthorizationModal from './AuthorizationModal'\n\nconst mapState = (state: RootState): MapStateProps => ({\n authorizations: getAuthorizations(state),\n isAuthorizing:\n isLoadingType(getLoading(state), GRANT_TOKEN_REQUEST) ||\n isLoadingType(getLoading(state), REVOKE_TOKEN_REQUEST)\n})\n\nconst mapDispatch = (_dispatch: MapDispatch): MapDispatchProps => ({})\n\nexport default connect(mapState, mapDispatch)(AuthorizationModal)\n","import React from 'react'\n\nimport { Back } from 'decentraland-ui'\nimport { getAssetUrl } from '../../modules/asset/utils'\nimport { AssetImage } from '../AssetImage'\nimport { Row } from '../Layout/Row'\nimport { Column } from '../Layout/Column'\nimport { Props } from './AssetAction.types'\nimport './AssetAction.css'\n\nconst AssetAction = (props: Props) => {\n const { asset, children, onBack } = props\n return (\n <div className=\"AssetAction\">\n <Back onClick={() => onBack(getAssetUrl(asset))} />\n <Row>\n <Column align=\"left\">\n <div className=\"asset-image-wrapper\">\n <AssetImage asset={asset} zoom={1} />\n </div>\n </Column>\n <Column align=\"right\">{children}</Column>\n </Row>\n </div>\n )\n}\n\nexport default React.memo(AssetAction)\n","import { connect } from 'react-redux'\nimport { Dispatch } from 'redux'\nimport { goBack } from '../../modules/routing/actions'\nimport AssetPage from './AssetAction'\nimport { MapDispatchProps } from './AssetAction.types'\n\nconst mapDispatch = (dispatch: Dispatch): MapDispatchProps => ({\n onBack: (location?: string) => dispatch(goBack(location))\n})\n\nexport default connect(null, mapDispatch)(AssetPage)\n","import { NFTCategory } from '@dcl/schemas'\nimport { NFT } from '../../../modules/nft/types'\n\nconst LAND_PRICE_WARNING_THRESHOLD = 100 // if the listing price of a land is below this number we show a warning\n\nfunction isLand(nft: NFT) {\n return (\n nft.category === NFTCategory.PARCEL || nft.category === NFTCategory.ESTATE\n )\n}\n\nexport function showPriceBelowMarketValueWarning(nft: NFT, price: number) {\n return isLand(nft) && price <= LAND_PRICE_WARNING_THRESHOLD\n}\n","import React, { useState } from 'react'\nimport { fromWei } from 'web3x/utils'\nimport { addDays } from 'date-fns'\nimport dateFnsFormat from 'date-fns/format'\nimport { Network, NFTCategory } from '@dcl/schemas'\nimport { toFixedMANAValue } from 'decentraland-dapps/dist/lib/mana'\nimport {\n Authorization,\n AuthorizationType\n} from 'decentraland-dapps/dist/modules/authorization/types'\nimport { hasAuthorization } from 'decentraland-dapps/dist/modules/authorization/utils'\nimport { t, T } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { ChainButton } from 'decentraland-dapps/dist/containers'\nimport { Header, Form, Field, Button } from 'decentraland-ui'\nimport { ContractName } from 'decentraland-transactions'\nimport { parseMANANumber } from '../../../lib/mana'\nimport {\n INPUT_FORMAT,\n getDefaultExpirationDate\n} from '../../../modules/order/utils'\nimport { locations } from '../../../modules/routing/locations'\nimport { VendorFactory } from '../../../modules/vendor/VendorFactory'\nimport { getAssetName, isOwnedBy } from '../../../modules/asset/utils'\nimport { AuthorizationModal } from '../../AuthorizationModal'\nimport { AssetAction } from '../../AssetAction'\nimport { Mana } from '../../Mana'\nimport { ManaField } from '../../ManaField'\nimport { getContractNames } from '../../../modules/vendor'\nimport { getContract } from '../../../modules/contract/utils'\nimport { ConfirmInputValueModal } from '../../ConfirmInputValueModal'\nimport { Props } from './SellModal.types'\nimport { showPriceBelowMarketValueWarning } from './utils'\n\nconst SellModal = (props: Props) => {\n const {\n nft,\n order,\n wallet,\n authorizations,\n isLoading,\n isCreatingOrder,\n onNavigate,\n onCreateOrder\n } = props\n\n const isUpdate = order !== null\n const [price, setPrice] = useState<string>(\n isUpdate ? fromWei(order!.price, 'ether') : ''\n )\n const [expiresAt, setExpiresAt] = useState(\n isUpdate && order!.expiresAt\n ? dateFnsFormat(addDays(new Date(+order!.expiresAt), 1), INPUT_FORMAT)\n : getDefaultExpirationDate()\n )\n const [showConfirm, setShowConfirm] = useState(false)\n\n const [showAuthorizationModal, setShowAuthorizationModal] = useState(false)\n\n if (!wallet) {\n return null\n }\n\n const contractNames = getContractNames()\n\n const marketplace = getContract({\n name: contractNames.MARKETPLACE,\n network: nft.network\n })\n\n const authorization: Authorization = {\n address: wallet.address,\n authorizedAddress: marketplace.address,\n contractAddress: nft.contractAddress,\n contractName:\n nft.category === NFTCategory.WEARABLE && nft.network === Network.MATIC\n ? ContractName.ERC721CollectionV2\n : ContractName.ERC721,\n chainId: nft.chainId,\n type: AuthorizationType.APPROVAL\n }\n\n const handleCreateOrder = () =>\n onCreateOrder(nft, parseMANANumber(price), new Date(expiresAt).getTime())\n\n const handleSubmit = () => {\n if (hasAuthorization(authorizations, authorization)) {\n handleCreateOrder()\n } else {\n setShowAuthorizationModal(true)\n setShowConfirm(false)\n }\n }\n\n const handleClose = () => setShowAuthorizationModal(false)\n\n const { orderService } = VendorFactory.build(nft.vendor)\n\n const isInvalidDate = new Date(expiresAt).getTime() < Date.now()\n const isInvalidPrice = parseMANANumber(price) <= 0\n const isDisabled =\n !orderService.canSell() ||\n !isOwnedBy(nft, wallet) ||\n isInvalidPrice ||\n isInvalidDate\n\n return (\n <AssetAction asset={nft}>\n <Header size=\"large\">\n {t(isUpdate ? 'sell_page.update_title' : 'sell_page.title')}\n </Header>\n <p className=\"subtitle\">\n <T\n id={isUpdate ? 'sell_page.update_subtitle' : 'sell_page.subtitle'}\n values={{\n name: <b className=\"primary-text\">{getAssetName(nft)}</b>\n }}\n />\n </p>\n\n <Form onSubmit={() => setShowConfirm(true)}>\n <div className=\"form-fields\">\n <ManaField\n label={t('sell_page.price')}\n type=\"text\"\n placeholder={1000}\n network={nft.network}\n value={price}\n focus={true}\n error={price !== '' && isInvalidPrice}\n onChange={(_event, props) => {\n setPrice(toFixedMANAValue(props.value))\n }}\n />\n <Field\n label={t('sell_page.expiration_date')}\n type=\"date\"\n value={expiresAt}\n onChange={(_event, props) =>\n setExpiresAt(props.value || getDefaultExpirationDate())\n }\n error={isInvalidDate}\n message={isInvalidDate ? t('sell_page.invalid_date') : undefined}\n />\n </div>\n <div className=\"buttons\">\n <Button\n as=\"div\"\n onClick={() =>\n onNavigate(locations.nft(nft.contractAddress, nft.tokenId))\n }\n >\n {t('global.cancel')}\n </Button>\n <ChainButton\n type=\"submit\"\n primary\n disabled={isDisabled || isLoading}\n loading={isLoading}\n chainId={nft.chainId}\n >\n {t(isUpdate ? 'sell_page.update_submit' : 'sell_page.submit')}\n </ChainButton>\n </div>\n </Form>\n <ConfirmInputValueModal\n open={showConfirm}\n headerTitle={t('sell_page.confirm.title')}\n content={\n <>\n <T\n id=\"sell_page.confirm.line_one\"\n values={{\n name: <b>{getAssetName(nft)}</b>,\n amount: (\n <Mana network={nft.network} inline>\n {parseMANANumber(price).toLocaleString()}\n </Mana>\n )\n }}\n />\n {showPriceBelowMarketValueWarning(nft, parseMANANumber(price)) && (\n <>\n <br />\n <p className=\"danger-text\">\n <T id=\"sell_page.confirm.warning\" />\n </p>\n </>\n )}\n <br />\n <T id=\"sell_page.confirm.line_two\" />\n </>\n }\n onConfirm={handleSubmit}\n valueToConfirm={price}\n network={nft.network}\n onCancel={() => setShowConfirm(false)}\n loading={isCreatingOrder}\n disabled={isCreatingOrder}\n />\n <AuthorizationModal\n open={showAuthorizationModal}\n authorization={authorization}\n isLoading={isCreatingOrder}\n onProceed={handleCreateOrder}\n onCancel={handleClose}\n />\n </AssetAction>\n )\n}\n\nexport default React.memo(SellModal)\n","import React from 'react'\nimport { Page } from 'decentraland-ui'\nimport { AssetType } from '../../modules/asset/types'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Wallet } from '../Wallet'\nimport { AssetProviderPage } from '../AssetProviderPage'\nimport { SellModal } from './SellModal'\nimport { Props } from './SellPage.types'\nimport './SellPage.css'\n\nconst SellPage = (props: Props) => {\n const {\n authorizations,\n isLoading,\n isCreatingOrder,\n onNavigate,\n onCreateOrder\n } = props\n return (\n <>\n <Navbar isFullscreen />\n <Page className=\"SellPage\">\n <Wallet>\n {wallet => (\n <AssetProviderPage type={AssetType.NFT}>\n {(nft, order) => (\n <SellModal\n nft={nft}\n order={order}\n wallet={wallet}\n authorizations={authorizations}\n isLoading={isLoading}\n isCreatingOrder={isCreatingOrder}\n onNavigate={onNavigate}\n onCreateOrder={onCreateOrder}\n />\n )}\n </AssetProviderPage>\n )}\n </Wallet>\n </Page>\n <Footer />\n </>\n )\n}\n\nexport default React.memo(SellPage)\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { FETCH_AUTHORIZATIONS_REQUEST } from 'decentraland-dapps/dist/modules/authorization/actions'\nimport {\n getData as getAuthorizations,\n getLoading as getLoadingAuthorizations\n} from 'decentraland-dapps/dist/modules/authorization/selectors'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { RootState } from '../../modules/reducer'\nimport { createOrderRequest, CREATE_ORDER_REQUEST } from '../../modules/order/actions'\nimport {getLoading as getLoadingOrders } from '../../modules/order/selectors'\nimport { MapStateProps, MapDispatchProps, MapDispatch } from './SellPage.types'\nimport SellPage from './SellPage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n authorizations: getAuthorizations(state),\n isLoading: isLoadingType(getLoadingAuthorizations(state), FETCH_AUTHORIZATIONS_REQUEST),\n isCreatingOrder: isLoadingType(getLoadingOrders(state), CREATE_ORDER_REQUEST)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path)),\n onCreateOrder: (nft, price, expiresAt) =>\n dispatch(createOrderRequest(nft, price, expiresAt))\n})\n\nexport default connect(mapState, mapDispatch)(SellPage)\n","import { toBN } from 'web3x/utils'\nimport { config } from '../../config'\n\n/**\n * Checks against the min value of costless sales\n */\nexport function isPriceTooLow(price: string) {\n const minSaleValue = getMinSaleValueInWei()\n if (!isNaN(parseInt(price, 10)) && minSaleValue) {\n return toBN(price).lt(toBN(minSaleValue))\n }\n return false\n}\n\n/**\n * It returns the minimum sale value allowed for costless sales.\n * The price is expected to be used as an inclusive cap, meaning that prices that equal the value SHOULD be filtered\n */\nexport function getMinSaleValueInWei(): string | undefined {\n return config.get('MIN_SALE_VALUE_IN_WEI')\n}\n","import React from 'react'\nimport { formatWeiMANA } from '../../../lib/mana'\nimport { Mana } from '../../Mana'\nimport { Props } from './Price.types'\n\nconst Price = (props: Props) => {\n const { network, price } = props\n return (\n <Mana network={network} inline withTooltip>\n {formatWeiMANA(price)}\n </Mana>\n )\n}\n\nexport default React.memo(Price)\n","import { Button, Card } from 'decentraland-ui'\nimport React from 'react'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { getMinSaleValueInWei } from '../utils'\nimport { Price } from '../Price'\nimport { Props } from './PriceTooLow.types'\nimport styles from './PriceTooLow.module.css'\n\nconst PriceTooLow = (props: Props) => {\n const { chainId, network, onSwitchNetwork } = props\n\n const humanNetwork = t(`networks.${network.toLowerCase()}`)\n const humanToken = t(`tokens.${network.toLowerCase()}`)\n\n // We're confident the minimum price exists here, otherwise the component wouldn't be rendered\n const price = <Price network={network} price={getMinSaleValueInWei()!} />\n\n return (\n <Card className={styles.card}>\n <Card.Content>\n <div className={styles.paragraph}>\n <T id=\"price_too_low.minimum_price\" values={{ price }} />\n <br />\n {t('price_too_low.get_item_in_network', {\n network: humanNetwork,\n token: humanToken\n })}\n </div>\n <div className=\"buttons\">\n <Button\n basic\n size=\"small\"\n href=\"https://docs.decentraland.org/blockchain-integration/transactions-in-polygon/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {t('global.learn_more')}\n </Button>\n <Button\n primary\n inverted\n size=\"small\"\n onClick={() => onSwitchNetwork(chainId)}\n >\n {t('price_too_low.switch_network', { network: humanNetwork })}\n </Button>\n </div>\n </Card.Content>\n </Card>\n )\n}\n\nexport default React.memo(PriceTooLow)\n","import { connect } from 'react-redux'\nimport { switchNetworkRequest } from 'decentraland-dapps/dist/modules/wallet/actions'\nimport { MapDispatchProps, MapDispatch } from './PriceTooLow.types'\nimport PriceTooLow from './PriceTooLow'\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onSwitchNetwork: chainId => dispatch(switchNetworkRequest(chainId))\n})\nexport default connect(null, mapDispatch)(PriceTooLow)\n","import React from 'react'\nimport { getAssetName } from '../../../modules/asset/utils'\nimport { Props } from './Name.types'\n\nconst Name = (props: Props) => {\n const { asset } = props\n return <b>{getAssetName(asset)}</b>\n}\n\nexport default React.memo(Name)\n","import React, { useState, useCallback, useMemo } from 'react'\nimport { Header, Button } from 'decentraland-ui'\nimport { Link } from 'react-router-dom'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport {\n Authorization,\n AuthorizationType\n} from 'decentraland-dapps/dist/modules/authorization/types'\nimport { hasAuthorization } from 'decentraland-dapps/dist/modules/authorization/utils'\nimport { ChainButton } from 'decentraland-dapps/dist/containers'\nimport { Network, NFTCategory } from '@dcl/schemas'\nimport { ContractName } from 'decentraland-transactions'\nimport { locations } from '../../../modules/routing/locations'\nimport { isPartner } from '../../../modules/vendor/utils'\nimport { useFingerprint } from '../../../modules/nft/hooks'\nimport { getContractNames } from '../../../modules/vendor'\nimport { getContract } from '../../../modules/contract/utils'\nimport { AssetAction } from '../../AssetAction'\nimport { AuthorizationModal } from '../../AuthorizationModal'\nimport { PriceTooLow } from '../PriceTooLow'\nimport { Name } from '../Name'\nimport { Price } from '../Price'\nimport { Props } from './BuyNFTModal.types'\n\nconst BuyNFTModal = (props: Props) => {\n const {\n nft,\n order,\n wallet,\n authorizations,\n isLoading,\n isOwner,\n hasInsufficientMANA,\n hasLowPrice,\n onExecuteOrder\n } = props\n\n const [fingerprint, isFingerprintLoading] = useFingerprint(nft)\n const [showAuthorizationModal, setShowAuthorizationModal] = useState(false)\n\n const handleExecuteOrder = useCallback(() => {\n onExecuteOrder(order!, nft, fingerprint)\n }, [order, nft, fingerprint, onExecuteOrder])\n\n const authorization: Authorization = useMemo(() => {\n const contractNames = getContractNames()\n\n const mana = getContract({\n name: contractNames.MANA,\n network: nft.network\n })\n\n return {\n address: wallet.address,\n authorizedAddress: isPartner(nft.vendor)\n ? getContract({\n name: contractNames.MARKETPLACE_ADAPTER,\n network: Network.ETHEREUM\n }).address\n : order!.marketplaceAddress,\n contractAddress: mana.address,\n contractName: ContractName.MANAToken,\n chainId: nft.chainId,\n type: AuthorizationType.ALLOWANCE\n }\n }, [wallet, nft, order])\n\n const handleSubmit = useCallback(() => {\n if (hasAuthorization(authorizations, authorization)) {\n handleExecuteOrder()\n } else {\n setShowAuthorizationModal(true)\n }\n }, [\n authorizations,\n authorization,\n handleExecuteOrder,\n setShowAuthorizationModal\n ])\n\n const handleClose = useCallback(() => setShowAuthorizationModal(false), [\n setShowAuthorizationModal\n ])\n\n const isDisabled =\n !order ||\n isOwner ||\n hasInsufficientMANA ||\n (!fingerprint && nft.category === NFTCategory.ESTATE)\n\n const name = <Name asset={nft} />\n\n let subtitle = null\n if (!order) {\n subtitle = <T id={'buy_page.not_for_sale'} values={{ name }} />\n } else if (\n !fingerprint &&\n nft.category === NFTCategory.ESTATE &&\n !isFingerprintLoading\n ) {\n subtitle = <T id={'buy_page.no_fingerprint'} />\n } else if (isOwner) {\n subtitle = <T id={'buy_page.is_owner'} values={{ name }} />\n } else if (hasInsufficientMANA) {\n subtitle = (\n <T\n id={'buy_page.not_enough_mana'}\n values={{\n name,\n amount: <Price network={nft.network} price={order.price} />\n }}\n />\n )\n } else {\n subtitle = (\n <T\n id={'buy_page.subtitle'}\n values={{\n name,\n amount: <Price network={nft.network} price={order.price} />\n }}\n />\n )\n }\n\n return (\n <AssetAction asset={nft}>\n <Header size=\"large\">\n {t('buy_page.title', { category: t(`global.${nft.category}`) })}\n </Header>\n <div className={isDisabled ? 'error' : ''}>{subtitle}</div>\n {hasLowPrice ? (\n <PriceTooLow chainId={nft.chainId} network={nft.network} />\n ) : null}\n <div className=\"buttons\">\n <Button as={Link} to={locations.nft(nft.contractAddress, nft.tokenId)}>\n {t('global.cancel')}\n </Button>\n {!hasLowPrice ? (\n <ChainButton\n primary\n disabled={isDisabled || isLoading}\n onClick={handleSubmit}\n loading={isLoading}\n chainId={nft.chainId}\n >\n {t('buy_page.buy')}\n </ChainButton>\n ) : null}\n </div>\n <AuthorizationModal\n open={showAuthorizationModal}\n authorization={authorization}\n onProceed={handleExecuteOrder}\n onCancel={handleClose}\n />\n </AssetAction>\n )\n}\n\nexport default React.memo(BuyNFTModal)\n","import { connect } from 'react-redux'\nimport {\n getData as getAuthorizations,\n getLoading as getLoadingAuthorizations\n} from 'decentraland-dapps/dist/modules/authorization/selectors'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { FETCH_AUTHORIZATIONS_REQUEST } from 'decentraland-dapps/dist/modules/authorization/actions'\nimport { RootState } from '../../../modules/reducer'\nimport {\n executeOrderRequest,\n EXECUTE_ORDER_REQUEST\n} from '../../../modules/order/actions'\nimport { getLoading as getLoadingOrders } from '../../../modules/order/selectors'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './BuyNFTModal.types'\nimport BuyNFTModal from './BuyNFTModal'\n\nconst mapState = (state: RootState): MapStateProps => ({\n authorizations: getAuthorizations(state),\n isLoading:\n isLoadingType(\n getLoadingAuthorizations(state),\n FETCH_AUTHORIZATIONS_REQUEST\n ) || isLoadingType(getLoadingOrders(state), EXECUTE_ORDER_REQUEST)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onExecuteOrder: (order, nft, fingerprint) =>\n dispatch(executeOrderRequest(order, nft, fingerprint))\n})\nexport default connect(mapState, mapDispatch)(BuyNFTModal)\n","import React, { useState, useCallback, useMemo } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Header, Button } from 'decentraland-ui'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport {\n Authorization,\n AuthorizationType\n} from 'decentraland-dapps/dist/modules/authorization/types'\nimport { ContractName } from 'decentraland-transactions'\nimport { hasAuthorization } from 'decentraland-dapps/dist/modules/authorization/utils'\nimport { ChainButton } from 'decentraland-dapps/dist/containers'\nimport { locations } from '../../../modules/routing/locations'\nimport { AuthorizationModal } from '../../AuthorizationModal'\nimport { getContract } from '../../../modules/contract/utils'\nimport { getContractNames } from '../../../modules/vendor'\nimport { Section } from '../../../modules/vendor/decentraland'\nimport { AssetType } from '../../../modules/asset/types'\nimport { AssetAction } from '../../AssetAction'\nimport { Name } from '../Name'\nimport { Price } from '../Price'\nimport { PriceTooLow } from '../PriceTooLow'\nimport { Props } from './MintItemModal.types'\n\nconst MintItemModal = (props: Props) => {\n const {\n item,\n wallet,\n authorizations,\n isLoading,\n isOwner,\n hasInsufficientMANA,\n hasLowPrice,\n onBuyItem\n } = props\n\n const [showAuthorizationModal, setShowAuthorizationModal] = useState(false)\n\n const handleExecuteOrder = useCallback(() => onBuyItem(item), [\n onBuyItem,\n item\n ])\n\n const authorization: Authorization = useMemo(() => {\n const contractNames = getContractNames()\n const mana = getContract({\n name: contractNames.MANA,\n network: item.network\n })\n\n const collectionStore = getContract({\n name: contractNames.COLLECTION_STORE,\n network: item.network\n })\n\n return {\n address: wallet.address,\n authorizedAddress: collectionStore.address,\n contractAddress: mana.address,\n contractName: ContractName.MANAToken,\n chainId: item.chainId,\n type: AuthorizationType.ALLOWANCE\n }\n }, [wallet, item])\n\n const handleSubmit = useCallback(() => {\n if (hasAuthorization(authorizations, authorization)) {\n handleExecuteOrder()\n } else {\n setShowAuthorizationModal(true)\n }\n }, [\n authorizations,\n authorization,\n handleExecuteOrder,\n setShowAuthorizationModal\n ])\n\n const handleClose = useCallback(() => setShowAuthorizationModal(false), [\n setShowAuthorizationModal\n ])\n\n const isDisabled = !item.price || isOwner || hasInsufficientMANA\n\n const name = <Name asset={item} />\n\n let subtitle = null\n if (!item.isOnSale) {\n subtitle = (\n <T\n id={'mint_page.not_for_sale'}\n values={{\n name,\n secondary_market_link: (\n <Link\n to={locations.browse({\n section: Section.WEARABLES,\n assetType: AssetType.NFT,\n search: item.name\n })}\n >\n {t('mint_page.secondary_market')}\n </Link>\n )\n }}\n />\n )\n } else if (isOwner) {\n subtitle = <T id={'mint_page.is_owner'} values={{ name }} />\n } else if (hasInsufficientMANA) {\n subtitle = (\n <T\n id={'mint_page.not_enough_mana'}\n values={{\n name,\n amount: <Price network={item.network} price={item.price} />\n }}\n />\n )\n } else {\n subtitle = (\n <T\n id={'mint_page.subtitle'}\n values={{\n name,\n amount: <Price network={item.network} price={item.price} />\n }}\n />\n )\n }\n\n return (\n <AssetAction asset={item}>\n <Header size=\"large\">\n {t('mint_page.title', { category: t(`global.${item.category}`) })}\n </Header>\n <div className={isDisabled ? 'error' : ''}>{subtitle}</div>\n {hasLowPrice ? (\n <PriceTooLow chainId={item.chainId} network={item.network} />\n ) : null}\n <div className=\"buttons\">\n <Button\n as={Link}\n to={locations.item(item.contractAddress, item.itemId)}\n >\n {t('global.cancel')}\n </Button>\n {!hasLowPrice ? (\n <ChainButton\n primary\n disabled={isDisabled || isLoading}\n onClick={handleSubmit}\n loading={isLoading}\n chainId={item.chainId}\n >\n {t('mint_page.action')}\n </ChainButton>\n ) : null}\n </div>\n <AuthorizationModal\n isLoading={isLoading}\n open={showAuthorizationModal}\n authorization={authorization}\n onProceed={handleExecuteOrder}\n onCancel={handleClose}\n />\n </AssetAction>\n )\n}\n\nexport default React.memo(MintItemModal)\n","import { connect } from 'react-redux'\nimport {\n getData as getAuthorizations,\n getLoading as getLoadingAuthorizations\n} from 'decentraland-dapps/dist/modules/authorization/selectors'\nimport { FETCH_AUTHORIZATIONS_REQUEST } from 'decentraland-dapps/dist/modules/authorization/actions'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { RootState } from '../../../modules/reducer'\nimport { buyItemRequest, BUY_ITEM_REQUEST } from '../../../modules/item/actions'\nimport { getLoading as getItemsLoading } from '../../../modules/item/selectors'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './MintItemModal.types'\nimport MintItemModal from './MintItemModal'\n\nconst mapState = (state: RootState): MapStateProps => ({\n authorizations: getAuthorizations(state),\n isLoading:\n isLoadingType(\n getLoadingAuthorizations(state),\n FETCH_AUTHORIZATIONS_REQUEST\n ) || isLoadingType(getItemsLoading(state), BUY_ITEM_REQUEST)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onBuyItem: item => dispatch(buyItemRequest(item))\n})\nexport default connect(mapState, mapDispatch)(MintItemModal)\n","import React from 'react'\nimport { fromWei } from 'web3x/utils'\nimport { Item, Order } from '@dcl/schemas'\nimport { Page } from 'decentraland-ui'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Wallet as WalletProvider } from '../Wallet'\nimport { AssetProviderPage } from '../AssetProviderPage'\nimport { NFT } from '../../modules/nft/types'\nimport { isOwnedBy } from '../../modules/asset/utils'\nimport { Asset, AssetType } from '../../modules/asset/types'\nimport { BuyNFTModal } from './BuyNFTModal'\nimport { MintItemModal } from './MintItemModal'\nimport { isPriceTooLow } from './utils'\nimport { Props } from './BuyPage.types'\nimport './BuyPage.css'\n\nconst BuyPage = (props: Props) => {\n const { type } = props\n\n const isInsufficientMANA = (\n wallet: Wallet,\n asset: Asset,\n order: Order | null\n ) =>\n !!order &&\n wallet.networks[asset.network].mana < +fromWei(order.price, 'ether')\n\n return (\n <>\n <Navbar isFullscreen />\n <Page className=\"BuyPage\">\n <WalletProvider>\n {wallet => (\n <AssetProviderPage type={type}>\n {(asset, order) => {\n const price =\n type === AssetType.ITEM\n ? (asset as Item).price\n : order\n ? order.price\n : ''\n\n const modalProps = {\n wallet: wallet,\n isOwner: isOwnedBy(asset, wallet),\n hasInsufficientMANA: isInsufficientMANA(wallet, asset, order),\n hasLowPrice:\n wallet.chainId !== asset.chainId && isPriceTooLow(price)\n }\n\n return type === AssetType.NFT ? (\n <BuyNFTModal\n nft={asset as NFT}\n order={order}\n {...modalProps}\n />\n ) : type === AssetType.ITEM ? (\n <MintItemModal item={asset as Item} {...modalProps} />\n ) : null\n }}\n </AssetProviderPage>\n )}\n </WalletProvider>\n </Page>\n <Footer />\n </>\n )\n}\n\nexport default React.memo(BuyPage)\n","import React, { useState, useCallback } from 'react'\nimport { Header, Form, Field, Button } from 'decentraland-ui'\nimport { ContractName } from 'decentraland-transactions'\nimport { t, T } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { toFixedMANAValue } from 'decentraland-dapps/dist/lib/mana'\nimport {\n Authorization,\n AuthorizationType\n} from 'decentraland-dapps/dist/modules/authorization/types'\nimport { hasAuthorization } from 'decentraland-dapps/dist/modules/authorization/utils'\nimport { ChainButton } from 'decentraland-dapps/dist/containers'\nimport { getAssetName, isOwnedBy } from '../../../modules/asset/utils'\nimport { parseMANANumber } from '../../../lib/mana'\nimport { AssetAction } from '../../AssetAction'\nimport { getDefaultExpirationDate } from '../../../modules/order/utils'\nimport { locations } from '../../../modules/routing/locations'\nimport { useFingerprint } from '../../../modules/nft/hooks'\nimport { AuthorizationModal } from '../../AuthorizationModal'\nimport { getContract } from '../../../modules/contract/utils'\nimport { getContractNames } from '../../../modules/vendor'\nimport { ManaField } from '../../ManaField'\nimport { ConfirmInputValueModal } from '../../ConfirmInputValueModal'\nimport { Mana } from '../../Mana'\nimport { Props } from './BidModal.types'\nimport './BidModal.css'\n\nconst BidModal = (props: Props) => {\n const {\n nft,\n wallet,\n authorizations,\n onNavigate,\n onPlaceBid,\n isPlacingBid\n } = props\n\n const [price, setPrice] = useState('')\n const [expiresAt, setExpiresAt] = useState(getDefaultExpirationDate())\n\n const [fingerprint, isLoading] = useFingerprint(nft)\n\n const [showAuthorizationModal, setShowAuthorizationModal] = useState(false)\n const [showConfirmationModal, setShowConfirmationModal] = useState(false)\n\n const handlePlaceBid = useCallback(\n () =>\n onPlaceBid(\n nft,\n parseMANANumber(price),\n +new Date(expiresAt),\n fingerprint\n ),\n [nft, price, expiresAt, fingerprint, onPlaceBid]\n )\n\n if (!wallet) {\n return null\n }\n\n const contractNames = getContractNames()\n\n const mana = getContract({\n name: contractNames.MANA,\n network: nft.network\n })\n\n const bids = getContract({\n name: contractNames.BIDS,\n network: nft.network\n })\n\n const authorization: Authorization = {\n address: wallet.address,\n authorizedAddress: bids.address,\n contractAddress: mana.address,\n contractName: ContractName.MANAToken,\n chainId: mana.chainId,\n type: AuthorizationType.ALLOWANCE\n }\n\n const handleSubmit = () => {\n setShowConfirmationModal(true)\n }\n\n const handleConfirmBid = () => {\n if (hasAuthorization(authorizations, authorization)) {\n handlePlaceBid()\n } else {\n setShowAuthorizationModal(true)\n }\n }\n\n const handleClose = () => setShowAuthorizationModal(false)\n\n const isInvalidPrice = parseMANANumber(price) <= 0\n const isInvalidDate = +new Date(expiresAt) < Date.now()\n const hasInsufficientMANA =\n !!price &&\n !!wallet &&\n parseMANANumber(price) > wallet.networks[nft.network].mana\n\n const isDisabled =\n isOwnedBy(nft, wallet) ||\n isInvalidPrice ||\n isInvalidDate ||\n hasInsufficientMANA ||\n isLoading ||\n isPlacingBid\n\n return (\n <AssetAction asset={nft}>\n <Header size=\"large\">{t('bid_page.title')}</Header>\n <p className=\"subtitle\">\n <T\n id={'bid_page.subtitle'}\n values={{\n name: <b className=\"primary-text\">{getAssetName(nft)}</b>\n }}\n />\n </p>\n <Form onSubmit={handleSubmit}>\n <div className=\"form-fields\">\n <ManaField\n network={nft.network}\n label={t('bid_page.price')}\n placeholder={1000}\n value={price}\n error={price !== '' && (isInvalidPrice || hasInsufficientMANA)}\n onChange={(_event, props) => {\n setPrice(toFixedMANAValue(props.value))\n }}\n message={\n hasInsufficientMANA ? t('bid_page.not_enougn_mana') : undefined\n }\n />\n <Field\n network={nft.network}\n label={t('bid_page.expiration_date')}\n type=\"date\"\n value={expiresAt}\n onChange={(_event, props) =>\n setExpiresAt(props.value || getDefaultExpirationDate())\n }\n error={isInvalidDate}\n message={isInvalidDate ? t('bid_page.invalid_date') : undefined}\n />\n </div>\n <div className=\"buttons\">\n <Button\n as=\"div\"\n onClick={() =>\n onNavigate(locations.nft(nft.contractAddress, nft.tokenId))\n }\n >\n {t('global.cancel')}\n </Button>\n <ChainButton\n type=\"submit\"\n primary\n loading={isPlacingBid}\n disabled={isDisabled}\n chainId={nft.chainId}\n >\n {t('bid_page.submit')}\n </ChainButton>\n </div>\n </Form>\n <AuthorizationModal\n open={showAuthorizationModal}\n authorization={authorization}\n isLoading={isPlacingBid}\n onProceed={handlePlaceBid}\n onCancel={handleClose}\n />\n {showConfirmationModal ? (\n <ConfirmInputValueModal\n open={showConfirmationModal}\n headerTitle={t('bid_page.confirm.title')}\n content={\n <>\n <T\n id=\"bid_page.confirm.create_bid_line_one\"\n values={{\n name: <b>{getAssetName(nft)}</b>,\n amount: (\n <Mana network={nft.network} inline>\n {parseMANANumber(price).toLocaleString()}\n </Mana>\n )\n }}\n />\n <br />\n <T id=\"bid_page.confirm.accept_bid_line_two\" />\n </>\n }\n onConfirm={handleConfirmBid}\n valueToConfirm={price}\n network={nft.network}\n onCancel={() => setShowConfirmationModal(false)}\n loading={isPlacingBid}\n disabled={isPlacingBid}\n />\n ) : null}\n </AssetAction>\n )\n}\n\nexport default React.memo(BidModal)\n","import React from 'react'\nimport { Page } from 'decentraland-ui'\nimport { AssetType } from '../../modules/asset/types'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Wallet } from '../Wallet'\nimport { AssetProviderPage } from '../AssetProviderPage'\nimport { BidModal } from './BidModal'\nimport { Props } from './BidPage.types'\n\nconst BidPage = (props: Props) => {\n const { authorizations, onNavigate, onPlaceBid, isPlacingBid } = props\n return (\n <>\n <Navbar isFullscreen />\n <Page className=\"BidPage\">\n <Wallet>\n {wallet => (\n <AssetProviderPage type={AssetType.NFT}>\n {nft => (\n <BidModal\n nft={nft}\n wallet={wallet}\n authorizations={authorizations}\n onNavigate={onNavigate}\n onPlaceBid={onPlaceBid}\n isPlacingBid={isPlacingBid}\n />\n )}\n </AssetProviderPage>\n )}\n </Wallet>\n </Page>\n <Footer />\n </>\n )\n}\n\nexport default React.memo(BidPage)\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { RootState } from '../../modules/reducer'\nimport { getData as getAuthorizations } from 'decentraland-dapps/dist/modules/authorization/selectors'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { placeBidRequest, PLACE_BID_REQUEST } from '../../modules/bid/actions'\nimport { getLoading } from '../../modules/bid/selectors'\nimport { MapStateProps, MapDispatchProps, MapDispatch } from './BidPage.types'\nimport BidPage from './BidPage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n authorizations: getAuthorizations(state),\n isPlacingBid: isLoadingType(getLoading(state), PLACE_BID_REQUEST)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path)),\n onPlaceBid: (nft, price, expiresAt, fingerprint) =>\n dispatch(placeBidRequest(nft, price, expiresAt, fingerprint))\n})\n\nexport default connect(mapState, mapDispatch)(BidPage)\n","import React from 'react'\nimport { t, T } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { ChainButton } from 'decentraland-dapps/dist/containers'\nimport { Page, Header, Button } from 'decentraland-ui'\n\nimport { AssetType } from '../../modules/asset/types'\nimport { locations } from '../../modules/routing/locations'\nimport { getAssetName } from '../../modules/asset/utils'\nimport { formatWeiMANA } from '../../lib/mana'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Wallet } from '../Wallet'\nimport { Mana } from '../Mana'\nimport { AssetProviderPage } from '../AssetProviderPage'\nimport { AssetAction } from '../AssetAction'\nimport { Props } from './CancelSalePage.types'\nimport './CancelSalePage.css'\n\nconst CancelSalePage = (props: Props) => {\n const { isLoading, onNavigate, onCancelOrder } = props\n\n return (\n <>\n <Navbar isFullscreen />\n <Page className=\"CancelSalePage\">\n <Wallet>\n {wallet => (\n <AssetProviderPage type={AssetType.NFT}>\n {(nft, order) => {\n let subtitle\n let isDisabled = false\n const name = getAssetName(nft)\n if (!order) {\n isDisabled = true\n subtitle = (\n <T\n id=\"cancel_sale_page.not_for_sale\"\n values={{ name: <b>{name}</b> }}\n />\n )\n } else if (order.owner !== wallet.address) {\n isDisabled = true\n subtitle = (\n <T\n id=\"cancel_sale_page.invalid_owner\"\n values={{ name: <b>{name}</b> }}\n />\n )\n } else {\n subtitle = (\n <T\n id=\"cancel_sale_page.subtitle\"\n values={{\n name: <b>{name}</b>,\n amount: (\n <Mana network={nft.network} inline>\n {formatWeiMANA(order.price)}\n </Mana>\n )\n }}\n />\n )\n }\n return (\n <AssetAction asset={nft}>\n <Header size=\"large\">{t('cancel_sale_page.title')}</Header>\n <div className=\"subtitle\">{subtitle}</div>\n <div className=\"buttons\">\n <Button\n onClick={() =>\n onNavigate(\n locations.nft(nft.contractAddress, nft.tokenId)\n )\n }\n >\n {t('global.cancel')}\n </Button>\n <ChainButton\n primary\n loading={isLoading}\n disabled={isDisabled || isLoading}\n onClick={() => onCancelOrder(order!, nft)}\n chainId={nft.chainId}\n >\n {t('cancel_sale_page.submit')}\n </ChainButton>\n </div>\n </AssetAction>\n )\n }}\n </AssetProviderPage>\n )}\n </Wallet>\n </Page>\n <Footer />\n </>\n )\n}\n\nexport default React.memo(CancelSalePage)\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { RootState } from '../../modules/reducer'\nimport { getLoading } from '../../modules/order/selectors'\nimport {\n cancelOrderRequest,\n CANCEL_ORDER_REQUEST\n} from '../../modules/order/actions'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './CancelSalePage.types'\nimport CancelSalePage from './CancelSalePage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n isLoading: isLoadingType(getLoading(state), CANCEL_ORDER_REQUEST)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path)),\n onCancelOrder: (order, nft) => dispatch(cancelOrderRequest(order, nft))\n})\n\nexport default connect(mapState, mapDispatch)(CancelSalePage)\n","import React, { useState } from 'react'\nimport { Page, Header, Form, Field, Button } from 'decentraland-ui'\nimport { ChainButton } from 'decentraland-dapps/dist/containers'\nimport { t, T } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Wallet } from '../Wallet'\nimport { AssetProviderPage } from '../AssetProviderPage'\nimport { AssetAction } from '../AssetAction'\nimport { locations } from '../../modules/routing/locations'\nimport { getAssetName, isOwnedBy } from '../../modules/asset/utils'\nimport { AssetType } from '../../modules/asset/types'\nimport { Props } from './TransferPage.types'\nimport './TransferPage.css'\n\nconst TransferPage = (props: Props) => {\n const { onNavigate, onTransfer, isTransfering } = props\n\n const [address, setAddress] = useState('')\n const [isInvalidAddress, setIsInvalidAddress] = useState(false)\n\n return (\n <>\n <Navbar isFullscreen />\n <Page className=\"TransferPage\">\n <Wallet>\n {wallet => (\n <AssetProviderPage type={AssetType.NFT}>\n {(nft, order) => {\n let subtitle\n let isDisabled = !address || isInvalidAddress || isTransfering\n let canTransfer = true\n const subtitleClasses = ['subtitle']\n const name = getAssetName(nft)\n if (order) {\n isDisabled = true\n canTransfer = false\n subtitleClasses.push('error')\n subtitle = (\n <T\n id=\"transfer_page.for_sale\"\n values={{ name: <b>{name}</b> }}\n />\n )\n } else if (!isOwnedBy(nft, wallet)) {\n isDisabled = true\n canTransfer = false\n subtitleClasses.push('error')\n subtitle = (\n <T\n id=\"transfer_page.invalid_owner\"\n values={{ name: <b>{name}</b> }}\n />\n )\n } else {\n subtitle = (\n <T\n id=\"transfer_page.subtitle\"\n values={{ name: <b>{name}</b> }}\n />\n )\n }\n return (\n <AssetAction asset={nft}>\n <Header size=\"large\">\n {t('transfer_page.title', {\n category: t(`global.${nft.category}`)\n })}\n </Header>\n <div className={subtitleClasses.join(' ')}>{subtitle}</div>\n <Form onSubmit={() => onTransfer(nft, address)}>\n <div className=\"form-fields\">\n <Field\n type=\"address\"\n error={isInvalidAddress}\n message={\n isInvalidAddress\n ? t('transfer_page.invalid_address')\n : undefined\n }\n label={t('transfer_page.recipient')}\n value={address}\n placeholder=\"0x...\"\n disabled={!canTransfer}\n onChange={(_event, props) => {\n setAddress(props.value)\n const isValid =\n !props.value ||\n /^0x[a-fA-F0-9]{40}$/g.test(props.value)\n setIsInvalidAddress(!isValid)\n }}\n />\n </div>\n {canTransfer ? (\n <div className=\"warning\">\n <T\n id=\"transfer_page.warning\"\n values={{ br: <br /> }}\n />\n </div>\n ) : null}\n <div className=\"buttons\">\n <Button\n as=\"div\"\n onClick={() =>\n onNavigate(\n locations.nft(nft.contractAddress, nft.tokenId)\n )\n }\n >\n {t('global.cancel')}\n </Button>\n <ChainButton\n type=\"submit\"\n primary\n loading={isTransfering}\n disabled={isDisabled}\n chainId={nft.chainId}\n >\n {t('transfer_page.submit')}\n </ChainButton>\n </div>\n </Form>\n </AssetAction>\n )\n }}\n </AssetProviderPage>\n )}\n </Wallet>\n </Page>\n <Footer />\n </>\n )\n}\n\nexport default React.memo(TransferPage)\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { isLoadingType } from 'decentraland-dapps/dist/modules/loading/selectors'\nimport { RootState } from '../../modules/reducer'\nimport { getLoading } from '../../modules/nft/selectors'\nimport {\n transferNFTRequest,\n TRANSFER_NFT_REQUEST\n} from '../../modules/nft/actions'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './TransferPage.types'\nimport TransferPage from './TransferPage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n isTransfering: isLoadingType(getLoading(state), TRANSFER_NFT_REQUEST)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path)),\n onTransfer: (nft, address) => dispatch(transferNFTRequest(nft, address))\n})\n\nexport default connect(mapState, mapDispatch)(TransferPage)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { Loader, Icon } from 'decentraland-ui'\nimport { Network } from '@dcl/schemas'\nimport { getChainConfiguration } from 'decentraland-dapps/dist/lib/chainConfiguration'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport {\n isPending,\n getTransactionHref\n} from 'decentraland-dapps/dist/modules/transaction/utils'\nimport {\n TransactionStatus,\n Transaction\n} from 'decentraland-dapps/dist/modules/transaction/types'\nimport { formatDistanceToNow } from '../../../../lib/date'\nimport { getAssetUrl } from '../../../../modules/asset/utils'\nimport { AssetImage } from '../../../AssetImage'\nimport { Row } from '../../../Layout/Row'\nimport { Column } from '../../../Layout/Column'\nimport { Mana } from '../../../Mana'\nimport { Props } from './TransactionDetail.types'\nimport './TransactionDetail.css'\n\nconst getHref = (tx: Transaction) => {\n if (tx.status === null) {\n return\n }\n return getTransactionHref({ txHash: tx.replacedBy || tx.hash }, tx.chainId)\n}\n\nconst TransactionDetail = (props: Props) => {\n const { asset, text, tx } = props\n return (\n <Row className=\"TransactionDetail\">\n <Column align=\"left\" grow={true}>\n <div className=\"image\">\n {asset === null ? (\n <Loader active size=\"small\" />\n ) : asset ? (\n <Link to={getAssetUrl(asset)}>\n <AssetImage asset={asset} isSmall />\n </Link>\n ) : (\n <Mana\n network={\n tx.chainId\n ? getChainConfiguration(tx.chainId).network\n : Network.ETHEREUM\n }\n />\n )}\n </div>\n <div className=\"text\">\n <div className=\"description\">{text}</div>\n <div className=\"timestamp\">{formatDistanceToNow(tx.timestamp)}.</div>\n </div>\n </Column>\n <Column align=\"right\">\n <a\n href={getHref(tx)}\n className={tx.status ? 'status ' + tx.status : 'status'}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <div className=\"description\">{tx.status || t('global.loading')}</div>\n {isPending(tx.status) ? (\n <div className=\"spinner\">\n <Loader active size=\"mini\" />\n </div>\n ) : null}\n {tx.status === TransactionStatus.REVERTED ? (\n <Icon name=\"warning sign\" />\n ) : null}\n {tx.status === TransactionStatus.CONFIRMED ||\n tx.status === TransactionStatus.REPLACED ? (\n <Icon name=\"check\" />\n ) : null}\n </a>\n </Column>\n </Row>\n )\n}\n\nexport default React.memo(TransactionDetail)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\nimport { T, t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { TransactionLink, Profile } from 'decentraland-dapps/dist/containers'\nimport {\n GrantTokenSuccessAction,\n RevokeTokenSuccessAction,\n GRANT_TOKEN_SUCCESS,\n REVOKE_TOKEN_SUCCESS\n} from 'decentraland-dapps/dist/modules/authorization/actions'\n\nimport { getAssetName } from '../../../modules/asset/utils'\nimport {\n CREATE_ORDER_SUCCESS,\n CANCEL_ORDER_SUCCESS,\n EXECUTE_ORDER_SUCCESS\n} from '../../../modules/order/actions'\nimport { BUY_ITEM_SUCCESS } from '../../../modules/item/actions'\nimport { TRANSFER_NFT_SUCCESS } from '../../../modules/nft/actions'\nimport {\n PLACE_BID_SUCCESS,\n ACCEPT_BID_SUCCESS,\n CANCEL_BID_SUCCESS\n} from '../../../modules/bid/actions'\nimport { locations } from '../../../modules/routing/locations'\nimport { getContract } from '../../../modules/contract/utils'\nimport { AssetType } from '../../../modules/asset/types'\nimport { AssetProvider } from '../../AssetProvider'\nimport { Mana } from '../../Mana'\nimport { TransactionDetail } from './TransactionDetail'\nimport { Props } from './Transaction.types'\n\nconst Transaction = (props: Props) => {\n const { tx } = props\n switch (tx.actionType) {\n case GRANT_TOKEN_SUCCESS:\n case REVOKE_TOKEN_SUCCESS: {\n const { authorization } = tx.payload as\n | GrantTokenSuccessAction['payload']\n | RevokeTokenSuccessAction['payload']\n const authorized = getContract({\n address: authorization.authorizedAddress\n })\n const contract = getContract({ address: authorization.contractAddress })\n const action =\n tx.actionType === GRANT_TOKEN_SUCCESS\n ? t('transaction.action.approved')\n : t('transaction.action.unapproved')\n return (\n <TransactionDetail\n text={\n <T\n id=\"transaction.detail.approve_token\"\n values={{\n action,\n contract: (\n <TransactionLink\n chainId={authorization.chainId}\n address={authorized.address}\n txHash=\"\"\n >\n {authorized.label || authorized.name}\n </TransactionLink>\n ),\n token: (\n <TransactionLink\n chainId={authorization.chainId}\n address={contract.address}\n txHash=\"\"\n >\n {contract.label || contract.name}\n </TransactionLink>\n )\n }}\n />\n }\n tx={tx}\n />\n )\n }\n case CREATE_ORDER_SUCCESS: {\n const { tokenId, contractAddress, network, name, price } = tx.payload\n return (\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={contractAddress}\n tokenId={tokenId}\n >\n {nft => (\n <TransactionDetail\n asset={nft}\n text={\n <T\n id=\"transaction.detail.create_order\"\n values={{\n name: (\n <Link to={locations.nft(contractAddress, tokenId)}>\n {name}\n </Link>\n ),\n price: (\n <Mana network={network} inline>\n {price.toLocaleString()}\n </Mana>\n )\n }}\n />\n }\n tx={tx}\n />\n )}\n </AssetProvider>\n )\n }\n case CANCEL_ORDER_SUCCESS: {\n const { tokenId, contractAddress, network, name, price } = tx.payload\n return (\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={contractAddress}\n tokenId={tokenId}\n >\n {nft => (\n <TransactionDetail\n asset={nft}\n text={\n <T\n id=\"transaction.detail.cancel_order\"\n values={{\n name: (\n <Link to={locations.nft(contractAddress, tokenId)}>\n {name}\n </Link>\n ),\n price: (\n <Mana network={network} inline>\n {price.toLocaleString()}\n </Mana>\n )\n }}\n />\n }\n tx={tx}\n />\n )}\n </AssetProvider>\n )\n }\n case BUY_ITEM_SUCCESS:\n case EXECUTE_ORDER_SUCCESS: {\n const {\n tokenId,\n itemId,\n contractAddress,\n network,\n name,\n price\n } = tx.payload\n\n let assetTokenId: string\n let type: AssetType\n let url: string\n if (itemId) {\n type = AssetType.ITEM\n assetTokenId = itemId\n url = locations.item(contractAddress, assetTokenId)\n } else {\n type = AssetType.NFT\n assetTokenId = tokenId\n url = locations.nft(contractAddress, assetTokenId)\n }\n\n return (\n <AssetProvider\n type={type}\n contractAddress={contractAddress}\n tokenId={assetTokenId}\n >\n {asset => (\n <TransactionDetail\n asset={asset}\n text={\n <T\n id=\"transaction.detail.execute_order\"\n values={{\n name: <Link to={url}>{name}</Link>,\n price: (\n <Mana network={network} inline>\n {price.toLocaleString()}\n </Mana>\n )\n }}\n />\n }\n tx={tx}\n />\n )}\n </AssetProvider>\n )\n }\n case TRANSFER_NFT_SUCCESS: {\n const { tokenId, contractAddress, name, address } = tx.payload\n return (\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={contractAddress}\n tokenId={tokenId}\n >\n {nft => (\n <TransactionDetail\n asset={nft}\n text={\n <T\n id=\"transaction.detail.transfer\"\n values={{\n name: (\n <Link to={locations.nft(contractAddress, tokenId)}>\n {name}\n </Link>\n ),\n address: (\n <Link to={locations.account(address)}>\n <Profile address={address} />\n </Link>\n )\n }}\n />\n }\n tx={tx}\n />\n )}\n </AssetProvider>\n )\n }\n case PLACE_BID_SUCCESS: {\n const { tokenId, contractAddress, price } = tx.payload\n\n return (\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={contractAddress}\n tokenId={tokenId}\n >\n {nft => (\n <TransactionDetail\n asset={nft}\n text={\n <T\n id=\"transaction.detail.place_bid\"\n values={{\n name: (\n <Link to={locations.nft(contractAddress, tokenId)}>\n {nft ? getAssetName(nft) : ''}\n </Link>\n ),\n price: (\n <Mana network={nft?.network} inline>\n {price.toLocaleString()}\n </Mana>\n )\n }}\n />\n }\n tx={tx}\n />\n )}\n </AssetProvider>\n )\n }\n case ACCEPT_BID_SUCCESS: {\n const { tokenId, contractAddress, price } = tx.payload\n return (\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={contractAddress}\n tokenId={tokenId}\n >\n {nft => (\n <TransactionDetail\n asset={nft}\n text={\n <T\n id=\"transaction.detail.accept_bid\"\n values={{\n name: (\n <Link to={locations.nft(contractAddress, tokenId)}>\n {nft ? getAssetName(nft) : ''}\n </Link>\n ),\n price: (\n <Mana inline network={nft?.network}>\n {price.toLocaleString()}\n </Mana>\n )\n }}\n />\n }\n tx={tx}\n />\n )}\n </AssetProvider>\n )\n }\n case CANCEL_BID_SUCCESS: {\n const { tokenId, contractAddress, price } = tx.payload\n return (\n <AssetProvider\n type={AssetType.NFT}\n contractAddress={contractAddress}\n tokenId={tokenId}\n >\n {nft => (\n <TransactionDetail\n asset={nft}\n text={\n <T\n id=\"transaction.detail.cancel_bid\"\n values={{\n name: (\n <Link to={locations.nft(contractAddress, tokenId)}>\n {nft ? getAssetName(nft) : ''}\n </Link>\n ),\n price: (\n <Mana inline network={nft?.network}>\n {price.toLocaleString()}\n </Mana>\n )\n }}\n />\n }\n tx={tx}\n />\n )}\n </AssetProvider>\n )\n }\n default:\n return null\n }\n}\n\nexport default React.memo(Transaction)\n","import React, { useCallback, useState } from 'react'\nimport { Link } from 'react-router-dom'\nimport { Page, Header, Button, Modal } from 'decentraland-ui'\nimport { t, T } from 'decentraland-dapps/dist/modules/translation/utils'\n\nimport { locations } from '../../modules/routing/locations'\nimport { Navigation } from '../Navigation'\nimport { Row } from '../Layout/Row'\nimport { Column } from '../Layout/Column'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Transaction } from './Transaction'\nimport { Props } from './ActivityPage.types'\nimport './ActivityPage.css'\nimport { NavigationTab } from '../Navigation/Navigation.types'\n\nconst ActivityPage = (props: Props) => {\n const { address, transactions, onClearHistory } = props\n\n const [showConfirmation, setShowConfirmation] = useState(false)\n\n const handleClear = useCallback(() => {\n if (address) {\n onClearHistory(address)\n }\n setShowConfirmation(false)\n }, [address, onClearHistory])\n\n const handleConfirm = useCallback(() => setShowConfirmation(true), [\n setShowConfirmation\n ])\n const handleCancel = useCallback(() => setShowConfirmation(false), [\n setShowConfirmation\n ])\n\n let content = null\n\n if (!address) {\n content = (\n <div className=\"center\">\n <p>\n {\n <T\n id=\"wallet.sign_in_required\"\n values={{\n sign_in: (\n <Link to={locations.signIn()}>{t('wallet.sign_in')}</Link>\n )\n }}\n />\n }\n </p>\n </div>\n )\n } else if (transactions.length === 0) {\n content = (\n <div className=\"center\">\n <p>{t('activity_page.empty')}</p>\n </div>\n )\n } else {\n content = (\n <>\n <Row>\n <Column align=\"left\" grow={true}>\n <Header sub>{t('activity_page.latest_activity')}</Header>\n </Column>\n <Column align=\"right\">\n <Button basic onClick={handleConfirm}>\n {t('activity_page.clear_history')}\n </Button>\n </Column>\n </Row>\n <div className=\"transactions\">\n {transactions\n .map(tx => <Transaction tx={tx} key={tx.hash} />)\n .reverse()}\n </div>\n </>\n )\n }\n\n return (\n <>\n <Navbar isFullscreen />\n <Navigation activeTab={NavigationTab.ACTIVITY} />\n <Page className=\"ActivityPage\">{content}</Page>\n <Modal size=\"tiny\" open={showConfirmation}>\n <Modal.Header>\n {t('activity_page.clear_history_modal.title')}\n </Modal.Header>\n <Modal.Content>\n {t('activity_page.clear_history_modal.text')}\n </Modal.Content>\n <Modal.Actions>\n <Button onClick={handleCancel}>{t('global.cancel')}</Button>\n <Button primary onClick={handleClear}>\n {t('global.proceed')}\n </Button>\n </Modal.Actions>\n </Modal>\n <Footer />\n </>\n )\n}\n\nexport default React.memo(ActivityPage)\n","import { connect } from 'react-redux'\nimport { clearTransactions } from 'decentraland-dapps/dist/modules/transaction/actions'\n\nimport { RootState } from '../../modules/reducer'\nimport { getAddress } from '../../modules/wallet/selectors'\nimport { getTransactions } from '../../modules/transaction/selectors'\nimport {\n MapStateProps,\n MapDispatchProps,\n MapDispatch\n} from './ActivityPage.types'\nimport ActivityPage from './ActivityPage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n address: getAddress(state),\n transactions: getTransactions(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onClearHistory: address => dispatch(clearTransactions(address))\n})\n\nexport default connect(mapState, mapDispatch)(ActivityPage)\n","import { createSelector } from 'reselect'\nimport { LoadingState } from 'decentraland-dapps/dist/modules/loading/reducer'\n\nimport { NFTState } from '../../../nft/reducer'\nimport { ItemState } from '../../../item/reducer'\nimport { FETCH_NFTS_REQUEST } from '../../../nft/actions'\nimport { FETCH_ITEMS_REQUEST } from '../../../item/actions'\nimport {\n getData as getNFTData,\n getLoading as getNFTLoading\n} from '../../../nft/selectors'\nimport {\n getData as getItemData,\n getLoading as getItemLoading\n} from '../../../item/selectors'\nimport { Asset } from '../../../asset/types'\nimport { RootState } from '../../../reducer'\nimport { HomepageView } from './types'\nimport { HomepageUIState } from './reducer'\n\nexport const getState = (state: RootState) => state.ui.asset.homepage\n\nexport const getHomepage = createSelector<\n RootState,\n HomepageUIState,\n NFTState['data'],\n ItemState['data'],\n Record<HomepageView, Asset[]>\n>(getState, getNFTData, getItemData, (homepage, nftsById, itemsById) => {\n const result: Record<string, Asset[]> = {}\n\n let view: HomepageView\n for (view in homepage) {\n result[view] = homepage[view].map(id => nftsById[id] || itemsById[id])\n }\n\n return result as Record<HomepageView, Asset[]>\n})\n\nexport const getHomepageLoading = createSelector<\n RootState,\n HomepageUIState,\n LoadingState,\n LoadingState,\n Record<HomepageView, boolean>\n>(\n getState,\n getNFTLoading,\n getItemLoading,\n (homepage, nftLoading, itemLoading) => {\n const result: Record<string, boolean> = {}\n\n for (const view in homepage) {\n result[view] = nftLoading.concat(itemLoading).some(action => {\n const { type, payload } = action\n return (\n (type === FETCH_NFTS_REQUEST && payload.options.view === view) ||\n (type === FETCH_ITEMS_REQUEST && payload.view === view)\n )\n })\n }\n\n return result as Record<HomepageView, boolean>\n }\n)\n","import React from 'react'\nimport { HeaderMenu, Header, Button, Loader } from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { AssetCard } from '../../AssetCard'\nimport { Props } from './Slideshow.types'\nimport './Slideshow.css'\n\nconst Slideshow = (props: Props) => {\n const { title, assets, isSubHeader, isLoading, onViewAll } = props\n\n const renderNfts = () =>\n assets.map((asset, index) => <AssetCard key={index} asset={asset} />)\n\n return (\n <div className=\"Slideshow\">\n <HeaderMenu>\n <HeaderMenu.Left>\n <Header sub={isSubHeader}>{title}</Header>\n </HeaderMenu.Left>\n <HeaderMenu.Right>\n <Button basic onClick={onViewAll}>\n {t('slideshow.view_all')}\n <i className=\"caret\" />\n </Button>\n </HeaderMenu.Right>\n </HeaderMenu>\n <div className=\"assets\">\n {isLoading ? (\n assets.length === 0 ? (\n <Loader active size=\"massive\" />\n ) : (\n renderNfts()\n )\n ) : assets.length > 0 ? (\n renderNfts()\n ) : null}\n </div>\n </div>\n )\n}\n\nexport default React.memo(Slideshow)\n","import React, { useCallback, useEffect, useMemo } from 'react'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { isMobile } from 'decentraland-dapps/dist/lib/utils'\nimport { Page, Hero, Button } from 'decentraland-ui'\nimport { locations } from '../../modules/routing/locations'\nimport { VendorName } from '../../modules/vendor/types'\nimport { SortBy } from '../../modules/routing/types'\nimport { View } from '../../modules/ui/types'\nimport { AssetType } from '../../modules/asset/types'\nimport { HomepageView } from '../../modules/ui/asset/homepage/types'\nimport { Section } from '../../modules/vendor/decentraland/routing/types'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Slideshow } from './Slideshow'\nimport { Props } from './HomePage.types'\nimport './HomePage.css'\n\nconst HomePage = (props: Props) => {\n const {\n homepage,\n homepageLoading,\n onNavigate,\n onFetchAssetsFromRoute\n } = props\n\n const sections: Partial<Record<View, Section>> = useMemo(\n () => ({\n [View.HOME_NEW_ITEMS]: Section.WEARABLES,\n [View.HOME_SOLD_ITEMS]: Section.WEARABLES,\n [View.HOME_WEARABLES]: Section.WEARABLES,\n [View.HOME_LAND]: Section.LAND,\n [View.HOME_ENS]: Section.ENS\n }),\n []\n )\n\n const assetTypes: Partial<Record<View, AssetType>> = useMemo(\n () => ({\n [View.HOME_NEW_ITEMS]: AssetType.ITEM,\n [View.HOME_SOLD_ITEMS]: AssetType.ITEM,\n [View.HOME_WEARABLES]: AssetType.NFT,\n [View.HOME_LAND]: AssetType.NFT,\n [View.HOME_ENS]: AssetType.NFT\n }),\n []\n )\n\n const sort: Partial<Record<View, SortBy>> = useMemo(\n () => ({\n [View.HOME_NEW_ITEMS]: SortBy.RECENTLY_LISTED,\n [View.HOME_SOLD_ITEMS]: SortBy.RECENTLY_SOLD,\n [View.HOME_WEARABLES]: SortBy.RECENTLY_LISTED,\n [View.HOME_LAND]: SortBy.RECENTLY_LISTED,\n [View.HOME_ENS]: SortBy.RECENTLY_LISTED\n }),\n []\n )\n\n const handleGetStarted = useCallback(() => {\n onNavigate(\n locations.browse({\n section: Section.WEARABLES,\n assetType: AssetType.ITEM\n })\n )\n }, [onNavigate])\n\n const handleViewAll = useCallback(\n (view: View) => {\n const section = sections[view]\n const assetType = assetTypes[view]\n const sortBy = sort[view]\n\n if (Section.LAND === section) {\n onNavigate(locations.lands())\n } else {\n onNavigate(locations.browse({ section, assetType, sortBy }))\n }\n },\n [sections, assetTypes, sort, onNavigate]\n )\n\n const vendor = VendorName.DECENTRALAND\n\n useEffect(() => {\n let view: HomepageView\n for (view in homepage) {\n const assetType = assetTypes[view]\n const section = sections[view]\n const sortBy = sort[view]\n onFetchAssetsFromRoute({\n vendor,\n section,\n view,\n assetType,\n sortBy,\n page: 1,\n onlyOnSale: true\n })\n }\n // eslint-disable-next-line\n }, [onFetchAssetsFromRoute])\n\n const views = Object.keys(homepage) as HomepageView[]\n\n return (\n <>\n <Navbar isFullscreen isOverlay />\n <Hero centered={isMobile()} className=\"HomePageHero\">\n <Hero.Header>{t('home_page.title')}</Hero.Header>\n <Hero.Description>{t('home_page.subtitle')}</Hero.Description>\n <Hero.Content>\n <div className=\"hero-image\" />{' '}\n </Hero.Content>\n <Hero.Actions>\n <Button primary onClick={handleGetStarted}>\n {t('home_page.get_started')}\n </Button>\n </Hero.Actions>\n </Hero>\n <Page className=\"HomePage\">\n {views.map(view => (\n <Slideshow\n key={view}\n title={t(`home_page.${view}`)}\n assets={homepage[view]}\n isLoading={homepageLoading[view]}\n onViewAll={() => handleViewAll(view)}\n />\n ))}\n </Page>\n <Footer />\n </>\n )\n}\n\nexport default React.memo(HomePage)\n","import { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport { RootState } from '../../modules/reducer'\nimport { fetchAssetsFromRoute } from '../../modules/routing/actions'\nimport {\n getHomepage,\n getHomepageLoading\n} from '../../modules/ui/asset/homepage/selectors'\nimport { MapStateProps, MapDispatchProps, MapDispatch } from './HomePage.types'\nimport HomePage from './HomePage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n homepage: getHomepage(state),\n homepageLoading: getHomepageLoading(state)\n})\n\nconst mapDispatch = (dispatch: MapDispatch): MapDispatchProps => ({\n onNavigate: path => dispatch(push(path)),\n onFetchAssetsFromRoute: options => dispatch(fetchAssetsFromRoute(options))\n})\n\nexport default connect(mapState, mapDispatch)(HomePage)\n","import React, { useEffect } from 'react'\nimport { Page, Loader } from 'decentraland-ui'\nimport { NFTCategory } from '@dcl/schemas'\n\nimport { locations } from '../../modules/routing/locations'\nimport { VendorFactory } from '../../modules/vendor/VendorFactory'\nimport { nftAPI } from '../../modules/vendor/decentraland/nft/api'\nimport { VendorName } from '../../modules/vendor/types'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Props } from './LegacyNFTPage.types'\nimport { getContract } from '../../modules/contract/utils'\n\nconst LegacyNFTPage = (props: Props) => {\n const { match, history } = props\n const { params } = match\n const { contractService } = VendorFactory.build(VendorName.DECENTRALAND)\n\n useEffect(() => {\n const { estateId, x, y } = params\n\n const land = getContract({ category: NFTCategory.PARCEL })\n const estates = getContract({ category: NFTCategory.ESTATE })\n\n if (estateId) {\n history.replace(locations.nft(estates.address, estateId))\n } else if (x && y) {\n nftAPI\n .fetchTokenId(Number(x), Number(y))\n .then(tokenId => {\n history.replace(locations.nft(land.address, tokenId))\n })\n .catch(() => history.replace(locations.root()))\n }\n }, [contractService, params, history])\n\n return (\n <>\n <Navbar isFullscreen />\n <Page className=\"LegacyNFTPage\" isFullscreen>\n <Loader size=\"massive\" active />\n </Page>\n <Footer isFullscreen />\n </>\n )\n}\n\nexport default React.memo(LegacyNFTPage)\n","import React from 'react'\n\nimport { VendorName } from '../../modules/vendor/types'\nimport { View } from '../../modules/ui/types'\nimport { NavigationTab } from '../Navigation/Navigation.types'\nimport { Section } from '../../modules/vendor/decentraland'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Navigation } from '../Navigation'\nimport { AssetBrowse } from '../AssetBrowse'\nimport { Props } from './LandsPage.types'\n\nconst LandsPage = (props: Props) => {\n const { isFullscreen, isMap } = props\n return (\n <>\n <Navbar isFullscreen />\n <Navigation activeTab={NavigationTab.LANDS} isFullscreen={isFullscreen} />\n <AssetBrowse\n vendor={VendorName.DECENTRALAND}\n view={View.MARKET}\n isFullscreen={isFullscreen}\n isMap={isMap}\n sections={[Section.LAND]}\n />\n <Footer isFullscreen={isFullscreen} />\n </>\n )\n}\n\nexport default React.memo(LandsPage)\n","import { connect } from 'react-redux'\n\nimport { RootState } from '../../modules/reducer'\nimport { getIsFullscreen } from '../../modules/routing/selectors'\nimport { getIsMap } from '../../modules/routing/selectors'\nimport { MapStateProps } from './LandsPage.types'\nimport LandsPage from './LandsPage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n isFullscreen: getIsFullscreen(state) ?? true,\n isMap: getIsMap(state) ?? true\n})\n\nexport default connect(mapState, undefined)(LandsPage)\n","import React from 'react'\nimport {\n Back,\n Column,\n Narrow,\n Page,\n Row,\n Section,\n Header,\n Badge,\n Icon,\n Color,\n Button,\n Loader,\n Table,\n Dropdown,\n Mobile,\n NotMobile\n} from 'decentraland-ui'\nimport { t } from 'decentraland-dapps/dist/modules/translation/utils'\nimport { Navbar } from '../Navbar'\nimport { Footer } from '../Footer'\nimport { Navigation } from '../Navigation'\nimport { Props } from './CollectionPage.types'\nimport { Mana } from '../Mana'\nimport { formatWeiMANA } from '../../lib/mana'\nimport { Rarity } from '@dcl/schemas'\nimport CollectionProvider from '../CollectionProvider'\nimport { getBuilderCollectionDetailUrl } from '../../modules/collection/utils'\nimport AssetCell from '../OnSaleList/AssetCell'\nimport styles from './CollectionPage.module.css'\n\nconst CollectionPage = (props: Props) => {\n const { contractAddress, currentAddress, onBack } = props\n\n return (\n <div>\n <Navbar isFullscreen />\n <Navigation />\n <Page className={styles.page}>\n {contractAddress ? (\n <CollectionProvider contractAddress={contractAddress} withItems>\n {({ collection, items, isLoading }) => {\n const isCollectionOwner =\n !!collection &&\n !!currentAddress &&\n collection.creator.toLowerCase() === currentAddress\n\n const builderCollectionUrl = getBuilderCollectionDetailUrl(\n contractAddress\n )\n\n return isLoading ? (\n <Loader size=\"massive\" active />\n ) : !collection || !items ? (\n <div>{t('collection_page.no_collection')}</div>\n ) : (\n <>\n <Section>\n <Column>\n <Back absolute onClick={onBack} />\n <Narrow>\n <Row stacked>\n <Column>\n <Row>\n <Header size=\"large\">{collection.name}</Header>\n {collection.isOnSale && (\n <Badge color={Color.SUMMER_RED}>\n <Icon name=\"tag\" />\n <span className={styles.badge}>\n {t('collection_page.on_sale')}\n </span>\n </Badge>\n )}\n </Row>\n </Column>\n {isCollectionOwner && (\n <Column\n align=\"right\"\n className={styles.columnRight}\n >\n <Row align=\"right\">\n <Button\n primary\n inverted\n compact\n as=\"a\"\n href={builderCollectionUrl}\n >\n {t('collection_page.edit_in_builder')}\n </Button>\n <Button\n primary\n inverted\n compact\n as=\"a\"\n href={builderCollectionUrl}\n >\n {collection.isOnSale\n ? t('collection_page.unlist_from_market')\n : t('collection_page.list_on_market')}\n </Button>\n </Row>\n </Column>\n )}\n </Row>\n </Narrow>\n </Column>\n </Section>\n <Section>\n <Narrow>\n <Table basic=\"very\">\n <Table.Header>\n <NotMobile>\n <Table.Row>\n <Table.HeaderCell>\n {t('global.item')}\n </Table.HeaderCell>\n <Table.HeaderCell>\n {t('global.category')}\n </Table.HeaderCell>\n <Table.HeaderCell>\n {t('global.rarity')}\n </Table.HeaderCell>\n <Table.HeaderCell>\n {t('global.stock')}\n </Table.HeaderCell>\n <Table.HeaderCell>\n {t('global.price')}\n </Table.HeaderCell>\n {isCollectionOwner && <Table.HeaderCell />}\n </Table.Row>\n </NotMobile>\n </Table.Header>\n <Table.Body>\n <Mobile>\n {items.map(item => (\n <div key={item.id} className=\"mobile-row\">\n <AssetCell asset={item} />\n <Mana network={item.network} inline>\n {formatWeiMANA(item.price)}\n </Mana>\n </div>\n ))}\n </Mobile>\n <NotMobile>\n {items.map(item => (\n <Table.Row key={item.id} className={styles.row}>\n <Table.Cell>\n <AssetCell asset={item} />\n </Table.Cell>\n <Table.Cell>\n {t(`global.${item.category}`)}\n </Table.Cell>\n <Table.Cell>\n {t(`rarity.${item.rarity}`)}\n </Table.Cell>\n <Table.Cell>\n {item.available.toLocaleString()}/\n {Rarity.getMaxSupply(\n item.rarity\n ).toLocaleString()}\n </Table.Cell>\n <Table.Cell>\n <Mana network={item.network} inline>\n {formatWeiMANA(item.price)}\n </Mana>\n </Table.Cell>\n {isCollectionOwner && (\n <Table.Cell>\n <Dropdown\n className={styles.ellipsis}\n icon=\"ellipsis horizontal\"\n direction=\"left\"\n >\n <Dropdown.Menu>\n <Dropdown.Item\n text={t('collection_page.edit_price')}\n as=\"a\"\n href={builderCollectionUrl}\n />\n <Dropdown.Item\n text={t('collection_page.mint_item')}\n as=\"a\"\n href={builderCollectionUrl}\n />\n </Dropdown.Menu>\n </Dropdown>\n </Table.Cell>\n )}\n </Table.Row>\n ))}\n </NotMobile>\n </Table.Body>\n </Table>\n </Narrow>\n </Section>\n </>\n )\n }}\n </CollectionProvider>\n ) : (\n <div>{t('collection_page.no_collection')}</div>\n )}\n </Page>\n <Footer />\n </div>\n )\n}\n\nexport default React.memo(CollectionPage)\n","import CollectionPage from './CollectionPage.container'\n\nexport default CollectionPage\n","import { connect } from 'react-redux'\nimport { Dispatch } from 'redux'\nimport { goBack } from '../../modules/routing/actions'\nimport { RootState } from '../../modules/reducer'\nimport { getAddress } from '../../modules/wallet/selectors'\nimport { getContractAddress } from '../../modules/collection/selectors'\nimport { MapDispatchProps, MapStateProps } from './CollectionPage.types'\nimport CollectionPage from './CollectionPage'\n\nconst mapState = (state: RootState): MapStateProps => ({\n contractAddress: getContractAddress(state),\n currentAddress: getAddress(state)\n})\n\nconst mapDispatch = (dispatch: Dispatch): MapDispatchProps => ({\n onBack: () => dispatch(goBack())\n})\n\nexport default connect(mapState, mapDispatch)(CollectionPage)\n","import { Switch, Route, Redirect } from 'react-router-dom'\nimport Intercom from 'decentraland-dapps/dist/components/Intercom'\n\nimport { AssetType } from '../../modules/asset/types'\nimport { locations } from '../../modules/routing/locations'\nimport { BrowsePage } from '../BrowsePage'\nimport { AccountPage } from '../AccountPage'\nimport { SignInPage } from '../SignInPage'\nimport { SettingsPage } from '../SettingsPage'\nimport { AssetPage } from '../AssetPage'\nimport { SellPage } from '../SellPage'\nimport { BuyPage } from '../BuyPage'\nimport { BidPage } from '../BidPage'\nimport { CancelSalePage } from '../CancelSalePage'\nimport { TransferPage } from '../TransferPage'\nimport { ActivityPage } from '../ActivityPage'\nimport { HomePage } from '../HomePage'\nimport { LegacyNFTPage } from '../LegacyNFTPage'\nimport { LandsPage } from '../LandsPage'\nimport CollectionPage from '../CollectionPage'\nimport { config } from '../../config'\n\nconst Routes = () => {\n const APP_ID = config.get('INTERCOM_APP_ID')\n\n return (\n <>\n <Switch>\n <Route exact path={locations.lands()} component={LandsPage} />\n <Route exact path={locations.browse()} component={BrowsePage} />\n <Route\n exact\n path={locations.currentAccount()}\n component={AccountPage}\n />\n <Route exact path={locations.account()} component={AccountPage} />\n <Route exact path={locations.signIn()} component={SignInPage} />\n <Route exact path={locations.sell()} component={SellPage} />\n <Route exact path={locations.bid()} component={BidPage} />\n <Route exact path={locations.cancel()} component={CancelSalePage} />\n <Route exact path={locations.transfer()} component={TransferPage} />\n <Route exact path={locations.collection()} component={CollectionPage} />\n <Route\n exact\n path={locations.buy(AssetType.NFT)}\n component={() => <BuyPage type={AssetType.NFT} />}\n />\n <Route\n exact\n path={locations.buy(AssetType.ITEM)}\n component={() => <BuyPage type={AssetType.ITEM} />}\n />\n <Route\n exact\n path={locations.nft()}\n component={() => <AssetPage type={AssetType.NFT} />}\n />\n <Route\n exact\n path={locations.item()}\n component={() => <AssetPage type={AssetType.ITEM} />}\n />\n <Route exact path={locations.settings()} component={SettingsPage} />\n <Route exact path={locations.activity()} component={ActivityPage} />\n <Route exact path={locations.root()} component={HomePage} />\n <Route exact path={locations.parcel()} component={LegacyNFTPage} />\n <Route exact path={locations.estate()} component={LegacyNFTPage} />\n <Redirect\n from=\"/browse\"\n to={locations.browse() + window.location.search}\n push\n />\n <Redirect to={locations.root()} />\n </Switch>\n {APP_ID ? (\n <Intercom appId={APP_ID} settings={{ alignment: 'right' }} />\n ) : null}\n </>\n )\n}\n\nexport default Routes\n","import ReactDOM from 'react-dom'\nimport { Provider } from 'react-redux'\nimport { ConnectedRouter } from 'connected-react-router'\nimport { ScrollToTop } from './components/ScrollToTop'\nimport WalletProvider from 'decentraland-dapps/dist/providers/WalletProvider'\nimport ToastProvider from 'decentraland-dapps/dist/providers/ToastProvider'\nimport TranslationProvider from 'decentraland-dapps/dist/providers/TranslationProvider'\n\nimport './setup'\nimport './modules/analytics/track'\nimport './modules/analytics/rollbar'\n\nimport * as locales from './modules/translation/locales'\nimport { initStore, history } from './modules/store'\nimport { Routes } from './components/Routes'\n\nimport { buildContracts } from './modules/contract/utils'\n\nimport './themes'\nimport './index.css'\n\nasync function main() {\n await buildContracts()\n\n const component = (\n <Provider store={initStore()}>\n <TranslationProvider locales={Object.keys(locales)}>\n <ToastProvider>\n <WalletProvider>\n <ConnectedRouter history={history}>\n <ScrollToTop />\n <Routes />\n </ConnectedRouter>\n </WalletProvider>\n </ToastProvider>\n </TranslationProvider>\n </Provider>\n )\n\n ReactDOM.render(component, document.getElementById('root'))\n}\n\nmain()\n","import { getData } from 'decentraland-dapps/dist/modules/transaction/selectors'\nimport { Transaction } from 'decentraland-dapps/dist/modules/transaction/types'\nimport { RootState } from '../reducer'\nimport { createSelector } from 'reselect'\nimport { getAddress } from '../wallet/selectors'\nimport {\n GRANT_TOKEN_SUCCESS,\n REVOKE_TOKEN_SUCCESS\n} from 'decentraland-dapps/dist/modules/authorization/actions'\nimport { isPending } from 'decentraland-dapps/dist/modules/transaction/utils'\n\nexport * from 'decentraland-dapps/dist/modules/transaction/selectors'\n\nexport const getTransactionsByType = (\n state: RootState,\n address: string,\n type: string\n): Transaction[] =>\n getData(state).filter(\n tx => tx.from.toLowerCase() === address && tx.actionType === type\n )\n\nexport const getTransactions = createSelector<\n RootState,\n Transaction[],\n string | undefined,\n Transaction[]\n>(getData, getAddress, (transactions, address) =>\n transactions.filter(\n transaction =>\n !!address && transaction.from.toLowerCase() === address.toLowerCase()\n )\n)\n\nexport const getPendingAuthorizationTransactions = createSelector<\n RootState,\n Transaction[],\n Transaction[]\n>(getTransactions, transactions =>\n transactions.filter(\n transaction =>\n isPending(transaction.status) &&\n (transaction.actionType === GRANT_TOKEN_SUCCESS ||\n transaction.actionType === REVOKE_TOKEN_SUCCESS)\n )\n)\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"item\":\"ToggleBox_item__21Ks3\",\"active\":\"ToggleBox_active__vTmun\",\"disabled\":\"ToggleBox_disabled__16x8R\",\"title\":\"ToggleBox_title__37mGy\",\"description\":\"ToggleBox_description__s3amr\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"page\":\"CollectionPage_page__FKQ20\",\"badge\":\"CollectionPage_badge__3xVsC\",\"firstCell\":\"CollectionPage_firstCell__4dHas\",\"imageContainer\":\"CollectionPage_imageContainer__3TML1\",\"title\":\"CollectionPage_title__Uetor\",\"ellipsis\":\"CollectionPage_ellipsis__3PRj1\",\"row\":\"CollectionPage_row__1XrRj\",\"columnRight\":\"CollectionPage_columnRight__LXkUT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"firstCell\":\"AssetCell_firstCell__1Ca3T\",\"imageContainer\":\"AssetCell_imageContainer__3lxeb\",\"title\":\"AssetCell_title__2jONN\",\"subtitle\":\"AssetCell_subtitle__2Pk4y\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"filters\":\"OnSaleList_filters__1NNZ_\",\"search\":\"OnSaleList_search__2XCSD\",\"pagination\":\"OnSaleList_pagination__UOq_k\",\"empty\":\"OnSaleList_empty__3EENa\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Collapsible\":\"Collapsible_Collapsible__38eD4\",\"showMore\":\"Collapsible_showMore__1L-3D\",\"children\":\"Collapsible_children__3zo7t\",\"collapsibleWrapper\":\"Collapsible_collapsibleWrapper__3hFLx\"};","import { Env, createConfig } from '@dcl/ui-env'\nimport dev from './env/dev.json'\nimport stg from './env/stg.json'\nimport prod from './env/prod.json'\n\nexport const config = createConfig({\n [Env.DEVELOPMENT]: dev,\n [Env.STAGING]: stg,\n [Env.PRODUCTION]: prod\n})\n","import { createSelector } from 'reselect'\nimport {\n getData,\n getAddress as baseGetAddress\n} from 'decentraland-dapps/dist/modules/wallet/selectors'\nimport { Wallet } from 'decentraland-dapps/dist/modules/wallet/types'\nimport { RootState } from '../reducer'\n\nexport * from 'decentraland-dapps/dist/modules/wallet/selectors'\n\nexport const getWallet = createSelector<\n RootState,\n Wallet | null,\n Wallet | null\n>(getData, wallet =>\n wallet ? { ...wallet, address: wallet.address.toLowerCase() } : null\n)\n\nexport const getAddress = (state: RootState) => {\n const address = baseGetAddress(state)\n return address ? address.toLowerCase() : undefined\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"badge\":\"RarityBadge_badge__36baB\",\"medium\":\"RarityBadge_medium__f5q4z\",\"text\":\"RarityBadge_text__3wxVZ\",\"small\":\"RarityBadge_small__1wihO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"box\":\"Box_box__mxLcn\",\"header\":\"Box_header__XlCeD\",\"children\":\"Box_children__2lVg1\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"Collection_container__3btP8\",\"name\":\"Collection_name__2MnRg\",\"image\":\"Collection_image__1OfEf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"coordinates\":\"ParcelCoordinates_coordinates__2nP5o\",\"collapsed\":\"ParcelCoordinates_collapsed__1Fs4o\",\"expanded\":\"ParcelCoordinates_expanded__8idjY\",\"coordinate\":\"ParcelCoordinates_coordinate__2KHz_\",\"showMore\":\"ParcelCoordinates_showMore__2YuUi\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ParcelTags\":\"ParcelTags_ParcelTags__2JhA-\",\"coordinates\":\"ParcelTags_coordinates__3Vw4t\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"icon\":\"GenderBadge_icon__2Ok_f\",\"BaseMale\":\"GenderBadge_BaseMale__2FhHJ\",\"BaseFemale\":\"GenderBadge_BaseFemale__aY504\",\"Unisex\":\"GenderBadge_Unisex__3ufZA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"badge\":\"ListedBadge_badge__Rp-DC\",\"icon\":\"ListedBadge_icon__10SxU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"center\":\"AssetProviderPage_center__2zzuz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"supply\":\"ItemDetail_supply__YjFIJ\",\"ownerButtons\":\"ItemDetail_ownerButtons__3JbBf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"JumpIn\":\"JumpIn_JumpIn__6vdHD\",\"jumpInIcon\":\"JumpIn_jumpInIcon__38P5-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"card\":\"PriceTooLow_card__1TID0\",\"paragraph\":\"PriceTooLow_paragraph__1hZ4Z\"};","import { Store as CommonsStore } from '@dcl/schemas'\n\nexport type Store = {\n owner: string\n cover: string\n coverName: string\n description: string\n website: string\n facebook: string\n twitter: string\n discord: string\n}\n\nexport enum LinkType {\n WEBSITE = 'website',\n FACEBOOK = 'facebook',\n TWITTER = 'twitter',\n DISCORD = 'discord'\n}\n\nexport type StoreEntityMetadata = CommonsStore\n"],"sourceRoot":""}