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}
| Domain | IP | Status |
${results.map(r => `
| ${r.domain} |
${r.ip || '-'} |
${r.blocked ? '🔴 Diblokir' : (r.error ? '⚠️ Error' : '🟢 Aman')}
|
`).join('')}
${refresh !== "off" ? `⏳ Refresh otomatis setiap ${refresh} detik.` : ''}
`;
return new Response(html, {
headers: { "Content-Type": "text/html" }
});
}
}