import path from 'path'; import { task } from './trace'; import { compareAndWriteFile } from './lib/create-file'; import { DIRECTS } from '../Source/non_ip/direct'; const HOSTNAMES = [ // Intranet, Router Setup, and mant more ...(Object.entries(DIRECTS)).flatMap(([, { domains }]) => domains.flatMap((domain) => [`*.${domain}`, domain])), // Network Detection, Captive Portal 'msftncsi.com', 'msftconnecttest.com', '*.msftncsi.com', '*.msftconnecttest.com', 'network-test.debian.org', 'detectportal.firefox.com', 'resolver1.opendns.com', '*.ipv6.microsoft.com', // Handle SNAT conversation properly '*.srv.nintendo.net', '*.stun.playstation.net', 'xbox.*.microsoft.com', '*.xboxlive.com', 'turn.twilio.com', '*.turn.twilio.com', 'stun.twilio.com', '*.stun.twilio.com', 'stun.syncthing.net', 'stun.*', 'controlplane.tailscale.com', // NTP 'time.*.com', 'time.*.gov, time.*.edu.cn, time.*.apple.com', 'time?.*.com', 'ntp.*.com', 'ntp?.*.com', '*.time.edu.cn', '*.ntp.org.cn', '*.pool.ntp.org', 'time*.cloud.tencent.com', // QQ Login 'localhost.ptlogin2.qq.com', 'localhost.sec.qq.com', 'localhost.work.weixin.qq.com', // Microsoft Auto Discovery 'PDC._msDCS.*.*', 'DC._msDCS.*.*', 'GC._msDCS.*.*', // Misc, '*.battlenet.com.cn', '*.blzstatic.cn', '*.battlenet.com' ] as const; export const buildAlwaysRealIPModule = task(import.meta.main, import.meta.path)(async (span) => { return compareAndWriteFile( span, [ '#!name=[Sukka] Always Real IP Plus', `#!desc=Last Updated: ${new Date().toISOString()}`, '', '[General]', `always-real-ip = %APPEND% ${HOSTNAMES.join(', ')}` ], path.resolve(import.meta.dir, '../Modules/sukka_common_always_realip.sgmodule') ); });