{"version":3,"sources":["webpack:///./src/managers/Ajax.js","webpack:///./src/components/collection/utilityList.jsx","webpack:///./src/components/hero/homeHero.jsx","webpack:///./src/components/hero/fullWidthImage.jsx","webpack:///./src/components/video/azureMediaPlayer.jsx","webpack:///./src/managers/Announcements.js","webpack:///./src/components/wallet/metamaskWallet.jsx","webpack:///./src/components/navigation/footer.jsx","webpack:///./src/components/account/flowWallet.jsx","webpack:///./src/components/modal/modal.jsx","webpack:///./src/config/flow.js","webpack:///./src/managers/Account.js","webpack:///./src/container.jsx","webpack:///./src/components/transfer/confirmTransfer.jsx","webpack:///./src/components/router/routerListener.jsx","webpack:///./src/routes/countdown-alternate.jsx","webpack:///./src/components/account/register.jsx","webpack:///./src/components/transfer/edropLanding.jsx","webpack:///./src/components/utility/utilityDisplay.jsx","webpack:///./src/components/collection/collectionHero.jsx","webpack:///./src/components/collection/announcements.jsx","webpack:///./src/components/collection/assetDetails.jsx","webpack:///./src/components/collection/brandWidget.jsx","webpack:///./src/components/collection/assetInformation.jsx","webpack:///./src/components/collection/assetFAQ.jsx","webpack:///./src/components/navigation/loginWidget.jsx","webpack:///./src/components/navigation/top-nav.jsx","webpack:///./src/managers/Creator.js","webpack:///./node_modules/moment-mini/locale sync ^\\.\\/.*$","webpack:///./src/routes/countdown-alternate-right.jsx","webpack:///./src/components/featuredDrop/homeDrop.jsx","webpack:///./src/components/account/CardForm.jsx","webpack:///./src/components/account/cardOnFile.jsx","webpack:///./src/components/account/PaySafeCardForm.jsx","webpack:///./src/components/account/billingForm.jsx","webpack:///./src/components/featuredDrop/confirmPurchase.jsx","webpack:///./src/components/featuredDrop/paySafeCardEntry.jsx","webpack:///./src/components/featuredDrop/confirmFreebie.jsx","webpack:///./src/components/featuredDrop/featuredDrop.jsx","webpack:///./src/components/about/faq.jsx","webpack:///./src/components/about/skulljewerlyFaq.jsx","webpack:///./src/routes/home.jsx","webpack:///./src/components/countdown/homeCountdown.jsx","webpack:///./src/routes/countdown.jsx","webpack:///./src/routes/drop.jsx","webpack:///./src/components/account/login.jsx","webpack:///./src/routes/login.jsx","webpack:///./src/components/hero/slimHero.jsx","webpack:///./src/routes/register.jsx","webpack:///./src/components/account/resetPassword.jsx","webpack:///./src/routes/reset.jsx","webpack:///./src/routes/account.jsx","webpack:///./src/components/transfer/transferChecker.jsx","webpack:///./src/routes/edrop.jsx","webpack:///./src/components/edrop/heathAboutEdrop.jsx","webpack:///./src/components/edrop/allureAboutEdrop.jsx","webpack:///./src/routes/aboutEdrop.jsx","webpack:///./src/components/account/details.jsx","webpack:///./src/components/account/billing.jsx","webpack:///./src/components/account/password.jsx","webpack:///./src/components/account/wallet.jsx","webpack:///./src/components/nft/NftCard.jsx","webpack:///./src/components/account/collection.jsx","webpack:///./src/components/account/collectionDetails.jsx","webpack:///./src/components/collection/digitalAssetTile.jsx","webpack:///./src/components/collection/digitalAssets.jsx","webpack:///./src/components/collection/collectionUtility.jsx","webpack:///./src/components/account/collection2.jsx","webpack:///./src/components/account/verify.jsx","webpack:///./src/components/home/auth.jsx","webpack:///./src/index.jsx","webpack:///./src/components/account/loginForm.jsx","webpack:///./src/components/throbber/loader.jsx","webpack:///./src/managers/Helpers.js","webpack:///./src/components/register/index.jsx","webpack:///./src/components/throbber/index.jsx","webpack:///./src/components/account/transferNFT.jsx","webpack:///./src/components/account/transferWallet.jsx","webpack:///./src/components/account/transferToggle.jsx","webpack:///./src/components/account/gallery.jsx","webpack:///./src/managers/Utility.js"],"names":["handleException","response","exception","isError","errorMessage","status","console","log","Ajax","url","passedPayload","passedHeaders","headers","payload","request","Request","Headers","mode","method","body","JSON","stringify","fetch","then","error","message","json","catch","token","Authorization","Error","UtilityList","slideshow","layout","noHeader","nftId","assetUtility","collectionUtility","onPlay","formattedUtilities","setFormattedUtilities","useState","showModal","setShowModal","selectedFile","setSelectedFile","showFileViewer","setFileViewerState","selectedVideo","setSelectedVideo","settings","dots","arrows","infinite","speed","slidesToShow","slidesToScroll","responsive","breakpoint","generateCommerceUrl","gatedCommerceId","e","preventDefault","generatedCommerceUrl","CreatorManager","generateGatedCommerceUrl","AccountManager","getToken","success","window","open","draftOrderUrl","toast","useEffect","concat","formatUtilities","loadAsset","assetUrl","assetType","getGatedAsset","gatedContent","setTimeout","gatedContentFile","getGatedContent","gatedContentId","contentType","fileUrl","className","isOpen","onBeforeClose","throbberText","href","onClick","src","alt","length","map","utility","utilityId","getUtilityType","utilityType","style","backgroundImage","gatedContents","thumbnail","utilityDescription","description","vouchers","voucherImageUrl","type","readOnly","value","voucherCode","voucher","navigator","clipboard","writeText","copyToClipboard","process","env","CUSTOM_COPY_ICON","width","genericPromotions","thumbnailUrl","linkUrl","target","rel","linkLabel","gate","gatedCommerces","productThumbnail","ecommerceProductDescription","ecommerceProductUrl","HomeHero","Component","constructor","props","super","setHeroHeight","hero","document","getElementById","height","innerHeight","parseCountdown","date","this","setState","countdownData","moment","unix","friendlyDate","format","learnMore","onLearnMore","goToFaq","onFaqButton","state","componentDidMount","data","BANNER_TYPE","addEventListener","drop","dateOpen","render","id","autoPlay","playsInline","loop","muted","HERO_BACKGROUND_VIDEO","default","kind","srcLang","dangerouslySetInnerHTML","__html","SITE_DESCRIPTION2","SITE_DESCRIPTION3","renderer","days","hours","minutes","seconds","completed","location","FullWidthImage","AzureMediaPlayer","options","autoplay","getAnnouncementsByBrand","brandId","get","apiUrl","MetamaskWallet","onConnect","onInitAddress","connect","account","chainId","ethereum","switchChain","addChain","useMetaMask","walletStatus","setWalletStatus","isConnecting","setIsConnecting","connectToEthereum","user","addr","Footer","isSticky","includes","FlowWallet","setUser","loggedIn","fcl","subscribe","onWalletConnection","AuthedState","UnauthenticatedState","onLogInAttempt","Login","SimpleModal","React","escFunction","keyCode","closeModal","componentDidUpdate","that","onpopstate","modal","isOffset","hideCloseButton","children","showLogo","theme","stopPropagation","config","billing","post","saveCardDetails","resetPassword","recoverPassword","resetToken","bearerToken","changePassword","verifyResetToken","login","mfaLogin","createUnverifiedAccount","setPaymentMethod","getSessionId","sessionId","sessionStorage","getItem","cookieSessionName","setSessionId","RISKX","setSid","setItem","replace","c","crypto","getRandomValues","Uint8Array","toString","addWallet","transferFreeNFt","claimNft","transferNFt","transferEdrop","transferToWallet","transferNFtNotification","cancelTransfer","getSelectedCard","cards","selectedCard","forEach","card","selected","cookieName","accountInfo","create","update","put","forceUpdate","getCollection","dropArray","newDropArray","newDropArrayObj","item","creator","creatorId","dropId","push","name","asset","nfts","getNftDetails","userSearch","searchTerm","emailSearch","email","encodeURIComponent","sendLoginEmail","getLoginToken","getPaymentMethod","getPaymentTokens","isLoggedIn","Cookies","isVerified","logout","remove","path","setLoginState","cookies","currentDate","Date","expiryDate","setHours","getHours","set","expires","generateFreeNft","getTransferDetails","tokenCode","generateApplePass","getFlatCollection","Container","getAccountDetails","transferToken","isFreeTransfer","localStorage","removeItem","split","onTransferError","transferNFT","isFree","transferType","verified","gtag","event_category","event_label","assetTypeString","DIGITAL_ASSET_TYPE","findTransferKey","nftToken","tokenType","Object","entries","obj","key","getDropData","countdownDate","dropData","getDrop","countDown","countDownDate","dropDetails","showContent","isLoading","pathname","checkForRiskified","transferKey","alreadyClaimed","onConfirm","onCancel","onError","position","autoClose","pauseOnHover","ConfirmTransfer","transfer","transferDetails","senderFirstName","senderLastName","creatorName","isEdrop","confirmTransfer","RouterListener","useLocation","go","Home","bodyHeight","scrollHeight","windowHeight","copyrightYear","getFullYear","COUNTDOWN_BACKGROUND","poster","HERO_BACKGROUND_VIDEO_COVER","buttonType","onRegisterSuccess","emailPattern","passwordRequirements","AccountRegister","validateForm","registerFirstname","registerLastname","registerEmail","registerPassword","registerConfirmPassword","registerDisplayname","registerPhoneNumber","agreeTerms","test","handleInputChange","onEnterKey","isMfa","mfaLogIn","handleCheckboxChange","isChecked","checked","register","firstname","lastname","username","password","telephone","site","protocol","host","Account","userId","PubSub","publish","prePopFields","firstName","lastName","getParameterByName","newName","newUrl","results","RegExp","exec","decodeURIComponent","prePopulateFromUrl","parseRegSessionObject","regObj","parseRegObj","parse","loginSuccess","loginFailed","openLoginModal","hasPreRegBonus","loginVerification","isCountdownOn","hasClaimed","isSuccess","classList","add","componentWillUnmount","onSuccess","onFail","onRegisterButton","htmlFor","maxLength","onChange","onKeyUp","autoComplete","PHONE_NUMBER_NOTE","EDropLanding","transferCode","setTransferCode","verifiedCode","setVerifiedCode","previewData","setPreviewData","setIsLoading","errorData","setErrorData","emailExists","setEmailExists","emailAddress","setEmailAddress","setAgreeTerms","clearAllTransferCookies","getTransferCodePreview","previewCode","registerObj","preview","enterCode","createAccount","checkEmailAddress","checkEmail","to","CUSTOM_EDROP_TITLE","assetVariation","variationName","CUSTOM_EDROP_SUBTITLE","placeholder","mediaFileUrl","mediaLocalIPFS","dateCreated","assetDescription","assetHTMLDesc","handleEmailChange","UtilityDisplay","nftUtility","formattedNFTUtilities","setFormattedNFTUtilities","utilities","getGatedVideo","index","promo","genericPromotionId","CUSTOM_CLAIM_OFFER","voucherId","productUrl","CollectionHero","filterOptions","onFilterSelect","tab","setTab","toggleTabs","filterType","filterLabel","backgroundColor","BRAND_COLOR","filterOption","label","Announcements","announcementsLength","setAnnouncementsLength","announcements","setAnnouncements","itemsToShow","setItemsToShow","getAnnouncements","AnnouncementsManager","announcement","announcementId","textContent","AssetDetails","setAsset","accountDetails","setAccountDetails","showPassModal","setShowPassModal","isPassGenerating","setIsPassGenerating","nftPass","setNftPass","openNav","setNavstate","transferSelector","toggleTransferSelectorModal","setUserTransferModal","isModalLoading","setModalLoadingState","walletTransfer","setWalletTransferModal","sortedUtility","setSortedUtility","useParams","getDetails","accountData","res","nft","allUtility","categorizedUtility","UtilityManager","categorizeAssetUtility","parseUtility","confirmCancel","hasPendingTransfer","cancelled","togglePassModal","passUri","onClose","doUpdate","walletAddress","withdrawAddress","transferSuccessful","onTransferToUser","onTransferToWallet","passTemplate","toggleNav","toggleTransferModal","contractAddress","getScanUrl","imageUrl","BrandWidget","getBlockchainType","blockchain","tokenId","number","truncateString","txn","dateStamp","totalAmount","buyItNowPrice","AssetFAQ","questions","setQuestions","faq","title","answer","cloneQuestions","toggleAnswer","LoginWidget","onLoginButton","onLogoutButton","logOut","TopNav","onPubSubEvent","showMobileNav","handleMobileNav","isCountdown","topnav","pageYOffset","createRisk","payloadData","assetPrice","purchase","gasFee","gas","tax","cartToken","createDecision","price","confirmPurchase","getSingleDropV2","assetVariationId","assetId","assetVariations","getSingleDrop","assets","drops","assetData","assetData2","dropData2","creatorData","dropUrl","assetId2","dropId2","asset2","drop2","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","keys","resolve","module","exports","HomeDrop","CardOnFile","cardDetails","brand","last4","expMonth","expYear","ethosInstance","currencyCode","accounts","parseInt","environment","fields","cardNumber","selector","separator","cvv","mask","input","color","PaySafeCardForm","saveCard","onCardEntry","savedCard","initPaysafe","cvvOnly","total","paymentHandleToken","singleUseCustomerToken","paysafe","setup","instance","show","paymentMethods","event","loadingText","tokenizationOptions","amount","merchantRefNum","getTime","transactionType","paymentType","paymentTokenFrom","openAs","threeDs","merchantUrl","useThreeDSecureVersion2","authenticationPurpose","deviceChannel","messageCategory","customerDetails","billingDetails","country","billingInfo","countryCode","zip","street","address","city","stateCode","profile","tokenize","result","optional","paymentMethod","BillingForm","getCardDetails","hasCardOnFile","selectCountry","val","selectRegion","region","billingAddress","billingCity","billingCode","updateDetails","billingChanges","hasBillingInfo","toggleTab","currentTab","updateCard","changeCreditCard","enteredCard","onCardSuccess","whiteListed","priorityOptions","stripeOptions","defaultOptionLabel","classes","ConfirmFreebie","HomeCountdown","AccountLogin","SlimHero","Register","ResetPassword","password1","password2","changedPassword","verifyToken","tokenParam","PasswordReset","changeTab","section","currentSection","TransferChecker","isAuthed","EDrop","transferCookie","HeathAboutEdrop","AllureAboutEdrop","AccountDetails","updateFirstname","updateLastname","updateEmail","updateUsername","updateTelephone","updatePassword","updateConfirmPassword","accountChanges","freshAccountDetails","AccountBilling","onBillingSuccess","modalMode","AccountPassword","passwordCurrent","passwordNew","currentPassword","newPassword","passwordConfirm","AccountWallet","updateFlowWallet","isLoggingIn","walletType","updateEthereumWallet","NftCard","onViewerSelect","onTransfer","onGenerateNftPass","transactionStatus","setTransactionStatus","utilityCollapse","setUtilityCollapse","detailsCollapse","setDetailsCollapse","flowscanUrl","polyscanUrl","toggleCollapse","content","formatThumbnail","imagePath","mediaMP4","mediaUrl","mediaThumbnailUrl","utilityValue","salesType","datePurchased","marginTop","CancelTransfer","AccountCollection","isDetailsPage","setDetailsPage","collection","setCollection","selectedNft","setSelectedNft","hasError","setHasError","updatedNft","setUpdatedNft","closeFileViewer","setTransferState","applePass","updateCollection","closeWalletTransferModal","cancelledTransfer","CollectionDetails","setNft","selectedTab","setSelectedTab","loadVideo","videoUrl","launchPDFViewer","DigitalAssetTile","setUtility","combinedUtility","slice","combineUtility","getUtilityIcon","getUtilityDescription","DigitalAssets","numAssets","setNumAssets","digitalAssets","setDigitalAssets","noAssets","setNoAssets","getDigitalAssets","getAssetType","CollectionUtility","utilityLabel","utilityList","setBrandId","setAllUtility","setFilterOptions","filteredUtility","setFilteredUtility","setFilterLabel","getAllBrandUtility","getAllUtility","setUtilityFilter","filterResults","sortUtility","parsedFilterOptions","filter","AccountVerify","Auth","Sentry","dsn","integrations","BrowserTracing","tracesSampleRate","ReactDOM","element","LoginForm","loginEmail","loginPassword","focusVerifcation","focus","logIn","showMFA","verifiedAccount","generateUnverifiedSession","loginToken","resetPass","sendResetEmail","resetEmail","resetSuccess","isUnverifiedAccount","noAccount","enableMFA","FullPageLoader","LOADER_VIDEO","LARGE_LOGO_INVERSE","isIOS","platform","userAgent","chainname","utilityName","ogString","len","substring","ethscanUrl","getScanName","blockchainId","scannerName","formatPayload","isEmailOnly","registerPhone","signUpUrl","checkForExistingUser","existingUser","submitForm","isReturningUser","hasSignedUp","returningUser","optInLogIn","onLoginRequest","PRE_REGISTRATION_EMAIL_ONLY","existingUserEmail","PRE_REGISTER_SUCCESS","Throbber","TransferNFT","confirmEmailAddress","changeStep","step","receivingUserEmail","receivingUserFirstname","receivingUserLastname","receivingUserMessage","transferred","confirmState","showTransferButton","selectedId","searchResults","transferLoading","disabled","TransferWallet","getGenerateCollectionScript","contractName","initTransfer","transferText","transferResult","transferSuccess","transactionId","createCollection","collectionName","txId","cadence","args","arg","t","payer","proposer","authorizations","limit","txStatus","loaderText","statusCode","contractLineNumber","updateAddress","updateWallet","transactionUrl","blockcainType","dateMinted","TransferToggle","Gallery","createGallery","galleryLength","galleryObj","galleryArray","i","gallery","utilityObj","getFilteredUtility"],"mappings":"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","file":"js/main.3d65e0ad76b7fde261bb.js","sourcesContent":["/**\n* Utility helper functions of making AJAX requests\n* TOC\n* 1. Post\n*/\n\n// checks if response contains error code\nconst handleException = function (response) {\n let exception = {\n isError: false,\n errorMessage: '',\n };\n\n if (response.status === 400) {\n exception = {\n isError: true,\n errorMessage: 'Oops. This endpoint returned a 400. Bad request.',\n };\n } else if (response.status === 401) {\n exception = {\n isError: true,\n errorMessage: 'User is unauthorized to view this content.',\n };\n } else if (response.status === 422) {\n exception = {\n isError: true,\n errorMessage: 'Oops. This endpoint returned a 422. Unprocessable entity.',\n };\n } else if (response.status === 404) {\n exception = {\n isError: true,\n errorMessage: 'Oops. This endpoint returned a 404. Please try again later.',\n };\n } else if (response.status === 500) {\n exception = {\n isError: true,\n errorMessage: 'Oops. This endpoint returned a 500. Please try again later.',\n };\n }\n\n if (exception.isError) {\n console.log('== Exception ==');\n console.log(response);\n }\n\n return exception;\n};\n\nclass Ajax {\n static post(url, passedPayload, passedHeaders) {\n const headers = passedHeaders || {};\n headers['Content-Type'] = 'application/json';\n const payload = passedPayload || {};\n\n const request = new Request(url, {\n headers: new Headers(headers),\n // credentials: 'include',\n mode: 'cors',\n method: 'POST',\n body: JSON.stringify(payload),\n });\n\n return fetch(request).then((response) => {\n const exception = handleException(response);\n if (exception.isError) {\n return {\n error: true,\n message: exception.errorMessage,\n };\n }\n return response.json();\n }).catch((error) => {\n console.log(error);\n });\n }\n\n static put(url, passedPayload, passedHeaders) {\n const headers = passedHeaders || {};\n headers['Content-Type'] = 'application/json';\n const payload = passedPayload || {};\n\n const request = new Request(url, {\n headers: new Headers(headers),\n // credentials: 'include',\n mode: 'cors',\n method: 'PUT',\n body: JSON.stringify(payload),\n });\n\n return fetch(request).then((response) => {\n const exception = handleException(response);\n if (exception.isError) {\n return {\n error: true,\n message: exception.errorMessage,\n };\n }\n return response.json();\n }).catch((error) => {\n console.log(error);\n });\n }\n\n static get(url, token, passedHeaders) {\n const headers = passedHeaders || {};\n headers['Content-Type'] = 'application/json';\n headers.Authorization = token ? 'Bearer ' + token : '';\n\n const request = new Request(url, {\n headers: new Headers(headers),\n // credentials: 'include',\n mode: 'cors',\n method: 'GET',\n });\n\n return fetch(request).then((response) => {\n const exception = handleException(response);\n if (exception.isError) {\n throw new Error(exception.errorMessage);\n } else {\n return response.json();\n }\n }).catch((error) => {\n console.log(error);\n });\n }\n}\n\nexport default Ajax;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React, { useState, useEffect } from 'react';\nimport { toast } from 'react-toastify';\nimport Slider from 'react-slick';\nimport { getUtilityType } from '../../managers/Helpers';\nimport AccountManager from '../../managers/Account';\nimport CreatorManager from '../../managers/Creator';\nimport SimpleModal from '../modal/modal';\nimport Throbber from '../throbber';\nimport AzureMediaPlayer from '../video/azureMediaPlayer';\nimport Gallery from '../account/gallery';\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\n\nfunction UtilityList({\n slideshow, layout, noHeader, nftId, assetUtility, collectionUtility, onPlay,\n}) {\n const [formattedUtilities, setFormattedUtilities] = useState([]);\n const [showModal, setShowModal] = useState(false);\n const [selectedFile, setSelectedFile] = useState(null);\n const [showFileViewer, setFileViewerState] = useState(false);\n const [selectedVideo, setSelectedVideo] = useState(null);\n\n const settings = {\n dots: false,\n arrows: false,\n infinite: false,\n speed: 500,\n slidesToShow: 2,\n slidesToScroll: 1,\n responsive: [\n {\n breakpoint: 920,\n settings: {\n slidesToShow: 2,\n },\n },\n {\n breakpoint: 620,\n settings: {\n slidesToShow: 1,\n },\n },\n ],\n };\n\n const generateCommerceUrl = async (gatedCommerceId, e) => {\n e.preventDefault();\n setShowModal(true);\n const generatedCommerceUrl = await CreatorManager.generateGatedCommerceUrl(gatedCommerceId, nftId, AccountManager.getToken());\n if (generatedCommerceUrl && generatedCommerceUrl.success) {\n window.open(generatedCommerceUrl.draftOrderUrl, '_blank');\n setShowModal(false);\n } else {\n toast.error(generatedCommerceUrl.message || 'Oops. Something went wring generating your link. Please try again later.');\n setShowModal(false);\n }\n };\n\n const formatUtilities = (assetUtility, collectionUtility) => {\n setFormattedUtilities(assetUtility.concat(collectionUtility));\n };\n\n useEffect(() => {\n formatUtilities(assetUtility, collectionUtility);\n }, [assetUtility, collectionUtility]);\n\n const closeFileViewer = () => {\n setFileViewerState(false);\n setSelectedVideo(null);\n setSelectedFile(null);\n };\n\n const loadAsset = async (assetUrl, assetType) => {\n setFileViewerState(true);\n if (assetType === 'image') {\n setSelectedFile(assetUrl);\n } else {\n setSelectedVideo(assetUrl);\n }\n };\n\n const getGatedAsset = async (gatedContent, e) => {\n e.preventDefault();\n setShowModal(true);\n setTimeout(async () => {\n const gatedContentFile = await AccountManager.getGatedContent(AccountManager.getToken(), gatedContent.gatedContentId);\n setShowModal(false);\n if (gatedContentFile && gatedContentFile.success) {\n if (gatedContent.contentType === 1) {\n loadAsset(gatedContentFile.fileUrl, 'image');\n } else {\n loadAsset(gatedContentFile.fileUrl, 'video');\n }\n } else {\n toast.error('Oops. Something went wrong. Please try again later.');\n }\n }, 3000);\n };\n\n const copyToClipboard = (voucher, e) => {\n e.preventDefault();\n navigator.clipboard.writeText(voucher.voucherCode);\n toast.success('Voucher has been copied to clipboard.');\n };\n\n useEffect(() => {\n console.log('=== combined utility ===');\n console.log(formattedUtilities);\n }, [formattedUtilities]);\n\n return (\n
\n setShowModal(false)}>\n \n \n {showFileViewer\n && (\n
\n
\n closeFileViewer()}>\n \"Close\n \n\n {selectedFile\n && (\n // \n
\n
\"\"
\n
\n )}\n\n {selectedVideo\n && }\n\n {/* */}\n\n
\n
\n )}\n {!noHeader\n &&

Benefits

}\n\n {slideshow && formattedUtilities.length > 0\n && (\n
\n \n {formattedUtilities.map((utility) => (\n
\n {getUtilityType(utility.utilityType) === 'Video Content'\n && (\n
\n \n {/* getGatedAsset(utility.gatedContents[0], e)}>View media */}\n
\n
getGatedAsset(utility.gatedContents[0], e)}>{utility.utilityDescription}
\n
getGatedAsset(utility.gatedContents[0], e)}>{utility.gatedContents[0].description}
\n
\n )}\n
\n ))}\n \n
\n )}\n {!slideshow\n && (\n
\n { formattedUtilities.length > 0\n && formattedUtilities.map((utility) => (\n
\n {/* {getUtilityType(utility.utilityType)} */}\n {getUtilityType(utility.utilityType) === 'Coupon Voucher'\n && (\n
\n \n
\n
{utility.utilityDescription}
\n
{utility.vouchers[0].description}
\n
\n \n copyToClipboard(utility.vouchers[0], e)}>\n {process.env.CUSTOM_COPY_ICON\n ? \"copy\"\n : \"copy\"}\n \n \n
\n
\n )}\n {getUtilityType(utility.utilityType) === 'Generic Utility'\n && (\n
\n \n
\n
{utility.utilityDescription}
\n
{utility.genericPromotions[0].description}
\n {utility.genericPromotions[0].linkUrl\n && (\n
\n {utility.genericPromotions[0].linkLabel}\n
\n )}\n
\n )}\n {getUtilityType(utility.utilityType) === 'Video Content'\n && (\n
\n getGatedAsset(gate.gatedContentId, e)}\n style={{\n backgroundImage: 'url(' + utility.gatedContents[0].thumbnail + ')',\n }}>\n
\n
getGatedAsset(utility.gatedContents[0], e)}>{utility.utilityDescription}
\n
{utility.gatedContents[0].description}
\n
\n {utility.gatedContents[0].contentType === 1\n ? getGatedAsset(utility.gatedContents[0], e)}>View images\n : getGatedAsset(utility.gatedContents[0], e)}>Watch now}\n
\n \n )}\n {getUtilityType(utility.utilityType) === 'Gated Commerce'\n && (\n
\n \n
\n
{utility.utilityDescription}
\n
{utility.gatedCommerces[0].ecommerceProductDescription}
\n {utility.gatedCommerces[0].contentType === 1 && utility.gatedCommerces[0].ecommerceProductUrl\n && (\n
\n Claim now\n
\n )}\n {utility.gatedCommerces[0].contentType === 2\n && (\n
\n generateCommerceUrl(utility.gatedCommerces[0].gatedCommerceId, e)} href=\"#\" className=\"button-collection\">Claim now\n
\n )}\n \n )}\n \n ))}\n \n )}\n \n );\n}\n\nexport default UtilityList;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Countdown from 'react-countdown';\nimport moment from 'moment-mini';\nimport { Link } from 'react-router-dom';\nimport { urlEncode } from '@sentry/utils';\n\nclass HomeHero extends Component {\n constructor(props) {\n super(props);\n this.state = {\n countdownData: null,\n friendlyDate: null,\n };\n }\n\n setHeroHeight = () => {\n const hero = document.getElementById('landingHero');\n if (hero) {\n hero.style.height = window.innerHeight + 'px';\n }\n }\n\n parseCountdown = (date) => {\n this.setState({\n countdownData: moment(date).unix() * 1000,\n friendlyDate: moment(date).format('ha on dddd, MMMM D, YYYY'),\n });\n }\n\n componentDidMount() {\n const { data } = this.props;\n const that = this;\n if (process.env.BANNER_TYPE !== 'slim') {\n this.setHeroHeight();\n window.addEventListener('resize', that.setHeroHeight);\n }\n that.parseCountdown(data.drop.dateOpen);\n }\n\n learnMore = (e) => {\n const { onLearnMore } = this.props;\n e.preventDefault();\n onLearnMore();\n }\n\n goToFaq = (e) => {\n const { onFaqButton } = this.props;\n e.preventDefault();\n onFaqButton();\n }\n\n render() {\n const { type } = this.props;\n const { countdownData } = this.state;\n const renderer = ({\n days, hours, minutes, seconds, completed,\n }) => {\n if (completed) {\n window.location.href = '/';\n }\n // Render a countdown\n return (\n
\n
\n {days}\n {' '}\n days\n
\n
\n {hours}\n {' '}\n hours\n
\n
\n {minutes}\n {' '}\n mins\n
\n
\n {seconds}\n {' '}\n secs\n
\n
\n );\n };\n return (\n
\n \n \n
\n {type === 'countdown' && process.env.HERO_LOGO\n &&
\"\"
}\n
\n {/* TODO: make this part of the env file */}\n

{process.env.HERO_TITLE}

\n

{process.env.HERO_SUBTITLE}

\n
\n
\n
\n
\n
\n

{process.env.SITE_TITLE}

\n {/*
\n this.learnMore(e)}>Learn More\n
*/}\n \n

\n {process.env.SITE_DESCRIPTION2\n && (\n \n

\n )}\n {process.env.SITE_DESCRIPTION3\n && (\n \n

\n )}\n {type === 'countdown'\n && (\n
\n {countdownData\n && (\n \n )}\n
\n )}\n {/* {type === 'countdown'\n ? this.learnMore(e)}>Learn More\n : View Details} */}\n
\n
\n \n );\n }\n}\n\nHomeHero.propTypes = {\n data: PropTypes.objectOf(PropTypes.object),\n type: PropTypes.string,\n onLearnMore: PropTypes.func,\n onFaqButton: PropTypes.func,\n};\n\nexport default HomeHero;\n","import React, { Component } from 'react';\n\nclass FullWidthImage extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {}\n\n render() {\n return (\n \n  \n \n );\n }\n}\n\nexport default FullWidthImage;\n","import React, { useState } from 'react';\nimport { AzureMP } from 'react-azure-mp';\n\nconst AzureMediaPlayer = ({ src }) => {\n const [showModal, setShowModal] = useState(true);\n return (\n
\n {src\n && (\n \n )}\n
\n );\n};\nexport default AzureMediaPlayer;\n","import moment from 'moment-mini';\nimport Ajax from './Ajax';\n\n/**\n* Utility helper for Account functions\n*/\n\nclass Announcements {\n constructor() {\n this.apiUrl = process.env.SERVER_URL;\n }\n\n getAnnouncementsByBrand = (brandId, token) => {\n const that = this;\n return Ajax.get(that.apiUrl + 'posts/Brand?creatorId=' + brandId, token)\n .then((data) => data)\n .catch((error) => {\n throw error;\n });\n }\n}\n\nexport default new Announcements();\n","import React, { useState, useEffect } from 'react';\nimport { useMetaMask } from 'metamask-react';\nimport { polygonParams, polygonTest } from '../../config/polygon';\n\nconst MetamaskWallet = ({\n type, onConnect, onInitAddress, mode,\n}) => {\n const {\n status, connect, account, chainId, ethereum, switchChain, addChain,\n } = useMetaMask();\n const [walletStatus, setWalletStatus] = useState(null);\n const [isConnecting, setIsConnecting] = useState(false);\n\n const polygonNetworkParams = process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? polygonTest : polygonParams;\n\n const connectToEthereum = () => {\n setIsConnecting(true);\n connect();\n };\n\n useEffect(() => {\n setWalletStatus(status);\n console.log('walletStatus:');\n const user = {\n addr: account,\n };\n if (status === 'connected' && isConnecting) {\n setIsConnecting(false);\n onConnect(user);\n } else if (status === 'connected') {\n console.log('initialized component with a wallet address');\n if (onInitAddress) {\n onInitAddress(user);\n }\n } else if (status === 'notConnected') {\n console.log('Wallet was disconnected');\n if (onInitAddress) {\n onInitAddress(user);\n }\n }\n console.log(status);\n }, [status]);\n\n // if (status === 'notConnected') return \"\";\n // if (status === 'connecting') return \"\";\n // if (status === 'connected') return \"\";\n\n return (\n
\n {type === 'nav'\n ? (\n
\n {walletStatus === 'connected'\n ? \"\"\n : connectToEthereum()} className=\"button-metamask\" alt=\"Connect Metamask wallet\">\"\"}\n
\n )\n : (\n
\n {mode !== 'transfer'\n && (\n
\n {walletStatus === 'connected'\n && (\n
\n Your connected Metamask wallet:\n {' '}\n {account}\n {/*
\n Chain:\n {' '}\n {chainId}\n
\n */}\n
\n )}\n
\n )}\n {walletStatus === 'notConnected'\n && }\n {walletStatus === 'unavailable'\n && Install Metamask}\n
\n )}\n
\n );\n};\nexport default MetamaskWallet;\n","import React, { Component } from 'react';\n\nclass Footer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isSticky: false,\n };\n }\n\n componentDidMount() {\n if (window.location.href.includes('account/')) {\n this.setState({\n isSticky: true,\n });\n }\n }\n\n render() {\n const { isSticky } = this.state;\n return (\n
\n
\n {process.env.SMART_CONTRACT\n ? (\n
\n View smart contract on\n {' '}\n {process.env.SMART_CONTRACT_CHAIN}\n .\n
\n )\n :
 
}\n
\n Powered by\n {' '}\n ethos\n .\n {/* {process.env.CREATED_BY_NAME\n && (\n \n  | Created by\n {' '}\n {process.env.CREATED_BY_NAME}\n .\n \n )} */}\n
\n \n
\n
\n );\n }\n}\n\nexport default Footer;\n","import '../../config/flow';\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport * as fcl from '@onflow/fcl';\n\nexport default function FlowWallet(props) {\n const [user, setUser] = useState({ loggedIn: null });\n\n useEffect(() => {\n fcl.currentUser.subscribe(setUser);\n }, []);\n\n useEffect(() => {\n const { onInitAddress, onWalletConnection } = props;\n if (onInitAddress) {\n onInitAddress(user);\n }\n if (onWalletConnection) {\n onWalletConnection(user);\n }\n }, [user]);\n\n const Login = (e) => {\n const { onLogInAttempt } = props;\n e.preventDefault();\n fcl.logIn();\n onLogInAttempt();\n };\n\n const GetUser = () => {\n const { onWalletConnection } = props;\n onWalletConnection(user);\n };\n\n const AuthedState = () => {\n const { mode } = props;\n // GetUser();\n return (\n
\n {mode !== 'transfer'\n && (\n
\n
\n Your wallet address: \n {user?.addr ?? 'No Address'}\n
\n \n
\n )}\n
\n );\n };\n\n const UnauthenticatedState = () => (\n
\n Login(e)}>Connect a flow wallet\n {/* */}\n
\n );\n\n return (\n
\n {user.loggedIn\n ? \n : }\n
\n );\n}\n\nFlowWallet.propTypes = {\n onWalletConnection: PropTypes.func,\n onLogInAttempt: PropTypes.func,\n onInitAddress: PropTypes.func,\n};\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nexport default class SimpleModal extends React.Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n closeModal(e) {\n const { onBeforeClose } = this.props;\n if (e) {\n e.preventDefault();\n }\n if (onBeforeClose) {\n onBeforeClose(e);\n }\n }\n\n escFunction = (e) => {\n const { onBeforeClose } = this.props;\n if (e.keyCode === 27) {\n onBeforeClose(e);\n }\n }\n\n componentDidUpdate() {\n const { onBeforeClose } = this.props;\n const that = this;\n if (onBeforeClose) {\n window.onpopstate = () => {\n that.props.onBeforeClose();\n };\n }\n }\n\n componentDidMount() {\n document.addEventListener('keyup', this.escFunction, false);\n }\n\n render() {\n let modal = null;\n const {\n isOffset, hideCloseButton, children, isOpen, showLogo, theme,\n } = this.props;\n if (isOpen) {\n const css = 'body {overflow:hidden}';\n modal = (\n
\n
\n
{ e.stopPropagation(); }}>\n
\n {children}\n
\n { !hideCloseButton\n && (\n this.closeModal(e)}>\n \"Close\n \n )}\n {showLogo\n && (\n
\n \"ethos\"\n
\n )}\n
\n
\n \n
\n );\n }\n return modal;\n }\n}\n\nSimpleModal.propTypes = {\n isOpen: PropTypes.bool,\n onBeforeClose: PropTypes.func,\n children: PropTypes.string,\n theme: PropTypes.string,\n isOffset: PropTypes.string,\n hideCloseButton: PropTypes.string,\n showLogo: PropTypes.bool,\n};\n","import { config } from '@onflow/fcl';\n\n// config({\n// 'accessNode.api': process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://rest-testnet.onflow.org' : 'https://rest-mainnet.onflow.org',\n// 'discovery.wallet': process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://fcl-discovery.onflow.org/testnet/authn' : 'https://fcl-discovery.onflow.org/authn',\n\n// });\nif (process.env.BLOCKCHAIN_ENVIRONMENT === 'test') {\n config(\n {\n 'flow.network': 'testnet',\n 'accessNode.api': 'https://rest-testnet.onflow.org',\n 'discovery.wallet': 'https://fcl-discovery.onflow.org/testnet/authn',\n 'app.detail.title': process.env.SITE_TITLE,\n 'app.detail.icon':\n 'https://ethos.mypinata.cloud/ipfs/QmeHB7nq73T3X41s4FFuYj2boxPEWybfdPx9bcbVLLWFst/EthosLogo.jpeg',\n '0xEthosLilico': '0xeaf1bb3f70a73336',\n '0xEthosBlocto': '0xd8144e7c81e68eb9',\n '0xEthosDeployer': '0x5c9d115a7a44b304',\n '0xFlowStandards': '0x631e88ae7f1d7c20', // NonFungibleToken and Metadata interface\n '0xFlowToken': '0x7e60df042a9c0868',\n '0xFlowFungibleToken': '0x9a0766d93b6608b7',\n },\n );\n} else {\n config(\n {\n 'flow.network': 'mainnet',\n 'accessNode.api': 'https://rest-mainnet.onflow.org',\n 'discovery.wallet': 'https://fcl-discovery.onflow.org/authn',\n 'app.detail.title': process.env.SITE_TITLE,\n 'app.detail.icon':\n 'https://ethos.mypinata.cloud/ipfs/QmeHB7nq73T3X41s4FFuYj2boxPEWybfdPx9bcbVLLWFst/EthosLogo.jpeg',\n '0xEthosAdmin': '0x6a8a6bd12143eaa5',\n '0xEthosDeployer': '0xf92e92030f2701df',\n '0xFlowStandards': '0x1d7e57aa55817448', // NonFungibleToken and Metadata interface\n '0xFlowToken': '0x1654653399040a61',\n '0xFlowFungibleToken': '0xf233dcee88fe0abe',\n },\n );\n}\n","import Cookies from 'universal-cookie';\nimport { drop } from 'lodash';\nimport Ajax from './Ajax';\n\n/**\n* Utility helper for Account functions\n*/\n\nclass Account {\n constructor() {\n this.cookieName = '__ethosid';\n this.cookieSessionName = '__ethossession';\n this.accountInfo = null;\n this.apiUrl = process.env.SERVER_URL;\n }\n\n create(url, payload, token) {\n // this should create an account\n // and it should return a bearer token\n const that = this;\n return Ajax.post(url, payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => {\n // PubSub.publish('account_updated');\n that.accountInfo = data;\n return data;\n })\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n billing = (url, payload, token) => Ajax.post(url, payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n saveCardDetails = (url, payload, token) => Ajax.post(url, payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n })\n\n resetPassword = (payload) => Ajax.post(this.apiUrl + 'account/forgotpass', payload, null)\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n recoverPassword = (payload, resetToken, bearerToken) => Ajax.post(this.apiUrl + 'account/resetpass/' + resetToken, payload, { Authorization: bearerToken ? 'Bearer ' + bearerToken : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n changePassword = (payload, token) => Ajax.post(this.apiUrl + 'account/updatepass', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n verifyResetToken = (token) => Ajax.post(this.apiUrl + 'account/resetpassword/verify/' + token, null)\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n update(payload, token) {\n // this should create an account\n // and it should return a bearer token\n return Ajax.put(this.apiUrl + 'account/update', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n login = (payload) => Ajax.post(this.apiUrl + 'account/authenticate', payload)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n })\n\n mfaLogin = (payload) => Ajax.post(this.apiUrl + 'account/mfa', payload)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n })\n\n createUnverifiedAccount = (payload) => Ajax.post(this.apiUrl + 'account/register/unverified', payload)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n })\n\n get(token, forceUpdate) {\n const that = this;\n if (this.accountInfo !== null && !forceUpdate) {\n return this.accountInfo;\n }\n return Ajax.get(this.apiUrl + 'account', token)\n .then((data) => {\n // that._accountInfo = data;\n // that._aid = that._accountInfo.aid;\n // localStorage.setItem(AID,that._aid);\n // PubSub.publish('account_updated');\n // return that._accountInfo;\n that.accountInfo = data;\n return data;\n })\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n getCollection(token) {\n return Ajax.get(this.apiUrl + 'wallet/collection', token)\n .then((data) => {\n const dropArray = [];\n const newDropArray = [];\n let newDropArrayObj = {};\n data.forEach((item) => {\n if ((item.creator.creatorId === process.env.CREATOR_ID) || process.env.CREATOR_SUBDOMAIN === 'account') {\n if (!dropArray.includes(item.drop.dropId)) {\n dropArray.push(item.drop.dropId);\n newDropArrayObj = {\n dropId: item.drop.dropId,\n name: item.asset.name,\n nfts: [],\n };\n newDropArray.push(newDropArrayObj);\n newDropArrayObj = {};\n }\n }\n });\n data.forEach((item) => {\n newDropArray.forEach((drop) => {\n if (drop.dropId === item.drop.dropId) {\n drop.nfts.push(item);\n }\n });\n });\n\n return newDropArray;\n })\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n getGatedContent(token, utilityId) {\n return Ajax.get(this.apiUrl + 'utility/gated-content?gatedContentId=' + utilityId, token)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n getNftDetails(token, nftId) {\n return Ajax.get(this.apiUrl + 'nft/' + nftId, token)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n userSearch(token, searchTerm) {\n return Ajax.get(this.apiUrl + 'user/search/' + searchTerm, token)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n emailSearch(token, email) {\n return Ajax.post(this.apiUrl + 'account/emailexists?email=' + encodeURIComponent(email), null, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n sendLoginEmail(payload) {\n return Ajax.post(this.apiUrl + 'account/authenticate/sendlink', payload)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n getLoginToken(payload) {\n return Ajax.post(this.apiUrl + 'account/authenticate/link', payload)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n getPaymentMethod(token) {\n return Ajax.get(this.apiUrl + 'payment/method', token)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n getPaymentTokens(token) {\n return Ajax.get(this.apiUrl + 'payment/PaymentTokens', token)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n setPaymentMethod = (token, payload) => Ajax.post(this.apiUrl + 'payment/method', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n })\n\n isLoggedIn() {\n const cookies = new Cookies();\n if (cookies.get(this.cookieName)) {\n return true;\n }\n return false;\n }\n\n isVerified() {\n if (this.accountInfo && this.accountInfo.isVerified) {\n return true;\n }\n return false;\n }\n\n logout() {\n const cookies = new Cookies();\n cookies.remove(this.cookieName, { path: '/' });\n setTimeout(() => {\n window.location = '/';\n }, 200);\n }\n\n getSessionId = () => {\n let sessionId = null;\n if (sessionStorage.getItem(this.cookieSessionName)) {\n sessionId = sessionStorage.getItem(this.cookieSessionName);\n }\n return sessionId;\n }\n\n setSessionId = () => {\n function uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n }\n if (!sessionStorage.getItem(this.cookieSessionName)) {\n sessionStorage.setItem(this.cookieSessionName, uuidv4());\n RISKX.setSid(sessionStorage.getItem(this.cookieSessionName));\n console.log('=== setting RISKX session Id to: ' + sessionStorage.getItem(this.cookieSessionName));\n } else {\n RISKX.setSid(sessionStorage.getItem(this.cookieSessionName));\n console.log('=== setting RISKX session Id to: ' + sessionStorage.getItem(this.cookieSessionName));\n }\n }\n\n setLoginState(token) {\n const cookies = new Cookies();\n const currentDate = new Date();\n const expiryDate = new Date(currentDate.setHours(currentDate.getHours() + 1));\n cookies.set(this.cookieName, token || 'no token set', { path: '/', expires: expiryDate });\n }\n\n getToken() {\n const cookies = new Cookies();\n return cookies.get(this.cookieName);\n }\n\n addWallet = (payload, token) => Ajax.post(this.apiUrl + 'wallet/AddWallet', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n })\n\n generateFreeNft(token, dropId) {\n return Ajax.get(this.apiUrl + 'transfer/FreeNftToken?dropId=' + dropId, token)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n transferFreeNFt = (token, payload) => Ajax.post(this.apiUrl + 'transfer/FreeNftToken', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n claimNft = (payload, token) => Ajax.post(this.apiUrl + 'wallet/claim', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n })\n\n transferNFt = (token, payload) => Ajax.post(this.apiUrl + 'transfer/verify', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n transferEdrop = (token, payload) => Ajax.post(this.apiUrl + 'transfer/FreeNftToken', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n transferToWallet = (token, payload) => Ajax.post(this.apiUrl + 'transfer/Withdraw', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n transferNFtNotification = (token, payload) => Ajax.post(this.apiUrl + 'transfer/notification', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n cancelTransfer = (token, payload) => Ajax.post(this.apiUrl + 'transfer/cancel', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n })\n\n getTransferDetails(token, tokenCode) {\n return Ajax.get(this.apiUrl + 'transfer/verify?transferToken=' + tokenCode, token)\n .then((data) => data)\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n getSelectedCard = (cards) => {\n let selectedCard = null;\n if (!cards) {\n return false;\n }\n cards.forEach((card) => {\n if (card.selected) {\n selectedCard = card;\n }\n });\n return selectedCard;\n }\n\n generateApplePass(token, payload) {\n return Ajax.post(this.apiUrl + 'pass', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => {\n console.log('=== apple pass ===');\n console.log(data);\n return data;\n })\n .catch((error) => {\n throw error;\n });\n }\n\n getFlatCollection(token, brandId) {\n return Ajax.get(this.apiUrl + 'wallet/collection?creatorId=' + brandId, token)\n // return Ajax.get(this.apiUrl + 'wallet/collection', token)\n .then((data) => {\n const dropArray = [];\n data.forEach((item) => {\n // if (item.creator.creatorId === brandId) {\n // dropArray.push(item);\n // }\n dropArray.push(item);\n });\n console.log('=== GET FLAT COLLECTION ===');\n console.log(dropArray);\n return dropArray;\n })\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n}\n\nexport default new Account();\n","import React, { Component } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { toast, ToastContainer } from 'react-toastify';\nimport 'react-toastify/dist/ReactToastify.css';\nimport TopNav from 'components/navigation/top-nav';\nimport Footer from 'components/navigation/footer';\nimport FullPageLoader from 'components/throbber/loader';\nimport AccountManager from 'managers/Account';\nimport SimpleModal from 'components/modal/modal';\nimport CreatorManager from 'managers/Creator';\nimport CookieConsent from 'react-cookie-consent';\nimport moment from 'moment-mini';\nimport ConfirmTransfer from './components/transfer/confirmTransfer';\nimport RouterListener from './components/router/routerListener';\n\nclass Container extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n dropDetails: null,\n showContent: false,\n showModal: false,\n mode: '',\n currentDate: moment().unix() * 1000,\n isFreeTransfer: false,\n };\n }\n\n getAccountDetails = async () => {\n await AccountManager.get(AccountManager.getToken());\n }\n\n cancelTransfer = (transferToken) => {\n const { isFreeTransfer } = this.state;\n if (isFreeTransfer) {\n localStorage.removeItem(process.env.CREATOR_SUBDOMAIN + 'FreeToken');\n localStorage.removeItem(process.env.CREATOR_SUBDOMAIN + 'Countdown');\n this.setState({\n showModal: false,\n });\n } else {\n sessionStorage.removeItem('NFT_TRANSFER_' + transferToken);\n // remove query string if it exists\n if (window.location.href.includes('?')) {\n window.location.href = window.location.href.split('?')[0];\n } else {\n window.location.href = '/';\n }\n }\n }\n\n onTransferError = (transferToken, message) => {\n toast.error(message);\n sessionStorage.removeItem('NFT_TRANSFER_' + transferToken);\n this.setState({\n showModal: false,\n });\n }\n\n transferNFT = async (transferToken, isFree, transferType) => {\n const payload = {\n transferToken,\n };\n let verified;\n if (isFree) {\n verified = await AccountManager.transferFreeNFt(AccountManager.getToken(), payload);\n } else if (transferType === 'eDrop') {\n verified = await AccountManager.transferEdrop(AccountManager.getToken(), payload);\n } else {\n verified = await AccountManager.transferNFt(AccountManager.getToken(), payload);\n }\n if (verified && verified.success) {\n if (isFree) {\n localStorage.removeItem(process.env.CREATOR_SUBDOMAIN + 'FreeToken');\n localStorage.setItem(process.env.CREATOR_SUBDOMAIN + 'PreRegTokenClaimed', true);\n } else {\n sessionStorage.removeItem('NFT_TRANSFER_' + transferToken);\n }\n gtag('event', process.env.CREATOR_SUBDOMAIN + '_edrop', { // eslint-disable-line\n event_category: process.env.CREATOR_SUBDOMAIN + '_edrop_success',\n event_label: 'User transferred a ' + process.env.CREATOR_SUBDOMAIN + ' eDrop NFT',\n });\n localStorage.setItem('NFT_TOKEN_TRANSFERRED_' + transferToken, transferToken);\n this.setState({\n showModal: false,\n });\n const assetTypeString = process.env.DIGITAL_ASSET_TYPE || 'digital asset';\n toast.success('Successfully completed transfer. Your ' + assetTypeString + ' should now be available on your collection page.');\n } else {\n sessionStorage.removeItem('NFT_TRANSFER_' + transferToken);\n this.setState({\n showModal: false,\n });\n toast.error(verified && verified.message ? verified.message : 'Sorry. This transfer is no longer available.');\n }\n }\n\n findTransferKey = () => {\n let nftToken = null;\n let tokenType = null;\n Object.entries(sessionStorage).map((obj) => {\n const key = obj[0];\n if (key.includes('NFT_TRANSFER')) {\n nftToken = key;\n tokenType = 'transfer';\n }\n return true;\n });\n Object.entries(localStorage).map((obj) => {\n const key = obj[0];\n if (key.includes('FreeToken')) {\n if (obj[1] !== 'already claimed') {\n nftToken = key;\n tokenType = 'free';\n }\n }\n return true;\n });\n return {\n token: nftToken,\n tokenType,\n };\n }\n\n getDropData = async () => {\n const that = this;\n const { currentDate } = this.state;\n const dropData = await CreatorManager.getDrop();\n let countdownDate;\n // Check if dropData.drop has a countdown set. If it doesn, always display the countdown page\n if (dropData.drop.countDown && dropData.drop.countDown.countDownDate) {\n countdownDate = moment(dropData.drop.countDown.countDownDate).unix() * 1000;\n }\n if (countdownDate > currentDate && (!window.location.href.includes('login') && !window.location.href.includes('reset') && !window.location.href.includes('register') && !window.location.href.includes('account'))) {\n window.location.pathname = '/countdown';\n } else if (dropData) {\n that.setState({\n dropDetails: dropData,\n showContent: true,\n isLoading: false,\n });\n }\n }\n\n checkForRiskified = () => {\n const that = this;\n if (typeof RISKX === 'undefined') {\n console.log('RISKX failed to initialize.');\n setTimeout(() => {\n that.checkForRiskified();\n }, 100);\n } else {\n AccountManager.setSessionId();\n }\n }\n\n componentDidMount = async () => {\n this.checkForRiskified();\n // check if the user is logged in. If they are, grab the account details\n let transferKey = null;\n // check if this transferCode has already been claimed\n let alreadyClaimed = false;\n if (AccountManager.isLoggedIn()) {\n if (this.findTransferKey()) {\n transferKey = this.findTransferKey();\n if (localStorage.getItem('NFT_TOKEN_TRANSFERRED_' + sessionStorage.getItem(transferKey.token))) {\n alreadyClaimed = true;\n }\n if (!alreadyClaimed) {\n if (transferKey.tokenType === 'transfer') {\n this.setState({\n transferToken: sessionStorage.getItem(transferKey.token),\n });\n if (sessionStorage.getItem(transferKey.token)) {\n this.setState({\n showModal: true,\n mode: 'confirmTransfer',\n isFreeTransfer: transferKey.tokenType === 'free',\n });\n }\n } else {\n this.setState({\n transferToken: localStorage.getItem(transferKey.token),\n });\n if (localStorage.getItem(transferKey.token)) {\n this.setState({\n showModal: true,\n mode: 'confirmTransfer',\n isFreeTransfer: transferKey.tokenType === 'free',\n });\n }\n }\n } else {\n sessionStorage.removeItem(transferKey.token);\n }\n }\n await this.getAccountDetails();\n }\n\n // TODO: Get the drop details now\n if (process.env.E_DROP_ONLY !== 'true') {\n await this.getDropData();\n } else {\n this.setState({\n showContent: true,\n isLoading: false,\n });\n }\n }\n\n render() {\n const {\n isFreeTransfer, isLoading, dropDetails, showContent, showModal, mode, transferToken,\n } = this.state;\n return (\n
\n \n this.setState({ showModal: false })}>\n {mode === 'confirmTransfer'\n && (\n this.transferNFT(token, isFree, transferType)}\n onCancel={(token) => this.cancelTransfer(token)}\n onError={(token, message) => this.onTransferError(token, message)} />\n )}\n \n {isLoading\n ? (\n
\n \n
\n )\n : (\n
\n \n \n {showContent && !showModal\n && }\n {process.env.CREATOR_SUBDOMAIN !== 'account'\n &&
}\n \n ethos\n {' '}\n uses cookies to provide necessary website functionality,\n improve your experience and analyze our traffic. By using our website, you agree to \n our privacy policy\n {' '}\n and our cookies usage.\n \n \n
\n )}\n
\n );\n }\n}\n\nexport default Container;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { toast } from 'react-toastify';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\n\nclass ConfirmTransfer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n transferDetails: null,\n assetUrl: null,\n isEdrop: false,\n isError: false,\n };\n }\n\n componentDidMount = async () => {\n const { nftToken, isFree, onError } = this.props;\n let transfer;\n if (isFree) {\n this.setState({\n isLoading: false,\n transferDetails: {},\n });\n } else {\n transfer = await AccountManager.getTransferDetails(AccountManager.getToken(), nftToken);\n }\n if (transfer) {\n this.setState({\n transferDetails: {\n senderFirstName: transfer.senderFirstName,\n senderLastName: transfer.senderLastName,\n message: transfer.message,\n transferType: transfer.tokenType,\n creatorName: transfer.creatorName,\n },\n assetUrl: transfer.assetUrl,\n isLoading: false,\n isEdrop: transfer.tokenType,\n }, () => {\n console.log(transfer.transferDetails);\n });\n } else {\n this.setState({\n isLoading: false,\n isError: true,\n });\n // onError(nftToken, transfer && transfer.message ? transfer.message : 'Oops. Something went wrong. Please try again later.');\n }\n }\n\n confirmTransfer = () => {\n const { isFree, nftToken, onConfirm } = this.props;\n const { isEdrop } = this.state;\n this.setState({\n isLoading: true,\n });\n \n onConfirm(nftToken, isFree, isEdrop);\n }\n\n render() {\n const {\n isFree, nftToken, onConfirm, onCancel,\n } = this.props;\n const {\n isError, isEdrop, isLoading, transferDetails, assetUrl,\n } = this.state;\n return (\n
\n {isLoading\n && }\n {transferDetails\n && (\n
\n {isFree\n ? (\n
\n {process.env.SITE_NAME}\n {' '}\n has sent you a\n {' '}\n {process.env.DIGITAL_ASSET_TYPE || 'digital asset'}\n .\n
\n )\n : (\n
\n {transferDetails.transferType === 'eDrop'\n ? (\n \n {transferDetails.creatorName}\n {' '}\n \n )\n : (\n \n {transferDetails.senderFirstName}\n {' '}\n {transferDetails.senderLastName}\n {' '}\n \n )}\n has sent you a\n {' '}\n {process.env.DIGITAL_ASSET_TYPE || 'digital asset'}\n .\n
\n )}\n
\n {assetUrl\n && (\n
\n \"\"\n
\n )}\n {transferDetails.message\n && (\n
\n {'\"'}\n {transferDetails.message}\n {'\"'}\n
\n )}\n
\n
Would you like to claim this now and add it to your collection?
\n
\n this.confirmTransfer()}>\n {isFree\n ? Confirm\n : Confirm}\n \n  \n onCancel(nftToken)}>\n No thanks\n \n
\n
\n )}\n {isError\n && (\n
\n This NFT transfer is no longer available\n
\n onCancel(nftToken)}>\n Close\n \n
\n
\n )}\n
\n );\n }\n}\n\nConfirmTransfer.propTypes = {\n nftToken: PropTypes.string,\n onConfirm: PropTypes.func,\n onCancel: PropTypes.func,\n onError: PropTypes.func,\n isFree: PropTypes.bool,\n};\n\nexport default ConfirmTransfer;\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\nfunction RouterListener() {\n const location = useLocation();\n useEffect(() => {\n if (typeof RISKX === 'undefined') {\n console.log('RISKX failed to initialize.');\n } else {\n console.log('=== set RISKX url ===');\n console.log(location.pathname);\n RISKX.go(location.pathname);\n }\n }, [location]);\n return null;\n}\n\nexport default RouterListener;\n","import React, { Component } from 'react';\nimport { ToastContainer } from 'react-toastify';\nimport CookieConsent from 'react-cookie-consent';\nimport Countdown from 'react-countdown';\nimport moment from 'moment-mini';\nimport CreatorManager from '../managers/Creator';\nimport FullPageLoader from '../components/throbber/loader';\nimport Register from '../components/register';\n\nclass Home extends Component {\n constructor(props) {\n super(props);\n this.state = {\n dropId: process.env.DROP_ID,\n dropData: null,\n isLoading: true,\n countdownData: null,\n friendlyDate: null,\n copyrightYear: new Date().getFullYear(),\n };\n }\n\n parseCountdown = (date) => {\n this.setState({\n countdownData: moment(date).unix() * 1000,\n friendlyDate: moment(date).format('ha on dddd, MMMM D, YYYY'),\n });\n }\n\n getDropData = async () => {\n const { dropId } = this.state;\n const dropData = await CreatorManager.getDrop(dropId);\n this.parseCountdown(dropData.drop.countDown.countDownDate);\n\n if (dropData) {\n this.setState({\n isLoading: false,\n dropData,\n });\n }\n }\n\n setHeroHeight = () => {\n const hero = document.getElementById('countdownContainer');\n const bodyHeight = document.body.scrollHeight;\n const windowHeight = window.innerHeight;\n if (hero && (bodyHeight < windowHeight)) {\n hero.style.height = window.innerHeight + 'px';\n }\n }\n\n async componentDidMount() {\n const that = this;\n await this.getDropData();\n setTimeout(() => {\n that.setHeroHeight();\n }, 200);\n window.addEventListener('resize', that.setHeroHeight);\n }\n\n render() {\n const {\n copyrightYear, countdownData, dropData, isLoading,\n } = this.state;\n const renderer = ({\n days, hours, minutes, seconds, completed,\n }) => {\n if (completed) {\n window.location.href = '/';\n }\n // Render a countdown\n return (\n
\n
\n {days}\n {' '}\n days\n
\n
\n {hours}\n {' '}\n hours\n
\n
\n {minutes}\n {' '}\n mins\n
\n
\n {seconds}\n {' '}\n secs\n
\n
\n );\n };\n return (\n
\n {isLoading\n ? (\n
\n \n
\n )\n : (\n
\n {dropData\n && (\n
\n \n\n \n {!process.env.COUNTDOWN_BACKGROUND && process.env.HERO_BACKGROUND_VIDEO\n && (\n \n )}\n
\n
\n

Digital assets launch in:

\n \n {countdownData\n && (\n \n )}\n
\n
\n \n
\n \"\"\n
\n this.setHeroHeight()} />\n
\n
\n ©\n {' '}\n {copyrightYear}\n {' '}\n ethos multiverse inc.\n
\n
\n
\n
\n\n \n ethos\n {' '}\n uses cookies to provide necessary website functionality,\n improve your experience and analyze our traffic. By using our website, you agree to \n our privacy policy\n {' '}\n and our cookies usage.\n \n \n
\n )}\n \n )}\n \n );\n }\n}\n\nexport default Home;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport PubSub from 'pubsub-js';\nimport Throbber from '../throbber';\nimport Account from '../../managers/Account';\nimport CreatorManager from '../../managers/Creator';\nimport SimpleModal from '../modal/modal';\nimport LoginForm from './loginForm';\n\nconst emailPattern = /^[-a-z0-9~!$%^&*_=+}{'?]+(\\.[-a-z0-9~!$%^&*_=+}{'?]+)*@([a-z0-9_][-a-z0-9_]*(\\.[-a-z0-9_]+)*\\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;\nconst passwordRequirements = /(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,}/;\n\nclass AccountRegister extends Component {\n constructor(props) {\n super(props);\n this.state = {\n registerFirstname: '',\n registerLastname: '',\n registerEmail: '',\n registerPassword: '',\n registerConfirmPassword: '',\n registerDisplayname: '',\n registerPhoneNumber: '',\n loginVerification: '',\n userId: '',\n isLoading: false,\n isSuccess: false,\n isMfa: false,\n agreeTerms: false,\n showModal: false,\n creatorId: process.env.CREATOR_ID,\n hasPreRegBonus: process.env.PRE_REGISTRATION_BONUS,\n hasClaimed: false,\n };\n }\n\n validateForm = () => {\n const { registerFirstname } = this.state;\n const { registerLastname } = this.state;\n const { registerEmail } = this.state;\n const { registerPassword } = this.state;\n const { registerConfirmPassword } = this.state;\n const { registerDisplayname } = this.state;\n const { registerPhoneNumber } = this.state;\n const { agreeTerms } = this.state;\n if (registerFirstname === ''\n || registerLastname === ''\n || registerEmail === ''\n || registerPassword === ''\n || registerConfirmPassword === ''\n || registerDisplayname === ''\n || registerPhoneNumber === '') {\n toast.error('Please fill out all fields.');\n return false;\n }\n if (!emailPattern.test(registerEmail)) {\n toast.error('Please enter a valid email address.');\n return false;\n }\n if (registerPassword !== registerConfirmPassword) {\n toast.error('Passwords don\\'t match.');\n return false;\n }\n if (!passwordRequirements.test(registerPassword)) {\n toast.error('Passwords must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters');\n return false;\n }\n if (!agreeTerms) {\n toast.error('You must agree to our terms of service.');\n return false;\n }\n return true;\n }\n\n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n onEnterKey = (e) => {\n const { isMfa } = this.state;\n if (e.keyCode === 13) {\n if (isMfa) {\n this.mfaLogIn(e);\n } else {\n this.validateForm(e);\n }\n }\n }\n\n handleCheckboxChange = (e) => {\n let isChecked = false;\n if (e.target.checked) {\n isChecked = true;\n } else {\n isChecked = false;\n }\n this.setState({\n agreeTerms: isChecked,\n });\n }\n\n register = async (e) => {\n const {\n registerFirstname, registerLastname, registerEmail, registerPassword, registerDisplayname, registerPhoneNumber, creatorId,\n } = this.state;\n let payload = {};\n e.preventDefault();\n if (this.validateForm()) {\n this.setState({\n isLoading: true,\n });\n // package up the payload and send it to the server\n payload = {\n email: registerEmail,\n firstname: registerFirstname,\n lastname: registerLastname,\n username: registerDisplayname,\n password: registerPassword,\n telephone: registerPhoneNumber,\n site: window.location.protocol + '//' + window.location.host,\n creatorId,\n };\n const account = await Account.create(process.env.SERVER_URL + 'account/register', payload);\n\n if (account && account.userId) {\n this.setState({\n isLoading: false,\n isMfa: true,\n userId: account.userId,\n });\n } else if (account && account.token) {\n this.setState({\n isLoading: false,\n });\n // go get user info\n const userInfo = await Account.get(account.token);\n if (userInfo) {\n // this.setState({\n // isLoading: false,\n // isSuccess: true,\n // });\n // set login cookie\n Account.setLoginState(account.token);\n // fire pubsub\n PubSub.publish('account_updated');\n window.location.href = '/#register=success';\n }\n } else {\n this.setState({\n isLoading: false,\n });\n toast.error(account.message || 'Oops! Something went wrong. Please try again later');\n }\n\n // delete the registration data if it exists\n if (sessionStorage.getItem('ETHOS_REGISTRATION')) {\n sessionStorage.removeItem('ETHOS_REGISTRATION');\n }\n }\n }\n\n prePopFields = (data) => {\n this.setState({\n registerFirstname: data.firstName,\n registerLastname: data.lastName,\n registerEmail: data.email,\n registerPhoneNumber: data.telephone,\n });\n }\n\n getParameterByName = (name, url) => {\n let newName = name;\n let newUrl = url;\n if (!url) newUrl = window.location.href;\n newName = name.replace(/[[\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + newName + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(newUrl);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n };\n\n prePopulateFromUrl = () => {\n let firstName;\n let lastName;\n let email;\n \n if (this.getParameterByName('f')) {\n firstName = this.getParameterByName('f');\n }\n if (this.getParameterByName('l')) {\n lastName = this.getParameterByName('l');\n }\n if (this.getParameterByName('e')) {\n email = this.getParameterByName('e');\n }\n\n this.setState({\n registerFirstname: firstName,\n registerLastname: lastName,\n registerEmail: email,\n });\n }\n\n parseRegSessionObject = (regObj) => {\n const parseRegObj = JSON.parse(regObj);\n this.setState({\n registerFirstname: parseRegObj.firstName || '',\n registerLastname: parseRegObj.lastName || '',\n registerEmail: parseRegObj.email || '',\n });\n }\n\n componentDidMount() {\n document.body.classList.add('-account-background');\n document.body.style.backgroundImage = 'url(' + process.env.ACCOUNT_BACKGROUND + ')';\n\n // parse url if parameters are there\n if (this.getParameterByName('f')) {\n this.prePopulateFromUrl();\n }\n\n // parse sessionStorage for pre populating form\n if (sessionStorage.getItem('ETHOS_REGISTRATION')) {\n this.parseRegSessionObject(sessionStorage.getItem('ETHOS_REGISTRATION'));\n }\n\n // check for localStorage\n if (localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegInfo')) {\n this.prePopFields(JSON.parse(localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegInfo')));\n }\n }\n\n componentWillUnmount() {\n document.body.classList.remove('-account-background');\n document.body.style.backgroundImage = 'none';\n }\n\n loginSuccess = async () => {\n this.setState({\n showModal: false,\n isLoggedIn: true,\n });\n toast.success('Log in success.');\n PubSub.publish('account_updated');\n if (window.location.pathname.includes('register')) {\n window.location.pathname = '/';\n }\n }\n\n loginFailed = (error) => {\n toast.error(error || 'Oops! Something went wrong. Try again later.');\n }\n\n openLoginModal = (e) => {\n e.preventDefault();\n this.setState({\n showModal: true,\n });\n }\n\n mfaLogIn = async (e) => {\n const { hasPreRegBonus, userId, loginVerification } = this.state;\n e.preventDefault();\n this.setState({\n isLoading: true,\n });\n const payload = {\n userId,\n token: loginVerification,\n };\n const login = await Account.mfaLogin(payload);\n if (login && login.token) {\n await Account.get(login.token);\n Account.setLoginState(login.token);\n // TODO: check if the hhofPreRegInfo localStorage is set. If so, generate a free NFT transaction\n if (hasPreRegBonus && CreatorManager.isCountdownOn()) {\n // generate a free NFT token\n const nftToken = await Account.generateFreeNft(login.token, process.env.PRE_REGISTRATION_DROP_ID);\n if (nftToken && nftToken.token) {\n localStorage.setItem(process.env.CREATOR_SUBDOMAIN + 'FreeToken', nftToken.token);\n localStorage.removeItem(process.env.CREATOR_SUBDOMAIN + 'PreRegInfo');\n this.setState({\n hasClaimed: true,\n });\n }\n }\n gtag('event', process.env.CREATOR_SUBDOMAIN + '_registration', { // eslint-disable-line\n event_category: 'account_registration_success',\n event_label: 'User registered for the ' + process.env.CREATOR_SUBDOMAIN + ' drop',\n });\n if (process.env.E_DROP_ONLY === 'true') {\n window.location.href = '/account/collection';\n } else {\n // always send people to the drop page if not an edrop\n window.location.href = '/#register=success';\n }\n } else {\n this.setState({\n isLoading: false,\n });\n toast.error(login.message || 'Oops! Something went wrong. Please try again later.');\n }\n }\n\n closeModal = () => {\n this.setState({\n showModal: false,\n });\n }\n\n render() {\n const {\n loginVerification, registerFirstname, registerLastname, registerEmail, registerPassword, registerConfirmPassword, registerDisplayname, registerPhoneNumber, isLoading, isMfa, showModal,\n } = this.state;\n return (\n
\n
\n this.setState({ showModal: false })}>\n this.loginSuccess()}\n onFail={(error) => this.loginFailed(error)}\n onRegisterButton={() => this.closeModal()} />\n \n
\n {isLoading\n && }\n
\n Register\n
\n {isMfa\n ? (\n
\n Thanks for signing up.\n
\n We have sent a verification code to your phone. Please enter this code below to access your account.\n
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n )\n : (\n
\n
\n Complete this form to create your ethos account.\n
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
A display name is used to identify you within our system
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
A working mobile phone number is required for log in. By providing your phone number, you agree to receive text messages from ethos. Standard message and data rates may apply
\n
\n
\n this.handleCheckboxChange(e)} />\n \n
\n
\n
\n )}\n {isMfa\n ? (\n
\n this.mfaLogIn(e)}>Log In\n {/* Go back\n {' '}\n |\n {' '}\n View your account settings */}\n
\n )\n : (\n
\n this.register(e)}>\n Register\n \n
\n )}\n
\n
\n
\n );\n }\n}\n\nexport default AccountRegister;\n","import React, { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport moment from 'moment-mini';\nimport { check } from 'prettier';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\nimport SimpleModal from '../modal/modal';\nimport { getBlockchainType, getParameterByName } from '../../managers/Helpers';\n\nconst emailPattern = /^[-a-z0-9~!$%^&*_=+}{'?]+(\\.[-a-z0-9~!$%^&*_=+}{'?]+)*@([a-z0-9_][-a-z0-9_]*(\\.[-a-z0-9_]+)*\\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;\n\nconst EDropLanding = ({ transferToken }) => {\n const [transferCode, setTransferCode] = useState(null);\n const [verifiedCode, setVerifiedCode] = useState(null);\n const [previewData, setPreviewData] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n const [errorData, setErrorData] = useState(null);\n const [showModal, setShowModal] = useState(false);\n const [emailExists, setEmailExists] = useState(false);\n const [emailAddress, setEmailAddress] = useState('');\n const [agreeTerms, setAgreeTerms] = useState(false);\n const optOut = () => {\n sessionStorage.removeItem(transferToken);\n window.location.href = '/';\n };\n const handleInputChange = (e) => {\n setTransferCode(e.target.value);\n };\n\n const handleEmailChange = (e) => {\n setEmailAddress(e.target.value);\n };\n\n const clearAllTransferCookies = () => {\n Object.entries(sessionStorage).map((obj) => {\n const key = obj[0];\n if (key.includes('NFT_TRANSFER')) {\n sessionStorage.removeItem(key);\n }\n return true;\n });\n };\n\n const prePopulateRegData = () => {\n const registerObj = {};\n \n if (getParameterByName('f')) {\n registerObj.firstName = getParameterByName('f');\n }\n if (getParameterByName('l')) {\n registerObj.lastName = getParameterByName('l');\n }\n if (getParameterByName('e')) {\n registerObj.email = getParameterByName('e');\n }\n\n if (registerObj.firstName || registerObj.lastName || registerObj.email) {\n sessionStorage.setItem('ETHOS_REGISTRATION', JSON.stringify(registerObj));\n }\n };\n\n const getTransferCodePreview = async (previewCode) => {\n setIsLoading(true);\n let alreadyClaimed = false;\n if (localStorage.getItem('NFT_TOKEN_TRANSFERRED_' + previewCode)) {\n alreadyClaimed = true;\n }\n if (!alreadyClaimed) {\n const preview = await AccountManager.getTransferDetails(null, previewCode);\n if (preview && preview.success === false) {\n setPreviewData(null);\n setErrorData(preview);\n } else if (preview) {\n setPreviewData(preview);\n setVerifiedCode(previewCode);\n sessionStorage.setItem('NFT_TRANSFER_' + previewCode, previewCode);\n // check for pre pop details\n prePopulateRegData();\n } else {\n toast.error('Transfer code not found. Please check your code and try again.');\n setPreviewData(null);\n clearAllTransferCookies();\n }\n } else {\n toast.error('This NFT token has already been claimed.');\n setPreviewData(null);\n clearAllTransferCookies();\n }\n setIsLoading(false);\n };\n\n const enterCode = async () => {\n // check if the code exists\n await getTransferCodePreview(transferCode);\n };\n\n const claimNow = (e) => {\n e.preventDefault();\n setShowModal(true);\n setEmailExists(false);\n };\n\n const createUnverifiedAccount = async () => {\n const payload = {\n email: emailAddress,\n creatorId: process.env.CREATOR_ID,\n };\n const createAccount = await AccountManager.createUnverifiedAccount(payload);\n if (createAccount && createAccount.token) {\n // authenticate the user with the token and redirect them to the collections page\n AccountManager.setLoginState(createAccount.token);\n window.location.href = '/account/collection';\n } else {\n toast.error('Something went wrong. Please try again later.');\n }\n };\n\n const checkEmailAddress = async (e) => {\n if (e) {\n e.preventDefault();\n }\n if (e) {\n e.preventDefault();\n }\n if (!emailPattern.test(emailAddress)) {\n toast.error('Please enter a valid email address.');\n setIsLoading(false);\n } else if (!agreeTerms) {\n toast.error('Please agree to the terms and conditions.');\n setIsLoading(false);\n } else {\n setShowModal(true);\n setEmailExists(false);\n setIsLoading(true);\n const checkEmail = await AccountManager.emailSearch(null, emailAddress);\n if (checkEmail && checkEmail.emailExists === true) {\n setEmailExists(true);\n setIsLoading(false);\n } else {\n await createUnverifiedAccount();\n }\n }\n };\n\n const onEnterKey = (e) => {\n if (e.keyCode === 13) {\n checkEmailAddress();\n }\n };\n\n const handleCheckboxChange = (e) => {\n let isChecked = false;\n if (e.target.checked) {\n isChecked = true;\n } else {\n isChecked = false;\n }\n setAgreeTerms(isChecked);\n };\n\n useEffect(() => {\n document.body.classList.add('-account-background');\n document.body.style.backgroundImage = 'url(' + process.env.ACCOUNT_BACKGROUND + ')';\n }, []);\n\n useEffect(() => {\n setTransferCode(transferToken);\n if (transferToken) {\n getTransferCodePreview(transferToken);\n } else {\n setIsLoading(false);\n }\n }, [transferToken]);\n\n return (\n
\n setShowModal(false)}>\n {isLoading\n && }\n {!isLoading\n && (\n
\n {emailExists\n ? (\n
\n
An account with this email already exists. Login in now to claim this digital asset
\n
\n \n Log in\n \n
\n
\n )\n : (\n
Loader
\n )}\n
\n )}\n
\n
\n
\n {previewData && previewData.asset\n ? (\n
\n {process.env.CUSTOM_EDROP_TITLE\n ?
{process.env.CUSTOM_EDROP_TITLE}
\n : (\n
\n Claim your \n {previewData\n ? {previewData.assetVariation && previewData.assetVariation.variationName ? previewData.assetVariation.variationName : previewData.asset.name}\n : digital asset}\n
\n )}\n
\n )\n : (\n
\n {process.env.CUSTOM_EDROP_TITLE || 'Claim your digital asset'}\n
\n )}\n {!errorData\n && (\n
\n {process.env.CUSTOM_EDROP_SUBTITLE\n ? <>{process.env.CUSTOM_EDROP_SUBTITLE}\n : <>All that is needed is your email to claim.}\n \n
\n )}\n {errorData ? (\n
\n
\n {errorData.message}\n
\n
\n )\n : (\n
\n {!verifiedCode\n ? (\n
\n handleInputChange(e)} />\n
\n enterCode()}\n type=\"button\">\n Enter code\n \n
\n
\n )\n : (\n
\n
\n Claim code verified\n
\n \"\"\n
\n )}\n
\n )}\n
\n {isLoading\n && }\n {previewData\n && (\n
\n {previewData && previewData.asset\n ? (\n
\n
\n {previewData.assetVariation.mediaFileUrl.includes('.mp4')\n ? (\n \n )\n : \"NFT}\n
\n
\n
\n

{previewData.assetVariation && previewData.assetVariation.variationName ? previewData.assetVariation.variationName : previewData.asset.name}

\n {/*

\n Blockchain:\n {' '}\n {getBlockchainType(previewData.asset.blockchain)}\n

*/}\n

\n Date created:\n {' '}\n {moment(previewData.asset.dateCreated).format('MMMM DD, YYYY')}\n

\n {previewData.asset.assetDescription !== 'NULL' ? (\n

\n {previewData.asset.assetDescription}\n

\n )\n :

}\n\n
\n
\n
\n )\n : (\n
\n
\n {previewData.senderFirstName}\n {' '}\n {' '}\n {' '}\n {previewData.senderLastName}\n {' '}\n has sent you a\n {' '}\n {process.env.DIGITAL_ASSET_TYPE || 'digital asset'}\n .\n
\n
\n {previewData.message}\n
\n
\n )}\n \n
\n )}\n
\n {verifiedCode\n && (\n
\n
\n Enter your email address to claim.\n
\n
\n
\n
\n
\n handleEmailChange(e)}\n onKeyUp={(e) => onEnterKey(e)} />\n
\n
\n checkEmailAddress(e)}>\n Claim Now!\n \n
\n
\n
\n
\n handleCheckboxChange(e)} />\n \n
\n
\n\n
\n )}\n
\n
\n
\n );\n};\nexport default EDropLanding;\n","import React, { useState, useEffect } from 'react';\nimport { toast } from 'react-toastify';\nimport { getUtilityType } from '../../managers/Helpers';\nimport AccountManager from '../../managers/Account';\nimport SimpleModal from '../modal/modal';\nimport Throbber from '../throbber';\nimport CreatorManager from '../../managers/Creator';\n\nconst UtilityDisplay = ({\n nftId, nftUtility, collectionUtility, onPlay,\n}) => {\n const [formattedUtilities, setFormattedUtilities] = useState([]);\n const [formattedNFTUtilities, setFormattedNFTUtilities] = useState([]);\n const [showModal, setShowModal] = useState(false);\n const formatUtilities = (utilities, type) => {\n const newArray = [];\n const utilitiesMax = 5;\n\n if (type === 'collection') {\n setFormattedUtilities(utilities);\n } else {\n setFormattedNFTUtilities(utilities);\n }\n };\n const getGatedVideo = async (gatedContentId, e) => {\n e.preventDefault();\n setShowModal(true);\n setTimeout(async () => {\n const gatedContent = await AccountManager.getGatedContent(AccountManager.getToken(), gatedContentId);\n setShowModal(false);\n if (gatedContent && gatedContent.success) {\n onPlay(gatedContent.fileUrl);\n } else {\n toast.error('Oops. Something went wrong. Please try again later.');\n }\n }, 3000);\n };\n\n const generateCommerceUrl = async (gatedCommerceId, e) => {\n e.preventDefault();\n setShowModal(true);\n const generatedCommerceUrl = await CreatorManager.generateGatedCommerceUrl(gatedCommerceId, nftId, AccountManager.getToken());\n if (generatedCommerceUrl && generatedCommerceUrl.success) {\n window.open(generatedCommerceUrl.draftOrderUrl, '_blank');\n setShowModal(false);\n } else {\n toast.error(generatedCommerceUrl.message || 'Oops. Something went wring generating your link. Please try again later.');\n setShowModal(false);\n }\n };\n\n const copyToClipboard = (voucher, e) => {\n e.preventDefault();\n navigator.clipboard.writeText(voucher.voucherCode);\n toast.success('Voucher has been copied to clipboard.');\n };\n\n useEffect(() => {\n formatUtilities(collectionUtility, 'collection');\n formatUtilities(nftUtility, 'nft');\n }, []);\n return (\n
\n setShowModal(false)}>\n \n \n {formattedUtilities.map((utility, index) => (\n
\n {getUtilityType(utility.utilityType) === 'Generic Utility'\n && (\n <>\n {utility.genericPromotions.map((promo, index) => (\n
\n \n \n View\n \n
\n {utility.utilityDescription}\n
{promo.description}
\n {promo.linkUrl\n && {promo.linkLabel || 'More info'}}\n
\n ))}\n \n )}\n {getUtilityType(utility.utilityType) === 'Gated Commerce'\n && (\n <>\n {utility.gatedCommerces.map((gate, index) => (\n
\n \n {gate.ecommerceProductUrl && gate.contentType === 1\n && (\n \n Claim\n \n )}\n {gate.contentType === 2\n && (\n generateCommerceUrl(gate.gatedCommerceId, e)} href=\"#\">\n Claim\n \n )}\n
\n {gate.ecommerceProductUrl && gate.contentType === 1\n && {utility.utilityDescription}}\n {!gate.ecommerceProductUrl && gate.contentType === 1\n &&
{utility.utilityDescription}
}\n {gate.contentType === 2\n && generateCommerceUrl(gate.gatedCommerceId, e)} href=\"#\" className=\"utility-card__title\">{utility.utilityDescription}}\n \n
{gate.ecommerceProductDescription}
\n {gate.contentType === 2\n && (\n <>\n {process.env.CUSTOM_CLAIM_OFFER\n ? (\n generateCommerceUrl(gate.gatedCommerceId, e)} className=\"utility-card__claim-image-link\" href=\"#\">\n \"claim\n \n )\n : generateCommerceUrl(gate.gatedCommerceId, e)} className=\"utility-card__claim-link\" href=\"#\">Claim offer}\n \n )}\n {gate.contentType === 1 && gate.ecommerceProductUrl\n && (\n <>\n More info\n \n )}\n
\n ))}\n \n )}\n {getUtilityType(utility.utilityType) === 'Video Content'\n && (\n <>\n {utility.gatedContents.map((gate, index) => (\n
\n \n getGatedVideo(gate.gatedContentId, e)}>\n \"\"\n \n
\n getGatedVideo(gate.gatedContentId, e)}>{gate.description}\n
{utility.utilityDescription}
\n getGatedVideo(gate.gatedContentId, e)} className=\"utility-card__claim-link\" href=\"#\">Watch video\n \n ))}\n \n )}\n \n ))}\n {formattedNFTUtilities.map((utility, index) => (\n
\n\n {getUtilityType(utility.utilityType) === 'Gated Commerce' && (\n <>\n {utility.gatedCommerces.map((gate, index) => (\n
\n \n generateCommerceUrl(gate.gatedCommerceId, e)} href=\"#\">\n Claim\n \n
\n generateCommerceUrl(gate.gatedCommerceId, e)} href=\"#\" className=\"utility-card__title\">{utility.utilityDescription}\n
{gate.ecommerceProductDescription}
\n <>\n {process.env.CUSTOM_CLAIM_OFFER\n ? (\n generateCommerceUrl(gate.gatedCommerceId, e)} className=\"utility-card__claim-image-link\" href=\"#\" target=\"_blank\" rel=\"noreferrer\">\n \"claim\n \n )\n : generateCommerceUrl(gate.gatedCommerceId, e)} className=\"utility-card__claim-link\" href=\"#\">Claim offer}\n \n
\n ))}\n \n )}\n\n {getUtilityType(utility.utilityType) === 'Coupon Voucher' && (\n <>\n {utility.vouchers.map((voucher, index) => (\n
\n \n \n Claim\n \n
\n {utility.utilityDescription}\n
{voucher.description}
\n
\n \n copyToClipboard(voucher, e)}>\n {process.env.CUSTOM_COPY_ICON\n ? \"copy\"\n : \"copy\"}\n \n \n
\n \n ))}\n \n )}\n\n {/* {utility.map((item) => (\n
\n {item.utilityType === 1\n ? (\n
\n {item.vouchers.map((voucher) => (\n
\n
\n {item.utilityDescription}\n :\n
\n
\n {voucher.voucherCode}\n
\n
\n ))}\n
\n )\n : getGatedVideo(item, e)}>{item.utilityDescription}}\n
\n ))} */}\n \n ))}\n \n );\n};\nexport default UtilityDisplay;\n","import React, { useState, useEffect } from 'react';\nimport Announcements from './announcements';\n\nfunction CollectionHero({\n brandId, filterOptions, onFilterSelect,\n}) {\n // State variables using useState\n const [tab, setTab] = useState(0);\n const [isLoading, setIsLoading] = useState(true);\n const toggleTabs = (filterType, filterLabel, e) => {\n e.preventDefault();\n setTab(filterType);\n onFilterSelect(filterType, filterLabel);\n };\n\n useEffect(() => {\n if (filterOptions.length > 0) {\n setIsLoading(false);\n }\n }, [filterOptions]);\n\n return (\n \n
\n

{process.env.SITE_TITLE}

\n
\n {!isLoading\n && (\n
\n \n {filterOptions && filterOptions.length > 0\n && filterOptions.map((filterOption) => (\n \n ))}\n
\n )}\n
\n\n \n
\n
\n \n );\n}\n\nexport default CollectionHero;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React, { useState, useEffect } from 'react';\nimport { toast } from 'react-toastify';\nimport Slider from 'react-slick';\nimport moment from 'moment-mini';\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\nimport AnnouncementsManager from '../../managers/Announcements';\nimport Account from '../../managers/Account';\nimport Throbber from '../throbber';\n\nfunction Announcements({ creatorId }) {\n // State variables using useState\n const [announcementsLength, setAnnouncementsLength] = useState(0);\n const [announcements, setAnnouncements] = useState([]);\n const [itemsToShow, setItemsToShow] = useState(3);\n const [isLoading, setIsLoading] = useState(true);\n const settings = {\n dots: true,\n infinite: true,\n speed: 500,\n slidesToShow: itemsToShow,\n slidesToScroll: 1,\n responsive: [\n {\n breakpoint: 920,\n settings: {\n slidesToShow: itemsToShow === 1 ? 1 : 2,\n },\n },\n {\n breakpoint: 620,\n settings: {\n slidesToShow: 1,\n },\n },\n ],\n };\n\n const getAnnouncements = async () => {\n const data = await AnnouncementsManager.getAnnouncementsByBrand(creatorId, Account.getToken());\n // TODO: Calculate how many are in the announcements array\n if (data && data.announcements) {\n if (data.announcements.length === 1) {\n setItemsToShow(1);\n } else if (data.announcements.length === 2) {\n setItemsToShow(2);\n } else {\n setItemsToShow(3);\n }\n setAnnouncementsLength(data.announcements.length);\n setAnnouncements(data.announcements);\n setIsLoading(false);\n } else {\n setIsLoading(false);\n toast.error('Error fetching announcements');\n }\n };\n\n useEffect(() => {\n getAnnouncements();\n }, []);\n\n return (\n
\n {announcementsLength > 0\n && (\n \n {announcements.map((announcement) => (\n
\n
\n
\n \"icon\"\n
\n
\n
\n
\n {moment(announcement.dateCreated).format('MMM DD, YYYY')}\n
\n
{process.env.SITE_NAME}
\n \n
\n
\n
\n ))}\n \n )}\n {isLoading\n && (\n
\n
\n \n
\n
\n )}\n \n );\n}\n\nexport default Announcements;\n","import React, { useState, useEffect } from 'react';\nimport { Link, useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport AccountManager from '../../managers/Account';\nimport Throbber from '../throbber';\nimport BrandWidget from './brandWidget';\nimport UtilityList from './utilityList';\nimport AssetInformation from './assetInformation';\nimport AssetFAQ from './assetFAQ';\nimport BonLookFAQ from './bonlookFAQ';\nimport RefCheckFAQ from './refcheckFAQ';\nimport SimpleModal from '../modal/modal';\nimport TransferToggle from '../account/transferToggle';\nimport TransferNFT from '../account/transferNFT';\nimport TransferWallet from '../account/transferWallet';\nimport UtilityManager from '../../managers/Utility';\nimport {\n getScanUrl,\n} from '../../managers/Helpers';\n\nfunction AssetDetails() {\n // State variables using useState\n // const [openNav, setNavstate] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [asset, setAsset] = useState(null);\n const [accountDetails, setAccountDetails] = useState(null);\n const [showPassModal, setShowPassModal] = useState(false);\n const [isPassGenerating, setIsPassGenerating] = useState(true);\n const [nftPass, setNftPass] = useState(null);\n const [openNav, setNavstate] = useState(false);\n const [selectedFile, setSelectedFile] = useState(null);\n const [transferSelector, toggleTransferSelectorModal] = useState(false);\n const [transfer, setUserTransferModal] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [isModalLoading, setModalLoadingState] = useState(false);\n const [walletTransfer, setWalletTransferModal] = useState(false);\n const [sortedUtility, setSortedUtility] = useState([]);\n\n const { nftId } = useParams();\n\n const parseUtility = (asset) => {\n const allUtility = asset.collectionUtility.concat(asset.nftUtility);\n const categorizedUtility = UtilityManager.categorizeAssetUtility(allUtility);\n console.log('=== parseUtility ===');\n console.log(categorizedUtility);\n setSortedUtility(categorizedUtility);\n };\n\n const getDetails = async (nftId) => {\n // get the collection from the server\n setIsLoading(true);\n // TODO: need to handle this better for anonymous users\n const accountData = await AccountManager.get(AccountManager.getToken());\n if (accountData) {\n setAccountDetails(accountData);\n }\n AccountManager.getNftDetails(AccountManager.getToken(), nftId).then((res) => {\n setAsset(res.nft);\n parseUtility(res.nft);\n setIsLoading(false);\n }).catch((error) => {\n setIsLoading(false);\n toast.error('Oops. There was a problem getting your collection data. Please try again later.');\n });\n };\n\n const toggleTransferModal = (showModal, nft) => {\n setNavstate(false);\n toggleTransferSelectorModal(showModal);\n setSelectedFile(asset);\n };\n\n const showUserTransferModal = () => {\n toggleTransferSelectorModal(false);\n setUserTransferModal(asset);\n };\n\n const showWalletTransferModal = () => {\n toggleTransferSelectorModal(false);\n setWalletTransferModal(asset);\n };\n\n const closeWalletTransferModal = (doUpdate) => {\n setWalletTransferModal(false);\n if (doUpdate) {\n // getCollection();\n }\n };\n\n const transferSuccessful = (walletAddress) => {\n console.log(walletAddress);\n console.log('NFT transferred successfully');\n nft.withdrawAddress = walletAddress;\n };\n\n const confirmTransfer = () => {\n asset.hasPendingTransfer = true;\n setUserTransferModal(false);\n };\n\n const cancelTransfer = (newItem) => {\n setShowModal(true);\n };\n\n const confirmCancel = async () => {\n asset.hasPendingTransfer = false;\n setModalLoadingState(true);\n\n const payload = {\n nftId: asset.nftId,\n creatorId: process.env.CREATOR_ID,\n };\n\n const cancelled = await AccountManager.cancelTransfer(AccountManager.getToken(), payload);\n\n if (cancelled && cancelled.success) {\n toast.success('Successfully cancelled transfer.');\n } else {\n toast.error('Oops. Something went wrong. Please try again later.');\n }\n setModalLoadingState(false);\n setShowModal(false);\n // updateCollection();\n };\n\n const togglePassModal = async (nft) => {\n setShowPassModal(!showPassModal);\n setIsPassGenerating(true);\n const payload = {\n nftId: nft.nftId,\n };\n const applePass = await AccountManager.generateApplePass(AccountManager.getToken(), payload).then((response) => {\n console.log('=== generating apple pass ===');\n console.log(response);\n if (response && response.success) {\n toast.success('Successfully created Apple pass.');\n setNftPass(response.passUri);\n } else {\n toast.error('Error creating Apple pass. Please try again later.');\n setShowPassModal(false);\n }\n setIsPassGenerating(false);\n });\n };\n\n const toggleNav = (e) => {\n if (e) {\n e.preventDefault();\n }\n if (openNav) {\n setNavstate(false);\n } else {\n setNavstate(true);\n }\n };\n\n useEffect(() => {\n getDetails(nftId);\n console.log('=== details page ===');\n console.log(nftId);\n if (!AccountManager.isLoggedIn()) {\n window.location = '/login';\n }\n }, []);\n\n return (\n
\n {walletTransfer\n && (\n
\n closeWalletTransferModal(doUpdate)}\n onSuccess={(walletAddress) => transferSuccessful(walletAddress)} />\n
\n )}\n {transfer\n && (\n
\n setUserTransferModal(false)} onSuccess={() => confirmTransfer()} />\n
\n )}\n {transferSelector\n && (\n
\n showUserTransferModal()}\n onTransferToWallet={() => showWalletTransferModal()}\n onClose={() => toggleTransferSelectorModal(false)} />\n
\n )}\n setShowModal(false)}>\n {isModalLoading\n && }\n Are you sure you want to cancel this transfer?\n
\n confirmCancel(e)}>\n Confirm Cancel\n \n  \n setShowModal(false)}>\n Back\n \n
\n
\n setShowPassModal(false)}>\n {showPassModal && (\n
\n {isPassGenerating\n && }\n
\n \"\"\n
Success!
\n

\n Apple pass for this NFT has been created. Click the Add to wallet button below to add this to your wallet.\n

\n
\n
\n \n \"Add\n \n
\n
\n )}\n
\n {isLoading\n && }\n {asset\n && (\n <>\n
\n My Collection  •  \n {asset.creator.creatorName}\n   •  \n {asset.assetVariation ? asset.assetVariation.variationName : asset.name}\n
\n

\n {asset.assetVariation ? asset.assetVariation.variationName : asset.name}\n
\n {asset.passTemplate\n && }\n  \n \n
\n {AccountManager.isVerified()\n && (\n
\n {asset && asset.hasPendingTransfer\n && (\n \n )}\n {!asset.withdrawAddress && !asset.hasPendingTransfer\n && (\n \n )}\n
\n )}\n {asset.contractAddress\n && (\n \n )}\n
\n
\n

\n
\n
\n \"Digital\n
\n
\n
\n
\n
\n

Description

\n {asset.asset.assetDescription !== 'NULL'\n && (\n
\n {asset.asset.assetDescription}\n
\n )}\n \n
\n
\n {sortedUtility.length > 0\n && (\n
\n {sortedUtility.map((utility) => {\n if (utility.label !== 'Media') {\n return (\n
\n

{utility.label}

\n \n
\n );\n }\n return
;\n })}\n
\n )}\n {sortedUtility.length > 0\n && (\n
\n {sortedUtility.map((utility) => (\n
\n {utility.label === 'Media'\n && (\n
\n

{utility.label}

\n \n
\n )}\n
\n ))}\n
\n )}\n
\n\n
\n
\n \n
\n \n \n \n )}\n\n \n );\n}\n\nexport default AssetDetails;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React, { useState, useEffect } from 'react';\nimport { Link, useParams } from 'react-router-dom';\nimport moment from 'moment-mini';\nimport Account from '../../managers/Account';\nimport AnnouncementsManager from '../../managers/Announcements';\n\nfunction BrandWidget({ creatorId }) {\n const [announcements, setAnnouncements] = useState([]);\n\n const getAnnouncements = async () => {\n const data = await AnnouncementsManager.getAnnouncementsByBrand(creatorId, Account.getToken());\n // TODO: Calculate how many are in the announcements array\n if (data && data.announcements) {\n setAnnouncements(data.announcements);\n }\n console.log(data.announcements);\n };\n\n useEffect(() => {\n console.log('=== Get announcements from server ===');\n console.log(creatorId);\n getAnnouncements();\n }, []);\n\n return (\n
\n
\n {process.env.SITE_NAME}\n
\n
{process.env.SITE_DESCRIPTION}
\n Explore\n {announcements.length > 0\n && (\n
\n
\n Updates\n
\n
\n {announcements.map((announcement) => (\n \n \n
\n
\n {moment(announcement.dateCreated).format('MMM DD, YYYY')}\n
\n
\n ))}\n
\n \n View more\n \n )}\n \n );\n}\n\nexport default BrandWidget;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport React, { useState, useEffect } from 'react';\nimport moment from 'moment-mini';\nimport { getBlockchainType, truncateString, getScanUrl } from '../../managers/Helpers';\n\nfunction UtilityList({ asset }) {\n return (\n
\n

Technical information

\n
\n
\n Blockchain\n {getBlockchainType(asset.asset.blockchain)}\n
\n
\n Status\n {!asset.contractAddress\n ? (\n \n Pending\n \n )\n : (\n \n Minted\n \n )}\n
\n
\n Unique ID\n {asset.tokenId || asset.number || '1'}\n
\n \n
\n Date Created\n {moment(asset.txn.dateStamp).format('MMMM DD, YYYY')}\n
\n
\n Amount Paid\n \n $\n {asset.txn.totalAmount || asset.asset.buyItNowPrice}\n \n
\n
\n
\n );\n}\n\nexport default UtilityList;\n","/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable no-param-reassign */\nimport React, { useState, useEffect } from 'react';\n\nfunction AssetFAQ({ creatorId }) {\n const [questions, setQuestions] = useState([]);\n const toggleAnswer = (id, e) => {\n e.preventDefault();\n const cloneQuestions = [...questions];\n cloneQuestions.forEach((faq) => {\n if (faq.id === id) {\n faq.isOpen = !faq.isOpen;\n }\n });\n setQuestions(cloneQuestions);\n console.log('toggle answer');\n console.log(e);\n console.log(id);\n };\n\n const faq = [\n {\n id: 1,\n title: 'What is a digital asset?',\n answer: 'A digital asset is a one-of-a-kind ownable asset that you can purchase. When you purchase one of these asets, you are the official owner of an original ' + process.env.SITE_NAME + ' digital asset that provides you some serious real-world benefits.',\n },\n {\n id: 2,\n title: 'How do I purchase this digital asset?',\n answer: 'When the campaign goes live, simply click buy-now and purchase with your credit card.

Through this process you will be prompted to create an account if you do not have one already. This is to ensure you can view and transfer your digigal asset in the future. ',\n },\n {\n id: 3,\n title: 'Do I need cryptocurrency to buy a ' + process.env.SITE_NAME + ' digital asset?',\n answer: 'Not at all. You can pay using your credit card.',\n },\n {\n id: 4,\n title: 'What happens when I buy one of the digital assets?',\n answer: 'We will be minting the digital assets, which is a crypto term meaning that your digital asset will become a part of the blockchain – the crypto world where digital assets are recorded.',\n },\n {\n id: 5,\n title: 'What happens if I don’t have a Crypto Wallet?',\n answer: 'Not to worry, you do not need a crypto wallet to purchase this ' + process.env.SITE_NAME + ' digital asset.

We are here to make things easier, transferring your digital asset can be done any time with a few simple clicks.',\n },\n {\n id: 6,\n title: 'Is there support available if I need help?',\n answer: 'Yes, absolutely! We are here to help every step of the way.

At any time, if you have any questions or need any support, please email us and we will be happy to help you:
' + process.env.CLIENT_EMAIL + '
' + process.env.CLIENT_WEBSITE + '',\n },\n ];\n\n useEffect(() => {\n setQuestions(faq);\n }, []);\n\n return (\n
\n

Frequently Asked Questions

\n {questions.map((faq) => (\n toggleAnswer(faq.id, e)}>\n {faq.isOpen\n ? (\n \n -\n \n )\n : (\n \n +\n \n )}\n
{faq.title}
\n \n
\n \n ))}\n \n \n );\n}\n\nexport default AssetFAQ;\n","import React, { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport AccountManager from '../../managers/Account';\n\nfunction LoginWidget({ isLoggedIn, onLoginButton, onLogoutButton }) {\n // State variables using useState\n const [openNav, setNavstate] = useState(false);\n\n const toggleNav = (e) => {\n if (e) {\n e.preventDefault();\n }\n if (openNav) {\n setNavstate(false);\n } else {\n setNavstate(true);\n }\n };\n\n const logOut = (e) => {\n if (e) {\n e.preventDefault();\n }\n onLogoutButton();\n };\n\n return (\n
\n
\n toggleNav(e)}>\n \n \n \n \n \n toggleNav(e)}>\n \"profile\n \n
\n
\n {isLoggedIn\n ? (\n <>\n
\n toggleNav()}>\n My Collection\n \n
\n
\n toggleNav()}>\n Contact Information\n \n
\n {AccountManager.isVerified()\n && (\n
\n toggleNav()}>\n Account Password\n \n
\n )}\n {AccountManager.isVerified()\n && (\n
\n toggleNav()}>\n Billing Details\n \n
\n )}\n
\n logOut(e)}>\n Logout\n \n
\n \n )\n : (\n <>\n
\n toggleNav()}>\n Log In\n \n
\n
\n toggleNav()}>\n Register\n \n
\n \n )}\n \n
\n
\n );\n}\n\nexport default LoginWidget;\n","import React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport PubSub from 'pubsub-js';\nimport PropTypes from 'prop-types';\nimport moment from 'moment-mini';\nimport Account from '../../managers/Account';\nimport SimpleModal from '../modal/modal';\nimport LoginForm from '../account/loginForm';\nimport LoginWidget from './loginWidget';\n// import MetamaskWallet from '../wallet/metamaskWallet';\n// import AccountDropdown from '../common/AccountDropdown';\n// import Dropdown from '../common/Dropdown';\n\nclass TopNav extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoggedIn: false,\n username: '',\n showModal: false,\n showMobileNav: false,\n isCountdown: false,\n currentDate: moment().unix() * 1000,\n };\n PubSub.subscribe('account_updated', this.onPubSubEvent);\n }\n\n onPubSubEvent = () => {\n this.componentDidMount();\n }\n\n logout = () => {\n Account.logout();\n }\n\n getAccountDetails = async () => {\n const accountData = await Account.get(Account.getToken());\n if (accountData) {\n this.setState({\n username: accountData.username,\n });\n }\n }\n\n async componentDidMount() {\n const { dropDetails } = this.props;\n const { currentDate } = this.state;\n let countdownDate;\n // Check if dropData.drop has a countdown set. If it doesn, always display the countdown page\n if (process.env.E_DROP_ONLY !== 'true') {\n if (dropDetails.drop.countDown && dropDetails.drop.countDown.countDownDate) {\n countdownDate = moment(dropDetails.drop.countDown.countDownDate).unix() * 1000;\n }\n if (countdownDate > currentDate) {\n this.setState({\n isCountdown: true,\n });\n }\n }\n if (Account.isLoggedIn()) {\n await this.getAccountDetails();\n this.setState({\n isLoggedIn: true,\n });\n } else {\n this.setState({\n isLoggedIn: false,\n });\n }\n\n const topnav = document.getElementById('topNav');\n document.addEventListener('scroll', () => {\n if (window.pageYOffset > 0) {\n topnav.classList.add('-animate');\n } else {\n topnav.classList.remove('-animate');\n }\n });\n }\n\n loginSuccess = async () => {\n const successUrl = window.location.href + '#login=success';\n this.setState({\n showModal: false,\n isLoggedIn: true,\n });\n // console.log(window.location.href);\n PubSub.publish('account_updated');\n // if (window.location.pathname.includes('register')) {\n // window.location.pathname = '/drop/' + process.env.DROP_ID;\n // }\n if (process.env.E_DROP_ONLY === 'true') {\n window.location.href = '/account/collection';\n } else {\n window.location.href = successUrl;\n window.location.reload();\n }\n }\n\n loginFailed = (error) => {\n toast.error(error || 'Oops! Something went wrong. Try again later.');\n }\n\n openLoginModal = (e) => {\n if (e) {\n e.preventDefault();\n }\n this.setState({\n showModal: true,\n showMobileNav: false,\n });\n }\n\n toggleNav = (e) => {\n e.preventDefault();\n const { showMobileNav } = this.state;\n this.setState({\n showMobileNav: !showMobileNav,\n });\n }\n\n handleMobileNav = () => {\n this.setState({\n showMobileNav: false,\n });\n }\n\n closeModal = () => {\n this.setState({\n showModal: false,\n });\n }\n\n render() {\n const {\n isCountdown, isLoggedIn, showModal, showMobileNav, username,\n } = this.state;\n return (\n
\n this.setState({ showModal: false })}>\n this.loginSuccess()}\n onFail={(error) => this.loginFailed(error)}\n onRegisterButton={() => this.closeModal()} />\n \n {/*
\n\n
*/}\n
\n {isCountdown\n ? {process.env.SITE_NAME}\n : {process.env.SITE_NAME}}\n \n this.openLoginModal()}\n onLogoutButton={() => this.logout()} />\n\n {/* {isLoggedIn\n ? (\n
\n )\n : (\n
\n this.openLoginModal(e)}>\n Log In\n \n this.handleMobileNav(e)}>\n Register\n \n
\n )} */}\n
\n
\n );\n }\n}\n\nTopNav.propTypes = {\n dropDetails: PropTypes.objectOf(PropTypes.object()),\n};\n\nexport default TopNav;\n","import moment from 'moment-mini';\nimport Ajax from './Ajax';\n\n/**\n* Utility helper for Account functions\n*/\n\nclass Creator {\n constructor() {\n this.creatorData = null;\n this.assetData = null;\n this.dropData = null;\n this.creatorId = process.env.CREATOR_ID;\n this.assetId = process.env.ASSET_ID;\n this.assetId2 = process.env.ASSET2_ID;\n this.dropId = process.env.DROP_ID;\n this.dropId2 = process.env.DROP2_ID;\n this.apiUrl = process.env.SERVER_URL;\n }\n\n createRisk = (payloadData, token) => {\n const payload = {\n assetPrice: payloadData.purchase,\n gasFee: payloadData.gas,\n tax: payloadData.tax,\n dropId: this.dropId,\n cartToken: payloadData.cartToken,\n };\n const that = this;\n return Ajax.post(that.apiUrl + 'risk/create', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n });\n }\n\n createDecision = (payloadData, token) => {\n const payload = {\n assetPrice: payloadData.price,\n gasFee: payloadData.gasFee,\n tax: payloadData.tax,\n dropId: this.dropId,\n cartToken: payloadData.cartToken,\n };\n const that = this;\n return Ajax.post(that.apiUrl + 'risk/decision', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n });\n }\n\n confirmPurchase = (payload, token) => {\n const that = this;\n return Ajax.post(that.apiUrl + 'payment/pay', payload, { Authorization: token ? 'Bearer ' + token : '' })\n .then((data) => data)\n .catch((error) => {\n throw error;\n });\n }\n\n generateGatedCommerceUrl = (gatedCommerceId, nftId, token) => {\n const that = this;\n return Ajax.get(that.apiUrl + 'utility/draftorder?gatedCommerceId=' + gatedCommerceId + '&nftId=' + nftId, token)\n .then((data) => data)\n .catch((error) => {\n throw error;\n });\n }\n\n getSingleDropV2 = (dropId) => {\n // this needs to return a dropData object that contains a drop and asset property\n const that = this;\n const dropData = {\n drop: null,\n asset: null,\n };\n return Ajax.get(that.apiUrl + 'drop/v2/' + dropId)\n .then((data) => {\n if (data.asset) {\n dropData.asset = data.asset;\n dropData.asset.assetVariationId = data.asset.assetId;\n }\n if (data.drop.dropId === dropId) {\n dropData.drop = data.drop;\n }\n if (data.assetVariations && data.assetVariations.length > 0) {\n dropData.asset.assetVariationId = data.assetVariations[0].assetVariationId;\n }\n return dropData;\n })\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n getSingleDrop = (dropId) => {\n // this needs to return a dropData object that contains a drop and asset property\n const that = this;\n const dropData = {\n drop: null,\n asset: null,\n };\n return Ajax.get(that.apiUrl + 'drop/v2/' + dropId)\n .then((data) => {\n if (data.assets) {\n dropData.asset = data.assets[0];\n }\n dropData.asset.drops.forEach((drop) => {\n if (drop.dropId === dropId) {\n dropData.drop = drop;\n }\n });\n return dropData;\n })\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n\n isCountdownOn = () => {\n if (process.env.E_DROP_ONLY === 'true') {\n return false;\n }\n const currentDate = moment().unix() * 1000;\n if (this.creatorData.drop && this.creatorData.drop.countDown) {\n return moment(this.creatorData.drop.countDown.countDownDate).unix() * 1000 > currentDate;\n }\n return false;\n }\n\n getDrop = () => {\n const that = this;\n let assetData = null;\n let assetData2 = null;\n let dropData = null;\n let dropData2 = null;\n if (this.creatorData !== null) {\n return this.creatorData;\n }\n // const dropUrl = that.apiUrl + 'drop/' + this.dropId;\n const dropUrl = that.apiUrl + 'creator/' + this.creatorId;\n\n return Ajax.get(dropUrl)\n .then((data) => {\n data.assets.forEach((asset) => {\n if (asset.assetId === that.assetId) {\n assetData = asset;\n }\n });\n if (that.assetId2) {\n data.assets.forEach((asset) => {\n if (asset.assetId === that.assetId2) {\n assetData2 = asset;\n }\n });\n }\n assetData.drops.forEach((drop) => {\n if (drop.dropId === that.dropId) {\n dropData = drop;\n }\n });\n if (that.dropId2) {\n assetData2.drops.forEach((drop) => {\n if (drop.dropId === that.dropId2) {\n dropData2 = drop;\n }\n });\n }\n const creatorData = {\n creator: data,\n asset: assetData,\n asset2: assetData2,\n drop: dropData,\n drop2: dropData2,\n };\n that.creatorData = creatorData;\n return creatorData;\n })\n .catch((error) => {\n // that.clear();\n throw error;\n });\n }\n}\n\nexport default new Creator();\n","var map = {\n\t\"./locale\": 184,\n\t\"./locale.js\": 184\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 262;","import React, { Component } from 'react';\nimport { ToastContainer, toast } from 'react-toastify';\nimport PubSub from 'pubsub-js';\nimport CookieConsent from 'react-cookie-consent';\nimport Countdown, { zeroPad } from 'react-countdown';\nimport moment from 'moment-mini';\nimport CreatorManager from '../managers/Creator';\nimport FullPageLoader from '../components/throbber/loader';\nimport Register from '../components/register';\nimport SimpleModal from '../components/modal/modal';\nimport LoginForm from '../components/account/loginForm';\nimport AccountManager from '../managers/Account';\n\nclass Home extends Component {\n constructor(props) {\n super(props);\n this.state = {\n dropId: process.env.DROP_ID,\n dropData: null,\n isLoading: true,\n countdownData: null,\n friendlyDate: null,\n showLoginModal: false,\n hasPreRegBonus: process.env.PRE_REGISTRATION_BONUS,\n copyrightYear: new Date().getFullYear(),\n };\n }\n\n parseCountdown = (date) => {\n this.setState({\n countdownData: moment(date).unix() * 1000,\n friendlyDate: moment(date).format('ha on dddd, MMMM D, YYYY'),\n });\n }\n\n getDropData = async () => {\n const { dropId } = this.state;\n const dropData = await CreatorManager.getDrop(dropId);\n this.parseCountdown(dropData.drop.countDown.countDownDate);\n\n if (dropData) {\n this.setState({\n isLoading: false,\n dropData,\n });\n }\n }\n\n setHeroHeight = () => {\n const hero = document.getElementById('countdownContainer');\n const bodyHeight = document.body.scrollHeight;\n const windowHeight = window.innerHeight;\n // hero.style.height = windowHeight + 'px';\n if (hero && (bodyHeight < windowHeight)) {\n hero.style.height = window.innerHeight + 'px';\n }\n }\n\n fadeIntro = () => {\n const intro = document.getElementById('fader');\n if (intro) {\n intro.classList.add('-fade-in');\n }\n }\n\n showLoginModal = () => {\n this.setState({\n showModal: false,\n showLoginModal: true,\n });\n }\n\n loginSuccess = async () => {\n const { hasPreRegBonus } = this.state;\n PubSub.publish('account_updated');\n // hhofPreRegExistingInfo\n if (hasPreRegBonus && localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo')) {\n // generate a free NFT token\n const nftToken = await AccountManager.generateFreeNft(AccountManager.getToken(), process.env.PRE_REGISTRATION_DROP_ID);\n if (nftToken && nftToken.token) {\n localStorage.setItem(process.env.CREATOR_SUBDOMAIN + 'FreeToken', nftToken.token);\n localStorage.removeItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo');\n toast.success('Log in success.');\n this.setState({\n showLoginModal: false,\n });\n window.location.href = '/account/collection';\n } else {\n localStorage.setItem(process.env.CREATOR_SUBDOMAIN + 'FreeToken', 'already claimed');\n localStorage.removeItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo');\n toast.error(nftToken.message);\n this.setState({\n showLoginModal: false,\n });\n }\n }\n }\n\n loginFailed = (error) => {\n toast.error(error || 'Oops! Something went wrong. Try again later.');\n }\n\n async componentDidMount() {\n const that = this;\n await this.getDropData();\n setTimeout(() => {\n that.setHeroHeight();\n that.fadeIntro();\n }, 200);\n window.addEventListener('resize', that.setHeroHeight);\n }\n\n render() {\n const {\n copyrightYear, showLoginModal, countdownData, dropData, isLoading,\n } = this.state;\n const renderer = ({\n days, hours, minutes, seconds, completed,\n }) => {\n if (completed) {\n window.location.href = '/';\n }\n // Render a countdown\n return (\n
\n
\n {zeroPad(days)}\n {' '}\n days\n
\n
\n {zeroPad(hours)}\n {' '}\n hours\n
\n
\n {zeroPad(minutes)}\n {' '}\n mins\n
\n
\n {zeroPad(seconds)}\n {' '}\n secs\n
\n
\n );\n };\n return (\n
\n this.setState({ showLoginModal: false })}>\n this.loginSuccess()}\n onFail={(error) => this.loginFailed(error)}\n onRegisterButton={() => this.setState({ showLoginModal: false })} />\n \n {isLoading\n ? (\n
\n \n
\n )\n : (\n
\n {dropData\n && (\n
\n \n\n
\n \n
\n
\n

\n {process.env.HERO_TITLE}\n

\n
\n COMING SOON\n
\n {/* \"\" */}\n
\n {countdownData\n && (\n \n )}\n
\n
\n
\n \n
\n \"\"\n
\n this.setHeroHeight()}\n onLoginRequest={() => this.showLoginModal()} />\n
\n
\n {process.env.ADDITIONAL_LEGAL_TEXT\n && (\n
\n Legends, Legends of Hockey, and Hockey Hall of Fame are official marks of Hockey Hall of Fame and Museum. All Rights Reserved.\n
\n
\n
\n )}\n ©\n {' '}\n {copyrightYear}\n {' '}\n ethos multiverse inc.\n
\n
\n
\n
\n\n \n ethos\n {' '}\n uses cookies to provide necessary website functionality,\n improve your experience and analyze our traffic. By using our website, you agree to \n our privacy policy\n {' '}\n and our cookies usage.\n \n \n
\n )}\n
\n )}\n \n );\n }\n}\n\nexport default Home;\n","import React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\n\nclass HomeDrop extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {}\n\n render() {\n const {\n dropData, assetData, layoutStyle,\n } = this.props;\n return (\n
\n
\n
\n
\n {assetData.mediaMP4\n ? (\n \n )\n : \"ethos\"}\n
\n
\n
\n \n
\n \n

{assetData.assetDescription}

\n

\n
\n
{process.env.PURCHASE_INSTRUCTIONS}
\n\n
\n View Details\n
\n
\n
\n
\n \n \n );\n }\n}\n\nHomeDrop.propTypes = {\n dropData: PropTypes.objectOf(PropTypes.object),\n assetData: PropTypes.objectOf(PropTypes.object),\n layoutStyle: PropTypes.string,\n};\n\nexport default HomeDrop;\n","import React from 'react';\nimport {\n ElementsConsumer, CardNumberElement, CardExpiryElement, CardCvcElement,\n} from '@stripe/react-stripe-js';\nimport PropTypes from 'prop-types';\nimport { toast } from 'react-toastify';\nimport PubSub from 'pubsub-js';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\n\nclass CardForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n nameOnCard: '',\n isLoading: false,\n stripeStyle: {\n iconColor: '#c4f0ff',\n color: '#000000',\n fontWeight: '500',\n fontFamily: 'Poppins, Open Sans, Segoe UI, sans-serif',\n fontSize: '16px',\n },\n };\n }\n\n async componentDidMount() {\n const accountData = await AccountManager.get(AccountManager.getToken());\n this.setState({\n nameOnCard: accountData.firstName + ' ' + accountData.lastName,\n });\n }\n\n handleSubmit = async (event) => {\n event.preventDefault();\n const { stripe, elements } = this.props;\n const { nameOnCard } = this.state;\n const { onSuccess } = this.props;\n\n const cardElement = elements.getElement('cardNumber');\n\n const paymentMethod = {\n type: 'card',\n card: cardElement,\n billing_details: {\n name: nameOnCard,\n },\n };\n\n this.setState({\n isLoading: true,\n });\n\n const results = await stripe.createPaymentMethod(paymentMethod);\n if (results && results.paymentMethod) {\n const payload = {\n id: results.paymentMethod.id,\n };\n const saveCard = await AccountManager.saveCardDetails(process.env.SERVER_URL + 'payment/method', payload, AccountManager.getToken());\n \n if (saveCard && saveCard.success === false) {\n this.setState({\n isLoading: false,\n });\n toast.error(saveCard.message || 'Oops! There was a problem with that card. Please try a different credit card.');\n } else {\n toast.success('Credit card settings saved!');\n PubSub.publish('card_updated');\n await AccountManager.get(AccountManager.getToken(), true);\n PubSub.publish('account_updated');\n if (onSuccess) {\n onSuccess();\n }\n this.setState({\n isLoading: false,\n });\n }\n } else {\n toast.error(results.error ? results.error.message : 'Oops! Something went wrong. Try again later.');\n this.setState({\n isLoading: false,\n });\n }\n };\n \n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n render() {\n const { nameOnCard, stripeStyle, isLoading } = this.state;\n const { stripe, elements } = this.props;\n return (\n
\n {isLoading\n && }\n
\n
\n
Name on card:
\n this.handleInputChange(e)} />\n
\n
\n
Number on card:
\n
\n \n
\n
\n
\n
Expiry:
\n
\n \n
\n
\n
\n
CVC:
\n
\n \n
\n
\n
\n {stripe && elements\n && (\n \n )}\n
\n
\n \n );\n }\n}\n\nexport default function InjectedCardForm(props) {\n const { onSuccess } = props;\n return (\n \n {({ stripe, elements }) => (\n \n )}\n \n );\n}\n\nCardForm.propTypes = {\n stripe: PropTypes.string,\n elements: PropTypes.string,\n onSuccess: PropTypes.string,\n};\n","import React, { Component } from 'react';\n\nclass CardOnFile extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {}\n\n render() {\n const { cardDetails } = this.props;\n return (\n
\n current card on file:\n {cardDetails\n ? (\n
\n
\n  \n {cardDetails.brand}\n
\n
\n **** **** ****\n {' '}\n {cardDetails.last4}\n
\n
\n Expires: \n {cardDetails.expMonth}\n {' '}\n /\n {' '}\n {cardDetails.expYear}\n
\n
\n )\n :
Really? No card?
}\n \n
\n );\n }\n}\n\nCardOnFile.propTypes = {\n cardDetails: PropTypes.string,\n};\n\nexport default CardOnFile;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { toast } from 'react-toastify';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\nimport CardOnFile from './cardOnFile';\n\nconst API_KEY = process.env.PAYSAFE_API_KEY;\nconst options = {\n currencyCode: 'USD',\n accounts: {\n // regular\n // default: 1002591400,\n // threeDs\n default: parseInt(process.env.PAYSAFE_ACCOUNT_NUMBER, 10),\n },\n environment: process.env.PAYSAFE_ENVIRONMENT,\n // environment: 'TEST',\n fields: {\n cardNumber: {\n selector: '#cardNumber',\n placeholder: '****************',\n separator: ' ',\n },\n cvv: {\n selector: '#cvv',\n placeholder: '****',\n mask: false,\n },\n expiryDate: {\n selector: '#expiryDate',\n placeholder: '**/**',\n },\n },\n style: {\n input: {\n 'font-family': 'robotoregular,Helvetica,Arial,sans-serif',\n 'font-weight': 'normal',\n 'font-size': '16px',\n },\n\n '.valid:focus': {\n color: 'green',\n },\n },\n};\nlet ethosInstance;\n\nclass PaySafeCardForm extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n loadingText: 'Initializing payment form. Stand by...',\n };\n }\n\n saveCard = async (token) => {\n const { onCardEntry } = this.props;\n const payload = {\n id: token,\n };\n const savedCard = await AccountManager.setPaymentMethod(AccountManager.getToken(), payload);\n if (savedCard && savedCard.success) {\n onCardEntry(token);\n } else {\n toast.error(savedCard.message || 'Oops. Something went wrong. Please try again later.');\n this.setState({\n isLoading: false,\n });\n }\n }\n\n initPaysafe = async () => {\n const {\n cvvOnly, onCardEntry, total, accountData, paymentHandleToken, singleUseCustomerToken,\n } = this.props;\n const accountInfo = await AccountManager.get(AccountManager.getToken(), true);\n const that = this;\n const accountDetails = accountData;\n if (!accountInfo) {\n toast.error('No account info found.');\n }\n paysafe.fields.setup(API_KEY, options).then((instance) => {\n ethosInstance = instance;\n return instance.show();\n }).then((paymentMethods) => {\n if (paymentMethods.card && !paymentMethods.card.error) {\n that.setState({\n isLoading: false,\n });\n document.getElementById('addCard').addEventListener('click', (event) => {\n that.setState({\n loadingText: 'Saving credit card. Stand by...',\n isLoading: true,\n });\n\n const tokenizationOptions = {\n amount: total,\n merchantRefNum: 'ethos-ref-num-' + new Date().getTime(),\n // transactionType: 'PAYMENT',\n transactionType: 'VERIFICATION',\n paymentType: 'CARD',\n // New fields required for saved cards\n // paymentTokenFrom: document.getElementById('customerToken').value,\n // singleUseCustomerToken: document.getElementById('savedCardToken').value,\n paymentTokenFrom: paymentHandleToken || null,\n singleUseCustomerToken: singleUseCustomerToken || null,\n openAs: 'IFRAME',\n threeDs: {\n merchantUrl: process.env.PAYSAFE_MERCHANT_URL + '/checkout/v2/index.html#/desktop',\n // merchantUrl: 'https://api.paysafe.com/checkout/v2/index.html#/desktop',\n useThreeDSecureVersion2: true,\n authenticationPurpose: 'PAYMENT_TRANSACTION',\n deviceChannel: 'BROWSER',\n messageCategory: 'PAYMENT',\n },\n customerDetails: {\n // holderName: accountDetails.firstName + ' ' + accountDetails.lastName,\n billingDetails: {\n country: accountDetails.billingInfo.countryCode,\n zip: accountDetails.billingInfo.zip,\n street: accountDetails.billingInfo.address,\n city: accountDetails.billingInfo.city,\n state: accountDetails.billingInfo.stateCode,\n },\n profile: {\n firstName: accountDetails.firstName,\n lastName: accountDetails.lastName,\n email: accountDetails.email,\n },\n },\n };\n ethosInstance.tokenize(tokenizationOptions).then((result) => {\n console.log('=== Tokenization Options ===');\n console.log(tokenizationOptions);\n if (cvvOnly) {\n onCardEntry(result.token);\n } else {\n that.saveCard(result.token);\n }\n }).catch((error) => {\n that.setState({\n isLoading: false,\n });\n console.log(error.message);\n toast.error(error.message);\n });\n });\n }\n });\n }\n\n componentDidMount() {\n const { accountData, cvvOnly, mode } = this.props;\n if (cvvOnly) {\n options.fields.cardNumber.optional = true;\n options.fields.expiryDate.optional = true;\n }\n\n this.initPaysafe();\n }\n\n render() {\n const { isLoading, loadingText } = this.state;\n const {\n onSuccess, accountData, cvvOnly, mode,\n } = this.props;\n return (\n
\n {isLoading\n && }\n {!cvvOnly && !mode\n && (\n
\n Enter Your Credit Card\n
\n )}\n {/*
\n
Customer token
\n \n

\n
\n
\n
Payment token from
\n \n

\n
*/}\n\n
\n {cvvOnly\n && (\n
\n \n Please confirm the CVC for this card to complete your purchase.\n
\n )}\n
\n
\n
Card number:
\n
\n

\n
\n
\n
Expiry:
\n
\n

\n
\n
\n
\n \n
\n
CVC:
\n
\n

\n
\n
\n {cvvOnly\n ? \n : }\n
\n
\n );\n }\n}\n\nPaySafeCardForm.propTypes = {\n onCardEntry: PropTypes.string,\n accountData: PropTypes.string,\n mode: PropTypes.string,\n total: PropTypes.string,\n cvvOnly: PropTypes.bool,\n paymentHandleToken: PropTypes.string,\n singleUseCustomerToken: PropTypes.string,\n};\n\nexport default PaySafeCardForm;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport { CountryDropdown, RegionDropdown } from 'react-country-region-selector';\n// import { Elements } from '@stripe/react-stripe-js';\n// import { loadStripe } from '@stripe/stripe-js';\nimport PubSub from 'pubsub-js';\nimport PropTypes from 'prop-types';\nimport AccountManager from '../../managers/Account';\nimport Throbber from '../throbber';\nimport CardForm from './CardForm';\nimport PaySafeCardForm from './PaySafeCardForm';\nimport CardOnFile from './cardOnFile';\n\n// const stripePromise = loadStripe(process.env.STRIPE_KEY);\n\nclass BillingForm extends Component {\n constructor(props) {\n super(props);\n this.state = {\n billingAddress: '',\n billingCity: '',\n billingCode: '',\n country: '',\n region: '',\n whiteListed: ['US', 'CA'],\n priorityOptions: ['US', 'CA'],\n isLoading: true,\n stripeOptions: {},\n tab: 'billing',\n hasBillingInfo: false,\n cardDetails: null,\n updateCard: false,\n };\n PubSub.subscribe('card_updated', this.getCardDetails);\n }\n\n getCardDetails = async () => {\n let cardDetails;\n const hasCardOnFile = await AccountManager.getPaymentMethod(AccountManager.getToken());\n if (hasCardOnFile && hasCardOnFile.success && hasCardOnFile.card) {\n cardDetails = AccountManager.getSelectedCard(hasCardOnFile.card);\n this.setState({\n cardDetails,\n });\n }\n }\n\n async componentDidMount() {\n // get billingInfo if it exists\n const { mode } = this.props;\n await this.getCardDetails();\n \n const accountData = await AccountManager.get(AccountManager.getToken());\n if (accountData && accountData.billingInfo && accountData.billingInfo.address) {\n this.setState({\n accountData,\n billingAddress: accountData.billingInfo.address || '',\n billingCity: accountData.billingInfo.city || '',\n billingCode: accountData.billingInfo.zip || '',\n country: accountData.billingInfo.country || '',\n region: accountData.billingInfo.state || '',\n isLoading: false,\n hasBillingInfo: true,\n tab: mode || 'billing',\n });\n } else {\n this.setState({\n isLoading: false,\n hasBillingInfo: false,\n });\n }\n }\n\n onEnterKey = (e) => {\n if (e.keyCode === 13) {\n // this.validateForm();\n }\n }\n\n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n selectCountry = (val) => {\n this.setState({ country: val });\n }\n\n selectRegion = (val) => {\n this.setState({ region: val });\n }\n\n validateForm = () => {\n const { billingAddress } = this.state;\n const { billingCity } = this.state;\n const { billingCode } = this.state;\n const { country } = this.state;\n const { region } = this.state;\n if (billingAddress === ''\n || billingCity === ''\n || billingCode === ''\n || country === ''\n || region === '') {\n toast.error('Please fill out all fields.');\n return false;\n }\n return true;\n }\n\n updateDetails = async (e) => {\n const { onSuccess } = this.props;\n const {\n billingAddress, billingCity, billingCode, country, region,\n } = this.state;\n\n e.preventDefault();\n let payload = {};\n payload = {\n address: billingAddress,\n city: billingCity,\n state: region,\n zip: billingCode,\n country,\n };\n if (this.validateForm()) {\n this.setState({\n isLoading: true,\n });\n const billingChanges = await AccountManager.billing(process.env.SERVER_URL + 'account/billing', payload, AccountManager.getToken());\n const accountData = await AccountManager.get(AccountManager.getToken(), true);\n if (billingChanges && accountData) {\n this.setState({\n accountData,\n isLoading: false,\n hasBillingInfo: true,\n tab: accountData && accountData.billingInfo && accountData.paymentMethod ? 'billing' : 'card',\n });\n onSuccess();\n toast.success('Billing details successfully updated!');\n } else {\n toast.error('Unable to save billing changes. Please try again later.');\n }\n }\n }\n\n toggleTab = (tab, e) => {\n const currentTab = tab;\n e.preventDefault();\n this.setState({\n tab: currentTab,\n updateCard: false,\n });\n }\n\n changeCreditCard = (e) => {\n e.preventDefault();\n this.setState({\n updateCard: true,\n });\n }\n\n enteredCard = async () => {\n const { onCardSuccess, mode } = this.props;\n this.setState({\n isLoading: true,\n });\n await this.getCardDetails();\n this.setState({\n updateCard: false,\n isLoading: mode === 'card',\n });\n\n onCardSuccess();\n }\n\n render() {\n const {\n accountData, updateCard, tab, hasBillingInfo, stripeOptions, billingAddress, billingCity, billingCode, isLoading, country, region, priorityOptions, cardDetails,\n } = this.state;\n const { onCardSuccess, mode } = this.props;\n return (\n
\n {hasBillingInfo\n && (\n \n )}\n\n {tab === 'billing'\n && (\n
\n {isLoading\n && }\n

\n Add Billing Address\n

\n
\n Add or update your billing address here\n
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n
Country:
\n this.selectCountry(val)} />\n
\n {country !== ''\n && (\n
\n
State:
\n this.selectRegion(val)} />\n
\n )}\n
\n this.updateDetails(e)}>\n Save Billing Address\n \n
\n
\n
\n )}\n\n {tab === 'card'\n && (\n
\n {isLoading\n && }\n
\n Card Details\n
\n
\n View and update your credit card details here\n
\n
\n {cardDetails && !updateCard\n ? (\n
\n \n
\n this.changeCreditCard(e)}>\n Change Credit Card\n \n
\n
\n )\n : (\n
\n {/* {!isLoading\n && (\n \n \n \n )} */}\n this.enteredCard()}\n accountData={accountData}\n total={0} />\n
\n )}\n
\n
\n )}\n
\n );\n }\n}\n\nBillingForm.propTypes = {\n onSuccess: PropTypes.func,\n onCardSuccess: PropTypes.func,\n mode: PropTypes.string,\n};\n\nexport default BillingForm;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport PropTypes from 'prop-types';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\nimport CreatorManager from '../../managers/Creator';\n// import AlternatePayment from './alternatePayment';\nimport PaySafeCardForm from '../account/PaySafeCardForm';\nimport Ajax from '../../managers/Ajax';\n\nclass ConfirmPurchase extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n loadingText: 'Calculating taxes. Stand by...',\n agreeTerms: false,\n purchasePrice: null,\n prices: {},\n lastFour: '####',\n hasCard: false,\n confirmState: 'receipt',\n };\n }\n\n prettifyPrices = (purchaseObj) => {\n const subtotal = purchaseObj.purchase + purchaseObj.gas;\n const { tax } = purchaseObj;\n const total = subtotal + tax;\n\n // const prices = {\n // purchase: (purchaseObj.purchase / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }),\n // gas: (purchaseObj.gas / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }),\n // subTotal: (subtotal / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }),\n // tax: (tax / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }),\n // taxRate: purchaseObj.taxRate || 0,\n // total: (total / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' }),\n // rawTotal: total,\n // };\n\n const prices = {\n price: purchaseObj.purchase,\n gasFee: purchaseObj.gas,\n subTotal: subtotal,\n tax,\n taxRate: purchaseObj.taxRate || 0,\n total,\n rawTotal: total,\n };\n \n this.setState({\n prices,\n });\n\n // console.log(subtotal.toLocaleString('en-US', { style: 'currency', currency: 'USD' }));\n // calculate subtotal (purchase + gas)\n // calculate tax\n // calculate total\n // prettify purchase, gas, subtotal, tax, and total\n }\n\n calculateTaxes = async (amountObj) => {\n const { data } = this.props;\n const updatedAmountObj = amountObj;\n const taxes = await Ajax.get(process.env.SERVER_URL + 'tax?assetAmount=' + amountObj.purchase + '&gasAmount=' + amountObj.gas + '&dropId=' + data.drop.dropId, AccountManager.getToken());\n if (taxes && taxes.taxAmount) {\n updatedAmountObj.tax = taxes.taxAmount;\n updatedAmountObj.taxRate = taxes.taxRate;\n } else {\n updatedAmountObj.tax = 0;\n updatedAmountObj.taxRate = 0;\n }\n this.setState({\n isLoading: false,\n loadingText: 'Confirming your purchase. One sec...',\n });\n this.prettifyPrices(updatedAmountObj);\n }\n\n getCardDetails = async () => {\n let cardDetails;\n const hasCardOnFile = await AccountManager.getPaymentMethod(AccountManager.getToken());\n if (hasCardOnFile && hasCardOnFile.success) {\n cardDetails = AccountManager.getSelectedCard(hasCardOnFile.card);\n this.setState({\n lastFour: cardDetails ? cardDetails.last4 : '####',\n hasCard: true,\n });\n }\n }\n\n async componentDidMount() {\n const { data } = this.props;\n\n const updatedPricing = {\n purchase: this.convertToCents(data.drop.buyItNow),\n gas: process.env.GAS_FEE ? parseInt(process.env.GAS_FEE, 10) : 100,\n subTotal: 0,\n tax: 0,\n total: 0,\n };\n this.getCardDetails();\n await this.calculateTaxes(updatedPricing);\n }\n\n convertToCents = (amount) => amount * 100\n\n confirmCard = async () => {\n const { agreeTerms } = this.state;\n if (!agreeTerms) {\n toast.error('Please agree to the terms and conditions.');\n } else {\n this.setState({\n loadingText: 'Confirming card. Stand by...',\n isLoading: true,\n });\n let tokens;\n\n const hasTokens = await AccountManager.getPaymentTokens(AccountManager.getToken());\n if (hasTokens && hasTokens.success) {\n tokens = hasTokens;\n this.setState({\n singleUseCustomerToken: hasTokens.singleUseCustomerToken,\n paymentHandleToken: hasTokens.paymentHandleToken,\n isLoading: false,\n confirmState: 'cvv',\n });\n }\n }\n }\n\n confirmPurchase = async (paymentId) => {\n const { onPurchaseAttempt, data } = this.props;\n const { agreeTerms, prices } = this.state;\n const payload = {\n assetPrice: prices.price,\n gasFee: prices.gasFee,\n tax: prices.tax,\n dropId: data.drop.dropId,\n cartToken: AccountManager.getSessionId(),\n };\n if (paymentId) {\n payload.pmId = paymentId;\n payload.paymentToken = paymentId;\n }\n\n if (!agreeTerms) {\n toast.error('Please agree to the terms and conditions.');\n } else {\n this.setState({\n isLoading: true,\n loadingText: 'Almost there... stand by.',\n });\n // await CreatorManager.createRisk(payload, AccountManager.getToken());\n const riskified = await CreatorManager.createDecision(payload, AccountManager.getToken());\n\n onPurchaseAttempt(prices, paymentId, payload.cartToken);\n\n console.log(riskified);\n\n // if (riskified && riskified.cartToken) {\n // onPurchaseAttempt(prices, paymentId, payload.cartToken);\n // } else {\n // toast.error('Error processing payment. Please try again later.');\n // this.setState({\n // isLoading: false,\n // });\n // }\n }\n }\n\n componentDidUpdate(prevProps) {\n const { purchaseResult } = this.props;\n if (prevProps.purchaseResult !== purchaseResult) {\n console.log(purchaseResult);\n }\n }\n\n handleCheckboxChange = (e) => {\n let isChecked = false;\n if (e.target.checked) {\n isChecked = true;\n } else {\n isChecked = false;\n }\n this.setState({\n agreeTerms: isChecked,\n });\n }\n\n payWithCard = (e) => {\n const { onPayWithCreditCard } = this.props;\n e.preventDefault();\n onPayWithCreditCard();\n }\n\n prettyPrice = (cents) => (cents / 100).toLocaleString('en-US', { style: 'currency', currency: 'USD' })\n\n enteredCard = (token) => {\n this.setState({\n confirmState: 'receipt',\n loadingText: 'Confirming your purchase. One sec...',\n isLoading: true,\n });\n this.confirmPurchase(token);\n }\n\n render() {\n const { accountInfo } = this.props;\n const {\n paymentHandleToken, singleUseCustomerToken, confirmState, lastFour, isLoading, prices, loadingText, agreeTerms,\n } = this.state;\n return (\n
\n {isLoading\n && }\n
\n Confirm Your Purchase\n
\n {confirmState !== 'cvv'\n ? (\n
\n
\n {/*
\n Confirm the details below details.\n
*/}\n
\n
\n Purchase Price\n
\n
\n {this.prettyPrice(prices.price)}\n
\n
\n
\n
\n Gas Fee\n
\n
\n {this.prettyPrice(prices.gasFee)}\n
\n
\n
\n
\n Sub Total\n
\n
\n {this.prettyPrice(prices.subTotal)}\n
\n
\n {/*
\n
\n Tax Rate\n
\n
\n {prices.taxRate}\n %\n
\n
*/}\n
\n
\n Estimated Sales Tax\n
\n
\n {this.prettyPrice(prices.tax)}\n
\n
\n
\n
\n Total\n {' '}\n {lastFour !== '####'\n && (\n \n (will be charged to card ending with\n {' '}\n {lastFour}\n )\n \n\n )}\n
\n
\n {this.prettyPrice(prices.total)}\n
\n
\n\n
\n {/*
    \n
  • The NFT carries a limited licence referencing the artwork.
  • \n
  • Your purchase is conditional and will only become final upon a) our receipt in full of your payment b) validation of your identity which may require your submission of official documents c) completion of a hold period which may be as long as three months.
  • \n
  • All of your payments are non-refundable.
  • \n
*/}\n
\n this.handleCheckboxChange(e)} />\n \n
\n
\n
\n
\n )\n : (\n
\n this.enteredCard(token)}\n accountData={accountInfo}\n total={prices.rawTotal}\n paymentHandleToken={paymentHandleToken}\n singleUseCustomerToken={singleUseCustomerToken}\n cvvOnly />\n
\n )}\n \n {/*
\n this.confirmPurchase()}>\n Pay With Credit Card\n \n
*/}\n {lastFour === '####'\n ? (\n
\n this.payWithCard(e)}>\n Pay With Credit Card\n \n
\n )\n : (\n
\n this.confirmPurchase()}>\n Confirm Purchase\n \n {/* {confirmState !== 'cvv'\n && (\n this.confirmCard()}>\n Confirm Purchase\n \n )} */}\n
\n )}\n {/* {prices && prices.total\n && this.confirmPurchase(paymentId)} />} */}\n
\n );\n }\n}\n\nConfirmPurchase.propTypes = {\n data: PropTypes.objectOf(PropTypes.object),\n onPurchaseAttempt: PropTypes.func,\n purchaseResult: PropTypes.string,\n onPayWithCreditCard: PropTypes.func,\n accountInfo: PropTypes.string,\n};\n\nexport default ConfirmPurchase;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport AccountManager from '../../managers/Account';\nimport Throbber from '../throbber';\n\nconst API_KEY = process.env.PAYSAFE_API_KEY;\nconst options = {\n // You must provide currencyCode to the Paysafe JS SDK to enable the Payment API integration\n currencyCode: 'USD',\n // select the Paysafe test / sandbox environment\n environment: 'TEST',\n // Provide a cards merchant toaccount if you have more than one configured for that same API key\n // accounts: {\n // default: 0000000000,\n // },\n // set the CSS selectors to identify the payment field divs above\n // set the placeholder text to display in these fields\n fields: {\n cardNumber: {\n selector: '#cardNumber',\n placeholder: 'Card number',\n separator: ' ',\n },\n expiryDate: {\n selector: '#expiryDate',\n placeholder: 'Expiry date',\n },\n cvv: {\n selector: '#cvv',\n placeholder: 'CVV',\n optional: false,\n },\n },\n};\nlet ethosInstance;\n\nclass PaySafeCardEntry extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: false,\n loadingText: 'Processing payment. Stand by...',\n };\n }\n\n saveCard = async (token) => {\n const { onCardEntry } = this.props;\n const payload = {\n id: token,\n };\n const savedCard = await AccountManager.setPaymentMethod(AccountManager.getToken(), payload);\n if (savedCard && savedCard.success) {\n onCardEntry(token);\n } else {\n toast.error(savedCard.message || 'Oops. Something went wrong. Please try again later.');\n this.setState({\n isLoading: false,\n });\n }\n }\n\n initPaysafe = async () => {\n const { total } = this.props;\n const accountInfo = await AccountManager.get(AccountManager.getToken(), true);\n const that = this;\n if (!accountInfo) {\n toast.error('No account info found.');\n }\n paysafe.fields.setup(API_KEY, options).then((instance) => {\n console.log('Setup instance completed.');\n ethosInstance = instance;\n return instance.show();\n }).then((paymentMethods) => {\n if (paymentMethods.card && !paymentMethods.card.error) {\n document.getElementById('addCard').addEventListener('click', (event) => {\n that.setState({\n isLoading: true,\n });\n const tokenizationOptions = {\n amount: total,\n transactionType: 'PAYMENT',\n paymentType: 'CARD',\n merchantRefNum: 'merchant-ref-num-' + new Date().getTime(),\n customerDetails: {\n billingDetails: {\n country: accountInfo.billingInfo.countryCode,\n zip: accountInfo.billingInfo.zip,\n },\n },\n };\n ethosInstance.tokenize(tokenizationOptions).then((result) => {\n // write the Payment token value to the browser console\n console.log(result.token);\n that.saveCard(result.token);\n }).catch((error) => {\n // display the tokenization error in dialog window\n that.setState({\n isLoading: false,\n });\n console.log(error.message);\n toast.error(error.message);\n // console.log(JSON.stringify(error));\n });\n });\n }\n });\n }\n\n componentDidMount() {\n this.initPaysafe();\n }\n\n render() {\n const { isLoading, loadingText } = this.state;\n return (\n
\n {isLoading\n && }\n
\n Enter Your Credit Card\n
\n
\n
Card number:
\n
\n

\n
\n
\n
Expiry:
\n
\n

\n
\n
\n
CVC:
\n
\n

\n
\n
\n \n
\n
\n );\n }\n}\n\nPaySafeCardEntry.propTypes = {\n onCardEntry: PropTypes.func,\n total: PropTypes.string,\n};\n\nexport default PaySafeCardEntry;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport PropTypes from 'prop-types';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\nimport CreatorManager from '../../managers/Creator';\n\nclass ConfirmFreebie extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: false,\n loadingText: 'Calculating taxes. Stand by...',\n agreeTerms: false,\n purchasePrice: null,\n prices: {},\n lastFour: '####',\n };\n }\n\n componentDidMount() {}\n\n confirmPurchase = async () => {\n const { agreeTerms } = this.state;\n const { onPurchaseAttempt } = this.props;\n const payload = {\n gasFee: 0,\n };\n\n if (!agreeTerms) {\n toast.error('Please agree to the terms and conditions.');\n } else {\n this.setState({\n isLoading: true,\n });\n\n onPurchaseAttempt(payload);\n }\n }\n\n componentDidUpdate(prevProps) {\n const { purchaseResult } = this.props;\n if (prevProps.purchaseResult !== purchaseResult) {\n console.log(purchaseResult);\n }\n }\n\n handleCheckboxChange = (e) => {\n let isChecked = false;\n if (e.target.checked) {\n isChecked = true;\n } else {\n isChecked = false;\n }\n this.setState({\n agreeTerms: isChecked,\n });\n }\n\n render() {\n const {\n isLoading, loadingText,\n } = this.state;\n return (\n
\n {isLoading\n && }\n
\n Confirm Your Purchase\n
\n
\n {/*
\n Confirm the details below details.\n
*/}\n
\n
\n Purchase Price\n
\n
\n $0.00\n
\n
\n
\n
\n Gas Fee\n
\n
\n $0.00\n
\n
\n
\n
\n Sub Total\n
\n
\n $0.00\n
\n
\n
\n
\n Estimated Sales Tax\n
\n
\n $0.00\n
\n
\n
\n
\n Total\n
\n
\n $0.00\n
\n
\n\n
\n {/*
    \n
  • The NFT carries a limited licence referencing the artwork.
  • \n
  • Your purchase is conditional and will only become final upon a) our receipt in full of your payment b) validation of your identity which may require your submission of official documents c) completion of a hold period which may be as long as three months.
  • \n
  • All of your payments are non-refundable.
  • \n
*/}\n
\n this.handleCheckboxChange(e)} />\n \n
\n
\n
\n
\n this.confirmPurchase()}>\n Confirm\n \n
\n
\n );\n }\n}\n\nConfirmFreebie.propTypes = {\n onPurchaseAttempt: PropTypes.func,\n purchaseResult: PropTypes.string,\n};\n\nexport default ConfirmFreebie;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport PubSub from 'pubsub-js';\nimport { toast } from 'react-toastify';\nimport { Link } from 'react-router-dom';\nimport { account } from '@onflow/fcl';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\nimport SimpleModal from '../modal/modal';\nimport LoginForm from '../account/loginForm';\nimport BillingForm from '../account/billingForm';\nimport ConfirmPurchase from './confirmPurchase';\nimport PaySafeCardEntry from './paySafeCardEntry';\nimport ConfirmFreebie from './confirmFreebie';\nimport CreatorManager from '../../managers/Creator';\nimport { getParameterByName } from '../../managers/Helpers';\n\nclass FeaturedDrop extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoggedIn: false,\n isLoading: true,\n isLoadingText: 'Fetching asset details. Stand by...',\n accountData: null,\n showModal: false,\n modalMode: '',\n purchaseResult: null,\n creatorId: process.env.CREATOR_ID,\n amountLeft: 0,\n isFree: false,\n hasCard: false,\n paymentToken: null,\n paymentObject: {},\n rawTotal: 0,\n dropData: null,\n };\n PubSub.subscribe('account_updated', this.onPubSubEvent);\n }\n\n getAccountDetails = async () => {\n const accountData = await AccountManager.get(AccountManager.getToken(), true);\n if (accountData) {\n this.setState({\n accountData,\n });\n }\n }\n\n onPubSubEvent = async () => {\n await this.getAccountDetails();\n if (AccountManager.isLoggedIn()) {\n this.setState({\n isLoggedIn: true,\n });\n } else {\n this.setState({\n isLoggedIn: false,\n });\n }\n }\n\n async componentDidMount() {\n const { data, dropId } = this.props;\n console.log('featuredDrop data:');\n console.log(dropId);\n let dropData = data;\n\n if (dropId) {\n // go get the full drop\n dropData = await CreatorManager.getSingleDropV2(dropId);\n }\n\n this.setState({\n data: dropData,\n isLoading: false,\n });\n\n const hasPurchased = localStorage.getItem(process.env.PURCHASE_COOKIE + dropData.drop.dropId);\n if (AccountManager.isLoggedIn()) {\n await this.getAccountDetails();\n this.setState({\n isLoggedIn: true,\n amountLeft: dropData.drop.quantityAvailable,\n isFree: dropData.drop.salesType === 1,\n purchaseResult: hasPurchased ? 'success' : null,\n });\n } else {\n this.setState({\n isLoggedIn: false,\n isFree: dropData.drop.salesType === 1,\n amountLeft: dropData.drop.quantityAvailable,\n });\n }\n }\n\n componentWillUnmount() {\n toast.dismiss();\n }\n\n loginModal = (e) => {\n e.preventDefault();\n this.setState({\n showModal: true,\n modalMode: 'login',\n });\n }\n\n checkBuyStatus = async (e) => {\n const { isFree, accountData } = this.state;\n let mode = '';\n\n if (isFree) {\n mode = 'freebie';\n } else if (accountData && accountData.billingInfo && AccountManager.getSelectedCard(accountData.paymentMethod)) {\n mode = 'purchase';\n } else if (accountData && accountData.billingInfo && !accountData.paymentMethod) {\n mode = 'card';\n } else {\n mode = 'billing';\n }\n if (e) {\n e.preventDefault();\n }\n this.setState({\n showModal: true,\n modalMode: mode,\n });\n }\n\n loginSuccess = async () => {\n await this.getAccountDetails();\n this.setState({\n showModal: false,\n isLoggedIn: true,\n });\n toast.success('Log in success.');\n PubSub.publish('account_updated');\n this.checkBuyStatus();\n }\n\n loginFailed = (error) => {\n toast.error(error || 'Oops! Something went wrong. Try again later.');\n }\n\n onBillingSuccess = async () => {\n PubSub.publish('account_updated');\n this.setState({\n modalMode: 'card',\n });\n }\n\n onCardSuccess = async () => {\n const accountData = await AccountManager.get(AccountManager.getToken(), true);\n this.setState({\n accountData,\n modalMode: 'purchase',\n });\n }\n\n attemptPurchase = async (amount, paymentId, cartToken) => {\n const { data, amountLeft } = this.state;\n const parsedDetails = amount;\n parsedDetails.nftName = data.asset.name;\n parsedDetails.nftLink = data.asset.mediaThumbnailUrl || data.asset.mediaUrl;\n // parsedDetails.assetVariationId = data.asset.assetVariationId;\n\n // const payload = {\n // dropId: data.drop.dropId,\n // amount: amount.rawTotal,\n // site: window.location.protocol + '//' + window.location.host,\n // creatorId,\n // details: parsedDetails,\n // };\n\n const payload = {\n gasFee: parsedDetails.gasFee,\n dropId: data.drop.dropId,\n nftName: parsedDetails.nftName,\n // assetVariationId: parsedDetails.assetVariationId,\n cartToken: '',\n };\n\n if (paymentId) {\n payload.pmId = paymentId;\n payload.paymentToken = paymentId;\n }\n\n if (cartToken) {\n payload.cartToken = cartToken;\n }\n\n if (getParameterByName('testAmount', window.location.href)) {\n payload.testAmount = parseInt(getParameterByName('testAmount', window.location.href), 10);\n }\n\n const purchaseData = await CreatorManager.confirmPurchase(payload, AccountManager.getToken());\n\n if (purchaseData && purchaseData.success) {\n // update the displayed amount remaining\n const newAmountLeft = amountLeft === 0 ? 0 : amountLeft - 1;\n this.setState({\n showModal: false,\n amountLeft: newAmountLeft,\n purchaseResult: 'success',\n });\n gtag('event', process.env.CREATOR_SUBDOMAIN + '_purchase', { // eslint-disable-line\n event_category: process.env.CREATOR_SUBDOMAIN + '_purchase_success',\n event_label: 'User purchased a ' + process.env.CREATOR_SUBDOMAIN + ' NFT',\n });\n toast.success(purchaseData.message, {\n autoClose: false,\n });\n localStorage.setItem(process.env.PURCHASE_COOKIE + data.drop.dropId, 1);\n // PubSub.publish('drop _updated');\n } else {\n this.setState({\n showModal: false,\n });\n toast.error(purchaseData.message || 'Oops! Something went wrong while processing the payment. Please try again later.', {\n autoClose: false,\n });\n }\n }\n\n updateCardToken = (token) => {\n const { paymentObject } = this.state;\n this.setState({\n paymentToken: token,\n });\n this.attemptPurchase(paymentObject.amount, paymentObject.paymentId, paymentObject.cartToken);\n }\n\n showCardEntry = (amount, paymentId, cartToken) => {\n const tempPaymentObj = {\n amount,\n paymentId,\n cartToken,\n };\n this.setState({\n rawTotal: tempPaymentObj.amount.rawTotal,\n modalMode: 'cardentry',\n paymentObject: tempPaymentObj,\n });\n }\n\n closeModal = () => {\n this.setState({\n showModal: false,\n });\n }\n\n render() {\n const { pageType, layoutStyle } = this.props;\n const {\n isLoading, isLoadingText, data, rawTotal, isFree, isLoggedIn, showModal, modalMode, accountData, purchaseResult, amountLeft,\n } = this.state;\n return (\n
\n {isLoading\n && }\n
\n this.setState({ showModal: false })}>\n {modalMode === 'login'\n && this.loginSuccess()} onFail={(error) => this.loginFailed(error)} onRegisterButton={() => this.closeModal()} />}\n {(modalMode === 'billing' || modalMode === 'card')\n && (\n
\n this.onBillingSuccess()}\n onCardSuccess={() => this.onCardSuccess()}\n accountInfo={accountData}\n mode={modalMode} />\n
\n )}\n {modalMode === 'purchase'\n && (\n
\n this.attemptPurchase(amount, paymentId, cartToken)}\n purchaseResult={purchaseResult}\n accountInfo={accountData} />\n
\n )}\n {modalMode === 'cardentry' && (\n this.updateCardToken(token)} />\n )}\n {modalMode === 'freebie'\n && (\n
\n this.attemptPurchase(amount)}\n purchaseResult={purchaseResult}\n accountInfo={accountData} />\n
\n )}\n
\n\n {data\n && (\n
\n
\n
\n {data.asset.mediaMP4 || data.asset.mediaUrl.includes('.mp4')\n ? (\n \n )\n : \"ethos\"}\n
\n
\n
\n \n
\n \n {purchaseResult === 'success'\n ? (\n
\n

\n Congratulations. Your purchase of\n {' '}\n \n \n {' '}\n was successful.\n

\n \n

Keep an eye on your inbox. An email receipt is on its way.

\n

In the meantime, you can view your NFT in your My Account section.

\n
\n

View Your NFT

\n
\n )\n : (\n
\n \n
\n
{process.env.PURCHASE_INSTRUCTIONS}
\n {!data.asset.name.includes('Onion Haters')\n && (\n
\n {amountLeft}\n {' '}\n remain.\n
\n )}\n {isFree\n ? (\n
\n $0 USD\n
\n )\n : (\n
\n $\n {data.drop.buyItNow}\n {' '}\n USD\n
\n )}\n {/*
Date the drop is available
*/}\n {!isLoggedIn\n ? (\n
\n {amountLeft <= 0\n ? Sold Out\n : (\n \n )}\n
\n )\n : (\n \n )}\n
\n )}\n \n
\n
\n )}\n \n \n );\n }\n}\n\nFeaturedDrop.propTypes = {\n data: PropTypes.objectOf(PropTypes.object),\n pageType: PropTypes.string,\n layoutStyle: PropTypes.string,\n};\n\nexport default FeaturedDrop;\n","import React, { Component } from 'react';\n\nclass FAQ extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {}\n\n render() {\n return (\n \n
\n \n
\n FAQ\n
\n
\n
\n What’s an NFT?\n
\n
\n

\n {'An NFT is a ‘non-fungible token’, which is a one-of-a-kind ownable digital asset that you can purchase. When you purchase one of these tokens, you are the official owner of an original '}\n {' '}\n {process.env.SITE_NAME}\n {' '}\n {' NFT that provides you some serious real-world benefits.'}\n {' '}\n

\n
\n
\n How do I purchase this NFT?\n
\n
\n

When the campaign goes live, simply click buy-now and purchase with your credit card.

\n

Through this process you will be prompted to create an account if you do not have one already. This is to ensure you can view and transfer your NFT in the future.

\n
\n
\n {'Do I need cryptocurrency to buy a '}\n {' '}\n {process.env.SITE_NAME}\n {' '}\n {' NFT?'}\n
\n
\n

Not at all. You can pay using your credit card.

\n
\n
\n What happens when I buy one of the digital assets?\n
\n
\n

We will be minting the digital assets, which is a crypto term meaning that your digital asset will become a part of the blockchain – the crypto world where digital assets are recorded.

\n {/*

If you’re one of the lucky ones who received an unlockable, you’ll also be gifted the real-world prizes linked to certain NFT purchases.

*/}\n
\n
\n What happens if I don’t have a Crypto Wallet?\n
\n
\n

\n {'Not to worry, you do not need a crypto wallet to purchase this '}\n {' '}\n {process.env.SITE_NAME}\n {' '}\n {' NFT.'}\n

\n

We are here to make things easier, transferring your NFT can be done any time with a few simple clicks.

\n
\n
\n Is there support available if I need help?\n
\n
\n

Yes, absolutely! We are here to help every step of the way.

\n

At any time, if you have any questions or need any support, please email us and we will be happy to help you:

\n

{process.env.CLIENT_EMAIL}

\n

{process.env.CLIENT_WEBSITE}

\n
\n
\n
\n \"ethos\"\n
\n
\n \n );\n }\n}\n\nexport default FAQ;\n","import React, { Component } from 'react';\n\nclass SkullJewerlyFAQ extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {}\n\n render() {\n return (\n \n
\n \n
\n FAQ\n
\n
\n
\n What’s an NFT?\n
\n
\n

{'NFT, short for \"non-fungible token,\" is the digital badass that\\'s shaking up the game. It\\'s a digital asset that\\'s one of a kind and can\\'t be duplicated.'}

\n

{'Imagine having a baseball card signed by your favorite player. Sure, there may be other cards with their picture on them, but your card is the only one that\\'s got their signature. An NFT works the same way - it\\'s an exclusive digital item that\\'s truly unique and can\\'t be copied.'}

\n

{'So if you\\'re looking to own something truly rare and valuable, an NFT from skulljewelry.com might be right up your alley.'}

\n
\n
\n How do I purchase this NFT?\n
\n
\n

When the campaign goes live, simply click buy-now and purchase with your credit card.

\n

Through this process you will be prompted to create an account if you do not have one already. This is to ensure you can view and transfer your NFT in the future.

\n
\n
\n {'Do I need cryptocurrency to buy a '}\n {' '}\n {process.env.SITE_NAME}\n {' '}\n {' NFT?'}\n
\n
\n

Not at all. You can pay using your credit card.

\n
\n
\n What happens when I buy one of the digital assets?\n
\n
\n

{'When you buy an NFT, we\\'ll create a digital record of it on something called the blockchain. Think of the blockchain as a digital ledger that keeps track of all the digital assets in the crypto world. By \"minting\" your NFT, we\\'re making sure that it\\'s officially recorded and that you can prove you own it. It\\'s kind of like getting a certificate of ownership for a rare item - you can show it off and prove that it\\'s really yours.'}

\n
\n
\n What happens if I don’t have a Crypto Wallet?\n
\n
\n

\n {'Not to worry, you do not need a crypto wallet to purchase this '}\n {' '}\n {process.env.SITE_NAME}\n {' '}\n {' NFT.'}\n

\n

We are here to make things easier, transferring your NFT can be done any time with a few simple clicks.

\n
\n
\n Is there support available if I need help?\n
\n
\n

Yes, absolutely! We are here to help every step of the way.

\n

At any time, if you have any questions or need any support, please email us and we will be happy to help you:

\n

{process.env.CLIENT_EMAIL}

\n

{process.env.CLIENT_WEBSITE}

\n
\n
\n
\n \"ethos\"\n
\n
\n \n );\n }\n}\n\nexport default SkullJewerlyFAQ;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport HomeHero from '../components/hero/homeHero';\nimport HomeDrop from '../components/featuredDrop/homeDrop';\nimport FeaturedDrop from '../components/featuredDrop/featuredDrop';\nimport FAQ from '../components/about/faq';\nimport SkullJewerlyFAQ from '../components/about/skulljewerlyFaq';\nimport CreatorManager from '../managers/Creator';\nimport FullWidthImage from '../components/hero/fullWidthImage';\nimport { getParameterByName } from '../managers/Helpers';\n\nclass Home extends Component {\n constructor(props) {\n super(props);\n this.state = {\n dropId: process.env.DROP_ID,\n dropData: null,\n };\n }\n\n getDropData = async () => {\n const { dropId, dropId2 } = this.state;\n const dropData = await CreatorManager.getDrop(dropId);\n if (dropData) {\n this.setState({\n dropData,\n });\n }\n }\n\n async componentDidMount() {\n window.scrollTo(0, 0);\n if (window.location.hash.includes('register=success')) {\n toast.success('Successfully created your account.');\n window.location.hash = '';\n }\n if (window.location.hash.includes('login=success')) {\n toast.success('Log in success.');\n window.location.hash = '';\n }\n if (getParameterByName('nftToken', window.location.href)) {\n // protec against duplicate tokens\n Object.entries(localStorage).map((obj) => {\n const key = obj[0];\n if (key.includes('NFT_TRANSFER')) {\n sessionStorage.removeItem(key);\n }\n return true;\n });\n // force the one in the URL to be in memory\n sessionStorage.setItem('NFT_TRANSFER_' + getParameterByName('nftToken', window.location.href), getParameterByName('nftToken', window.location.href));\n window.location.href = '/edrop/?nftToken=' + getParameterByName('nftToken', window.location.href);\n }\n await this.getDropData();\n }\n\n scrollToSection = (element) => {\n const scrollToElement = document.getElementById(element);\n scrollToElement.scrollIntoView({ behavior: 'smooth' });\n }\n\n render() {\n const { dropData, transferToken } = this.state;\n return (\n
\n {dropData\n && (\n
\n this.scrollToSection('moreInfoElement')}\n onFaqButton={() => this.scrollToSection('homeFaq')} />\n \n {dropData.drop.dropId2}\n {dropData.drop2\n && (\n \n )}\n\n \n {process.env.CREATOR_SUBDOMAIN === 'skulljewelry'\n ? \n : }\n
\n )}\n
\n );\n }\n}\n\nexport default Home;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { toast } from 'react-toastify';\nimport PubSub from 'pubsub-js';\nimport Register from '../register/index.jsx';\nimport SimpleModal from '../modal/modal';\nimport LoginForm from '../account/loginForm';\nimport AccountManager from '../../managers/Account';\n\nclass HomeCountdown extends Component {\n constructor(props) {\n super(props);\n this.state = {\n showModal: false,\n showLoginModal: false,\n isLoggedin: false,\n hasPreRegBonus: process.env.PRE_REGISTRATION_BONUS,\n };\n }\n\n componentDidMount() {}\n\n readMore = (e) => {\n const { onFaqButton } = this.props;\n e.preventDefault();\n onFaqButton();\n }\n\n getNotified = (e) => {\n e.preventDefault();\n this.setState({\n showModal: true,\n });\n }\n\n showLoginModal = () => {\n this.setState({\n showModal: false,\n showLoginModal: true,\n });\n }\n\n loginSuccess = async () => {\n const { hasPreRegBonus } = this.state;\n PubSub.publish('account_updated');\n // hhofPreRegExistingInfo\n if (hasPreRegBonus && localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo')) {\n // generate a free NFT token\n const nftToken = await AccountManager.generateFreeNft(AccountManager.getToken(), process.env.PRE_REGISTRATION_DROP_ID);\n if (nftToken && nftToken.token) {\n localStorage.setItem(process.env.CREATOR_SUBDOMAIN + 'FreeToken', nftToken.token);\n localStorage.removeItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo');\n }\n }\n // if (window.location.pathname.includes('register')) {\n // window.location.pathname = '/drop/' + process.env.DROP_ID;\n // }\n toast.success('Log in success.');\n this.setState({\n showLoginModal: false,\n });\n window.location.href = '/account/collection';\n }\n\n loginFailed = (error) => {\n toast.error(error || 'Oops! Something went wrong. Try again later.');\n }\n\n render() {\n const { assetData, layoutStyle } = this.props;\n const { showModal, showLoginModal } = this.state;\n return (\n
\n this.setState({ showLoginModal: false })}>\n this.loginSuccess()}\n onFail={(error) => this.loginFailed(error)}\n onRegisterButton={() => this.setState({ showLoginModal: false })} />\n \n this.setState({ showModal: false })}>\n this.showLoginModal()} type=\"modal\" />\n \n
\n
\n \n
\n {assetData.mediaMP4\n ? (\n \n )\n : \"ethos\"}\n
\n\n
\n
\n \n
\n
\n
\n
\n
{process.env.PURCHASE_INSTRUCTIONS}
\n
\n\n
\n {/* \n Pre-Registration Closed\n */}\n this.getNotified(e)}>\n Pre-Register\n \n this.readMore(e)}>\n FAQ\n \n
\n
\n
\n
\n\n
\n \n );\n }\n}\n\nHomeCountdown.propTypes = {\n assetData: PropTypes.objectOf(PropTypes.object),\n layoutStyle: PropTypes.string,\n onFaqButton: PropTypes.func,\n};\n\nexport default HomeCountdown;\n","import React, { Component } from 'react';\nimport { ToastContainer } from 'react-toastify';\nimport CookieConsent from 'react-cookie-consent';\nimport HomeHero from '../components/hero/homeHero';\nimport HomeCountdown from '../components/countdown/homeCountdown';\nimport FAQ from '../components/about/faq';\nimport CreatorManager from '../managers/Creator';\nimport FullPageLoader from '../components/throbber/loader';\nimport Footer from '../components/navigation/footer';\nimport FullWidthImage from '../components/hero/fullWidthImage';\n\nclass Home extends Component {\n constructor(props) {\n super(props);\n this.state = {\n dropId: process.env.DROP_ID,\n dropData: null,\n isLoading: true,\n };\n }\n\n getDropData = async () => {\n const { dropId } = this.state;\n const dropData = await CreatorManager.getDrop(dropId);\n\n if (dropData) {\n this.setState({\n isLoading: false,\n dropData,\n });\n }\n }\n\n async componentDidMount() {\n await this.getDropData();\n }\n\n scrollToSection = (element) => {\n const scrollToElement = document.getElementById(element);\n scrollToElement.scrollIntoView({ behavior: 'smooth' });\n }\n\n render() {\n const { dropData, isLoading } = this.state;\n return (\n
\n {isLoading\n ? (\n
\n \n
\n )\n : (\n
\n {dropData\n && (\n
\n \n this.scrollToSection('moreInfoElement')}\n onFaqButton={() => this.scrollToSection('homeFaq')} />\n this.scrollToSection('homeFaq')} />\n {dropData.asset2\n && (\n this.scrollToSection('homeFaq')} />\n )}\n \n \n
\n \n ethos\n {' '}\n uses cookies to provide necessary website functionality,\n improve your experience and analyze our traffic. By using our website, you agree to \n our privacy policy\n {' '}\n and our cookies usage.\n \n \n
\n )}\n
\n )}\n
\n );\n }\n}\n\nexport default Home;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport FeaturedDrop from '../components/featuredDrop/featuredDrop';\nimport CreatorManager from '../managers/Creator';\nimport FAQ from '../components/about/faq';\nimport SkullJewerlyFAQ from '../components/about/skulljewerlyFaq';\n\nclass Drop extends Component {\n constructor(props) {\n super(props);\n this.state = {\n dropData: null,\n };\n }\n\n getDropData = async (dropId) => {\n const dropData = await CreatorManager.getSingleDropV2(dropId);\n if (dropData) {\n this.setState({\n dropData,\n });\n }\n }\n\n async componentDidMount() {\n window.scrollTo(0, 0);\n if (window.location.hash.includes('register=success')) {\n toast.success('Successfully created your account.');\n window.location.hash = '';\n }\n if (window.location.hash.includes('login=success')) {\n toast.success('Log in success.');\n window.location.hash = '';\n }\n // get the parameter from the URL because react router is stupid and now forces you to use hooks.\n const urlPatternArray = window.location.href.split('/');\n let dropId = urlPatternArray[urlPatternArray.length - 1];\n if (dropId.includes('#')) {\n dropId = dropId.substring(0, dropId.length - 1);\n }\n await this.getDropData(dropId);\n }\n\n render() {\n const { dropData } = this.state;\n return (\n
\n {dropData\n && (\n
\n \n {process.env.CREATOR_SUBDOMAIN === 'skulljewelry'\n ? \n : }\n
\n )}\n
\n );\n }\n}\n\nexport default Drop;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport LoginForm from './loginForm';\n\nclass AccountLogin extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n loginFailed = (error) => {\n toast.error(error || 'Oops! Something went wrong. Try again later.');\n }\n\n loginSuccess = () => {\n if (process.env.E_DROP_ONLY === 'true') {\n window.location.pathname = '/account/collection';\n } else {\n window.location.pathname = '/';\n }\n }\n\n componentDidMount() {}\n\n render() {\n return (\n
\n
\n
\n this.loginSuccess()}\n onFail={(error) => this.loginFailed(error)} />\n
\n
\n
\n );\n }\n}\n\nexport default AccountLogin;\n","import React, { Component } from 'react';\nimport AccountLogin from '../components/account/login';\nimport AccountManager from '../managers/Account';\n\nclass Login extends Component {\n constructor(props) {\n super(props);\n this.state = {\n creatorData: {},\n };\n }\n\n componentDidMount() {\n // TODO: if user is logged in, go to the account/collections page\n if (AccountManager.isLoggedIn()) {\n window.location.href = '/account/collection';\n }\n document.body.classList.add('-account-background');\n document.body.style.backgroundImage = 'url(' + process.env.ACCOUNT_BACKGROUND + ')';\n }\n\n componentWillUnmount() {\n document.body.classList.remove('-account-background');\n document.body.style.backgroundImage = 'none';\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default Login;\n","import React, { Component } from 'react';\n\nclass SlimHero extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {}\n\n render() {\n return (\n
\n  \n
\n );\n }\n}\n\nexport default SlimHero;\n","import React, { Component } from 'react';\nimport AccountRegister from '../components/account/register';\nimport SlimHero from '../components/hero/slimHero';\n\nclass Register extends Component {\n constructor(props) {\n super(props);\n this.state = {\n creatorData: {},\n };\n }\n\n componentDidMount() {}\n\n render() {\n return (\n
\n \n \n
\n );\n }\n}\n\nexport default Register;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\n// import PubSub from 'pubsub-js';\nimport Throbber from '../throbber';\nimport Account from '../../managers/Account';\n\nconst passwordRequirements = /(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,}/;\n\nclass ResetPassword extends Component {\n constructor(props) {\n super(props);\n this.state = {\n registerPassword: '',\n registerConfirmPassword: '',\n isLoading: false,\n isSuccess: false,\n resetToken: '',\n bearerToken: '',\n };\n }\n\n validateForm = () => {\n const { registerPassword } = this.state;\n const { registerConfirmPassword } = this.state;\n if (registerPassword === ''\n || registerConfirmPassword === '') {\n toast.error('Please fill out all fields.');\n return false;\n }\n if (registerPassword !== registerConfirmPassword) {\n toast.error('Passwords don\\'t match.');\n return false;\n }\n if (!passwordRequirements.test(registerPassword)) {\n toast.error('Passwords must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters');\n return false;\n }\n return true;\n }\n\n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n onEnterKey = (e) => {\n if (e.keyCode === 13) {\n this.validateForm();\n }\n }\n\n handleCheckboxChange = (e) => {\n let isChecked = false;\n if (e.target.checked) {\n isChecked = true;\n } else {\n isChecked = false;\n }\n this.setState({\n agreeTerms: isChecked,\n });\n }\n\n resetPassword = async (e) => {\n const {\n registerPassword, registerConfirmPassword, resetToken, bearerToken,\n } = this.state;\n let payload = {};\n e.preventDefault();\n if (this.validateForm()) {\n this.setState({\n isLoading: true,\n });\n\n payload = {\n password1: registerPassword,\n password2: registerConfirmPassword,\n };\n\n const changedPassword = await Account.recoverPassword(payload, resetToken, bearerToken);\n\n if (changedPassword && changedPassword.success) {\n this.setState({\n isLoading: false,\n isSuccess: true,\n });\n } else {\n this.setState({\n isLoading: false,\n });\n toast.error(changedPassword.message || 'Oops! Something went wrong. Please try again later');\n }\n }\n }\n\n verifyToken = async (token) => {\n this.setState({\n isLoading: true,\n });\n const resetToken = await Account.verifyResetToken(token);\n if (resetToken && resetToken.success) {\n this.setState({\n isLoading: false,\n resetToken: token,\n bearerToken: resetToken.token,\n });\n } else {\n this.setState({\n isLoading: false,\n });\n toast.error(resetToken.message || 'Oops! Something went wrong. Please try again later');\n }\n }\n\n componentDidMount() {\n document.body.classList.add('-account-background');\n document.body.style.backgroundImage = 'url(' + process.env.ACCOUNT_BACKGROUND + ')';\n const tokenParam = window.location.href.split('/');\n this.verifyToken(tokenParam[tokenParam.length - 1]);\n }\n\n componentWillUnmount() {\n document.body.classList.remove('-account-background');\n document.body.style.backgroundImage = 'none';\n }\n\n render() {\n const { registerPassword } = this.state;\n const { registerConfirmPassword } = this.state;\n const { isLoading } = this.state;\n const { isSuccess } = this.state;\n return (\n
\n
\n
\n {isLoading\n && }\n
\n Reset your password\n
\n {isSuccess\n ? (\n
\n {'You\\'ve successfully updated your password!'}\n
\n You can now return to the homepage and log in using your new password.\n
\n )\n : (\n
\n
\n Complete this form to reset your password.\n
\n
\n \n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
(Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters)
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n
\n )}\n {isSuccess\n ? (\n \n )\n : (\n
\n this.resetPassword(e)}>\n Reset Password\n \n
\n )}\n
\n
\n
\n );\n }\n}\n\nexport default ResetPassword;\n","import React, { Component } from 'react';\nimport ResetPassword from '../components/account/resetPassword';\nimport SlimHero from '../components/hero/slimHero';\n\nclass PasswordReset extends Component {\n constructor(props) {\n super(props);\n this.state = {\n creatorData: {},\n };\n }\n\n componentDidMount() {}\n\n render() {\n return (\n
\n \n \n
\n );\n }\n}\n\nexport default PasswordReset;\n","import React, { Component } from 'react';\nimport { Outlet, Link } from 'react-router-dom';\nimport PubSub from 'pubsub-js';\nimport SlimHero from '../components/hero/slimHero';\nimport AccountManager from '../managers/Account';\n\nclass Account extends Component {\n constructor(props) {\n super(props);\n this.state = {\n creatorData: {},\n accountDetails: null,\n currentSection: '',\n };\n PubSub.subscribe('account_updated', this.onPubSubEvent);\n }\n\n onPubSubEvent = () => {\n this.componentDidMount();\n }\n\n async componentDidMount() {\n document.body.classList.add('-account-background');\n document.body.style.backgroundImage = 'url(' + process.env.ACCOUNT_BACKGROUND + ')';\n if (AccountManager.isLoggedIn()) {\n // get account info\n const accountData = await AccountManager.get(AccountManager.getToken(), true);\n this.setState({\n accountDetails: accountData,\n });\n } else {\n window.location = '/login';\n }\n this.setState({\n currentSection: window.location.pathname.split('/')[2] || 'collection',\n });\n }\n\n componentWillUnmount() {\n document.body.classList.remove('-account-background');\n document.body.style.backgroundImage = 'none';\n }\n\n changeTab = (section) => {\n this.setState({\n currentSection: section,\n });\n }\n\n render() {\n const { creatorData, accountDetails, currentSection } = this.state;\n return (\n
\n
\n \n
\n {accountDetails\n ? (\n
\n
\n {/*

\n {'Hello '}\n {accountDetails.firstName}\n

*/}\n {/*

\n Here you can view and make changes to your ethos account.\n

*/}\n
\n \n
\n )\n :
Loading account data...
}\n
\n
\n
\n );\n }\n}\n\nexport default Account;\n","import React, { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport SimpleModal from '../modal/modal';\n\nconst TransferChecker = ({ isAuthed, transferToken }) => {\n const [showModal, setShowModal] = useState(true);\n const optOut = () => {\n sessionStorage.removeItem(transferToken);\n window.location.href = '/';\n };\n return (\n
\n setShowModal(false)}>\n
\n Digital Asset Claimed\n
\n {isAuthed\n ? (\n
\n Go to your collections page to view this free digital asset.\n
\n )\n : (\n
\n Create an account or log in to claim this free digital asset.\n
\n )}\n
\n {isAuthed\n ? (\n \n Go to collections\n \n )\n : (\n \n Log in\n \n )}\n  \n \n
\n {!isAuthed\n && (\n
\n
\n {'Don\\'t have an ethos account?'}\n
\n\n
\n \n Register Now\n \n
\n
\n )}\n
\n
\n );\n};\nexport default TransferChecker;\n","import React, { Component } from 'react';\nimport SlimHero from '../components/hero/slimHero';\nimport EDropLanding from '../components/transfer/edropLanding';\nimport { getParameterByName } from '../managers/Helpers';\nimport AccountManager from '../managers/Account';\nimport TransferChecker from '../components/transfer/transferChecker';\n\nclass EDrop extends Component {\n constructor(props) {\n super(props);\n this.state = {\n creatorData: {},\n transferToken: null,\n transferCookie: null,\n };\n }\n\n componentDidMount() {\n document.title = process.env.CREATOR_SUBDOMAIN === 'account' ? 'ethos | Claim Digital Asset' : process.env.CREATOR_SUBDOMAIN + ' | Claim Digital Asset';\n if (getParameterByName('nftToken', window.location.href)) {\n // protec against duplicate tokens\n Object.entries(sessionStorage).map((obj) => {\n const key = obj[0];\n if (key.includes('NFT_TRANSFER')) {\n sessionStorage.removeItem(key);\n }\n return true;\n });\n // force the one in the URL to be in memory\n this.setState({\n transferCookie: 'NFT_TRANSFER_' + getParameterByName('nftToken', window.location.href),\n transferToken: getParameterByName('nftToken', window.location.href),\n });\n sessionStorage.setItem('NFT_TRANSFER_' + getParameterByName('nftToken', window.location.href), getParameterByName('nftToken', window.location.href));\n }\n }\n\n componentWillUnmount() {\n document.title = process.env.SITE_NAME;\n }\n\n render() {\n const { transferCookie, transferToken } = this.state;\n return (\n
\n \n {transferToken && AccountManager.isLoggedIn()\n ? (\n \n )\n : }\n
\n );\n }\n}\n\nexport default EDrop;\n","import React, { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\n\nfunction HeathAboutEdrop() {\n // const [questions, setQuestions] = useState([]);\n \n return (\n
\n
\n
\n
THE HEATH CLUB TOKEN
\n
Introducing the Heath Club Token, the non-fungible token (NFT) initiative designed to engage with its community of VIP advocates and superfans.
\n
The Heath Club Token unlocks the benefit to collaborate on new launches, overnight stays, partner rewards, third party discounts and free products.
\n
\n
\n
REDEEM YOUR HEATH CLUB TOKEN
\n
When you redeem your Heath Club token, it will sit within your ethos account. By owning this token, you will unlock benefits and rewards that will be shared with you soon.
\n {process.env.CREATOR_ID === 'ae6365f6-b510-4114-bc9b-8ed1c431960e'\n ? (\n \n Activate your membership\n \n )\n : (\n \n Activate your membership\n \n )}\n
\n
\n
WIN AN EXCLUSIVE FOUNDER’S TOKEN
\n
When you redeem your Heath Club Token, you will automatically enter a competition to win one of the 15 exclusive Founder’s Tokens.
\n
Within the Founder’s Token portfolio, there are 12 base level tokens and 3 gold-standard tokens. Each will unlock unique benefits and rewards related to wellness, superior products, fashion & lifestyle.
\n
The benefits will drop soon and your rewards will be communicated on the Heath Twitter @HeathSkincare.
\n
\n
\n
What is an NFT?
\n
An NFT is a digital token that lives on the blockchain. If you have the digital token, you will access exclusive benefits that only a holder gets, almost like a membership. However, unlike most memberships, you own an NFT and you can transfer it to others.
\n
\n \n
\n
“Ever since its conception, Heath has always been more than just a skincare brand. Our core values lie in community, collaboration with our loyal brand users and wellness. That’s why we have stepped into the world of Web3, using cutting-edge technology to give our most loyal community something special.”
\n
Welcome to the next level-level Heath Club!
\n
• Harry Aaronson, co-founder Heath Skincare.
\n
\n
\n {/*
\n \"Instagram\"\n \"Twitter\"\n
*/}\n
\n );\n}\n\nexport default HeathAboutEdrop;\n","import React, { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\n\nfunction AllureAboutEdrop() {\n // const [questions, setQuestions] = useState([]);\n \n return (\n
\n
\n
\n
Allure Bridals
\n
We craft every one of our wedding tuxedos with high-end fabrics, thoughtful designs, and an eye for class, beauty, and sophistication. Make your big day truly special when you choose Allure Bridals for your wedding suits and tuxedos.
\n
Our garments are made in a clean, positive work environment using ethically-sourced materials, by people who are passionate about the celebration of beauty and love. Each piece takes an average of 12 to 16 weeks from design to final stitch. We take pride in our production process, because every element is hand-sewn and carefully crafted. Allure’s primary focus is to create with ethically-sourced materials in a positive workspace where creativity thrives. These tuxedos and gowns are individual masterpieces, created by expert craftspeople.
\n
Allure Bridals : For Your Forever.
\n {process.env.CREATOR_ID === '0b10f5cd-ac4c-4a51-99e2-9548bef5d573'\n ? (\n \n Unlock Digital Suits & Tuxedos\n \n )\n : (\n \n Unlock Digital Suits & Tuxedos\n \n )}\n
\n
\n
Allure Men Digital Suits & Tuxedos
\n
Now presenting Allure Digital Suits & Tuxedos, an online authenticator for your new garment, that lives forever on the blockchain. Download your suit to Apple Wallet, or send to your email for further enjoyment.
\n
With an Allure Men Digital Suit & Tuxedo, you can always carry a digital keepsake with you that represents the memories you’ve made in this suit. This Digital Suit & Tuxedo also represents Allure Authentication, verifying your garment as an authentic Allure through immutable blockchain technology.
\n
Allure Suits & Tuxedos: always dapper, even in digital.
\n
\n \n
\n {/*
\n \"Instagram\"\n \"Twitter\"\n
*/}\n
\n );\n}\n\nexport default AllureAboutEdrop;\n","import React, { Component } from 'react';\nimport SlimHero from '../components/hero/slimHero';\nimport HeathAboutEdrop from '../components/edrop/heathAboutEdrop';\nimport AllureAboutEdrop from '../components/edrop/allureAboutEdrop';\n\nclass EDrop extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {\n document.body.classList.add('-account-background');\n document.body.style.backgroundImage = 'url(' + process.env.ACCOUNT_BACKGROUND + ')';\n }\n\n componentWillUnmount() {\n document.title = process.env.SITE_NAME;\n document.body.classList.remove('-account-background');\n document.body.style.backgroundImage = 'none';\n }\n\n render() {\n const { nftToken } = this.state;\n return (\n
\n
\n \n \n
\n
\n );\n }\n}\n\nexport default EDrop;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport PubSub from 'pubsub-js';\nimport AccountManager from '../../managers/Account';\nimport Throbber from '../throbber';\n\nconst emailPattern = /^[-a-z0-9~!$%^&*_=+}{'?]+(\\.[-a-z0-9~!$%^&*_=+}{'?]+)*@([a-z0-9_][-a-z0-9_]*(\\.[-a-z0-9_]+)*\\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;\nconst passwordRequirements = /(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,}/;\n\nclass AccountDetails extends Component {\n constructor(props) {\n super(props);\n this.state = {\n accountDetails: null,\n isLoading: false,\n updateFirstname: '',\n updateLastname: '',\n updateEmail: '',\n updateUsername: '',\n updateTelephone: '',\n updatePassword: '',\n updateConfirmPassword: '',\n };\n }\n\n async componentDidMount() {\n // get the account details from the AccountManager\n // we can assume that the user is already logged in here\n const accountData = await AccountManager.get(AccountManager.getToken());\n\n this.setState({\n accountDetails: accountData,\n updateFirstname: accountData.firstName,\n updateLastname: accountData.lastName,\n updateEmail: accountData.email,\n updateUsername: accountData.username,\n updateTelephone: accountData.telephone,\n });\n }\n\n onEnterKey = (e) => {\n if (e.keyCode === 13) {\n this.validateForm();\n }\n }\n\n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n validateForm = () => {\n const { updateFirstname } = this.state;\n const { updateLastname } = this.state;\n const { updateEmail } = this.state;\n const { updateUsername } = this.state;\n const { updateTelephone } = this.state;\n const { updatePassword } = this.state;\n const { updateConfirmPassword } = this.state;\n const { accountDetails } = this.state;\n if (updateEmail === ''\n || updateFirstname === ''\n || updateLastname === ''\n || updateUsername === ''\n || updateTelephone === '') {\n toast.error('Please fill out all fields.');\n return false;\n }\n if (!emailPattern.test(updateEmail)) {\n toast.error('Please enter a valid email address.');\n return false;\n }\n if (!accountDetails.isVerified) {\n if (updatePassword !== updateConfirmPassword) {\n toast.error('Passwords don\\'t match.');\n return false;\n }\n if (!passwordRequirements.test(updatePassword)) {\n toast.error('Passwords must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters');\n return false;\n }\n }\n return true;\n }\n\n updateDetails = async (e) => {\n const { updateFirstname } = this.state;\n const { updateLastname } = this.state;\n const { updateEmail } = this.state;\n const { updateUsername } = this.state;\n const { updateTelephone } = this.state;\n const { updatePassword } = this.state;\n e.preventDefault();\n let payload = {};\n payload = {\n email: updateEmail,\n firstname: updateFirstname,\n lastname: updateLastname,\n username: updateUsername,\n telephone: updateTelephone,\n password: updatePassword,\n };\n if (this.validateForm()) {\n this.setState({\n isLoading: true,\n });\n const accountChanges = await AccountManager.update(payload, AccountManager.getToken());\n const freshAccountDetails = await AccountManager.get(AccountManager.getToken(), true);\n if (accountChanges && freshAccountDetails) {\n this.setState({\n accountDetails: freshAccountDetails,\n isLoading: false,\n });\n PubSub.publish('account_updated');\n toast.success('Account saved!');\n }\n }\n }\n\n render() {\n const { accountDetails } = this.state;\n const { updateFirstname } = this.state;\n const { updateLastname } = this.state;\n const { updateEmail } = this.state;\n const { updateTelephone } = this.state;\n const { updateUsername } = this.state;\n const { isLoading } = this.state;\n const { updatePassword } = this.state;\n const { updateConfirmPassword } = this.state;\n return (\n
\n {accountDetails\n && (\n
\n
\n {isLoading\n && }\n

\n Contact Details\n

\n
\n View and update your contact details here\n
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n {!accountDetails.isVerified\n && (\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n )}\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n this.updateDetails(e)}>\n Update Details\n \n
\n
\n
\n
\n )}\n
\n );\n }\n}\n\nexport default AccountDetails;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport PubSub from 'pubsub-js';\nimport BillingForm from './billingForm';\nimport AccountManager from '../../managers/Account';\n\nclass AccountBilling extends Component {\n constructor(props) {\n super(props);\n this.state = {\n accountData: null,\n modalMode: '',\n };\n }\n\n getAccountDetails = async () => {\n const accountData = await AccountManager.get(AccountManager.getToken());\n if (accountData) {\n this.setState({\n accountData,\n });\n }\n }\n\n async componentDidMount() {\n // get billingInfo if it exists\n const accountData = await AccountManager.get(AccountManager.getToken());\n if (accountData) {\n this.setState({\n accountData,\n });\n }\n // console.log(accountData);\n // if (accountData && accountData.billingInfo) {\n // console.log(accountData.billingInfo);\n // this.setState({\n // billingAddress: accountData.billingInfo.address || '',\n // billingCity: accountData.billingInfo.city || '',\n // billingCode: accountData.billingInfo.zip || '',\n // country: accountData.billingInfo.country || '',\n // region: accountData.billingInfo.state || '',\n // isLoading: false,\n // hasBillingInfo: true,\n // hasPaymentMethod: !!accountData.billingInfo.hasPaymentMethod,\n // });\n // } else {\n // this.setState({\n // isLoading: false,\n // hasBillingInfo: false,\n // });\n // }\n }\n\n onBillingSuccess = async () => {\n await AccountManager.get(AccountManager.getToken(), true);\n PubSub.publish('account_updated');\n }\n\n onCardSuccess = () => {\n toast.success('Billing details successfully updated!');\n this.setState({\n modalMode: 'purchase',\n });\n }\n\n render() {\n const {\n accountData, modalMode,\n } = this.state;\n return (\n
\n {accountData\n && (\n
\n this.onBillingSuccess()}\n onCardSuccess={() => this.onCardSuccess()}\n mode={modalMode} />\n
\n )}\n
\n );\n }\n}\n\nexport default AccountBilling;\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\n\nconst passwordRequirements = /(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,}/;\n\nclass AccountPassword extends Component {\n constructor(props) {\n super(props);\n this.state = {\n passwordCurrent: '',\n passwordNew: '',\n passwordConfirm: '',\n isLoading: false,\n };\n }\n\n componentDidMount() {}\n\n onEnterKey = (e) => {\n if (e.keyCode === 13) {\n // this.validateForm();\n }\n }\n\n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n changePassword = async (e) => {\n const { passwordCurrent, passwordNew } = this.state;\n e.preventDefault();\n if (this.validateForm()) {\n const payload = {\n currentPassword: passwordCurrent,\n newPassword: passwordNew,\n };\n this.setState({\n isLoading: true,\n });\n const newPassword = await AccountManager.changePassword(payload, AccountManager.getToken());\n this.setState({\n isLoading: false,\n });\n if (newPassword && !newPassword.error) {\n this.setState({\n passwordCurrent: '',\n passwordNew: '',\n passwordConfirm: '',\n });\n toast.success('Password changed! Please use your new password the next time you log in!');\n } else {\n toast.error(newPassword && newPassword.message ? newPassword.message : 'Oops! Something went wrong. Please try again later.');\n }\n }\n }\n\n validateForm = () => {\n const { passwordCurrent, passwordNew, passwordConfirm } = this.state;\n if (passwordCurrent === ''\n || passwordNew === ''\n || passwordConfirm === '') {\n toast.error('Please fill out all fields.');\n return false;\n }\n if (passwordNew !== passwordConfirm) {\n toast.error('Passwords don\\'t match.');\n return false;\n }\n if (!passwordRequirements.test(passwordNew)) {\n toast.error('Passwords must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters');\n return false;\n }\n return true;\n }\n\n render() {\n const {\n isLoading, passwordCurrent, passwordNew, passwordConfirm,\n } = this.state;\n return (\n
\n
\n {isLoading\n && }\n \n

\n Account Password\n

\n
\n Change your password here\n
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
(Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters)
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n this.changePassword(e)}>\n Change Password\n \n
\n
\n
\n
\n );\n }\n}\n\nexport default AccountPassword;\n","import React, { Component } from 'react';\nimport FlowWallet from './flowWallet';\nimport Account from '../../managers/Account';\nimport MetamaskWallet from '../wallet/metamaskWallet';\n\nclass AccountWallet extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoggingIn: false,\n };\n }\n\n updateFlowWallet = async (user) => {\n const { isLoggingIn } = this.state;\n const payload = {\n blockchain: 'flow',\n walletType: 'blocto',\n walletAddress: null,\n };\n if (isLoggingIn) {\n payload.walletAddress = user.addr;\n await Account.addWallet(payload, Account.getToken());\n // TODO: Save the wallet address to our database\n }\n }\n\n updateEthereumWallet = async (user) => {\n const { isLoggingIn } = this.state;\n const payload = {\n blockchain: 'polygon',\n walletType: 'metamask',\n walletAddress: user.addr,\n };\n await Account.addWallet(payload, Account.getToken());\n }\n\n onLogInAttempt = () => {\n this.setState({\n isLoggingIn: true,\n });\n }\n\n componentDidMount() {}\n\n render() {\n return (\n
\n
\n

\n Wallet Settings\n

\n
\n

\n We recommend that you connect your own wallet. Once your wallet is connected you can transfer / claim any NFT that ethos may be holding for you so that you have full and complete ownership of your digital assets. Some of the benefits of having full ownership over your digital assets are highlighted \n \n here\n .\n

\n

\n {'If you don\\'t want to connect your own wallet right now, that\\'s ok! We are happy to hold any digital assets for you to make the process easier and we will always enable you to connect your own wallet in the future.'}\n

\n
\n
\n this.updateEthereumWallet(user)} />\n
\n {/*
\n this.updateFlowWallet(user)}\n onLogInAttempt={() => this.onLogInAttempt()} />\n
*/}\n
\n
\n );\n }\n}\n\nexport default AccountWallet;\n","import React, { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment-mini';\nimport * as fcl from '@onflow/fcl';\nimport ElipsDropdown from '../common/ElipsDropdown';\nimport AccountManager from '../../managers/Account';\nimport { getBlockchainType } from '../../managers/Helpers';\n\nconst NftCard = ({\n item, onViewerSelect, onTransfer, onCancel, onGenerateNftPass,\n}) => {\n const [transactionStatus, setTransactionStatus] = useState(0);\n const [utilityCollapse, setUtilityCollapse] = useState(false);\n const [detailsCollapse, setDetailsCollapse] = useState(false);\n\n const flowscanUrl = process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://testnet.flowview.app/account/' : 'https://www.flowview.app/account/';\n const collectionName = 'ethos' + item.asset.name.replace(/\\s/g, '');\n const polyscanUrl = process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://mumbai.polygonscan.com/' : 'https://polygonscan.com/';\n\n const TransferNFT = (nft) => {\n onTransfer(nft);\n };\n\n const launchViewer = (e) => {\n e.preventDefault();\n onViewerSelect();\n };\n\n const GenerateNftPass = (nft) => {\n onGenerateNftPass(nft);\n };\n\n const CancelTransfer = (nft) => {\n const updatedNft = nft;\n // updatedNft.hasPendingTransfer = false;\n // make sure the user confirms the cancel\n onCancel(updatedNft);\n };\n \n const WithdrawNft = async (_COLLECTION_NAME_) => {\n // create collection\n try {\n const transactionId = await fcl.mutate({\n cadence: `\n\n import ${_COLLECTION_NAME_} from 0x${_COLLECTION_NAME_}\n import NonFungibleToken from 0x631e88ae7f1d7c20\n \n transaction {\n \n prepare(acct: AuthAccount) {\n if acct.borrow<& ${_COLLECTION_NAME_}.Collection>(from: ${_COLLECTION_NAME_}.CollectionStoragePath) == nil{\n\n let collection <- Chapter2Bikes.createEmptyCollection()\n \n // store the empty NFT Collection in account storage\n acct.save<@NonFungibleToken.Collection>(<-collection, to: ${_COLLECTION_NAME_}.CollectionStoragePath)\n \n log(\"Collection created.\")\n \n // create a public capability for the Collection\n acct.link<&${_COLLECTION_NAME_}.Collection{NonFungibleToken.CollectionPublic, ${_COLLECTION_NAME_}.CollectionPublic}>(\n ${_COLLECTION_NAME_}.CollectionPublicPath,\n target: ${_COLLECTION_NAME_}.CollectionStoragePath\n )\n log(\"Capability created\")\n }\n }\n \n execute {\n }\n }\n `,\n args: () => [],\n payer: fcl.authz,\n proposer: fcl.authz,\n authorizations: [fcl.authz],\n limit: 9999,\n });\n \n fcl.tx(transactionId).subscribe((res) => {\n setTransactionStatus(res.status);\n });\n\n console.log(fcl.tx(transactionId).onceSealed());\n } catch (error) {\n // colllection already created\n console.log(error);\n throw error;\n } finally {\n // withdraw nft\n await AccountManager.claimNft(item.id);\n }\n };\n\n const toggleCollapse = (content) => {\n switch (content) {\n case 'utility': setUtilityCollapse(!utilityCollapse); break;\n case 'details': setDetailsCollapse(!detailsCollapse); break;\n default: break;\n }\n return null;\n };\n\n const formatThumbnail = (number, imageUrl, nft) => {\n if (nft && nft.drop) {\n if (nft.drop.dropId === '4208e12d-abc1-4180-af0f-d2083429784d') {\n const imagePath = 'https://ipfs.ethosnft.com/lovejules/2010-nfth-50-';\n let constructedPath = '';\n if (number < 10) {\n constructedPath = imagePath + '0' + number + '.png';\n } else {\n constructedPath = imagePath + number + '.png';\n }\n return constructedPath;\n }\n }\n return imageUrl;\n };\n \n const formatSerialNumber = (number, nft) => {\n if (nft.drop.dropId === '4208e12d-abc1-4180-af0f-d2083429784d') {\n const serialPrefix = '2010.NFTH.50.';\n let serialNumber = '';\n if (number < 10) {\n serialNumber = serialPrefix + '0' + number;\n } else {\n serialNumber = serialPrefix + number;\n }\n return serialNumber;\n }\n return number;\n };\n\n return (\n
\n
\n
\n {/* \n */}\n \n \n {/*
{item.drop.name}
*/}\n
\n \n {/* {getBlockchainType(item.asset.blockchain) === 'Polygon'\n ? (\n TransferNFT(item)}\n onGenerateApplePass={() => GenerateNftPass(item)} />\n )} */}\n \n
\n {item.imageUrl.includes('.mp4') && item.asset.mediaMP4\n ? (\n //
\n // \"NFT\n //
\n
\n \n \n \n
\n )\n : (\n
\n {item.asset.mediaUrl && item.asset.mediaUrl.includes('.pdf')\n ? (\n \n \"NFT\n \n )\n : (\n \n \"NFT\n \n )}\n
\n )}\n
\n \n
\n
\n
\n {item.utility && item.utility.length > 0\n && (\n
\n $25 Coupon Code:\n {' '}\n {item.utility[0].utilityValue}\n
\n )}\n
\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */}\n \n \n
\n
\n Blockchain: \n {getBlockchainType(item.asset.blockchain)}\n
\n
\n Minting Status: \n {!item.contractAddress\n ? (\n \n Pending\n \n )\n : (\n \n Minted\n \n )}\n
\n {!item.contractAddress\n ? (\n
\n ID: \n \n {item.nftId}\n \n
\n )\n : (\n
\n {item.withdrawAddress\n ? (\n
\n
\n Wallet Address: \n \n {' '}\n {item.withdrawAddress}\n \n
\n
\n Contract Address: \n \n {item.contractAddress}\n \n
\n
\n Token ID: \n {item.number || item.tokenId}\n
\n
\n )\n : (\n
\n Contract Address: \n \n {item.contractAddress}\n \n
\n )}\n
\n )}\n {item.drop.salesType === 1\n ? (\n
\n Date issued: \n \n {moment(item.datePurchased).format('MMMM DD, YYYY')}\n \n
\n )\n : (\n
\n Date purchased: \n \n {moment(item.datePurchased).format('MMMM DD, YYYY')}\n \n
\n )}\n\n {item.drop.salesType !== 1\n && (\n
\n Amount paid: \n \n $\n {item.txn.totalAmount}\n \n
\n )}\n
\n
\n {item.hasPendingTransfer\n ? (\n
\n \n
\n )\n\n : (\n
\n {/* {!item.withdrawAddress\n ? (\n
\n {item.drop.dropId !== '049a891c-e124-4ed1-bba1-86d8f58124ac'\n && }\n
\n )\n : (\n \n )}\n */}\n
\n \n View Details\n \n
\n
\n )}\n
\n
\n
\n );\n};\nexport default NftCard;\n","import React, { useState, useEffect } from 'react';\n// import MoreVertIcon from '@mui/icons-material/MoreVert';\n// import { faEllipsisV } from '@fortawesome/free-solid-svg-icons/faEllipsisV';\n// import IconButton from '@mui/material/IconButton';\n// import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n// import { regular } from '@fortawesome/fontawesome-svg-core/import.macro';\n// import {NftCard} from '../nft/NftCard';\nimport { Outlet, useParams, useLocation } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport TransferNFT from './transferNFT';\nimport TransferWallet from './transferWallet';\nimport TransferToggle from './transferToggle';\nimport AccountManager from '../../managers/Account';\nimport Throbber from '../throbber';\nimport NftCard from '../nft/NftCard';\nimport SimpleModal from '../modal/modal';\nimport Gallery from './gallery';\n\nfunction AccountCollection() {\n const [isLoading, setIsLoading] = useState(true);\n const [isDetailsPage, setDetailsPage] = useState(false);\n const [collection, setCollection] = useState([]);\n const [transfer, setUserTransferModal] = useState(false);\n const [walletTransfer, setWalletTransferModal] = useState(false);\n const [showPassModal, setShowPassModal] = useState(false);\n const [isPassGenerating, setIsPassGenerating] = useState(true);\n const [selectedNft, setSelectedNft] = useState(null);\n const [nftPass, setNftPass] = useState(null);\n const [transferSelector, toggleTransferSelectorModal] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [hasError, setHasError] = useState(false);\n const [isModalLoading, setModalLoadingState] = useState(false);\n const [showFileViewer, setFileViewerState] = useState(false);\n const [updatedNft, setUpdatedNft] = useState(null);\n const [selectedFile, setSelectedFile] = useState(null);\n // const [tokenSupply, setTokenSupply] = useState(0);\n\n const { nftId } = useParams();\n\n const location = useLocation();\n \n const closeFileViewer = () => {\n setFileViewerState(false);\n setSelectedFile(null);\n };\n\n const toggleTransferModal = (showModal, nft) => {\n toggleTransferSelectorModal(showModal);\n setUpdatedNft(nft);\n };\n\n const setTransferState = (nft) => {\n // setUserTransferModal(nft);\n toggleTransferModal(true, nft);\n setUpdatedNft(nft);\n };\n\n const showUserTransferModal = () => {\n toggleTransferSelectorModal(false);\n setUserTransferModal(updatedNft);\n };\n\n const showWalletTransferModal = () => {\n toggleTransferSelectorModal(false);\n setWalletTransferModal(updatedNft);\n };\n\n const togglePassModal = async (nft) => {\n setShowPassModal(!showPassModal);\n setIsPassGenerating(true);\n console.log(nft.nftId);\n setSelectedNft(nft);\n const payload = {\n nftId: nft.nftId,\n };\n const applePass = await AccountManager.generateApplePass(AccountManager.getToken(), payload).then((response) => {\n // Create blob link to download\n console.log('=== generating apple pass ===');\n console.log(response);\n // const url = window.URL.createObjectURL(\n // new Blob([response]),\n // );\n // setNftPass(url);\n if (response && response.success) {\n toast.success('Successfully created Apple pass.');\n setNftPass(response.passUri);\n } else {\n toast.error('Error creating Apple pass. Please try again later.');\n setShowPassModal(false);\n }\n setIsPassGenerating(false);\n });\n console.log({ applePass });\n };\n\n const downloadNftPass = () => {\n const link = document.createElement('a');\n link.href = nftPass;\n link.setAttribute('download', 'nftPass.pkpass');\n document.body.appendChild(link);\n console.log('=== download pass ===');\n console.log(nftPass);\n link.click();\n };\n\n const showViewer = (viewerData) => {\n setSelectedFile(viewerData);\n setFileViewerState(true);\n };\n\n const updateCollection = async () => {\n // updates the collection in memory\n console.log(updatedNft);\n // add the newItem to the collection and replace the old one\n console.log(collection);\n };\n\n const confirmCancel = async () => {\n updatedNft.hasPendingTransfer = false;\n setModalLoadingState(true);\n\n const payload = {\n nftId: updatedNft.nftId,\n creatorId: process.env.CREATOR_ID,\n };\n\n const cancelled = await AccountManager.cancelTransfer(AccountManager.getToken(), payload);\n\n if (cancelled && cancelled.success) {\n toast.success('Successfully cancelled transfer.');\n } else {\n toast.error('Oops. Something went wrong. Please try again later.');\n }\n setModalLoadingState(true);\n setShowModal(false);\n updateCollection();\n };\n\n const confirmTransfer = () => {\n updatedNft.hasPendingTransfer = true;\n updateCollection();\n setUserTransferModal(false);\n };\n\n const cancelTransfer = (newItem) => {\n setUpdatedNft(newItem);\n setShowModal(true);\n };\n\n const getCollection = async () => {\n // get the collection from the server\n setIsLoading(true);\n setUserTransferModal(false);\n AccountManager.getCollection(AccountManager.getToken()).then((res) => {\n setCollection(res);\n setHasError(false);\n setIsLoading(false);\n }).catch((error) => {\n console.log(error);\n setIsLoading(false);\n setHasError(true);\n setCollection([]);\n toast.error('Oops. There was a problem getting your collection data. Please try again later.');\n });\n };\n\n const closeWalletTransferModal = (doUpdate) => {\n setWalletTransferModal(false);\n if (doUpdate) {\n getCollection();\n }\n };\n\n useEffect(() => {\n if (nftId) {\n setDetailsPage(true);\n setIsLoading(false);\n }\n // else {\n // getCollection();\n // }\n }, []);\n\n useEffect(() => {\n if (nftId) {\n setDetailsPage(true);\n } else {\n setDetailsPage(false);\n if (collection.length === 0) {\n getCollection();\n }\n }\n }, [location]);\n\n return (\n
\n {isDetailsPage\n && }\n \n {showFileViewer\n && (\n
closeFileViewer()}>\n
\n closeFileViewer()}>\n \"Close\n \n\n {selectedFile && selectedFile.asset\n && (\n \n )}\n
\n
\n )}\n setShowModal(false)}>\n {isModalLoading\n && }\n Are you sure you want to cancel this transfer?\n
\n confirmCancel(e)}>\n Confirm Cancel\n \n  \n setShowModal(false)}>\n Back\n \n
\n
\n\n setShowPassModal(false)}>\n {showPassModal && (\n
\n {isPassGenerating\n && }\n
\n \"\"\n
Success!
\n

\n Apple pass for this NFT has been created. Click the Add to wallet button below to add this to your wallet.\n

\n
\n
\n \n \"Add\n \n {/*   \n setShowPassModal(false)}>\n Close\n */}\n
\n
\n \n //
\n //
\n //
\n //

Add to Mobile Wallet

\n //
\n //
Add this NFT to your Apple wallet.
\n //
\n //
\n // \n //
\n //
\n )}\n
\n\n {transferSelector\n && (\n
\n showUserTransferModal()}\n onTransferToWallet={() => showWalletTransferModal()}\n onClose={() => toggleTransferSelectorModal(false)} />\n
\n )}\n\n {walletTransfer\n && (\n
\n closeWalletTransferModal(doUpdate)} />\n
\n )}\n\n {transfer\n && (\n
\n setUserTransferModal(false)} onSuccess={() => confirmTransfer()} />\n
\n )}\n\n {!isDetailsPage\n && (\n
\n {isLoading\n && }\n

\n Account Collection\n

\n
\n View your digital assets here\n
\n\n {!hasError\n ? (\n
\n { collection.length > 0 ? (\n collection.map((item) => (\n
\n
\n {item.name}\n
\n
\n { item.nfts.length > 0 ? (\n item.nfts.map((nft) => (\n showViewer(nft)}\n onTransfer={() => setTransferState(nft)}\n onCancel={(cancelledTransfer) => cancelTransfer(cancelledTransfer)}\n onGenerateNftPass={() => togglePassModal(nft)} />\n ))\n ) : (\n
No digital assets for this collection.
\n )}\n
\n
\n ))\n ) : (\n
\n {'You haven\\'t purchased any digital assets yet. Once you have purchased an NFT from the ethos multiverse, it will show up here.'}\n
\n )}\n
\n )\n : (\n
\n
\n {'We are having trouble retrieving your collection. This is not your fault. We\\'re working on restoring functionality ASAP. Please try again later.'}\n
\n
\n )}\n
\n )}\n
\n );\n}\nexport default AccountCollection;\n","import React, { useState, useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { toast } from 'react-toastify';\nimport moment from 'moment-mini';\nimport AccountManager from '../../managers/Account';\nimport Throbber from '../throbber';\nimport TransferToggle from './transferToggle';\nimport {\n getBlockchainType, truncateString, getUtilityType, getScanUrl,\n} from '../../managers/Helpers';\nimport Gallery from './gallery';\nimport TransferNFT from './transferNFT';\nimport TransferWallet from './transferWallet';\nimport SimpleModal from '../modal/modal';\nimport AzureMediaPlayer from '../video/azureMediaPlayer';\nimport UtilityDisplay from '../utility/utilityDisplay';\n\nexport default function CollectionDetails(props) {\n const [isLoading, setIsLoading] = useState(true);\n const [nft, setNft] = useState(null);\n const [showPassModal, setShowPassModal] = useState(false);\n const [isPassGenerating, setIsPassGenerating] = useState(true);\n const [nftPass, setNftPass] = useState(null);\n const [showFileViewer, setFileViewerState] = useState(false);\n const [selectedVideo, setSelectedVideo] = useState(null);\n const [selectedFile, setSelectedFile] = useState(null);\n const [walletTransfer, setWalletTransferModal] = useState(false);\n const [transferSelector, toggleTransferSelectorModal] = useState(false);\n const [transfer, setUserTransferModal] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const [isModalLoading, setModalLoadingState] = useState(false);\n const [selectedTab, setSelectedTab] = useState('description');\n const [accountDetails, setAccountDetails] = useState(null);\n\n const flowscanUrl = process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://testnet.flowview.app/account/' : 'https://www.flowview.app/account/';\n const polyscanUrl = process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://mumbai.polygonscan.com/' : 'https://polygonscan.com/';\n\n const { nftId } = useParams();\n\n const setTab = (tab, e) => {\n e.preventDefault();\n setSelectedTab(tab);\n };\n\n const closeFileViewer = () => {\n setFileViewerState(false);\n setSelectedVideo(null);\n setSelectedFile(null);\n };\n\n const toggleTransferModal = (showModal, nft) => {\n toggleTransferSelectorModal(showModal);\n setSelectedFile(nft);\n };\n\n const showUserTransferModal = () => {\n toggleTransferSelectorModal(false);\n setUserTransferModal(nft);\n };\n\n const showWalletTransferModal = () => {\n toggleTransferSelectorModal(false);\n setWalletTransferModal(nft);\n };\n\n const closeWalletTransferModal = (doUpdate) => {\n setWalletTransferModal(false);\n if (doUpdate) {\n // getCollection();\n }\n };\n\n const transferSuccessful = (walletAddress) => {\n console.log(walletAddress);\n console.log('NFT transferred successfully');\n nft.withdrawAddress = walletAddress;\n };\n\n const confirmTransfer = () => {\n nft.hasPendingTransfer = true;\n setUserTransferModal(false);\n };\n\n const cancelTransfer = (newItem) => {\n setShowModal(true);\n };\n\n const confirmCancel = async () => {\n nft.hasPendingTransfer = false;\n setModalLoadingState(true);\n\n const payload = {\n nftId: nft.nftId,\n creatorId: process.env.CREATOR_ID,\n };\n\n const cancelled = await AccountManager.cancelTransfer(AccountManager.getToken(), payload);\n\n if (cancelled && cancelled.success) {\n toast.success('Successfully cancelled transfer.');\n } else {\n toast.error('Oops. Something went wrong. Please try again later.');\n }\n setModalLoadingState(false);\n setShowModal(false);\n // updateCollection();\n };\n\n const togglePassModal = async (nft) => {\n setShowPassModal(!showPassModal);\n setIsPassGenerating(true);\n console.log(nft.nftId);\n const payload = {\n nftId: nft.nftId,\n };\n const applePass = await AccountManager.generateApplePass(AccountManager.getToken(), payload).then((response) => {\n // Create blob link to download\n console.log('=== generating apple pass ===');\n console.log(response);\n // const url = window.URL.createObjectURL(\n // new Blob([response]),\n // );\n // setNftPass(url);\n if (response && response.success) {\n toast.success('Successfully created Apple pass.');\n setNftPass(response.passUri);\n } else {\n toast.error('Error creating Apple pass. Please try again later.');\n setShowPassModal(false);\n }\n setIsPassGenerating(false);\n });\n console.log({ applePass });\n };\n\n const loadVideo = async (videoUrl) => {\n setFileViewerState(true);\n setSelectedVideo(videoUrl);\n console.log(videoUrl);\n };\n\n const launchPDFViewer = (e) => {\n e.preventDefault();\n setFileViewerState(true);\n setSelectedFile(nft);\n };\n\n const getDetails = async (nftId) => {\n // get the collection from the server\n setIsLoading(true);\n // TODO: need to handle this better for anonymous users\n const accountData = await AccountManager.get(AccountManager.getToken());\n if (accountData) {\n setAccountDetails(accountData);\n }\n AccountManager.getNftDetails(AccountManager.getToken(), nftId).then((res) => {\n setNft(res.nft);\n console.log('=== blockchain ===');\n console.log(getScanUrl(res.nft));\n setIsLoading(false);\n }).catch((error) => {\n console.log(error);\n setIsLoading(false);\n toast.error('Oops. There was a problem getting your collection data. Please try again later.');\n });\n };\n\n useEffect(() => {\n getDetails(nftId);\n console.log('=== details page ===');\n console.log(props);\n }, []);\n\n return (\n
\n setShowModal(false)}>\n {isModalLoading\n && }\n Are you sure you want to cancel this transfer?\n
\n confirmCancel(e)}>\n Confirm Cancel\n \n  \n setShowModal(false)}>\n Back\n \n
\n
\n setShowPassModal(false)}>\n {showPassModal && (\n
\n {isPassGenerating\n && }\n
\n \"\"\n
Success!
\n

\n Apple pass for this NFT has been created. Click the Add to wallet button below to add this to your wallet.\n

\n
\n
\n \n \"Add\n \n
\n
\n )}\n
\n {walletTransfer\n && (\n
\n closeWalletTransferModal(doUpdate)}\n onSuccess={(walletAddress) => transferSuccessful(walletAddress)} />\n
\n )}\n {transfer\n && (\n
\n setUserTransferModal(false)} onSuccess={() => confirmTransfer()} />\n
\n )}\n {transferSelector\n && (\n
\n showUserTransferModal()}\n onTransferToWallet={() => showWalletTransferModal()}\n onClose={() => toggleTransferSelectorModal(false)} />\n
\n )}\n {showFileViewer\n && (\n
\n
\n closeFileViewer()}>\n \"Close\n \n\n {selectedFile && selectedFile.asset\n && (\n \n )}\n\n {selectedVideo\n && }\n\n {/* */}\n\n
\n
\n )}\n
\n {isLoading\n && }\n {nft\n && (\n
\n

\n {nft.assetVariation ? nft.assetVariation.variationName : nft.asset.name}\n

\n

\n Collection: \n {nft.asset.name}\n

\n
\n
\n {nft.imageUrl.includes('.mp4')\n ? (\n
\n \n
\n )\n : (\n
\n {nft.asset.mediaUrl && nft.asset.mediaUrl.includes('.pdf')\n ? launchPDFViewer(e)}>{nft.assetVariation\n : {nft.assetVariation}\n
\n )}\n
\n
\n {nft.nftUtility.length > 0 || nft.collectionUtility.length > 0\n ? (\n \n )\n : (\n
\n
\n DESCRIPTION\n
\n
\n )}\n
\n
\n
\n
\n {nft.asset.assetDescription}\n
\n \n
\n
\n
    \n
  • \n Blockchain: \n {getBlockchainType(nft.asset.blockchain)}\n
  • \n
  • \n Minting Status: \n {!nft.contractAddress\n ? (\n \n Pending\n \n )\n : (\n \n Minted\n \n )}\n\n
  • \n
  • \n TokenId: \n {nft.tokenId || nft.number}\n
  • \n {nft.contractAddress\n && (\n
  • \n Contract Address: \n {truncateString(nft.contractAddress, 20)}\n
  • \n )}\n {nft.withdrawAddress\n && (\n
  • \n Owner:\n  \n {truncateString(nft.withdrawAddress, 20)}\n
  • \n )}\n {nft.txn\n && (\n
  • \n Date Aquired: \n {moment(nft.txn.dateStamp).format('MMMM DD, YYYY')}\n
  • \n )}\n {nft.txn\n && (\n
  • \n Amount Paid: \n $\n {nft.txn.totalAmount}\n
  • \n )}\n
\n
\n
\n
\n
\n {nft.nftUtility.length > 0 || nft.collectionUtility.length > 0\n \n ? (\n loadVideo(videoUrl)} />\n )\n :
This digital asset does not have any utility
}\n {/*\n */}\n
\n \n
\n\n {accountDetails && accountDetails.isVerified\n && (\n
\n {nft.hasPendingTransfer\n && }\n {!nft.withdrawAddress\n && }\n {nft.passTemplate\n && }\n {nft.contractAddress\n && View on Blockchain}\n
\n )}\n \n
\n )}\n {/*
\n View your digital assets here dummy\n
*/}\n
\n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport moment from 'moment-mini';\nimport { truncateString, getUtilityDescription, getUtilityIcon } from '../../managers/Helpers';\n\nfunction DigitalAssetTile({ asset, assetType }) {\n const [utility, setUtility] = useState([]);\n\n const combineUtility = (utility) => {\n console.log('=== COMBINE UTILITY ===');\n const combinedUtility = utility.collectionUtility.concat(utility.nftUtility);\n setUtility(combinedUtility.slice(0, 2));\n };\n\n useEffect(() => {\n console.log('=== UTILITY ===');\n console.log(asset.utility);\n if (asset.utility) {\n combineUtility(asset.utility);\n }\n }, []);\n\n return (\n
\n
\n
\n
\n
\n \n {assetType === 'video'\n && (\n \n )}\n {assetType === 'image'\n && \"Digital}\n {assetType === 'pdf'\n && \"Digital}\n \n
\n
\n
\n
\n
Benefits
\n { utility.length > 0 ? (\n
    \n {utility.map((item) => (\n
  • \n
    \n \"benefit\n
    \n
    \n {item.utilityDescription}\n
    \n
    {getUtilityDescription(item)}
    \n
  • \n ))}\n
\n )\n : (\n
\n {asset.asset.assetDescription\n &&
{truncateString(asset.asset.assetDescription, 250) + '...'}
}\n
\n )}\n
\n \n View more details\n \n
\n
\n
\n
\n
\n
\n {asset.assetVariation\n ? (\n
\n
\n {asset.assetVariation.variationName}\n
\n
\n Aquired\n {' '}\n {moment(asset.txn.dateStamp).format('MMMM DD, YYYY')}\n
\n
\n )\n : (\n
\n
\n {asset.asset.name}\n
\n
\n Aquired\n {' '}\n {moment(asset.txn.dateStamp).format('MMMM DD, YYYY')}\n
\n
\n )}\n
\n
\n );\n}\n\nexport default DigitalAssetTile;\n","/* eslint-disable react/jsx-props-no-spreading */\nimport { get } from 'jquery';\nimport React, { useState, useEffect } from 'react';\nimport { Link, Outlet, useParams } from 'react-router-dom';\nimport moment from 'moment-mini';\nimport AccountManager from '../../managers/Account';\nimport DigitalAssetTile from './digitalAssetTile';\nimport Throbber from '../throbber';\n\nfunction DigitalAssets({ brandId }) {\n const [numAssets, setNumAssets] = useState(0);\n const [digitalAssets, setDigitalAssets] = useState([]);\n const [isDetailsPage, setDetailsPage] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [noAssets, setNoAssets] = useState(false);\n\n const { nftId } = useParams();\n\n const getDigitalAssets = async (brandId) => {\n const assets = await AccountManager.getFlatCollection(AccountManager.getToken(), brandId);\n if (assets && assets.length > 0) {\n setNumAssets(assets.length);\n setDigitalAssets(assets);\n setIsLoading(false);\n setNoAssets(false);\n } else if (assets && assets.length === 0) {\n setIsLoading(false);\n setNoAssets(true);\n }\n };\n\n const getAssetType = (nft) => {\n const assetType = 'image';\n if (nft.imageUrl.includes('.mp4')) {\n return 'video';\n }\n if (nft.imageUrl.includes('.pdf')) {\n return 'pdf';\n }\n return assetType;\n };\n\n useEffect(() => {\n console.log('=== BRAND ID ===');\n console.log(brandId);\n if (brandId) {\n getDigitalAssets(brandId);\n }\n }, [brandId]);\n\n useEffect(() => {\n if (nftId) {\n setIsLoading(false);\n setDetailsPage(true);\n }\n }, []);\n return (\n
\n {isDetailsPage\n && }\n {isLoading\n && }\n {noAssets\n ? (\n
\n {'You don\\'t own any assets from this collection'}\n
\n )\n : (\n
\n {numAssets}\n {' '}\n item\n {numAssets !== 1\n && s}\n {' '}\n in this collection\n
\n )}\n
\n { digitalAssets.length > 0 && (\n digitalAssets.map((item) => (\n \n ))\n )}\n
\n
\n );\n}\n\nexport default DigitalAssets;\n","/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable no-param-reassign */\nimport React, { useState, useEffect } from 'react';\nimport UtilityList from './utilityList';\n\nfunction CollectionUtility({ utilityType, utilityLabel, utilityList }) {\n // const [questions, setQuestions] = useState([]);\n\n return (\n
\n
\n {utilityLabel}\n
\n
\n \n
\n
\n );\n}\n\nexport default CollectionUtility;\n","import React, { useState, useEffect } from 'react';\nimport CollectionHero from '../collection/collectionHero';\nimport DigitalAssets from '../collection/digitalAssets';\nimport AccountManager from '../../managers/Account';\nimport UtilityManager from '../../managers/Utility';\nimport CollectionUtility from '../collection/collectionUtility';\n\nfunction AccountCollection() {\n // State variables using useState\n const [brandId, setBrandId] = useState(null);\n const [allUtility, setAllUtility] = useState([]);\n const [filterOptions, setFilterOptions] = useState([]);\n const [filteredUtility, setFilteredUtility] = useState([]);\n const [tab, setTab] = useState(0);\n const [filterLabel, setFilterLabel] = useState('');\n const getAllBrandUtility = async () => {\n // TODO: on component mount, attempt to get all the utililty for a brand\n const allUtility = await UtilityManager.getAllUtility(process.env.CREATOR_ID, AccountManager.getToken());\n if (allUtility && allUtility.utility) {\n setAllUtility(allUtility.utility.collectionUtility.concat(allUtility.utility.nftUtility));\n }\n };\n\n const setUtilityFilter = async (filterType, filterLabel) => {\n setTab(filterType);\n setFilterLabel(filterLabel);\n const filterResults = UtilityManager.sortUtility(process.env.CREATOR_ID, filterType, AccountManager.getToken());\n setFilteredUtility(filterResults);\n };\n\n const updateFilterOptions = () => {\n const parsedFilterOptions = [];\n if (allUtility.filter((e) => e.utilityType === 1 || e.utilityType === 3).length > 0) {\n parsedFilterOptions.push({\n id: 1,\n label: 'Merch',\n });\n }\n if (allUtility.filter((e) => e.utilityType === 2).length > 0) {\n parsedFilterOptions.push({\n id: 2,\n label: 'Media',\n });\n }\n if (allUtility.filter((e) => e.utilityType === 4).length > 0) {\n parsedFilterOptions.push({\n id: 3,\n label: 'Offers',\n });\n }\n setFilterOptions(parsedFilterOptions);\n };\n\n useEffect(() => {\n setBrandId(process.env.CREATOR_ID);\n getAllBrandUtility(process.env.CREATOR_ID);\n if (!AccountManager.isLoggedIn()) {\n window.location = '/login';\n }\n }, []);\n\n useEffect(() => {\n updateFilterOptions();\n }, [allUtility]);\n\n return (\n
\n {brandId\n && setUtilityFilter(filterType, filterLabel)} />}\n
\n {tab === 0\n && (\n \n )}\n {filteredUtility && tab !== 0\n && }\n\n
\n
\n );\n}\n\nexport default AccountCollection;\n","import React, { Component } from 'react';\n\nclass AccountVerify extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {}\n\n render() {\n return (\n
\n Account Verification\n
\n );\n }\n}\n\nexport default AccountVerify;\n","import React, { Component } from 'react';\nimport FullPageLoader from '../throbber/loader';\nimport AccountManager from '../../managers/Account';\nimport { getParameterByName } from '../../managers/Helpers';\n\nclass Auth extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount = () => {\n // check for a nft token.\n const unauthPath = '/login';\n if (getParameterByName('nftToken', window.location.href)) {\n // protec against duplicate tokens\n Object.entries(localStorage).map((obj) => {\n const key = obj[0];\n if (key.includes('NFT_TRANSFER')) {\n sessionStorage.removeItem(key);\n }\n return true;\n });\n // force the one in the URL to be in memory\n sessionStorage.setItem('NFT_TRANSFER_' + getParameterByName('nftToken', window.location.href), getParameterByName('nftToken', window.location.href));\n window.location.href = '/edrop/?nftToken=' + getParameterByName('nftToken', window.location.href);\n }\n // check if the user is logged in. If they are, grab the account details\n if (AccountManager.isLoggedIn()) {\n window.location.pathname = '/account/collection';\n } else if (!getParameterByName('nftToken', window.location.href)) {\n window.location.pathname = unauthPath;\n }\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default Auth;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n BrowserRouter,\n Routes,\n Route,\n} from 'react-router-dom';\nimport * as Sentry from '@sentry/react';\nimport { BrowserTracing } from '@sentry/tracing';\nimport { MetaMaskProvider } from 'metamask-react';\nimport Container from './container.jsx';\nimport Home from './routes/home.jsx';\nimport CountdownPage from './routes/countdown.jsx';\nimport CountdownPageAlternateLeft from './routes/countdown-alternate.jsx';\nimport CountdownPageAlternateRight from './routes/countdown-alternate-right.jsx';\nimport DropPage from './routes/drop.jsx';\nimport Login from './routes/login.jsx';\nimport Register from './routes/register.jsx';\nimport PasswordReset from './routes/reset.jsx';\nimport Account from './routes/account.jsx';\nimport EDrop from './routes/edrop.jsx';\nimport AboutEDrop from './routes/aboutEdrop.jsx';\nimport AccountDetails from './components/account/details.jsx';\nimport AccountBilling from './components/account/billing.jsx';\nimport AccountPassword from './components/account/password.jsx';\nimport AccountWallet from './components/account/wallet.jsx';\nimport AccountCollectionOld from './components/account/collection.jsx';\nimport CollectionDetails from './components/account/collectionDetails.jsx';\nimport AccountCollection from './components/account/collection2.jsx';\nimport AssetDetails from './components/collection/assetDetails.jsx';\nimport AccountVerify from './components/account/verify.jsx';\nimport Auth from './components/home/auth.jsx';\nimport './sass/styles.scss';\n\n// (async () => {\n// if (process.env.CREATOR_SUBDOMAIN) {\n// await import('./sass/components/' + process.env.CREATOR_SUBDOMAIN + '.scss');\n// }\n// })();\n\nSentry.init({\n dsn: 'https://478b199ebcd7460ea20a47393f72fedc@o1273042.ingest.sentry.io/6467146',\n integrations: [new BrowserTracing()],\n environment: process.env.NODE_ENV,\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 1.0,\n});\n\nReactDOM.render(\n \n \n \n\n {process.env.E_DROP_ONLY === 'true'\n ? (\n }>\n } />\n } />\n } />\n }>\n } />\n \n }>\n } />\n } />\n } />\n } />\n } />\n }>\n } />\n \n \n } />\n } />\n } />\n \n } />\n \n \n )\n : (\n }>\n } />\n }>\n } />\n \n } />\n } />\n }>\n } />\n \n }>\n } />\n } />\n } />\n } />\n } />\n \n }>\n } />\n \n } />\n } />\n \n } />\n \n \n )}\n {process.env.COUNTDOWN_TEMPLATE === 'alternateLeft'\n && } />}\n {process.env.COUNTDOWN_TEMPLATE === 'alternateRight'\n && } />}\n {!process.env.COUNTDOWN_TEMPLATE\n && } />}\n\n \n \n ,\n document.getElementById('app'),\n);\n","import React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { toast } from 'react-toastify';\nimport { get } from 'jquery';\nimport Throbber from '../throbber';\nimport Account from '../../managers/Account';\nimport { getBlockchainType, getParameterByName } from '../../managers/Helpers';\n\nconst emailPattern = /^[-a-z0-9~!$%^&*_=+}{'?]+(\\.[-a-z0-9~!$%^&*_=+}{'?]+)*@([a-z0-9_][-a-z0-9_]*(\\.[-a-z0-9_]+)*\\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;\n\nclass LoginForm extends Component {\n constructor(props) {\n super(props);\n this.state = {\n creatorId: process.env.CREATOR_ID,\n loginEmail: '',\n resetEmail: '',\n loginPassword: '',\n isLoading: false,\n resetPassword: false,\n resetSuccess: false,\n loginVerification: '',\n loadingText: 'Logging you in! One second...',\n enableMFA: false,\n showMFA: false,\n userId: '',\n verifiedAccount: false,\n isUnverifiedAccount: false,\n noAccount: false,\n loginToken: null,\n };\n }\n\n validateForm = () => {\n const { loginEmail } = this.state;\n const { loginPassword } = this.state;\n const { onFail } = this.props;\n if (loginEmail === '' || loginPassword === '') {\n onFail('Please enter an email and password.');\n return false;\n }\n if (!emailPattern.test(loginEmail)) {\n onFail('Please enter a valid email address.');\n return false;\n }\n return true;\n }\n\n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n focusVerifcation = () => {\n setTimeout(() => {\n document.getElementById('loginVerification').focus();\n }, 1000);\n }\n\n logIn = async (e) => {\n const { loginEmail, loginPassword } = this.state;\n const { onSuccess, onFail } = this.props;\n let payload = {};\n e.preventDefault();\n if (this.validateForm()) {\n this.setState({\n isLoading: true,\n loadingText: 'Logging you in! One second...',\n });\n payload = {\n email: loginEmail,\n password: loginPassword,\n };\n const login = await Account.login(payload);\n // if MFA is enabled\n if (login && login.userId) {\n this.setState({\n userId: login.userId,\n showMFA: true,\n isLoading: false,\n });\n this.focusVerifcation();\n // if MFA is NOT enabled\n } else if (login && login.token) {\n console.log('=== login results ===');\n console.log(login);\n await Account.get(login.token);\n Account.setLoginState(login.token);\n onSuccess();\n } else {\n this.setState({\n isLoading: false,\n });\n // toast.error(login.message || 'Oops! Something went wrong. Please try again later.');\n onFail('Incorrect email or password.');\n }\n }\n }\n\n mfaLogIn = async (e) => {\n const { userId, loginVerification } = this.state;\n const { onSuccess, onFail } = this.props;\n e.preventDefault();\n this.setState({\n isLoading: true,\n });\n const payload = {\n userId,\n token: loginVerification,\n };\n const login = await Account.mfaLogin(payload);\n if (login && login.token) {\n await Account.get(login.token);\n Account.setLoginState(login.token);\n onSuccess();\n } else {\n this.setState({\n isLoading: false,\n });\n // toast.error(login.message || 'Oops! Something went wrong. Please try again later.');\n onFail('Incorrect verification code.');\n }\n }\n\n onEnterKey = (e) => {\n const { verifiedAccount, showMFA } = this.state;\n if (e.keyCode === 13) {\n if (!verifiedAccount && e.target.id === 'loginEmail') {\n this.checkEmailAddress();\n } else if (showMFA) {\n this.mfaLogIn(e);\n } else {\n this.logIn(e);\n }\n }\n };\n\n generateUnverifiedSession = async () => {\n const { loginEmail, loginToken } = this.state;\n console.log('=== generateUnverifiedSession ===');\n console.log(loginEmail.replace(/\\s+/g, '+'));\n console.log(loginToken);\n const payload = {\n creatorId: process.env.CREATOR_ID,\n email: loginEmail.replace(/\\s+/g, '+'),\n token: loginToken,\n };\n const getLoginToken = await Account.getLoginToken(payload);\n if (getLoginToken && getLoginToken.token) {\n // log the user in\n Account.setLoginState(getLoginToken.token);\n window.location.href = '/account/collection';\n } else {\n toast.error('Log in token has expired. Please try again.');\n this.setState({\n isLoading: false,\n });\n }\n console.log(getLoginToken);\n }\n\n componentDidMount() {\n if (localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo')) {\n this.setState({\n loginEmail: JSON.parse(localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo')).email,\n });\n }\n // check for a loginToken in the URL string\n if (getParameterByName('loginToken')) {\n // alert('has login token: ' + getParameterByName('loginToken'));\n this.setState({\n loginEmail: getParameterByName('email').replace(/\\s+/g, '+'),\n isLoading: true,\n loginToken: getParameterByName('loginToken'),\n }, function () {\n this.generateUnverifiedSession();\n });\n }\n }\n\n resetPass = (e) => {\n e.preventDefault();\n this.setState({\n resetPassword: true,\n });\n }\n\n closeModal = () => {\n const { onRegisterButton } = this.props;\n if (onRegisterButton) {\n onRegisterButton();\n }\n }\n\n sendResetEmail = async (e) => {\n const { resetEmail, creatorId } = this.state;\n const { onFail } = this.props;\n const that = this;\n e.preventDefault();\n if (!emailPattern.test(resetEmail)) {\n onFail('Please enter a valid email address.');\n } else {\n const payload = {\n creatorId,\n emailAddress: resetEmail,\n site: window.location.protocol + '//' + window.location.host,\n };\n this.setState({\n loadingText: 'Preparing your reset password email. One sec...',\n isLoading: true,\n });\n const resetPass = await Account.resetPassword(payload);\n if (resetPass && resetPass.success) {\n that.setState({\n isLoading: false,\n resetSuccess: true,\n });\n } else {\n onFail('Oops! Something went wrong. Please try again later.');\n }\n }\n }\n\n checkEmailAddress = async (e) => {\n const { loginEmail } = this.state;\n this.setState({\n isLoading: true,\n loadingText: 'Verifying email address. One sec...',\n });\n if (e) {\n e.preventDefault();\n }\n if (!emailPattern.test(loginEmail)) {\n this.setState({\n isLoading: false,\n });\n toast.error('Please enter a valid email address.');\n } else {\n const checkEmail = await Account.emailSearch(null, loginEmail);\n if (checkEmail && checkEmail.emailExists === true) {\n console.log('email does exist');\n if (checkEmail.isVerified) {\n // user is verified, show the password field\n this.setState({\n verifiedAccount: checkEmail.isVerified,\n isLoading: false,\n });\n const passwordField = document.getElementById('loginPassword');\n passwordField.focus();\n toast.success('Email address found. Enter your password to log in.');\n } else {\n // user is not verified, show the unverified message\n const payload = {\n creatorId: process.env.CREATOR_ID,\n email: loginEmail,\n };\n const loginLink = await Account.sendLoginEmail(payload);\n\n toast.success('Email address found. An email has been sent to your inbox.');\n this.setState({\n verifiedAccount: false,\n isUnverifiedAccount: true,\n isLoading: false,\n });\n }\n } else {\n console.log('email does not exist');\n // TODO: NOW go claim the NFT\n // await createUnverifiedAccount();\n toast.error('An account with this email does not exist.');\n this.setState({\n isLoading: false,\n noAccount: true,\n });\n }\n }\n };\n\n render() {\n const {\n isUnverifiedAccount, noAccount, verifiedAccount, loginEmail, loginPassword, isLoading, resetPassword, resetEmail, resetSuccess, loadingText, loginVerification, showMFA,\n } = this.state;\n return (\n
\n {isLoading\n && }\n {!resetPassword\n ? (\n
\n {showMFA\n ? (\n
\n
\n Please enter the verification code we sent to your phone. This code will expire in 30 minutes.\n
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n
\n this.mfaLogIn(e)}>\n Log in\n \n
\n
\n {'Didn\\'t receive a code?'}\n {' '}\n Contact our\n {' '}\n support team\n .\n
\n
\n )\n : (\n
\n
\n Already have an ethos account?\n
\n Enter your email to log in.\n
\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n {verifiedAccount\n && (\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n )}\n {isUnverifiedAccount && (\n
\n This is an unverified account. Please check your inbox for a log in link.\n
\n )}\n {noAccount\n && (\n
\n An account does not exist for this email. Click the\n {' '}\n Register Now\n {' '}\n button below to create an account with this email address.\n
\n )}\n
\n {verifiedAccount ? (\n
\n this.logIn(e)}>\n Log in\n \n
\n )\n : (\n
\n this.checkEmailAddress(e)}>\n Next\n \n
\n )}\n
\n Trouble logging in?\n {' '}\n this.resetPass(e)}>\n Click here\n \n .\n
\n
\n
\n {'Don\\'t have an ethos account?'}\n
\n\n
\n this.closeModal()}>\n Register Now\n \n
\n
\n
\n )}\n
\n )\n : (\n
\n
\n Reset Password\n
\n\n {resetSuccess\n ? (\n
\n
\n Instructions on resetting your password have been sent to your inbox.\n
\n
\n )\n : (\n
\n
\n To reset your password, enter your email address below.\n
\n {'If this email is attached to an ethos account, we\\'ll send you instructions to your inbox.'}\n
\n\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n
\n this.sendResetEmail(e)}>\n Reset my password\n \n
\n
\n )}\n\n
\n )}\n
\n );\n }\n}\n\nLoginForm.propTypes = {\n onSuccess: PropTypes.func,\n onFail: PropTypes.func,\n onRegisterButton: PropTypes.func,\n};\n\nexport default LoginForm;\n","import React, { Component } from 'react';\n\nclass FullPageLoader extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n render() {\n return (\n
\n
\n {process.env.LOADER_VIDEO\n ? (\n \n )\n : \"ethos\"}\n {/*
Loading...
*/}\n
\n
\n );\n }\n}\n\nexport default FullPageLoader;\n","const isIOS = function () {\n return [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod',\n ].includes(navigator.platform)\n // iPad on iOS 13 detection\n || (navigator.userAgent.includes('Mac') && 'ontouchend' in document);\n};\n\nconst getParameterByName = function (name, url) {\n let newName = name;\n let newUrl = url;\n if (!url) newUrl = window.location.href;\n newName = name.replace(/[[\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + newName + '(=([^&#]*)|&|#|$)');\n const results = regex.exec(newUrl);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n};\n\nconst getBlockchainType = function (chainId) {\n let chainname = 'Flow';\n if (!chainId) {\n chainname = 'Flow';\n } else if (chainId === 0) {\n chainname = 'Flow';\n } else if (chainId === 1) {\n chainname = 'Ethereum';\n } else if (chainId === 2) {\n chainname = 'Polygon';\n }\n return chainname;\n};\n\nconst getUtilityType = function (type) {\n let utilityName = 'Coupon Voucher';\n if (!type || type === 1) {\n utilityName = 'Coupon Voucher';\n } else if (type === 2) {\n utilityName = 'Video Content';\n } else if (type === 3) {\n utilityName = 'Gated Commerce';\n } else if (type === 4) {\n utilityName = 'Generic Utility';\n }\n \n return utilityName;\n};\n\nconst truncateString = function (ogString, length) {\n let len;\n if (!length) {\n len = 100;\n } else {\n len = length;\n }\n return ogString.substring(0, len) + '...';\n};\n\nconst getScanUrl = function (nft) {\n const flowscanUrl = process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://testnet.flowview.app/account/' : 'https://www.flowview.app/account/';\n const polyscanUrl = process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://mumbai.polygonscan.com/' : 'https://polygonscan.com/';\n const ethscanUrl = process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://goerli.etherscan.io/' : 'https://etherscan.io/';\n let scanLink;\n\n if (nft.asset.blockchain === 0) {\n scanLink = flowscanUrl + nft.contractAddress + '/collection';\n } else if (nft.asset.blockchain === 1) {\n scanLink = ethscanUrl + 'token/' + nft.contractAddress + '?a=' + nft.tokenId;\n } else if (nft.asset.blockchain === 2) {\n scanLink = polyscanUrl + 'token/' + nft.contractAddress + '?a=' + nft.tokenId;\n } else {\n scanLink = flowscanUrl + nft.contractAddress + '/collection';\n }\n return scanLink;\n};\n\nconst getScanName = function (blockchainId) {\n let scannerName;\n if (blockchainId === 0) {\n scannerName = 'flowscan';\n } else if (blockchainId === 1) {\n scannerName = 'etherscan';\n } else if (blockchainId === 2) {\n scannerName = 'polyscan';\n }\n return scannerName;\n};\n\nconst getUtilityDescription = function (utility) {\n const description = 'Generic description here...';\n if (utility.utilityType === 1) {\n return utility.vouchers[0].description;\n }\n if (utility.utilityType === 2) {\n return utility.gatedContents[0].description;\n }\n if (utility.utilityType === 3) {\n return utility.gatedCommerces[0].ecommerceProductDescription;\n }\n if (utility.utilityType === 4) {\n return utility.genericPromotions[0].description;\n }\n return description;\n};\n\nconst getUtilityIcon = function (utilityType) {\n if (utilityType === 1) {\n // voucher icon\n return 'https://ipfs.ethosnft.com/ethos/v2/ui/icon-mini-voucher.svg';\n }\n if (utilityType === 2) {\n // video icon\n return 'https://ipfs.ethosnft.com/ethos/v2/ui/icon-mini-gated-content.svg';\n }\n if (utilityType === 3) {\n // commerce icon\n return 'https://ipfs.ethosnft.com/ethos/v2/ui/icon-discount.png';\n }\n if (utilityType === 4) {\n // generic icon\n return 'https://ipfs.ethosnft.com/ethos/v2/ui/icon-discount.png';\n }\n return 'https://ipfs.ethosnft.com/ethos/v2/ui/icon-discount.png';\n};\n\nexport { isIOS };\nexport { getParameterByName };\nexport { getUtilityType };\nexport { getBlockchainType };\nexport { truncateString };\nexport { getScanUrl };\nexport { getScanName };\nexport { getUtilityDescription };\nexport { getUtilityIcon };\n","import React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport PropTypes from 'prop-types';\nimport Ajax from '../../managers/Ajax';\nimport Throbber from '../throbber';\nimport AccountManager from '../../managers/Account';\nimport 'react-toastify/dist/ReactToastify.css';\n\nconst emailPattern = /^[-a-z0-9~!$%^&*_=+}{'?]+(\\.[-a-z0-9~!$%^&*_=+}{'?]+)*@([a-z0-9_][-a-z0-9_]*(\\.[-a-z0-9_]+)*\\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;\n\nclass Register extends Component {\n constructor(props) {\n super(props);\n this.state = {\n registerFirstname: '',\n registerLastname: '',\n registerPhone: '',\n registerEmail: '',\n isLoading: false,\n dropId: process.env.DROP_ID,\n hasSignedUp: false,\n agreeTerms: false,\n hasPreRegBonus: process.env.PRE_REGISTRATION_BONUS,\n returningUser: false,\n hasClaimed: false,\n isEmailOnly: process.env.PRE_REGISTRATION_EMAIL_ONLY,\n };\n }\n\n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n onEnterKey = (e) => {\n if (e.keyCode === 13) {\n this.validateForm(e);\n }\n }\n\n formatPayload = () => {\n // should probably add some error handling/validation here\n const {\n isEmailOnly, agreeTerms, registerFirstname, registerLastname, registerPhone, registerEmail, dropId,\n } = this.state;\n\n if (isEmailOnly !== 'true') {\n if (registerFirstname === ''\n || registerLastname === ''\n || registerPhone === ''\n || registerEmail === '') {\n toast.error('Please complete all fields.');\n return false;\n }\n }\n\n if (!emailPattern.test(registerEmail)) {\n toast.error('Please enter a valid email address.');\n return false;\n }\n if (!agreeTerms) {\n toast.error('Please accept the terms and conditions.');\n return false;\n }\n const payload = {\n firstName: registerFirstname,\n lastName: registerLastname,\n telephone: registerPhone,\n email: registerEmail,\n location: '',\n signUpUrl: window.location.href,\n dropId,\n };\n return payload;\n }\n\n checkForExistingUser = async (email) => {\n const existingUser = await AccountManager.emailSearch(AccountManager.getToken(), email);\n if (existingUser && existingUser.emailExists) {\n return true;\n }\n return false;\n }\n\n submitForm = async (e) => {\n e.preventDefault();\n const { dropId, hasPreRegBonus } = this.state;\n const { onRegisterSuccess } = this.props;\n const payload = this.formatPayload();\n let isReturningUser = false;\n if (payload) {\n this.setState({\n isLoading: true,\n });\n try {\n // const register = await Ajax.post('https://localhost:7180/api/usersignup', payload);\n const register = await Ajax.post(process.env.SERVER_URL + 'usersignup', payload);\n if (register) {\n // TODO: if the hasPreRegBonus flag is set, check if this user has already signed up\n if (hasPreRegBonus === 'true') {\n isReturningUser = await this.checkForExistingUser(payload.email);\n if (!isReturningUser) {\n // save payload to localStorage\n localStorage.setItem(process.env.CREATOR_SUBDOMAIN + 'PreRegInfo', JSON.stringify(payload));\n } else {\n localStorage.setItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo', JSON.stringify(payload));\n }\n this.setState({\n isLoading: false,\n hasSignedUp: true,\n returningUser: isReturningUser,\n });\n } else {\n this.setState({\n isLoading: false,\n hasSignedUp: true,\n });\n }\n\n if (onRegisterSuccess) {\n onRegisterSuccess();\n }\n\n gtag('event', process.env.CREATOR_SUBDOMAIN + '_pre_registration', { // eslint-disable-line\n event_category: 'account_registration',\n event_label: 'User pre-registered for a drop',\n });\n\n localStorage.setItem(process.env.CREATOR_SUBDOMAIN + 'Countdown', dropId);\n } else {\n toast.error('Oops! Something went wrong. Please try again later');\n }\n } catch (error) {\n toast.error(error.message || 'Oops! Something went wrong. Please try again later');\n this.setState({\n isLoading: false,\n });\n }\n }\n }\n\n handleCheckboxChange = (e) => {\n let isChecked = false;\n if (e.target.checked) {\n isChecked = true;\n } else {\n isChecked = false;\n }\n this.setState({\n agreeTerms: isChecked,\n });\n }\n\n optInLogIn = (e) => {\n const { onLoginRequest } = this.props;\n e.preventDefault();\n onLoginRequest();\n }\n\n componentDidMount() {\n const { dropId } = this.state;\n let existingUserEmail;\n if (localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo')) {\n existingUserEmail = JSON.parse(localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegExistingInfo')).email;\n }\n\n if (localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'PreRegTokenClaimed') || localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'FreeToken')) {\n this.setState({\n hasClaimed: true,\n });\n }\n\n if (localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'Countdown') && localStorage.getItem(process.env.CREATOR_SUBDOMAIN + 'Countdown') === dropId) {\n this.setState({\n hasSignedUp: true,\n registerEmail: existingUserEmail || '',\n returningUser: !!existingUserEmail,\n });\n }\n }\n\n render() {\n const {\n isEmailOnly, hasClaimed, returningUser, hasPreRegBonus, hasSignedUp, registerFirstname, registerLastname, registerPhone, registerEmail, isLoading,\n } = this.state;\n const { type, buttonType } = this.props;\n return (\n
\n {hasSignedUp\n ? (\n
\n {hasPreRegBonus === 'true'\n ? (\n
\n {hasClaimed\n ? (\n
\n Thank you for Pre Registering and claiming your free NFT. We will notify you via email when the drop goes live!\n
\n )\n : (\n
\n
\n \"\"\n
Success!
\n {process.env.PRE_REGISTER_SUCCESS}\n
\n
\n {hasPreRegBonus === 'true'\n && (\n
\n {returningUser\n ? (\n
\n {'It looks like the email address '}\n {registerEmail}\n {' is already registered with ethos. '}\n this.optInLogIn(e)}>Log in now\n {' to claim your FREE Greatness Calling NFT.'}\n
\n )\n : (\n
\n {'To claim your FREE Greatness Calling NFT, '}\n finish your registration now\n .\n
\n )}\n
\n )}\n
\n
\n )}\n
\n )\n : (\n
\n
\n \"\"\n
Success!
\n
\n {'Thanks for signing up. Keep your eyes on your inbox. '}\n {'We\\'ll notify you as soon as the digital assets are available for purchase.'}\n
\n
\n
\n )}\n
\n )\n : (\n
\n {isLoading\n && }\n

\n {process.env.PRE_REGISTER_HEADER}\n

\n
\n {isEmailOnly !== 'true'\n && (\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n )}\n
\n \n this.handleInputChange(e)}\n onKeyUp={(e) => this.onEnterKey(e)} />\n
\n
\n this.handleCheckboxChange(e)} />\n \n
\n
\n \n
\n
\n
\n )}\n
\n );\n }\n}\n\nRegister.propTypes = {\n type: PropTypes.string,\n buttonType: PropTypes.string,\n onLoginRequest: PropTypes.func,\n onRegisterSuccess: PropTypes.func,\n};\n\nexport default Register;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass Throbber extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n render() {\n const { throbberText, theme } = this.props;\n return (\n
\n
\n

{throbberText || 'Loading...'}

\n
\n
\n
\n
\n
\n
\n );\n }\n}\n\nThrobber.propTypes = {\n throbberText: PropTypes.string,\n theme: PropTypes.string,\n};\n\nexport default Throbber;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment-mini';\nimport { toast } from 'react-toastify';\nimport SimpleModal from '../modal/modal';\nimport AccountManager from '../../managers/Account';\nimport Throbber from '../throbber';\n\nconst emailPattern = /^[-a-z0-9~!$%^&*_=+}{'?]+(\\.[-a-z0-9~!$%^&*_=+}{'?]+)*@([a-z0-9_][-a-z0-9_]*(\\.[-a-z0-9_]+)*\\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}))(:[0-9]{1,5})?$/i;\n\nclass TransferNFT extends Component {\n constructor(props) {\n super(props);\n this.state = {\n emailAddress: '',\n confirmEmailAddress: '',\n searchResults: null,\n isLoading: false,\n selectedId: {},\n confirmState: false,\n transferLoading: false,\n creatorId: process.env.CREATOR_ID,\n step: 'email',\n firstname: '',\n lastname: '',\n message: '',\n };\n }\n\n validateForm = () => {\n const { emailAddress, confirmEmailAddress } = this.state;\n if (emailAddress === ''\n || confirmEmailAddress === '') {\n toast.error('Please fill out both email fields.');\n return false;\n }\n if (!emailPattern.test(emailAddress)) {\n toast.error('Please enter a valid email address.');\n return false;\n }\n if (emailAddress !== confirmEmailAddress) {\n toast.error('Emails must match.');\n return false;\n }\n return true;\n }\n\n changeStep = (step, e) => {\n if (e) {\n e.preventDefault();\n }\n if (this.validateForm()) {\n this.setState({\n step: 'personalize',\n });\n }\n }\n\n transferNFT = async () => {\n const { nft, onSuccess } = this.props;\n const {\n emailAddress, creatorId, firstname, lastname, message,\n } = this.state;\n const payload = {\n receivingUserEmail: emailAddress,\n nftId: nft.nftId,\n creatorId,\n receivingUserFirstname: firstname,\n receivingUserLastname: lastname,\n receivingUserMessage: message,\n };\n this.setState({\n isLoading: true,\n });\n\n // TODO: handle an error state\n const transferred = await AccountManager.transferNFtNotification(AccountManager.getToken(), payload);\n if (transferred && transferred.success) {\n toast.success('Successfully sent transfer notification!');\n onSuccess(nft);\n } else {\n if (transferred && transferred.message) {\n toast.error(transferred.message);\n } else {\n toast.error('Oops! Something went wrong. Please try again later.');\n }\n this.setState({\n isLoading: false,\n });\n }\n }\n\n confirmTransfer = (e) => {\n if (e) {\n e.preventDefault();\n }\n\n if (this.validateForm()) {\n this.setState({\n confirmState: true,\n });\n }\n }\n\n showTransferButton = (user) => {\n this.setState({\n selectedId: user,\n });\n }\n\n handleInputChange = (e) => {\n this.setState({\n [e.target.id]: e.target.value,\n });\n }\n\n componentDidMount() {}\n\n render() {\n const { nft, onClose } = this.props;\n const {\n emailAddress, confirmEmailAddress, confirmState, isLoading, step, firstname, lastname, message,\n } = this.state;\n return (\n
\n onClose()}>\n {isLoading\n && }\n \n {step === 'chooser'\n && (\n
\n Transfer this digital asset to another user, or your own wallet\n
\n
\n
\n this.changeStep('personalize', e)}>\n Transfer to another user\n \n
OR
\n this.changeStep('personalize', e)}>\n Transfer to your wallet\n \n
\n
\n
\n
\n )}\n\n {step === 'email'\n && (\n
\n Enter the email address of the person you would like to send this digital asset to.\n
\n )}\n \n {step === 'personalize'\n && (\n
\n Enter the first name and the last name of the person you would like to send this digital asset to.\n
\n )}\n\n {step === 'email'\n && (\n
\n
\n \n this.handleInputChange(e)}\n disabled={confirmState} />\n
\n\n
\n \n this.handleInputChange(e)}\n disabled={confirmState} />\n
\n
\n )}\n {step === 'personalize'\n && (\n
\n
\n
\n
\n \n this.handleInputChange(e)}\n disabled={confirmState} />\n
\n
\n \n this.handleInputChange(e)}\n disabled={confirmState} />\n
\n
\n
\n
\n \n this.handleInputChange(e)}\n disabled={confirmState} />\n
\n
\n \n )}\n\n
\n {confirmState\n ? (\n
\n
\n
\n Are you sure you want to transfer this nft to\n {' '}\n {emailAddress}\n ? This action cannot be undone.\n
\n \n  \n \n
\n
\n )\n : (\n
\n {step === 'email'\n && (\n
\n this.changeStep('personalize', e)}>\n Next\n \n
\n )}\n {step === 'personalize'\n && (\n
\n this.confirmTransfer(e)}>\n Transfer Digital Asset\n \n  \n this.setState({ step: 'email' })}>\n Back\n \n
\n )}\n
\n )}\n \n
\n {step !== 'chooser'\n && (\n
\n
\n Digital Asset ID: \n {nft.nftId}\n
\n \n
\n Date purchased: \n \n {moment(nft.datePurchased).format('MMMM DD, YYYY')}\n \n
\n
\n )}\n \n
\n
\n );\n }\n}\n\nTransferNFT.propTypes = {\n nft: PropTypes.string,\n onClose: PropTypes.func,\n onSuccess: PropTypes.func,\n};\n\nexport default TransferNFT;\n","import '../../config/flow';\nimport * as fcl from '@onflow/fcl';\nimport React, { Component } from 'react';\nimport { toast } from 'react-toastify';\nimport moment from 'moment-mini';\nimport SimpleModal from '../modal/modal';\nimport FlowWallet from './flowWallet';\nimport MetamaskWallet from '../wallet/metamaskWallet';\nimport AccountManager from '../../managers/Account';\nimport Throbber from '../throbber';\nimport { getBlockchainType, getScanUrl, getScanName } from '../../managers/Helpers';\n\nclass TransferWallet extends Component {\n constructor(props) {\n super(props);\n this.state = {\n walletAddress: null,\n isLoading: false,\n transferText: '',\n transferSuccess: false,\n transactionUrl: process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://testnet.flowscan.org/transaction/' : 'https://flowscan.org/transaction/',\n polyscanUrl: process.env.BLOCKCHAIN_ENVIRONMENT === 'test' ? 'https://mumbai.polygonscan.com/' : 'https://polygonscan.com/',\n transactionId: null,\n blockcainType: null,\n };\n }\n\n getGenerateCollectionScript = () => {\n const { nft } = this.props;\n const contractName = 'ethos' + nft.asset.name.replace(/\\s/g, '');\n\n const setupScript = `\n import ${contractName} from 0xEthosDeployer\n import NonFungibleToken from 0xFlowStandards\n import MetadataViews from 0xFlowStandards\n \n transaction() {\n prepare(signer: AuthAccount) {\n if signer.borrow<&${contractName}.Collection>(from: ${contractName}.CollectionStoragePath) == nil {\n signer.save(<- ${contractName}.createEmptyCollection(), to: ${contractName}.CollectionStoragePath)\n signer.link<&${contractName}.Collection{NonFungibleToken.CollectionPublic, NonFungibleToken.Receiver, MetadataViews.ResolverCollection}>(${contractName}.CollectionPublicPath, target: ${contractName}.CollectionStoragePath)\n }\n }\n }\n `;\n return setupScript;\n }\n\n initTransfer = async () => {\n const { walletAddress } = this.state;\n const { nft, onSuccess } = this.props;\n const payload = {\n nftId: nft.nftId,\n walletAddress,\n };\n this.setState({\n transferText: `Transferring NFT to ${walletAddress}.`,\n isLoading: true,\n });\n const transferResult = await AccountManager.transferToWallet(AccountManager.getToken(), payload);\n if (transferResult && transferResult.success) {\n toast.success('Successfully transferred NFT to your wallet');\n onSuccess(walletAddress);\n this.setState({\n transferSuccess: true,\n transactionId: transferResult.transactionId,\n });\n gtag('event', process.env.CREATOR_SUBDOMAIN + '_nft_transfer', { // eslint-disable-line\n event_category: 'nft_transfer_success',\n event_label: 'User transferred NFT with the transaction id: ' + transferResult.transactionId,\n });\n } else {\n toast.error('Oops! Something went wrong. Please try again later.');\n gtag('event', process.env.CREATOR_SUBDOMAIN + '_nft_transfer', { // eslint-disable-line\n event_category: 'nft_transfer_failed',\n event_label: 'User transferred an NFT but it failed. nftId: ' + nft.nftId,\n });\n }\n \n this.setState({\n isLoading: false,\n });\n }\n\n createCollection = async () => {\n const { walletAddress } = this.state;\n const { nft } = this.props;\n const collectionName = 'ethos' + nft.asset.name.replace(/\\s/g, '');\n const that = this;\n const { name } = nft.drop;\n this.setState({\n transferText: 'Looking for collection. Stand by...',\n isLoading: true,\n });\n try {\n const txId = await fcl.mutate({\n cadence: this.getGenerateCollectionScript(),\n args: (arg, t) => [],\n payer: fcl.authz,\n proposer: fcl.authz,\n authorizations: [fcl.authz],\n limit: 9999,\n });\n\n fcl.tx(txId).subscribe((txStatus) => {\n let loaderText = null;\n \n switch (txStatus?.status) {\n case 1:\n loaderText = `Setting up ${walletAddress} with ${collectionName} collection...`;\n break;\n case 2:\n loaderText = `Setting up ${walletAddress} with ${collectionName} collection...`;\n break;\n case 3:\n loaderText = `Setting up ${walletAddress} with ${collectionName} collection...`;\n break;\n case 4:\n loaderText = `Setting up ${walletAddress} with ${collectionName} collection...`;\n break;\n default:\n loaderText = `Setting up ${walletAddress} with ${collectionName} collection...`;\n }\n \n that.setState({\n transferText: loaderText,\n });\n \n // console.log(\"txStatus\", txStatus);\n if (txStatus?.status === 4) {\n if (txStatus.statusCode === 0) {\n that.setState({\n transferText: `Transferring NFT to ${walletAddress}.`,\n });\n console.log(\n `Successfully setup ${walletAddress} with ${collectionName} collection!`,\n );\n \n // initiate transfer now? Or wait to make the user click something\n // call our API\n that.initTransfer();\n } else {\n const { errorMessage } = txStatus;\n const contractLineNumber = errorMessage\n .split(' --> ')[1]\n .split(':')[1];\n that.setState({\n isLoading: false,\n });\n toast.error(\n `Error setting up ${walletAddress} with ${collectionName} collection. Check line ${contractLineNumber} of your script.`,\n );\n console.log('Contract deployment failed!');\n }\n }\n });\n } catch (e) {\n that.setState({\n isLoading: false,\n });\n console.log(e);\n }\n };\n\n updateAddress = (user) => {\n console.log('=== updateAddress ===');\n console.log(user);\n if (user && user.addr) {\n this.setState({\n walletAddress: user.addr,\n });\n } else {\n this.setState({\n walletAddress: null,\n });\n }\n }\n\n updateWallet = async (user) => {\n const { isLoggingIn } = this.state;\n const payload = {\n blockchain: 'flow',\n walletType: 'blocto',\n walletAddress: null,\n };\n if (isLoggingIn) {\n payload.walletAddress = user.addr;\n await AccountManager.addWallet(payload, AccountManager.getToken());\n }\n }\n\n onLogInAttempt = () => {\n this.setState({\n isLoggingIn: true,\n });\n }\n\n updateEthereumWallet = async (user) => {\n const { nft } = this.props;\n const payload = {\n blockchain: nft.asset.blockchain === 1 ? 'ethereum' : 'polygon',\n walletType: 'metamask',\n walletAddress: user.addr,\n };\n\n await AccountManager.addWallet(payload, AccountManager.getToken());\n if (user && user.addr) {\n this.setState({\n walletAddress: payload.walletAddress,\n });\n }\n }\n\n componentDidMount() {\n const { nft } = this.props;\n this.setState({\n blockcainType: getBlockchainType(nft.asset.blockchain),\n });\n }\n\n render() {\n const {\n blockcainType, transactionUrl, polyscanUrl, transactionId, transferSuccess, walletAddress, isLoading, transferText,\n } = this.state;\n const { nft, onClose } = this.props;\n return (\n
\n onClose()}>\n {isLoading\n && }\n {!transferSuccess\n &&
Transfer to your wallet
}\n {/*

You can use this feature to transfer an NFT to your own crypto wallet.

*/}\n {!nft.contractAddress\n && (\n
\n

This digital asset cannot be transferred to your wallet because it has not been minted yet. There are a few reasons why this may happen:

\n
    \n
  • This is a pre-sale purchase which has as a minted date schedule in the future.
  • \n
  • This digital asset is in the queue and is in progress of being minted.
  • \n
  • The blockchain network is unavailable.
  • \n
\n

\n Feel free to contact our support team if you require further details at\n {' '}\n support@ethosnft.com\n

\n
\n )}\n\n {nft.contractAddress\n ? (\n
\n {walletAddress\n ? (\n
\n {transferSuccess\n ? (\n
\n \"\"\n
Transfer successful!
\n

This transaction is currently being processed on the blockchain. It may take some time before it appears in your wallet.

\n {getBlockchainType(nft.asset.blockchain) === 'Polygon' || getBlockchainType(nft.asset.blockchain) === 'Ethereum'\n ? (\n
\n

\n You can view the status of this transaction on\n {' '}\n {getScanName(nft.asset.blockchain)}\n {' '}\n for updates and more information.\n

\n
\n

To manually add this NFT to your Metamask mobile app:

\n Network:\n {' '}\n {getBlockchainType(nft.asset.blockchain)}\n {' '}\n Mainnet\n
\n Contract Address:\n {' '}\n {nft.asset.contractAddress}\n
\n Token ID:\n {' '}\n {nft.number || nft.tokenId}\n
\n
\n )\n : (\n

\n You can view the status of this transaction on\n {' '}\n flowscan\n {' '}\n for updates and more information.\n

\n )}\n
\n )\n : (\n
\n
\n {nft.imageUrl.includes('.mp4')\n ? (\n \n )\n : \"NFT}\n \n
\n
\n
\n \n \n

\n Token ID:\n {' '}\n {nft.number || nft.tokenId}\n

\n

\n Blockchain:\n {' '}\n {getBlockchainType(nft.asset.blockchain)}\n

\n

\n Date minted:\n {' '}\n {moment(nft.dateMinted).format('MMMM DD, YYYY')}\n

\n
\n
\n
\n )}\n {!transferSuccess\n && (\n

\n Would you like to transfer this digital asset to the wallet with address:\n  \n {walletAddress}\n

\n )}\n
\n )\n : (\n
\n

\n No\n {' '}\n {blockcainType}\n {' '}\n supported wallet detected. To transfer this digital asset to a wallet, please connect one.\n

\n {getBlockchainType(nft.asset.blockchain) === 'Polygon' || getBlockchainType(nft.asset.blockchain) === 'Ethereum'\n ? (\n

\n Note: If you are on a Mobile device, you will need to use the Metamask browser from inside the Metamask mobile app.\n
\n {' '}\n Instructions for this can be found on the\n {' '}\n Metamask support site\n .\n

\n )\n : (\n \n )}\n
\n )}\n {/*

\n Transferring this NFT to the following wallet address: \n {walletAddress}\n

*/}\n {blockcainType === 'Polygon' || blockcainType === 'Ethereum'\n ? (\n this.updateEthereumWallet(user)}\n onInitAddress={(user) => this.updateAddress(user)}\n mode=\"transfer\" />\n )\n : (\n this.updateWallet(user)}\n onLogInAttempt={() => this.onLogInAttempt()}\n onInitAddress={(user) => this.updateAddress(user)}\n mode=\"transfer\" />\n )}\n
\n )\n : (\n
\n )}\n {nft.contractAddress && walletAddress && !transferSuccess\n ? (\n
\n {blockcainType === 'Flow'\n ? (\n this.createCollection()}>\n Transfer Digital Asset\n \n )\n : (\n this.initTransfer()}>\n Transfer Digital Asset\n \n )}\n   \n onClose()}>\n Close\n \n
\n )\n : (\n
\n onClose(true)}>\n Close\n \n
\n )}\n
\n
\n );\n }\n}\n\nTransferWallet.propTypes = {\n nft: PropTypes.string,\n onClose: PropTypes.func,\n // onTransferToUser: propTypes.func,\n onSuccess: PropTypes.func,\n};\n\nexport default TransferWallet;\n","import React, { Component } from 'react';\nimport SimpleModal from '../modal/modal';\n\nclass TransferToggle extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n componentDidMount() {}\n\n render() {\n const {\n nft, onClose, onTransferToUser, onTransferToWallet,\n } = this.props;\n return (\n
\n onClose()}>\n
Transfer Digital Asset
\n
\n
\n

