parse-dnsmasq.ts 805 B

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