@dcl/explorer-website 0.0.1-2066313608.commit-304628c → 0.1.0-2109459792.commit-cf5a3da
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 +29 -29
- package/index.html +1 -1
- package/package.json +3 -3
- package/static/css/{2.c77a8f6a.chunk.css → 2.77e49b44.chunk.css} +3 -3
- package/static/css/{2.c77a8f6a.chunk.css.map → 2.77e49b44.chunk.css.map} +1 -1
- package/static/css/{main.69aa94c6.chunk.css → main.ee5c9ac2.chunk.css} +2 -2
- package/static/css/main.ee5c9ac2.chunk.css.map +1 -0
- package/static/js/2.5ddf4fa7.chunk.js +3 -0
- package/static/js/{2.3a38ee4d.chunk.js.LICENSE.txt → 2.5ddf4fa7.chunk.js.LICENSE.txt} +0 -0
- package/static/js/{2.3a38ee4d.chunk.js.map → 2.5ddf4fa7.chunk.js.map} +1 -1
- package/static/js/main.98410c09.chunk.js +2 -0
- package/static/js/main.98410c09.chunk.js.map +1 -0
- package/static/js/{runtime-main.38ae1178.js → runtime-main.715f0b8b.js} +2 -2
- package/static/js/{runtime-main.38ae1178.js.map → runtime-main.715f0b8b.js.map} +1 -1
- package/static/media/warning.c3a263c1.svg +3 -0
- package/static/css/main.69aa94c6.chunk.css.map +0 -1
- package/static/js/2.3a38ee4d.chunk.js +0 -3
- package/static/js/main.3e21aa87.chunk.js +0 -2
- package/static/js/main.3e21aa87.chunk.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(this["webpackJsonp@dcl/explorer-website"]=this["webpackJsonp@dcl/explorer-website"]||[]).push([[0],{1021:function(e,t,n){},1022:function(e,t,n){},1024:function(e,t,n){"use strict";n.r(t);var r=n(0),a=n.n(r),o=n(92),c=n(61),i=n(63),l=n(13),s=n(188),u=n(48);var d=Object(u.a)((function(){Object(s.b)(),function(e,t){var n=document.getElementById(e);n&&(n.style.opacity="0",setTimeout((function(){n.style.display="none",t&&t()}),300))}("root-loading")}));var m=!1;var f=n(127),p=(n(753),n(754),n(755),n(756),n(757),n(249)),E=n(17),h=n(112),b=(n(87),n.p+"static/media/error-robotmobile.9df34375.png"),v=function(){return a.a.createElement("div",{id:"error-avatarerror",className:"error-container"},a.a.createElement("div",{className:"error-background"}),a.a.createElement("div",{className:"errormessage"},a.a.createElement("div",{className:"errortext col"},a.a.createElement("div",{className:"error"},"Oops..."),a.a.createElement("div",{className:"communicationslink"},"There was a technical issue and we were unable to retrieve your avatar information"),a.a.createElement("div",{className:"givesomedetailof"},"Please try again later, and if the problem persists you can contact us through the Discord channel or at"," ",a.a.createElement("a",{href:"mailto:hello@decentraland.org"},"hello@decentraland.org"))),a.a.createElement("div",{className:"errorimage col"},a.a.createElement("img",{alt:"",className:"error-image",src:b}))))},g=n.p+"static/media/error-robotdown.ee4685c4.png",y=function(){return a.a.createElement("div",{id:"error-comms",className:"error-container"},a.a.createElement("div",{className:"error-background"}),a.a.createElement("div",{className:"errormessage"},a.a.createElement("div",{className:"errortext col"},a.a.createElement("div",{className:"error"},"Oops"),a.a.createElement("div",{className:"communicationslink"},"A communication link could not be",a.a.createElement("br",null),"established with other peers"),a.a.createElement("div",{className:"givesomedetailof"},"This might be because you are behind a restrictive network firewall, or a temporary problem with the selected realm. ",a.a.createElement("br",null),a.a.createElement("br",null),"If you have any ad blocking extensions try turning them off for this site, and then reload.",a.a.createElement("br",null),"You can also try a different realm."),a.a.createElement("div",{className:"cta"},a.a.createElement("button",{className:"retry",onClick:function(){window.location.reload()}},"Reload"))),a.a.createElement("div",{className:"errorimage col"},a.a.createElement("div",{className:"imagewrapper"},a.a.createElement("img",{alt:"",className:"error-image",src:g})))))},w=["If you have any ad blocking extensions,","try turning them off for this site.","","Loading should not take any longer than 2-3 minutes.","If you seem to be stuck, make sure hardware acceleration is on.",a.a.createElement("a",{href:"https://docs.decentraland.org/decentraland/hardware-acceleration/"},"LEARN MORE")],C=function(e){var t=e.details&&e.details.length?e.details:w;return a.a.createElement("div",{id:"error-fatal",className:"error-container"},a.a.createElement("div",{className:"error-background"}),a.a.createElement("div",{className:"errormessage"},a.a.createElement("div",{className:"errortext col"},a.a.createElement("div",{className:"error"},"Oops!"),a.a.createElement("div",{className:"communicationslink"},"Something went wrong"),a.a.createElement("div",{className:"givesomedetailof"},t.map((function(e,t){return a.a.createElement("div",{key:t},e)}))),a.a.createElement("div",{className:"cta"},a.a.createElement("button",{className:"retry",onClick:function(){window.location.reload()}},"Reload"))),a.a.createElement("div",{className:"errorimage col"},a.a.createElement("div",{className:"imagewrapper"},a.a.createElement("img",{alt:"",className:"error-image",src:g})))))},O=n.p+"static/media/robotsmiling.e182d216.png",N=function(e){return a.a.createElement("div",{id:"error-networkmismatch",className:"error-container"},a.a.createElement("div",{className:"error-background"}),a.a.createElement("div",{className:"errormessage"},a.a.createElement("div",{className:"errortext col"},a.a.createElement("div",{className:"communicationslink"},"Before we continue"),e.details&&a.a.createElement("div",{className:"givesomedetailof"},e.details),a.a.createElement("div",{className:"cta"},a.a.createElement("button",{className:"retry",onClick:e.closeError},"Retry"))),a.a.createElement("div",{className:"errorimage col"},a.a.createElement("div",{className:"imagewrapper"},a.a.createElement("img",{alt:"",className:"error-image",src:O})))))},j=n(46),R=function(e){return a.a.createElement("div",{id:"error-networkmismatch",className:"error-container"},a.a.createElement("div",{className:"error-background"}),a.a.createElement("div",{className:"errormessage"},a.a.createElement("div",{className:"errortext col"},a.a.createElement("div",{className:"communicationslink"},"A network mismatch was detected"),a.a.createElement("div",{className:"givesomedetailof"},"We detected that you are trying to enter the ",a.a.createElement("strong",{id:"tld"},j.c||"mainnet")," network, and your Ethereum wallet is set to other network."),a.a.createElement("div",{className:"givesomedetailof"},"To continue, please change the Ethereum network in your wallet to"," ",a.a.createElement("strong",{id:"web3NetGoal"},j.c||"mainnet"),' and click "Reload".'),e.details&&a.a.createElement("div",{className:"givesomedetailof"},"Details: ",e.details),a.a.createElement("div",{className:"cta"},a.a.createElement("button",{className:"retry",onClick:function(){window.location.reload()}},"Reload"),a.a.createElement("br",null),a.a.createElement("button",{className:"retry",onClick:function(){return e.onLogout({reload:!0})}},"Log out"))),a.a.createElement("div",{className:"errorimage col"},a.a.createElement("div",{className:"imagewrapper"},a.a.createElement("img",{alt:"",className:"error-image",src:O})))))},k=function(){return a.a.createElement("div",{id:"error-newlogin",className:"error-container"},a.a.createElement("div",{className:"error-background"}),a.a.createElement("div",{className:"errormessage"},a.a.createElement("div",{className:"errortext col"},a.a.createElement("div",{className:"error communicationslink"},"Another session was detected"),a.a.createElement("div",{className:"givesomedetailof"},"It seems that the explorer was opened with your account from another device, browser, or tab.",a.a.createElement("br",null),'Please, close the prior session and click "Reload" to explore the world in this window.'),a.a.createElement("div",{className:"cta"},a.a.createElement("button",{className:"retry",onClick:function(){window.location.reload()}},"Reload"))),a.a.createElement("div",{className:"errorimage col"},a.a.createElement("div",{className:"imagewrapper"},a.a.createElement("img",{alt:"",className:"error-image",src:O})))))},L=function(){return a.a.createElement("div",{id:"error-nomobile",className:"hidden-error"},a.a.createElement("div",{className:"error-background",style:{zIndex:10,width:"100%",height:"100%",backgroundColor:"#0d0c0f"}}),a.a.createElement("div",{className:"iphone8916",style:{zIndex:11}},a.a.createElement("div",{className:"div1",style:{width:"375px",height:"100%",position:"relative",margin:"auto"}},a.a.createElement("div",{className:"theclientisonlya"},"The client is only available on desktop right now."),a.a.createElement("img",{alt:"",className:"robotmobilebrowsererror",src:b}),a.a.createElement("div",{className:"cta"},a.a.createElement("div",{className:"signup",onClick:function(){window.location.href="https://decentraland.org"}},"Learn more about decentraland")))))},x=function(){return a.a.createElement("div",{id:"error-notsupported",className:"error-container"},a.a.createElement("div",{className:"error-background"}),a.a.createElement("div",{className:"errormessage"},a.a.createElement("div",{className:"errortext col"},a.a.createElement("div",{className:"error"},"Error"),a.a.createElement("div",{className:"communicationslink"},"Your browser or device is not supported"),a.a.createElement("div",{className:"givesomedetailof"},"The Explorer only works on Chrome or Firefox for Windows, Linux and macOS.")),a.a.createElement("div",{className:"errorimage col"},a.a.createElement("img",{alt:"",className:"error-image",src:b}))))},A=Object(c.b)((function(e){return{error:e.error.error||null}}),(function(e,t){return{closeError:function(){return e(Object(E.r)(null))},onLogout:function(){return Object(h.a)()}}}))((function(e){return e.error?e.error.type===l.c.COMMS?a.a.createElement(y,null):e.error.type===l.c.METAMASK_LOCKED?a.a.createElement(N,{details:e.error.details,closeError:e.closeError}):e.error.type===l.c.NEW_LOGIN?a.a.createElement(k,null):e.error.type===l.c.NOT_MOBILE?a.a.createElement(L,null):e.error.type===l.c.NOT_SUPPORTED?a.a.createElement(x,null):e.error.type===l.c.NET_MISMATCH?a.a.createElement(R,{details:e.error.details,onLogout:e.onLogout}):e.error.type===l.c.AVATAR_ERROR?a.a.createElement(v,null):a.a.createElement(a.a.Fragment,null,a.a.createElement(C,{details:[e.error.details||"An error happened while loading Decentraland."]})):a.a.createElement(a.a.Fragment,null)})),T=n(111),S=n(53),I=n(32),U=n(93),M=(n(760),function(e){return a.a.createElement("div",Object.assign({},e,{className:"eth-container "+(e.className||"")}))}),P=function(e){return a.a.createElement("div",Object.assign({},e,{className:"eth-content "+(e.className||"")}))},W=n(252),D=n(149),K=n(65),B=n(44),F=a.a.memo((function(e){switch(e.provider){case I.ProviderType.FORTMATIC:return a.a.createElement("span",{className:"EthConnectAdvice"},"Please, follow the instructions of your fortmatic provider to continue.");case I.ProviderType.INJECTED:return a.a.createElement("span",{className:"EthConnectAdvice"},"Please, follow the instructions of your browser wallet provider to continue.");case I.ProviderType.WALLET_CONNECT:return a.a.createElement("span",{className:"EthConnectAdvice"},"Please, follow the instructions of your mobile wallet provider to continue.");default:return null}})),Y=a.a.memo((function(e){var t=e.open,n=e.loading,o=e.provider,c=e.availableProviders,i=e.onLogin,l=e.onCancel,s=Object(r.useMemo)((function(){var e=document.createElement("a");return e.target="_blank",e.rel="noreferrer noopener",e.href="https://metamask.io/download.html",e}),[]),u=Object(r.useMemo)((function(){if(c&&c.length>0&&c.includes(I.ProviderType.INJECTED))return Object(W.isCucumberProvider)()?K.LoginModalOptionType.SAMSUNG:Object(W.isDapperProvider)()?K.LoginModalOptionType.DAPPER:K.LoginModalOptionType.METAMASK;return null}),[c]),d=Object(r.useCallback)((function(){return i&&i(I.ProviderType.WALLET_CONNECT)}),[i]),m=Object(r.useCallback)((function(){return i&&i(I.ProviderType.FORTMATIC)}),[i]),f=Object(r.useCallback)((function(){u&&i?i(I.ProviderType.INJECTED):s.click()}),[i,u,s]);return a.a.createElement(K.LoginModal,{open:t,onClose:l,i18n:{title:"Connect your wallet",error:"",subtitle:""}},n&&a.a.createElement("div",{className:"loader-background"},a.a.createElement(F,{provider:o})),n&&a.a.createElement(D.Loader,{active:n,provider:o,size:"massive"}),!Object(B.b)()&&a.a.createElement(K.LoginModal.Option,{type:u||K.LoginModalOptionType.METAMASK,onClick:f}),a.a.createElement(K.LoginModal.Option,{type:K.LoginModalOptionType.FORTMATIC,onClick:m}),a.a.createElement(K.LoginModal.Option,{type:K.LoginModalOptionType.WALLET_CONNECT,onClick:d}),a.a.createElement("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"," ",a.a.createElement("a",{href:"https://github.com/trezor/trezor-firmware/pull/1568",target:"_blank",rel:"noopener noreferrer"},"here"),"."))})),q=n(254),V=n.p+"static/media/guest.6eb48000.jpg",G=n.p+"static/media/wallets.96b87835.jpg",z=(n(984),a.a.memo((function(e){var t=e.children,n=e.className,r=e.loading,o=e.active,c=e.provider,i=e.onClick;return a.a.createElement("div",{className:"LoginItemContainer ".concat(n||""," ").concat(r?"loading":""," ").concat(o?"active":""),onClick:r?void 0:i},a.a.createElement("div",{className:"LoginItemContainer__BackLayer"}),a.a.createElement("div",{className:"LoginItemContainer__Content"},t),r&&o&&a.a.createElement("div",{className:"loader-background"},a.a.createElement(F,{provider:c})),a.a.createElement(D.Loader,{active:o&&r,provider:c,size:"massive"}))}))),Z=a.a.memo((function(e){return a.a.createElement(z,Object.assign({},e,{className:"LoginWalletItem ".concat(e.className||"")}),a.a.createElement("img",{alt:"wallets",src:G,width:"318",height:"318"}),a.a.createElement("h2",null,"Play using your wallet"),a.a.createElement("p",null,"Connect your account to fully enjoy Decentraland!"),a.a.createElement(q.Button,{primary:!0,size:"huge",loading:e.loading&&!e.active,disabled:e.loading},"Continue with wallet"))})),Q=a.a.memo((function(e){return a.a.createElement(z,Object.assign({},e,{className:"LoginGuestItem ".concat(e.className||"")}),a.a.createElement("img",{alt:"guest",src:V,width:"318",height:"318"}),a.a.createElement("h2",null,"Play as guest"),a.a.createElement("p",null,"Your information will be locally stored and your experience limited."),a.a.createElement(q.Button,{primary:!0,size:"huge",loading:e.loading&&!e.active,disabled:e.loading},"Continue as guest"))})),H=n(45),J=(n(985),[]),X=Object(c.b)((function(e){var t,n,r=new Set([I.ProviderType.INJECTED,I.ProviderType.FORTMATIC,I.ProviderType.WALLET_CONNECT]);return{availableProviders:U.connection.getAvailableProviders().filter((function(e){return r.has(e)})),stage:null===(t=e.session.kernelState)||void 0===t?void 0:t.loginStatus,provider:null===(n=e.session.connection)||void 0===n?void 0:n.providerType,kernelReady:e.kernel.ready,rendererReady:e.renderer.ready,isGuest:e.session.kernelState?e.session.kernelState.isGuest:void 0,isWallet:e.session.kernelState?!e.session.kernelState.isGuest&&!!e.session.connection:void 0}}),(function(e){return{onLogin:function(e){Object(H.b)("click_login_button",{provider_type:e||"guest"}),Object(s.a)(e)}}}))((function(e){var t=e.onLogin,n=e.stage,o=e.isWallet,c=e.isGuest,i=e.provider,l=e.kernelReady,s=e.availableProviders,u=Object(r.useState)(!1),d=Object(T.a)(u,2),m=d[0],f=d[1],p=Object(r.useCallback)((function(){Object(B.b)()&&t?t(I.ProviderType.WALLET_CONNECT):(Object(H.b)("open_login_popup"),f(!0))}),[t]),E=Object(r.useCallback)((function(){return f(!1)}),[]),h=Object(r.useCallback)((function(){return t&&t(null)}),[t]),b=Object(r.useMemo)((function(){return n===S.LoginState.SIGNATURE_PENDING||n===S.LoginState.WAITING_PROFILE||n===S.LoginState.WAITING_RENDERER||n===S.LoginState.LOADING||!l}),[n,l]),v=Object(r.useMemo)((function(){if(n===S.LoginState.AUTHENTICATING||n===S.LoginState.SIGNATURE_PENDING)return i}),[n,i]);return n===S.LoginState.COMPLETED?a.a.createElement(a.a.Fragment,null):a.a.createElement("main",{className:"LoginContainer"},a.a.createElement(M,null,a.a.createElement("div",{className:"LogoContainer"},a.a.createElement("img",{alt:"decentraland",src:"data:image/png;base64,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",height:"40",width:"212"}),a.a.createElement("p",null,"Sign In or Create an Account")),a.a.createElement("div",null,a.a.createElement(Z,{loading:b,active:o,onClick:p,provider:v}),a.a.createElement(Q,{loading:b,active:c,onClick:h}))),a.a.createElement(Y,{open:m,loading:b,availableProviders:s||J,provider:v,onLogin:t,onCancel:E}))})),_=n(4),$=n(5),ee=n(7),te=n(6),ne=function(e){Object(ee.a)(n,e);var t=Object(te.a)(n);function n(){var e;Object(_.a)(this,n);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return(e=t.call.apply(t,[this].concat(a))).player=null,e}return Object($.a)(n,[{key:"componentDidMount",value:function(){this.updatePlayer()}},{key:"componentDidUpdate",value:function(){this.updatePlayer()}},{key:"updatePlayer",value:function(){this.player&&(this.props.play?this.player.play().catch((function(e){})):this.player.pause())}},{key:"render",value:function(){var e=this;return a.a.createElement("audio",{ref:function(t){return e.player=t},autoPlay:!0,loop:!0},a.a.createElement("source",{src:this.props.track,type:"audio/mpeg"}))}}]),n}(a.a.Component);n(986);function re(e){var t=Object(r.useState)(!1),n=Object(T.a)(t,2),o=n[0],c=n[1],i=Object(r.useRef)(null),l=Object(r.useMemo)((function(){return i.current&&o?i.current.offsetHeight+50:0}),[o]),s="eth-accordion";return o&&(s+=" eth-accordion-open"),a.a.createElement("div",{className:s},a.a.createElement("div",{className:"eth-accordion-title",onClick:function(){return c(!o)}},e.title),a.a.createElement("div",{className:"eth-accordion-description",style:{height:"".concat(l,"px")}},a.a.createElement("div",{ref:i},e.children)))}n(987);var ae=function(e){return a.a.createElement("div",{className:"eth-beginners-guide"},a.a.createElement(M,null,a.a.createElement(P,null,a.a.createElement("h2",null,"Beginner's Guide"),a.a.createElement(re,{title:a.a.createElement("h3",null,"What do I need to ",a.a.createElement("b",null,"play"),"?")},a.a.createElement("p",null,"A PC or Mac running Chrome or Firefox"),a.a.createElement("ul",null,a.a.createElement("li",null,a.a.createElement("p",null,"Can I play on a mobile device?"),a.a.createElement("p",null,"For the moment we don\u2019t support mobile devices. But please stay tuned!")),a.a.createElement("li",null,a.a.createElement("p",null,"Can I log in from multiple computers?"),a.a.createElement("p",null,"Yes, you can run Decentraland from multiple computers as long as you have your digital wallet installed on each machine.")),a.a.createElement("li",null,a.a.createElement("p",null,"Can I use a different browser?"),a.a.createElement("p",null,"While it may be technically possible to use another browser, we recommend Chrome or Firefox to ensure optimal performance.")))),a.a.createElement(re,{title:a.a.createElement("h3",null,"What is a ",a.a.createElement("b",null,"Wallet")," and why do I need one?")},a.a.createElement("p",null,"If you want to fully enjoy the Decentraland experience, we recommend you get yourself a digital wallet. Digital wallets work as your personal account, keeping all your digital assets (such as names, collectibles, LANDs) and in-world progress safe."),a.a.createElement("p",null,"If you choose to experience Decentraland Explorer without a wallet, the information will only be stored locally: you will be able to walk around, customize your Avatar and chat with others in-world, but you won\u2019t have the chance to receive daily rewards, participate in events or log in with a different device using the same Guest ID and Avatar."),a.a.createElement("p",null,"If this is the first time you\u2019re hearing about digital wallets, we recommend reading"," ",a.a.createElement("a",{href:"https://docs.decentraland.org/examples/get-a-wallet/",target:"_blank",rel:"noreferrer"},"Get a Wallet \u2013 Beginners Guide"),".")),a.a.createElement(re,{title:a.a.createElement("h3",null,"What is ",a.a.createElement("b",null,"MANA"),"?")},a.a.createElement("p",null,"MANA is Decentraland\u2019s fungible, ERC20 cryptocurrency token. MANA is burned, or spent, in exchange for LAND parcels. For a current summary of critical stats like total and circulating supply, please visit our MANA Token Information transparency dashboard. See the"," ",a.a.createElement("a",{href:"https://docs.decentraland.org/decentraland/glossary/",target:"_blank",rel:"noreferrer"},"Glossary"),"for more information.")),a.a.createElement(re,{title:a.a.createElement("h3",null,"What is ",a.a.createElement("b",null,"LAND"),"?")},a.a.createElement("p",null,"LAND is a non-fungible digital asset maintained in an Ethereum smart contract. LAND is divided into parcels that are referenced using unique x,y cartesian coordinates. Each LAND token includes a record of its coordinates, its owner, and a reference to a content description file or parcel manifest that describes and encodes the content the owner wishes to serve on his or her land.")),a.a.createElement(re,{title:a.a.createElement("h3",null,"What is the ",a.a.createElement("b",null,"Marketplace"),"?")},a.a.createElement("p",null,"The Marketplace is the go-to place to trade and manage all your Decentraland on-chain assets."),a.a.createElement("p",null,"Access the Marketplace at"," ",a.a.createElement("a",{href:"https://market.decentraland.org",target:"_blank",rel:"noreferrer"},"market.decentraland.org"),"."),a.a.createElement("p",null,"The Marketplace allows you to:"),a.a.createElement("ul",null,a.a.createElement("li",null,a.a.createElement("p",null,"Sell parcels and Estates of LAND, wearables and unique names. Set your own price in MANA and an expiration date for the offer.")),a.a.createElement("li",null,a.a.createElement("p",null,"Buy parcels and Estates, wearables and unique names that are for sale.")),a.a.createElement("li",null,a.a.createElement("p",null,"Transfer your parcels and Estates to another user.")),a.a.createElement("li",null,a.a.createElement("p",null,"Explore the world through a map to see who owns what, what wearables exist and what names are claimed.")))))))},oe=a.a.memo((function(e){return a.a.createElement("svg",Object.assign({},e,{width:"22",height:"22",viewBox:"0 0 22 22"}),a.a.createElement("path",{fill:"currentColor",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",transform:"translate(4 4)"}))})),ce=a.a.memo((function(e){return a.a.createElement("svg",Object.assign({},e,{width:"22",height:"22",viewBox:"0 0 22 22"}),a.a.createElement("path",{fill:"currentColor",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",transform:"translate(5 5)"}))})),ie=a.a.memo((function(e){return a.a.createElement("svg",Object.assign({},e,{width:"22",height:"22",viewBox:"0 0 22 22"}),a.a.createElement("path",{fill:"currentColor",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",transform:"translate(5 5)"}))})),le=a.a.memo((function(e){return a.a.createElement("svg",Object.assign({},e,{width:"22",height:"22",viewBox:"0 0 22 22"}),a.a.createElement("path",{fill:"currentColor",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",transform:"translate(4 6)"}))})),se=(n(988),n(191)),ue=Math.max((new Date).getFullYear(),2020),de=function(){var e=Object(se.a)({});return a.a.createElement("footer",{className:"big-footer"},a.a.createElement(M,null,a.a.createElement("div",null,a.a.createElement("div",null,a.a.createElement("h4",null,"NEED SUPPORT?")),a.a.createElement("div",null,a.a.createElement("a",{className:"big-footer-button",href:"https://decentraland.org/discord",target:"about:blank"},a.a.createElement(le,null)," Join our Discord"))),a.a.createElement("div",null,a.a.createElement("div",null,a.a.createElement("h4",null,"FOLLOW US")),a.a.createElement("div",null,a.a.createElement("a",{className:"big-footer-icon",href:"https://www.reddit.com/r/decentraland/",target:"about:blank"},a.a.createElement(oe,null)),a.a.createElement("a",{className:"big-footer-icon",href:"http://github.com/decentraland",target:"about:blank"},a.a.createElement(ce,null)),a.a.createElement("a",{className:"big-footer-icon",href:"https://twitter.com/decentraland",target:"about:blank"},a.a.createElement(ie,null))))),a.a.createElement(M,null,a.a.createElement("p",{className:"copyright",title:"Versions: "+JSON.stringify(e,null,2)},"\xa9 ",ue," Decentraland")))},me=(n(424),function(e){return a.a.createElement("div",{id:"banner-notsupported",className:"banner-container"},a.a.createElement("div",{className:"banner-close-button",onClick:e.onClose}),a.a.createElement("div",{className:"banner-text"},"Your browser is not among the recommended choices for an optimal experience in Decentraland. We suggest you use one based on"," ",a.a.createElement("a",{href:"https://www.google.com/chrome/",rel:"noreferrer noopener",target:"_blank"},"Chromium")," or ",a.a.createElement("a",{href:"https://www.mozilla.org/en-US/firefox/new/",rel:"noreferrer noopener",target:"_blank"},"Firefox"),"."))}),fe=Object(c.b)((function(e){return{banner:e.banner.banner}}),(function(e,t){return{onClose:function(){return e(Object(E.l)(null))}}}))((function(e){switch(e.banner){case l.a.NOT_RECOMMENDED:return a.a.createElement(me,{onClose:e.onClose});default:return null}})),pe=(n(989),a.a.memo((function(){return a.a.createElement("div",{className:"LoadingRender"},a.a.createElement("img",{alt:"loading",src:"https://cdn.decentraland.org/@dcl/explorer-website/0.0.1-2066313608.commit-304628c/images/loading.gif",width:"150",height:"150"}),a.a.createElement("p",null,"We are downloading the latest version of Decentraland. You'll be up and running in a few seconds!"))}))),Ee=n(95),he=(n(1021),a.a.memo((function(){return a.a.createElement("a",{className:"JoinDiscord",rel:"noopener noreferrer",target:"_blank",href:"https://decentraland.org/discord/"},a.a.createElement(le,null),a.a.createElement("span",null,"JOIN DISCORD"))}))),be=n(75),ve=n.n(be),ge=a.a.memo((function(){var e,t,n,r,o,c,i,l,s,u,d,m;return a.a.createElement(Ee.Navbar,{isFullscreen:!0,leftMenu:a.a.createElement(a.a.Fragment,null,a.a.createElement(ve.a.Item,{href:"https://decentraland.org"},"HOME"),a.a.createElement(ve.a.Item,{active:!0,href:"https://play.decentraland.org",onClick:function(e){return e.preventDefault()}},"PLAY"),a.a.createElement(ve.a.Item,{href:"https://market.decentraland.org"},null===(e=Ee.Navbar.defaultProps.i18n)||void 0===e||null===(t=e.menu)||void 0===t?void 0:t.marketplace),a.a.createElement(ve.a.Item,{href:"https://builder.decentraland.org"},null===(n=Ee.Navbar.defaultProps.i18n)||void 0===n||null===(r=n.menu)||void 0===r?void 0:r.builder),a.a.createElement(ve.a.Item,{href:"https://docs.decentraland.org"},null===(o=Ee.Navbar.defaultProps.i18n)||void 0===o||null===(c=o.menu)||void 0===c?void 0:c.docs),a.a.createElement(ve.a.Item,{href:"https://events.decentraland.org"},null===(i=Ee.Navbar.defaultProps.i18n)||void 0===i||null===(l=i.menu)||void 0===l?void 0:l.events),a.a.createElement(ve.a.Item,{href:"https://dao.decentraland.org"},null===(s=Ee.Navbar.defaultProps.i18n)||void 0===s||null===(u=s.menu)||void 0===u?void 0:u.dao),a.a.createElement(ve.a.Item,{href:"https://decentraland.org/blog"},null===(d=Ee.Navbar.defaultProps.i18n)||void 0===d||null===(m=d.menu)||void 0===m?void 0:m.blog)),rightMenu:a.a.createElement(he,null)})})),ye=n(83),we=function(e){return a.a.createElement("div",{id:"banner-stream",className:"banner-container"},a.a.createElement("div",{className:"banner-close-button",onClick:e.onClose}),a.a.createElement("div",{className:"banner-text"},"You are viewing a stream because Decentraland is only available on desktop.",a.a.createElement("br",null),a.a.createElement("a",{href:"https://decentraland.org",rel:"noreferrer noopener",target:"_blank"},"Learn more")))};n(1022);var Ce=Object(c.b)((function(e){return{src:Object(ye.b)(e,ye.a.Stream)}}))((function(e){var t=Object(r.useState)(!0),n=Object(T.a)(t,2),o=n[0],c=n[1],i=Object(r.useState)((function(){return{height:0,width:0}})),l=Object(T.a)(i,2),s=l[0],u=l[1];return Object(r.useEffect)((function(){var e=document.getElementById("root");e&&(e.className+=" full");var t=function(){return u({height:window.innerHeight,width:window.innerWidth})};return t(),window.addEventListener("resize",t),function(){window.removeEventListener("resize",t),e&&(e.className=e.className.replace(" full",""))}}),[]),e.src&&0!==s.height&&0!==s.width?a.a.createElement("div",{className:"StreamContainer"},o&&a.a.createElement(we,{onClose:function(){return c(!1)}}),a.a.createElement("iframe",{title:"Decentraland Stream",src:e.src,width:s.width,height:s.height,allowFullScreen:!0})):null}));var Oe,Ne=Object(c.b)((function(e){var t,n;return{hasStream:!!Object(ye.b)(e,ye.a.Stream),hasBanner:!!e.banner.banner,sessionReady:!!(null===(t=e.session)||void 0===t?void 0:t.ready),rendererReady:!!(null===(n=e.renderer)||void 0===n?void 0:n.ready),error:!!e.error.error,sound:!0}}))((function(e){var t=Object(r.useMemo)((function(){return Object(f.b)()}),[]),n=Object(p.useMobileMediaQuery)();return e.hasStream&&(n||t)?a.a.createElement(Ce,null):e.error?a.a.createElement(A,null):e.rendererReady?a.a.createElement(a.a.Fragment,null):e.sessionReady?a.a.createElement(pe,null):a.a.createElement("div",{className:"WebsiteApp ".concat(e.hasBanner?"withBanner":"")},!Object(B.b)()&&e.sound&&a.a.createElement(ne,{track:"".concat("https://cdn.decentraland.org/@dcl/explorer-website/0.0.1-2066313608.commit-304628c","/tone4.mp3"),play:!0}),a.a.createElement(fe,null),!Object(B.b)()&&a.a.createElement(ge,null),a.a.createElement(X,null),!Object(B.b)()&&a.a.createElement(ae,null),!Object(B.b)()&&a.a.createElement(de,null))})),je=n(1),Re=n.n(je),ke=n(8),Le=n(190),xe=n(94),Ae=Object(u.a)(Object(ke.a)(Re.a.mark((function e(){var t;return Re.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Object(Le.fetchFlags)({applicationName:xe.a});case 2:t=e.sent,l.d.dispatch(Object(E.p)(t));case 4:case"end":return e.stop()}}),e)}))));Object(i.b)(),Object(i.a)(),(Oe=l.d).subscribe((function(){return function(e){var t,n,r,a=!!(null===(t=e.session)||void 0===t?void 0:t.ready),o=!!(null===(n=e.renderer)||void 0===n?void 0:n.ready),c=!!(null===(r=e.error)||void 0===r?void 0:r.error);!m&&!c&&o&&a?(m=!0,document.getElementById("root").style.display="none"):!m||!c&&o&&a||(m=!1,document.getElementById("root").style.display="block")}(Oe.getState())})),o.render(r.createElement(r.StrictMode,null,r.createElement(c.a,{store:l.d},r.createElement(Ne,null))),document.getElementById("root"),(function(){d(),Object(f.a)(),Ae(),Object(B.a)()}))},112:function(e,t,n){"use strict";n.d(t,"b",(function(){return u})),n.d(t,"c",(function(){return m})),n.d(t,"a",(function(){return p}));var r=n(1),a=n.n(r),o=n(8),c=n(93),i=n(189),l=n(45),s=new Map([[1,"wss://mainnet.infura.io/ws/v3/31afa49f0c87489d9ec71eba2808b63f"],[3,"wss://ropsten.infura.io/ws/v3/31afa49f0c87489d9ec71eba2808b63f"]]);function u(e,t){return d.apply(this,arguments)}function d(){return(d=Object(o.a)(a.a.mark((function e(t,n){var r,o;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(null!==t){e.next=5;break}if(r=s.get(n)){e.next=4;break}throw new Error("Can't get RPC for chainId "+n);case 4:return e.abrupt("return",{provider:new i.WebSocketProvider(r),chainId:n});case 5:return e.next=7,c.connection.connect(t,n);case 7:return o=e.sent,e.abrupt("return",{provider:o.provider,chainId:o.chainId});case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function m(){return f.apply(this,arguments)}function f(){return(f=Object(o.a)(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,Promise.race([c.connection.tryPreviousConnection(),new Promise((function(e,t){return setTimeout((function(){return t("Connection timeout")}),1e4)}))]);case 3:return e.abrupt("return",e.sent);case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return",null);case 9:case"end":return e.stop()}}),e,null,[[0,6]])})))).apply(this,arguments)}function p(){return E.apply(this,arguments)}function E(){return(E=Object(o.a)(a.a.mark((function e(){return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,c.connection.disconnect();case 3:return e.abrupt("return",e.sent);case 6:return e.prev=6,e.t0=e.catch(0),Object(l.a)(e.t0),e.abrupt("return");case 10:case"end":return e.stop()}}),e,null,[[0,6]])})))).apply(this,arguments)}},127:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return l})),n.d(t,"c",(function(){return s}));var r=n(186),a=n(17),o=n(13),c=n(48),i=Object(c.a)((function(){s()||o.d.dispatch(Object(a.l)(o.a.NOT_RECOMMENDED))})),l=Object(c.a)((function(){return!(!/Mobi/i.test(navigator.userAgent)&&!/Android/i.test(navigator.userAgent))||(!!/iPad|iPhone|iPod/.test(navigator.platform)||!!(/Macintosh/i.test(navigator.userAgent)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>1))})),s=Object(c.a)((function(){var e=Object(r.a)(navigator.userAgent);if(!e)return!1;switch(e.name){case"chrome":case"chromium-webview":case"edge-chromium":case"firefox":return!0;default:return!1}}))},13:function(e,t,n){"use strict";n.d(t,"c",(function(){return f})),n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return E})),n.d(t,"d",(function(){return v}));var r=n(126),a=n(20),o=n(93),c=n(53),i=n(17),l=n(435),s=n(74),u=n(44),d=n(94);var m={sessionId:Object(l.v4)(),connection:null,kernelState:null,ready:!1};var f,p,E;n(747);!function(e){e.LOADING="loading",e.FATAL="fatal",e.COMMS="comms",e.NEW_LOGIN="newlogin",e.NOT_MOBILE="nomobile",e.NOT_SUPPORTED="notsupported",e.NET_MISMATCH="networkmismatch",e.AVATAR_ERROR="avatarerror",e.METAMASK_LOCKED="METAMASK_LOCKED"}(f||(f={})),function(e){e.NOT_RECOMMENDED="notrecommended"}(p||(p={})),function(e){e.NONE="none",e.NEW_VERSION="new_version",e.DOWNLOADING="downloading",e.READY="ready",e.EXECUTED="executed"}(E||(E={}));var h=Object(r.combineReducers)({kernel:function(e,t){return t.type===i.h?Object(a.a)(Object(a.a)({},e),{},{ready:!0,kernel:t.payload}):e||{ready:!1,kernel:null}},session:function(e,t){if(!e)return m;if(t.type===i.f){var n=t.payload,r=n.loginStatus===c.LoginState.SIGN_UP||n.loginStatus===c.LoginState.WAITING_PROFILE||n.loginStatus===c.LoginState.COMPLETED;return Object(a.a)(Object(a.a)({},e),{},{connection:o.connection.getConnectionData()||null,kernelState:n,ready:r})}return e},renderer:function(e,t){return e&&t.type===i.j?Object(a.a)(Object(a.a)({},e),{},{ready:t.payload.ready}):e&&t.type===i.k?Object(a.a)(Object(a.a)({},e),{},{visible:t.payload.visible}):e&&t.type===i.i?Object(a.a)(Object(a.a)({},e),{},{loading:t.payload}):e||{ready:!1,version:"latest",visible:!1,loading:null}},error:function(e,t){if(t.type===i.g){var n=t.payload;return n?{error:{details:Object(s.a)(n.error),type:n.code}}:{error:null}}return e||{error:null}},banner:function(e,t){return t.type===i.a?{banner:t.payload.banner}:e||{banner:null}},download:function(e,t){var n={progress:0,currentState:E.NONE,authCompleted:!1,ready:!1};return Object(u.b)()?(e=e||n,t.type===i.c?e=Object(a.a)(Object(a.a)({},e),{},{progress:t.payload.progress,currentState:E.DOWNLOADING}):t.type===i.d?e=Object(a.a)(Object(a.a)({},e),{},{progress:t.payload.progress,currentState:E.READY}):t.type===i.b&&(e=Object(a.a)(Object(a.a)({},e),{},{progress:t.payload.progress,currentState:E.NEW_VERSION})),t.type===i.f&&t.payload.loginStatus===c.LoginState.WAITING_RENDERER&&(e=Object(a.a)(Object(a.a)({},e),{},{authCompleted:!0})),e.authCompleted&&e.currentState===E.READY&&(window.require("electron").ipcRenderer.send("executeProcess"),e=Object(a.a)(Object(a.a)({},e),{},{currentState:E.EXECUTED,ready:!0})),e):e||n},featureFlags:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d.b,t=arguments.length>1?arguments[1]:void 0;if(t.type===i.e){var n=t.payload;return Object(a.a)(Object(a.a)({},e),{},{flags:Object(a.a)(Object(a.a)({},e.flags),n.flags),variants:Object(a.a)(Object(a.a)({},e.variants),n.variants)})}return e}}),b=function(e){return e},v=Object(r.createStore)(h,{},b())},17:function(e,t,n){"use strict";n.d(t,"f",(function(){return a})),n.d(t,"g",(function(){return o})),n.d(t,"h",(function(){return c})),n.d(t,"a",(function(){return i})),n.d(t,"i",(function(){return l})),n.d(t,"j",(function(){return s})),n.d(t,"k",(function(){return u})),n.d(t,"c",(function(){return d})),n.d(t,"d",(function(){return m})),n.d(t,"b",(function(){return f})),n.d(t,"e",(function(){return p})),n.d(t,"q",(function(){return E})),n.d(t,"r",(function(){return h})),n.d(t,"s",(function(){return b})),n.d(t,"t",(function(){return v})),n.d(t,"u",(function(){return g})),n.d(t,"l",(function(){return y})),n.d(t,"n",(function(){return w})),n.d(t,"o",(function(){return C})),n.d(t,"m",(function(){return O})),n.d(t,"p",(function(){return N}));var r=n(50),a="Set kernel account state",o="Set kernel error",c="Set kernel loaded",i="Set banenr",l="Set renderer loading",s="Set renderer ready",u="Set renderer visible",d="[DownloadProgress]",m="[DownloadReady]",f="[DownloadNewVersion]",p="Set feature flags",E=function(e){return Object(r.action)(a,e)},h=function(e){return Object(r.action)(o,e)},b=function(e){return Object(r.action)(c,e)},v=function(e){return Object(r.action)(l,e)},g=function(e){return Object(r.action)(s,{ready:e})},y=function(e){return Object(r.action)(i,{banner:e})},w=function(e){return Object(r.action)(d,{progress:e})},C=function(){return Object(r.action)(m,{})},O=function(){return Object(r.action)(f,{})},N=function(e){return Object(r.action)(p,e)}},188:function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return O})),n.d(t,"b",(function(){return I}));var r=n(20),a=n(1),o=n.n(a),c=n(8),i=n(112),l=n(63),s=n(436),u=n(17),d=n(13),m=n(190),f=n(438),p=n(45),E=n(191),h=n(46),b=n(189),v=n(74),g=n(44);function y(e){return w.apply(this,arguments)}function w(){return(w=Object(c.a)(o.a.mark((function e(t){var n;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=new b.RequestManager(t),e.t0=parseInt,e.next=4,n.net_version();case 4:return e.t1=e.sent,e.abrupt("return",(0,e.t0)(e.t1,10));case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function C(){var e=1;return"ropsten"===h.c&&(e=3),e}function O(e){return N.apply(this,arguments)}function N(){return(N=Object(c.a)(o.a.mark((function e(t){var n,r,a,c,l,s;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n=C(),e.next=4,Object(i.b)(t,n);case 4:if(r=e.sent,a=r.provider,(c=r.chainId)===n){e.next=10;break}return d.d.dispatch(Object(u.r)({error:new Error("Network mismatch NETWORK url param is not equal to the provided by Ethereum Provider (wanted: ".concat(n," actual: ").concat(c,", E01)")),code:d.c.NET_MISMATCH})),e.abrupt("return");case 10:return e.next=12,y(a);case 12:if((l=e.sent)===n){e.next=16;break}return d.d.dispatch(Object(u.r)({error:new Error("Network mismatch NETWORK url param is not equal to the provided by Ethereum Provider (wanted: ".concat(n," actual: ").concat(l,", E02)")),code:d.c.NET_MISMATCH})),e.abrupt("return");case 16:if(s=d.d.getState().kernel.kernel){e.next=19;break}throw new Error("Kernel did not load yet");case 19:s.authenticate(a,null==t),e.next=32;break;case 22:if(e.prev=22,e.t0=e.catch(0),!e.t0||"object"!==typeof e.t0||!["Fortmatic: User denied account access.","The user rejected the request."].includes(e.t0.message)){e.next=26;break}return e.abrupt("return");case 26:if(!e.t0||"object"!==typeof e.t0||"string"!=typeof e.t0.message||!e.t0.message.includes("Already processing eth_requestAccounts.")&&!e.t0.message.includes("Please wait.")){e.next=29;break}return d.d.dispatch(Object(u.r)({error:new Error("Metamask is locked, please open the extension before continuing."),code:d.c.METAMASK_LOCKED})),e.abrupt("return");case 29:Object(i.a)().catch(p.a),Object(p.a)(e.t0),d.d.dispatch(Object(u.r)({error:e.t0}));case 32:case"end":return e.stop()}}),e,null,[[0,22]])})))).apply(this,arguments)}function j(e){return R.apply(this,arguments)}function R(){return(R=Object(c.a)(o.a.mark((function t(n){var r;return o.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!n.startsWith("urn:")){t.next=7;break}return t.next=3,Object(f.resolveUrlFromUrn)(n);case 3:if(!(r=t.sent)){t.next=6;break}return t.abrupt("return",(r+"/").replace(/(\/)+$/,"/"));case 6:throw new Error("Cannot resolve content for URN "+n);case 7:return t.abrupt("return",(new URL("".concat(n),e.location.toString()).toString()+"/").replace(/(\/)+$/,"/"));case 8:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function k(e){return L(e.prefix,e.version)}function L(e,t){return"https://cdn.decentraland.org/".concat(e,"/").concat(t)}function x(e){return A.apply(this,arguments)}function A(){return(A=Object(c.a)(o.a.mark((function e(t){var n,r,a;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new URLSearchParams(document.location.search),globalThis.ROLLOUTS&&globalThis.ROLLOUTS["@dcl/kernel"]&&(globalThis.KERNEL_BASE_URL=k(globalThis.ROLLOUTS["@dcl/kernel"])),globalThis.ROLLOUTS&&globalThis.ROLLOUTS["@dcl/unity-renderer"]&&(globalThis.RENDERER_BASE_URL=k(globalThis.ROLLOUTS["@dcl/unity-renderer"])),n.has("renderer")&&(globalThis.RENDERER_BASE_URL=n.get("renderer")),n.has("kernel-urn")&&(globalThis.KERNEL_BASE_URL=n.get("kernel-urn")),n.has("renderer-branch")&&(globalThis.RENDERER_BASE_URL="https://renderer-artifacts.decentraland.org/branch/".concat(n.get("renderer-branch"))),n.has("kernel-branch")&&(globalThis.KERNEL_BASE_URL="https://sdk-team-cdn.decentraland.org/@dcl/kernel/branch/".concat(n.get("kernel-branch"))),n.has("renderer-version")&&(globalThis.RENDERER_BASE_URL=L("@dcl/unity-renderer",n.get("renderer-version"))),n.has("kernel-version")&&(globalThis.KERNEL_BASE_URL=L("@dcl/kernel",n.get("kernel-version"))),globalThis.KERNEL_BASE_URL||t.variants["explorer-rollout-kernel-version"]&&(r=t.variants["explorer-rollout-kernel-version"].name,globalThis.KERNEL_BASE_URL="urn:decentraland:off-chain:kernel-cdn:".concat(r)),globalThis.RENDERER_BASE_URL||t.variants["explorer-rollout-unity-renderer-version"]&&(a=t.variants["explorer-rollout-unity-renderer-version"].name,globalThis.RENDERER_BASE_URL="urn:decentraland:off-chain:unity-renderer-cdn:".concat(a));case 11:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function T(){return(T=Object(c.a)(o.a.mark((function e(){var t,n,a,c,f,E,h;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return h=function(){f&&Object(l.d)(f,c,E)},t=document.getElementById("gameContainer"),e.next=4,Object(m.fetchFlags)({applicationName:"explorer"});case 4:return n=e.sent,e.next=7,x(n);case 7:return e.t0=s.a,e.next=10,j(globalThis.KERNEL_BASE_URL||"urn:decentraland:off-chain:kernel-cdn:latest");case 10:return e.t1=e.sent,e.t2={},e.t3={baseUrl:e.t1,configurations:e.t2},e.t4=t,e.next=16,j(globalThis.RENDERER_BASE_URL||"urn:decentraland:off-chain:unity-renderer-cdn:latest");case 16:return e.t5=e.sent,e.t6={container:e.t4,baseUrl:e.t5},e.t7={kernelOptions:e.t3,rendererOptions:e.t6},e.next=21,(0,e.t0)(e.t7);case 21:return(a=e.sent).on("trackingEvent",(function(e){var t=e.eventName,n=e.eventData;Object(l.e)(t,Object(r.a)(Object(r.a)({},n),{},{context:n.context||"kernel"}))})),a.on("openUrl",(function(e){var t=e.url,n=window.open(t,"_blank","noopener,noreferrer");null!=n&&(n.opener=null)})),c=!0,f=null,E=void 0,a.on("accountState",(function(e){e.identity&&(c=!!e.isGuest,f=e.identity.address,h()),d.d.dispatch(Object(u.q)(e))})),a.on("signUp",(function(e){E=e.email,h()})),a.on("error",(function(e){d.d.dispatch(Object(u.r)(e)),Object(l.f)(e.error,Object(r.a)({context:"kernel"},e.extra||{})),Object(p.b)("explorer_kernel_error",{error:Object(v.a)(e)}),Object(l.c)()})),a.on("rendererVisible",(function(e){d.d.dispatch(Object(u.u)(e.visible)),e.visible&&(Object(p.b)("enable_renderer",{}),d.d.dispatch(Object(u.r)(null)))})),a.on("loadingProgress",(function(e){d.d.dispatch(Object(u.t)(e))})),a.on("logout",(function(){Object(i.a)().catch(p.a)})),e.abrupt("return",a);case 34:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function S(){return(S=Object(c.a)(o.a.mark((function e(t){var n,r;return o.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(Object(g.b)()){e.next=12;break}return e.next=3,Object(i.c)();case 3:if(!(n=e.sent)||!n.account){e.next=12;break}return e.next=7,y(n.provider);case 7:return r=e.sent,e.next=10,t.hasStoredSession(n.account,r);case 10:e.sent&&(Object(p.b)("automatic_relogin",{provider_type:n.providerType}),O(n.providerType).catch(p.a));case 12:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function I(){h.c&&"mainnet"!==h.c&&"ropsten"!==h.c?d.d.dispatch(Object(u.r)({error:new Error("Invalid NETWORK url param, valid options are 'ropsten' and 'mainnet'"),code:d.c.FATAL})):h.b?d.d.dispatch(Object(u.r)({error:new Error('The "ENV" URL parameter is no longer supported. Please use NETWORK=ropsten in the cases where ENV=zone was used'),code:d.c.FATAL})):(Object(p.b)("initialize_versions",Object(E.a)({})),function(){return T.apply(this,arguments)}().then((function(e){return d.d.dispatch(Object(u.s)(e)),function(e){return S.apply(this,arguments)}(e)})).catch((function(e){d.d.dispatch(Object(u.r)({error:e})),Object(p.a)(e)})))}globalThis.KERNEL_BASE_URL="",globalThis.RENDERER_BASE_URL=""}).call(this,n(30))},191:function(e,t,n){"use strict";function r(e){var t=globalThis.ROLLOUTS||{};for(var n in t)("_site"===n||n.startsWith("@dcl"))&&t[n]&&t[n].version&&(e[n]=t[n].version);return e}n.d(t,"a",(function(){return r}))},424:function(e,t,n){},436:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));var r=n(1),a=n.n(r),o=n(8),c=n(437),i=n.n(c);function l(e){return s.apply(this,arguments)}function s(){return(s=Object(o.a)(a.a.mark((function e(t){var n,r;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=new URL("index.js",t.kernelOptions.baseUrl).toString(),e.next=3,u(n);case 3:if(console.log("Kernel: ",n),r=globalThis.DecentralandKernel){e.next=7;break}throw new Error("DecentralandKernel could not be loaded");case 7:return e.next=9,r.initKernel(t);case 9:return e.abrupt("return",e.sent);case 10:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function u(e){return d.apply(this,arguments)}function d(){return(d=Object(o.a)(a.a.mark((function e(t){var n,r,o;return a.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=i()(),r=document.createElement("script"),o="If this error persists, please try emptying the cache of your browser and reloading this page.",r.src=t,r.async=!0,r.type="application/javascript",r.crossOrigin="anonymous",r.addEventListener("load",n.resolve),r.addEventListener("error",(function(e){return n.reject(e.error||new Error("The script ".concat(t," failed to load.\n").concat(o)))})),r.addEventListener("abort",(function(){return n.reject(new Error("Script loading aborted: ".concat(t,".\nThis may be caused because you manually stopped the loading or because of a network error.\n").concat(o)))})),document.body.appendChild(r),e.abrupt("return",n);case 12:case"end":return e.stop()}}),e)})))).apply(this,arguments)}},44:function(e,t,n){"use strict";(function(e){n.d(t,"b",(function(){return c})),n.d(t,"a",(function(){return i}));var r=n(17),a=n(13),o=n(48),c=Object(o.a)((function(){return"undefined"!==typeof window&&"object"===typeof window.process&&"renderer"===window.process.type||(!("undefined"===typeof e||"object"!==typeof e.versions||!e.versions.electron)||"object"===typeof navigator&&"string"===typeof navigator.userAgent&&navigator.userAgent.indexOf("Electron")>=0)})),i=Object(o.a)((function(){if(c()){var e=window.require("electron").ipcRenderer;e.on("downloadState",(function(e,t){switch(t.type){case"ERROR":a.d.dispatch(Object(r.r)({error:new Error(t.message||"Unknown launcher error")}));break;case"NEW_VERSION":a.d.dispatch(Object(r.m)()),e.sender.send("download");break;case"READY":a.d.dispatch(Object(r.o)());break;case"PROGRESS":a.d.dispatch(Object(r.n)(t.progress))}})),e.send("checkVersion"),console.log("Electron found")}}))}).call(this,n(34))},45:function(e,t,n){"use strict";n.d(t,"b",(function(){return p})),n.d(t,"a",(function(){return E}));var r=n(20),a=n(63),o=n(74),c=n(48),i=n(127),l=n(46),s=window.ethereum,u=window.ROLLOUTS,d=Object(c.a)((function(){return s?(null===s||void 0===s?void 0:s.isMetaMask)?"metamask":(null===s||void 0===s?void 0:s.isDapper)?"dapper":(null===s||void 0===s?void 0:s.isCucumber)?"cucumber":(null===s||void 0===s?void 0:s.isTrust)?"trust":(null===s||void 0===s?void 0:s.isToshi)?"coinbase":(null===s||void 0===s?void 0:s.isGoWallet)?"goWallet":(null===s||void 0===s?void 0:s.isAlphaWallet)?"alphaWallet":(null===s||void 0===s?void 0:s.isStatus)?"status":"other":"none"})),m=Object(c.a)((function(){return s?Object.keys(s).filter((function(e){return e.startsWith("is")&&"boolean"===typeof s[e]})).join(","):""})),f=Object(c.a)((function(){var e={rendererType:l.d};if(u)for(var t=0,n=Object.keys(u);t<n.length;t++){var r=n[t],a=u[r];a&&a.prefix&&a.version&&(e[a.prefix||r]=a.version)}return e}));function p(e,t){var n=d(),o=m(),c=Object(i.c)(),l=f();Object(a.e)(e,Object(r.a)(Object(r.a)({wallet:n,walletProps:o,recommendedBrowser:c},t),l))}function E(e){console.error(e),Object(a.f)(e,{context:"explorer-website"}),p("explorer_website_error",{error:Object(o.a)(e)})}},46:function(e,t,n){"use strict";n.d(t,"a",(function(){return a})),n.d(t,"b",(function(){return o})),n.d(t,"c",(function(){return c})),n.d(t,"d",(function(){return i}));var r=new URLSearchParams(document.location.search||""),a=r.has("DEBUG_ANALYTICS"),o=r.get("ENV"),c=r.get("NETWORK"),i=r.get("ws")?"native":"web"},48:function(e,t,n){"use strict";function r(e){var t=null;return function(){return t||(t={value:e()}),t.value}}n.d(t,"a",(function(){return r}))},538:function(e,t){},574:function(e,t){},576:function(e,t){},600:function(e,t){},602:function(e,t){},614:function(e,t){},615:function(e,t){},63:function(e,t,n){"use strict";n.d(t,"b",(function(){return b})),n.d(t,"a",(function(){return g})),n.d(t,"c",(function(){return y})),n.d(t,"f",(function(){return w})),n.d(t,"d",(function(){return C})),n.d(t,"e",(function(){return j}));var r,a,o=n(1),c=n.n(o),i=n(20),l=n(8),s=n(13),u=n(83),d=n(74),m=n(45),f=n(44),p=n(46),E=!1;!function(e){e.PRD="1plAT9a2wOOgbPCrTaU8rgGUMzgUTJtU",e.DEV="a4h4BC4dL1v7FhIQKKuPHEdZIiNRDVhc"}(r||(r={})),function(e){e.Web="44963d3f89db4e5cbf552faba06c6ec0",e.Desktop="73e7ead7a15d4de3b26cecdda99b63c2"}(a||(a={}));var h={isAuthenticated:!1,isGuest:!1,afterFatalError:!1};function b(){return globalThis.location.host.endsWith(".decentraland.org")?O(r.PRD):O(r.DEV)}function v(e){var t=new URLSearchParams(globalThis.location.search||"");t.has("realm")&&(e.realm=t.get("realm")),t.has("position")&&(e.position=t.get("position")),e.dcl_is_authenticated=h.isAuthenticated,e.dcl_is_guest=h.isGuest,e.dcl_disabled_analytics=h.afterFatalError,e.dcl_renderer_type=p.d}function g(){var e=window.Rollbar,t=Object(f.b)()?a.Desktop:a.Web;e&&e.configure({accessToken:t,transform:function(e){v(e)}})}function y(){Object(m.b)("disable_analytics",{}),h.afterFatalError=!0,E=!0,window.Rollbar&&window.Rollbar.configure({enabled:!1}),p.a&&console.info("explorer-website: DEBUG_ANALYTICS disableAnalytics")}function w(e,t){E||(p.a&&console.info("explorer-website: DEBUG_ANALYTICS trackCriticalError ",e),window.Rollbar&&("string"===typeof e?window.Rollbar.critical(Object(d.a)(e),t):e&&e instanceof Error?window.Rollbar.critical(Object(d.a)(e),Object.assign(e,t,{fullErrorStack:e.toString()})):window.Rollbar.critical(Object(d.a)(e),t)))}function C(e,t,n){if(h.isGuest=t,h.isAuthenticated=!!e,window.analytics){var r={sessionId:Object(u.c)(s.d.getState()).sessionId,email:n};p.a&&console.info("explorer-website: DEBUG_ANALYTICS identifyUser",e,r),t?window.analytics.identify(r):window.analytics.identify(e,r)}}function O(e){return N.apply(this,arguments)}function N(){return(N=Object(l.a)(c.a.mark((function e(t){return c.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:window.analytics.load&&(window.analytics.load(t),window.analytics.page(),window.analytics.ready((function(){window.analytics.timeout(1e3)})));case 1:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function j(e,t){if(window.analytics&&!E){var n=Object(i.a)(Object(i.a)({},t),Object(u.c)(s.d.getState()));v(n),p.a&&console.info("explorer-website: DEBUG_ANALYTICS trackEvent",e,n),window.analytics.track(e,n)}}},636:function(e,t){},639:function(e,t){},650:function(e,t){},652:function(e,t){},727:function(e,t){},74:function(e,t,n){"use strict";function r(e){return"object"===typeof e?e.message?e.message:"[object Object]"===e.toString()?JSON.stringify(e):e.toString():"string"===typeof e?e:Object.prototype.toString.call(e)}n.d(t,"a",(function(){return r}))},757:function(e,t,n){},760:function(e,t,n){},772:function(e,t){},773:function(e,t){},83:function(e,t,n){"use strict";n.d(t,"c",(function(){return o})),n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return i}));var r,a=n(94);function o(e){return{sessionId:e.session.sessionId}}function c(e,t){var n="".concat(a.a,"-").concat(t);return!!(e.featureFlags||a.b).flags[n]}function i(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(c(e,t)){var r,o,i="".concat(a.a,"-").concat(t),l=e.featureFlags.variants[i];if(null===l||void 0===l||null===(r=l.payload)||void 0===r?void 0:r.value)return null===l||void 0===l||null===(o=l.payload)||void 0===o?void 0:o.value}return n}!function(e){e.Stream="stream"}(r||(r={}))},87:function(e,t,n){},94:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return a}));var r="explorer",a={flags:{},variants:{}}},984:function(e,t,n){},985:function(e,t,n){},986:function(e,t,n){},987:function(e,t,n){},988:function(e,t,n){},989:function(e,t,n){}},[[1024,1,2]]]);
|
|
2
|
-
//# sourceMappingURL=main.3e21aa87.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["integration/kernel.ts","images/errors/error-robotmobile.png","components/errors/ErrorAvatarLoading.tsx","images/errors/error-robotdown.png","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","components/errors/ErrorContainer.tsx","components/common/Layout/Container.tsx","components/auth/EthConnectAdvice.tsx","components/auth/EthWalletSelector.tsx","images/guest.jpg","images/wallets.jpg","components/auth/LoginItemContainer.tsx","components/auth/LoginContainer.tsx","images/logo.png","components/common/Audio.tsx","components/common/Layout/Accordion.tsx","components/auth/BeginnersGuide.tsx","components/common/Icon/Reddit.tsx","components/common/Icon/Github.tsx","components/common/Icon/Twitter.tsx","components/common/Icon/Discord.tsx","components/common/Layout/BigFooter.tsx","components/banners/BannerNotSupported.tsx","components/banners/BannerContainer.tsx","components/common/Loading/LoadingRender.tsx","components/common/Button/JoinDiscord.tsx","components/common/Layout/Navbar.tsx","components/banners/BannerStream.tsx","components/common/StreamContainer.tsx","components/App.tsx","integration/featureFlags.ts","index.tsx","eth/provider.ts","integration/browser.ts","state/reducers.ts","state/redux.ts","state/actions.ts","kernel-loader/index.ts","utils/rolloutVersions.ts","kernel-loader/injector.ts","integration/desktop.ts","utils/tracking.ts","integration/queryParamsConfig.ts","utils/callOnce.ts","integration/analytics.ts","utils/errorToString.ts","state/selectors.ts","state/types.ts"],"names":["initializeKernel","callOnce","startKernel","id","callback","element","document","getElementById","style","opacity","setTimeout","display","fadeoutElement","ROOT_HIDDEN","ErrorAvatarLoading","className","href","alt","src","errorImage","ErrorComms","onClick","window","location","reload","defaultDetails","ErrorFatal","props","details","length","map","$","ix","key","ErrorMetamaskLocked","closeError","ErrorNetworkMismatch","NETWORK","onLogout","ErrorNewLogin","ErrorNoMobile","zIndex","width","height","backgroundColor","position","margin","ErrorNotSupported","connect","state","error","dispatch","setKernelError","disconnect","type","ErrorType","COMMS","METAMASK_LOCKED","NEW_LOGIN","NOT_MOBILE","NOT_SUPPORTED","NET_MISMATCH","AVATAR_ERROR","Fragment","Container","Content","EthConnectAdvice","React","memo","provider","ProviderType","FORTMATIC","INJECTED","WALLET_CONNECT","EthWalletSelector","open","loading","availableProviders","onLogin","onCancel","anchor","useMemo","a","createElement","target","rel","browserWallet","includes","isCucumberProvider","LoginModalOptionType","SAMSUNG","isDapperProvider","DAPPER","METAMASK","handleLoginWalletConnect","useCallback","handleLoginFortmatic","handleLoginInjected","click","LoginModal","onClose","i18n","title","subtitle","Loader","active","size","isElectron","Option","LoginItemContainer","children","undefined","LoginWalletItem","wallets","Button","primary","disabled","LoginGuestItem","guest","defaultAvailableProviders","enableProviders","Set","connection","getAvailableProviders","filter","has","stage","session","kernelState","loginStatus","providerType","kernelReady","kernel","ready","rendererReady","renderer","isGuest","isWallet","track","provider_type","authenticate","useState","showWalletSelector","setShowWalletSelector","onSelect","onGuest","LoginState","SIGNATURE_PENDING","WAITING_PROFILE","WAITING_RENDERER","LOADING","providerInUse","AUTHENTICATING","COMPLETED","Audio","player","this","updatePlayer","play","catch","e","pause","ref","audio","autoPlay","loop","Component","Accordion","setOpen","useRef","current","offsetHeight","BeginnersGuide","Reddit","viewBox","fill","d","transform","Github","Twitter","Discord","year","Math","max","Date","getFullYear","BigFooter","versions","injectVersions","JSON","stringify","BannerNotSupported","banner","setBanner","BannerType","NOT_RECOMMENDED","LoadingRender","process","JoinDiscord","Navbar","isFullscreen","leftMenu","Item","preventDefault","Base","defaultProps","menu","marketplace","builder","docs","events","dao","blog","rightMenu","BannerStream","getFeatureVariant","FeatureFlags","Stream","setSize","useEffect","root","resize","innerHeight","innerWidth","addEventListener","removeEventListener","replace","allowFullScreen","store","hasStream","hasBanner","sessionReady","sound","mobile","isMobile","small","useMobileMediaQuery","initializeFeatureFlags","fetchFlags","applicationName","FF_APPLICATION_NAME","ff","setFeatureFlags","configureSegment","configureRollbar","subscribe","hideRoot","getState","ReactDOM","initializeBrowserRecommendation","initializeDesktopApp","chainIdRpc","Map","getEthereumProvider","chainId","rpc","get","Error","WebSocketProvider","result","restoreConnection","Promise","race","tryPreviousConnection","_","reject","defaultWebsiteErrorTracker","isRecommendedBrowser","test","navigator","userAgent","platform","maxTouchPoints","detected","detect","name","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","SET_KERNEL_ERROR","errorToString","code","SET_BANNER","download","defaultDownload","progress","currentState","NONE","authCompleted","SET_DOWNLOAD_PROGRESS","DOWNLOADING","SET_DOWNLOAD_READY","READY","SET_DOWNLOAD_NEW_VERSION","NEW_VERSION","require","ipcRenderer","send","EXECUTED","featureFlags","defaultFeatureFlagsState","SET_FEATURE_FLAGS","flags","variants","middleware","x","createStore","setKernelAccountState","accountState","setKernelLoaded","setRendererLoading","progressEvent","setRendererReady","setDownloadProgress","setDownloadReady","setDownloadNewVersion","getChainIdFromProvider","rm","RequestManager","parseInt","net_version","getWantedChainId","wantedChainId","providerChainId","message","resolveBaseUrl","urn","startsWith","resolveUrlFromUrn","t","URL","global","toString","cdnFromRollout","rollout","cdnFromPrefixVersion","prefix","getVersions","qs","URLSearchParams","search","globalThis","ROLLOUTS","KERNEL_BASE_URL","RENDERER_BASE_URL","identify","lastIdentity","identifyUser","email","container","injectKernel","baseUrl","configurations","kernelOptions","rendererOptions","on","eventName","eventData","internalTrackEvent","context","url","newWindow","opener","account","identity","address","data","trackError","extra","disableAnalytics","event","hasStoredSession","FATAL","ENV","initKernel","then","initLogin","rolloutsInfo","component","options","kernelUrl","injectScript","console","log","DecentralandKernel","theFuture","future","theScript","persistMessage","async","crossOrigin","resolve","body","appendChild","electron","indexOf","sender","ethereum","rollouts","getWalletName","isMetaMask","isDapper","isCucumber","isTrust","isToshi","isGoWallet","isAlphaWallet","isStatus","getWalletProps","Object","keys","prop","join","getEnvironmentProperties","properties","rendererType","RENDERER_TYPE","lib","wallet","walletProps","recommendedBrowser","environmentProperties","DEBUG_ANALYTICS","fun","value","AnalyticsAccount","RollbarAccount","analyticsDisabled","authFlags","isAuthenticated","afterFatalError","host","endsWith","initialize","PRD","DEV","injectTrackingMetadata","realm","dcl_is_authenticated","dcl_is_guest","dcl_disabled_analytics","dcl_renderer_type","Rollbar","accessToken","Desktop","Web","configure","enabled","info","critical","assign","fullErrorStack","analytics","userTraits","getRequiredAnalyticsContext","segmentKey","load","page","timeout","prototype","call","isFeatureEnabled","defaultValue","variant"],"mappings":"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","file":"static/js/main.3e21aa87.chunk.js","sourcesContent":["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}","export default __webpack_public_path__ + \"static/media/error-robotmobile.9df34375.png\";","import React from 'react'\n\nimport './errors.css'\nimport errorImage from '../../images/errors/error-robotmobile.png'\n\nexport const ErrorAvatarLoading: React.FC = () => (\n <div id=\"error-avatarerror\" className=\"error-container\">\n <div className=\"error-background\" />\n <div className=\"errormessage\">\n <div className=\"errortext col\">\n <div className=\"error\">Oops...</div>\n <div className=\"communicationslink\">\n There was a technical issue and we were unable to retrieve your avatar information\n </div>\n <div className=\"givesomedetailof\">\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 </div>\n </div>\n <div className=\"errorimage col\">\n <img alt=\"\" className=\"error-image\" src={errorImage} />\n </div>\n </div>\n </div>\n)\n","export default __webpack_public_path__ + \"static/media/error-robotdown.ee4685c4.png\";","import React from 'react'\nimport './errors.css'\nimport errorImage from '../../images/errors/error-robotdown.png'\n\nexport const ErrorComms: React.FC = () => (\n <div id=\"error-comms\" className=\"error-container\">\n <div className=\"error-background\" />\n <div className=\"errormessage\">\n <div className=\"errortext col\">\n <div className=\"error\">Oops</div>\n <div className=\"communicationslink\">\n A communication link could not be\n <br />\n established with other peers\n </div>\n <div className=\"givesomedetailof\">\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 </div>\n <div className=\"cta\">\n <button\n className=\"retry\"\n onClick={() => {\n window.location.reload()\n }}\n >\n Reload\n </button>\n </div>\n </div>\n <div className=\"errorimage col\">\n <div className=\"imagewrapper\">\n <img alt=\"\" className=\"error-image\" src={errorImage} />\n </div>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\n\nimport './errors.css'\nimport errorImage from '../../images/errors/error-robotdown.png'\n\nconst defaultDetails: (string | JSX.Element)[] = [\n 'If you have any ad blocking extensions,',\n 'try turning them off for this site.',\n '',\n 'Loading should not take any longer than 2-3 minutes.',\n 'If you seem to be stuck, make sure hardware acceleration is on.',\n <a href=\"https://docs.decentraland.org/decentraland/hardware-acceleration/\">LEARN MORE</a>\n]\n\nexport const ErrorFatal = (props: { details?: typeof defaultDetails }) => {\n const details = props.details && props.details.length ? props.details : defaultDetails\n\n return (\n <div id=\"error-fatal\" className=\"error-container\">\n <div className=\"error-background\" />\n <div className=\"errormessage\">\n <div className=\"errortext col\">\n <div className=\"error\">Oops!</div>\n <div className=\"communicationslink\">Something went wrong</div>\n <div className=\"givesomedetailof\">\n {details.map(($, ix) => (\n <div key={ix}>{$}</div>\n ))}\n </div>\n <div className=\"cta\">\n <button\n className=\"retry\"\n onClick={() => {\n window.location.reload()\n }}\n >\n Reload\n </button>\n </div>\n </div>\n <div className=\"errorimage col\">\n <div className=\"imagewrapper\">\n <img alt=\"\" className=\"error-image\" src={errorImage} />\n </div>\n </div>\n </div>\n </div>\n )\n}\n","export default __webpack_public_path__ + \"static/media/robotsmiling.e182d216.png\";","import React from 'react'\n\nimport './errors.css'\nimport errorImage from '../../images/errors/robotsmiling.png'\n\nexport interface ErrorNetworkMismatchProps {\n details: string | null\n closeError(): void\n}\n\nexport const ErrorMetamaskLocked: React.FC<ErrorNetworkMismatchProps> = (props: ErrorNetworkMismatchProps) => {\n return (\n <div id=\"error-networkmismatch\" className=\"error-container\">\n <div className=\"error-background\" />\n <div className=\"errormessage\">\n <div className=\"errortext col\">\n <div className=\"communicationslink\">Before we continue</div>\n {props.details && <div className=\"givesomedetailof\">{props.details}</div>}\n <div className=\"cta\">\n <button className=\"retry\" onClick={props.closeError}>\n Retry\n </button>\n </div>\n </div>\n <div className=\"errorimage col\">\n <div className=\"imagewrapper\">\n <img alt=\"\" className=\"error-image\" src={errorImage} />\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nimport './errors.css'\nimport errorImage from '../../images/errors/robotsmiling.png'\nimport { NETWORK } from '../../integration/queryParamsConfig'\n\nexport interface ErrorNetworkMismatchProps {\n details: string | null\n onLogout: () => void\n}\n\nexport const ErrorNetworkMismatch: React.FC<ErrorNetworkMismatchProps> = (props: ErrorNetworkMismatchProps) => {\n return (\n <div id=\"error-networkmismatch\" className=\"error-container\">\n <div className=\"error-background\" />\n <div className=\"errormessage\">\n <div className=\"errortext col\">\n <div className=\"communicationslink\">A network mismatch was detected</div>\n <div className=\"givesomedetailof\">\n We detected that you are trying to enter the <strong id=\"tld\">{NETWORK || 'mainnet'}</strong> network, and\n your Ethereum wallet is set to other network.\n </div>\n <div className=\"givesomedetailof\">\n To continue, please change the Ethereum network in your wallet to{' '}\n <strong id=\"web3NetGoal\">{NETWORK || 'mainnet'}</strong> and click \"Reload\".\n </div>\n {props.details && <div className=\"givesomedetailof\">Details: {props.details}</div>}\n <div className=\"cta\">\n <button\n className=\"retry\"\n onClick={() => {\n window.location.reload()\n }}\n >\n Reload\n </button>\n <br />\n <button className=\"retry\" onClick={() => props.onLogout({ reload: true })}>\n Log out\n </button>\n </div>\n </div>\n <div className=\"errorimage col\">\n <div className=\"imagewrapper\">\n <img alt=\"\" className=\"error-image\" src={errorImage} />\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nimport './errors.css'\nimport errorImage from '../../images/errors/robotsmiling.png'\n\nexport const ErrorNewLogin: React.FC = () => (\n <div id=\"error-newlogin\" className=\"error-container\">\n <div className=\"error-background\" />\n <div className=\"errormessage\">\n <div className=\"errortext col\">\n <div className=\"error communicationslink\">Another session was detected</div>\n <div className=\"givesomedetailof\">\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 </div>\n <div className=\"cta\">\n <button\n className=\"retry\"\n onClick={() => {\n window.location.reload()\n }}\n >\n Reload\n </button>\n </div>\n </div>\n <div className=\"errorimage col\">\n <div className=\"imagewrapper\">\n <img alt=\"\" className=\"error-image\" src={errorImage} />\n </div>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\n\nimport './errors.css'\nimport errorImage from '../../images/errors/error-robotmobile.png'\n\nexport const ErrorNoMobile: React.FC = () => (\n <div id=\"error-nomobile\" className=\"hidden-error\">\n <div\n className=\"error-background\"\n style={{\n zIndex: 10,\n width: '100%',\n height: '100%',\n backgroundColor: '#0d0c0f'\n }}\n />\n <div className=\"iphone8916\" style={{ zIndex: 11 }}>\n <div\n className=\"div1\"\n style={{\n width: '375px',\n height: '100%',\n position: 'relative',\n margin: 'auto'\n }}\n >\n <div className=\"theclientisonlya\">The client is only available on desktop right now.</div>\n <img alt=\"\" className=\"robotmobilebrowsererror\" src={errorImage} />\n <div className=\"cta\">\n <div\n className=\"signup\"\n onClick={() => {\n window.location.href = 'https://decentraland.org'\n }}\n >\n Learn more about decentraland\n </div>\n </div>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\n\nimport './errors.css'\nimport errorImage from '../../images/errors/error-robotmobile.png'\n\nexport const ErrorNotSupported: React.FC = () => (\n <div id=\"error-notsupported\" className=\"error-container\">\n <div className=\"error-background\" />\n <div className=\"errormessage\">\n <div className=\"errortext col\">\n <div className=\"error\">Error</div>\n <div className=\"communicationslink\">Your browser or device is not supported</div>\n <div className=\"givesomedetailof\">\n The Explorer only works on Chrome or Firefox for Windows, Linux and macOS.\n </div>\n </div>\n <div className=\"errorimage col\">\n <img alt=\"\" className=\"error-image\" src={errorImage} />\n </div>\n </div>\n </div>\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { setKernelError } from '../../state/actions'\nimport { disconnect } from '../../eth/provider'\nimport { ErrorState, ErrorType, StoreType } from '../../state/redux'\nimport { ErrorAvatarLoading } from './ErrorAvatarLoading'\nimport { ErrorComms } from './ErrorComms'\nimport { ErrorFatal } from './ErrorFatal'\nimport { ErrorMetamaskLocked } from './ErrorMetamaskLocked'\nimport { ErrorNetworkMismatch } from './ErrorNetworkMismatch'\nimport { ErrorNewLogin } from './ErrorNewLogin'\nimport { ErrorNoMobile } from './ErrorNoMobile'\nimport { ErrorNotSupported } from './ErrorNotSupported'\n\nconst mapStateToProps = (state: StoreType): Pick<ErrorContainerProps, 'error'> => {\n return {\n error: state.error.error || null\n }\n}\n\nconst mapDispatchToProps = (dispatch: (a: any) => void, state: StoreType): Pick<ErrorContainerProps, 'closeError' | 'onLogout'> => {\n return {\n closeError: () => dispatch(setKernelError(null)),\n onLogout: () => disconnect()\n }\n}\n\nexport interface ErrorContainerProps {\n error: ErrorState['error']\n onLogout(): void\n closeError(): void\n}\n\nexport const ErrorContainer: React.FC<ErrorContainerProps> = (props) => {\n if (!props.error) return <React.Fragment></React.Fragment>\n\n if (props.error.type === ErrorType.COMMS) return <ErrorComms />\n if (props.error.type === ErrorType.METAMASK_LOCKED)\n return <ErrorMetamaskLocked details={props.error.details} closeError={props.closeError} />\n if (props.error.type === ErrorType.NEW_LOGIN) return <ErrorNewLogin />\n if (props.error.type === ErrorType.NOT_MOBILE) return <ErrorNoMobile />\n if (props.error.type === ErrorType.NOT_SUPPORTED) return <ErrorNotSupported />\n if (props.error.type === ErrorType.NET_MISMATCH)\n return <ErrorNetworkMismatch details={props.error.details} onLogout={props.onLogout} />\n if (props.error.type === ErrorType.AVATAR_ERROR) return <ErrorAvatarLoading />\n\n return (\n <React.Fragment>\n <ErrorFatal details={[props.error.details || 'An error happened while loading Decentraland.']} />\n </React.Fragment>\n )\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ErrorContainer)\n","import React from 'react'\nimport './Container.css'\n\nexport const Container: React.FC<React.HTMLAttributes<HTMLDivElement>> = (props) => (\n <div {...props} className={'eth-container ' + (props.className || '')} />\n)\n\nexport const Content: React.FC<React.HTMLAttributes<HTMLDivElement>> = (props) => (\n <div {...props} className={'eth-content ' + (props.className || '')} />\n)\n","import React from 'react'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\n\nexport type EthWalletSelectorAdviceProps = {\n provider?: ProviderType\n}\n\nexport const EthConnectAdvice = React.memo((props: EthWalletSelectorAdviceProps) => {\n switch (props.provider) {\n case ProviderType.FORTMATIC:\n return <span className=\"EthConnectAdvice\">\n Please, follow the instructions of your fortmatic provider to continue.\n </span>\n\n case ProviderType.INJECTED:\n return <span className=\"EthConnectAdvice\">\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\">\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 { 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 provider?: ProviderType\n availableProviders?: ProviderType[]\n onLogin?: (provider: ProviderType | null) => void\n onCancel?: () => void\n}\n\nexport const EthWalletSelector: React.FC<WalletSelectorProps> = React.memo(({\n open,\n loading,\n provider,\n availableProviders,\n onLogin,\n onCancel\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 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={onCancel}\n i18n={{\n title: 'Connect your wallet',\n error: '',\n subtitle: ''\n }}\n >\n {loading && <div className=\"loader-background\">\n <EthConnectAdvice provider={provider} />\n </div>}\n {loading && <Loader active={loading} provider={provider} size=\"massive\" />}\n {!isElectron() && <LoginModal.Option type={browserWallet || LoginModalOptionType.METAMASK} onClick={handleLoginInjected} />}\n <LoginModal.Option type={LoginModalOptionType.FORTMATIC} onClick={handleLoginFortmatic} />\n <LoginModal.Option type={LoginModalOptionType.WALLET_CONNECT} onClick={handleLoginWalletConnect} />\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 </LoginModal>\n})\n","export default __webpack_public_path__ + \"static/media/guest.6eb48000.jpg\";","export default __webpack_public_path__ + \"static/media/wallets.96b87835.jpg\";","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/wallets.jpg'\nimport './LoginItemContainer.css'\nimport { EthConnectAdvice } from './EthConnectAdvice'\n\nexport type LoginItemContainerProps = {\n onClick?: () => void,\n className?: string\n loading?: boolean\n active?: boolean\n provider?: ProviderType\n children?: React.ReactNode\n}\n\nexport const LoginItemContainer = React.memo(function ({ children, className, loading, active, provider, onClick }: LoginItemContainerProps) {\n return <div\n className={`LoginItemContainer ${className || ''} ${loading ? 'loading' : ''} ${active ? 'active' : ''}`}\n onClick={loading ? undefined : onClick}\n >\n <div className=\"LoginItemContainer__BackLayer\" />\n <div className=\"LoginItemContainer__Content\">\n {children}\n </div>\n {loading && active && <div className=\"loader-background\">\n <EthConnectAdvice provider={provider} />\n </div>}\n <Loader active={active && loading} provider={provider} size=\"massive\" />\n </div>\n})\n\nexport const LoginWalletItem = React.memo(function (props: LoginItemContainerProps) {\n return <LoginItemContainer {...props} className={`LoginWalletItem ${props.className || ''}`}>\n <img alt=\"wallets\" src={wallets} width=\"318\" height=\"318\" />\n <h2>Play using your wallet</h2>\n <p>Connect your account to fully enjoy Decentraland!</p>\n <Button primary size=\"huge\" loading={props.loading && !props.active} disabled={props.loading}>Continue with wallet</Button>\n </LoginItemContainer>\n})\n\nexport const LoginGuestItem = React.memo(function (props: LoginItemContainerProps) {\n return <LoginItemContainer {...props} className={`LoginGuestItem ${props.className || ''}`}>\n <img alt=\"guest\" src={guest} width=\"318\" height=\"318\" />\n <h2>Play as guest</h2>\n <p>Your information will be locally stored and your experience limited.</p>\n <Button primary size=\"huge\" loading={props.loading && !props.active} disabled={props.loading}>Continue as guest</Button>\n </LoginItemContainer>\n})","import React, { useCallback, useMemo, useState } from 'react'\nimport { LoginState } from '@dcl/kernel-interface'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { connect } from 'react-redux'\nimport { connection } from 'decentraland-connect/dist/index'\nimport { Container } from '../common/Layout/Container'\nimport { StoreType } from '../../state/redux'\nimport { authenticate } from '../../kernel-loader'\nimport { EthWalletSelector } from './EthWalletSelector'\nimport { LoginGuestItem, LoginWalletItem } from './LoginItemContainer'\nimport { isElectron } from '../../integration/desktop'\nimport { track } from '../../utils/tracking'\nimport logo from '../../images/logo.png'\nimport './LoginContainer.css'\n\n\nexport const defaultAvailableProviders = []\n\nconst mapStateToProps = (state: StoreType): LoginContainerProps => {\n // test all connectors\n const enableProviders = new Set([ProviderType.INJECTED, ProviderType.FORTMATIC, ProviderType.WALLET_CONNECT])\n const availableProviders = connection.getAvailableProviders().filter((provider) => enableProviders.has(provider))\n return {\n availableProviders,\n stage: state.session.kernelState?.loginStatus,\n provider: state.session.connection?.providerType,\n kernelReady: state.kernel.ready,\n rendererReady: state.renderer.ready,\n isGuest: state.session.kernelState ? state.session.kernelState.isGuest : undefined,\n isWallet: state.session.kernelState ? !state.session.kernelState.isGuest && !!state.session.connection : undefined,\n }\n}\n\nconst mapDispatchToProps = (dispatch: any) => ({\n onLogin: (providerType: ProviderType | null) => {\n track('click_login_button', { provider_type: providerType || 'guest' })\n authenticate(providerType)\n }\n})\n\nexport interface LoginContainerProps {\n stage?: LoginState\n provider?: ProviderType\n availableProviders?: ProviderType[]\n kernelReady: boolean\n rendererReady: boolean\n isGuest?: boolean\n isWallet?: boolean\n}\n\nexport interface LoginContainerDispatch {\n onLogin: (provider: ProviderType | null) => void\n}\n\nexport const LoginContainer: React.FC<LoginContainerProps & LoginContainerDispatch> = ({ onLogin, stage, isWallet, isGuest, provider, kernelReady, availableProviders }) => {\n const [ showWalletSelector, setShowWalletSelector ] = useState(false)\n const onSelect = useCallback(\n () => {\n if (isElectron() && onLogin) {\n onLogin(ProviderType.WALLET_CONNECT)\n } else {\n track('open_login_popup')\n setShowWalletSelector(true)\n }\n },\n [ onLogin ]\n )\n const onCancel = useCallback(() => setShowWalletSelector(false), [])\n const onGuest = useCallback(() => onLogin && onLogin(null), [ onLogin ])\n const loading = useMemo(() => {\n return stage === LoginState.SIGNATURE_PENDING ||\n stage === LoginState.WAITING_PROFILE ||\n stage === LoginState.WAITING_RENDERER ||\n stage === LoginState.LOADING ||\n !kernelReady\n }, [ stage, kernelReady ])\n\n const providerInUse = useMemo(() => {\n if (stage === LoginState.AUTHENTICATING || stage === LoginState.SIGNATURE_PENDING) {\n return provider\n }\n\n return undefined\n }, [ stage, provider ])\n\n if (stage === LoginState.COMPLETED) {\n return <React.Fragment />\n }\n\n return (\n <main className=\"LoginContainer\">\n {/* {stage === LoginState.CONNECT_ADVICE && <EthConnectAdvice onLogin={onLogin} />} */}\n {/* {stage === LoginState.SIGN_ADVICE && <EthSignAdvice />} */}\n <Container>\n <div className=\"LogoContainer\">\n <img alt=\"decentraland\" src={logo} height=\"40\" width=\"212\" />\n <p>Sign In or Create an Account</p>\n </div>\n <div>\n <LoginWalletItem loading={loading} active={isWallet} onClick={onSelect} provider={providerInUse} />\n <LoginGuestItem loading={loading} active={isGuest} onClick={onGuest} />\n </div>\n </Container>\n\n <EthWalletSelector\n open={showWalletSelector}\n loading={loading}\n availableProviders={availableProviders || defaultAvailableProviders}\n provider={providerInUse}\n onLogin={onLogin}\n onCancel={onCancel}\n />\n </main>\n )\n}\nexport default connect(mapStateToProps, mapDispatchToProps)(LoginContainer)\n","export default \"data:image/png;base64,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\"","import React from 'react'\n\nexport interface AudioProps {\n play: boolean\n track: string\n}\n\nexport class Audio extends React.Component<AudioProps> {\n private player: HTMLAudioElement | null = null\n\n componentDidMount() {\n this.updatePlayer()\n }\n\n componentDidUpdate() {\n this.updatePlayer()\n }\n\n updatePlayer() {\n if (!this.player) {\n return\n }\n !this.props.play ? this.player.pause() : this.player.play().catch((e) => {})\n }\n\n render() {\n return (\n <audio ref={(audio) => (this.player = audio)} autoPlay loop>\n <source src={this.props.track} type=\"audio/mpeg\" />\n </audio>\n )\n }\n}\n","import React, { useState, useRef, useMemo } from 'react'\nimport './Accordion.css'\n\nexport interface AccordionProps {\n title?: React.ReactNode\n children?: React.ReactNode\n open?: boolean\n}\n\nexport function Accordion(props: AccordionProps) {\n const [open, setOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n const height = useMemo(() => {\n if (!ref.current || !open) {\n return 0\n }\n\n return ref.current.offsetHeight + 50\n }, [open])\n\n let className = 'eth-accordion'\n if (open) {\n className += ' eth-accordion-open'\n }\n\n return (\n <div className={className}>\n <div className=\"eth-accordion-title\" onClick={() => setOpen(!open)}>\n {props.title}\n </div>\n <div className=\"eth-accordion-description\" style={{ height: `${height}px` }}>\n <div ref={ref}>{props.children}</div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { Accordion } from '../common/Layout/Accordion'\nimport { Container, Content } from '../common/Layout/Container'\nimport './BeginnersGuide.css'\n\nexport const BeginnersGuide: React.FC<React.HTMLAttributes<HTMLDivElement>> = (props) => (\n <div className=\"eth-beginners-guide\">\n <Container>\n <Content>\n <h2>Beginner's Guide</h2>\n <Accordion\n title={\n <h3>\n What do I need to <b>play</b>?\n </h3>\n }\n >\n <p>A PC or Mac running Chrome or Firefox</p>\n <ul>\n <li>\n <p>Can I play on a mobile device?</p>\n <p>For the moment we don’t support mobile devices. But please stay tuned!</p>\n </li>\n <li>\n <p>Can I log in from multiple computers?</p>\n <p>\n Yes, you can run Decentraland from multiple computers as long as you have your digital wallet installed\n on each machine.\n </p>\n </li>\n <li>\n <p>Can I use a different browser?</p>\n <p>\n While it may be technically possible to use another browser, we recommend Chrome or Firefox to ensure\n optimal performance.\n </p>\n </li>\n </ul>\n </Accordion>\n <Accordion\n title={\n <h3>\n What is a <b>Wallet</b> and why do I need one?\n </h3>\n }\n >\n <p>\n If you want to fully enjoy the Decentraland experience, we recommend you get yourself a digital wallet.\n Digital wallets work as your personal account, keeping all your digital assets (such as names, collectibles,\n LANDs) and in-world progress safe.\n </p>\n <p>\n If you choose to experience Decentraland Explorer without a wallet, the information will only be stored\n locally: you will be able to walk around, customize your Avatar and chat with others in-world, but you won’t\n have the chance to receive daily rewards, participate in events or log in with a different device using the\n same Guest ID and Avatar.\n </p>\n <p>\n If this is the first time you’re hearing about digital wallets, we recommend reading{' '}\n <a href=\"https://docs.decentraland.org/examples/get-a-wallet/\" target=\"_blank\" rel=\"noreferrer\">\n Get a Wallet – Beginners Guide\n </a>\n .\n </p>\n </Accordion>\n <Accordion\n title={\n <h3>\n What is <b>MANA</b>?\n </h3>\n }\n >\n <p>\n MANA is Decentraland’s fungible, ERC20 cryptocurrency token. MANA is burned, or spent, in exchange for LAND\n parcels. For a current summary of critical stats like total and circulating supply, please visit our MANA\n Token Information transparency dashboard. See the{' '}\n <a href=\"https://docs.decentraland.org/decentraland/glossary/\" target=\"_blank\" rel=\"noreferrer\">\n Glossary\n </a>\n for more information.\n </p>\n </Accordion>\n <Accordion\n title={\n <h3>\n What is <b>LAND</b>?\n </h3>\n }\n >\n <p>\n LAND is a non-fungible digital asset maintained in an Ethereum smart contract. LAND is divided into parcels\n that are referenced using unique x,y cartesian coordinates. Each LAND token includes a record of its\n coordinates, its owner, and a reference to a content description file or parcel manifest that describes and\n encodes the content the owner wishes to serve on his or her land.\n </p>\n </Accordion>\n <Accordion\n title={\n <h3>\n What is the <b>Marketplace</b>?\n </h3>\n }\n >\n <p>The Marketplace is the go-to place to trade and manage all your Decentraland on-chain assets.</p>\n <p>\n Access the Marketplace at{' '}\n <a href=\"https://market.decentraland.org\" target=\"_blank\" rel=\"noreferrer\">\n market.decentraland.org\n </a>\n .\n </p>\n <p>The Marketplace allows you to:</p>\n <ul>\n <li>\n <p>\n Sell parcels and Estates of LAND, wearables and unique names. Set your own price in MANA and an\n expiration date for the offer.\n </p>\n </li>\n <li>\n <p>Buy parcels and Estates, wearables and unique names that are for sale.</p>\n </li>\n <li>\n <p>Transfer your parcels and Estates to another user.</p>\n </li>\n <li>\n <p>\n Explore the world through a map to see who owns what, what wearables exist and what names are claimed.\n </p>\n </li>\n </ul>\n </Accordion>\n </Content>\n </Container>\n </div>\n)\n","import React from 'react'\n\nexport const Reddit = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n d=\"M14,6.63157895 C14,6.95987493 13.9345794,7.22251172 13.7383178,7.48514851 C13.6074766,7.7477853 13.411215,7.9447629 13.1495327,8.07608129 C13.2149533,8.33871808 13.2149533,8.53569567 13.2149533,8.79833246 C13.2149533,9.58624283 12.953271,10.3741532 12.364486,11.0307452 C11.8411215,11.6873372 11.0560748,12.2782699 10.1401869,12.6722251 C9.22429907,13.0661803 8.17757009,13.2631579 7,13.2631579 C5.88785047,13.2631579 4.8411215,13.0661803 3.92523364,12.6722251 C2.94392523,12.2782699 2.22429907,11.7529964 1.70093458,11.0307452 C1.17757009,10.3741532 0.85046729,9.58624283 0.85046729,8.79833246 C0.85046729,8.53569567 0.85046729,8.33871808 0.91588785,8.07608129 C0.654205607,7.9447629 0.457943925,7.7477853 0.261682243,7.48514851 C0.130841121,7.22251172 0,6.95987493 0,6.63157895 C0,6.23762376 0.130841121,5.84366858 0.457943925,5.51537259 C0.785046729,5.1870766 1.11214953,5.05575821 1.57009346,5.05575821 C2.02803738,5.05575821 2.35514019,5.1870766 2.68224299,5.51537259 C3.79439252,4.72746222 5.1682243,4.33350703 6.6728972,4.26784784 L7.58878505,0.196977592 C7.58878505,0.131318395 7.65420561,0.0656591975 7.71962617,0.0656591975 C7.78504673,0 7.85046729,0 7.91588785,0 L10.7943925,0.656591975 C10.8598131,0.459614382 11.0560748,0.328295987 11.1869159,0.196977592 C11.3831776,0.0656591975 11.5794393,0 11.7757009,0 C12.1028037,0 12.364486,0.131318395 12.6261682,0.328295987 C12.8224299,0.52527358 12.953271,0.853569567 12.953271,1.18186555 C12.953271,1.51016154 12.8224299,1.77279833 12.6261682,2.03543512 C12.4299065,2.29807191 12.1028037,2.36373111 11.7757009,2.36373111 C11.4485981,2.36373111 11.1869159,2.23241271 10.9252336,2.03543512 C10.728972,1.83845753 10.5981308,1.51016154 10.5981308,1.18186555 L7.98130841,0.590932777 L7.19626168,4.26784784 C8.76635514,4.33350703 10.0747664,4.72746222 11.2523364,5.51537259 C11.5794393,5.1870766 11.9065421,5.05575821 12.364486,5.05575821 C12.8224299,5.05575821 13.1495327,5.1870766 13.4766355,5.51537259 C13.8691589,5.84366858 14,6.23762376 14,6.63157895 Z M3.3364486,8.20739969 C3.3364486,8.53569567 3.46728972,8.79833246 3.6635514,9.06096925 C3.85981308,9.32360604 4.18691589,9.38926524 4.51401869,9.38926524 C4.8411215,9.38926524 5.10280374,9.25794685 5.36448598,9.06096925 C5.56074766,8.86399166 5.69158879,8.53569567 5.69158879,8.20739969 C5.69158879,7.8791037 5.56074766,7.61646691 5.36448598,7.35383012 C5.1682243,7.15685253 4.8411215,7.02553413 4.51401869,7.02553413 C4.18691589,7.02553413 3.92523364,7.15685253 3.72897196,7.35383012 C3.53271028,7.55080771 3.3364486,7.8791037 3.3364486,8.20739969 Z M9.61682243,10.965086 C9.68224299,10.8994268 9.68224299,10.8337676 9.68224299,10.7681084 C9.68224299,10.7024492 9.68224299,10.63679 9.61682243,10.5711308 C9.55140187,10.5054716 9.48598131,10.5054716 9.42056075,10.5054716 C9.35514019,10.5054716 9.28971963,10.5054716 9.22429907,10.5711308 C9.02803738,10.7681084 8.70093458,10.965086 8.30841121,11.0307452 C7.91588785,11.1620636 7.45794393,11.1620636 7.06542056,11.1620636 C6.6728972,11.1620636 6.21495327,11.0964044 5.82242991,11.0307452 C5.42990654,10.8994268 5.10280374,10.7681084 4.90654206,10.5711308 C4.8411215,10.5054716 4.77570093,10.5054716 4.71028037,10.5054716 C4.64485981,10.5054716 4.57943925,10.5054716 4.51401869,10.5711308 C4.44859813,10.63679 4.44859813,10.7024492 4.44859813,10.7681084 C4.44859813,10.8337676 4.44859813,10.8994268 4.51401869,10.965086 C4.71028037,11.1620636 5.03738318,11.3590412 5.42990654,11.4903596 C5.82242991,11.621678 6.14953271,11.6873372 6.41121495,11.7529964 C6.6728972,11.7529964 6.86915888,11.8186555 7.13084112,11.8186555 C7.39252336,11.8186555 7.58878505,11.8186555 7.85046729,11.7529964 C8.11214953,11.7529964 8.43925234,11.621678 8.8317757,11.4903596 C9.09345794,11.3590412 9.42056075,11.2277228 9.61682243,10.965086 Z M9.61682243,9.38926524 C9.94392523,9.38926524 10.2056075,9.25794685 10.4672897,9.06096925 C10.728972,8.86399166 10.7943925,8.53569567 10.7943925,8.20739969 C10.7943925,7.8791037 10.6635514,7.61646691 10.4672897,7.41948932 C10.271028,7.22251172 9.94392523,7.09119333 9.68224299,7.09119333 C9.35514019,7.09119333 9.09345794,7.22251172 8.8317757,7.41948932 C8.63551402,7.61646691 8.5046729,7.9447629 8.5046729,8.27305888 C8.5046729,8.60135487 8.63551402,8.86399166 8.8317757,9.12662845 C9.02803738,9.25794685 9.28971963,9.38926524 9.61682243,9.38926524 Z\"\n transform=\"translate(4 4)\"\n />\n </svg>\n )\n})\n","import React from 'react'\n\nexport const Github = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n d=\"M7.88857838,9.78302833 C7.88857838,9.92796208 7.88857838,10.0728958 7.88857838,10.2902965 C7.88857838,11.159899 7.88857838,11.9570346 7.88857838,12.8266371 C7.88857838,12.9715709 7.88857838,13.0440378 7.73831975,12.9715709 C6.6865093,12.9715709 5.63469884,12.9715709 4.58288839,12.9715709 C4.43262976,12.9715709 4.43262976,12.899104 4.43262976,12.8266371 C4.43262976,12.3918359 4.43262976,11.8845677 4.43262976,11.4497665 C4.43262976,11.3772996 4.50775908,11.3048327 4.35750044,11.3048327 C4.35750044,11.3048327 4.28237112,11.3048327 4.28237112,11.3048327 C4.2072418,11.3048327 4.2072418,11.3048327 4.13211249,11.3048327 C3.68133658,11.3772996 3.30568999,11.3772996 2.85491408,11.3048327 C2.1036209,11.0874321 1.57771568,10.7250977 1.2771984,10.000429 C1.05181045,9.5656277 0.751293179,9.13082644 0.450775908,8.76849206 C0.37564659,8.6235583 0.150258636,8.6235583 0.0751293179,8.47862455 C0,8.40615767 0,8.40615767 0,8.3336908 C0,8.26122392 0.0751293179,8.26122392 0.150258636,8.26122392 C0.826422497,8.18875704 1.35232772,8.55109143 1.65284499,9.05835956 C1.95336227,9.5656277 2.40413817,9.92796208 2.9300434,10.0728958 C3.38081931,10.1453627 3.7564659,10.1453627 4.2072418,10.000429 C4.28237112,10.000429 4.35750044,9.92796208 4.35750044,9.78302833 C4.35750044,9.34822707 4.50775908,8.98589269 4.80827635,8.6235583 C4.65801771,8.6235583 4.58288839,8.55109143 4.50775908,8.55109143 C3.7564659,8.47862455 3.08030204,8.18875704 2.55439681,7.75395579 C1.87823295,7.24668765 1.50258636,6.59448576 1.35232772,5.869817 C1.2771984,5.14514823 1.2771984,4.49294634 1.35232772,3.76827758 C1.42745704,3.26100944 1.57771568,2.75374131 1.95336227,2.31894005 C2.1036209,2.17400629 2.1036209,2.10153942 2.02849158,1.88413879 C1.80310363,1.30440378 1.87823295,0.724668765 2.1036209,0.144933753 C2.1036209,0 2.17875022,0 2.32900886,0 C2.77978476,0.144933753 3.15543135,0.362334382 3.45594862,0.652201888 C3.60620726,0.797135641 3.7564659,0.942069394 3.90672453,1.15947002 C3.98185385,1.2319369 3.98185385,1.2319369 4.05698317,1.15947002 C4.28237112,0.942069394 4.58288839,0.942069394 4.88340567,0.869602518 C5.70982816,0.724668765 6.61137998,0.724668765 7.43780247,0.869602518 C7.73831975,0.942069394 8.03883702,0.942069394 8.26422497,1.15947002 C8.41448361,1.2319369 8.41448361,1.2319369 8.48961293,1.08700315 C8.71500088,0.797135641 9.01551815,0.507268135 9.31603542,0.289867506 C9.54142338,0.144933753 9.76681133,0.0724668765 9.99219928,0 C10.0673286,0 10.1424579,0 10.2175872,0.0724668765 C10.4429752,0.724668765 10.5181045,1.30440378 10.2175872,1.95660567 C10.2175872,2.02907254 10.1424579,2.10153942 10.2175872,2.17400629 C10.6683631,2.53634068 10.8186218,3.04360881 10.8937511,3.55087695 C10.9688804,4.20307884 11.0440097,4.85528073 10.9688804,5.50748261 C10.8186218,6.59448576 10.2175872,7.46408828 9.24090611,7.97135641 C9.16577679,7.97135641 9.16577679,7.97135641 9.16577679,8.04382329 C9.16577679,8.04382329 9.09064747,8.04382329 9.09064747,8.11629017 C9.01551815,8.11629017 8.94038883,8.18875704 8.86525952,8.18875704 C8.86525952,8.18875704 8.7901302,8.18875704 8.7901302,8.18875704 C8.71500088,8.18875704 8.71500088,8.18875704 8.71500088,8.26122392 C8.71500088,8.26122392 8.63987156,8.26122392 8.63987156,8.26122392 C8.48961293,8.26122392 8.33935429,8.3336908 8.26422497,8.40615767 C8.26422497,8.40615767 8.18909565,8.40615767 8.18909565,8.40615767 C8.11396634,8.40615767 7.9637077,8.40615767 7.88857838,8.47862455 C7.81344906,8.47862455 7.73831975,8.47862455 7.66319043,8.47862455 C7.58806111,8.47862455 7.51293179,8.47862455 7.51293179,8.47862455 C7.43780247,8.47862455 7.51293179,8.55109143 7.51293179,8.55109143 C7.51293179,8.6235583 7.51293179,8.6235583 7.58806111,8.6235583 C7.58806111,8.69602518 7.66319043,8.69602518 7.66319043,8.76849206 C7.66319043,8.84095893 7.66319043,8.91342581 7.73831975,8.98589269 C7.73831975,8.98589269 7.73831975,9.05835956 7.73831975,9.05835956 C7.73831975,9.13082644 7.73831975,9.27576019 7.81344906,9.34822707 C7.81344906,9.34822707 7.81344906,9.42069394 7.81344906,9.42069394 C7.81344906,9.49316082 7.81344906,9.49316082 7.81344906,9.5656277 C7.88857838,9.71056145 7.88857838,9.71056145 7.88857838,9.78302833 Z\"\n transform=\"translate(5 5)\"\n />\n </svg>\n )\n})\n","import React from 'react'\n\nexport const Twitter = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n d=\"M13,1.82494005 C12.5384615,2.058753 12,2.2146283 11.4615385,2.2146283 C12,1.9028777 12.4615385,1.35731415 12.6153846,0.73381295 C12.0769231,1.04556355 11.5384615,1.2793765 10.9230769,1.35731415 C10.4615385,0.8117506 9.76923077,0.5 9,0.5 C7.53846154,0.5 6.30769231,1.7470024 6.30769231,3.22781775 C6.30769231,3.4616307 6.30769231,3.617506 6.38461538,3.85131894 C4.15384615,3.77338129 2.15384615,2.6822542 0.846153846,1.04556355 C0.615384615,1.4352518 0.461538462,1.9028777 0.461538462,2.44844125 C0.461538462,3.38369305 0.923076923,4.24100719 1.69230769,4.70863309 C1.23076923,4.70863309 0.846153846,4.55275779 0.461538462,4.39688249 C0.461538462,5.72182254 1.38461538,6.81294964 2.61538462,7.04676259 C2.38461538,7.12470024 2.15384615,7.12470024 1.92307692,7.12470024 C1.76923077,7.12470024 1.61538462,7.12470024 1.38461538,7.04676259 C1.69230769,8.13788969 2.69230769,8.91726619 3.92307692,8.91726619 C3,9.61870504 1.84615385,10.0863309 0.615384615,10.0863309 C0.384615385,10.0863309 0.153846154,10.0863309 0,10.0863309 C1.15384615,10.8657074 2.61538462,11.3333333 4.07692308,11.3333333 C9,11.3333333 11.6923077,7.20263789 11.6923077,3.617506 C11.6923077,3.4616307 11.6923077,3.38369305 11.6923077,3.22781775 C12.1538462,2.91606715 12.6153846,2.3705036 13,1.82494005 Z\"\n transform=\"translate(5 5)\"\n />\n </svg>\n )\n})\n","import React from 'react'\n\nexport const Discord = React.memo(function (props: React.SVGAttributes<SVGElement>) {\n return (\n <svg {...props} width=\"22\" height=\"22\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n d=\"M5.0677998,1.36000287e-05 C4.8822277,0.000761200029 3.34704426,0.0443327002 1.72750578,1.24773952 C1.72750578,1.24773952 0,4.35487581 0,8.18178463 C0,8.18178463 1.00769549,9.90927375 3.65893934,9.99324995 C3.65893934,9.99324995 4.10281088,9.46539815 4.46270818,9.00952847 C2.93914264,8.55365809 2.3633099,7.60596477 2.3633099,7.60596477 C2.3633099,7.60596477 2.4833011,7.68992641 2.69923962,7.80989241 C2.71123608,7.80989241 2.7231967,7.82187053 2.7471899,7.83386741 C2.78317956,7.85786019 2.8191807,7.86985875 2.8551705,7.89385167 C3.15508494,8.06180379 3.45498972,8.19378319 3.7309111,8.30175301 C4.22277072,8.50569507 4.8106212,8.68562615 5.49442614,8.81758875 C6.39416918,8.98554115 7.44984898,9.04551491 8.60152062,8.82957625 C9.16535998,8.72160713 9.74123178,8.56566883 10.3410607,8.31374051 C10.7609405,8.15778485 11.2287902,7.92987255 11.7206494,7.60596477 C11.7206494,7.60596477 11.120831,8.57768909 9.54927932,9.02156259 C9.9091769,9.46543553 10.3410607,9.98126231 10.3410607,9.98126231 C12.9923042,9.89728709 14,8.16978775 14,8.18178463 C14,4.35487581 12.2724939,1.24773952 12.2724939,1.24773952 C10.5569839,-0.0358942998 8.91342886,0.000106700029 8.91342886,0.000106700029 L8.74551048,0.192046422 C10.7849293,0.803871902 11.7326367,1.70363743 11.7326367,1.70363743 C10.4849923,1.031829 9.26136876,0.695901242 8.121694,0.563938922 C7.25794034,0.467966262 6.43014414,0.491987742 5.69835336,0.587960262 C5.62637418,0.587960262 5.5664056,0.599939082 5.49442614,0.611935262 C5.07454598,0.659921942 4.0548452,0.803868682 2.77121124,1.36770776 C2.32733802,1.55965289 2.0633893,1.70363743 2.0633893,1.70363743 C2.0633893,1.70363743 3.04710882,0.755875562 5.20649276,0.144049942 L5.08652452,0.000106700029 C5.08652452,0.000106700029 5.08017132,-3.60999713e-05 5.0677998,8.70002873e-06 L5.0677998,1.36000287e-05 Z M4.76262892,4.42685219 C5.44643372,4.42685219 5.99828264,5.01466585 5.98628674,5.74645663 C5.98628674,6.47824839 5.44643372,7.06610783 4.76262892,7.06610783 C4.09082044,7.06610783 3.5389711,6.47824839 3.5389711,5.74645663 C3.5389711,5.01466585 4.07882384,4.42685219 4.76262892,4.42685219 Z M9.14137784,4.42685219 C9.81318618,4.42685219 10.3650357,5.01466585 10.3650357,5.74645663 C10.3650357,6.47824839 9.8251832,7.06610783 9.14137784,7.06610783 C8.46956964,7.06610783 7.91772002,6.47824839 7.91772002,5.74645663 C7.91772002,5.01466585 8.45757276,4.42685219 9.14137784,4.42685219 Z\"\n transform=\"translate(4 6)\"\n />\n </svg>\n )\n})\n","import React from 'react'\nimport { Container } from './Container'\nimport { Reddit } from '../Icon/Reddit'\nimport { Github } from '../Icon/Github'\nimport { Twitter } from '../Icon/Twitter'\nimport { Discord } from '../Icon/Discord'\n\nimport './BigFooter.css'\nimport { injectVersions } from '../../../utils/rolloutVersions'\n\nconst year = Math.max(new Date().getFullYear(), 2020)\n\nexport const BigFooter = () => {\n let versions = injectVersions({})\n\n return (\n <footer className=\"big-footer\">\n <Container>\n <div>\n <div>\n <h4>NEED SUPPORT?</h4>\n </div>\n <div>\n <a className=\"big-footer-button\" href=\"https://decentraland.org/discord\" target=\"about:blank\">\n <Discord /> Join our Discord\n </a>\n </div>\n </div>\n <div>\n <div>\n <h4>FOLLOW US</h4>\n </div>\n <div>\n <a className=\"big-footer-icon\" href=\"https://www.reddit.com/r/decentraland/\" target=\"about:blank\">\n <Reddit />\n </a>\n <a className=\"big-footer-icon\" href=\"http://github.com/decentraland\" target=\"about:blank\">\n <Github />\n </a>\n <a className=\"big-footer-icon\" href=\"https://twitter.com/decentraland\" target=\"about:blank\">\n <Twitter />\n </a>\n </div>\n </div>\n </Container>\n <Container>\n <p className=\"copyright\" title={'Versions: ' + JSON.stringify(versions, null, 2)}>\n © {year} Decentraland\n </p>\n </Container>\n </footer>\n )\n}\n","import React from 'react'\nimport { BannerContainerProps } from './BannerContainer.types'\n\nimport './banners.css'\n\nexport const BannerNotSupported: React.FC<Pick<BannerContainerProps, 'onClose'>> = (props) => (\n <div id=\"banner-notsupported\" className=\"banner-container\">\n <div className=\"banner-close-button\" onClick={props.onClose} />\n <div className=\"banner-text\">\n Your browser is not among the recommended choices for an optimal experience in Decentraland.\n We suggest you use one based on\n {' '}\n <a href=\"https://www.google.com/chrome/\" rel=\"noreferrer noopener\" target=\"_blank\">Chromium</a>\n {' or '}\n <a href=\"https://www.mozilla.org/en-US/firefox/new/\" rel=\"noreferrer noopener\" target=\"_blank\">Firefox</a>.\n </div>\n </div>\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { setBanner } from '../../state/actions'\nimport { BannerType, StoreType } from '../../state/redux'\nimport { BannerContainerProps } from './BannerContainer.types'\nimport { BannerNotSupported } from './BannerNotSupported'\n\nconst mapStateToProps = (state: StoreType): Pick<BannerContainerProps, 'banner'> => {\n return {\n banner: state.banner.banner\n }\n}\n\nconst mapDispatchToProps = (dispatch: (a: any) => void, state: StoreType): Pick<BannerContainerProps, 'onClose'> => {\n return {\n onClose: () => dispatch(setBanner(null))\n }\n}\n\nexport const BannerContainer: React.FC<BannerContainerProps> = (props) => {\n switch (props.banner) {\n case BannerType.NOT_RECOMMENDED:\n return <BannerNotSupported onClose={props.onClose}/>\n default:\n return null\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BannerContainer)\n","import React from 'react'\nimport './LoadingRender.css'\n\nexport const LoadingRender = React.memo(function () {\n return <div className=\"LoadingRender\">\n <img alt=\"loading\" src={process.env.PUBLIC_URL + '/images/loading.gif'} width=\"150\" height=\"150\" />\n <p>We are downloading the latest version of Decentraland. You'll be up and running in a few seconds!</p>\n </div>\n})","import React from 'react'\nimport { Discord } from '../Icon/Discord'\nimport './JoinDiscord.css'\n\nexport const JoinDiscord = React.memo(function () {\n return <a className=\"JoinDiscord\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"https://decentraland.org/discord/\">\n <Discord />\n <span>JOIN DISCORD</span>\n </a>\n})","import React from 'react'\nimport { Navbar as Base } from'decentraland-ui/dist/components/Navbar/Navbar'\nimport { JoinDiscord } from '../Button/JoinDiscord'\nimport Menu from 'semantic-ui-react/dist/commonjs/collections/Menu'\n\n\nexport const Navbar = React.memo(function () {\n return <Base\n isFullscreen\n leftMenu={<>\n <Menu.Item href=\"https://decentraland.org\">\n HOME\n </Menu.Item>\n <Menu.Item active href=\"https://play.decentraland.org\" onClick={(e) => e.preventDefault()}>\n PLAY\n </Menu.Item>\n <Menu.Item href=\"https://market.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.marketplace}\n </Menu.Item>\n <Menu.Item href=\"https://builder.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.builder}\n </Menu.Item>\n <Menu.Item href=\"https://docs.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.docs}\n </Menu.Item>\n <Menu.Item href=\"https://events.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.events}\n </Menu.Item>\n <Menu.Item href=\"https://dao.decentraland.org\">\n {Base.defaultProps.i18n?.menu?.dao}\n </Menu.Item>\n <Menu.Item href=\"https://decentraland.org/blog\">\n {Base.defaultProps.i18n?.menu?.blog}\n </Menu.Item>\n </>}\n rightMenu={<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, { useEffect, useState } from 'react'\nimport { connect } from 'react-redux'\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\n\nfunction windowSize() {\n return {\n height: window.innerHeight,\n width: window.innerWidth,\n }\n}\n\nconst StreamContainer: React.FC<StreamContainerProps> = (props: StreamContainerProps) => {\n const [ banner, setBanner ] = useState(true)\n const [ size, setSize ] = useState(() => ({ height: 0, width: 0 }))\n useEffect(() => {\n const root = document.getElementById('root')\n if (root) {\n root.className += ' full'\n }\n\n const resize = () => setSize(windowSize())\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 }, [])\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, { useMemo } from 'react'\nimport 'semantic-ui-css/semantic.min.css'\nimport 'balloon-css/balloon.min.css'\nimport 'decentraland-ui/dist/themes/base-theme.css'\nimport 'decentraland-ui/dist/themes/alternative/light-theme.css'\nimport './App.css'\nimport { connect } from 'react-redux'\nimport { useMobileMediaQuery } from 'decentraland-ui/dist/components/Media'\nimport ErrorContainer from './errors/ErrorContainer'\nimport LoginContainer from './auth/LoginContainer'\nimport { Audio } from './common/Audio'\nimport { StoreType } from '../state/redux'\nimport { isElectron } from '../integration/desktop'\nimport { BeginnersGuide } from './auth/BeginnersGuide'\nimport { BigFooter } from './common/Layout/BigFooter'\nimport BannerContainer from './banners/BannerContainer'\nimport { LoadingRender } from './common/Loading/LoadingRender'\nimport { Navbar } from './common/Layout/Navbar'\nimport { FeatureFlags, getFeatureVariant } from '../state/selectors'\nimport StreamContainer from './common/StreamContainer'\nimport { isMobile } from '../integration/browser'\n\nfunction mapStateToProps(state: StoreType): AppProps {\n return {\n hasStream: !!getFeatureVariant(state, FeatureFlags.Stream),\n hasBanner: !!state.banner.banner,\n sessionReady: !!state.session?.ready,\n rendererReady: !!state.renderer?.ready,\n error: !!state.error.error,\n sound: true // TODO: sound must be true after the first click\n }\n}\n\nexport interface AppProps {\n hasStream: boolean\n hasBanner: boolean\n sessionReady: boolean\n rendererReady: boolean\n error: boolean\n sound: boolean\n}\n\nconst App: React.FC<AppProps> = (props) => {\n const mobile = useMemo(() => isMobile(), [])\n const small = useMobileMediaQuery()\n\n if (props.hasStream && (small || mobile)) {\n return <StreamContainer />\n }\n\n if (props.error) {\n return <ErrorContainer />\n }\n\n if (props.rendererReady) {\n return <React.Fragment />\n }\n\n if (props.sessionReady) {\n return <LoadingRender />\n }\n\n return (\n <div className={`WebsiteApp ${props.hasBanner ? 'withBanner' : ''}`}>\n {!isElectron() && props.sound && <Audio track={`${process.env.PUBLIC_URL}/tone4.mp3`} play />}\n <BannerContainer />\n {!isElectron() && <Navbar /> }\n <LoginContainer />\n {!isElectron() && <BeginnersGuide /> }\n {!isElectron() && <BigFooter /> }\n </div>\n )\n}\n\nexport default connect(mapStateToProps)(App)\n","import { 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})","import * as React from 'react'\nimport * as ReactDOM from 'react-dom'\nimport { Provider } from 'react-redux'\nimport { configureRollbar, configureSegment } from './integration/analytics'\nimport { store } from './state/redux'\nimport { configureKernel, initializeKernel } from './integration/kernel'\nimport { initializeBrowserRecommendation } from './integration/browser'\nimport App from './components/App'\nimport { initializeDesktopApp } from './integration/desktop'\nimport { initializeFeatureFlags } from './integration/featureFlags'\n\nconfigureSegment()\nconfigureRollbar()\nconfigureKernel(store)\n\nReactDOM.render(\n <React.StrictMode>\n <Provider store={store}>\n <App />\n </Provider>\n </React.StrictMode>,\n document.getElementById('root')!,\n () => {\n initializeKernel()\n initializeBrowserRecommendation()\n initializeFeatureFlags()\n initializeDesktopApp()\n }\n)\n","import { connection, ConnectionResponse } from 'decentraland-connect'\nimport { WebSocketProvider } from 'eth-connect'\nimport { ChainId } from '@dcl/schemas/dist/dapps/chain-id'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { IEthereumProvider } from '@dcl/kernel-interface'\nimport { defaultWebsiteErrorTracker } from '../utils/tracking'\n\nexport const chainIdRpc = new Map<number, string>([\n [1, 'wss://mainnet.infura.io/ws/v3/31afa49f0c87489d9ec71eba2808b63f'],\n [3, 'wss://ropsten.infura.io/ws/v3/31afa49f0c87489d9ec71eba2808b63f']\n])\n\nexport async function getEthereumProvider(\n type: ProviderType | null,\n chainId: ChainId\n): Promise<{ provider: IEthereumProvider; chainId: number }> {\n if (type === null) {\n const rpc = chainIdRpc.get(chainId)\n if (!rpc) throw new Error(\"Can't get RPC for chainId \" + chainId)\n return {\n provider: new WebSocketProvider(rpc),\n chainId\n }\n }\n\n const result = await connection.connect(type, chainId)\n return { provider: result.provider, chainId: result.chainId }\n}\n\nexport async function restoreConnection(): Promise<ConnectionResponse | null> {\n try {\n return await Promise.race<ConnectionResponse | null>([\n connection.tryPreviousConnection(),\n new Promise((_, reject) => setTimeout(() => reject('Connection timeout'), 10 * 1000)) as any\n ])\n } catch (err) {\n return null\n }\n}\n\nexport async function disconnect(): Promise<void> {\n try {\n return await connection.disconnect()\n } catch (err) {\n defaultWebsiteErrorTracker(err)\n return\n }\n}\n","import { 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","import { AnyAction } from 'redux'\nimport { connection } from 'decentraland-connect'\nimport { KernelResult, KernelError, LoginState, KernelAccountState } from '@dcl/kernel-interface'\nimport {\n SET_BANNER,\n SET_DOWNLOAD_PROGRESS,\n SET_DOWNLOAD_NEW_VERSION,\n SET_DOWNLOAD_READY,\n SET_KERNEL_ACCOUNT_STATE,\n SET_KERNEL_ERROR,\n SET_KERNEL_LOADED,\n SET_RENDERER_LOADING,\n SET_RENDERER_READY,\n SET_RENDERER_VISIBLE,\n SET_FEATURE_FLAGS\n} from './actions'\nimport {\n KernelState,\n SessionState,\n RendererState,\n ErrorState,\n BannerState,\n DownloadState,\n DownloadCurrentState,\n FeatureFlagsState\n} from './redux'\nimport { v4 } from 'uuid'\nimport { errorToString } from '../utils/errorToString'\nimport { isElectron } from '../integration/desktop'\nimport { defaultFeatureFlagsState } from './types'\n\nexport function kernelReducer(state: KernelState | undefined, action: AnyAction): KernelState {\n if (action.type === SET_KERNEL_LOADED) {\n return { ...state, ready: true, kernel: action.payload as KernelResult }\n }\n return (\n state || {\n ready: false,\n kernel: null\n }\n )\n}\n\nconst defaultSession: SessionState = {\n sessionId: v4(),\n connection: null,\n kernelState: null,\n ready: false\n}\n\nexport function sessionReducer(state: SessionState | undefined, action: AnyAction): SessionState {\n if (!state) return defaultSession\n\n if (action.type === SET_KERNEL_ACCOUNT_STATE) {\n const kernelState = action.payload as KernelAccountState\n const ready =\n kernelState.loginStatus === LoginState.SIGN_UP ||\n kernelState.loginStatus === LoginState.WAITING_PROFILE ||\n kernelState.loginStatus === LoginState.COMPLETED\n\n return {\n ...state,\n connection: connection.getConnectionData() || null,\n kernelState,\n ready\n }\n }\n\n return state\n}\n\nexport function rendererReducer(state: RendererState | undefined, action: AnyAction): RendererState {\n if (state && action.type === SET_RENDERER_READY) {\n return { ...state, ready: action.payload.ready }\n }\n if (state && action.type === SET_RENDERER_VISIBLE) {\n return { ...state, visible: action.payload.visible }\n } else if (state && action.type === SET_RENDERER_LOADING) {\n return { ...state, loading: action.payload }\n }\n return (\n state || {\n ready: false,\n version: 'latest',\n visible: false,\n loading: null\n }\n )\n}\n\nexport function errorReducer(state: ErrorState | undefined, action: AnyAction): ErrorState {\n if (action.type === SET_KERNEL_ERROR) {\n const payload: KernelError = action.payload\n\n if (!payload) {\n return { error: null }\n }\n\n return {\n error: {\n details: errorToString(payload.error),\n type: payload.code as any\n }\n }\n }\n\n return state || { error: null }\n}\n\nexport function bannerReducer(state: BannerState | undefined, action: AnyAction): BannerState {\n if (action.type === SET_BANNER) {\n return { banner: action.payload.banner }\n }\n\n return state || { banner: null }\n}\n\nexport function downloadReducer(state: DownloadState | undefined, action: AnyAction): DownloadState {\n const defaultDownload: DownloadState = {\n progress: 0,\n currentState: DownloadCurrentState.NONE,\n authCompleted: false,\n ready: false\n }\n\n if (!isElectron()) {\n return state || defaultDownload\n }\n\n state = state || defaultDownload\n\n if (action.type === SET_DOWNLOAD_PROGRESS) {\n state = { ...state, progress: action.payload.progress, currentState: DownloadCurrentState.DOWNLOADING }\n } else if (action.type === SET_DOWNLOAD_READY) {\n state = { ...state, progress: action.payload.progress, currentState: DownloadCurrentState.READY }\n } else if (action.type === SET_DOWNLOAD_NEW_VERSION) {\n state = { ...state, progress: action.payload.progress, currentState: DownloadCurrentState.NEW_VERSION }\n }\n\n if (action.type === SET_KERNEL_ACCOUNT_STATE) {\n if (action.payload.loginStatus === LoginState.WAITING_RENDERER) {\n state = { ...state, authCompleted: true }\n }\n }\n\n if (state.authCompleted && state.currentState === DownloadCurrentState.READY) {\n const { ipcRenderer } = window.require('electron')\n ipcRenderer.send('executeProcess')\n state = { ...state, currentState: DownloadCurrentState.EXECUTED, ready: true }\n }\n\n return state\n}\n\nexport function featureFlagsReducer(\n state: FeatureFlagsState = defaultFeatureFlagsState,\n action: AnyAction\n): FeatureFlagsState {\n if (action.type === SET_FEATURE_FLAGS) {\n const result: FeatureFlagsState = action.payload\n return {\n ...state,\n flags: {\n ...state.flags,\n ...result.flags\n },\n variants: {\n ...state.variants,\n ...result.variants\n }\n }\n }\n\n return state\n}\n","import { combineReducers, createStore } from 'redux'\nimport { KernelAccountState, KernelResult, KernelLoadingProgress } from '@dcl/kernel-interface'\nimport { FeatureFlagsResult } from '@dcl/feature-flags'\nimport { kernelReducer, sessionReducer, rendererReducer, errorReducer, bannerReducer, downloadReducer, featureFlagsReducer } from './reducers'\nimport { composeWithDevTools } from 'redux-devtools-extension'\nimport { ConnectionData } from 'decentraland-connect/dist/types'\n\nexport type KernelState = {\n ready: boolean\n kernel: KernelResult | null\n}\n\nexport type RendererState = {\n ready: boolean\n visible: boolean\n version: string\n loading: KernelLoadingProgress | null\n}\n\nexport type SessionState = {\n // It is important that this ID is autogenerated in every user session (reload)\n // and it _never_ changes during the session\n sessionId: string\n kernelState: KernelAccountState | null\n connection: ConnectionData | null\n ready: boolean\n}\n\nexport type ErrorState = {\n error: {\n type: string | ErrorType\n details: string\n } | null\n}\n\nexport enum ErrorType {\n LOADING = 'loading',\n FATAL = 'fatal',\n COMMS = 'comms',\n NEW_LOGIN = 'newlogin',\n NOT_MOBILE = 'nomobile',\n NOT_SUPPORTED = 'notsupported',\n NET_MISMATCH = 'networkmismatch',\n AVATAR_ERROR = 'avatarerror',\n METAMASK_LOCKED = 'METAMASK_LOCKED'\n}\n\nexport type BannerState = {\n banner: BannerType | null\n}\n\nexport enum BannerType {\n NOT_RECOMMENDED = 'notrecommended',\n}\n\nexport enum DownloadCurrentState {\n NONE = 'none',\n NEW_VERSION = 'new_version',\n DOWNLOADING = 'downloading',\n READY = 'ready',\n EXECUTED = 'executed'\n}\n\nexport type DownloadState = {\n currentState: DownloadCurrentState\n progress: number\n authCompleted: boolean\n ready: boolean\n}\n\nexport type FeatureFlagsState = FeatureFlagsResult\n\nexport type StoreType = {\n kernel: KernelState\n renderer: RendererState\n session: SessionState\n error: ErrorState\n banner: BannerState\n download: DownloadState\n featureFlags: FeatureFlagsState\n}\n\nconst reducers = combineReducers<StoreType>({\n kernel: kernelReducer,\n session: sessionReducer,\n renderer: rendererReducer,\n error: errorReducer,\n banner: bannerReducer,\n download: downloadReducer,\n featureFlags: featureFlagsReducer,\n})\n\nconst middleware: typeof composeWithDevTools =\n process.env.NODE_ENV !== 'production' ? composeWithDevTools : (x: any) => x\n\nexport const store = createStore(reducers, {}, middleware())\n","import { action } from 'typesafe-actions'\nimport {\n IEthereumProvider,\n KernelAccountState,\n KernelError,\n KernelLoadingProgress,\n KernelResult\n} from '@dcl/kernel-interface'\nimport { BannerType } from './redux'\nimport { FeatureFlagsResult } from '@dcl/feature-flags'\n\nexport const KERNEL_AUTHENTICATE = '[Authenticate]'\nexport const KERNEL_LOGOUT_REQUEST = '[Logout]'\nexport const SET_KERNEL_ACCOUNT_STATE = 'Set kernel account state'\nexport const SET_KERNEL_ERROR = 'Set kernel error'\nexport const SET_KERNEL_LOADED = 'Set kernel loaded'\nexport const SET_BANNER = 'Set banenr'\n\nexport const SET_RENDERER_LOADING = 'Set renderer loading'\nexport const SET_RENDERER_READY = 'Set renderer ready'\nexport const SET_RENDERER_VISIBLE = 'Set renderer visible'\n\nexport const SET_DOWNLOAD_PROGRESS = '[DownloadProgress]'\nexport const SET_DOWNLOAD_READY = '[DownloadReady]'\nexport const SET_DOWNLOAD_NEW_VERSION = '[DownloadNewVersion]'\n\nexport const SET_FEATURE_FLAGS = 'Set feature flags'\n\nexport const setKernelAccountState = (accountState: KernelAccountState) =>\n action(SET_KERNEL_ACCOUNT_STATE, accountState)\nexport const setKernelError = (error: KernelError | null) => action(SET_KERNEL_ERROR, error)\nexport const setKernelLoaded = (kernel: KernelResult) => action(SET_KERNEL_LOADED, kernel)\nexport const setRendererLoading = (progressEvent: KernelLoadingProgress) => action(SET_RENDERER_LOADING, progressEvent)\nexport const setRendererReady = (ready: boolean) => action(SET_RENDERER_READY, { ready })\nexport const setRendererVisible = (visible: boolean) => action(SET_RENDERER_VISIBLE, { visible })\nexport const setBanner = (banner: BannerType | null) => action(SET_BANNER, { banner })\n\nexport const setDownloadProgress = (progress: number) => action(SET_DOWNLOAD_PROGRESS, { progress })\nexport const setDownloadReady = () => action(SET_DOWNLOAD_READY, { })\nexport const setDownloadNewVersion = () => action(SET_DOWNLOAD_NEW_VERSION, { })\n\nexport const setFeatureFlags = (result: FeatureFlagsResult) => action(SET_FEATURE_FLAGS, result)\n\nexport const authenticate = (provider: IEthereumProvider, isGuest: boolean) =>\n action(KERNEL_AUTHENTICATE, { provider, isGuest })\n\nexport const logout = (options: Partial<{reload: boolean }> = {}) => action(KERNEL_LOGOUT_REQUEST, options)","import { disconnect, getEthereumProvider, restoreConnection } from '../eth/provider'\nimport { internalTrackEvent, identifyUser, trackError, disableAnalytics } from '../integration/analytics'\nimport { injectKernel } from './injector'\nimport {\n setKernelAccountState,\n setKernelError,\n setRendererLoading,\n setKernelLoaded,\n setRendererReady\n} from '../state/actions'\nimport { ErrorType, store } from '../state/redux'\nimport { ProviderType } from '@dcl/schemas/dist/dapps/provider-type'\nimport { FeatureFlagsResult, fetchFlags } from '@dcl/feature-flags'\nimport { resolveUrlFromUrn } from '@dcl/urn-resolver'\nimport { defaultWebsiteErrorTracker, track } from '../utils/tracking'\nimport { injectVersions } from '../utils/rolloutVersions'\nimport { KernelResult } from '@dcl/kernel-interface'\nimport { ENV, NETWORK } from '../integration/queryParamsConfig'\nimport { RequestManager } from 'eth-connect'\nimport { errorToString } from '../utils/errorToString'\nimport { isElectron } from '../integration/desktop'\n\n// this function exists because decentraland-connect seems to return\n// invalid or cached values in chainId, ignoring network changes in the\n// real provider.\nasync function getChainIdFromProvider(provider: any) {\n const rm = new RequestManager(provider)\n return parseInt(await rm.net_version(), 10)\n}\n\nfunction getWantedChainId() {\n let chainId = 1 // mainnet\n\n if (NETWORK === 'ropsten') {\n chainId = 3\n }\n\n return chainId\n}\n\nexport async function authenticate(providerType: ProviderType | null) {\n try {\n const wantedChainId = getWantedChainId()\n\n const { provider, chainId: providerChainId } = await getEthereumProvider(providerType, wantedChainId)\n\n if (providerChainId !== wantedChainId) {\n store.dispatch(\n setKernelError({\n error: new Error(\n `Network mismatch NETWORK url param is not equal to the provided by Ethereum Provider (wanted: ${wantedChainId} actual: ${providerChainId}, E01)`\n ),\n code: ErrorType.NET_MISMATCH\n })\n )\n return\n }\n\n {\n const providerChainId = await getChainIdFromProvider(provider)\n if (providerChainId !== wantedChainId) {\n store.dispatch(\n setKernelError({\n error: new Error(\n `Network mismatch NETWORK url param is not equal to the provided by Ethereum Provider (wanted: ${wantedChainId} actual: ${providerChainId}, E02)`\n ),\n code: ErrorType.NET_MISMATCH\n })\n )\n return\n }\n }\n\n const kernel = store.getState().kernel.kernel\n\n if (!kernel) throw new Error('Kernel did not load yet')\n\n kernel.authenticate(provider, providerType == null /* isGuest */)\n } catch (err) {\n if (\n err &&\n typeof err === 'object' &&\n ['Fortmatic: User denied account access.', 'The user rejected the request.'].includes(err.message)\n ) {\n return\n }\n\n if (\n err &&\n typeof err === 'object' &&\n typeof err.message == 'string' &&\n (err.message.includes('Already processing eth_requestAccounts.') || err.message.includes('Please wait.'))\n ) {\n // https://github.com/decentraland/explorer-website/issues/46\n store.dispatch(\n setKernelError({\n error: new Error('Metamask is locked, please open the extension before continuing.'),\n code: ErrorType.METAMASK_LOCKED\n })\n )\n return\n }\n\n // If something went wrong, disconnect to prevent future errors next reload\n disconnect().catch(defaultWebsiteErrorTracker)\n\n defaultWebsiteErrorTracker(err)\n\n store.dispatch(\n setKernelError({\n error: err\n })\n )\n }\n}\n\ntype RolloutRecord = {\n version: string\n percentage: number\n prefix: string\n}\n\ndeclare var globalThis: {\n KERNEL_BASE_URL?: string\n RENDERER_BASE_URL?: string\n ROLLOUTS?: Record<string, RolloutRecord>\n}\n\nglobalThis.KERNEL_BASE_URL = process.env.REACT_APP_KERNEL_BASE_URL\nglobalThis.RENDERER_BASE_URL = process.env.REACT_APP_RENDERER_BASE_URL\n\nasync function resolveBaseUrl(urn: string): Promise<string> {\n if (urn.startsWith('urn:')) {\n const t = await resolveUrlFromUrn(urn)\n if (t) {\n return (t + '/').replace(/(\\/)+$/, '/')\n }\n throw new Error('Cannot resolve content for URN ' + urn)\n }\n return (new URL(`${urn}`, global.location.toString()).toString() + '/').replace(/(\\/)+$/, '/')\n}\n\nfunction cdnFromRollout(rollout: RolloutRecord): string {\n return cdnFromPrefixVersion(rollout.prefix, rollout.version)\n}\n\nfunction cdnFromPrefixVersion(prefix: string, version: string): string {\n return `https://cdn.decentraland.org/${prefix}/${version}`\n}\n\nasync function getVersions(flags: FeatureFlagsResult) {\n const qs = new URLSearchParams(document.location.search)\n\n // 1. load from ROLLOUTS + CDN\n if (globalThis.ROLLOUTS && globalThis.ROLLOUTS['@dcl/kernel']) {\n globalThis.KERNEL_BASE_URL = cdnFromRollout(globalThis.ROLLOUTS['@dcl/kernel'])\n }\n if (globalThis.ROLLOUTS && globalThis.ROLLOUTS['@dcl/unity-renderer']) {\n globalThis.RENDERER_BASE_URL = cdnFromRollout(globalThis.ROLLOUTS['@dcl/unity-renderer'])\n }\n\n // 2. load from URN/URL PARAM\n if (qs.has('renderer')) {\n globalThis.RENDERER_BASE_URL = qs.get('renderer')!\n }\n if (qs.has('kernel-urn')) {\n globalThis.KERNEL_BASE_URL = qs.get('kernel-urn')!\n }\n\n // 3. load hot-branch\n if (qs.has('renderer-branch')) {\n globalThis.RENDERER_BASE_URL = `https://renderer-artifacts.decentraland.org/branch/${qs.get('renderer-branch')!}`\n }\n if (qs.has('kernel-branch')) {\n globalThis.KERNEL_BASE_URL = `https://sdk-team-cdn.decentraland.org/@dcl/kernel/branch/${qs.get('kernel-branch')!}`\n }\n\n // 4. specific cdn versions\n if (qs.has('renderer-version')) {\n globalThis.RENDERER_BASE_URL = cdnFromPrefixVersion('@dcl/unity-renderer', qs.get('renderer-version')!)\n }\n if (qs.has('kernel-version')) {\n globalThis.KERNEL_BASE_URL = cdnFromPrefixVersion('@dcl/kernel', qs.get('kernel-version')!)\n }\n\n // default fallback\n if (!globalThis.KERNEL_BASE_URL) {\n if (flags.variants['explorer-rollout-kernel-version']) {\n const version = flags.variants['explorer-rollout-kernel-version'].name\n globalThis.KERNEL_BASE_URL = `urn:decentraland:off-chain:kernel-cdn:${version}`\n }\n }\n\n if (!globalThis.RENDERER_BASE_URL) {\n if (flags.variants['explorer-rollout-unity-renderer-version']) {\n const version = flags.variants['explorer-rollout-unity-renderer-version'].name\n globalThis.RENDERER_BASE_URL = `urn:decentraland:off-chain:unity-renderer-cdn:${version}`\n }\n }\n}\n\nasync function initKernel() {\n const container = document.getElementById('gameContainer') as HTMLDivElement\n\n const flags = await fetchFlags({ applicationName: 'explorer' })\n\n await getVersions(flags)\n\n const kernel = await injectKernel({\n kernelOptions: {\n baseUrl: await resolveBaseUrl(globalThis.KERNEL_BASE_URL || `urn:decentraland:off-chain:kernel-cdn:latest`),\n configurations: {}\n },\n rendererOptions: {\n container,\n baseUrl: await resolveBaseUrl(\n globalThis.RENDERER_BASE_URL || `urn:decentraland:off-chain:unity-renderer-cdn:latest`\n )\n }\n })\n\n kernel.on('trackingEvent', ({ eventName, eventData }) => {\n internalTrackEvent(eventName, { ...eventData, context: eventData.context || 'kernel' })\n })\n\n kernel.on('openUrl', ({ url }) => {\n const newWindow = window.open(url, '_blank', 'noopener,noreferrer')\n if (newWindow != null) newWindow.opener = null\n })\n\n let isGuest = true\n let lastIdentity: string | null = null\n let email: string | undefined = undefined\n\n function identify() {\n if (lastIdentity) {\n identifyUser(lastIdentity, isGuest, email)\n }\n }\n\n kernel.on('accountState', (account) => {\n if (account.identity) {\n isGuest = !!account.isGuest\n lastIdentity = account.identity.address\n identify()\n }\n\n store.dispatch(setKernelAccountState(account))\n })\n\n kernel.on('signUp', (data) => {\n email = data.email\n identify()\n })\n\n // all errors are also sent as trackingEvent\n kernel.on('error', (error) => {\n store.dispatch(setKernelError(error))\n\n // TODO: move this into a saga for setKernelError\n trackError(error.error, { context: 'kernel', ...(error.extra || {}) })\n\n // trackError only sends information to rollbar, we must get statistical information of errors in segment\n // via this track() function\n track('explorer_kernel_error', {\n // this string concatenation exists on purpose, it is a safe way to do (error).toString in case (error) is nullish\n error: errorToString(error)\n })\n\n // since setKernelError(error) produces an unrecoverable black screen of death, we disable analytics\n disableAnalytics()\n })\n\n kernel.on('rendererVisible', (event) => {\n store.dispatch(setRendererReady(event.visible))\n\n // TODO: move this into a saga for setRendererReady\n // if the kernel and renderer decides to load, we cleanup the error window\n if (event.visible) {\n track('enable_renderer', {})\n store.dispatch(setKernelError(null))\n }\n })\n\n kernel.on('loadingProgress', (event) => {\n store.dispatch(setRendererLoading(event))\n })\n\n kernel.on('logout', () => {\n disconnect().catch(defaultWebsiteErrorTracker)\n })\n\n return kernel\n}\n\nasync function initLogin(kernel: KernelResult) {\n if (!isElectron()) {\n const provider = await restoreConnection()\n if (provider && provider.account) {\n const providerChainId = await getChainIdFromProvider(provider.provider)\n\n // BUG OF decentraland-connect:\n // provider.chainId DOES NOT reflect the selected chain in the real provider\n const storedSession = await kernel.hasStoredSession(provider.account, providerChainId /* provider.chainId */)\n\n if (storedSession) {\n track('automatic_relogin', { provider_type: provider.providerType })\n authenticate(provider.providerType).catch(defaultWebsiteErrorTracker)\n }\n }\n }\n}\n\nexport function startKernel() {\n if (NETWORK && NETWORK !== 'mainnet' && NETWORK !== 'ropsten') {\n store.dispatch(\n setKernelError({\n error: new Error(`Invalid NETWORK url param, valid options are 'ropsten' and 'mainnet'`),\n code: ErrorType.FATAL\n })\n )\n return\n }\n\n if (ENV) {\n store.dispatch(\n setKernelError({\n error: new Error(\n `The \"ENV\" URL parameter is no longer supported. Please use NETWORK=ropsten in the cases where ENV=zone was used`\n ),\n code: ErrorType.FATAL\n })\n )\n return\n }\n\n track('initialize_versions', injectVersions({}))\n\n initKernel()\n .then((kernel) => {\n store.dispatch(setKernelLoaded(kernel))\n\n return initLogin(kernel)\n })\n .catch((error) => {\n store.dispatch(setKernelError({ error }))\n defaultWebsiteErrorTracker(error)\n })\n}\n","// this function injects rollout versions to records based on the rollouts\n// {a: asd} -> {a: asd, _site: 1.0.0, @dcl/unity-renderer: 6.0.0}\nexport function injectVersions<T extends Record<string, any>>(versions: T): T & Record<string, string> {\n var rolloutsInfo = (globalThis as any).ROLLOUTS || {}\n\n for (let component in rolloutsInfo) {\n if (component === '_site' || component.startsWith('@dcl')) {\n if (rolloutsInfo[component] && rolloutsInfo[component].version) {\n versions[component as keyof T] = rolloutsInfo[component].version\n }\n }\n }\n\n return versions\n}\n","import 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 { setDownloadNewVersion, setDownloadProgress, setDownloadReady, setKernelError } from '../state/actions'\nimport { store } from '../state/redux'\nimport { callOnce } from '../utils/callOnce'\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()) {\n const { ipcRenderer } = window.require('electron')\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","import { TrackingEvents } from '../trackingEvents'\nimport { internalTrackEvent, trackError } from '../integration/analytics'\nimport { errorToString } from './errorToString'\nimport { callOnce } from './callOnce'\nimport { isRecommendedBrowser } from '../integration/browser'\nimport { RENDERER_TYPE } from '../integration/queryParamsConfig'\n\n// declare var ethereum: Record<string, boolean>\nconst ethereum = (window as any).ethereum\nconst rollouts = (window as any).ROLLOUTS\n\nconst getWalletName = callOnce(() => {\n if (!ethereum) {\n return 'none'\n } else if (ethereum?.isMetaMask) {\n return 'metamask'\n } else if (ethereum?.isDapper) {\n return 'dapper'\n } else if (ethereum?.isCucumber) {\n return 'cucumber'\n } else if (ethereum?.isTrust) {\n return 'trust'\n } else if (ethereum?.isToshi) {\n return 'coinbase'\n } else if (ethereum?.isGoWallet) {\n return 'goWallet'\n } else if (ethereum?.isAlphaWallet) {\n return 'alphaWallet'\n } else if (ethereum?.isStatus) {\n return 'status'\n } else {\n return 'other'\n }\n})\n\nconst getWalletProps = callOnce(() => {\n if (!ethereum) {\n return ''\n }\n\n return Object.keys(ethereum)\n .filter((prop) => prop.startsWith('is') && typeof ethereum![prop] === 'boolean')\n .join(',')\n})\n\nconst getEnvironmentProperties = callOnce(() => {\n const properties: Record<string, string> = {\n rendererType: RENDERER_TYPE\n }\n\n if (rollouts) {\n for (const rollout of Object.keys(rollouts)) {\n const lib = rollouts[rollout]\n if (lib && lib.prefix && lib.version) {\n properties[lib.prefix || rollout] = lib.version\n }\n }\n }\n\n return properties\n})\n\n\n\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(event, { wallet, walletProps, recommendedBrowser, ...properties, ...environmentProperties })\n}\n\n\n/**\n * Default \"catch\" for promises and to print errors in the console.\n */\nexport function defaultWebsiteErrorTracker(error: any) {\n console.error(error)\n trackError(error, { context: 'explorer-website' })\n track('explorer_website_error', {\n // this string concatenation exists on purpose, it is a safe way to do (error).toString in case (error) is nullish\n error: errorToString(error)\n })\n}\n","const qs = new URLSearchParams(document.location.search || '')\n\nexport const DEBUG_ANALYTICS = qs.has('DEBUG_ANALYTICS')\nexport const ENV = qs.get('ENV')\nexport const NETWORK = qs.get('NETWORK')\nexport const RENDERER_TYPE = qs.get('ws') ? 'native' : 'web'","export function callOnce<T>(fun: () => T): () => T {\n let result: { value: T } | null = null\n return () => {\n if (!result) {\n result = { value: fun() }\n }\n\n return result.value\n }\n}","import { store } from '../state/redux'\nimport { getRequiredAnalyticsContext } from '../state/selectors'\nimport { errorToString } from '../utils/errorToString'\nimport { track } from '../utils/tracking'\nimport { isElectron } from './desktop'\nimport { DEBUG_ANALYTICS, RENDERER_TYPE } from './queryParamsConfig'\n\nlet analyticsDisabled = false\n\nenum AnalyticsAccount {\n PRD = '1plAT9a2wOOgbPCrTaU8rgGUMzgUTJtU',\n DEV = 'a4h4BC4dL1v7FhIQKKuPHEdZIiNRDVhc'\n}\n\nenum RollbarAccount {\n Web = '44963d3f89db4e5cbf552faba06c6ec0',\n Desktop = '73e7ead7a15d4de3b26cecdda99b63c2'\n}\n\nconst authFlags = {\n isAuthenticated: false,\n isGuest: false,\n afterFatalError: false\n}\n\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 const qs = new URLSearchParams(globalThis.location.search || '')\n\n // inject realm\n if (qs.has('realm')) {\n payload.realm = qs.get('realm')\n }\n\n // inject position\n if (qs.has('position')) {\n payload.position = qs.get('position')\n }\n\n payload.dcl_is_authenticated = authFlags.isAuthenticated\n payload.dcl_is_guest = authFlags.isGuest\n payload.dcl_disabled_analytics = authFlags.afterFatalError\n payload.dcl_renderer_type = RENDERER_TYPE\n}\n\nexport function configureRollbar() {\n function rollbarTransformer(payload: Record<string, any>): void {\n injectTrackingMetadata(payload)\n }\n\n const Rollbar = (window as any).Rollbar\n const accessToken = isElectron() ? RollbarAccount.Desktop : RollbarAccount.Web\n\n if (Rollbar) {\n Rollbar.configure({\n accessToken,\n transform: rollbarTransformer\n })\n }\n}\n\n// once this function is called, no more errors will be tracked neither reported to rollbar\nexport function disableAnalytics() {\n track('disable_analytics', {})\n\n authFlags.afterFatalError = true\n analyticsDisabled = true\n\n if ((window as any).Rollbar) {\n ; (window as any).Rollbar.configure({ enabled: false })\n }\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS disableAnalytics')\n }\n}\n\nexport function trackError(error: string | Error, payload?: Record<string, any>) {\n if (analyticsDisabled) return\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS trackCriticalError ', error)\n }\n if (!(window as any).Rollbar) return\n\n if (typeof error === 'string') {\n ; (window as any).Rollbar.critical(errorToString(error), payload)\n } else if (error && error instanceof Error) {\n ; (window as any).Rollbar.critical(\n errorToString(error),\n Object.assign(error, payload, { fullErrorStack: error.toString() })\n )\n } else {\n ; (window as any).Rollbar.critical(errorToString(error), payload)\n }\n}\n\nexport function identifyUser(address: string, isGuest: boolean, email?: string) {\n authFlags.isGuest = isGuest\n authFlags.isAuthenticated = !!address\n if (window.analytics) {\n const userTraits = {\n sessionId: getRequiredAnalyticsContext(store.getState()).sessionId,\n email\n }\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS identifyUser', address, userTraits)\n }\n\n if (isGuest) {\n window.analytics.identify(userTraits)\n } else {\n window.analytics.identify(address, userTraits)\n }\n }\n}\n\nasync function initialize(segmentKey: string): Promise<void> {\n if (window.analytics.load) {\n // loading client for the first time\n window.analytics.load(segmentKey)\n window.analytics.page()\n window.analytics.ready(() => {\n window.analytics.timeout(1000)\n })\n }\n}\n\n// please use src/utils \"track\" function.\nexport function internalTrackEvent(eventName: string, eventData: Record<string, any>) {\n if (!window.analytics || analyticsDisabled) {\n return\n }\n\n const data = { ...eventData, ...getRequiredAnalyticsContext(store.getState()) }\n\n injectTrackingMetadata(data)\n\n if (DEBUG_ANALYTICS) {\n console.info('explorer-website: DEBUG_ANALYTICS trackEvent', eventName, data)\n }\n\n window.analytics.track(eventName, data)\n}\n","\nexport function errorToString(error: any) {\n if (typeof error === 'object') {\n if (error.message) return error.message\n if (error.toString() === '[object Object]') {\n return JSON.stringify(error)\n }\n return error.toString()\n }\n if (typeof error === 'string') return error\n return Object.prototype.toString.call(error)\n}","import { SessionTraits } from '../trackingEvents'\nimport { StoreType } from './redux'\nimport { defaultFeatureFlagsState, FF_APPLICATION_NAME } from './types'\n\n// This function is used for every rollbar and segment events.\nexport function getRequiredAnalyticsContext(state: StoreType): SessionTraits {\n return {\n sessionId: state.session.sessionId\n }\n}\n\nexport enum FeatureFlags {\n Stream = 'stream'\n}\n\nexport function isFeatureEnabled(state: StoreType, key: string): boolean {\n const name = `${FF_APPLICATION_NAME}-${key}`\n const ff = state.featureFlags || defaultFeatureFlagsState\n return !!ff.flags[name]\n}\n\nexport function getFeatureVariant(state: StoreType, key: string, defaultValue: string | undefined = undefined) {\n if (isFeatureEnabled(state, key)) {\n const name = `${FF_APPLICATION_NAME}-${key}`\n const variant = state.featureFlags.variants[name]\n if (variant?.payload?.value) {\n return variant?.payload?.value\n }\n }\n\n return defaultValue\n}\n","import { FeatureFlagsState } from \"./redux\"\n\nexport const FF_APPLICATION_NAME = 'explorer'\n\nexport const defaultFeatureFlagsState: FeatureFlagsState = {\n flags: {},\n variants: {}\n}\n"],"sourceRoot":""}
|