{"version":3,"file":"edit-dns.cjs","sources":["../src/utils.ts","../src/paths.ts","../src/editors/Editor.ts","../src/editors/Macos.ts","../src/editors/Windows.ts","../src/editors/Linux.ts","../src/edit-dns.ts"],"sourcesContent":["import { exec } from 'child_process'\nimport { promisify } from 'util'\nimport { readFile, writeFile, mkdirSync, readlink, unlink, exists } from 'fs'\nimport * as path from 'path'\n\nexport const nonSudoExec = promisify(exec)\nexport const readFileAsync = promisify(readFile)\nexport const writeFileAsync = promisify(writeFile)\nexport const readlinkAsync = promisify(readlink)\nexport const unlinkAsync = promisify(unlink)\nexport const existsAsync = promisify(exists)\n\nexport const readFileAsLines = async (path: string) => {\n  const data = await readFileAsync(path, 'utf8')\n  return data.split('\\n')\n}\n\nexport const escapeRegExp = (text: string) => {\n  return text.replace(/[\"]/g, '\\\\$&')\n}\n\nexport const mkkdirRecursive = (targetDir: string) => {\n  const sep = path.sep\n  const initDir = path.isAbsolute(targetDir) ? sep : ''\n  const baseDir = '.'\n\n  return targetDir.split(sep).reduce((parentDir, childDir) => {\n    const curDir = path.resolve(baseDir, parentDir, childDir)\n    try {\n      mkdirSync(curDir)\n    } catch (err) {\n      if (err.code === 'EEXIST') {\n        // curDir already exists!\n        return curDir\n      }\n\n      // To avoid `EISDIR` error on Mac and `EACCES`-->`ENOENT` and `EPERM` on Windows.\n      if (err.code === 'ENOENT') {\n        // Throw the original parentDir error on curDir `ENOENT` failure.\n        throw new Error(`EACCES: permission denied, mkdir '${parentDir}'`)\n      }\n\n      const caughtErr = ['EACCES', 'EPERM', 'EISDIR'].indexOf(err.code) > -1\n      if (!caughtErr || (caughtErr && curDir === path.resolve(targetDir))) {\n        throw err // Throw if it's just the last created dir.\n      }\n    }\n\n    return curDir\n  }, initDir)\n}\n","import * as path from 'path'\nimport * as os from 'os'\n\nconst homedir = os.homedir()\nconst tmpdir = os.tmpdir()\nconst { env } = process\n\nconst macos = (name: string) => {\n  const library = path.join(homedir, 'Library')\n\n  return {\n    data: path.join(library, 'Application Support', name),\n    config: path.join(library, 'Preferences', name),\n    cache: path.join(library, 'Caches', name),\n    log: path.join(library, 'Logs', name),\n    temp: path.join(tmpdir, name)\n  }\n}\n\nconst windows = (name: string) => {\n  const appData = env.APPDATA || path.join(homedir, 'AppData', 'Roaming')\n  const localAppData = env.LOCALAPPDATA || path.join(homedir, 'AppData', 'Local')\n\n  return {\n    // Data/config/cache/log are invented by me as Windows isn't opinionated about this\n    data: path.join(localAppData, name, 'Data'),\n    config: path.join(appData, name, 'Config'),\n    cache: path.join(localAppData, name, 'Cache'),\n    log: path.join(localAppData, name, 'Log'),\n    temp: path.join(tmpdir, name)\n  }\n}\n\n// https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html\nconst linux = (name: string) => {\n  const username = path.basename(homedir)\n\n  return {\n    data: path.join(env.XDG_DATA_HOME || path.join(homedir, '.local', 'share'), name),\n    config: path.join(env.XDG_CONFIG_HOME || path.join(homedir, '.config'), name),\n    cache: path.join(env.XDG_CACHE_HOME || path.join(homedir, '.cache'), name),\n    // https://wiki.debian.org/XDGBaseDirectorySpecification#state\n    log: path.join(env.XDG_STATE_HOME || path.join(homedir, '.local', 'state'), name),\n    temp: path.join(tmpdir, username, name)\n  }\n}\n\nconst envPaths = (name: string, options?: any) => {\n  options = Object.assign({ suffix: 'nodejs' }, options)\n\n  if (options.suffix) {\n    // Add suffix to prevent possible conflict with native apps\n    name += `-${options.suffix}`\n  }\n\n  if (process.platform === 'darwin') {\n    return macos(name)\n  }\n\n  if (process.platform === 'win32') {\n    return windows(name)\n  }\n\n  return linux(name)\n}\n\nexport default envPaths\n","import { readFileAsync, writeFileAsync, mkkdirRecursive, unlinkAsync, existsAsync } from '../utils'\nimport envPaths from '../paths'\nimport * as path from 'path'\n\nexport class Editor {\n  [key: string]: any\n\n  addedNameservers: string[] = []\n  savedNameservers: string[] = []\n  savedResolvFileLines: string[] = []\n  savedResolvSymlink: string = ''\n  networkInterface: string = ''\n  appName: string = ''\n  dataPath: string = ''\n\n  constructor(name: string = 'DefaultDns') {\n    this.appName = name\n    this.paths = envPaths(name)\n    this.dataPath = path.join(this.paths.data, `${name}.json`)\n  }\n\n  async saveDataToFile() {\n    if (!(await this.dataFileExists())) {\n      mkkdirRecursive(this.paths.data)\n    }\n\n    const data = JSON.stringify(\n      {\n        pid: process.pid,\n        addedNameservers: this.addedNameservers,\n        savedNameservers: this.savedNameservers,\n        savedResolvFileLines: this.savedResolvFileLines,\n        savedResolvSymlink: this.savedResolvSymlink,\n        networkInterface: this.networkInterface,\n        appName: this.appName\n      },\n      null,\n      2\n    )\n\n    await writeFileAsync(this.dataPath, data, 'utf-8')\n  }\n\n  async loadDataFromFile() {\n    if (!(await this.dataFileExists())) return\n\n    const data = JSON.parse(await readFileAsync(this.dataPath, 'utf-8'))\n\n    for (const [key, value] of Object.entries(data)) {\n      this[key] = value\n    }\n  }\n\n  async deleteDataFile() {\n    if (!(await this.dataFileExists())) return\n\n    await unlinkAsync(this.dataPath)\n  }\n\n  async dataFileExists() {\n    return await existsAsync(this.dataPath)\n  }\n}\n","import { nonSudoExec } from '../utils'\nimport { Editor } from './Editor'\n\nexport class MacosEditor extends Editor {\n  constructor(name: string = 'DefaultDns') {\n    super(name)\n  }\n\n  /**\n   * Sets current network interface's DNS\n   *\n   * @param dnsList List of new DNS addresses to apply\n   */\n  async load(dnsList: string[]) {\n    await this.updateNetworkInterface()\n    await this.setDns(this.networkInterface, dnsList)\n    this.addedNameservers = dnsList\n  }\n\n  /**\n   * Saves current user's list of DNs addresses\n   */\n  async save() {\n    await this.updateNetworkInterface()\n    this.savedNameservers = await this.getDns(this.networkInterface)\n    await this.saveDataToFile()\n  }\n\n  /**\n   * Set's DNS list to currently saved list\n   */\n  async recover() {\n    await this.loadDataFromFile()\n    await this.setDns(this.networkInterface, this.savedNameservers)\n  }\n\n  /**\n   * Check if name server exists\n   *\n   * @param nameserver Name of the nameserver to find if exists\n   */\n  async exists(nameserver: string) {\n    const currentInterface = this.networkInterface\n      ? this.networkInterface\n      : await this.getNetworkInterface()\n    const nameservers = await this.getDns(currentInterface)\n    return nameservers.find(ns => ns === nameserver)\n  }\n\n  /**\n   * Fetches the current network interface and updates class object\n   */\n  async updateNetworkInterface() {\n    this.networkInterface = await this.getNetworkInterface()\n  }\n\n  /**\n   * Updates the list of DNS addresses for a particular network interface\n   *\n   * @param networkInterface Network interface to update\n   * @param dnsList List of DNS addresses to set\n   */\n  async setDns(networkInterface: string, dnsList: string[]) {\n    const joinedDnsList = dnsList.length ? dnsList.join(' ') : 'empty'\n    return nonSudoExec(`networksetup -setdnsservers \"${networkInterface}\" ${joinedDnsList}`)\n  }\n\n  /**\n   * Fetches list of DNS addresses\n   *\n   * @param networkInterface Network interface to read\n   */\n  async getDns(networkInterface: string): Promise<string[]> {\n    const { stdout } = await nonSudoExec(`networksetup -getdnsservers \"${networkInterface}\"`)\n\n    if (stdout && !/'/.test(stdout)) {\n      return stdout.split('\\n').filter(line => line)\n    } else {\n      return []\n    }\n  }\n\n  /**\n   * Get current network interface\n   */\n  async getNetworkInterface() {\n    const { stdout } = await nonSudoExec(\n      `networksetup -listnetworkserviceorder | grep $(route get example.com | grep interface | awk '{print $2}') | awk 'gsub(/.*Hardware Port: |,.*/,\"\")'`\n    )\n    return stdout.trim()\n  }\n}\n","import { nonSudoExec } from '../utils'\nimport { Editor } from './Editor'\n\nexport class WindowsEditor extends Editor {\n  constructor(name: string = 'DefaultDns') {\n    super(name)\n  }\n\n  /**\n   *\n   * @param dnsList List of new DNS addresses to apply\n   */\n  async load(dnsList: string[]) {\n    await this.updateNetworkInterface()\n    await this.setDns(this.networkInterface, dnsList)\n\n    this.addedNameservers = dnsList\n    await this.saveDataToFile()\n  }\n\n  /**\n   * Saves current user's list of DNs addresses\n   */\n  async save() {\n    // Doesn't do anything\n  }\n\n  /**\n   * Set's DNS list to currently saved list\n   */\n  async recover() {\n    await this.loadDataFromFile()\n    await this.removeDns(this.networkInterface, this.addedNameservers)\n  }\n\n  /**\n   * Check if name server exists\n   *\n   * @param nameserver Name of the nameserver to find if exists\n   */\n  async exists(nameserver: string) {\n    const fullConfigLines = await this.getDns(this.networkInterface)\n    const regexp = new RegExp(nameserver)\n    return fullConfigLines.find(line => regexp.test(line))\n  }\n\n  /**\n   * Fetches the current network interface and updates class object\n   */\n  async updateNetworkInterface() {\n    this.networkInterface = await this.getNetworkInterface()\n  }\n\n  /**\n   * Updates the list of DNS addresses for a particular network interface\n   *\n   * @param networkInterface Network interface to update\n   * @param dnsList List of DNS addresses to set\n   */\n  async setDns(networkInterface: string, dnsList: string[]) {\n    let idx = 1\n    for (const ns of dnsList) {\n      await nonSudoExec(\n        `netsh interface ipv4 add dnsservers name=\"${networkInterface}\" ${ns} index=${idx} validate=no`\n      )\n      idx++\n    }\n  }\n\n  /**\n   * Deletes the list of DNS addresses for a particular network interface\n   *\n   * @param networkInterface Network interface to update\n   * @param dnsList List of DNS addresses to set\n   */\n  async removeDns(networkInterface: string, dnsList: string[]) {\n    for (const ns of dnsList) {\n      await nonSudoExec(\n        `netsh interface ipv4 delete dnsservers name=\"${networkInterface}\" ${ns} validate=no`\n      )\n    }\n  }\n\n  /**\n   * Fetches list of DNS addresses\n   *\n   * @param networkInterface Network interface to read\n   */\n  async getDns(networkInterface: string): Promise<string[]> {\n    const { stdout } = await nonSudoExec(`netsh interface ipv4 show config`)\n\n    console.log('Get DNS:', stdout)\n    if (stdout) {\n      return stdout.split('\\r\\n').filter(line => line)\n    } else {\n      return []\n    }\n  }\n\n  /**\n   * Get current network interface\n   */\n  async getNetworkInterface() {\n    const { stdout, stderr } = await nonSudoExec(`netsh interface show interface`)\n    console.log('Netint stdout:', stdout)\n    console.log('Netint stderr:', stderr)\n    const results = stdout\n      .split('\\r\\n')\n      .filter(line => line)\n      .map(line => line.split(/\\s+/))\n\n    console.log('Netint results:', results)\n\n    const resultInterface = results.find(\n      result => result.length === 4 && result[0] === 'Enabled' && result[1] === 'Connected'\n    ) || ['', '', '', '']\n\n    console.log('Netint resultInterface:', resultInterface)\n\n    return resultInterface[3]\n  }\n}\n","import { readFileAsLines, readlinkAsync, escapeRegExp } from '../utils'\nimport { Editor } from './Editor'\nimport { exec } from 'exec-root'\nconst RESOLV_PATH = '/etc/resolv.conf'\n\nexport class LinuxEditor extends Editor {\n  constructor(name: string = 'DefaultDns') {\n    super(name)\n  }\n\n  /**\n   * Sets current network interface's DNS\n   *\n   * @param dnsList List of new DNS addresses to apply\n   */\n  async load(dnsList: string[]) {\n    await this.setDns(dnsList, this.savedResolvFileLines)\n    this.addedNameservers = dnsList\n  }\n\n  /**\n   * Saves current user's list of DNs addresses\n   */\n  async save() {\n    this.savedResolvFileLines = await this.getDns()\n\n    try {\n      this.savedResolvSymlink = await readlinkAsync(RESOLV_PATH, 'utf8')\n    } catch (e) {\n      console.log(e)\n    }\n\n    await this.saveDataToFile()\n  }\n\n  /**\n   * Set's DNS list to currently saved lists\n   */\n  async recover() {\n    await this.loadDataFromFile()\n    await this.setDns([], this.savedResolvFileLines, this.savedResolvSymlink)\n  }\n\n  /**\n   * Check if name server exists\n   *\n   * @param nameserver Name of the nameserver to find if exists\n   */\n  async exists(nameserver: string) {\n    const currentResolvLines = await this.getDns()\n    const formattedNs = this.formatNs(nameserver)\n    return currentResolvLines.find(ns => ns === formattedNs)\n  }\n\n  /**\n   * Updates the list of DNS addresses for a particular network interface\n   *\n   * @param networkInterface Network interface to update\n   * @param dnsList List of DNS addresses to set\n   */\n  async setDns(dnsList: string[], savedLines: string[] = [], savedResolvSymlink: string = '') {\n    const fullFileLines = dnsList.map(ns => this.formatNs(ns)).concat(savedLines)\n    const text = fullFileLines.join('\\n')\n\n    const command = savedResolvSymlink !== ''\n      ? `ln -s ${savedResolvSymlink} ${RESOLV_PATH}`\n      : `tee ${RESOLV_PATH} <<< '${escapeRegExp(text)}'`\n\n    console.log('Setting DNS')\n    console.log(`Symlink: ${savedResolvSymlink}`)\n    console.log(`Command: bash -c \"rm -f ${RESOLV_PATH}; ${command};\"`)\n\n    await exec(\n      `bash -c \"rm -f ${RESOLV_PATH}; ${command};\"`,\n      { name: this.appName }\n    )\n  }\n\n  /**\n   * Fetches resolve conf\n   *\n   * @param networkInterface Network interface to read\n   */\n  async getDns() {\n    console.log('Get DNS')\n    console.log(await readFileAsLines(RESOLV_PATH))\n\n    return readFileAsLines(RESOLV_PATH)\n  }\n\n  formatNs(nameserver: string) {\n    return `nameserver ${nameserver}`\n  }\n}\n","import { MacosEditor, WindowsEditor, LinuxEditor } from './editors'\n\nlet editor: any\nif (process.platform === 'darwin') {\n  editor = MacosEditor\n} else if (process.platform === 'win32') {\n  editor = WindowsEditor\n} else if (process.platform === 'linux') {\n  editor = LinuxEditor\n} else {\n  console.error('Only Macos, Windows and Linux supported.')\n}\n\nexport default editor\n"],"names":["promisify","exec","readFile","writeFile","readlink","unlink","exists","path","path.sep","path.isAbsolute","path.resolve","mkdirSync","os.homedir","os.tmpdir","path.join","path.basename","tslib_1.__extends"],"mappings":"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"}