parse-dnsmasq.ts 681 B

123456789101112131415161718192021
  1. import { fetchRemoteTextByLine } from './fetch-text-by-line';
  2. import { parse } from 'tldts';
  3. const isDomainLoose = (domain: string): boolean => {
  4. const { isIcann, isPrivate, isIp } = parse(domain);
  5. return !!(!isIp && (isIcann || isPrivate));
  6. };
  7. export const parseFelixDnsmasq = async (url: string | URL): Promise<string[]> => {
  8. const res: string[] = [];
  9. for await (const line of await fetchRemoteTextByLine(url)) {
  10. if (line.startsWith('server=/') && line.endsWith('/114.114.114.114')) {
  11. const domain = line.replace('server=/', '').replace('/114.114.114.114', '');
  12. if (isDomainLoose(domain)) {
  13. res.push(domain);
  14. }
  15. }
  16. }
  17. return res;
  18. };