Transfer to another user?

\n

Use this feature to transfer this digital asset to another user on ethos. If this user is not on the ethos multiverse platform, they will receive an invite.

\n \n
\n
\n

Transfer to your wallet?

\n

Use this feature to transfer this digital asset to your wallet. Transferring your digital asset to a wallet will remove it from the ethos multiverse. Some features may no longer available for this digital asset.

\n \n
\n {/*
\n

Transfer to your Apple Wallet

\n

Use this feature to transfer this NFT to your Apple wallet.

\n \n
*/}\n
\n
\n
\n );\n }\n}\n\nTransferToggle.propTypes = {\n // nft: PropTypes.string,\n onClose: PropTypes.func,\n onTransferToUser: propTypes.func,\n onTransferToWallet: propTypes.func,\n // onSuccess: PropTypes.func,\n};\n\nexport default TransferToggle;\n","import React, { Component } from 'react';\n\nclass Gallery extends Component {\n constructor(props) {\n super(props);\n this.state = {\n gallery: [],\n };\n }\n\n createGallery = (creator) => {\n console.log(creator);\n let galleryLength = 180;\n let imagePath = 'https://ipfs.ethosnft.com/legends/gallery2/';\n\n if (creator.creatorName === 'Klevu') {\n galleryLength = 68;\n imagePath = 'https://ipfs.ethosnft.com/discovered/pdf-images/optimized/';\n }\n\n let galleryObj = {\n id: 0,\n src: '',\n };\n const galleryArray = [];\n for (let i = 1; i <= galleryLength; i++) {\n galleryObj = {\n id: i,\n src: imagePath + i + '.jpg',\n };\n galleryArray.push(galleryObj);\n }\n this.setState({\n gallery: galleryArray,\n });\n }\n\n componentDidMount() {\n const { creator } = this.props;\n this.createGallery(creator);\n }\n\n render() {\n const { gallery } = this.state;\n return (\n
\n {gallery.length > 0\n && (\n
\n {gallery.map((item, i) => (\n \"\"\n ))}\n
\n )}\n
\n );\n }\n}\n\nexport default Gallery;\n","import moment from 'moment-mini';\nimport Ajax from './Ajax';\n\n/**\n* Utility helper for Account functions\n*/\n\nclass Utility {\n constructor() {\n this.apiUrl = process.env.SERVER_URL;\n this.allUtility = null;\n }\n\n sortUtility = (creatorId, filterType, token) => {\n // offers is 1 or 4\n if (filterType === 1) {\n return this.allUtility.filter((e) => e.utilityType === 1 || e.utilityType === 3);\n }\n if (filterType === 2) {\n return this.allUtility.filter((e) => e.utilityType === 2);\n }\n if (filterType === 3) {\n return this.allUtility.filter((e) => e.utilityType === 4);\n }\n return this.allUtility;\n }\n\n categorizeAssetUtility = (allUtility) => {\n const sortedUtility = [];\n let utilityObj;\n if (allUtility.filter((e) => e.utilityType === 1 || e.utilityType === 3).length > 0) {\n console.log('=== merch ===');\n console.log(allUtility.filter((e) => e.utilityType === 1 || e.utilityType === 3));\n utilityObj = {\n label: 'Merch',\n utility: allUtility.filter((e) => e.utilityType === 1 || e.utilityType === 3),\n };\n sortedUtility.push(utilityObj);\n utilityObj = {};\n }\n\n if (allUtility.filter((e) => e.utilityType === 2).length > 0) {\n utilityObj = {\n label: 'Media',\n utility: allUtility.filter((e) => e.utilityType === 2),\n };\n sortedUtility.push(utilityObj);\n utilityObj = {};\n }\n\n if (allUtility.filter((e) => e.utilityType === 4).length > 0) {\n utilityObj = {\n label: 'Offers',\n utility: allUtility.filter((e) => e.utilityType === 4),\n };\n sortedUtility.push(utilityObj);\n utilityObj = {};\n }\n\n return sortedUtility;\n }\n\n getFilteredUtility = (creatorId, filterType, token) => {\n const that = this;\n let filterName = 'gated-content';\n if (filterType === 1) {\n filterName = 'voucher';\n }\n if (filterType === 2) {\n filterName = 'gated-content';\n }\n if (filterType === 3) {\n filterName = 'gated-commerce';\n }\n if (filterType === 4) {\n filterName = 'generic';\n }\n return Ajax.get(that.apiUrl + 'utility/creator/' + creatorId, token)\n .then((data) => data)\n .catch((error) => {\n throw error;\n });\n }\n\n getAllUtility = (creatorId, token) => {\n const that = this;\n return Ajax.get(that.apiUrl + 'utility/creator/' + creatorId, token)\n .then((data) => {\n if (!data.utility || data.utility.length !== 0) {\n that.allUtility = data.utility.collectionUtility.concat(data.utility.nftUtility);\n return data;\n }\n return null;\n })\n .catch((error) => {\n throw error;\n });\n }\n}\n\nexport default new Utility();\n"],"sourceRoot":""}