Skip to content
Snippets Groups Projects
is-online.ts 899 B
Newer Older
  • Learn to ignore specific revisions
  • 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);
          });
        });
      });