@dcl/explorer-website 0.1.0-4830623811.commit-a77fd9d → 0.1.0-4981095668.commit-0191aff
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 +39 -39
- package/index.html +1 -1
- package/package.json +3 -3
- package/static/css/{2.0a8325c0.chunk.css → 2.f04b2d7a.chunk.css} +2 -2
- package/static/css/{2.0a8325c0.chunk.css.map → 2.f04b2d7a.chunk.css.map} +1 -1
- package/static/css/{main.f444ba5c.chunk.css → main.6f70968d.chunk.css} +2 -2
- package/static/css/{main.f444ba5c.chunk.css.map → main.6f70968d.chunk.css.map} +1 -1
- package/static/js/{2.f066c455.chunk.js → 2.18baec83.chunk.js} +3 -3
- package/static/js/{2.f066c455.chunk.js.map → 2.18baec83.chunk.js.map} +1 -1
- package/static/js/{3.e60eab70.chunk.js → 3.49d59c49.chunk.js} +3 -3
- package/static/js/{3.e60eab70.chunk.js.map → 3.49d59c49.chunk.js.map} +1 -1
- package/static/js/{main.0d35944c.chunk.js → main.eb3c8b16.chunk.js} +2 -2
- package/static/js/main.eb3c8b16.chunk.js.map +1 -0
- package/static/js/{runtime-main.92e12155.js → runtime-main.fdaed11a.js} +2 -2
- package/static/js/{runtime-main.92e12155.js.map → runtime-main.fdaed11a.js.map} +1 -1
- package/static/js/main.0d35944c.chunk.js.map +0 -1
- /package/static/js/{2.f066c455.chunk.js.LICENSE.txt → 2.18baec83.chunk.js.LICENSE.txt} +0 -0
- /package/static/js/{3.e60eab70.chunk.js.LICENSE.txt → 3.49d59c49.chunk.js.LICENSE.txt} +0 -0
|
@@ -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":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,GACR,CACA,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,EAC9C,CACGA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,IAEtE,CAEA,OAAOD,CACR,CAGA,IAAIQ,EAAmB,CAAC,EAKpBhB,EAAkB,CACrB,EAAG,GAGAK,EAAkB,GAQtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,CAAC,GAUX,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,OACf,CAIAH,EAAoBM,EAAI,SAAuB/B,GAC9C,IAAIgC,EAAW,GAKXC,EAAqBtB,EAAgBX,GACzC,GAA0B,IAAvBiC,EAGF,GAAGA,EACFD,EAASpB,KAAKqB,EAAmB,QAC3B,CAEN,IAAIC,EAAU,IAAIC,SAAQ,SAASC,EAASC,GAC3CJ,EAAqBtB,EAAgBX,GAAW,CAACoC,EAASC,EAC3D,IACAL,EAASpB,KAAKqB,EAAmB,GAAKC,GAGtC,IACII,EADAC,EAASC,SAASC,cAAc,UAGpCF,EAAOG,QAAU,QACjBH,EAAOI,QAAU,IACblB,EAAoBmB,IACvBL,EAAOM,aAAa,QAASpB,EAAoBmB,IAElDL,EAAOO,IA1DV,SAAwB9C,GACvB,OAAOyB,EAAoBsB,EAAI,cAAgB,CAAC,EAAE/C,IAAUA,GAAW,IAAM,CAAC,EAAI,WAAW,EAAI,WAAW,EAAI,YAAYA,GAAW,WACxI,CAwDgBgD,CAAehD,GAG5B,IAAIiD,EAAQ,IAAIC,MAChBZ,EAAmB,SAAUa,GAE5BZ,EAAOa,QAAUb,EAAOc,OAAS,KACjCC,aAAaX,GACb,IAAIY,EAAQ5C,EAAgBX,GAC5B,GAAa,IAAVuD,EAAa,CACf,GAAGA,EAAO,CACT,IAAIC,EAAYL,IAAyB,SAAfA,EAAMM,KAAkB,UAAYN,EAAMM,MAChEC,EAAUP,GAASA,EAAMQ,QAAUR,EAAMQ,OAAOb,IACpDG,EAAMW,QAAU,iBAAmB5D,EAAU,cAAgBwD,EAAY,KAAOE,EAAU,IAC1FT,EAAMY,KAAO,iBACbZ,EAAMQ,KAAOD,EACbP,EAAMa,QAAUJ,EAChBH,EAAM,GAAGN,EACV,CACAtC,EAAgBX,QAAW+D,CAC5B,CACD,EACA,IAAIpB,EAAUqB,YAAW,WACxB1B,EAAiB,CAAEmB,KAAM,UAAWE,OAAQpB,GAC7C,GAAG,MACHA,EAAOa,QAAUb,EAAOc,OAASf,EACjCE,SAASyB,KAAKC,YAAY3B,EAC3B,CAED,OAAOJ,QAAQgC,IAAInC,EACpB,EAGAP,EAAoB2C,EAAIvD,EAGxBY,EAAoB4C,EAAI1C,EAGxBF,EAAoB6C,EAAI,SAAS1C,EAASiC,EAAMU,GAC3C9C,EAAoB+C,EAAE5C,EAASiC,IAClCtD,OAAOkE,eAAe7C,EAASiC,EAAM,CAAEa,YAAY,EAAMC,IAAKJ,GAEhE,EAGA9C,EAAoBmD,EAAI,SAAShD,GACX,qBAAXiD,QAA0BA,OAAOC,aAC1CvE,OAAOkE,eAAe7C,EAASiD,OAAOC,YAAa,CAAEC,MAAO,WAE7DxE,OAAOkE,eAAe7C,EAAS,aAAc,CAAEmD,OAAO,GACvD,EAOAtD,EAAoBuD,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQtD,EAAoBsD,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK5E,OAAO6E,OAAO,MAGvB,GAFA3D,EAAoBmD,EAAEO,GACtB5E,OAAOkE,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOtD,EAAoB6C,EAAEa,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,EAAM,EAAEC,KAAK,KAAMD,IAC9I,OAAOF,CACR,EAGA1D,EAAoB8D,EAAI,SAAS1D,GAChC,IAAI0C,EAAS1C,GAAUA,EAAOqD,WAC7B,WAAwB,OAAOrD,EAAgB,OAAG,EAClD,WAA8B,OAAOA,CAAQ,EAE9C,OADAJ,EAAoB6C,EAAEC,EAAQ,IAAKA,GAC5BA,CACR,EAGA9C,EAAoB+C,EAAI,SAASgB,EAAQC,GAAY,OAAOlF,OAAOC,UAAUC,eAAeC,KAAK8E,EAAQC,EAAW,EAGpHhE,EAAoBsB,EAAI,sFAGxBtB,EAAoBiE,GAAK,SAASC,GAA2B,MAApBC,QAAQ3C,MAAM0C,GAAYA,CAAK,EAExE,IAAIE,EAAaC,KAAK,qCAAuCA,KAAK,sCAAwC,GACtGC,EAAmBF,EAAWjF,KAAK0E,KAAKO,GAC5CA,EAAWjF,KAAOf,EAClBgG,EAAaA,EAAWG,QACxB,IAAI,IAAI5F,EAAI,EAAGA,EAAIyF,EAAWvF,OAAQF,IAAKP,EAAqBgG,EAAWzF,IAC3E,IAAIU,EAAsBiF,EAI1B7E,G","file":"static/js/runtime-main.92e12155.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\":\"e60eab70\",\"4\":\"a35b78a2\",\"5\":\"35bd4935\"}[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-4830623811.commit-a77fd9d/\";\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.fdaed11a.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\":\"49d59c49\",\"4\":\"a35b78a2\",\"5\":\"35bd4935\"}[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-4981095668.commit-0191aff/\";\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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["utils/errorToString.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","components/auth/EthWalletNewSelector.tsx","images/guest.jpg","images/wallet-img.png","components/auth/LoginItemContainer.tsx","components/auth/LoginItemNewContainer.tsx","images/logo-white.svg","components/auth/LogoContainer.tsx","components/download/DownloadDesktopToast.tsx","images/dcl-modal-image.jpeg","components/download/DownloadModal.tsx","components/common/Layout/Main.tsx","components/auth/LoginContainer.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","images/loading.mp4","components/common/Loading/LoadingRender.tsx","components/common/Button/JoinDiscord.tsx","components/common/Layout/Navbar.tsx","components/banners/BannerStream.tsx","components/common/StreamContainer.tsx","components/common/Audio.tsx","integration/mail.ts","components/common/MobileContainer.tsx","components/common/Icon/CatalystWarning.tsx","components/warning/CatalystWarningContainer.tsx","components/App.tsx","index.tsx","state/types.ts","state/reducers.ts","state/redux.ts","state/actions.ts","utils/tracking.ts","kernel-loader/index.ts","utils/rolloutVersions.ts","integration/desktop.ts","integration/url.ts","kernel-loader/injector.ts","integration/browser.ts","utils/callOnce.ts","state/selectors.ts","eth/provider.ts","integration/analytics.ts"],"names":["errorToString","error","message","toString","JSON","stringify","Object","prototype","call","initializeKernel","callOnce","startKernel","id","callback","element","document","getElementById","style","opacity","setTimeout","display","fadeoutElement","ROOT_HIDDEN","initializeFeatureFlags","fetchFlags","applicationName","FF_APPLICATION_NAME","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","providerChainName","getChainName","providerChainId","wantedChainName","wantedChainId","switchToChainId","ErrorNewLogin","ErrorNoMobile","width","height","as","ErrorNotSupported","useMobileResize","active","useState","size","setSize","useEffect","root","resize","innerHeight","innerWidth","addEventListener","removeEventListener","replace","track","Fragment","type","ErrorType","COMMS","METAMASK_LOCKED","NEW_LOGIN","NOT_MOBILE","NOT_SUPPORTED","NET_MISMATCH","extra","AVATAR_ERROR","connect","state","setKernelError","onLogout","disconnect","Container","Content","EthConnectAdvice","provider","ProviderType","FORTMATIC","INJECTED","WALLET_CONNECT","EthWalletSelector","open","loading","canceling","availableProviders","onLogin","onCancelLogin","onClose","anchor","useMemo","a","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","EthWalletNewSelector","showIncompatible","setShowIncompatible","handleIncompatible","disabled","LoginItemContainer","undefined","LoginWalletItem","wallets","LoginGuestItem","guest","LoginItemNewContainer","animate","LoginWalletItemNew","handleCreateAccount","event","onCreateAccount","stopPropagation","name","secondary","LoginGuestItemNew","isSignInFlowV3","getFeatureVariantName","FeatureFlags","SignInFlowV3","VariantNames","New","logoWhite","DownloadDesktopToast","platform","isWindows","isMacOS","wrapperClassName","DownloadModal","setOpen","hasDownloadModalShown","launchDesktopApp","then","launched","handleClose","setDownloadModalShown","Modal","closeIcon","Close","backgroundImage","ModalImage","Hero","Header","Actions","Main","withDarkLayer","TrackingActionType","defaultAvailableProviders","enableProviders","Set","connection","getAvailableProviders","has","stage","session","kernelState","loginStatus","providerType","kernelReady","kernel","ready","rendererReady","renderer","isGuest","isWallet","featureList","toFeatureList","featureFlags","action_type","provider_type","authenticate","showWalletSelector","setShowWalletSelector","handleOpenSelector","handleSignIn","SignIn","CreateAccount","handleCloseSelector","setCanceling","handleCancelLogin","handleGuestLogin","handleLogin","LoginState","SIGNATURE_PENDING","WAITING_PROFILE","WAITING_RENDERER","LOADING","providerInUse","AUTHENTICATING","COMPLETED","Accordion","ref","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","video","loop","muted","autoPlay","JoinDiscord","Navbar","isFullscreen","leftMenu","Item","e","preventDefault","Base","defaultProps","menu","marketplace","builder","docs","places","events","dao","blog","rightMenu","BannerStream","getFeatureVariant","Stream","allowFullScreen","Audio","player","this","updatePlayer","play","catch","pause","audio","Component","subscribe","fetch","method","headers","body","interest","res","status","Error","json","sending","sent","setState","handleSubmit","data","FormData","currentTarget","get","isEmail","onSubmit","placeholder","required","small","frameBorder","allow","CatalystWarning","cx","cy","r","CatalystWarningContainer","catalyst","URL","host","err","onConfirm","onCancel","setCatalystAsTrusted","withoutCatalyst","hasStream","hasBanner","sessionReady","waitingForRenderer","isWaitingForRenderer","loginComplete","isLoginComplete","trustedCatalyst","trusted","sound","isMobile","useMobileMediaQuery","process","configureSegment","configureRollbar","initializeSentry","hideRoot","getState","ReactDOM","initializeBrowserRecommendation","initializeDesktopApp","defaultFeatureFlagsState","flags","variants","defaultSession","sessionId","v4","DownloadCurrentState","reducers","combineReducers","action","SET_KERNEL_LOADED","payload","SET_KERNEL_ACCOUNT_STATE","SIGN_UP","getConnectionData","SET_RENDERER_READY","SET_RENDERER_VISIBLE","visible","SET_RENDERER_LOADING","version","CATALYST","SET_CATALYST_AS_TRUSTED","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","result","middleware","x","createStore","setKernelAccountState","accountState","setKernelLoaded","setRendererLoading","progressEvent","setRendererReady","setDownloadProgress","setDownloadReady","setDownloadNewVersion","ethereum","rollouts","ROLLOUTS","overriddenEventOptions","click_login_button","integrations","getWalletName","isMetaMask","isDapper","isCucumber","isTrust","isToshi","isGoWallet","isAlphaWallet","isStatus","getWalletProps","keys","prop","startsWith","getEnvironmentProperties","properties","rendererType","RENDERER_TYPE","kernelPlatform","PLATFORM","rollout","lib","prefix","getRepositoryName","_site","getRepositoryVersion","wallet","walletProps","recommendedBrowser","isRecommendedBrowser","environmentProperties","internalTrackEvent","errorTraker","console","trackError","defaultKernelErrorTracker","context","defaultWebsiteErrorTracker","getWantedChainId","chainId","ChainId","ETHEREUM_MAINNET","NETWORK","ETHEREUM_GOERLI","getEthereumProvider","account","getProviderChainId","setAsRecentlyLoggedIn","trackConnectWallet","address","resolveBaseUrl","urn","resolveUrlFromUrn","t","global","cdnFromRollout","cdnFromPrefixVersion","withOrigin","getVersions","qs","URLSearchParams","search","globalThis","EXPLORER_BASE_URL","rendererUrl","ensureOrigin","explorerBranch","explorerVersion","kernelVersion","identify","lastIdentity","identifyUser","container","injectKernel","baseUrl","configurations","kernelOptions","rendererOptions","on","eventName","eventData","url","u","protocol","newWindow","opener","identity","disableAnalytics","restoreConnection","hasStoredSession","FATAL","ENV","require","initKernel","initLogin","rolloutsInfo","component","navigator","userAgent","indexOf","sender","log","hasRecentlyLoggedIn","getCurrentPosition","customProtocolParams","position","push","realm","customProtocolTarget","installed","isInstalled","iframe","setAttribute","appendChild","Promise","resolve","removeChild","DEBUG_ANALYTICS","domain","addHttpsIfNoProtocolIsSet","userAgentData","HOSTNAME","hostname","newURL","searchParams","delete","base","finalURL","baseURL","options","kernelUrl","injectScript","DecentralandKernel","theFuture","future","theScript","persistMessage","async","crossOrigin","reject","test","maxTouchPoints","detected","detect","BROWSER_LAST_SESSION_KEY","BROWSER_LAST_DOWNLOAD_MODAL_SHOWN_KEY","lastLoginAt","Number","localStorage","getItem","isNaN","now","setItem","String","fun","value","getRequiredAnalyticsContext","isFeatureEnabled","key","defaultValue","variant","enabled","chainIdRpc","Map","rpc","ProviderAdapter","WebSocketProvider","race","tryPreviousConnection","delay","wanted_chain_id","provider_chain_id","getProvider","switchProviderChainId","millis","AnalyticsAccount","RollbarAccount","analyticsDisabled","authFlags","isAuthenticated","afterFatalError","ethAddress","defaultAnalyticsOptions","endsWith","initialize","PRD","DEV","injectTrackingMetadata","assign","dcl_is_authenticated","dcl_is_guest","dcl_disabled_analytics","dcl_renderer_type","dcl_kernel_platform","dcl_eth_address","Rollbar","accessToken","Desktop","Web","configure","info","critical","fullErrorStack","Sentry","scope","setLevel","setExtras","analytics","userTraits","segmentKey","load","page","timeout","repository","release","environment","dsn","BrowserTracing","tracesSampleRate"],"mappings":"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","file":"static/js/main.0d35944c.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 { 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 { ChainId, getChainName } from '@dcl/schemas/dist/dapps/chain-id'\nimport { ErrorContainer, ErrorDetails, ErrorImage } from './Error'\nimport errorImage from '../../images/errors/robotsmiling.png'\nimport { switchToChainId } from '../../eth/provider'\nimport './errors.css'\n\nexport interface ErrorNetworkMismatchProps {\n wantedChainId: ChainId\n providerChainId: ChainId\n}\n\nexport const ErrorNetworkMismatch = React.memo(function (props: ErrorNetworkMismatchProps) {\n const providerChainName = getChainName(props.providerChainId)\n const wantedChainName = getChainName(props.wantedChainId)\n return (\n <ErrorContainer id=\"error-network-mismatch\">\n <ErrorDetails\n backgroundHeader=\"Oops!\"\n header=\"Wrong network\"\n description={\n <>\n You need to be connected to <strong>{wantedChainName}</strong> network to use this app, but you are\n currently connected to <strong>{providerChainName}</strong>\n </>\n }\n >\n <Button primary onClick={() => switchToChainId(props.wantedChainId, props.providerChainId)}>\n Switch to <strong>{wantedChainName}</strong>\n </Button>\n </ErrorDetails>\n <ErrorImage alt=\"error-smiling-robot\" src={errorImage} />\n </ErrorContainer>\n )\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, { useEffect } from 'react'\nimport { Dispatch } from 'redux'\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'\nimport { track } from '../../utils/tracking'\n\nexport interface ErrorContainerProps {\n error: ErrorState['error']\n onLogout(): void\n closeError(): void\n}\n\nconst mapStateToProps = (state: StoreType): Pick<ErrorContainerProps, 'error'> => {\n return {\n error: state.error.error || null\n }\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch): Pick<ErrorContainerProps, 'closeError' | 'onLogout'> => {\n return {\n closeError: () => dispatch(setKernelError(null)),\n onLogout: () => disconnect()\n }\n}\n\nexport const ErrorContainer = React.memo(function (props: ErrorContainerProps) {\n useMobileResize(!!props.error)\n\n useEffect(() => {\n if (props.error) track('explorer_website_error_screen', props.error)\n }, [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 const { wantedChainId, providerChainId } = props.error.extra!\n return <ErrorNetworkMismatch wantedChainId={wantedChainId} providerChainId={providerChainId} />}\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","import React, { useCallback, useMemo, useState } 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 { track } from '../../utils/tracking'\nimport { EthConnectAdvice } from './EthConnectAdvice'\nimport './EthWalletNewSelector.css'\n\nexport interface WalletSelectorProps {\n open: boolean\n loading: boolean\n canceling?: boolean\n provider?: ProviderType\n availableProviders?: ProviderType[]\n onLogin: (provider: ProviderType) => void\n onCancelLogin?: () => void\n onClose?: () => void\n}\n\nexport const EthWalletNewSelector: React.FC<WalletSelectorProps> = React.memo(\n ({ open, loading, canceling, provider, availableProviders, onLogin, onCancelLogin, onClose }) => {\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 [showIncompatible, setShowIncompatible] = useState(false)\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()\n ? LoginModalOptionType.SAMSUNG\n : isDapperProvider()\n ? LoginModalOptionType.DAPPER\n : LoginModalOptionType.METAMASK\n }\n }\n\n return null\n }, [availableProviders])\n\n const handleLoginWalletConnect = useCallback(() => onLogin(ProviderType.WALLET_CONNECT), [onLogin])\n const handleLoginWalletLink = useCallback(() => onLogin(ProviderType.WALLET_LINK), [onLogin])\n const handleLoginFortmatic = useCallback(() => onLogin(ProviderType.FORTMATIC), [onLogin])\n const handleLoginInjected = useCallback(() => {\n if (browserWallet) {\n onLogin(ProviderType.INJECTED)\n } else {\n anchor.click()\n }\n }, [onLogin, browserWallet, anchor])\n const handleIncompatible = useCallback(() => {\n track('click_incompatible_wallet')\n setShowIncompatible(true)\n }, [])\n\n return (\n <>\n <LoginModal\n open={open}\n onClose={() => {\n setShowIncompatible(false)\n onClose && onClose()\n }}\n i18n={{\n title: showIncompatible ? 'Create a Web3 wallet' : 'Create an account or sign in',\n subtitle: showIncompatible ? (\n <span>\n Don’t have a compatible wallet? Don’t worry, creating one is <b>easy and free</b>. Choose one of the\n providers below to start.\n </span>\n ) : (\n <span>\n Connect with one of our supported <b>Web3 wallet</b> providers to get started.\n </span>\n ),\n error: ''\n }}\n className=\"login-new-modal\"\n >\n <LoginModal.Option type={browserWallet || LoginModalOptionType.METAMASK} onClick={handleLoginInjected} />\n <LoginModal.Option type={LoginModalOptionType.FORTMATIC} onClick={handleLoginFortmatic} />\n {!showIncompatible && (\n <LoginModal.Option type={LoginModalOptionType.WALLET_CONNECT} onClick={handleLoginWalletConnect} />\n )}\n {!showIncompatible && (\n <LoginModal.Option type={LoginModalOptionType.WALLET_LINK} onClick={handleLoginWalletLink} />\n )}\n {!showIncompatible && (\n <div className=\"dcl option incompatible\" onClick={handleIncompatible}>\n <div className=\"image\"></div>\n <div className=\"info\">\n <div className=\"title\">I don't have a compatible wallet</div>\n </div>\n </div>\n )}\n {loading && (\n <div className=\"loader-background\">\n <Loader active={loading} provider={provider} size=\"massive\" />\n <EthConnectAdvice provider={provider} style={{ marginTop: '27px' }} />\n <div className=\"loader-background__or-separator\">- or -</div>\n <Button\n onClick={onCancelLogin}\n loading={canceling}\n disabled={canceling}\n className=\"loader-background__button\"\n >\n CANCEL LOGIN\n </Button>\n </div>\n )}\n\n {showIncompatible && (\n <div className=\"login-new-modal__incompatible-description\">\n <h2>FAQ</h2>\n <h3>What is a Web3 wallet?</h3>\n <p>A Web3 wallet is a type of crypto wallet. It stores cryptocurrency and NFTs.</p>\n <h3>Why do I need a Web3 wallet?</h3>\n <p>\n Your wallet is your Decentraland account. It stores your digital assets and progress and lets you\n connect from more than one device.\n </p>\n <h3>Do I need to pay?</h3>\n <p>No, it is free to create a wallet and Decentraland is free to use.</p>\n </div>\n )}\n </LoginModal>\n </>\n )\n }\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(\n ({ children, className, loading, canceling, active, provider, onClick, onCancelLogin }: LoginItemContainerProps) => (\n <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\">{children}</div>\n {loading && active && (\n <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 && (\n <Button onClick={onCancelLogin} loading={canceling} style={{ marginTop: '28px' }}>\n cancel\n </Button>\n )}\n </div>\n )}\n </div>\n )\n)\n\nexport const LoginWalletItem = React.memo((props: LoginItemContainerProps) => (\n <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\n primary\n size=\"huge\"\n loading={(props.loading || props.canceling) && !props.active}\n disabled={props.loading || props.canceling}\n >\n Continue with wallet\n </Button>\n </LoginItemContainer>\n))\n\nexport const LoginGuestItem = React.memo((props: LoginItemContainerProps) => (\n <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\n primary\n size=\"huge\"\n loading={(props.loading || props.canceling) && !props.active}\n disabled={props.loading || props.canceling}\n >\n Continue as guest\n </Button>\n </LoginItemContainer>\n))","import React, { useCallback } 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 SelectionLabel from \"semantic-ui-react/dist/commonjs/elements/Label\"\nimport Icon from 'semantic-ui-react/dist/commonjs/elements/Icon'\nimport { EthConnectAdvice } from './EthConnectAdvice'\nimport './LoginItemNewContainer.css'\n\nexport type LoginItemNewContainerProps = {\n onClick?: () => void\n onCancelLogin?: () => void\n onCreateAccount?: () => void\n className?: string\n loading?: boolean\n canceling?: boolean\n active?: boolean\n animate?: boolean\n provider?: ProviderType\n children?: React.ReactNode\n}\n\nexport const LoginItemNewContainer = React.memo(\n ({\n children,\n className,\n loading,\n canceling,\n active,\n provider,\n animate,\n onClick,\n onCancelLogin\n }: LoginItemNewContainerProps) => (\n <div\n className={`LoginItemNewContainer ${className || ''} ${loading ? 'loading' : ''} ${animate ? 'animate' : ''} ${\n active ? 'active' : ''\n }`}\n onClick={loading ? undefined : onClick}\n >\n {animate && <div className=\"LoginItemNewContainer__BackLayer\" />}\n <div className=\"LoginItemNewContainer__Content\">{children}</div>\n {loading && active && (\n <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 && (\n <Button onClick={onCancelLogin} loading={canceling} style={{ marginTop: '28px' }}>\n cancel\n </Button>\n )}\n </div>\n )}\n </div>\n )\n)\n\nexport const LoginWalletItemNew = React.memo(function (props: LoginItemNewContainerProps) {\n \n const handleCreateAccount = useCallback((event: React.MouseEvent<HTMLButtonElement>)=> {\n if(props.onCreateAccount) {\n event.stopPropagation()\n props.onCreateAccount()\n }\n }, [props])\n\n return (\n <LoginItemNewContainer {...props} className={`LoginWalletItem ${props.className || ''}`}>\n <h2>\n Create an account or\n <br />\n sign in\n </h2>\n <div className=\"LoginWalletItem__SuccessLabelWrapper\">\n <SelectionLabel className={'LoginWalletItem__SuccessLabel'}>\n <Icon className={'LoginWalletItem__SuccessLabelIcon'} name=\"check\" />\n <span>Free to play</span>\n </SelectionLabel>\n <SelectionLabel className={'LoginWalletItem__SuccessLabel'}>\n <Icon className={'LoginWalletItem__SuccessLabelIcon'} name=\"check\" />\n <span>Play on multiple devices</span>\n </SelectionLabel>\n <SelectionLabel className={'LoginWalletItem__SuccessLabel'}>\n <Icon className={'LoginWalletItem__SuccessLabelIcon'} name=\"check\" />\n <span>Friends and private chat</span>\n </SelectionLabel>\n <SelectionLabel className={'LoginWalletItem__SuccessLabel'}>\n <Icon className={'LoginWalletItem__SuccessLabelIcon'} name=\"check\" />\n <span>Buy, trade and earn NFTs</span>\n </SelectionLabel>\n </div>\n\n <Button\n secondary\n loading={(props.loading || props.canceling) && !props.active}\n disabled={props.loading || props.canceling}\n >\n SIGN IN\n </Button>\n\n <Button\n primary\n loading={(props.loading || props.canceling) && !props.active}\n disabled={props.loading || props.canceling}\n onClick={handleCreateAccount}\n >\n CREATE AN ACCOUNT\n </Button>\n </LoginItemNewContainer>\n )\n})\n\nexport const LoginGuestItemNew = React.memo((props: LoginItemNewContainerProps) => (\n <LoginItemNewContainer {...props} className={`LoginGuestItem ${props.className || ''}`}>\n <h2>Play as guest</h2>\n\n <div className=\"LoginWalletItem__SuccessLabelWrapper\">\n <SelectionLabel className={'LoginWalletItem__SuccessLabel'}>\n <Icon className={'LoginWalletItem__SuccessLabelIcon'} name=\"check\" />\n <span>Free to play</span>\n </SelectionLabel>\n <SelectionLabel className={'LoginWalletItem__SuccessLabel'}>\n <span>Information stored locally</span>\n </SelectionLabel>\n <SelectionLabel className={'LoginWalletItem__SuccessLabel'}>\n <span>Limited social features</span>\n </SelectionLabel>\n <SelectionLabel className={'LoginWalletItem__SuccessLabel'}>\n <span>Cannot receive NFTs</span>\n </SelectionLabel>\n </div>\n\n <Button\n secondary\n loading={(props.loading || props.canceling) && !props.active}\n disabled={props.loading || props.canceling}\n >\n PLAY AS A GUEST\n </Button>\n </LoginItemNewContainer>\n))\n","export default __webpack_public_path__ + \"static/media/logo-white.9dea1762.svg\";","import React from 'react'\nimport { StoreType } from '../../state/redux'\nimport logoWhite from '../../images/logo-white.svg'\nimport { FeatureFlags, getFeatureVariantName, VariantNames } from '../../state/selectors'\nimport { isElectron } from '../../integration/desktop'\nimport { connect } from 'react-redux'\nimport './LogoContainer.css'\n\n\nconst mapStateToProps = (state: StoreType): LogoContainerProps => {\n return {\n isSignInFlowV3: getFeatureVariantName(state, FeatureFlags.SignInFlowV3) === VariantNames.New && !isElectron()\n }\n}\n\nexport interface LogoContainerProps {\n isSignInFlowV3: boolean\n}\n\nexport const LogoContainer: React.FC<LogoContainerProps> = ({ isSignInFlowV3 }) => {\n if (isSignInFlowV3) {\n return (\n <div className=\"LogoContainer LogoContainerNew\">\n <img alt=\"decentraland\" src={logoWhite} width=\"257\" />\n <p>Explore the first decentralized metaverse that is built and owned by its users</p>\n </div>\n )\n }\n\n return (\n <div className=\"LogoContainer\">\n <img alt=\"decentraland\" src={logoWhite} height=\"40\" width=\"212\" />\n <p>Sign In or Create an Account</p>\n </div>\n )\n}\n\nexport default connect(mapStateToProps)(LogoContainer)","import React, { useMemo } from 'react'\nimport { isElectron } from '../../integration/desktop'\nimport { isWindows, isMacOS } from '../../integration/browser'\nimport './DownloadDesktopToast.css'\n\nexport const DownloadDesktopToast = React.memo(() => {\n const platform = useMemo(() => {\n if (isWindows()) {\n return 'windows'\n } else if (isMacOS()) {\n return 'mac'\n } else {\n return null\n }\n }, [])\n\n const wrapperClassName = useMemo(\n () => !isElectron() && !!platform ? 'ShowDownloadDesktopToast' : 'HideDownloadDesktopToast',\n [platform]\n )\n\n return (\n <div className={wrapperClassName}>\n <a\n className=\"DownloadDesktopApp\"\n href=\"https://decentraland.org/download/\"\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n >\n Want to play on {platform}? <span>Download the desktop client</span>\n </a>\n </div>\n )\n})\n","export default __webpack_public_path__ + \"static/media/dcl-modal-image.6e867cb0.jpeg\";","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport { Close } from 'decentraland-ui/dist/components/Close/Close'\nimport { Hero } from 'decentraland-ui/dist/components/Hero/Hero'\nimport { Modal } from 'decentraland-ui/dist/components/Modal/Modal'\nimport { launchDesktopApp } from '../../integration/desktop'\nimport {\n isWindows,\n isMacOS,\n setDownloadModalShown,\n hasDownloadModalShown\n} from '../../integration/browser'\nimport ModalImage from '../../images/dcl-modal-image.jpeg'\nimport './DownloadModal.css'\n\nexport const DownloadModal = React.memo(() => {\n const platform = useMemo(() => {\n if (isWindows()) {\n return 'windows'\n } else if (isMacOS()) {\n return 'mac'\n } else {\n return null\n }\n }, [])\n\n const [open, setOpen] = useState(false)\n\n useEffect(() => {\n if (platform && !hasDownloadModalShown()) {\n launchDesktopApp().then((launched) => {\n setOpen(!launched)\n })\n }\n }, [platform])\n\n const handleClose = useCallback(() => {\n setDownloadModalShown()\n setOpen(false)\n }, [])\n\n return (\n <Modal className=\"DownloadModal\" open={open} closeIcon={<Close />} onClose={handleClose}>\n <Modal.Content>\n <div className=\"DownloadModal__ImageContainer\" style={{ backgroundImage: `url(${ModalImage})` }}></div>\n <div className=\"DownloadModal__TextContainer\">\n <Hero>\n <Hero.Header>\n Decentraland for <span>{platform}</span>\n </Hero.Header>\n <Hero.Content>\n With the Desktop Client, your visit to Decentraland will be <strong>faster</strong> and{' '}\n <strong>more stable</strong> with <strong>better performance and graphics.</strong>\n </Hero.Content>\n <Hero.Actions>\n <Button primary as=\"a\" href=\"https://decentraland.org/download/\" target=\"_blank\">\n Download\n </Button>\n </Hero.Actions>\n </Hero>\n </div>\n </Modal.Content>\n </Modal>\n )\n})\n","import React from 'react'\nimport classNames from '../../../utils/classNames'\nimport './Main.css'\n\nexport type MainProps = React.PropsWithChildren<{\n withDarkLayer?: boolean\n}>\n\nexport default function Main({ withDarkLayer, ...props }: MainProps) {\n return <main {...props} className={classNames([ 'Main', withDarkLayer && 'withDarkLayer' ])} />\n}","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { LoginState } from '@dcl/kernel-interface'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { toFeatureList } from '@dcl/feature-flags'\nimport { connect } from 'react-redux'\nimport { connection } from 'decentraland-connect/dist/index'\nimport { Container } from '../common/Layout/Container'\nimport { StoreType } from '../../state/redux'\nimport { FeatureFlags, getFeatureVariantName, VariantNames } from '../../state/selectors'\nimport { authenticate } from '../../kernel-loader'\nimport { EthWalletSelector } from './EthWalletSelector'\nimport { EthWalletNewSelector } from './EthWalletNewSelector'\nimport { LoginGuestItem, LoginWalletItem } from './LoginItemContainer'\nimport { LoginGuestItemNew, LoginWalletItemNew } from './LoginItemNewContainer'\nimport LogoContainer from './LogoContainer'\nimport { DownloadDesktopToast } from '../download/DownloadDesktopToast'\nimport { DownloadModal } from '../download/DownloadModal'\nimport { isElectron } from '../../integration/desktop'\nimport { disconnect } from '../../eth/provider'\nimport { track } from '../../utils/tracking'\nimport './LoginContainer.css'\nimport Main from '../common/Layout/Main'\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 isSignInFlowV3: getFeatureVariantName(state, FeatureFlags.SignInFlowV3) === VariantNames.New && !isElectron(),\n featureList: toFeatureList(state.featureFlags)\n }\n}\n\nenum TrackingActionType {\n SignIn = 'sign_in',\n CreateAccount = 'create_account'\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n onLogin: (providerType: ProviderType | null, action_type?: TrackingActionType) => {\n track('click_login_button', { provider_type: providerType || 'guest', action_type })\n authenticate(providerType)\n },\n onCancelLogin: () => {\n track('click_cancel_login_button')\n disconnect().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 isSignInFlowV3: boolean\n featureList: string[]\n}\n\nexport interface LoginContainerDispatch {\n onLogin: (provider: ProviderType | null, action_type?: TrackingActionType) => void\n onCancelLogin: () => void\n}\n\nexport const LoginContainer: React.FC<LoginContainerProps & LoginContainerDispatch> = ({\n onLogin,\n onCancelLogin,\n stage,\n isWallet,\n isGuest,\n provider,\n kernelReady,\n availableProviders,\n isSignInFlowV3,\n featureList\n}) => {\n useEffect(() => {\n track('feature_flags', {\n featureFlags: featureList\n })\n }, [featureList])\n\n const [showWalletSelector, setShowWalletSelector] = useState<{\n open: boolean\n action_type?: TrackingActionType\n }>({ open: false })\n const handleOpenSelector = useCallback(() => {\n track('open_login_popup')\n setShowWalletSelector({ open: true })\n }, [])\n\n const handleSignIn = useCallback(() => {\n track('open_login_popup', { action_type: TrackingActionType.SignIn })\n setShowWalletSelector({ open: true, action_type: TrackingActionType.SignIn })\n }, [])\n\n const handleCreateAccount = useCallback(() => {\n track('open_login_popup', { action_type: TrackingActionType.CreateAccount })\n setShowWalletSelector({ open: true, action_type: TrackingActionType.CreateAccount })\n }, [])\n\n const handleCloseSelector = useCallback(() => {\n track('close_login_popup')\n setShowWalletSelector({ open: false })\n }, [])\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\n const handleLogin = useCallback(\n (provider_type: ProviderType) => {\n if (onLogin) {\n onLogin(provider_type, showWalletSelector.action_type)\n }\n },\n [onLogin, showWalletSelector]\n )\n\n const loading = useMemo(() => {\n return (\n stage === LoginState.SIGNATURE_PENDING ||\n stage === LoginState.WAITING_PROFILE ||\n stage === LoginState.WAITING_RENDERER ||\n stage === LoginState.LOADING ||\n !kernelReady\n )\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 if (stage === LoginState.COMPLETED) {\n return <React.Fragment />\n }\n\n return (\n <Main withDarkLayer={isSignInFlowV3}>\n {/* {stage === LoginState.CONNECT_ADVICE && <EthConnectAdvice onLogin={onLogin} />} */}\n {/* {stage === LoginState.SIGN_ADVICE && <EthSignAdvice />} */}\n\n {isSignInFlowV3 && (\n <Container>\n <LogoContainer />\n <div>\n <LoginWalletItemNew\n loading={loading}\n active={isWallet}\n onClick={handleSignIn}\n onCreateAccount={handleCreateAccount}\n provider={providerInUse}\n onCancelLogin={handleCancelLogin}\n canceling={canceling}\n />\n <LoginGuestItemNew loading={loading} active={isGuest} onClick={handleGuestLogin} />\n </div>\n <DownloadDesktopToast />\n </Container>\n )}\n\n {!isSignInFlowV3 && (\n <Container>\n <LogoContainer />\n <div>\n <LoginWalletItem\n loading={loading}\n active={isWallet}\n onClick={handleOpenSelector}\n provider={providerInUse}\n onCancelLogin={handleCancelLogin}\n canceling={canceling}\n />\n <LoginGuestItem loading={loading} active={isGuest} onClick={handleGuestLogin} />\n </div>\n <DownloadDesktopToast />\n </Container>\n )}\n\n <EthWalletSelector\n open={showWalletSelector.open && !isSignInFlowV3}\n loading={loading}\n availableProviders={availableProviders || defaultAvailableProviders}\n provider={providerInUse}\n onLogin={onLogin}\n canceling={canceling}\n onCancelLogin={handleCancelLogin}\n onClose={handleCloseSelector}\n />\n\n <EthWalletNewSelector\n open={showWalletSelector.open && isSignInFlowV3}\n loading={loading}\n availableProviders={availableProviders || defaultAvailableProviders}\n provider={providerInUse}\n onLogin={handleLogin}\n canceling={canceling}\n onCancelLogin={handleCancelLogin}\n onClose={handleCloseSelector}\n />\n\n {!isElectron() && <DownloadModal />}\n </Main>\n )\n}\nexport default connect(mapStateToProps, mapDispatchToProps)(LoginContainer)\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): 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","export default __webpack_public_path__ + \"static/media/loading.3f2ea3ba.mp4\";","import React from 'react'\nimport video from '../../../images/loading.mp4'\nimport './LoadingRender.css'\n\nexport const LoadingRender = React.memo(function () {\n return <div className=\"LoadingRender\">\n <video src={video} loop width=\"150\" height=\"150\" muted autoPlay />\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 OUR 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://places.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.places}\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 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 isEmail from 'validator/lib/isEmail'\n\nexport async function subscribe(email: string) {\n const res = await fetch(\"https://subscription.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, useEffect, 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 { track } from '../../utils/tracking'\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\n useEffect(() => {\n track('explorer_website_mobile_screen')\n }, [])\n \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 from 'react'\n\nexport const CatalystWarning = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"100\" height=\"100\" viewBox=\"0 0 100 100\" fill=\"none\">\n <circle opacity=\"0.5\" cx=\"50\" cy=\"50\" r=\"50\" fill=\"#43404A\"/>\n <path d=\"M74.7586 65.0714L51.5457 24.8929C51.1997 24.2958 50.6026 24 50 24C49.3974 24 48.7947 24.2958 48.4543 24.8929L25.2414 65.0714C24.555 66.2656 25.4143 67.75 26.787 67.75H73.213C74.5857 67.75 75.445 66.2656 74.7586 65.0714ZM48.2144 40.5179C48.2144 40.2723 48.4153 40.0714 48.6608 40.0714H51.3392C51.5847 40.0714 51.7856 40.2723 51.7856 40.5179V50.7857C51.7856 51.0312 51.5847 51.2321 51.3392 51.2321H48.6608C48.4153 51.2321 48.2144 51.0312 48.2144 50.7857V40.5179ZM50 60.1607C49.2991 60.1464 48.6317 59.8579 48.1411 59.3571C47.6505 58.8564 47.3757 58.1832 47.3757 57.4821C47.3757 56.7811 47.6505 56.1079 48.1411 55.6071C48.6317 55.1064 49.2991 54.8179 50 54.8036C50.7009 54.8179 51.3683 55.1064 51.8589 55.6071C52.3495 56.1079 52.6243 56.7811 52.6243 57.4821C52.6243 58.1832 52.3495 58.8564 51.8589 59.3571C51.3683 59.8579 50.7009 60.1464 50 60.1607Z\" fill=\"white\"/>\n </svg>\n )\n})\n","import React, { useMemo } from 'react'\nimport { connect } from 'react-redux'\nimport { Button } from 'decentraland-ui/dist/components/Button/Button'\nimport { withoutCatalyst } from '../../integration/url'\nimport { setCatalystAsTrusted } from '../../state/actions'\nimport { CatalystState, StoreType } from '../../state/redux'\nimport { track } from '../../utils/tracking'\nimport { CatalystWarning } from '../common/Icon/CatalystWarning'\nimport { Container } from '../common/Layout/Container'\nimport Main from '../common/Layout/Main'\nimport { Navbar } from '../common/Layout/Navbar'\n\nimport './CatalystWarningContainer.css'\n\nexport type CatalystWarningProps = CatalystState & {\n onConfirm: () => void\n onCancel: () => void\n}\n\nfunction mapStateToProps(state: StoreType) {\n return {\n ...state.catalyst\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n onConfirm: () => {\n track('trust_catalyst')\n dispatch(setCatalystAsTrusted())\n },\n onCancel: () => {\n track('clear_catalyst')\n window.location.href = withoutCatalyst()\n }\n})\n\nexport const CatalystWarningContainer = React.memo((props: CatalystWarningProps) => {\n const catalyst = useMemo(() => {\n try {\n const url = new URL(props.catalyst!)\n return url.host\n } catch (err) {\n return props.catalyst\n }\n }, [ props.catalyst ])\n\n return <Main withDarkLayer>\n <Navbar />\n <Container>\n <div className=\"catalyst-warning-container\">\n <div className=\"catalyst-warning-content\">\n <div><CatalystWarning /></div>\n <h2>You are about to use a custom Catalyst</h2>\n <p>Using a custom catalyst can be risky as scenes code can be altered.<br />Are you sure you trust <strong><i>{catalyst}</i></strong>?</p>\n <div>\n <Button secondary onClick={props.onConfirm}>trust {catalyst}</Button>\n </div>\n <div>\n <Button primary onClick={props.onCancel}>take me out</Button>\n </div>\n </div>\n </div>\n </Container>\n </Main>\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CatalystWarningContainer)\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 { 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 {\n FeatureFlags,\n getFeatureVariant,\n isWaitingForRenderer,\n isLoginComplete\n} from '../state/selectors'\nimport StreamContainer from './common/StreamContainer'\nimport { Audio } from './common/Audio'\nimport { isMobile } from '../integration/browser'\nimport MobileContainer from './common/MobileContainer'\nimport CatalystWarningContainer from './warning/CatalystWarningContainer'\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 waitingForRenderer: isWaitingForRenderer(state),\n loginComplete: isLoginComplete(state),\n rendererReady: !!state.renderer?.ready,\n trustedCatalyst: !!state.catalyst?.trusted,\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 waitingForRenderer: boolean\n loginComplete: boolean\n rendererReady: boolean\n trustedCatalyst: 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.trustedCatalyst) {\n return <CatalystWarningContainer />\n }\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.waitingForRenderer || props.sessionReady) {\n return <LoadingRender />\n }\n\n return (\n <div className={`WebsiteApp ${props.hasBanner ? 'withBanner' : ''}`}>\n <BannerContainer />\n {/**\n * The audio tag is required to prevent the tab from halting the scripting if left unfocused\n * @see https://github.com/decentraland/explorer-website/pull/333#discussion_r1084094994\n * @see https://github.com/eordano/background-throttle\n */}\n {!isElectron() && props.sound && <Audio track={`${process.env.PUBLIC_URL}/tone4.mp3`} play />}\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'\n// import 'semantic-ui-css/semantic.min.css'\nimport './index.css'\nimport 'semantic-ui-css/components/site.min.css'\nimport 'semantic-ui-css/components/modal.min.css'\nimport 'semantic-ui-css/components/menu.min.css'\nimport 'semantic-ui-css/components/dimmer.min.css'\nimport 'semantic-ui-css/components/button.min.css'\nimport 'semantic-ui-css/components/container.min.css'\nimport 'semantic-ui-css/components/header.min.css'\nimport 'semantic-ui-css/components/loader.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, initializeSentry } 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()\ninitializeSentry()\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 { FeatureFlagsState } from \"./redux\"\n\nexport const FF_APPLICATION_NAME = 'explorer'\n\nexport const defaultFeatureFlagsState: FeatureFlagsState = {\n flags: {},\n variants: {}\n}\n","import { AnyAction } from 'redux'\nimport { connection } from 'decentraland-connect/dist/ConnectionManager'\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 SET_CATALYST_AS_TRUSTED\n} from './actions'\nimport {\n KernelState,\n SessionState,\n RendererState,\n ErrorState,\n BannerState,\n DownloadState,\n DownloadCurrentState,\n FeatureFlagsState,\n CatalystState\n} from './redux'\nimport { v4 } from 'uuid'\nimport { errorToString } from '../utils/errorToString'\nimport { isElectron } from '../integration/desktop'\nimport { defaultFeatureFlagsState } from './types'\nimport { CATALYST } from '../integration/url'\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 catalystReducer(state: CatalystState = { catalyst: CATALYST, trusted: !CATALYST }, action: AnyAction): CatalystState {\n if (action.type === SET_CATALYST_AS_TRUSTED && !!state.catalyst && !state.trusted) {\n return {\n ...state,\n trusted: true\n }\n }\n\n return state\n}\n\nexport function errorReducer(state: ErrorState | undefined, action: AnyAction): ErrorState {\n if (action.type === SET_KERNEL_ERROR) {\n const payload: KernelError = action.payload\n\n if (!payload) {\n return { error: null }\n }\n\n if (!state?.error) {\n return {\n error: {\n details: errorToString(payload.error),\n type: payload.code as any,\n extra: payload.extra\n }\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 type { KernelAccountState, KernelResult, KernelLoadingProgress } from '@dcl/kernel-interface'\nimport type { FeatureFlagsResult } from '@dcl/feature-flags'\nimport { kernelReducer, sessionReducer, rendererReducer, errorReducer, bannerReducer, downloadReducer, featureFlagsReducer, catalystReducer } 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 CatalystState = {\n catalyst: string | null\n trusted: boolean\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 extra?: Record<string, any>\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 catalyst: CatalystState\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 catalyst: catalystReducer,\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 { 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_CATALYST_AS_TRUSTED = 'Set catalyst as trusted'\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 setCatalystAsTrusted = () => action(SET_CATALYST_AS_TRUSTED)\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 { TrackingEvents } from '../trackingEvents'\nimport { AnalyticsOptions, internalTrackEvent, trackError } from '../integration/analytics'\nimport { errorToString } from './errorToString'\nimport { callOnce } from './callOnce'\nimport { isRecommendedBrowser } from '../integration/browser'\nimport { PLATFORM, RENDERER_TYPE } from '../integration/url'\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 kernelPlatform: PLATFORM\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\nexport const getRepositoryName = callOnce(() => {\n return rollouts?._site?.prefix as string | undefined\n})\n\nexport const getRepositoryVersion = callOnce(() => {\n return rollouts?._site?.version as string | undefined\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\nexport function errorTraker(error: any, properties: Record<string, any> = {}) {\n console.error(error)\n const wallet = getWalletName()\n const walletProps = getWalletProps()\n const recommendedBrowser = isRecommendedBrowser()\n const environmentProperties = getEnvironmentProperties()\n trackError(error, { wallet, walletProps, recommendedBrowser, ...properties, ...environmentProperties })\n}\n\n\n/**\n * Default \"catch\" for promises and to print errors in the console.\n */\nexport function defaultKernelErrorTracker(error: any, properties: Record<string, any> = {}) {\n errorTraker(error, { ...properties, context: 'kernel' })\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\n/**\n * Default \"catch\" for promises and to print errors in the console.\n */\nexport function defaultWebsiteErrorTracker(error: any, properties: Record<string, any> = {}) {\n errorTraker(error, { ...properties, 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 { trackConnectWallet } from 'decentraland-dapps/dist/modules/analytics/utils'\nimport { getProviderChainId } from 'decentraland-dapps/dist/modules/wallet/utils/getProviderChainId'\nimport { disconnect, getEthereumProvider, restoreConnection } from '../eth/provider'\nimport { internalTrackEvent, identifyUser, 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 { ChainId } from '@dcl/schemas/dist/dapps/chain-id'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { FeatureFlagsResult, fetchFlags } from '@dcl/feature-flags'\nimport { resolveUrlFromUrn } from '@dcl/urn-resolver'\nimport { defaultWebsiteErrorTracker, defaultKernelErrorTracker, track } from '../utils/tracking'\nimport { injectVersions } from '../utils/rolloutVersions'\nimport { KernelResult } from '@dcl/kernel-interface'\nimport { ENV, NETWORK, withOrigin, ensureOrigin, CATALYST, RENDERER_TYPE } from '../integration/url'\nimport { isElectron, launchDesktopApp } from '../integration/desktop'\nimport { setAsRecentlyLoggedIn } from '../integration/browser'\n\nfunction getWantedChainId() {\n let chainId = ChainId.ETHEREUM_MAINNET // mainnet\n\n if (NETWORK === 'goerli') {\n chainId = ChainId.ETHEREUM_GOERLI\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 extra: {\n providerChainId: providerChainId,\n wantedChainId: wantedChainId\n }\n })\n )\n return\n }\n\n {\n const providerChainId = await getProviderChainId(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 extra: {\n providerChainId: providerChainId,\n wantedChainId: wantedChainId\n }\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 as Error)?.message)\n ) {\n return\n }\n\n if (\n err &&\n typeof err === 'object' &&\n typeof (err as Error)?.message == 'string' &&\n ((err as Error)?.message.includes('Already processing eth_requestAccounts.') || (err as Error)?.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 as Error\n })\n )\n }\n}\n\ntype RolloutRecord = {\n version: string\n percentage: number\n prefix: string\n}\n\ndeclare var globalThis: {\n EXPLORER_BASE_URL?: string\n ROLLOUTS?: Record<string, RolloutRecord>\n}\n\nglobalThis.EXPLORER_BASE_URL = process.env.REACT_APP_EXPLORER_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 withOrigin(`${prefix}/${version}`, 'https://cdn.decentraland.org/')\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/explorer']) {\n globalThis.EXPLORER_BASE_URL = cdnFromRollout(globalThis.ROLLOUTS['@dcl/explorer'])\n }\n\n // 2. load from URN/URL PARAM\n const rendererUrl = qs.get('renderer')\n if (rendererUrl) {\n globalThis.EXPLORER_BASE_URL = ensureOrigin(rendererUrl)\n }\n\n // 3. load hot-branch\n const explorerBranch = qs.get('explorer-branch')\n if (explorerBranch) {\n globalThis.EXPLORER_BASE_URL = withOrigin(explorerBranch, 'https://renderer-artifacts.decentraland.org/branch/')\n }\n\n // 4. specific cdn versions\n const explorerVersion = qs.get('explorer-version')\n if (explorerVersion) {\n globalThis.EXPLORER_BASE_URL = cdnFromPrefixVersion('@dcl/explorer', explorerVersion)\n }\n\n // 5. @deprecated if we're in native, load kernel version (to mantain compatibility)\n if (RENDERER_TYPE === 'native') {\n const kernelVersion = qs.get('kernel-version')\n if (kernelVersion) {\n globalThis.EXPLORER_BASE_URL = cdnFromPrefixVersion('@dcl/kernel', kernelVersion)\n }\n }\n\n // default fallback\n\n if (!globalThis.EXPLORER_BASE_URL) {\n if (flags.variants['explorer-rollout-explorer-version']) {\n const version = flags.variants['explorer-rollout-explorer-version'].name\n globalThis.EXPLORER_BASE_URL = `https://cdn.decentraland.org/@dcl/explorer/${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.EXPLORER_BASE_URL || `https://cdn.decentraland.org/@dcl/explorer/latest`),\n configurations: {}\n },\n rendererOptions: {\n container,\n baseUrl: await resolveBaseUrl(\n globalThis.EXPLORER_BASE_URL || `https://cdn.decentraland.org/@dcl/explorer/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 try {\n const u = new URL(url)\n if (u.protocol === 'https:') {\n const newWindow = window.open(u.toString(), '_blank', 'noopener,noreferrer')\n if (newWindow != null) newWindow.opener = null\n } else {\n track('invalid_external_url', { url })\n }\n } catch (err: any) {\n defaultWebsiteErrorTracker(err)\n }\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 defaultKernelErrorTracker(error.error, error.extra)\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 getProviderChainId(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 !== 'goerli') {\n store.dispatch(\n setKernelError({\n error: new Error(`Invalid NETWORK url param, valid options are 'goerli' 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=goerli 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 if (CATALYST) {\n track('custom_catalyst', { catalyst: CATALYST })\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/explorer: 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 { 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 const launchDesktopApp = callOnce(async () => {\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 = () => {\n installed = true\n }\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","const qs = new URLSearchParams(document.location.search || '')\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'\nexport const CATALYST = addHttpsIfNoProtocolIsSet(qs.get('CATALYST'))\nexport const PLATFORM = (navigator as any)?.userAgentData?.platform || navigator?.platform || 'unknown'\nexport const HOSTNAME = document.location.hostname\n\nfunction addHttpsIfNoProtocolIsSet(domain: string | null) {\n if (!domain) return null\n\n if (!domain.startsWith('http')) {\n return `https://${domain}`\n }\n\n return domain\n}\n\nexport function withoutCatalyst(url: string = window.location.href) {\n const newURL = new URL(url)\n newURL.searchParams.delete('CATALYST')\n return newURL.toString()\n}\n\nexport function withOrigin(url: string | URL, base: string | URL) {\n const finalURL = new URL(url, base)\n const baseURL = new URL(base)\n if (finalURL.toString().startsWith(baseURL.toString())) {\n return finalURL.toString()\n }\n\n return baseURL.toString()\n}\n\nexport function ensureOrigin(url: string | URL) {\n switch (HOSTNAME) {\n case 'play.decentraland.org':\n return withOrigin(url, 'https://cdn.decentraland.org')\n\n default:\n return url.toString()\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","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'\nconst BROWSER_LAST_DOWNLOAD_MODAL_SHOWN_KEY = 'dcl-last-download-modal-shown-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 const hasDownloadModalShown = callOnce(() => {\n const lastLoginAt = Number(localStorage.getItem(BROWSER_LAST_DOWNLOAD_MODAL_SHOWN_KEY))\n return !!lastLoginAt\n})\n\nexport function setAsRecentlyLoggedIn() {\n localStorage.setItem(BROWSER_LAST_SESSION_KEY, String(Date.now()))\n}\n\nexport function setDownloadModalShown() {\n localStorage.setItem(BROWSER_LAST_DOWNLOAD_MODAL_SHOWN_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 function isMacOS() {\n if ((navigator as any).userAgentData?.platform === 'macOS') {\n return true\n }\n\n if (/Macintosh/gi.test(navigator.userAgent)) {\n return true\n }\n\n if (navigator.platform === 'MacIntel') {\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 { SessionTraits } from '../trackingEvents'\nimport { LoginState } from '@dcl/kernel-interface'\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 SignInFlowV3 = 'sign_in_flow_v3_variant'\n}\n\nexport enum VariantNames {\n New = 'new'\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\nexport function getFeatureVariantName(state: StoreType, key: string, defaultValue?: string) {\n if (isFeatureEnabled(state, key)) {\n const name = `${FF_APPLICATION_NAME}-${key}`\n const variant = state.featureFlags.variants[name]\n if (variant && variant.enabled) {\n return variant.name\n }\n }\n\n return defaultValue\n}\n\nexport function isWaitingForRenderer(state: StoreType): boolean {\n return state.session?.kernelState?.loginStatus === LoginState.WAITING_RENDERER\n}\n\nexport function isLoginComplete(state: StoreType): boolean {\n return state.session?.kernelState?.loginStatus === LoginState.COMPLETED\n}\n","import type { ConnectionResponse, Provider } from 'decentraland-connect/dist/types'\nimport { connection } from 'decentraland-connect/dist/ConnectionManager'\nimport { ProviderAdapter } from 'decentraland-connect/dist/ProviderAdapter'\nimport { WebSocketProvider } from 'eth-connect/providers/WebSocketProvider'\nimport { ChainId } from '@dcl/schemas/dist/dapps/chain-id'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { switchProviderChainId } from 'decentraland-dapps/dist/modules/wallet/utils/switchProviderChainId'\nimport { defaultWebsiteErrorTracker, track } from '../utils/tracking'\n\nexport const SECONDS_IN_MILLIS = 1000\nexport const CONNECTION_TIMEOUT_IN_MILLIS = 10 * SECONDS_IN_MILLIS\n\nexport const chainIdRpc = new Map<number, string>([\n [1, 'wss://rpc.decentraland.org/mainnet'],\n [5, 'wss://rpc.decentraland.org/goerli']\n])\n\nexport async function getEthereumProvider(\n type: ProviderType | null,\n chainId: ChainId\n): Promise<{\n provider: Provider\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 ProviderAdapter(new WebSocketProvider(rpc) as any) as any,\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 return await Promise.race([\n connection.tryPreviousConnection().catch(() => null),\n delay(CONNECTION_TIMEOUT_IN_MILLIS)\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\nexport async function switchToChainId(wantedChainId: ChainId, providerChainId: ChainId) {\n try {\n track('switch_chain', {\n wanted_chain_id: wantedChainId,\n provider_chain_id: providerChainId\n })\n\n const provider = await connection.getProvider()\n\n await switchProviderChainId(provider, wantedChainId)\n window.location.reload()\n return\n } catch (error: any) {\n defaultWebsiteErrorTracker(error)\n throw new Error(error.message)\n }\n}\n\nfunction delay(millis: number): Promise<null> {\n return new Promise(resolve => {\n setTimeout(() => resolve(null), millis)\n })\n}","import { store } from '../state/redux'\nimport { getRequiredAnalyticsContext } from '../state/selectors'\nimport { errorToString } from '../utils/errorToString'\nimport { getRepositoryName, getRepositoryVersion, track } from '../utils/tracking'\nimport { getCurrentPosition } from './browser'\nimport { isElectron } from './desktop'\nimport { DEBUG_ANALYTICS, PLATFORM, RENDERER_TYPE } from './url'\nimport * as Sentry from \"@sentry/browser\"\nimport { BrowserTracing } from \"@sentry/tracing\"\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 ethAddress: null as null | string,\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 payload.dcl_kernel_platform = PLATFORM\n payload.dcl_eth_address = authFlags.ethAddress\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\n if ((window as any).Rollbar) {\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\n Sentry.withScope(function(scope) {\n payload = payload || {}\n injectTrackingMetadata(payload);\n scope.setLevel(\"error\");\n scope.setExtras(payload || {})\n let err = typeof error === 'string' ? new Error(error) :\n error && error instanceof Error ? error : new Error(errorToString(error));\n Sentry.captureException(err);\n })\n}\n\nexport function identifyUser(ethAddress: string, isGuest: boolean, email?: string) {\n authFlags.isGuest = isGuest\n authFlags.isAuthenticated = !!ethAddress\n authFlags.ethAddress = ethAddress\n\n if ((window as any).analytics) {\n const userTraits = {\n sessionId: getRequiredAnalyticsContext(store.getState()).sessionId,\n ethAddress,\n email\n }\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS identifyUser', ethAddress, userTraits)\n }\n\n (window as any).analytics.identify(userTraits)\n }\n}\n\nasync function initialize(segmentKey: string): Promise<void> {\n if ((window as any).analytics.load) {\n // loading client for the first time\n ;(window as any).analytics.load(segmentKey)\n ;(window as any).analytics.page()\n ;(window as any).analytics.ready(() => {\n (window as any).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 as any).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 as any).analytics.track(eventName, data, options ?? defaultAnalyticsOptions)\n}\n\nexport function initializeSentry() {\n const repository = getRepositoryName()\n const version = getRepositoryVersion()\n Sentry.init({\n release: !!repository && !!version ? `${repository}@${version}` : undefined,\n environment: !!repository && !!version ? 'production' : 'development',\n dsn: 'https://d067f6e6fc9c467ca8deb2b26b16aab1@o4504361728212992.ingest.sentry.io/4504915943489536',\n integrations: [new BrowserTracing()],\n tracesSampleRate: 0.01 // 1% of transactions\n })\n}\n"],"sourceRoot":""}
|
|
File without changes
|
|
File without changes
|