{"version":3,"sources":["utils/detectHost.ts","utils/releases.ts","utils/groupBy.ts","config.ts","utils/meta.ts","utils/formatRelease.ts","components/OSIcon.tsx","components/AlternativeDownloads.tsx","components/ShowcasedDownload.tsx","components/Releases.tsx","hooks/useReleases.ts","theme.ts","components/SVGGradientProvider.tsx","Guides.tsx","hooks/useConfig.ts","instructions.ts","Repositories.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["UnsupportedHost","Symbol","detectHost","a","detectHostUserAgentData","userAgentDataHost","userAgentHost","detectHostUserAgent","platform","arch","navigator","userAgentData","getHighEntropyValues","architecture","bitness","ourPlatform","ourArch","userAgent","includes","parseReleases","meta","baseUrl","entries","map","entry","resolvedUrl","URL","url","toString","os","splitReleases","releases","host","hostLatestRelease","undefined","otherLatestReleases","find","x","filter","sortReleases","sort","b","localeCompare","groupReleasesByPlatform","fn","release","reduce","acc","item","key","config","load","remoteConfigPath","envKeyPrefix","fetchMeta","fetch","headers","Accept","res","json","resBody","isMeta","Error","shape","getExt","filename","slice","lastIndexOf","formatReleaseGeneric","r","ext","name","text","formatReleaseLinux","subtext","formatReleaseMacos","formatReleaseWindows","formatRelease","OSIcon","props","src","style","width","height","alt","AlternativeDownloads","React","memo","Typography","variant","gutterBottom","Stack","direction","xs","sm","justifyContent","sx","flexBasis","Object","spacing","alignItems","Download","Button","href","target","display","ml","flexDirection","Box","DisabledDownload","alignSelf","disabled","ShowcasedDownload","ShowReleases","NoReleases","component","Releases","useState","state","status","setStatus","useEffect","loadMeta","metaUrl","Promise","allSettled","loadMetaResult","detectHostResult","error","String","reason","value","hostInfo","grouped","data","useReleases","CircularProgress","keys","length","mainSvgGradientId","mainGradient","textGradientStyle","background","WebkitBackgroundClip","WebkitTextFillColor","gradientedBackgroundButton","color","boxShadow","baseTheme","createTheme","palette","mode","typography","fontFamily","h1","fontSize","lineHeight","textTransform","letterSpacing","h2","fontWeight","body1","body2","overline","button","borderRadius","theme","components","MuiCssBaseline","styleOverrides","backgroundColor","MuiLinearProgress","bar","colorPrimary","MuiCircularProgress","circle","stroke","MuiCard","root","backgroundImage","padding","MuiCardContent","MuiCardActions","MuiTabs","indicator","MuiTab","MuiFab","primary","MuiPaper","MuiAccordion","content","MuiButton","borderColor","containedPrimary","containedSecondary","outlinedPrimary","borderWidth","textPrimary","MuiListItemButton","MuiMenuItem","MuiDialog","paper","SVGGradientProvider","children","id","x1","y1","x2","y2","offset","stopColor","HelpLinks","link","icon","BookOutlined","Guides","Card","startIcon","useConfig","cache","setCache","then","val","yumInstructions","repoName","packageName","Repositories","repoUrl","cfg","title","instructions","aptRepoUrl","aptRepoSourceName","aptPackageName","yumRepoUrl","yumRepoSourceName","yumPackageName","Repository","CardContent","overflow","join","App","StyledEngineProvider","injectFirst","ThemeProvider","CssBaseline","position","top","left","objectFit","zIndex","Container","maxWidth","m","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.23ce1e8b.chunk.js","sourcesContent":["import { Release } from \"./releases\";\n\nexport type HostInfo = Pick;\n\n// For when the host is detected but it is explicitly unsupported.\nexport const UnsupportedHost = Symbol(\"detectHostUnsupported\");\n\nexport const detectHost = async (): Promise<\n HostInfo | typeof UnsupportedHost\n> => {\n const userAgentDataHost = await detectHostUserAgentData();\n if (userAgentDataHost) {\n return userAgentDataHost;\n }\n\n const userAgentHost = detectHostUserAgent();\n if (userAgentHost) {\n return userAgentHost;\n }\n\n // fallback: most common\n return { platform: \"win32\", arch: \"x64\" };\n};\n\nexport const detectHostUserAgentData = async (): Promise<\n HostInfo | null | typeof UnsupportedHost\n> => {\n const { userAgentData } = navigator;\n if (!userAgentData) {\n // User agent data unsupported in this browser.\n return null;\n }\n\n const { architecture, bitness, platform } =\n await userAgentData.getHighEntropyValues([\"architecture\", \"bitness\"]);\n\n if (!architecture) {\n return null;\n }\n\n let ourPlatform: null | Release[\"platform\"] = null;\n let ourArch: null | Release[\"arch\"] = null;\n\n if (platform === \"macOS\") {\n ourPlatform = \"darwin\";\n } else if (platform === \"Windows\") {\n ourPlatform = \"win32\";\n } else if (platform === \"Linux\") {\n ourPlatform = \"linux\";\n }\n\n if (architecture === \"arm\" && bitness === \"64\") {\n ourArch = \"arm64\";\n } else if (architecture === \"x86\" && bitness == \"64\") {\n ourArch = \"x64\";\n }\n\n if (ourPlatform !== null && ourArch !== null) {\n return { platform: ourPlatform, arch: ourArch };\n }\n\n return null;\n};\n\nexport const detectHostUserAgent = (): HostInfo | null => {\n const userAgent = navigator.userAgent;\n if (userAgent.includes(\"Mac OS\")) {\n if (userAgent.includes(\"Intel\")) {\n return { platform: \"darwin\", arch: \"x64\" };\n } else {\n return { platform: \"darwin\", arch: \"arm64\" };\n }\n } else if (userAgent.includes(\"Windows\")) {\n return { platform: \"win32\", arch: \"x64\" };\n } else if (userAgent.includes(\"Linux\")) {\n return { platform: \"linux\", arch: \"x64\" };\n }\n\n return null;\n};\n","import { HostInfo, UnsupportedHost } from \"./detectHost\";\nimport { groupBy } from \"./groupBy\";\nimport { Entry, Meta } from \"./meta\";\n\nexport type OS = \"linux\" | \"windows\" | \"macos\";\n\nexport type Release = Entry & {\n resolvedUrl: string;\n os: OS;\n};\n\nconst platformToOs = (platform: string): OS => {\n if (platform.includes(\"linux\")) return \"linux\";\n if (platform.includes(\"mac\") || platform.includes(\"darwin\")) return \"macos\";\n return \"windows\";\n};\n\nexport const parseReleases = (meta: Meta, baseUrl: string): Release[] =>\n meta.entries.map((entry) => {\n const resolvedUrl = new URL(entry.url, baseUrl).toString();\n const os = platformToOs(entry.platform);\n return {\n ...entry,\n url: resolvedUrl,\n os,\n resolvedUrl,\n };\n });\n\nexport type SplitReleases = {\n hostLatestRelease?: Release;\n otherLatestReleases: Release[];\n};\n\nexport const splitReleases = (\n releases: Release[],\n host: HostInfo | typeof UnsupportedHost\n): SplitReleases => {\n if (host === UnsupportedHost) {\n return {\n hostLatestRelease: undefined,\n otherLatestReleases: releases,\n };\n }\n\n const hostLatestRelease = releases.find(\n (x) => x.arch === host.arch && x.platform === host.platform\n );\n return {\n hostLatestRelease,\n otherLatestReleases: releases.filter((x) => x !== hostLatestRelease),\n };\n};\n\nexport const sortReleases = (releases: Release[]): Release[] =>\n [...releases].sort((a, b) => a.platform.localeCompare(b.platform));\n\nexport const groupReleasesByPlatform = (\n releases: Release[]\n): Record => {\n return groupBy(\n releases,\n (release) => release.platform\n );\n};\n","export const groupBy = (\n arr: T[],\n fn: (item: T) => U\n): Record => {\n return arr.reduce((acc, item) => {\n const key = fn(item);\n return {\n ...acc,\n [key]: [...(acc[key] ?? []), item],\n };\n }, {} as Record);\n};\n","import { load, PlainConfig } from \"hybridconfig\";\n\ntype AllowedKeys =\n | \"metaUrl\"\n | \"aptRepoUrl\"\n | \"aptRepoSourceName\"\n | \"aptPackageName\"\n | \"yumRepoUrl\"\n | \"yumRepoSourceName\"\n | \"yumPackageName\";\n\nconst config = load({\n remoteConfigPath: \"/config.json\",\n envKeyPrefix: \"APP_\",\n});\n\nexport type Config = PlainConfig;\n\nexport default config;\n","export type Entry = {\n name: string;\n url: string;\n platform: string;\n arch: string;\n};\n\nexport type Meta = {\n version: string;\n entries: Entry[];\n};\n\nexport const fetchMeta = async (url: string): Promise => {\n const res = await fetch(url, {\n headers: {\n Accept: \"application/json\",\n },\n });\n const resBody: unknown = await res.json();\n if (isMeta(resBody)) {\n return resBody;\n }\n throw new Error(\"invalid meta\");\n};\n\nconst isMeta = (shape: unknown): shape is Meta => {\n return shape !== null && typeof shape === \"object\" && \"entries\" in shape;\n};\n","import { Release } from \"./releases\";\n\nexport type ReleaseData = {\n text: string;\n subtext?: string;\n};\n\nconst formatRelease = (r: Release): ReleaseData => {\n switch (r.os) {\n case \"linux\":\n return formatReleaseLinux(r);\n case \"macos\":\n return formatReleaseMacos(r);\n case \"windows\":\n return formatReleaseWindows(r);\n default:\n return formatReleaseGeneric(r);\n }\n};\n\nconst getExt = (filename: string) =>\n filename.slice(filename.lastIndexOf(\".\") + 1);\n\nconst formatReleaseGeneric = (r: Release): ReleaseData => {\n const ext = getExt(r.name);\n return { text: `${r.platform} ${r.arch} (${ext})` };\n};\n\nconst formatReleaseLinux = (r: Release): ReleaseData => {\n const ext = getExt(r.name);\n\n const platformName = r.arch == \"x64\" ? \"Linux amd64\" : `Linux ${r.arch}`;\n\n const distribution =\n ext === \"deb\"\n ? \"Debian package\"\n : ext === \"rpm\"\n ? \"RPM package\"\n : ext === \"zip\"\n ? \"ZIP-archive\"\n : `(${ext})`;\n\n return { text: platformName, subtext: distribution };\n};\n\nconst formatReleaseMacos = (r: Release): ReleaseData => {\n const ext = getExt(r.name);\n\n // For macOS, we convert architectures to the more user-friendly names.\n const platformName =\n r.arch === \"arm64\"\n ? \"macOS on Apple Silicon\"\n : r.arch === \"x64\"\n ? \"macOS on Intel\"\n : `macOS on ${r.arch}`;\n\n const distribution = ext === \"zip\" ? \"ZIP-archive\" : ext;\n\n return { text: platformName, subtext: distribution };\n};\n\nconst formatReleaseWindows = (r: Release): ReleaseData => {\n const ext = getExt(r.name);\n\n // For Windows, x64 is default, so we just omit the arch.\n const platformName = r.arch === \"x64\" ? \"Windows\" : `Windows ${r.arch}`;\n\n // The .exe installer is just the default option for windows.\n const distribution =\n ext === \"exe\" ? undefined : ext === \"zip\" ? \"ZIP-archive\" : ext;\n\n return { text: platformName, subtext: distribution };\n};\n\nexport default formatRelease;\n","import React from \"react\";\nimport { OS } from \"../utils/releases\";\n\nexport const OSIcon: React.FC<{ os: OS }> = (props) => (\n \n);\n","import { Button, Stack, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport React from \"react\";\nimport { ReleasesData } from \"../hooks/useReleases\";\nimport formatRelease from \"../utils/formatRelease\";\nimport { Release } from \"../utils/releases\";\nimport { OSIcon } from \"./OSIcon\";\n\ntype Props = {\n releases: ReleasesData[\"otherLatestReleases\"];\n};\n\nconst AlternativeDownloads: React.FC = React.memo((props) => {\n const { releases } = props;\n\n return (\n \n \n Also available on\n \n *\": {\n flexBasis: \"100%\",\n },\n }}\n >\n {Object.entries(releases).map(([platform, releases]) => (\n \n {releases.map((release) => (\n \n ))}\n \n ))}\n \n \n );\n});\n\ntype DownloadProps = {\n release: Release;\n};\n\nconst Download: React.FC = React.memo((props) => {\n const { release } = props;\n const { text, subtext } = formatRelease(release);\n\n return (\n \n \n \n );\n});\n\nexport default AlternativeDownloads;\n","import { Box, Button, Stack, Typography } from \"@mui/material\";\nimport React from \"react\";\nimport formatRelease from \"../utils/formatRelease\";\nimport { Release } from \"../utils/releases\";\nimport { OSIcon } from \"./OSIcon\";\n\ntype Props = { release: Release | undefined };\n\nconst ShowcasedDownload: React.FC = (props) => {\n const { release } = props;\n return release ? : ;\n};\n\ntype DownloadProps = {\n release: Release;\n};\n\nconst Download: React.FC = (props) => {\n const { release } = props;\n const { text, subtext } = formatRelease(release);\n\n return (\n \n \n \n {text}\n \n {subtext}\n \n \n \n );\n};\n\nconst DisabledDownload: React.FC = () => {\n return (\n \n \n \n );\n};\n\nexport default ShowcasedDownload;\n","import { Box, CircularProgress } from \"@mui/material\";\nimport React from \"react\";\nimport { ReleasesData, useReleases } from \"../hooks/useReleases\";\nimport AlternativeDownloads from \"./AlternativeDownloads\";\nimport ShowcasedDownload from \"./ShowcasedDownload\";\n\nconst Releases: React.FC = () => {\n const releases = useReleases();\n\n return (\n <>\n {releases.state === \"loading\" ? (\n \n ) : releases.state === \"error\" ? (\n \n ) : releases.data.hostLatestRelease === undefined &&\n Object.keys(releases.data.otherLatestReleases).length === 0 ? (\n \n ) : (\n \n )}\n \n );\n};\n\ntype Props = { releases: ReleasesData };\n\nconst ShowReleases: React.FC = (props) => {\n const { releases } = props;\n\n return (\n <>\n \n \n \n );\n};\n\nconst NoReleases: React.FC = () => {\n return (\n <>\n \n No releases found.\n \n );\n};\n\nexport default Releases;\n","import { useEffect, useState } from \"react\";\nimport {\n groupReleasesByPlatform,\n parseReleases,\n Release,\n sortReleases,\n splitReleases,\n} from \"../utils/releases\";\nimport config from \"../config\";\nimport { fetchMeta } from \"../utils/meta\";\nimport { detectHost } from \"../utils/detectHost\";\n\nexport type ReleasesData = {\n hostLatestRelease?: Release;\n otherLatestReleases: Record;\n};\n\nexport type UseReleasesState =\n | { state: \"loading\" }\n | { state: \"error\"; error: string }\n | {\n state: \"ready\";\n data: ReleasesData;\n };\n\nexport const useReleases = (): UseReleasesState => {\n const [status, setStatus] = useState({ state: \"loading\" });\n\n useEffect(() => {\n const loadMeta = async () => {\n const { metaUrl } = await config;\n const meta = await fetchMeta(metaUrl);\n return { metaUrl, meta };\n };\n\n const fn = async () => {\n const [loadMetaResult, detectHostResult] = await Promise.allSettled([\n loadMeta(),\n detectHost(),\n ]);\n\n if (loadMetaResult.status === \"rejected\") {\n setStatus({ state: \"error\", error: String(loadMetaResult.reason) });\n return;\n }\n const { meta, metaUrl } = loadMetaResult.value;\n\n if (detectHostResult.status === \"rejected\") {\n setStatus({ state: \"error\", error: String(detectHostResult.reason) });\n return;\n }\n const hostInfo = detectHostResult.value;\n\n const releases = parseReleases(meta, metaUrl);\n\n const { hostLatestRelease, otherLatestReleases } = splitReleases(\n sortReleases(releases),\n hostInfo\n );\n\n const grouped = groupReleasesByPlatform(otherLatestReleases);\n\n setStatus({\n state: \"ready\",\n data: {\n hostLatestRelease,\n otherLatestReleases: grouped,\n },\n });\n };\n void fn();\n }, []);\n\n return status;\n};\n","import { createTheme, Theme } from \"@mui/material/styles\";\nimport { CSSInterpolation } from \"@mui/system\";\ndeclare module \"@mui/material/styles\" {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface DefaultTheme extends Theme {}\n}\n\nexport const mainSvgGradientId = \"main-svg-gradient\";\nexport const mainGradient = \"linear-gradient(45deg, #C62A1F 0%, #F8C16C 100%)\";\nexport const textGradientStyle = {\n background: `-webkit-${mainGradient}`,\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n};\nexport const gradientedBackgroundButton: CSSInterpolation = {\n background: mainGradient,\n color: \"#fff\",\n \"&:hover\": {\n boxShadow: \"inset 10px 10px 40px #FFFFFF33\",\n },\n \"&:active\": {\n boxShadow: \"inset 14px 14px 30px 9px #30272733\",\n },\n \"&:disabled\": {\n background: \"#303030\",\n color: \"#fff\",\n },\n};\nconst baseTheme = createTheme({\n palette: {\n mode: \"dark\",\n },\n typography: {\n fontFamily: \"FuturaPT\",\n h1: {\n fontSize: \"27px\",\n lineHeight: \"35px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5rem\",\n },\n h2: {\n fontSize: \"0.95rem\",\n textTransform: \"uppercase\",\n fontWeight: 400,\n letterSpacing: \"0.1rem\",\n color: \"#fff\",\n },\n body1: {\n fontSize: \"0.90rem\",\n fontWeight: 300,\n lineHeight: 1,\n color: \"#fff\",\n },\n body2: {\n fontSize: \"0.85rem\",\n color: \"#929292\",\n },\n overline: {\n letterSpacing: \"0.08em\",\n fontSize: \"13px\",\n color: \"#ffffff88\",\n },\n button: {\n letterSpacing: \"0.15em\",\n fontSize: \"13px\",\n },\n },\n shape: {\n borderRadius: 0,\n },\n});\n\nconst theme = createTheme(\n {\n components: {\n MuiCssBaseline: {\n styleOverrides: {\n \"*::-webkit-scrollbar\": {\n width: 15,\n height: 15,\n },\n \"*::-webkit-scrollbar-track\": {\n width: 15,\n height: 15,\n backgroundColor: \"#1A1A1A\",\n },\n \"*::-webkit-scrollbar-thumb\": {\n width: 15,\n height: 15,\n backgroundColor: \"#242424\",\n },\n \"*::-webkit-scrollbar-corner\": {\n backgroundColor: \"#1A1A1A\",\n },\n },\n },\n MuiLinearProgress: {\n styleOverrides: {\n bar: {\n background: mainGradient,\n },\n colorPrimary: {\n backgroundColor: \"#363636\",\n },\n },\n },\n MuiCircularProgress: {\n styleOverrides: {\n circle: {\n stroke: `url(#${mainSvgGradientId})`,\n },\n },\n },\n MuiCard: {\n styleOverrides: {\n root: {\n backgroundColor: \"#202020\",\n backgroundImage: \"none\",\n padding: \"35px 50px\",\n },\n },\n },\n MuiCardContent: {\n styleOverrides: {\n root: {\n padding: \"0\",\n },\n },\n },\n MuiCardActions: {\n styleOverrides: {\n root: {\n padding: \"0\",\n },\n },\n },\n MuiTabs: {\n styleOverrides: {\n indicator: {\n ...gradientedBackgroundButton,\n },\n },\n },\n MuiTab: {\n styleOverrides: {\n root: {\n textTransform: \"none\",\n letterSpacing: \"0.1em\",\n color: \"#8B8B8B\",\n fontWeight: 400,\n \"&.Mui-selected\": textGradientStyle,\n },\n },\n },\n MuiFab: {\n styleOverrides: {\n primary: {\n borderRadius: 0,\n ...gradientedBackgroundButton,\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n boxShadow: \"none\",\n backgroundColor: \"#101010\",\n },\n },\n },\n MuiAccordion: {\n styleOverrides: {\n root: {\n \"&:before\": {\n content: \"none\",\n },\n },\n },\n },\n MuiButton: {\n styleOverrides: {\n root: {\n \"&:hover\": {\n borderColor: \"#ffa08b\",\n backgroundColor: \"rgba(255, 255, 255, 0.10)\",\n },\n },\n containedPrimary: {\n ...gradientedBackgroundButton,\n \"&:hover\": {\n backgroundColor: \"#C62A1F88\",\n boxShadow: \"inset 0px 0px 20px 20px #C62A1F88\",\n },\n },\n containedSecondary: {\n color: \"#fff8\",\n textTransform: \"none\",\n backgroundColor: \"#1A1A1A\",\n boxShadow: \"none\",\n \"&:hover\": {\n background: \"#262626\",\n color: \"#fff\",\n boxShadow: \"none\",\n },\n \"&:disabled\": {\n background: \"#303030\",\n },\n },\n outlinedPrimary: {\n color: \"#fff\",\n borderColor: \"#979797\",\n borderWidth: 1,\n \"&:disabled\": {\n borderColor: \"#575757\",\n },\n },\n textPrimary: {\n textTransform: \"none\",\n color: \"#fff\",\n },\n },\n },\n MuiListItemButton: {\n styleOverrides: {\n root: {\n backgroundColor: \"#151515\",\n \"&.Mui-selected\": gradientedBackgroundButton,\n \"&:hover\": {\n backgroundColor: \"#262626\",\n },\n },\n },\n },\n MuiMenuItem: {\n styleOverrides: {\n root: {\n \"&.Mui-selected\": gradientedBackgroundButton,\n },\n },\n },\n MuiDialog: {\n styleOverrides: {\n paper: {\n backgroundColor: \"#202020\",\n backgroundImage: \"none\",\n },\n },\n },\n },\n },\n baseTheme\n);\nexport default theme;\n","import { mainSvgGradientId } from \"../theme\";\nimport React from \"react\";\n\nexport const SVGGradientProvider: React.FC = ({ children }) => {\n return (\n <>\n \n \n \n \n \n \n {children}\n \n );\n};\n","import { Card, Stack, Typography, Button } from \"@mui/material\";\nimport { BookOutlined } from \"@mui/icons-material\";\n\nexport const HelpLinks = [\n {\n link: \"https://link.humanode.io/guide/launcher\",\n name: \"Guide for setting up a node with the launcher\",\n icon: ,\n },\n {\n link: \"https://link.humanode.io/docs\",\n name: \"Documentation\",\n icon: ,\n },\n];\nexport const Guides: React.FC = () => {\n return (\n \n \n \n Useful links\n \n \n {HelpLinks.map((link) => (\n \n {link.name}\n \n ))}\n \n \n \n );\n};\n","import { useEffect, useState } from \"react\";\nimport config, { Config } from \"../config\";\n\nexport const useConfig = (): Config | null => {\n const [cache, setCache] = useState(null);\n\n useEffect(() => {\n void config.then((val) => {\n setCache(val);\n });\n }, []);\n\n return cache;\n};\n\nexport default useConfig;\n","export const aptInstructions = (\n repoUrl: string,\n repoName: string,\n packageName: string\n): string[] => {\n return [\n `sudo apt-get install apt-transport-https`,\n `echo \"deb [trusted=yes] ${repoUrl} ./\" | sudo tee /etc/apt/sources.list.d/${repoName}.list`,\n \"sudo apt-get update\",\n `sudo apt-get install ${packageName}`,\n ];\n};\n\nexport const yumInstructions = (\n url: string,\n repoName: string,\n packageName: string\n): string[] => {\n return [\n `cat < {\n const cfg = useConfig();\n if (cfg === null) {\n return <>;\n }\n return (\n <>\n \n \n \n );\n};\n\nconst Repository: React.FC<{ title: string; instructions: string[] }> = ({\n title,\n instructions,\n}) => {\n return (\n \n \n \n {title}\n \n \n \n
{instructions.join(\"\\n\")}
\n
\n
\n
\n
\n );\n};\n","import { Card, Container, CssBaseline, Stack, Typography } from \"@mui/material\";\nimport { StyledEngineProvider, ThemeProvider } from \"@mui/system\";\nimport React from \"react\";\nimport Releases from \"./components/Releases\";\nimport { SVGGradientProvider } from \"./components/SVGGradientProvider\";\nimport { Guides } from \"./Guides\";\nimport { Repositories } from \"./Repositories\";\nimport theme from \"./theme\";\n\nconst App: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n Get the Humanode Launcher and run your node!\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n","import { ReportHandler } from \"web-vitals\";\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler): void => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n void import(\"web-vitals\").then(\n ({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n }\n );\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nReactDOM.render(\n \n \n ,\n document.getElementById(\"root\")\n);\n\nreportWebVitals();\n"],"sourceRoot":""}