export const name = "Apple"; export const url = "https://www.apple.com/support/systemstatus/"; const STATUS_URL = "https://www.apple.com/support/systemstatus/data/system_status_en_US.js"; // eventStatus values that mean the event is no longer active const RESOLVED_STATUSES = new Set(["resolved", "completed"]); // statusType → dashboard status (Performance issues = degraded, outages = outage) function mapStatusType(statusType) { const t = (statusType ?? "").toLowerCase(); if (t === "outage") return "outage"; return "degraded"; // Performance, Maintenance, or anything else } export async function checkStatus() { const res = await fetch(STATUS_URL); if (!res.ok) { throw new Error(`Apple status request failed (${res.status})`); } const data = await res.json(); const services = data.services ?? []; // Collect services with active (unresolved) events const affected = []; let overall = "operational"; for (const svc of services) { const activeEvents = (svc.events ?? []).filter( (e) => !RESOLVED_STATUSES.has((e.eventStatus ?? "").toLowerCase()) ); if (activeEvents.length === 0) continue; for (const event of activeEvents) { const mapped = mapStatusType(event.statusType); if (mapped === "outage" || overall === "operational") { overall = mapped; } affected.push(`${svc.serviceName}: ${event.message ?? event.statusType}`); } } const message = affected.length > 0 ? affected.join(" | ") : "All services operating normally."; return { name, status: overall, message, lastUpdated: new Date().toISOString(), }; }