Skip to content
Snippets Groups Projects
is-online.ts 899 B
Newer Older
Marcus Schiesser's avatar
Marcus Schiesser committed
import { execSync } from "child_process";
import dns from "dns";
import url from "url";

function getProxy(): string | undefined {
  if (process.env.https_proxy) {
Marcus Schiesser's avatar
Marcus Schiesser committed
    return process.env.https_proxy;
Marcus Schiesser's avatar
Marcus Schiesser committed
    const httpsProxy = execSync("npm config get https-proxy").toString().trim();
    return httpsProxy !== "null" ? httpsProxy : undefined;
  } catch (e) {
Marcus Schiesser's avatar
Marcus Schiesser committed
    return;
  }
}

export function getOnline(): Promise<boolean> {
  return new Promise((resolve) => {
Marcus Schiesser's avatar
Marcus Schiesser committed
    dns.lookup("registry.yarnpkg.com", (registryErr) => {
      if (!registryErr) {
Marcus Schiesser's avatar
Marcus Schiesser committed
        return resolve(true);
Marcus Schiesser's avatar
Marcus Schiesser committed
      const proxy = getProxy();
      if (!proxy) {
Marcus Schiesser's avatar
Marcus Schiesser committed
        return resolve(false);
Marcus Schiesser's avatar
Marcus Schiesser committed
      const { hostname } = url.parse(proxy);
      if (!hostname) {
Marcus Schiesser's avatar
Marcus Schiesser committed
        return resolve(false);
      }

      dns.lookup(hostname, (proxyErr) => {
Marcus Schiesser's avatar
Marcus Schiesser committed
        resolve(proxyErr == null);
      });
    });
  });