Emberveil sourcewebsite/player-count.js
(() => {
const output = document.getElementById('player-count');
if (!output) return;
const endpoint = 'https://downloads.emberveil.net/status.json';
async function update() {
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 8000);
try {
const response = await fetch(endpoint, {cache: 'no-store', signal: controller.signal});
if (!response.ok) throw new Error('Status unavailable');
const status = await response.json();
const age = Date.now() - status.updatedAt;
if (status.online !== true || !Number.isSafeInteger(status.players) || status.players < 0 ||
!Number.isSafeInteger(status.updatedAt) || age > 45000 || age < -45000) throw new Error('Stale status');
output.textContent = `${status.players.toLocaleString()} ${status.players === 1 ? 'player' : 'players'} online`;
} catch (_) {
output.textContent = 'Player count unavailable';
} finally {
clearTimeout(timeout);
}
}
update();
setInterval(() => { if (!document.hidden) update(); }, 15000);
document.addEventListener('visibilitychange', () => { if (!document.hidden) update(); });
})();