{"version":3,"sources":["App.js","reportWebVitals.js","index.js"],"names":["App","useState","data","setData","useEffect","intervalId","setInterval","axios","get","then","response","catch","clearInterval","rows","servers","map","server","key","bots","info","Bots","Table","Row","Cell","HostName","Map","Players","MaxPlayers","ModDesc","Button","primary","onClick","window","location","href","ip","port","Container","style","paddingTop","paddingBottom","Header","as","singleLine","selectable","HeaderCell","Body","Footer","colSpan","Label","ribbon","Math","floor","Date","getTime","updated","horizontal","target","rel","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.eb9033cf.chunk.js","sourcesContent":["import './App.css';\nimport { Button, Container, Header, Table, Label } from 'semantic-ui-react';\nimport { useEffect, useState } from 'react';\nimport axios from 'axios';\n\nfunction App() {\n const [data, setData] = useState();\n\n useEffect(() => {\n const intervalId = setInterval(() =>\n axios.get('https://game-server-live-status-api.thomas1234567123123.workers.dev/')\n .then((response) => {\n setData(response.data);\n })\n .catch(() => {})\n , 1000);\n return () => clearInterval(intervalId);\n }, []);\n\n const rows = !data ? [] : data.servers.map((server, key) => {\n const bots = server.info.Bots === 0 ? '' : ` (${server.info.Bots})`;\n\n return (\n \n {server.info.HostName}\n {server.info.Map}\n {server.info.Players}{bots}/{server.info.MaxPlayers}\n {server.info.ModDesc}\n \n \n \n \n )\n })\n\n return (\n \n
Game Server Live Status
\n\n \n \n \n Name\n Map\n Players\n Description\n \n \n \n\n \n {data && rows}\n \n\n \n \n \n \n \n \n \n \n
\n\n
How does it work
\n

\n This application uses Cloudflare Workers to query the servers with crontab and cached the servers' status in KV storage, so the end users can receieve the servers' status faster.\n Moreover, we can use Cloudflare Workers as an additional layer to cache the data so our backend server can reduce loading.\n

\n\n \n \n \n Cloudflare Product Used\n Usage\n Github\n \n \n\n \n \n Workers\n Provide API Endpoint\n \n https://github.com/tatlead/GameServerLiveStatus/tree/main/workers\n \n \n \n Workers KV\n Cache the servers' status in key-value data store\n \n \n \n \n \n Pages\n Frontend Application\n \n https://github.com/tatlead/GameServerLiveStatus/tree/main/pages\n \n \n \n
\n
\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport 'semantic-ui-css/semantic.min.css';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}