export default { async fetch(request) { const url = new URL(request.url); const domainsParam = url.searchParams.get("domain"); const refresh = url.searchParams.get("refresh") || "off"; if (!domainsParam) { return new Response(`

Tambahkan parameter ?domain=abc.com,xyz.com

`, { headers: { "Content-Type": "text/html" } }); } const domains = domainsParam.split(",").map(d => d.trim()); const results = await Promise.all(domains.map(async (domain) => { try { const dnsResp = await fetch(`https://cloudflare-dns.com/dns-query?name=${domain}&type=A`, { headers: { 'Accept': 'application/dns-json' } }); const dnsData = await dnsResp.json(); const answers = dnsData.Answer || []; let blocked = false; let resolvedIp = null; for (let answer of answers) { if (answer.type === 1) { resolvedIp = answer.data; if ( resolvedIp.startsWith("36.86.63.") || resolvedIp.startsWith("203.130.196.") ) { blocked = true; break; } } } return { domain, blocked, ip: resolvedIp }; } catch (err) { return { domain, error: err.message }; } })); // Statistik const total = results.length; const blockedCount = results.filter(r => r.blocked).length; const unblockedCount = total - blockedCount; // HTML Output const autoRefreshTag = refresh !== "off" ? `` : ""; const html = ` Cek Blokir Nawala ${autoRefreshTag}

📡 Hasil Cek Blokir Nawala

Total: ${total} domain — 🔴 Diblokir: ${blockedCount} | 🟢 Aman: ${unblockedCount}

${results.map(r => ` `).join('')}
DomainIPStatus
${r.domain} ${r.ip || '-'} ${r.blocked ? '🔴 Diblokir' : (r.error ? '⚠️ Error' : '🟢 Aman')}

${refresh !== "off" ? `⏳ Refresh otomatis setiap ${refresh} detik.` : ''}

`; return new Response(html, { headers: { "Content-Type": "text/html" } }); } }