@dcl/explorer-website 0.1.0-2422667580.commit-acd3af5 → 0.1.0-2556982585.commit-73c5a3e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/asset-manifest.json +35 -34
- package/index.html +1 -1
- package/package.json +3 -3
- package/static/css/{2.84089c0b.chunk.css → 2.e8b6f08f.chunk.css} +4 -4
- package/static/css/{2.84089c0b.chunk.css.map → 2.e8b6f08f.chunk.css.map} +1 -1
- package/static/css/main.4efdd115.chunk.css +2 -0
- package/static/css/main.4efdd115.chunk.css.map +1 -0
- package/static/js/2.5f2e00c9.chunk.js +3 -0
- package/static/js/{2.5e6f7bcc.chunk.js.LICENSE.txt → 2.5f2e00c9.chunk.js.LICENSE.txt} +0 -0
- package/static/js/{2.5e6f7bcc.chunk.js.map → 2.5f2e00c9.chunk.js.map} +1 -1
- package/static/js/{3.a82ee5aa.chunk.js → 3.c9c4b5aa.chunk.js} +3 -3
- package/static/js/{3.a82ee5aa.chunk.js.LICENSE.txt → 3.c9c4b5aa.chunk.js.LICENSE.txt} +0 -0
- package/static/js/{3.a82ee5aa.chunk.js.map → 3.c9c4b5aa.chunk.js.map} +1 -1
- package/static/js/4.6bdec8c0.chunk.js +2 -0
- package/static/js/{4.83e1b6af.chunk.js.map → 4.6bdec8c0.chunk.js.map} +1 -1
- package/static/js/{5.2005498b.chunk.js → 5.4dad599c.chunk.js} +2 -2
- package/static/js/{5.2005498b.chunk.js.map → 5.4dad599c.chunk.js.map} +1 -1
- package/static/js/main.c751f00e.chunk.js +2 -0
- package/static/js/main.c751f00e.chunk.js.map +1 -0
- package/static/js/runtime-main.9034dfbf.js +2 -0
- package/static/js/{runtime-main.3b4b502d.js.map → runtime-main.9034dfbf.js.map} +1 -1
- package/static/media/discord.1be5401f.svg +23 -0
- package/static/media/wallet-img.e224d7ea.png +0 -0
- package/static/css/main.f2472546.chunk.css +0 -2
- package/static/css/main.f2472546.chunk.css.map +0 -1
- package/static/js/2.5e6f7bcc.chunk.js +0 -3
- package/static/js/4.83e1b6af.chunk.js +0 -2
- package/static/js/main.06437a81.chunk.js +0 -2
- package/static/js/main.06437a81.chunk.js.map +0 -1
- package/static/js/runtime-main.3b4b502d.js +0 -2
- package/static/media/wallets.96b87835.jpg +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["utils/errorToString.ts","state/selectors.ts","eth/provider.ts","state/types.ts","integration/kernel.ts","integration/featureFlags.ts","utils/classNames.ts","components/errors/Error.tsx","images/errors/error-robotmobile.png","components/errors/ErrorAvatarLoading.tsx","images/errors/error-robotdown.png","components/errors/utils.tsx","components/errors/ErrorComms.tsx","components/errors/ErrorFatal.tsx","images/errors/robotsmiling.png","components/errors/ErrorMetamaskLocked.tsx","components/errors/ErrorNetworkMismatch.tsx","components/errors/ErrorNewLogin.tsx","components/errors/ErrorNoMobile.tsx","components/errors/ErrorNotSupported.tsx","integration/mobile.ts","components/errors/ErrorContainer.tsx","components/common/Layout/Container.tsx","components/auth/EthConnectAdvice.tsx","components/auth/EthWalletSelector.tsx","images/guest.jpg","images/wallet-img.png","components/auth/LoginItemContainer.tsx","components/auth/LoginContainer.tsx","images/logo.png","components/common/Audio.tsx","components/common/Layout/Accordion.tsx","components/auth/BeginnersGuide.tsx","components/common/Icon/Reddit.tsx","components/common/Icon/Github.tsx","components/common/Icon/Twitter.tsx","components/common/Icon/Discord.tsx","components/common/Layout/BigFooter.tsx","components/banners/BannerNotSupported.tsx","components/banners/BannerContainer.tsx","components/common/Loading/LoadingRender.tsx","components/common/Button/JoinDiscord.tsx","components/common/Layout/Navbar.tsx","components/banners/BannerStream.tsx","components/common/StreamContainer.tsx","integration/mail.ts","components/common/MobileContainer.tsx","components/App.tsx","index.tsx","state/reducers.ts","state/redux.ts","kernel-loader/index.ts","utils/rolloutVersions.ts","state/actions.ts","integration/desktop.ts","utils/tracking.ts","kernel-loader/injector.ts","integration/queryParamsConfig.ts","integration/browser.ts","utils/callOnce.ts","integration/analytics.ts"],"names":["errorToString","error","message","toString","JSON","stringify","Object","prototype","call","FeatureFlags","getRequiredAnalyticsContext","state","sessionId","session","isFeatureEnabled","key","name","FF_APPLICATION_NAME","featureFlags","defaultFeatureFlagsState","flags","getFeatureVariant","defaultValue","undefined","variant","variants","payload","value","chainIdRpc","Map","getEthereumProvider","type","chainId","a","rpc","get","Error","provider","WebSocketProvider","account","connection","connect","result","restoreConnection","Promise","race","tryPreviousConnection","_","reject","setTimeout","disconnect","defaultWebsiteErrorTracker","initializeKernel","callOnce","startKernel","id","callback","element","document","getElementById","style","opacity","display","fadeoutElement","ROOT_HIDDEN","initializeFeatureFlags","fetchFlags","applicationName","ff","store","dispatch","setFeatureFlags","classNames","items","filter","Boolean","join","ErrorContainer","React","className","children","props","ErrorDetails","header","description","backgroundHeader","ErrorImage","alt","ErrorAvatarLoading","memo","href","src","errorImage","reload","window","location","ErrorComms","Button","primary","onClick","defaultDetails","ErrorFatal","details","ErrorMetamaskLocked","closeError","ErrorNetworkMismatch","NETWORK","onLogout","ErrorNewLogin","ErrorNoMobile","width","height","as","ErrorNotSupported","useMobileResize","active","useState","size","setSize","useEffect","root","resize","innerHeight","innerWidth","addEventListener","removeEventListener","replace","ErrorType","COMMS","METAMASK_LOCKED","NEW_LOGIN","NOT_MOBILE","NOT_SUPPORTED","NET_MISMATCH","AVATAR_ERROR","Fragment","setKernelError","Container","Content","EthConnectAdvice","ProviderType","FORTMATIC","INJECTED","WALLET_CONNECT","EthWalletSelector","open","loading","canceling","availableProviders","onLogin","onCancelLogin","onClose","anchor","useMemo","createElement","target","rel","browserWallet","length","includes","isCucumberProvider","LoginModalOptionType","SAMSUNG","isDapperProvider","DAPPER","METAMASK","handleLoginWalletConnect","useCallback","handleLoginWalletLink","WALLET_LINK","handleLoginFortmatic","handleLoginInjected","click","LoginModal","i18n","title","subtitle","isElectron","Option","browser_extension","email","mobile","mobile_and_browser","Loader","marginTop","LoginItemContainer","LoginWalletItem","wallets","disabled","LoginGuestItem","guest","defaultAvailableProviders","enableProviders","Set","getAvailableProviders","has","stage","kernelState","loginStatus","providerType","kernelReady","kernel","ready","rendererReady","renderer","isGuest","isWallet","track","provider_type","authenticate","then","showWalletSelector","setShowWalletSelector","handleOpenSelector","handleCloseSelector","setCanceling","handleCancelLogin","handleGuestLogin","LoginState","SIGNATURE_PENDING","WAITING_PROFILE","WAITING_RENDERER","LOADING","providerInUse","AUTHENTICATING","desktopAvailable","isWindows","COMPLETED","visibility","textDecoration","Audio","player","this","updatePlayer","play","catch","e","pause","ref","audio","autoPlay","loop","Component","Accordion","setOpen","useRef","current","offsetHeight","BeginnersGuide","Reddit","viewBox","fill","d","transform","Github","Twitter","Discord","year","Math","max","Date","getFullYear","BigFooter","versions","injectVersions","BannerNotSupported","banner","setBanner","BannerType","NOT_RECOMMENDED","LoadingRender","process","JoinDiscord","Navbar","isFullscreen","leftMenu","Item","preventDefault","Base","defaultProps","menu","marketplace","builder","docs","events","dao","blog","rightMenu","BannerStream","Stream","allowFullScreen","subscribe","fetch","method","headers","body","interest","res","status","json","sending","sent","setState","handleSubmit","data","FormData","currentTarget","isEmail","onSubmit","placeholder","required","small","backgroundImage","frameBorder","allow","hasStream","hasBanner","sessionReady","sound","isMobile","useMobileMediaQuery","configureSegment","configureRollbar","hideRoot","getState","ReactDOM","initializeBrowserRecommendation","initializeDesktopApp","defaultSession","v4","DownloadCurrentState","reducers","combineReducers","action","SET_KERNEL_LOADED","SET_KERNEL_ACCOUNT_STATE","SIGN_UP","getConnectionData","SET_RENDERER_READY","SET_RENDERER_VISIBLE","visible","SET_RENDERER_LOADING","version","SET_KERNEL_ERROR","code","SET_BANNER","download","defaultDownload","progress","currentState","NONE","authCompleted","SET_DOWNLOAD_PROGRESS","DOWNLOADING","SET_DOWNLOAD_READY","READY","SET_DOWNLOAD_NEW_VERSION","NEW_VERSION","electron","ipcRenderer","send","EXECUTED","SET_FEATURE_FLAGS","middleware","x","createStore","getChainIdFromProvider","rm","RequestManager","parseInt","net_version","getWantedChainId","wantedChainId","providerChainId","setAsRecentlyLoggedIn","trackConnectWallet","address","resolveBaseUrl","urn","startsWith","resolveUrlFromUrn","t","URL","global","cdnFromRollout","rollout","cdnFromPrefixVersion","prefix","getVersions","qs","URLSearchParams","search","globalThis","ROLLOUTS","KERNEL_BASE_URL","RENDERER_BASE_URL","identify","lastIdentity","identifyUser","container","injectKernel","baseUrl","configurations","kernelOptions","rendererOptions","on","eventName","eventData","internalTrackEvent","context","url","newWindow","opener","identity","setKernelAccountState","trackError","extra","disableAnalytics","event","setRendererReady","setRendererLoading","hasStoredSession","FATAL","ENV","require","launchDesktopApp","launched","initKernel","setKernelLoaded","initLogin","rolloutsInfo","component","accountState","progressEvent","setDownloadProgress","setDownloadReady","setDownloadNewVersion","navigator","userAgent","indexOf","sender","console","log","hasRecentlyLoggedIn","getCurrentPosition","customProtocolParams","position","push","realm","customProtocolTarget","installed","isInstalled","iframe","setAttribute","appendChild","resolve","removeChild","ethereum","rollouts","overriddenEventOptions","click_login_button","integrations","getWalletName","isMetaMask","isDapper","isCucumber","isTrust","isToshi","isGoWallet","isAlphaWallet","isStatus","getWalletProps","keys","prop","getEnvironmentProperties","properties","rendererType","RENDERER_TYPE","lib","wallet","walletProps","recommendedBrowser","isRecommendedBrowser","environmentProperties","options","kernelUrl","injectScript","DecentralandKernel","theFuture","future","theScript","persistMessage","async","crossOrigin","DEBUG_ANALYTICS","test","platform","maxTouchPoints","detected","detect","BROWSER_LAST_SESSION_KEY","lastLoginAt","Number","localStorage","getItem","isNaN","now","setItem","String","userAgentData","fun","AnalyticsAccount","RollbarAccount","analyticsDisabled","authFlags","isAuthenticated","afterFatalError","defaultAnalyticsOptions","host","endsWith","initialize","PRD","DEV","injectTrackingMetadata","assign","dcl_is_authenticated","dcl_is_guest","dcl_disabled_analytics","dcl_renderer_type","Rollbar","accessToken","Desktop","Web","configure","enabled","info","critical","fullErrorStack","analytics","userTraits","segmentKey","load","page","timeout"],"mappings":"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","file":"static/js/main.c751f00e.chunk.js","sourcesContent":["\nexport function errorToString(error: any) {\n if (typeof error === 'object') {\n if (error.message) return error.message\n if (error.toString() === '[object Object]') {\n return JSON.stringify(error)\n }\n return error.toString()\n }\n if (typeof error === 'string') return error\n return Object.prototype.toString.call(error)\n}","import { SessionTraits } from '../trackingEvents'\nimport { StoreType } from './redux'\nimport { defaultFeatureFlagsState, FF_APPLICATION_NAME } from './types'\n\n// This function is used for every rollbar and segment events.\nexport function getRequiredAnalyticsContext(state: StoreType): SessionTraits {\n return {\n sessionId: state.session.sessionId\n }\n}\n\nexport enum FeatureFlags {\n Stream = 'stream'\n}\n\nexport function isFeatureEnabled(state: StoreType, key: string): boolean {\n const name = `${FF_APPLICATION_NAME}-${key}`\n const ff = state.featureFlags || defaultFeatureFlagsState\n return !!ff.flags[name]\n}\n\nexport function getFeatureVariant(state: StoreType, key: string, defaultValue: string | undefined = undefined) {\n if (isFeatureEnabled(state, key)) {\n const name = `${FF_APPLICATION_NAME}-${key}`\n const variant = state.featureFlags.variants[name]\n if (variant?.payload?.value) {\n return variant?.payload?.value\n }\n }\n\n return defaultValue\n}\n","import { connection, ConnectionResponse } from 'decentraland-connect'\nimport { WebSocketProvider } from 'eth-connect'\nimport { ChainId } from '@dcl/schemas/dist/dapps/chain-id'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { IEthereumProvider } from '@dcl/kernel-interface'\nimport { defaultWebsiteErrorTracker } from '../utils/tracking'\n\nexport const chainIdRpc = new Map<number, string>([\n [1, 'wss://mainnet.infura.io/ws/v3/31afa49f0c87489d9ec71eba2808b63f'],\n [3, 'wss://ropsten.infura.io/ws/v3/31afa49f0c87489d9ec71eba2808b63f']\n])\n\nexport async function getEthereumProvider(\n type: ProviderType | null,\n chainId: ChainId\n): Promise<{\n provider: IEthereumProvider\n chainId: number\n account: string | null\n}> {\n if (type === null) {\n const rpc = chainIdRpc.get(chainId)\n if (!rpc) throw new Error(\"Can't get RPC for chainId \" + chainId)\n return {\n provider: new WebSocketProvider(rpc),\n chainId,\n account: null\n }\n }\n\n const result = await connection.connect(type, chainId)\n return {\n provider: result.provider,\n chainId: result.chainId,\n account: result.account\n }\n}\n\nexport async function restoreConnection(): Promise<ConnectionResponse | null> {\n try {\n return await Promise.race<ConnectionResponse | null>([\n connection.tryPreviousConnection(),\n new Promise((_, reject) => setTimeout(() => reject('Connection timeout'), 10 * 1000)) as any\n ])\n } catch (err) {\n return null\n }\n}\n\nexport async function disconnect(): Promise<void> {\n try {\n return await connection.disconnect()\n } catch (err) {\n defaultWebsiteErrorTracker(err)\n return\n }\n}\n","import { FeatureFlagsState } from \"./redux\"\n\nexport const FF_APPLICATION_NAME = 'explorer'\n\nexport const defaultFeatureFlagsState: FeatureFlagsState = {\n flags: {},\n variants: {}\n}\n","import { Store } from \"redux\"\nimport { StoreType } from \"../state/redux\"\nimport { startKernel } from \"../kernel-loader\"\nimport { callOnce } from \"../utils/callOnce\"\n\nfunction fadeoutElement(id: string, callback?: () => void) {\n const element = document.getElementById(id)\n if (element) {\n element.style.opacity = '0'\n setTimeout(() => {\n element.style.display = 'none'\n if (callback) {\n callback()\n }\n }, 300)\n }\n}\n\nexport const initializeKernel = callOnce(() => {\n startKernel()\n fadeoutElement('root-loading')\n})\n\nexport function configureKernel(store: Store<StoreType>) {\n store.subscribe(() => hideRoot(store.getState()))\n}\n\nlet ROOT_HIDDEN = false\nfunction hideRoot (state: StoreType) {\n const sessionReady = !!state.session?.ready\n const rendererReady = !!state.renderer?.ready\n const error = !!state.error?.error\n\n if (!ROOT_HIDDEN && !error && !!rendererReady && !!sessionReady) {\n ROOT_HIDDEN = true\n document.getElementById('root')!.style.display = 'none'\n } else if (ROOT_HIDDEN && (!!error || !rendererReady || !sessionReady)) {\n ROOT_HIDDEN = false\n document.getElementById('root')!.style.display = 'block'\n }\n}","import { fetchFlags } from '@dcl/feature-flags'\nimport { setFeatureFlags } from '../state/actions'\nimport { store } from '../state/redux'\nimport { FF_APPLICATION_NAME } from '../state/types'\nimport { callOnce } from \"../utils/callOnce\"\n\nexport const initializeFeatureFlags = callOnce(async () => {\n const ff = await fetchFlags({ applicationName: FF_APPLICATION_NAME })\n store.dispatch(setFeatureFlags(ff))\n})","export default function classNames(items: (string | false | undefined | null)[]): string {\n return items.filter(Boolean).join(' ')\n}","import * as React from 'react'\nimport classNames from '../../utils/classNames'\nimport './errors.css'\n\nexport const ErrorContainer = React.memo(function ({ className, children, ...props }: React.HTMLProps<HTMLDivElement>) {\n return <div {...props} className={classNames(['error-container', className])}>\n <div className=\"error-background\" />\n <div className=\"error-content\">{children}</div>\n </div>\n})\n\nexport type DetailsProps = React.HTMLProps<HTMLDivElement> & {\n header?: React.ReactNode,\n backgroundHeader?: React.ReactNode,\n description?: React.ReactNode,\n}\n\nexport const ErrorDetails = React.memo(function ({ className, header, description, backgroundHeader, children, ...props }: DetailsProps) {\n return <div {...props} className={classNames(['error-details', className])}>\n {backgroundHeader && <div className=\"error-background-title\">{backgroundHeader}</div>}\n <div className=\"error-title\">{header || 'Something went wrong'}</div>\n {description && <div className=\"error-description\">{description}</div>}\n {children && <div className=\"error-cta\">{children}</div>}\n </div>\n})\n\nexport const ErrorImage = React.memo(function ({ className, ...props }: React.ImgHTMLAttributes<HTMLImageElement>) {\n return <div className={classNames(['error-image', className])}>\n <img alt=\"error\" {...props} />\n </div>\n})\n","export default __webpack_public_path__ + \"static/media/error-robotmobile.9df34375.png\";","import React from 'react'\nimport { ErrorContainer, ErrorDetails, ErrorImage } from './Error'\nimport errorImage from '../../images/errors/error-robotmobile.png'\n\nexport const ErrorAvatarLoading = React.memo(function () {\n return <ErrorContainer id=\"error-avatarerror\">\n <ErrorDetails\n backgroundHeader=\"Oops!\"\n header=\"There was a technical issue and we were unable to retrieve your avatar information\"\n description={<>\n Please try again later, and if the problem persists you can contact us through the Discord channel or at{' '}\n <a href=\"mailto:hello@decentraland.org\">hello@decentraland.org</a>\n </>}\n />\n <ErrorImage alt=\"error-mobile-robot\" src={errorImage} />\n </ErrorContainer>\n})\n","export default __webpack_public_path__ + \"static/media/error-robotdown.ee4685c4.png\";","\nexport function reload() {\n window.location.reload();\n}\n","import React from 'react'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport errorImage from '../../images/errors/error-robotdown.png'\nimport { ErrorContainer, ErrorDetails, ErrorImage } from './Error'\nimport { reload } from \"./utils\"\nimport './errors.css'\n\nexport const ErrorComms = React.memo(function () {\n return <ErrorContainer id=\"error-comms\">\n <ErrorDetails\n backgroundHeader=\"Oops!\"\n header={<> A communication link could not be <br /> established with other peers</>}\n description={<>\n This might be because you are behind a restrictive network firewall, or a temporary problem with the selected realm. <br />\n <br />\n If you have any ad blocking extensions try turning them off for this site, and then reload.\n <br />\n You can also try a different realm.\n </>}>\n <Button primary onClick={reload}>Reload</Button>\n </ErrorDetails>\n <ErrorImage alt=\"error-down-robot\" src={errorImage} />\n </ErrorContainer>\n})\n","import React from 'react'\nimport { ErrorContainer, ErrorDetails, ErrorImage } from './Error'\nimport { reload } from \"./utils\"\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\n\nimport errorImage from '../../images/errors/error-robotdown.png'\nimport './errors.css'\n\nconst defaultDetails: React.ReactNode = <>\n <div>If you have any ad blocking extensions,</div>\n <div>try turning them off for this site.</div>\n <div />\n <div>Loading should not take any longer than 2-3 minutes.</div>\n <div>If you seem to be stuck, make sure hardware acceleration is on.</div>\n <a href=\"https://docs.decentraland.org/decentraland/hardware-acceleration/\">LEARN MORE</a>\n</>\n\nexport type ErrorFatalProps = {\n details?: React.ReactNode\n}\n\nexport const ErrorFatal = React.memo(function (props: ErrorFatalProps) {\n return <ErrorContainer id=\"error-fatal\">\n <ErrorDetails\n backgroundHeader=\"Oops!\"\n header=\"Something went wrong\"\n description={props.details || defaultDetails}>\n <Button primary onClick={reload}>Reload</Button>\n </ErrorDetails>\n <ErrorImage alt=\"error-down-robot\" src={errorImage} />\n </ErrorContainer>\n})\n","export default __webpack_public_path__ + \"static/media/robotsmiling.e182d216.png\";","import React from 'react'\nimport { ErrorContainer, ErrorDetails, ErrorImage } from './Error'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\n\nimport errorImage from '../../images/errors/robotsmiling.png'\nimport './errors.css'\n\nexport interface ErrorNetworkMismatchProps {\n details: string | null\n closeError(): void\n}\n\nexport const ErrorMetamaskLocked = React.memo(function (props: ErrorNetworkMismatchProps) {\n return <ErrorContainer id=\"error-metamask-locked\">\n <ErrorDetails\n header=\"Before we continue\"\n description={props.details}>\n <Button primary onClick={props.closeError}>Retry</Button>\n </ErrorDetails>\n <ErrorImage alt=\"error-smiling-robot\" src={errorImage} />\n </ErrorContainer>\n})\n","import React from 'react'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport { ErrorContainer, ErrorDetails, ErrorImage } from './Error'\nimport { reload } from \"./utils\"\nimport { NETWORK } from '../../integration/queryParamsConfig'\n\nimport errorImage from '../../images/errors/robotsmiling.png'\nimport './errors.css'\n\nexport interface ErrorNetworkMismatchProps {\n details: string | null\n onLogout: () => void\n}\n\nexport const ErrorNetworkMismatch = React.memo(function (props: ErrorNetworkMismatchProps) {\n return <ErrorContainer id=\"error-network-mismatch\">\n <ErrorDetails\n backgroundHeader=\"Oops!\"\n header=\"A network mismatch was detected\"\n description={<>\n We detected that you are trying to enter the <strong id=\"tld\">{NETWORK || 'mainnet'}</strong> network, and\n your Ethereum wallet is set to other network.\n <br /><br />\n To continue, please change the Ethereum network in your wallet to <strong id=\"web3NetGoal\">{NETWORK || 'mainnet'}</strong> and click \"Reload\".\n {props.details && <br />}\n {props.details && <>Details: {props.details}</>}\n </>}>\n <Button primary onClick={reload}>Retry</Button>\n <Button primary onClick={props.onLogout}>Log out</Button>\n </ErrorDetails>\n <ErrorImage alt=\"error-smiling-robot\" src={errorImage} />\n </ErrorContainer>\n})\n","import React from 'react'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport { ErrorContainer, ErrorDetails, ErrorImage } from './Error'\nimport { reload } from \"./utils\"\n\nimport errorImage from '../../images/errors/robotsmiling.png'\nimport './errors.css'\n\nexport const ErrorNewLogin = React.memo(function () {\n return <ErrorContainer id=\"error-new-login\">\n <ErrorDetails\n backgroundHeader=\"Oops!\"\n header=\"Another session was detected\"\n description={<>\n It seems that the explorer was opened with your account from another device, browser, or tab.\n <br />\n Please, close the prior session and click \"Reload\" to explore the world in this window.</>}>\n <Button primary onClick={reload}>Reload</Button>\n </ErrorDetails>\n <ErrorImage alt=\"error-smiling-robot\" src={errorImage} />\n </ErrorContainer>\n})\n","import React from 'react'\nimport { ErrorContainer } from './Error'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport errorImage from '../../images/errors/error-robotmobile.png'\n\n\nexport const ErrorNoMobile = React.memo(function () {\n return <ErrorContainer id=\"error-no-mobile\">\n <div className=\"error-no-mobile-title\">The client is only available on desktop right now.</div>\n <div className=\"error-no-mobile-image\">\n <img alt=\"no-mobile\" width=\"495\" height=\"707\" src={errorImage} />\n </div>\n <div className=\"error-no-mobile-cta\">\n <Button primary as=\"a\" href=\"https://decentraland.org\">Learn more about decentraland</Button>\n </div>\n </ErrorContainer>\n})\n","import React from 'react'\nimport errorImage from '../../images/errors/error-robotmobile.png'\nimport { ErrorContainer, ErrorDetails, ErrorImage } from './Error'\nimport './errors.css'\n\nexport const ErrorNotSupported = React.memo(function () {\n return <ErrorContainer id=\"error-new-login\">\n <ErrorDetails\n backgroundHeader=\"Error\"\n header=\"Your browser or device is not supported\"\n description=\"The Explorer only works on Chrome or Firefox for Windows, Linux and macOS.\"\n />\n <ErrorImage alt=\"error-mobile-robot\" src={errorImage} />\n </ErrorContainer>\n})\n","import { useEffect, useState } from \"react\"\n\nexport function useMobileResize(active: boolean = true) {\n const [ size, setSize ] = useState(() => ({ height: 0, width: 0 }))\n useEffect(() => {\n if (!active) {\n return\n }\n\n const root = document.getElementById('root')\n if (root) {\n root.className += ' full'\n }\n\n const resize = () => setSize({\n height: window.innerHeight,\n width: window.innerWidth,\n })\n\n resize()\n\n window.addEventListener('resize', resize)\n\n return () => {\n window.removeEventListener('resize', resize)\n if (root) {\n root.className = root.className.replace(' full', '')\n }\n }\n }, [ active ])\n\n return size\n}","import React from 'react'\nimport { connect } from 'react-redux'\nimport { setKernelError } from '../../state/actions'\nimport { disconnect } from '../../eth/provider'\nimport { ErrorState, ErrorType, StoreType } from '../../state/redux'\nimport { ErrorAvatarLoading } from './ErrorAvatarLoading'\nimport { ErrorComms } from './ErrorComms'\nimport { ErrorFatal } from './ErrorFatal'\nimport { ErrorMetamaskLocked } from './ErrorMetamaskLocked'\nimport { ErrorNetworkMismatch } from './ErrorNetworkMismatch'\nimport { ErrorNewLogin } from './ErrorNewLogin'\nimport { ErrorNoMobile } from './ErrorNoMobile'\nimport { ErrorNotSupported } from './ErrorNotSupported'\nimport { useMobileResize } from '../../integration/mobile'\n\nconst mapStateToProps = (state: StoreType): Pick<ErrorContainerProps, 'error'> => {\n return {\n error: state.error.error || null\n }\n}\n\nconst mapDispatchToProps = (dispatch: (a: any) => void, state: StoreType): Pick<ErrorContainerProps, 'closeError' | 'onLogout'> => {\n return {\n closeError: () => dispatch(setKernelError(null)),\n onLogout: () => disconnect()\n }\n}\n\nexport interface ErrorContainerProps {\n error: ErrorState['error']\n onLogout(): void\n closeError(): void\n}\n\nexport const ErrorContainer = React.memo(function (props: ErrorContainerProps) {\n useMobileResize(!!props.error)\n\n if (!props.error) return <React.Fragment></React.Fragment>\n\n if (props.error.type === ErrorType.COMMS) return <ErrorComms />\n if (props.error.type === ErrorType.METAMASK_LOCKED)\n return <ErrorMetamaskLocked details={props.error.details} closeError={props.closeError} />\n if (props.error.type === ErrorType.NEW_LOGIN) return <ErrorNewLogin />\n if (props.error.type === ErrorType.NOT_MOBILE) return <ErrorNoMobile />\n if (props.error.type === ErrorType.NOT_SUPPORTED) return <ErrorNotSupported />\n if (props.error.type === ErrorType.NET_MISMATCH)\n return <ErrorNetworkMismatch details={props.error.details} onLogout={props.onLogout} />\n if (props.error.type === ErrorType.AVATAR_ERROR) return <ErrorAvatarLoading />\n\n return (\n <React.Fragment>\n <ErrorFatal details={props.error.details || 'An error happened while loading Decentraland.'} />\n </React.Fragment>\n )\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ErrorContainer)\n","import React from 'react'\nimport './Container.css'\n\nexport const Container: React.FC<React.HTMLAttributes<HTMLDivElement>> = (props) => (\n <div {...props} className={'eth-container ' + (props.className || '')} />\n)\n\nexport const Content: React.FC<React.HTMLAttributes<HTMLDivElement>> = (props) => (\n <div {...props} className={'eth-content ' + (props.className || '')} />\n)\n","import React from 'react'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\n\nexport type EthWalletSelectorAdviceProps = {\n provider?: ProviderType\n style?: React.CSSProperties\n}\n\nexport const EthConnectAdvice = React.memo((props: EthWalletSelectorAdviceProps) => {\n switch (props.provider) {\n case ProviderType.FORTMATIC:\n return <span className=\"EthConnectAdvice\" style={props.style}>\n Please, follow the instructions of your fortmatic provider to continue.\n </span>\n\n case ProviderType.INJECTED:\n return <span className=\"EthConnectAdvice\" style={props.style}>\n Please, follow the instructions of your browser wallet provider to continue.\n </span>\n\n case ProviderType.WALLET_CONNECT:\n return <span className=\"EthConnectAdvice\" style={props.style}>\n Please, follow the instructions of your mobile wallet provider to continue.\n </span>\n\n default:\n return null\n }\n})","import React, { useCallback, useMemo } from 'react'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { isCucumberProvider, isDapperProvider } from 'decentraland-dapps/dist/lib/eth'\nimport { Loader } from 'decentraland-ui/dist/components/Loader/Loader'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport { LoginModal, LoginModalOptionType } from 'decentraland-ui/dist/components/LoginModal/LoginModal'\nimport { isElectron } from '../../integration/desktop'\nimport { EthConnectAdvice } from './EthConnectAdvice'\n\nexport interface WalletSelectorProps {\n open: boolean\n loading: boolean\n canceling?: boolean\n provider?: ProviderType\n availableProviders?: ProviderType[]\n onLogin?: (provider: ProviderType | null) => void\n onCancelLogin?: () => void\n onClose?: () => void\n}\n\nexport const EthWalletSelector: React.FC<WalletSelectorProps> = React.memo(({\n open,\n loading,\n canceling,\n provider,\n availableProviders,\n onLogin,\n onCancelLogin,\n onClose,\n}) => {\n const anchor = useMemo(() => {\n const a = document.createElement('a')\n a.target = '_blank'\n a.rel = 'noreferrer noopener'\n a.href = 'https://metamask.io/download.html'\n return a\n }, [])\n\n const browserWallet = useMemo<LoginModalOptionType | null>(() => {\n if (availableProviders && availableProviders.length > 0) {\n const hasWallet = availableProviders.includes(ProviderType.INJECTED)\n if (hasWallet) {\n return isCucumberProvider() ? LoginModalOptionType.SAMSUNG :\n isDapperProvider() ? LoginModalOptionType.DAPPER :\n LoginModalOptionType.METAMASK\n }\n }\n\n return null\n }, [ availableProviders ])\n\n const handleLoginWalletConnect = useCallback(() => onLogin && onLogin(ProviderType.WALLET_CONNECT), [ onLogin ])\n const handleLoginWalletLink = useCallback(() => onLogin && onLogin(ProviderType.WALLET_LINK), [ onLogin ])\n const handleLoginFortmatic = useCallback(() => onLogin && onLogin(ProviderType.FORTMATIC), [ onLogin ])\n const handleLoginInjected = useCallback(() => {\n if (browserWallet && onLogin) {\n onLogin(ProviderType.INJECTED)\n } else {\n anchor.click()\n }\n }, [ onLogin,browserWallet, anchor ])\n\n return <LoginModal\n open={open}\n onClose={onClose}\n i18n={{\n title: 'Connect your wallet',\n error: '',\n subtitle: ''\n }}\n >\n {/* METAMASK */}\n {!isElectron() ? (\n <LoginModal.Option type={browserWallet || LoginModalOptionType.METAMASK} onClick={handleLoginInjected} />\n ) : (\n // Workaround to show metamask option on desktop that shows the wallet connect QR.\n <LoginModal.Option\n type={LoginModalOptionType.METAMASK}\n onClick={handleLoginWalletConnect}\n i18n={{\n // Decentraland ui picks the label depending on the type, METAMASK displays the browser_extension label.\n browser_extension: 'Using your mobile wallet',\n email: '',\n mobile: '',\n mobile_and_browser: ''\n }}\n />\n )}\n\n {/* FORTMATIC */}\n {!isElectron() && <LoginModal.Option type={LoginModalOptionType.FORTMATIC} onClick={handleLoginFortmatic} />}\n\n {/* WALLET_CONNECT */}\n <LoginModal.Option type={LoginModalOptionType.WALLET_CONNECT} onClick={handleLoginWalletConnect} />\n\n {/* WALLET_LINK */}\n {!isElectron() ? (\n <LoginModal.Option type={LoginModalOptionType.WALLET_LINK} onClick={handleLoginWalletLink} />\n ) : (\n <LoginModal.Option \n type={LoginModalOptionType.WALLET_LINK} \n onClick={handleLoginWalletLink} \n i18n={{\n // Decentraland ui picks the label depending on the type, WALLET_LINK displays the mobile_and_browser label.\n browser_extension: '',\n email: '',\n mobile: '',\n mobile_and_browser: 'Using your mobile wallet'\n }} \n />\n )}\n \n <small className=\"message\">Trezor and smart contract wallets like Dapper, Argent or Gnosis safe, do not work with Polygon. Read more about the Trezor support status\n {' '}\n <a\n href=\"https://github.com/trezor/trezor-firmware/pull/1568\"\n target=\"_blank\"\n rel=\"noopener noreferrer\">\n {'here'}\n </a>.\n </small>\n {loading && <div className=\"loader-background\">\n <Loader active={loading} provider={provider} size=\"massive\" />\n <EthConnectAdvice provider={provider} style={{ marginTop: '27px'}} />\n <div style={{ marginTop: '22px'}}>- or -</div>\n <Button onClick={onCancelLogin} loading={canceling} style={{ marginTop: '28px'}}>cancel login</Button>\n </div>}\n </LoginModal>\n})\n","export default __webpack_public_path__ + \"static/media/guest.6eb48000.jpg\";","export default __webpack_public_path__ + \"static/media/wallet-img.e224d7ea.png\";","import React from 'react'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport { Loader } from 'decentraland-ui/dist/components/Loader/Loader'\nimport guest from '../../images/guest.jpg'\nimport wallets from '../../images/wallet-img.png'\nimport { EthConnectAdvice } from './EthConnectAdvice'\nimport './LoginItemContainer.css'\n\nexport type LoginItemContainerProps = {\n onClick?: () => void,\n onCancelLogin?: () => void,\n className?: string\n loading?: boolean\n canceling?: boolean\n active?: boolean\n provider?: ProviderType\n children?: React.ReactNode\n}\n\nexport const LoginItemContainer = React.memo(function ({ children, className, loading, canceling, active, provider, onClick, onCancelLogin }: LoginItemContainerProps) {\n\n return <div\n className={`LoginItemContainer ${className || ''} ${loading ? 'loading' : ''} ${active ? 'active' : ''}`}\n onClick={loading ? undefined : onClick}\n >\n <div className=\"LoginItemContainer__BackLayer\" />\n <div className=\"LoginItemContainer__Content\">\n {children}\n </div>\n {loading && active && <div className=\"loader-background\">\n <Loader active={active && loading} provider={provider} size=\"massive\" />\n {provider && <EthConnectAdvice provider={provider} style={{ marginTop: '27px'}} />}\n {onCancelLogin && provider && <div style={{ marginTop: '22px'}}>- or -</div>}\n {onCancelLogin && provider && <Button onClick={onCancelLogin} loading={canceling} style={{ marginTop: '28px'}}>cancel</Button>}\n </div>}\n </div>\n})\n\nexport const LoginWalletItem = React.memo(function (props: LoginItemContainerProps) {\n return <LoginItemContainer {...props} className={`LoginWalletItem ${props.className || ''}`}>\n <img alt=\"wallets\" src={wallets} width=\"318\" className='wallet-img'/>\n <h2>Play using your wallet</h2>\n <p>Connect your account to fully enjoy Decentraland!</p>\n <Button primary size=\"huge\" loading={props.loading && !props.active} disabled={props.loading}>Continue with wallet</Button>\n </LoginItemContainer>\n})\n\nexport const LoginGuestItem = React.memo(function (props: LoginItemContainerProps) {\n return <LoginItemContainer {...props} className={`LoginGuestItem ${props.className || ''}`}>\n <img alt=\"guest\" src={guest} width=\"318\" height=\"318\" />\n <h2>Play as guest</h2>\n <p>Your information will be locally stored and your experience limited.</p>\n <Button primary size=\"huge\" loading={props.loading && !props.active} disabled={props.loading}>Continue as guest</Button>\n </LoginItemContainer>\n})","import React, { useCallback, useMemo, useState } from 'react'\nimport { LoginState } from '@dcl/kernel-interface'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { connect } from 'react-redux'\nimport { connection } from 'decentraland-connect/dist/index'\nimport { Container } from '../common/Layout/Container'\nimport { StoreType } from '../../state/redux'\nimport { authenticate } from '../../kernel-loader'\nimport { EthWalletSelector } from './EthWalletSelector'\nimport { LoginGuestItem, LoginWalletItem } from './LoginItemContainer'\nimport { isElectron } from '../../integration/desktop'\nimport { disconnect } from '../../eth/provider'\nimport { isWindows } from '../../integration/browser'\nimport { track } from '../../utils/tracking'\nimport logo from '../../images/logo.png'\nimport './LoginContainer.css'\n\n\nexport const defaultAvailableProviders = []\n\nconst mapStateToProps = (state: StoreType): LoginContainerProps => {\n // test all connectors\n const enableProviders = new Set([ProviderType.INJECTED, ProviderType.FORTMATIC, ProviderType.WALLET_CONNECT])\n const availableProviders = connection.getAvailableProviders().filter((provider) => enableProviders.has(provider))\n return {\n availableProviders,\n stage: state.session.kernelState?.loginStatus,\n provider: state.session.connection?.providerType,\n kernelReady: state.kernel.ready,\n rendererReady: state.renderer.ready,\n isGuest: state.session.kernelState ? state.session.kernelState.isGuest : undefined,\n isWallet: state.session.kernelState ? !state.session.kernelState.isGuest && !!state.session.connection : undefined,\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n onLogin: (providerType: ProviderType | null) => {\n track('click_login_button', { provider_type: providerType || 'guest' })\n authenticate(providerType)\n },\n onCancelLogin: () => {\n track('click_cancel_login_button')\n disconnect()\n .then(() => window.location.reload())\n }\n})\n\nexport interface LoginContainerProps {\n stage?: LoginState\n provider?: ProviderType\n availableProviders?: ProviderType[]\n kernelReady: boolean\n rendererReady: boolean\n isGuest?: boolean\n isWallet?: boolean\n}\n\nexport interface LoginContainerDispatch {\n onLogin: (provider: ProviderType | null) => void\n onCancelLogin: () => void\n}\n\nexport const LoginContainer: React.FC<LoginContainerProps & LoginContainerDispatch> = ({ onLogin, onCancelLogin, stage, isWallet, isGuest, provider, kernelReady, availableProviders }) => {\n const [ showWalletSelector, setShowWalletSelector ] = useState(false)\n const handleOpenSelector = useCallback(\n () => {\n track('open_login_popup')\n setShowWalletSelector(true)\n },\n []\n )\n const handleCloseSelector = useCallback(() => setShowWalletSelector(false), [])\n\n const [ canceling, setCanceling ] = useState(false)\n const handleCancelLogin = useCallback(() => {\n if (onCancelLogin) {\n setCanceling(true)\n onCancelLogin()\n }\n }, [ onCancelLogin, setCanceling ])\n\n const handleGuestLogin = useCallback(() => onLogin && onLogin(null), [onLogin])\n const loading = useMemo(() => {\n return stage === LoginState.SIGNATURE_PENDING ||\n stage === LoginState.WAITING_PROFILE ||\n stage === LoginState.WAITING_RENDERER ||\n stage === LoginState.LOADING ||\n !kernelReady\n }, [stage, kernelReady])\n\n const providerInUse = useMemo(() => {\n if (stage === LoginState.AUTHENTICATING || stage === LoginState.SIGNATURE_PENDING) {\n return provider\n }\n\n return undefined\n }, [stage, provider])\n\n const desktopAvailable = useMemo(() => !isElectron() && isWindows(), [])\n\n if (stage === LoginState.COMPLETED) {\n return <React.Fragment />\n }\n\n return (\n <main className=\"LoginContainer\">\n {/* {stage === LoginState.CONNECT_ADVICE && <EthConnectAdvice onLogin={onLogin} />} */}\n {/* {stage === LoginState.SIGN_ADVICE && <EthSignAdvice />} */}\n <Container>\n <div className=\"LogoContainer\">\n <img alt=\"decentraland\" src={logo} height=\"40\" width=\"212\" />\n <p>Sign In or Create an Account</p>\n </div>\n <div>\n <LoginWalletItem loading={loading} active={isWallet} onClick={handleOpenSelector} provider={providerInUse} onCancelLogin={handleCancelLogin} canceling={canceling} />\n <LoginGuestItem loading={loading} active={isGuest} onClick={handleGuestLogin} />\n </div>\n <div style={{ visibility: desktopAvailable ? 'visible' : 'hidden' }}>\n <a className=\"DownloadDesktopApp\" href=\"https://decentraland.org/download/\" target=\"_blank\" rel=\"noreferrer noopener\">\n Want to play on windows? <span style={{ textDecoration: 'underline' }}>Download the desktop client</span>\n </a>\n </div>\n </Container>\n\n <EthWalletSelector\n open={showWalletSelector}\n loading={loading}\n availableProviders={availableProviders || defaultAvailableProviders}\n provider={providerInUse}\n onLogin={onLogin}\n canceling={canceling}\n onCancelLogin={handleCancelLogin}\n onClose={handleCloseSelector}\n />\n </main>\n )\n}\nexport default connect(mapStateToProps, mapDispatchToProps)(LoginContainer)\n","export default \"data:image/png;base64,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\"","import React from 'react'\n\nexport interface AudioProps {\n play: boolean\n track: string\n}\n\nexport class Audio extends React.Component<AudioProps> {\n private player: HTMLAudioElement | null = null\n\n componentDidMount() {\n this.updatePlayer()\n }\n\n componentDidUpdate() {\n this.updatePlayer()\n }\n\n updatePlayer() {\n if (!this.player) {\n return\n }\n !this.props.play ? this.player.pause() : this.player.play().catch((e) => {})\n }\n\n render() {\n return (\n <audio ref={(audio) => (this.player = audio)} autoPlay loop>\n <source src={this.props.track} type=\"audio/mpeg\" />\n </audio>\n )\n }\n}\n","import React, { useState, useRef, useMemo } from 'react'\nimport './Accordion.css'\n\nexport interface AccordionProps {\n title?: React.ReactNode\n children?: React.ReactNode\n open?: boolean\n}\n\nexport function Accordion(props: AccordionProps) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n const height = useMemo(() => {\n if (!ref.current || !open) {\n return 0\n }\n\n return ref.current.offsetHeight + 50\n }, [open])\n\n let className = 'eth-accordion'\n if (open) {\n className += ' eth-accordion-open'\n }\n\n return (\n <div className={className}>\n <div className=\"eth-accordion-title\" onClick={() => setOpen(!open)}>\n {props.title}\n </div>\n <div className=\"eth-accordion-description\" style={{ height: `${height}px` }}>\n <div ref={ref}>{props.children}</div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { Accordion } from '../common/Layout/Accordion'\nimport { Container, Content } from '../common/Layout/Container'\nimport './BeginnersGuide.css'\n\nexport const BeginnersGuide: React.FC<React.HTMLAttributes<HTMLDivElement>> = (props) => (\n <div className=\"eth-beginners-guide\">\n <Container>\n <Content>\n <h2>Beginner's Guide</h2>\n <Accordion\n title={\n <h3>\n What do I need to <b>play</b>?\n </h3>\n }\n >\n <p>A PC or Mac running Chrome or Firefox</p>\n <ul>\n <li>\n <p>Can I play on a mobile device?</p>\n <p>For the moment we don’t support mobile devices. But please stay tuned!</p>\n </li>\n <li>\n <p>Can I log in from multiple computers?</p>\n <p>\n Yes, you can run Decentraland from multiple computers as long as you have your digital wallet installed\n on each machine.\n </p>\n </li>\n <li>\n <p>Can I use a different browser?</p>\n <p>\n While it may be technically possible to use another browser, we recommend Chrome or Firefox to ensure\n optimal performance.\n </p>\n </li>\n </ul>\n </Accordion>\n <Accordion\n title={\n <h3>\n What is a <b>Wallet</b> and why do I need one?\n </h3>\n }\n >\n <p>\n If you want to fully enjoy the Decentraland experience, we recommend you get yourself a digital wallet.\n Digital wallets work as your personal account, keeping all your digital assets (such as names, collectibles,\n LANDs) and in-world progress safe.\n </p>\n <p>\n If you choose to experience Decentraland Explorer without a wallet, the information will only be stored\n locally: you will be able to walk around, customize your Avatar and chat with others in-world, but you won’t\n have the chance to receive daily rewards, participate in events or log in with a different device using the\n same Guest ID and Avatar.\n </p>\n <p>\n If this is the first time you’re hearing about digital wallets, we recommend reading{' '}\n <a href=\"https://docs.decentraland.org/examples/get-a-wallet/\" target=\"_blank\" rel=\"noreferrer\">\n Get a Wallet – Beginners Guide\n </a>\n .\n </p>\n </Accordion>\n <Accordion\n title={\n <h3>\n What is <b>MANA</b>?\n </h3>\n }\n >\n <p>\n MANA is Decentraland’s fungible, ERC20 cryptocurrency token. MANA is burned, or spent, in exchange for LAND\n parcels. For a current summary of critical stats like total and circulating supply, please visit our MANA\n Token Information transparency dashboard. See the{' '}\n <a href=\"https://docs.decentraland.org/decentraland/glossary/\" target=\"_blank\" rel=\"noreferrer\">\n Glossary\n </a>\n for more information.\n </p>\n </Accordion>\n <Accordion\n title={\n <h3>\n What is <b>LAND</b>?\n </h3>\n }\n >\n <p>\n LAND is a non-fungible digital asset maintained in an Ethereum smart contract. LAND is divided into parcels\n that are referenced using unique x,y cartesian coordinates. Each LAND token includes a record of its\n coordinates, its owner, and a reference to a content description file or parcel manifest that describes and\n encodes the content the owner wishes to serve on his or her land.\n </p>\n </Accordion>\n <Accordion\n title={\n <h3>\n What is the <b>Marketplace</b>?\n </h3>\n }\n >\n <p>The Marketplace is the go-to place to trade and manage all your Decentraland on-chain assets.</p>\n <p>\n Access the Marketplace at{' '}\n <a href=\"https://market.decentraland.org\" target=\"_blank\" rel=\"noreferrer\">\n market.decentraland.org\n </a>\n .\n </p>\n <p>The Marketplace allows you to:</p>\n <ul>\n <li>\n <p>\n Sell parcels and Estates of LAND, wearables and unique names. Set your own price in MANA and an\n expiration date for the offer.\n </p>\n </li>\n <li>\n <p>Buy parcels and Estates, wearables and unique names that are for sale.</p>\n </li>\n <li>\n <p>Transfer your parcels and Estates to another user.</p>\n </li>\n <li>\n <p>\n Explore the world through a map to see who owns what, what wearables exist and what names are claimed.\n </p>\n </li>\n </ul>\n </Accordion>\n </Content>\n </Container>\n </div>\n)\n","import React from 'react'\n\nexport const Reddit = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n d=\"M14,6.63157895 C14,6.95987493 13.9345794,7.22251172 13.7383178,7.48514851 C13.6074766,7.7477853 13.411215,7.9447629 13.1495327,8.07608129 C13.2149533,8.33871808 13.2149533,8.53569567 13.2149533,8.79833246 C13.2149533,9.58624283 12.953271,10.3741532 12.364486,11.0307452 C11.8411215,11.6873372 11.0560748,12.2782699 10.1401869,12.6722251 C9.22429907,13.0661803 8.17757009,13.2631579 7,13.2631579 C5.88785047,13.2631579 4.8411215,13.0661803 3.92523364,12.6722251 C2.94392523,12.2782699 2.22429907,11.7529964 1.70093458,11.0307452 C1.17757009,10.3741532 0.85046729,9.58624283 0.85046729,8.79833246 C0.85046729,8.53569567 0.85046729,8.33871808 0.91588785,8.07608129 C0.654205607,7.9447629 0.457943925,7.7477853 0.261682243,7.48514851 C0.130841121,7.22251172 0,6.95987493 0,6.63157895 C0,6.23762376 0.130841121,5.84366858 0.457943925,5.51537259 C0.785046729,5.1870766 1.11214953,5.05575821 1.57009346,5.05575821 C2.02803738,5.05575821 2.35514019,5.1870766 2.68224299,5.51537259 C3.79439252,4.72746222 5.1682243,4.33350703 6.6728972,4.26784784 L7.58878505,0.196977592 C7.58878505,0.131318395 7.65420561,0.0656591975 7.71962617,0.0656591975 C7.78504673,0 7.85046729,0 7.91588785,0 L10.7943925,0.656591975 C10.8598131,0.459614382 11.0560748,0.328295987 11.1869159,0.196977592 C11.3831776,0.0656591975 11.5794393,0 11.7757009,0 C12.1028037,0 12.364486,0.131318395 12.6261682,0.328295987 C12.8224299,0.52527358 12.953271,0.853569567 12.953271,1.18186555 C12.953271,1.51016154 12.8224299,1.77279833 12.6261682,2.03543512 C12.4299065,2.29807191 12.1028037,2.36373111 11.7757009,2.36373111 C11.4485981,2.36373111 11.1869159,2.23241271 10.9252336,2.03543512 C10.728972,1.83845753 10.5981308,1.51016154 10.5981308,1.18186555 L7.98130841,0.590932777 L7.19626168,4.26784784 C8.76635514,4.33350703 10.0747664,4.72746222 11.2523364,5.51537259 C11.5794393,5.1870766 11.9065421,5.05575821 12.364486,5.05575821 C12.8224299,5.05575821 13.1495327,5.1870766 13.4766355,5.51537259 C13.8691589,5.84366858 14,6.23762376 14,6.63157895 Z M3.3364486,8.20739969 C3.3364486,8.53569567 3.46728972,8.79833246 3.6635514,9.06096925 C3.85981308,9.32360604 4.18691589,9.38926524 4.51401869,9.38926524 C4.8411215,9.38926524 5.10280374,9.25794685 5.36448598,9.06096925 C5.56074766,8.86399166 5.69158879,8.53569567 5.69158879,8.20739969 C5.69158879,7.8791037 5.56074766,7.61646691 5.36448598,7.35383012 C5.1682243,7.15685253 4.8411215,7.02553413 4.51401869,7.02553413 C4.18691589,7.02553413 3.92523364,7.15685253 3.72897196,7.35383012 C3.53271028,7.55080771 3.3364486,7.8791037 3.3364486,8.20739969 Z M9.61682243,10.965086 C9.68224299,10.8994268 9.68224299,10.8337676 9.68224299,10.7681084 C9.68224299,10.7024492 9.68224299,10.63679 9.61682243,10.5711308 C9.55140187,10.5054716 9.48598131,10.5054716 9.42056075,10.5054716 C9.35514019,10.5054716 9.28971963,10.5054716 9.22429907,10.5711308 C9.02803738,10.7681084 8.70093458,10.965086 8.30841121,11.0307452 C7.91588785,11.1620636 7.45794393,11.1620636 7.06542056,11.1620636 C6.6728972,11.1620636 6.21495327,11.0964044 5.82242991,11.0307452 C5.42990654,10.8994268 5.10280374,10.7681084 4.90654206,10.5711308 C4.8411215,10.5054716 4.77570093,10.5054716 4.71028037,10.5054716 C4.64485981,10.5054716 4.57943925,10.5054716 4.51401869,10.5711308 C4.44859813,10.63679 4.44859813,10.7024492 4.44859813,10.7681084 C4.44859813,10.8337676 4.44859813,10.8994268 4.51401869,10.965086 C4.71028037,11.1620636 5.03738318,11.3590412 5.42990654,11.4903596 C5.82242991,11.621678 6.14953271,11.6873372 6.41121495,11.7529964 C6.6728972,11.7529964 6.86915888,11.8186555 7.13084112,11.8186555 C7.39252336,11.8186555 7.58878505,11.8186555 7.85046729,11.7529964 C8.11214953,11.7529964 8.43925234,11.621678 8.8317757,11.4903596 C9.09345794,11.3590412 9.42056075,11.2277228 9.61682243,10.965086 Z M9.61682243,9.38926524 C9.94392523,9.38926524 10.2056075,9.25794685 10.4672897,9.06096925 C10.728972,8.86399166 10.7943925,8.53569567 10.7943925,8.20739969 C10.7943925,7.8791037 10.6635514,7.61646691 10.4672897,7.41948932 C10.271028,7.22251172 9.94392523,7.09119333 9.68224299,7.09119333 C9.35514019,7.09119333 9.09345794,7.22251172 8.8317757,7.41948932 C8.63551402,7.61646691 8.5046729,7.9447629 8.5046729,8.27305888 C8.5046729,8.60135487 8.63551402,8.86399166 8.8317757,9.12662845 C9.02803738,9.25794685 9.28971963,9.38926524 9.61682243,9.38926524 Z\"\n transform=\"translate(4 4)\"\n />\n </svg>\n )\n})\n","import React from 'react'\n\nexport const Github = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n d=\"M7.88857838,9.78302833 C7.88857838,9.92796208 7.88857838,10.0728958 7.88857838,10.2902965 C7.88857838,11.159899 7.88857838,11.9570346 7.88857838,12.8266371 C7.88857838,12.9715709 7.88857838,13.0440378 7.73831975,12.9715709 C6.6865093,12.9715709 5.63469884,12.9715709 4.58288839,12.9715709 C4.43262976,12.9715709 4.43262976,12.899104 4.43262976,12.8266371 C4.43262976,12.3918359 4.43262976,11.8845677 4.43262976,11.4497665 C4.43262976,11.3772996 4.50775908,11.3048327 4.35750044,11.3048327 C4.35750044,11.3048327 4.28237112,11.3048327 4.28237112,11.3048327 C4.2072418,11.3048327 4.2072418,11.3048327 4.13211249,11.3048327 C3.68133658,11.3772996 3.30568999,11.3772996 2.85491408,11.3048327 C2.1036209,11.0874321 1.57771568,10.7250977 1.2771984,10.000429 C1.05181045,9.5656277 0.751293179,9.13082644 0.450775908,8.76849206 C0.37564659,8.6235583 0.150258636,8.6235583 0.0751293179,8.47862455 C0,8.40615767 0,8.40615767 0,8.3336908 C0,8.26122392 0.0751293179,8.26122392 0.150258636,8.26122392 C0.826422497,8.18875704 1.35232772,8.55109143 1.65284499,9.05835956 C1.95336227,9.5656277 2.40413817,9.92796208 2.9300434,10.0728958 C3.38081931,10.1453627 3.7564659,10.1453627 4.2072418,10.000429 C4.28237112,10.000429 4.35750044,9.92796208 4.35750044,9.78302833 C4.35750044,9.34822707 4.50775908,8.98589269 4.80827635,8.6235583 C4.65801771,8.6235583 4.58288839,8.55109143 4.50775908,8.55109143 C3.7564659,8.47862455 3.08030204,8.18875704 2.55439681,7.75395579 C1.87823295,7.24668765 1.50258636,6.59448576 1.35232772,5.869817 C1.2771984,5.14514823 1.2771984,4.49294634 1.35232772,3.76827758 C1.42745704,3.26100944 1.57771568,2.75374131 1.95336227,2.31894005 C2.1036209,2.17400629 2.1036209,2.10153942 2.02849158,1.88413879 C1.80310363,1.30440378 1.87823295,0.724668765 2.1036209,0.144933753 C2.1036209,0 2.17875022,0 2.32900886,0 C2.77978476,0.144933753 3.15543135,0.362334382 3.45594862,0.652201888 C3.60620726,0.797135641 3.7564659,0.942069394 3.90672453,1.15947002 C3.98185385,1.2319369 3.98185385,1.2319369 4.05698317,1.15947002 C4.28237112,0.942069394 4.58288839,0.942069394 4.88340567,0.869602518 C5.70982816,0.724668765 6.61137998,0.724668765 7.43780247,0.869602518 C7.73831975,0.942069394 8.03883702,0.942069394 8.26422497,1.15947002 C8.41448361,1.2319369 8.41448361,1.2319369 8.48961293,1.08700315 C8.71500088,0.797135641 9.01551815,0.507268135 9.31603542,0.289867506 C9.54142338,0.144933753 9.76681133,0.0724668765 9.99219928,0 C10.0673286,0 10.1424579,0 10.2175872,0.0724668765 C10.4429752,0.724668765 10.5181045,1.30440378 10.2175872,1.95660567 C10.2175872,2.02907254 10.1424579,2.10153942 10.2175872,2.17400629 C10.6683631,2.53634068 10.8186218,3.04360881 10.8937511,3.55087695 C10.9688804,4.20307884 11.0440097,4.85528073 10.9688804,5.50748261 C10.8186218,6.59448576 10.2175872,7.46408828 9.24090611,7.97135641 C9.16577679,7.97135641 9.16577679,7.97135641 9.16577679,8.04382329 C9.16577679,8.04382329 9.09064747,8.04382329 9.09064747,8.11629017 C9.01551815,8.11629017 8.94038883,8.18875704 8.86525952,8.18875704 C8.86525952,8.18875704 8.7901302,8.18875704 8.7901302,8.18875704 C8.71500088,8.18875704 8.71500088,8.18875704 8.71500088,8.26122392 C8.71500088,8.26122392 8.63987156,8.26122392 8.63987156,8.26122392 C8.48961293,8.26122392 8.33935429,8.3336908 8.26422497,8.40615767 C8.26422497,8.40615767 8.18909565,8.40615767 8.18909565,8.40615767 C8.11396634,8.40615767 7.9637077,8.40615767 7.88857838,8.47862455 C7.81344906,8.47862455 7.73831975,8.47862455 7.66319043,8.47862455 C7.58806111,8.47862455 7.51293179,8.47862455 7.51293179,8.47862455 C7.43780247,8.47862455 7.51293179,8.55109143 7.51293179,8.55109143 C7.51293179,8.6235583 7.51293179,8.6235583 7.58806111,8.6235583 C7.58806111,8.69602518 7.66319043,8.69602518 7.66319043,8.76849206 C7.66319043,8.84095893 7.66319043,8.91342581 7.73831975,8.98589269 C7.73831975,8.98589269 7.73831975,9.05835956 7.73831975,9.05835956 C7.73831975,9.13082644 7.73831975,9.27576019 7.81344906,9.34822707 C7.81344906,9.34822707 7.81344906,9.42069394 7.81344906,9.42069394 C7.81344906,9.49316082 7.81344906,9.49316082 7.81344906,9.5656277 C7.88857838,9.71056145 7.88857838,9.71056145 7.88857838,9.78302833 Z\"\n transform=\"translate(5 5)\"\n />\n </svg>\n )\n})\n","import React from 'react'\n\nexport const Twitter = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n d=\"M13,1.82494005 C12.5384615,2.058753 12,2.2146283 11.4615385,2.2146283 C12,1.9028777 12.4615385,1.35731415 12.6153846,0.73381295 C12.0769231,1.04556355 11.5384615,1.2793765 10.9230769,1.35731415 C10.4615385,0.8117506 9.76923077,0.5 9,0.5 C7.53846154,0.5 6.30769231,1.7470024 6.30769231,3.22781775 C6.30769231,3.4616307 6.30769231,3.617506 6.38461538,3.85131894 C4.15384615,3.77338129 2.15384615,2.6822542 0.846153846,1.04556355 C0.615384615,1.4352518 0.461538462,1.9028777 0.461538462,2.44844125 C0.461538462,3.38369305 0.923076923,4.24100719 1.69230769,4.70863309 C1.23076923,4.70863309 0.846153846,4.55275779 0.461538462,4.39688249 C0.461538462,5.72182254 1.38461538,6.81294964 2.61538462,7.04676259 C2.38461538,7.12470024 2.15384615,7.12470024 1.92307692,7.12470024 C1.76923077,7.12470024 1.61538462,7.12470024 1.38461538,7.04676259 C1.69230769,8.13788969 2.69230769,8.91726619 3.92307692,8.91726619 C3,9.61870504 1.84615385,10.0863309 0.615384615,10.0863309 C0.384615385,10.0863309 0.153846154,10.0863309 0,10.0863309 C1.15384615,10.8657074 2.61538462,11.3333333 4.07692308,11.3333333 C9,11.3333333 11.6923077,7.20263789 11.6923077,3.617506 C11.6923077,3.4616307 11.6923077,3.38369305 11.6923077,3.22781775 C12.1538462,2.91606715 12.6153846,2.3705036 13,1.82494005 Z\"\n transform=\"translate(5 5)\"\n />\n </svg>\n )\n})\n","import React from 'react'\n\nexport const Discord = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n d=\"M5.0677998,1.36000287e-05 C4.8822277,0.000761200029 3.34704426,0.0443327002 1.72750578,1.24773952 C1.72750578,1.24773952 0,4.35487581 0,8.18178463 C0,8.18178463 1.00769549,9.90927375 3.65893934,9.99324995 C3.65893934,9.99324995 4.10281088,9.46539815 4.46270818,9.00952847 C2.93914264,8.55365809 2.3633099,7.60596477 2.3633099,7.60596477 C2.3633099,7.60596477 2.4833011,7.68992641 2.69923962,7.80989241 C2.71123608,7.80989241 2.7231967,7.82187053 2.7471899,7.83386741 C2.78317956,7.85786019 2.8191807,7.86985875 2.8551705,7.89385167 C3.15508494,8.06180379 3.45498972,8.19378319 3.7309111,8.30175301 C4.22277072,8.50569507 4.8106212,8.68562615 5.49442614,8.81758875 C6.39416918,8.98554115 7.44984898,9.04551491 8.60152062,8.82957625 C9.16535998,8.72160713 9.74123178,8.56566883 10.3410607,8.31374051 C10.7609405,8.15778485 11.2287902,7.92987255 11.7206494,7.60596477 C11.7206494,7.60596477 11.120831,8.57768909 9.54927932,9.02156259 C9.9091769,9.46543553 10.3410607,9.98126231 10.3410607,9.98126231 C12.9923042,9.89728709 14,8.16978775 14,8.18178463 C14,4.35487581 12.2724939,1.24773952 12.2724939,1.24773952 C10.5569839,-0.0358942998 8.91342886,0.000106700029 8.91342886,0.000106700029 L8.74551048,0.192046422 C10.7849293,0.803871902 11.7326367,1.70363743 11.7326367,1.70363743 C10.4849923,1.031829 9.26136876,0.695901242 8.121694,0.563938922 C7.25794034,0.467966262 6.43014414,0.491987742 5.69835336,0.587960262 C5.62637418,0.587960262 5.5664056,0.599939082 5.49442614,0.611935262 C5.07454598,0.659921942 4.0548452,0.803868682 2.77121124,1.36770776 C2.32733802,1.55965289 2.0633893,1.70363743 2.0633893,1.70363743 C2.0633893,1.70363743 3.04710882,0.755875562 5.20649276,0.144049942 L5.08652452,0.000106700029 C5.08652452,0.000106700029 5.08017132,-3.60999713e-05 5.0677998,8.70002873e-06 L5.0677998,1.36000287e-05 Z M4.76262892,4.42685219 C5.44643372,4.42685219 5.99828264,5.01466585 5.98628674,5.74645663 C5.98628674,6.47824839 5.44643372,7.06610783 4.76262892,7.06610783 C4.09082044,7.06610783 3.5389711,6.47824839 3.5389711,5.74645663 C3.5389711,5.01466585 4.07882384,4.42685219 4.76262892,4.42685219 Z M9.14137784,4.42685219 C9.81318618,4.42685219 10.3650357,5.01466585 10.3650357,5.74645663 C10.3650357,6.47824839 9.8251832,7.06610783 9.14137784,7.06610783 C8.46956964,7.06610783 7.91772002,6.47824839 7.91772002,5.74645663 C7.91772002,5.01466585 8.45757276,4.42685219 9.14137784,4.42685219 Z\"\n transform=\"translate(4 6)\"\n />\n </svg>\n )\n})\n","import React from 'react'\nimport { Container } from './Container'\nimport { Reddit } from '../Icon/Reddit'\nimport { Github } from '../Icon/Github'\nimport { Twitter } from '../Icon/Twitter'\nimport { Discord } from '../Icon/Discord'\n\nimport './BigFooter.css'\nimport { injectVersions } from '../../../utils/rolloutVersions'\n\nconst year = Math.max(new Date().getFullYear(), 2020)\n\nexport const BigFooter = () => {\n let versions = injectVersions({})\n\n return (\n <footer className=\"big-footer\">\n <Container>\n <div>\n <div>\n <h4>NEED SUPPORT?</h4>\n </div>\n <div>\n <a className=\"big-footer-button\" href=\"https://decentraland.org/discord\" target=\"about:blank\">\n <Discord /> Join our Discord\n </a>\n </div>\n </div>\n <div>\n <div>\n <h4>FOLLOW US</h4>\n </div>\n <div>\n <a className=\"big-footer-icon\" href=\"https://www.reddit.com/r/decentraland/\" target=\"about:blank\">\n <Reddit />\n </a>\n <a className=\"big-footer-icon\" href=\"http://github.com/decentraland\" target=\"about:blank\">\n <Github />\n </a>\n <a className=\"big-footer-icon\" href=\"https://twitter.com/decentraland\" target=\"about:blank\">\n <Twitter />\n </a>\n </div>\n </div>\n </Container>\n <Container>\n <p className=\"copyright\" title={'Versions: ' + JSON.stringify(versions, null, 2)}>\n © {year} Decentraland\n </p>\n </Container>\n </footer>\n )\n}\n","import React from 'react'\nimport { BannerContainerProps } from './BannerContainer.types'\n\nimport './banners.css'\n\nexport const BannerNotSupported: React.FC<Pick<BannerContainerProps, 'onClose'>> = (props) => (\n <div id=\"banner-notsupported\" className=\"banner-container\">\n <div className=\"banner-close-button\" onClick={props.onClose} />\n <div className=\"banner-text\">\n Your browser is not among the recommended choices for an optimal experience in Decentraland.\n We suggest you use one based on\n {' '}\n <a href=\"https://www.google.com/chrome/\" rel=\"noreferrer noopener\" target=\"_blank\">Chromium</a>\n {' or '}\n <a href=\"https://www.mozilla.org/en-US/firefox/new/\" rel=\"noreferrer noopener\" target=\"_blank\">Firefox</a>.\n </div>\n </div>\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { setBanner } from '../../state/actions'\nimport { BannerType, StoreType } from '../../state/redux'\nimport { BannerContainerProps } from './BannerContainer.types'\nimport { BannerNotSupported } from './BannerNotSupported'\n\nconst mapStateToProps = (state: StoreType): Pick<BannerContainerProps, 'banner'> => {\n return {\n banner: state.banner.banner\n }\n}\n\nconst mapDispatchToProps = (dispatch: (a: any) => void, state: StoreType): Pick<BannerContainerProps, 'onClose'> => {\n return {\n onClose: () => dispatch(setBanner(null))\n }\n}\n\nexport const BannerContainer: React.FC<BannerContainerProps> = (props) => {\n switch (props.banner) {\n case BannerType.NOT_RECOMMENDED:\n return <BannerNotSupported onClose={props.onClose}/>\n default:\n return null\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BannerContainer)\n","import React from 'react'\nimport './LoadingRender.css'\n\nexport const LoadingRender = React.memo(function () {\n return <div className=\"LoadingRender\">\n <img alt=\"loading\" src={process.env.PUBLIC_URL + '/images/loading.gif'} width=\"150\" height=\"150\" />\n <p>We are downloading the latest version of Decentraland. You'll be up and running in a few seconds!</p>\n </div>\n})","import React from 'react'\nimport { Discord } from '../Icon/Discord'\nimport './JoinDiscord.css'\n\nexport const JoinDiscord = React.memo(function () {\n return <a className=\"JoinDiscord\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://decentraland.org/discord/\">\n <Discord />\n <span>JOIN DISCORD</span>\n </a>\n})","import React from 'react'\nimport { Navbar as Base } from'decentraland-ui/dist/components/Navbar/Navbar'\nimport { JoinDiscord } from '../Button/JoinDiscord'\nimport Menu from 'semantic-ui-react/dist/commonjs/collections/Menu'\n\nexport type NavbarProps = {\n rightMenu?: React.ReactNode\n}\n\nexport const Navbar = React.memo(function (props: NavbarProps) {\n return <Base\n isFullscreen\n leftMenu={<>\n <Menu.Item href=\"https://decentraland.org\">\n HOME\n </Menu.Item>\n <Menu.Item active href=\"https://play.decentraland.org\" onClick={(e) => e.preventDefault()}>\n PLAY\n </Menu.Item>\n <Menu.Item href=\"https://market.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.marketplace}\n </Menu.Item>\n <Menu.Item href=\"https://builder.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.builder}\n </Menu.Item>\n <Menu.Item href=\"https://docs.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.docs}\n </Menu.Item>\n <Menu.Item href=\"https://events.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.events}\n </Menu.Item>\n <Menu.Item href=\"https://dao.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.dao}\n </Menu.Item>\n <Menu.Item href=\"https://decentraland.org/blog\">\n {Base.defaultProps.i18n?.menu?.blog}\n </Menu.Item>\n </>}\n rightMenu={props.rightMenu ?? <JoinDiscord />}\n />\n})","import React from 'react'\nimport { BannerContainerProps } from './BannerContainer.types'\n\nimport './banners.css'\n\nexport const BannerStream: React.FC<Pick<BannerContainerProps, 'onClose'>> = (props) => (\n <div id=\"banner-stream\" className=\"banner-container\">\n <div className=\"banner-close-button\" onClick={props.onClose} />\n <div className=\"banner-text\">\n You are viewing a stream because Decentraland is only available on desktop.\n <br />\n <a href=\"https://decentraland.org\" rel=\"noreferrer noopener\" target=\"_blank\">Learn more</a>\n </div>\n </div>\n)\n","import React, { useState } from 'react'\nimport { connect } from 'react-redux'\nimport { useMobileResize } from '../../integration/mobile'\nimport { StoreType } from '../../state/redux'\nimport { FeatureFlags, getFeatureVariant } from '../../state/selectors'\nimport { BannerStream } from '../banners/BannerStream'\nimport './StreamContainer.css'\n\nfunction mapStateToProps(state: StoreType): StreamContainerProps {\n return {\n src: getFeatureVariant(state, FeatureFlags.Stream),\n }\n}\n\nexport interface StreamContainerProps {\n src?: string\n}\n\nconst StreamContainer: React.FC<StreamContainerProps> = (props: StreamContainerProps) => {\n const [ banner, setBanner ] = useState(true)\n const size = useMobileResize()\n\n if (!props.src || size.height === 0 || size.width === 0) {\n return null\n }\n\n return <div className=\"StreamContainer\">\n {banner && <BannerStream onClose={() => setBanner(false)} />}\n <iframe title=\"Decentraland Stream\" src={props.src} width={size.width} height={size.height} allowFullScreen />\n </div>\n}\n\nexport default connect(mapStateToProps)(StreamContainer)\n","import isEmail from 'validator/lib/isEmail'\n\nexport async function subscribe(email: string) {\n const res = await fetch(\"https://decentraland.org/subscribe\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n email: email,\n interest: 'mobile-reminder'\n }),\n })\n\n if (res.status >= 400) {\n throw new Error(`Subscription failed`)\n }\n\n return res.json()\n}\n\nexport { isEmail }","import React, { useCallback, useState } from 'react'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport { useMobileResize } from '../../integration/mobile'\nimport { Navbar } from './Layout/Navbar'\nimport { isEmail, subscribe } from '../../integration/mail'\nimport './MobileContainer.css'\n\ntype MobileContainerState = {\n sending: boolean,\n sent: boolean,\n error: null | Error\n}\n\nexport default React.memo(function MobileContainer() {\n useMobileResize()\n const [state, setState] = useState<MobileContainerState>({ sending: false, sent: false, error: null })\n const handleSubmit = useCallback(async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n const data = new FormData(e.currentTarget)\n const email = data.get('email') as string\n if (isEmail(email)) {\n setState({ sending: true, sent: false, error: null })\n try {\n await subscribe(email)\n setState({ sending: false, sent: true, error: null })\n } catch (error) {\n setState({ sending: false, sent: false, error: error as Error })\n }\n }\n }, [])\n\n return <div className=\"MobileContainer\">\n <Navbar rightMenu={false} />\n <main className=\"MobileHero\">\n <div>\n <h1>Play Decentraland on Desktop</h1>\n <p>Decentraland is not available on mobile.</p>\n <p>Visit <strong>dcl.gg/play</strong> in your desktop browser to access Decentraland.</p>\n </div>\n </main>\n\n <section>\n <h2>Get a reminder</h2>\n <p>Get an email reminder to check out Decentraland on desktop.</p>\n <form className=\"reminder\" onSubmit={handleSubmit} style={{ opacity: state.sent ? .5 : 1 }}>\n <input type=\"email\" name=\"email\" placeholder=\"email@domain.com\" required className={state.error ? 'error' : ''} />\n <Button type=\"submit\" small primary loading={state.sending} disabled={state.sent}>SEND REMINDER</Button>\n </form>\n {state.error && <p className=\"error\">{state.error.message}</p>}\n {state.sent && <p className=\"message\">Awesome! You will receive an email soon!</p>}\n </section>\n\n <section>\n <div className=\"grid\">\n <div className=\"item\">\n <h2>What is Decentraland?</h2>\n <p>Decentraland is the first ever virtual world owned by its users.</p>\n </div>\n <div className=\"item\">\n <svg width=\"480\" height=\"276\" style={{ backgroundImage: `url('https://img.youtube.com/vi/thkDaebUaDQ/mqdefault.jpg')` }} />\n <iframe width=\"480\" height=\"276\" src=\"https://www.youtube.com/embed/thkDaebUaDQ\" title=\"YouTube video player\" frameBorder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowFullScreen></iframe>\n </div>\n </div>\n </section>\n\n <section>\n <h2>Take Part</h2>\n <div className=\"grid padded\">\n <div className=\"item\">\n <a className=\"card\" href=\"https://market.decentraland.org\" target=\"_blank\" rel=\"noreferrer\">\n <svg width=\"328\" height=\"200\" style={{ backgroundImage: `url('https://decentraland.org/images/jacket.jpg')` }} />\n <span className='card-content'>\n <h3>Buy and sell on the Marketplace</h3>\n <p>Decentraland is the first ever virtual world owned by its users.</p>\n <Button as=\"span\" primary>Marketplace</Button>\n </span>\n </a>\n </div>\n <div className=\"item\">\n <a className=\"card\" href=\"https://events.decentraland.org\" target=\"_blank\" rel=\"noreferrer\">\n <svg width=\"328\" height=\"200\" style={{ backgroundImage: `url('https://decentraland.org/blog/images/static/images/2020-recap-banner-500487ea620de46b53e5cb0783f231a0.png')` }} />\n <span className='card-content'>\n <h3>Find an event</h3>\n <p>Decentraland is the first ever virtual world owned by its users.</p>\n <Button as=\"span\" primary>Events</Button>\n </span>\n </a>\n </div>\n <div className=\"item\">\n <a className=\"card\" href=\"https://governance.decentraland.org\" target=\"_blank\" rel=\"noreferrer\">\n <svg width=\"328\" height=\"200\" style={{ backgroundImage: `url('https://decentraland.org/blog/images/static/images/governance-517ddb1597c85fa0efd1f5cfe765fe45.jpg')` }} />\n <span className='card-content'>\n <h3>Contribute to Decentraland</h3>\n <p>Decentraland is the first ever virtual world owned by its users.</p>\n <Button as=\"span\" primary>DAO</Button>\n </span>\n </a>\n </div>\n <div className=\"item\">\n <a className=\"card\" href=\"https://dcl.gg/discord\" target=\"_blank\" rel=\"noreferrer\">\n <svg width=\"328\" height=\"200\" className=\"discord\" />\n <span className='card-content'>\n <h3>Join us on Discord</h3>\n <p>Decentraland is the first ever virtual world owned by its users.</p>\n <Button as=\"span\" primary>JOIN DISCORD</Button>\n </span>\n </a>\n </div>\n </div>\n </section>\n\n </div>\n})","import React, { useMemo } from 'react'\nimport { connect } from 'react-redux'\nimport { useMobileMediaQuery } from 'decentraland-ui/dist/components/Media'\nimport ErrorContainer from './errors/ErrorContainer'\nimport LoginContainer from './auth/LoginContainer'\nimport { Audio } from './common/Audio'\nimport { StoreType } from '../state/redux'\nimport { isElectron } from '../integration/desktop'\nimport { BeginnersGuide } from './auth/BeginnersGuide'\nimport { BigFooter } from './common/Layout/BigFooter'\nimport BannerContainer from './banners/BannerContainer'\nimport { LoadingRender } from './common/Loading/LoadingRender'\nimport { Navbar } from './common/Layout/Navbar'\nimport { FeatureFlags, getFeatureVariant } from '../state/selectors'\nimport StreamContainer from './common/StreamContainer'\nimport { isMobile } from '../integration/browser'\nimport MobileContainer from './common/MobileContainer'\nimport './App.css'\n\nfunction mapStateToProps(state: StoreType): AppProps {\n return {\n hasStream: !!getFeatureVariant(state, FeatureFlags.Stream),\n hasBanner: !!state.banner.banner,\n sessionReady: !!state.session?.ready,\n rendererReady: !!state.renderer?.ready,\n error: !!state.error.error,\n sound: true // TODO: sound must be true after the first click\n }\n}\n\nexport interface AppProps {\n hasStream: boolean\n hasBanner: boolean\n sessionReady: boolean\n rendererReady: boolean\n error: boolean\n sound: boolean\n}\n\nconst App: React.FC<AppProps> = (props) => {\n const mobile = useMemo(() => isMobile(), [])\n const small = useMobileMediaQuery()\n\n if (props.hasStream && (small || mobile)) {\n return <StreamContainer />\n }\n\n if (small || mobile) {\n return <MobileContainer />\n }\n\n if (props.error) {\n return <ErrorContainer />\n }\n\n if (props.rendererReady) {\n return <React.Fragment />\n }\n\n if (props.sessionReady) {\n return <LoadingRender />\n }\n\n return (\n <div className={`WebsiteApp ${props.hasBanner ? 'withBanner' : ''}`}>\n {!isElectron() && props.sound && <Audio track={`${process.env.PUBLIC_URL}/tone4.mp3`} play />}\n <BannerContainer />\n {!isElectron() && <Navbar /> }\n <LoginContainer />\n {!isElectron() && <BeginnersGuide /> }\n {!isElectron() && <BigFooter /> }\n </div>\n )\n}\n\nexport default connect(mapStateToProps)(App)\n","import * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport { Provider } from 'react-redux'\nimport 'semantic-ui-css/semantic.min.css'\nimport 'balloon-css/balloon.min.css'\nimport 'decentraland-ui/dist/themes/base-theme.css'\nimport 'decentraland-ui/dist/themes/alternative/light-theme.css'\n\nimport { configureRollbar, configureSegment } from './integration/analytics'\nimport { store } from './state/redux'\nimport { configureKernel, initializeKernel } from './integration/kernel'\nimport { initializeBrowserRecommendation } from './integration/browser'\nimport { initializeDesktopApp } from './integration/desktop'\nimport { initializeFeatureFlags } from './integration/featureFlags'\nimport App from './components/App'\n\nconfigureSegment()\nconfigureRollbar()\nconfigureKernel(store)\n\nReactDOM.render(\n <React.StrictMode>\n <Provider store={store}>\n <App />\n </Provider>\n </React.StrictMode>,\n document.getElementById('root')!,\n () => {\n initializeKernel()\n initializeBrowserRecommendation()\n initializeFeatureFlags()\n initializeDesktopApp()\n }\n)\n","import { AnyAction } from 'redux'\nimport { connection } from 'decentraland-connect'\nimport { KernelResult, KernelError, LoginState, KernelAccountState } from '@dcl/kernel-interface'\nimport {\n SET_BANNER,\n SET_DOWNLOAD_PROGRESS,\n SET_DOWNLOAD_NEW_VERSION,\n SET_DOWNLOAD_READY,\n SET_KERNEL_ACCOUNT_STATE,\n SET_KERNEL_ERROR,\n SET_KERNEL_LOADED,\n SET_RENDERER_LOADING,\n SET_RENDERER_READY,\n SET_RENDERER_VISIBLE,\n SET_FEATURE_FLAGS\n} from './actions'\nimport {\n KernelState,\n SessionState,\n RendererState,\n ErrorState,\n BannerState,\n DownloadState,\n DownloadCurrentState,\n FeatureFlagsState\n} from './redux'\nimport { v4 } from 'uuid'\nimport { errorToString } from '../utils/errorToString'\nimport { isElectron } from '../integration/desktop'\nimport { defaultFeatureFlagsState } from './types'\n\nexport function kernelReducer(state: KernelState | undefined, action: AnyAction): KernelState {\n if (action.type === SET_KERNEL_LOADED) {\n return { ...state, ready: true, kernel: action.payload as KernelResult }\n }\n return (\n state || {\n ready: false,\n kernel: null\n }\n )\n}\n\nconst defaultSession: SessionState = {\n sessionId: v4(),\n connection: null,\n kernelState: null,\n ready: false\n}\n\nexport function sessionReducer(state: SessionState | undefined, action: AnyAction): SessionState {\n if (!state) return defaultSession\n\n if (action.type === SET_KERNEL_ACCOUNT_STATE) {\n const kernelState = action.payload as KernelAccountState\n const ready =\n kernelState.loginStatus === LoginState.SIGN_UP ||\n kernelState.loginStatus === LoginState.WAITING_PROFILE ||\n kernelState.loginStatus === LoginState.COMPLETED\n\n return {\n ...state,\n connection: connection.getConnectionData() || null,\n kernelState,\n ready\n }\n }\n\n return state\n}\n\nexport function rendererReducer(state: RendererState | undefined, action: AnyAction): RendererState {\n if (state && action.type === SET_RENDERER_READY) {\n return { ...state, ready: action.payload.ready }\n }\n if (state && action.type === SET_RENDERER_VISIBLE) {\n return { ...state, visible: action.payload.visible }\n } else if (state && action.type === SET_RENDERER_LOADING) {\n return { ...state, loading: action.payload }\n }\n return (\n state || {\n ready: false,\n version: 'latest',\n visible: false,\n loading: null\n }\n )\n}\n\nexport function errorReducer(state: ErrorState | undefined, action: AnyAction): ErrorState {\n if (action.type === SET_KERNEL_ERROR && !state?.error) {\n const payload: KernelError = action.payload\n\n if (!payload) {\n return { error: null }\n }\n\n return {\n error: {\n details: errorToString(payload.error),\n type: payload.code as any\n }\n }\n }\n\n return state || { error: null }\n}\n\nexport function bannerReducer(state: BannerState | undefined, action: AnyAction): BannerState {\n if (action.type === SET_BANNER) {\n return { banner: action.payload.banner }\n }\n\n return state || { banner: null }\n}\n\nexport function downloadReducer(state: DownloadState | undefined, action: AnyAction): DownloadState {\n const defaultDownload: DownloadState = {\n progress: 0,\n currentState: DownloadCurrentState.NONE,\n authCompleted: false,\n ready: false\n }\n\n if (!isElectron()) {\n return state || defaultDownload\n }\n\n state = state || defaultDownload\n\n if (action.type === SET_DOWNLOAD_PROGRESS) {\n state = { ...state, progress: action.payload.progress, currentState: DownloadCurrentState.DOWNLOADING }\n } else if (action.type === SET_DOWNLOAD_READY) {\n state = { ...state, progress: action.payload.progress, currentState: DownloadCurrentState.READY }\n } else if (action.type === SET_DOWNLOAD_NEW_VERSION) {\n state = { ...state, progress: action.payload.progress, currentState: DownloadCurrentState.NEW_VERSION }\n }\n\n if (action.type === SET_KERNEL_ACCOUNT_STATE) {\n if (action.payload.loginStatus === LoginState.WAITING_RENDERER) {\n state = { ...state, authCompleted: true }\n }\n }\n\n if (state.authCompleted && state.currentState === DownloadCurrentState.READY) {\n const ipcRenderer = (window as any).electron.ipcRenderer\n ipcRenderer.send('executeProcess')\n state = { ...state, currentState: DownloadCurrentState.EXECUTED, ready: true }\n }\n\n return state\n}\n\nexport function featureFlagsReducer(\n state: FeatureFlagsState = defaultFeatureFlagsState,\n action: AnyAction\n): FeatureFlagsState {\n if (action.type === SET_FEATURE_FLAGS) {\n const result: FeatureFlagsState = action.payload\n return {\n ...state,\n flags: {\n ...state.flags,\n ...result.flags\n },\n variants: {\n ...state.variants,\n ...result.variants\n }\n }\n }\n\n return state\n}\n","import { combineReducers, createStore } from 'redux'\nimport { KernelAccountState, KernelResult, KernelLoadingProgress } from '@dcl/kernel-interface'\nimport { FeatureFlagsResult } from '@dcl/feature-flags'\nimport { kernelReducer, sessionReducer, rendererReducer, errorReducer, bannerReducer, downloadReducer, featureFlagsReducer } from './reducers'\nimport { composeWithDevTools } from 'redux-devtools-extension'\nimport { ConnectionData } from 'decentraland-connect/dist/types'\n\nexport type KernelState = {\n ready: boolean\n kernel: KernelResult | null\n}\n\nexport type RendererState = {\n ready: boolean\n visible: boolean\n version: string\n loading: KernelLoadingProgress | null\n}\n\nexport type SessionState = {\n // It is important that this ID is autogenerated in every user session (reload)\n // and it _never_ changes during the session\n sessionId: string\n kernelState: KernelAccountState | null\n connection: ConnectionData | null\n ready: boolean\n}\n\nexport type ErrorState = {\n error: {\n type: string | ErrorType\n details: string\n } | null\n}\n\nexport enum ErrorType {\n LOADING = 'loading',\n FATAL = 'fatal',\n COMMS = 'comms',\n NEW_LOGIN = 'newlogin',\n NOT_MOBILE = 'nomobile',\n NOT_SUPPORTED = 'notsupported',\n NET_MISMATCH = 'networkmismatch',\n AVATAR_ERROR = 'avatarerror',\n METAMASK_LOCKED = 'METAMASK_LOCKED'\n}\n\nexport type BannerState = {\n banner: BannerType | null\n}\n\nexport enum BannerType {\n NOT_RECOMMENDED = 'notrecommended',\n}\n\nexport enum DownloadCurrentState {\n NONE = 'none',\n NEW_VERSION = 'new_version',\n DOWNLOADING = 'downloading',\n READY = 'ready',\n EXECUTED = 'executed'\n}\n\nexport type DownloadState = {\n currentState: DownloadCurrentState\n progress: number\n authCompleted: boolean\n ready: boolean\n}\n\nexport type FeatureFlagsState = FeatureFlagsResult\n\nexport type StoreType = {\n kernel: KernelState\n renderer: RendererState\n session: SessionState\n error: ErrorState\n banner: BannerState\n download: DownloadState\n featureFlags: FeatureFlagsState\n}\n\nconst reducers = combineReducers<StoreType>({\n kernel: kernelReducer,\n session: sessionReducer,\n renderer: rendererReducer,\n error: errorReducer,\n banner: bannerReducer,\n download: downloadReducer,\n featureFlags: featureFlagsReducer,\n})\n\nconst middleware: typeof composeWithDevTools =\n process.env.NODE_ENV !== 'production' ? composeWithDevTools : (x: any) => x\n\nexport const store = createStore(reducers, {}, middleware())\n","import { trackConnectWallet } from 'decentraland-dapps/dist/modules/analytics/utils'\nimport { disconnect, getEthereumProvider, restoreConnection } from '../eth/provider'\nimport { internalTrackEvent, identifyUser, trackError, disableAnalytics } from '../integration/analytics'\nimport { injectKernel } from './injector'\nimport {\n setKernelAccountState,\n setKernelError,\n setRendererLoading,\n setKernelLoaded,\n setRendererReady\n} from '../state/actions'\nimport { ErrorType, store } from '../state/redux'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { FeatureFlagsResult, fetchFlags } from '@dcl/feature-flags'\nimport { resolveUrlFromUrn } from '@dcl/urn-resolver'\nimport { defaultWebsiteErrorTracker, track } from '../utils/tracking'\nimport { injectVersions } from '../utils/rolloutVersions'\nimport { KernelResult } from '@dcl/kernel-interface'\nimport { ENV, NETWORK } from '../integration/queryParamsConfig'\nimport { RequestManager } from 'eth-connect'\nimport { errorToString } from '../utils/errorToString'\nimport { isElectron, launchDesktopApp } from '../integration/desktop'\nimport { setAsRecentlyLoggedIn } from '../integration/browser'\n\n// this function exists because decentraland-connect seems to return\n// invalid or cached values in chainId, ignoring network changes in the\n// real provider.\nasync function getChainIdFromProvider(provider: any) {\n const rm = new RequestManager(provider)\n return parseInt(await rm.net_version(), 10)\n}\n\nfunction getWantedChainId() {\n let chainId = 1 // mainnet\n\n if (NETWORK === 'ropsten') {\n chainId = 3\n }\n\n return chainId\n}\n\nexport async function authenticate(providerType: ProviderType | null) {\n try {\n const wantedChainId = getWantedChainId()\n\n const { provider, chainId: providerChainId, account } = await getEthereumProvider(providerType, wantedChainId)\n\n if (providerChainId !== wantedChainId) {\n store.dispatch(\n setKernelError({\n error: new Error(\n `Network mismatch NETWORK url param is not equal to the provided by Ethereum Provider (wanted: ${wantedChainId} actual: ${providerChainId}, E01)`\n ),\n code: ErrorType.NET_MISMATCH\n })\n )\n return\n }\n\n {\n const providerChainId = await getChainIdFromProvider(provider)\n if (providerChainId !== wantedChainId) {\n store.dispatch(\n setKernelError({\n error: new Error(\n `Network mismatch NETWORK url param is not equal to the provided by Ethereum Provider (wanted: ${wantedChainId} actual: ${providerChainId}, E02)`\n ),\n code: ErrorType.NET_MISMATCH\n })\n )\n return\n }\n }\n\n const kernel = store.getState().kernel.kernel\n\n if (!kernel) throw new Error('Kernel did not load yet')\n\n setAsRecentlyLoggedIn()\n\n kernel.authenticate(provider, providerType == null /* isGuest */)\n\n // Track that the users wallet has connected.\n // Only when the user has not connected as guest.\n if (providerType && account) {\n trackConnectWallet({ providerType, address: account })\n }\n } catch (err) {\n if (\n err &&\n typeof err === 'object' &&\n ['Fortmatic: User denied account access.', 'The user rejected the request.'].includes(err.message)\n ) {\n return\n }\n\n if (\n err &&\n typeof err === 'object' &&\n typeof err.message == 'string' &&\n (err.message.includes('Already processing eth_requestAccounts.') || err.message.includes('Please wait.'))\n ) {\n // https://github.com/decentraland/explorer-website/issues/46\n store.dispatch(\n setKernelError({\n error: new Error('Metamask is locked, please open the extension before continuing.'),\n code: ErrorType.METAMASK_LOCKED\n })\n )\n return\n }\n\n // If something went wrong, disconnect to prevent future errors next reload\n disconnect().catch(defaultWebsiteErrorTracker)\n\n defaultWebsiteErrorTracker(err)\n\n store.dispatch(\n setKernelError({\n error: err\n })\n )\n }\n}\n\ntype RolloutRecord = {\n version: string\n percentage: number\n prefix: string\n}\n\ndeclare var globalThis: {\n KERNEL_BASE_URL?: string\n RENDERER_BASE_URL?: string\n ROLLOUTS?: Record<string, RolloutRecord>\n}\n\nglobalThis.KERNEL_BASE_URL = process.env.REACT_APP_KERNEL_BASE_URL\nglobalThis.RENDERER_BASE_URL = process.env.REACT_APP_RENDERER_BASE_URL\n\nasync function resolveBaseUrl(urn: string): Promise<string> {\n if (urn.startsWith('urn:')) {\n const t = await resolveUrlFromUrn(urn)\n if (t) {\n return (t + '/').replace(/(\\/)+$/, '/')\n }\n throw new Error('Cannot resolve content for URN ' + urn)\n }\n return (new URL(`${urn}`, global.location.toString()).toString() + '/').replace(/(\\/)+$/, '/')\n}\n\nfunction cdnFromRollout(rollout: RolloutRecord): string {\n return cdnFromPrefixVersion(rollout.prefix, rollout.version)\n}\n\nfunction cdnFromPrefixVersion(prefix: string, version: string): string {\n return `https://cdn.decentraland.org/${prefix}/${version}`\n}\n\nasync function getVersions(flags: FeatureFlagsResult) {\n const qs = new URLSearchParams(document.location.search)\n\n // 1. load from ROLLOUTS + CDN\n if (globalThis.ROLLOUTS && globalThis.ROLLOUTS['@dcl/kernel']) {\n globalThis.KERNEL_BASE_URL = cdnFromRollout(globalThis.ROLLOUTS['@dcl/kernel'])\n }\n if (globalThis.ROLLOUTS && globalThis.ROLLOUTS['@dcl/unity-renderer']) {\n globalThis.RENDERER_BASE_URL = cdnFromRollout(globalThis.ROLLOUTS['@dcl/unity-renderer'])\n }\n\n // 2. load from URN/URL PARAM\n if (qs.has('renderer')) {\n globalThis.RENDERER_BASE_URL = qs.get('renderer')!\n }\n if (qs.has('kernel-urn')) {\n globalThis.KERNEL_BASE_URL = qs.get('kernel-urn')!\n }\n\n // 3. load hot-branch\n if (qs.has('renderer-branch')) {\n globalThis.RENDERER_BASE_URL = `https://renderer-artifacts.decentraland.org/branch/${qs.get('renderer-branch')!}`\n }\n if (qs.has('kernel-branch')) {\n globalThis.KERNEL_BASE_URL = `https://sdk-team-cdn.decentraland.org/@dcl/kernel/branch/${qs.get('kernel-branch')!}`\n }\n\n // 4. specific cdn versions\n if (qs.has('renderer-version')) {\n globalThis.RENDERER_BASE_URL = cdnFromPrefixVersion('@dcl/unity-renderer', qs.get('renderer-version')!)\n }\n if (qs.has('kernel-version')) {\n globalThis.KERNEL_BASE_URL = cdnFromPrefixVersion('@dcl/kernel', qs.get('kernel-version')!)\n }\n\n // default fallback\n if (!globalThis.KERNEL_BASE_URL) {\n if (flags.variants['explorer-rollout-kernel-version']) {\n const version = flags.variants['explorer-rollout-kernel-version'].name\n globalThis.KERNEL_BASE_URL = `urn:decentraland:off-chain:kernel-cdn:${version}`\n }\n }\n\n if (!globalThis.RENDERER_BASE_URL) {\n if (flags.variants['explorer-rollout-unity-renderer-version']) {\n const version = flags.variants['explorer-rollout-unity-renderer-version'].name\n globalThis.RENDERER_BASE_URL = `urn:decentraland:off-chain:unity-renderer-cdn:${version}`\n }\n }\n}\n\nasync function initKernel() {\n const container = document.getElementById('gameContainer') as HTMLDivElement\n\n const flags = await fetchFlags({ applicationName: 'explorer' })\n\n await getVersions(flags)\n\n const kernel = await injectKernel({\n kernelOptions: {\n baseUrl: await resolveBaseUrl(globalThis.KERNEL_BASE_URL || `urn:decentraland:off-chain:kernel-cdn:latest`),\n configurations: {}\n },\n rendererOptions: {\n container,\n baseUrl: await resolveBaseUrl(\n globalThis.RENDERER_BASE_URL || `urn:decentraland:off-chain:unity-renderer-cdn:latest`\n )\n }\n })\n\n kernel.on('trackingEvent', ({ eventName, eventData }) => {\n internalTrackEvent(eventName, { ...eventData, context: eventData.context || 'kernel' })\n })\n\n kernel.on('openUrl', ({ url }) => {\n const newWindow = window.open(url, '_blank', 'noopener,noreferrer')\n if (newWindow != null) newWindow.opener = null\n })\n\n let isGuest = true\n let lastIdentity: string | null = null\n let email: string | undefined = undefined\n\n function identify() {\n if (lastIdentity) {\n identifyUser(lastIdentity, isGuest, email)\n }\n }\n\n kernel.on('accountState', (account) => {\n if (account.identity) {\n isGuest = !!account.isGuest\n lastIdentity = account.identity.address\n identify()\n }\n\n store.dispatch(setKernelAccountState(account))\n })\n\n kernel.on('signUp', (data) => {\n email = data.email\n identify()\n })\n\n // all errors are also sent as trackingEvent\n kernel.on('error', (error) => {\n store.dispatch(setKernelError(error))\n\n // TODO: move this into a saga for setKernelError\n trackError(error.error, { context: 'kernel', ...(error.extra || {}) })\n\n // trackError only sends information to rollbar, we must get statistical information of errors in segment\n // via this track() function\n track('explorer_kernel_error', {\n // this string concatenation exists on purpose, it is a safe way to do (error).toString in case (error) is nullish\n error: errorToString(error)\n })\n\n // since setKernelError(error) produces an unrecoverable black screen of death, we disable analytics\n disableAnalytics()\n })\n\n kernel.on('rendererVisible', (event) => {\n store.dispatch(setRendererReady(event.visible))\n\n // TODO: move this into a saga for setRendererReady\n // if the kernel and renderer decides to load, we cleanup the error window\n if (event.visible) {\n track('enable_renderer', {})\n store.dispatch(setKernelError(null))\n }\n })\n\n kernel.on('loadingProgress', (event) => {\n store.dispatch(setRendererLoading(event))\n })\n\n kernel.on('logout', () => {\n disconnect().catch(defaultWebsiteErrorTracker)\n })\n\n return kernel\n}\n\nasync function initLogin(kernel: KernelResult) {\n if (!isElectron()) {\n const provider = await restoreConnection()\n if (provider && provider.account) {\n const providerChainId = await getChainIdFromProvider(provider.provider)\n\n // BUG OF decentraland-connect:\n // provider.chainId DOES NOT reflect the selected chain in the real provider\n const storedSession = await kernel.hasStoredSession(provider.account, providerChainId /* provider.chainId */)\n\n if (storedSession) {\n track('automatic_relogin', { provider_type: provider.providerType })\n authenticate(provider.providerType).catch(defaultWebsiteErrorTracker)\n }\n }\n }\n}\n\nexport function startKernel() {\n if (NETWORK && NETWORK !== 'mainnet' && NETWORK !== 'ropsten') {\n store.dispatch(\n setKernelError({\n error: new Error(`Invalid NETWORK url param, valid options are 'ropsten' and 'mainnet'`),\n code: ErrorType.FATAL\n })\n )\n return\n }\n\n if (ENV) {\n store.dispatch(\n setKernelError({\n error: new Error(\n `The \"ENV\" URL parameter is no longer supported. Please use NETWORK=ropsten in the cases where ENV=zone was used`\n ),\n code: ErrorType.FATAL\n })\n )\n return\n }\n\n if (isElectron()) {\n if ((window as any).require) {\n store.dispatch(\n setKernelError({\n error: new Error(\n `You're using an old version of Decentraland Desktop. Please update it from https://github.com/decentraland/explorer-desktop-launcher/releases`\n ),\n code: ErrorType.FATAL\n })\n )\n return\n }\n }\n\n track('initialize_versions', injectVersions({}))\n\n launchDesktopApp().then((launched) => {\n if (launched) {\n track('desktop_launched')\n }\n\n return initKernel()\n .then((kernel) => {\n store.dispatch(setKernelLoaded(kernel))\n if (!launched) {\n return initLogin(kernel)\n }\n })\n .catch((error) => {\n store.dispatch(setKernelError({ error }))\n defaultWebsiteErrorTracker(error)\n })\n })\n}\n","// this function injects rollout versions to records based on the rollouts\n// {a: asd} -> {a: asd, _site: 1.0.0, @dcl/unity-renderer: 6.0.0}\nexport function injectVersions<T extends Record<string, any>>(versions: T): T & Record<string, string> {\n var rolloutsInfo = (globalThis as any).ROLLOUTS || {}\n\n for (let component in rolloutsInfo) {\n if (component === '_site' || component.startsWith('@dcl')) {\n if (rolloutsInfo[component] && rolloutsInfo[component].version) {\n versions[component as keyof T] = rolloutsInfo[component].version\n }\n }\n }\n\n return versions\n}\n","import { action } from 'typesafe-actions'\nimport {\n IEthereumProvider,\n KernelAccountState,\n KernelError,\n KernelLoadingProgress,\n KernelResult\n} from '@dcl/kernel-interface'\nimport { BannerType } from './redux'\nimport { FeatureFlagsResult } from '@dcl/feature-flags'\n\nexport const KERNEL_AUTHENTICATE = '[Authenticate]'\nexport const KERNEL_LOGOUT_REQUEST = '[Logout]'\nexport const SET_KERNEL_ACCOUNT_STATE = 'Set kernel account state'\nexport const SET_KERNEL_ERROR = 'Set kernel error'\nexport const SET_KERNEL_LOADED = 'Set kernel loaded'\nexport const SET_BANNER = 'Set banenr'\n\nexport const SET_RENDERER_LOADING = 'Set renderer loading'\nexport const SET_RENDERER_READY = 'Set renderer ready'\nexport const SET_RENDERER_VISIBLE = 'Set renderer visible'\n\nexport const SET_DOWNLOAD_PROGRESS = '[DownloadProgress]'\nexport const SET_DOWNLOAD_READY = '[DownloadReady]'\nexport const SET_DOWNLOAD_NEW_VERSION = '[DownloadNewVersion]'\n\nexport const SET_FEATURE_FLAGS = 'Set feature flags'\n\nexport const setKernelAccountState = (accountState: KernelAccountState) =>\n action(SET_KERNEL_ACCOUNT_STATE, accountState)\nexport const setKernelError = (error: KernelError | null) => action(SET_KERNEL_ERROR, error)\nexport const setKernelLoaded = (kernel: KernelResult) => action(SET_KERNEL_LOADED, kernel)\nexport const setRendererLoading = (progressEvent: KernelLoadingProgress) => action(SET_RENDERER_LOADING, progressEvent)\nexport const setRendererReady = (ready: boolean) => action(SET_RENDERER_READY, { ready })\nexport const setRendererVisible = (visible: boolean) => action(SET_RENDERER_VISIBLE, { visible })\nexport const setBanner = (banner: BannerType | null) => action(SET_BANNER, { banner })\n\nexport const setDownloadProgress = (progress: number) => action(SET_DOWNLOAD_PROGRESS, { progress })\nexport const setDownloadReady = () => action(SET_DOWNLOAD_READY, { })\nexport const setDownloadNewVersion = () => action(SET_DOWNLOAD_NEW_VERSION, { })\n\nexport const setFeatureFlags = (result: FeatureFlagsResult) => action(SET_FEATURE_FLAGS, result)\n\nexport const authenticate = (provider: IEthereumProvider, isGuest: boolean) =>\n action(KERNEL_AUTHENTICATE, { provider, isGuest })\n\nexport const logout = (options: Partial<{reload: boolean }> = {}) => action(KERNEL_LOGOUT_REQUEST, options)","import { setDownloadNewVersion, setDownloadProgress, setDownloadReady, setKernelError } from '../state/actions'\nimport { store } from '../state/redux'\nimport { callOnce } from '../utils/callOnce'\nimport { getCurrentPosition, hasRecentlyLoggedIn, isMobile } from './browser'\n\nexport const isElectron = callOnce((): boolean => {\n // Renderer process\n if (\n typeof window !== 'undefined' &&\n typeof window.process === 'object' &&\n (window.process as any).type === 'renderer'\n ) {\n return true\n }\n\n // Main process\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!(process.versions as any).electron) {\n return true\n }\n\n // Detect the user agent when the `nodeIntegration` option is set to true\n if (\n typeof navigator === 'object' &&\n typeof navigator.userAgent === 'string' &&\n navigator.userAgent.indexOf('Electron') >= 0\n ) {\n return true\n }\n\n return false\n})\n\nexport const initializeDesktopApp = callOnce(() => {\n if (isElectron() && (window as any).electron) {\n const ipcRenderer = (window as any).electron.ipcRenderer\n\n ipcRenderer.on('downloadState', (event: any, payload: any): any => {\n switch (payload.type) {\n case 'ERROR':\n store.dispatch(\n setKernelError({\n error: new Error(payload.message || 'Unknown launcher error')\n })\n )\n break\n case 'NEW_VERSION':\n store.dispatch(setDownloadNewVersion())\n event.sender.send('download')\n break\n case 'READY':\n store.dispatch(setDownloadReady())\n break\n case 'PROGRESS':\n store.dispatch(setDownloadProgress(payload.progress))\n break\n }\n })\n\n ipcRenderer.send('checkVersion')\n console.log('Electron found')\n }\n})\n\n/**\n * Try to launch the desktop version using the custom protocol `dcl://position=x,y&realm=zzz`\n * and return a boolean that represents if a loss of focus was detected on the current window\n * (assuming it was due to the interaction generated by the desktop version)\n */\nexport async function launchDesktopApp() {\n // prevent launch for desktop and mobile\n if (isElectron() || isMobile()) {\n return false\n }\n\n // prevent launch if the user logged in into the web version recently\n if (hasRecentlyLoggedIn()) {\n return false\n }\n\n // build custom protocol target using current url `position` and `realm`\n const data = getCurrentPosition()\n let customProtocolParams: string [] = []\n if (data.position) {\n customProtocolParams.push(`position=${data.position}`)\n }\n\n if (data.realm) {\n customProtocolParams.push(`realm=${data.realm}`)\n }\n\n const customProtocolTarget = `dcl://${customProtocolParams.join('&')}`\n\n // assume that the desktop version is installed only if\n // we detect a loss of focus on window\n let installed = false\n const isInstalled = () => { installed = true }\n window.addEventListener('blur', isInstalled);\n\n // inject an iframe that open the desktop version\n // NOTE: this can be also achieved with\n // ```js\n // window.location.href = customProtocolTarget\n // ```\n // but in safari redirects into an invalid url if the desktop\n // client is not installed\n const iframe = document.createElement('iframe')\n iframe.setAttribute('style', 'display: none')\n iframe.src = customProtocolTarget\n document.body.appendChild(iframe)\n\n // wait half of a second to detect the loss of focus because\n // the time it takes for the `blur` event to be fired varies\n // depending on the browser\n return new Promise<boolean>((resolve) => {\n setTimeout(() => {\n window.removeEventListener('blur', isInstalled)\n document.body.removeChild(iframe)\n resolve(installed)\n }, 500);\n })\n}\n","import { TrackingEvents } from '../trackingEvents'\nimport { AnalyticsOptions, internalTrackEvent, trackError } from '../integration/analytics'\nimport { errorToString } from './errorToString'\nimport { callOnce } from './callOnce'\nimport { isRecommendedBrowser } from '../integration/browser'\nimport { RENDERER_TYPE } from '../integration/queryParamsConfig'\n\n// declare var ethereum: Record<string, boolean>\nconst ethereum = (window as any).ethereum\nconst rollouts = (window as any).ROLLOUTS\n\nconst overriddenEventOptions: Partial<Record<keyof TrackingEvents, AnalyticsOptions>> = {\n click_login_button: {\n integrations: {\n 'All': true,\n 'Google AdWords New': true\n }\n }\n}\n\nconst getWalletName = callOnce(() => {\n if (!ethereum) {\n return 'none'\n } else if (ethereum?.isMetaMask) {\n return 'metamask'\n } else if (ethereum?.isDapper) {\n return 'dapper'\n } else if (ethereum?.isCucumber) {\n return 'cucumber'\n } else if (ethereum?.isTrust) {\n return 'trust'\n } else if (ethereum?.isToshi) {\n return 'coinbase'\n } else if (ethereum?.isGoWallet) {\n return 'goWallet'\n } else if (ethereum?.isAlphaWallet) {\n return 'alphaWallet'\n } else if (ethereum?.isStatus) {\n return 'status'\n } else {\n return 'other'\n }\n})\n\nconst getWalletProps = callOnce(() => {\n if (!ethereum) {\n return ''\n }\n\n return Object.keys(ethereum)\n .filter((prop) => prop.startsWith('is') && typeof ethereum![prop] === 'boolean')\n .join(',')\n})\n\nconst getEnvironmentProperties = callOnce(() => {\n const properties: Record<string, string> = {\n rendererType: RENDERER_TYPE\n }\n\n if (rollouts) {\n for (const rollout of Object.keys(rollouts)) {\n const lib = rollouts[rollout]\n if (lib && lib.prefix && lib.version) {\n properties[lib.prefix || rollout] = lib.version\n }\n }\n }\n\n return properties\n})\n\n/**\n * The only function used by this react app to track its own events.\n * Please do not use internalTrackEvent directly, it is meant to be used by kernel\n * and this function adds relevant information and proper types.\n */\nexport function track<E extends keyof TrackingEvents>(event: E, properties?: TrackingEvents[E]) {\n const wallet = getWalletName()\n const walletProps = getWalletProps()\n const recommendedBrowser = isRecommendedBrowser()\n const environmentProperties = getEnvironmentProperties()\n internalTrackEvent(\n event,\n { wallet, walletProps, recommendedBrowser, ...properties, ...environmentProperties },\n overriddenEventOptions[event]\n )\n}\n\n\n/**\n * Default \"catch\" for promises and to print errors in the console.\n */\nexport function defaultWebsiteErrorTracker(error: any) {\n console.error(error)\n trackError(error, { context: 'explorer-website' })\n track('explorer_website_error', {\n // this string concatenation exists on purpose, it is a safe way to do (error).toString in case (error) is nullish\n error: errorToString(error)\n })\n}\n","import future from 'fp-future'\nimport { KernelOptions, KernelResult, IDecentralandKernel } from '@dcl/kernel-interface'\n\nexport async function injectKernel(options: KernelOptions): Promise<KernelResult> {\n const kernelUrl = new URL(`index.js`, options.kernelOptions.baseUrl).toString()\n\n await injectScript(kernelUrl)\n\n console.log('Kernel: ', kernelUrl)\n\n const DecentralandKernel: IDecentralandKernel = (globalThis as any).DecentralandKernel\n\n if (!DecentralandKernel) throw new Error('DecentralandKernel could not be loaded')\n\n return await DecentralandKernel.initKernel(options)\n}\n\nasync function injectScript(url: string) {\n const theFuture = future<Event>()\n const theScript = document.createElement('script')\n const persistMessage =\n 'If this error persists, please try emptying the cache of your browser and reloading this page.'\n theScript.src = url\n theScript.async = true\n theScript.type = 'application/javascript'\n theScript.crossOrigin = 'anonymous'\n theScript.addEventListener('load', theFuture.resolve)\n theScript.addEventListener('error', (e) =>\n theFuture.reject(e.error || new Error(`The script ${url} failed to load.\\n${persistMessage}`))\n )\n theScript.addEventListener('abort', () =>\n theFuture.reject(\n new Error(\n `Script loading aborted: ${url}.\\nThis may be caused because you manually stopped the loading or because of a network error.\\n${persistMessage}`\n )\n )\n )\n document.body.appendChild(theScript)\n return theFuture\n}\n","const qs = new URLSearchParams(document.location.search || '')\n\nexport const DEBUG_ANALYTICS = qs.has('DEBUG_ANALYTICS')\nexport const ENV = qs.get('ENV')\nexport const NETWORK = qs.get('NETWORK')\nexport const RENDERER_TYPE = qs.get('ws') ? 'native' : 'web'","import { detect } from \"detect-browser\"\nimport { setBanner } from \"../state/actions\"\nimport { BannerType, store } from \"../state/redux\"\nimport { callOnce } from \"../utils/callOnce\"\n\nexport const initializeBrowserRecommendation = callOnce(() => {\n if (!isRecommendedBrowser()) {\n store.dispatch(setBanner(BannerType.NOT_RECOMMENDED))\n }\n})\n\nexport const isMobile = callOnce(() => {\n if (/Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent)) {\n return true\n }\n\n if (/iPad|iPhone|iPod/.test(navigator.platform)) {\n return true\n }\n\n if (/Macintosh/i.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 1) {\n // iPad pro\n return true\n }\n\n return false\n})\n\nexport const isRecommendedBrowser = callOnce(() => {\n const detected = detect(navigator.userAgent)\n\n if (!detected) {\n return false\n }\n\n switch (detected.name) {\n case 'chrome':\n case 'chromium-webview':\n case 'edge-chromium':\n case 'firefox':\n return true\n\n default:\n return false\n }\n})\n\nconst BROWSER_LAST_SESSION_KEY = 'dcl-last-session-at'\nexport const BROWSER_LAST_SESSION_EXPIRATION = 1000 * 60 * 60 * 24 * 7 /* one week */\n\nexport const hasRecentlyLoggedIn = callOnce(() => {\n const lastLoginAt = Number(localStorage.getItem(BROWSER_LAST_SESSION_KEY))\n if (Number.isNaN(lastLoginAt)) {\n return false\n }\n\n return lastLoginAt + BROWSER_LAST_SESSION_EXPIRATION > Date.now()\n})\n\nexport function setAsRecentlyLoggedIn() {\n localStorage.setItem(BROWSER_LAST_SESSION_KEY, String(Date.now()))\n}\n\nexport function isWindows() {\n if ((navigator as any).userAgentData?.platform === 'Windows') {\n return true\n }\n\n if (/Windows/gi.test(navigator.userAgent)) {\n return true\n }\n\n if (navigator.platform === 'Win32' || navigator.platform === 'Win64') {\n return true\n }\n\n return false\n}\n\nexport type UserPosition = Partial<{\n realm: string,\n position: string,\n}>\n\nexport function getCurrentPosition() {\n const data: UserPosition = {}\n const qs = new URLSearchParams(globalThis.location.search || '')\n\n // inject realm\n if (qs.has('realm')) {\n data.realm = qs.get('realm')!\n }\n\n // inject position\n if (qs.has('position')) {\n data.position = qs.get('position')!\n }\n\n return data\n}\n","export function callOnce<T>(fun: () => T): () => T {\n let result: { value: T } | null = null\n return () => {\n if (!result) {\n result = { value: fun() }\n }\n\n return result.value\n }\n}","import { store } from '../state/redux'\nimport { getRequiredAnalyticsContext } from '../state/selectors'\nimport { errorToString } from '../utils/errorToString'\nimport { track } from '../utils/tracking'\nimport { getCurrentPosition } from './browser'\nimport { isElectron } from './desktop'\nimport { DEBUG_ANALYTICS, RENDERER_TYPE } from './queryParamsConfig'\n\nlet analyticsDisabled = false\n\nenum AnalyticsAccount {\n PRD = '1plAT9a2wOOgbPCrTaU8rgGUMzgUTJtU',\n DEV = 'a4h4BC4dL1v7FhIQKKuPHEdZIiNRDVhc'\n}\n\nenum RollbarAccount {\n Web = '44963d3f89db4e5cbf552faba06c6ec0',\n Desktop = '73e7ead7a15d4de3b26cecdda99b63c2'\n}\n\nconst authFlags = {\n isAuthenticated: false,\n isGuest: false,\n afterFatalError: false\n}\n\nexport type AnalyticsOptions = { integrations?: Record<string, boolean> }\n\nexport const defaultAnalyticsOptions: AnalyticsOptions = {\n integrations: {\n 'All': true,\n 'Google AdWords New': false\n }\n}\n\n// TODO fill with segment keys and integrate identity server\nexport function configureSegment() {\n // all decentraland.org domains are considered PRD\n if (globalThis.location.host.endsWith('.decentraland.org')) {\n return initialize(AnalyticsAccount.PRD)\n }\n\n return initialize(AnalyticsAccount.DEV)\n}\n\nfunction injectTrackingMetadata(payload: Record<string, any>): void {\n Object.assign(payload, getCurrentPosition())\n payload.dcl_is_authenticated = authFlags.isAuthenticated\n payload.dcl_is_guest = authFlags.isGuest\n payload.dcl_disabled_analytics = authFlags.afterFatalError\n payload.dcl_renderer_type = RENDERER_TYPE\n}\n\nexport function configureRollbar() {\n function rollbarTransformer(payload: Record<string, any>): void {\n injectTrackingMetadata(payload)\n }\n\n const Rollbar = (window as any).Rollbar\n const accessToken = isElectron() ? RollbarAccount.Desktop : RollbarAccount.Web\n\n if (Rollbar) {\n Rollbar.configure({\n accessToken,\n transform: rollbarTransformer\n })\n }\n}\n\n// once this function is called, no more errors will be tracked neither reported to rollbar\nexport function disableAnalytics() {\n track('disable_analytics', {})\n\n authFlags.afterFatalError = true\n analyticsDisabled = true\n\n if ((window as any).Rollbar) {\n ; (window as any).Rollbar.configure({ enabled: false })\n }\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS disableAnalytics')\n }\n}\n\nexport function trackError(error: string | Error, payload?: Record<string, any>) {\n if (analyticsDisabled) return\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS trackCriticalError ', error)\n }\n if (!(window as any).Rollbar) return\n\n if (typeof error === 'string') {\n ; (window as any).Rollbar.critical(errorToString(error), payload)\n } else if (error && error instanceof Error) {\n ; (window as any).Rollbar.critical(\n errorToString(error),\n Object.assign(error, payload, { fullErrorStack: error.toString() })\n )\n } else {\n ; (window as any).Rollbar.critical(errorToString(error), payload)\n }\n}\n\nexport function identifyUser(address: string, isGuest: boolean, email?: string) {\n authFlags.isGuest = isGuest\n authFlags.isAuthenticated = !!address\n if (window.analytics) {\n const userTraits = {\n sessionId: getRequiredAnalyticsContext(store.getState()).sessionId,\n email\n }\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS identifyUser', address, userTraits)\n }\n\n if (isGuest) {\n window.analytics.identify(userTraits)\n } else {\n window.analytics.identify(address, userTraits)\n }\n }\n}\n\nasync function initialize(segmentKey: string): Promise<void> {\n if (window.analytics.load) {\n // loading client for the first time\n window.analytics.load(segmentKey)\n window.analytics.page()\n window.analytics.ready(() => {\n window.analytics.timeout(1000)\n })\n }\n}\n\n// please use src/utils \"track\" function.\nexport function internalTrackEvent(\n eventName: string,\n eventData: Record<string, any>,\n options?: { integrations?: Record<string, boolean> }\n) {\n if (!window.analytics || analyticsDisabled) {\n return\n }\n\n const data = { ...eventData, ...getRequiredAnalyticsContext(store.getState()) }\n\n injectTrackingMetadata(data)\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS trackEvent', eventName, data, options)\n }\n\n window.analytics.track(eventName, data, options ?? defaultAnalyticsOptions)\n}\n"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e){function r(r){for(var n,a,c=r[0],i=r[1],l=r[2],p=0,f=[];p<c.length;p++)a=c[p],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&f.push(o[a][0]),o[a]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(s&&s(r);f.length;)f.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,c=1;c<t.length;c++){var i=t[c];0!==o[i]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,c=document.createElement("script");c.charset="utf-8",c.timeout=120,a.nc&&c.setAttribute("nonce",a.nc),c.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{3:"c9c4b5aa",4:"6bdec8c0",5:"4dad599c"}[e]+".chunk.js"}(e);var i=new Error;u=function(r){c.onerror=c.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;i.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",i.name="ChunkLoadError",i.type=n,i.request=u,t[1](i)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:c})}),12e4);c.onerror=c.onload=u,document.head.appendChild(c)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="https://cdn.decentraland.org/@dcl/explorer-website/0.1.0-2556982585.commit-73c5a3e/",a.oe=function(e){throw console.error(e),e};var c=this["webpackJsonp@dcl/explorer-website"]=this["webpackJsonp@dcl/explorer-website"]||[],i=c.push.bind(c);c.push=r,c=c.slice();for(var l=0;l<c.length;l++)r(c[l]);var s=i;t()}([]);
|
|
2
|
+
//# sourceMappingURL=runtime-main.9034dfbf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.3b4b502d.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({}[chunkId]||chunkId) + \".\" + {\"3\":\"a82ee5aa\",\"4\":\"83e1b6af\",\"5\":\"2005498b\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://cdn.decentraland.org/@dcl/explorer-website/0.1.0-2422667580.commit-acd3af5/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = this[\"webpackJsonp@dcl/explorer-website\"] = this[\"webpackJsonp@dcl/explorer-website\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["../webpack/bootstrap"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","this","oldJsonpFunction","slice"],"mappings":"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","file":"static/js/runtime-main.9034dfbf.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({}[chunkId]||chunkId) + \".\" + {\"3\":\"c9c4b5aa\",\"4\":\"6bdec8c0\",\"5\":\"4dad599c\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://cdn.decentraland.org/@dcl/explorer-website/0.1.0-2556982585.commit-73c5a3e/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = this[\"webpackJsonp@dcl/explorer-website\"] = this[\"webpackJsonp@dcl/explorer-website\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg width="292" height="80" viewBox="0 0 292 80" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g clip-path="url(#clip0)">
|
|
3
|
+
<g clip-path="url(#clip1)">
|
|
4
|
+
<path d="M61.7958 16.494C57.0736 14.2846 52.0244 12.6789 46.7456 11.7646C46.0973 12.9367 45.3399 14.5132 44.8177 15.7673C39.2062 14.9234 33.6463 14.9234 28.138 15.7673C27.6159 14.5132 26.8413 12.9367 26.1872 11.7646C20.9027 12.6789 15.8477 14.2905 11.1255 16.5057C1.60078 30.8988 -0.981215 44.9344 0.309785 58.7707C6.62708 63.4883 12.7493 66.3541 18.7682 68.2294C20.2543 66.1841 21.5797 64.0099 22.7215 61.7185C20.5469 60.8922 18.4641 59.8725 16.4961 58.6887C17.0182 58.3019 17.5289 57.8975 18.0223 57.4814C30.0257 63.0957 43.0677 63.0957 54.9277 57.4814C55.4269 57.8975 55.9375 58.3019 56.4539 58.6887C54.4801 59.8783 52.3916 60.898 50.217 61.7244C51.3588 64.0099 52.6785 66.19 54.1703 68.2352C60.195 66.3599 66.3229 63.4942 72.6402 58.7707C74.155 42.7309 70.0525 28.8242 61.7958 16.494ZM24.3568 50.2615C20.7535 50.2615 17.7985 46.8976 17.7985 42.8012C17.7985 38.7048 20.6904 35.3351 24.3568 35.3351C28.0233 35.3351 30.9782 38.6989 30.9151 42.8012C30.9208 46.8976 28.0233 50.2615 24.3568 50.2615ZM48.5932 50.2615C44.9899 50.2615 42.0349 46.8976 42.0349 42.8012C42.0349 38.7048 44.9267 35.3351 48.5932 35.3351C52.2596 35.3351 55.2146 38.6989 55.1515 42.8012C55.1515 46.8976 52.2596 50.2615 48.5932 50.2615Z" fill="white"/>
|
|
5
|
+
<path d="M98.0293 26.1707H113.693C117.469 26.1707 120.659 26.7743 123.276 27.9757C125.886 29.177 127.843 30.8531 129.14 32.998C130.436 35.1429 131.09 37.5984 131.09 40.3645C131.09 43.072 130.413 45.5275 129.059 47.7251C127.705 49.9286 125.645 51.6692 122.874 52.9526C120.103 54.236 116.671 54.8806 112.569 54.8806H98.0293V26.1707ZM112.408 47.5845C114.95 47.5845 116.907 46.934 118.272 45.6388C119.638 44.3378 120.321 42.568 120.321 40.3235C120.321 38.243 119.712 36.5845 118.496 35.3421C117.28 34.0997 115.438 33.4727 112.976 33.4727H108.076V47.5845H112.408Z" fill="white"/>
|
|
6
|
+
<path d="M154.541 54.8456C152.372 54.2713 150.415 53.4391 148.677 52.3432V45.5335C149.991 46.5707 151.752 47.4264 153.961 48.1003C156.17 48.7684 158.305 49.1024 160.37 49.1024C161.334 49.1024 162.063 48.9735 162.556 48.7156C163.05 48.4578 163.297 48.1472 163.297 47.7897C163.297 47.3795 163.165 47.0396 162.895 46.7641C162.625 46.4887 162.103 46.2601 161.329 46.0667L156.509 44.9591C153.749 44.3028 151.792 43.3944 150.628 42.2282C149.463 41.0678 148.883 39.5441 148.883 37.6571C148.883 36.0689 149.388 34.6918 150.41 33.5138C151.425 32.3359 152.871 31.4275 154.747 30.7887C156.624 30.1441 158.815 29.8218 161.334 29.8218C163.583 29.8218 165.643 30.0679 167.52 30.5602C169.396 31.0525 170.945 31.6795 172.179 32.4472V38.8878C170.916 38.1201 169.47 37.5165 167.818 37.0593C166.171 36.6081 164.479 36.3854 162.734 36.3854C160.215 36.3854 158.959 36.8249 158.959 37.6981C158.959 38.1084 159.154 38.4131 159.544 38.6182C159.934 38.8233 160.651 39.0343 161.69 39.257L165.706 39.9954C168.329 40.4584 170.285 41.273 171.57 42.4333C172.856 43.5937 173.498 45.3108 173.498 47.5846C173.498 50.0752 172.437 52.0502 170.308 53.5153C168.179 54.9804 165.161 55.7129 161.248 55.7129C158.947 55.7071 156.71 55.4199 154.541 54.8456Z" fill="white"/>
|
|
7
|
+
<path d="M182.978 53.9839C180.678 52.8352 178.939 51.2764 177.78 49.3073C176.621 47.3382 176.036 45.123 176.036 42.6616C176.036 40.2003 176.638 37.9968 177.843 36.057C179.048 34.1172 180.815 32.5935 183.145 31.4859C185.474 30.3783 188.257 29.8274 191.499 29.8274C195.515 29.8274 198.849 30.6889 201.5 32.4118V39.919C200.565 39.2626 199.474 38.7293 198.229 38.3191C196.984 37.9089 195.653 37.7037 194.23 37.7037C191.74 37.7037 189.795 38.1667 188.389 39.0985C186.983 40.0303 186.278 41.2434 186.278 42.7495C186.278 44.2263 186.96 45.4336 188.326 46.383C189.692 47.3265 191.671 47.8012 194.27 47.8012C195.607 47.8012 196.927 47.6019 198.229 47.2093C199.526 46.8108 200.645 46.3244 201.58 45.75V53.011C198.637 54.816 195.223 55.7185 191.338 55.7185C188.068 55.7068 185.279 55.1325 182.978 53.9839Z" fill="white"/>
|
|
8
|
+
<path d="M211.518 53.9841C209.2 52.8355 207.433 51.2649 206.216 49.2665C205 47.2681 204.386 45.0412 204.386 42.5798C204.386 40.1185 204.994 37.9208 206.216 35.9928C207.438 34.0647 209.194 32.5527 211.501 31.4568C213.801 30.3609 216.55 29.8159 219.734 29.8159C222.919 29.8159 225.667 30.3609 227.968 31.4568C230.269 32.5527 232.025 34.053 233.23 35.9693C234.435 37.8857 235.037 40.0833 235.037 42.574C235.037 45.0353 234.435 47.2623 233.23 49.2606C232.025 51.259 230.263 52.8296 227.945 53.9782C225.627 55.1269 222.89 55.7012 219.729 55.7012C216.567 55.7012 213.83 55.1327 211.518 53.9841ZM223.722 46.7055C224.698 45.7093 225.191 44.3907 225.191 42.7498C225.191 41.1089 224.703 39.802 223.722 38.835C222.747 37.8622 221.415 37.3758 219.729 37.3758C218.013 37.3758 216.67 37.8622 215.689 38.835C214.714 39.8079 214.226 41.1089 214.226 42.7498C214.226 44.3907 214.714 45.7093 215.689 46.7055C216.665 47.7018 218.013 48.2058 219.729 48.2058C221.415 48.1999 222.747 47.7018 223.722 46.7055Z" fill="white"/>
|
|
9
|
+
<path d="M259.17 31.3395V40.2004C258.149 39.5147 256.829 39.1748 255.194 39.1748C253.053 39.1748 251.401 39.8371 250.253 41.1615C249.1 42.486 248.526 44.5488 248.526 47.3383V54.8865H238.686V30.8883H248.326V38.5185C248.859 35.7289 249.726 33.672 250.919 32.3416C252.107 31.0172 253.644 30.355 255.515 30.355C256.932 30.355 258.149 30.6832 259.17 31.3395Z" fill="white"/>
|
|
10
|
+
<path d="M291.864 25.3503V54.8866H282.023V49.5127C281.191 51.5345 279.929 53.0758 278.231 54.1306C276.532 55.1797 274.432 55.7071 271.942 55.7071C269.716 55.7071 267.777 55.1562 266.118 54.0486C264.46 52.941 263.181 51.4232 262.28 49.4951C261.385 47.567 260.931 45.387 260.931 42.9491C260.903 40.435 261.379 38.1787 262.36 36.1803C263.336 34.1819 264.718 32.6231 266.497 31.5037C268.276 30.3844 270.307 29.8218 272.585 29.8218C277.273 29.8218 280.417 31.9022 282.023 36.0572V25.3503H291.864ZM280.555 46.5415C281.559 45.5452 282.058 44.2501 282.058 42.6678C282.058 41.1382 281.57 39.8899 280.595 38.9347C279.619 37.9795 278.282 37.4989 276.601 37.4989C274.943 37.4989 273.618 37.9853 272.625 38.9581C271.632 39.931 271.139 41.1909 271.139 42.7498C271.139 44.3087 271.632 45.5804 272.625 46.5649C273.618 47.5494 274.926 48.0417 276.561 48.0417C278.219 48.0359 279.55 47.5377 280.555 46.5415Z" fill="white"/>
|
|
11
|
+
<path d="M139.382 33.4432C142.091 33.4432 144.288 31.4281 144.288 28.9424C144.288 26.4567 142.091 24.4417 139.382 24.4417C136.672 24.4417 134.476 26.4567 134.476 28.9424C134.476 31.4281 136.672 33.4432 139.382 33.4432Z" fill="white"/>
|
|
12
|
+
<path d="M134.472 36.5435C137.478 37.8679 141.208 37.9265 144.283 36.5435V55.0154H134.472V36.5435Z" fill="white"/>
|
|
13
|
+
</g>
|
|
14
|
+
</g>
|
|
15
|
+
<defs>
|
|
16
|
+
<clipPath id="clip0">
|
|
17
|
+
<rect width="292" height="56.4706" fill="white" transform="translate(0 11.7646)"/>
|
|
18
|
+
</clipPath>
|
|
19
|
+
<clipPath id="clip1">
|
|
20
|
+
<rect width="292" height="56.4706" fill="white" transform="translate(0 11.7646)"/>
|
|
21
|
+
</clipPath>
|
|
22
|
+
</defs>
|
|
23
|
+
</svg>
|
|
Binary file
|