1import fetch from 'node-fetch' 4export const cfCdnTraceUrl = 'https://1.1.1.1/cdn-cgi/trace' 5const cfCdnTraceDomain = 'https://cloudflare.com/cdn-cgi/trace' 7export const parseCfCdnTrace = (text: string) => { 8 return Object.fromEntries( 9 text.split("\n").map(s => s.trim()).filter(Boolean).map(line => line.split("=")) 13export const getMyCfExtIp = async (): Promise<string | false> => { 14 const text = await (await fetch(cfCdnTraceUrl)).text() 15 const cfTrace = parseCfCdnTrace(text) 19 console.log('softFail getMyExtIp') 25export const getCfExtIpViaDomain = async (): Promise<string | false> => { 27 const text = await (await globalThis.fetch(cfCdnTraceDomain, {signal: AbortSignal.timeout(5000)})).text() 28 const {ip} = parseCfCdnTrace(text) 30 } catch { return false } 33export type ExtIpSource = () => Promise<string | false>