github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/server/proxies/api.js (about)

     1  'use strict';
     2  
     3  const proxyPath = '/v1';
     4  
     5  module.exports = function (app, options) {
     6    // For options, see:
     7    // https://github.com/nodejitsu/node-http-proxy
     8  
     9    // This is probably not safe to do, but it works for now.
    10    let cacheKey = `${options.project.configPath()}|${options.environment}`;
    11    let config = options.project.configCache.get(cacheKey);
    12  
    13    // Disable the proxy completely when Mirage is enabled. No requests to the API
    14    // will be being made, and having the proxy attempt to connect to Nomad when it
    15    // is not running can result in socket max connections that block the livereload
    16    // server from reloading.
    17    if (config['ember-cli-mirage'].enabled !== false) {
    18      options.ui.writeInfoLine('Mirage is enabled. Not starting proxy');
    19      delete options.proxy;
    20      return;
    21    }
    22  
    23    let proxyAddress = options.proxy;
    24  
    25    let server = options.httpServer;
    26    let proxy = require('http-proxy').createProxyServer({
    27      target: proxyAddress,
    28      ws: true,
    29      changeOrigin: true,
    30    });
    31  
    32    proxy.on('error', function (err, req) {
    33      // eslint-disable-next-line
    34      console.error(err, req.url);
    35    });
    36  
    37    app.use(proxyPath, function (req, res) {
    38      // include root path in proxied request
    39      req.url = proxyPath + req.url;
    40      proxy.web(req, res, { target: proxyAddress });
    41    });
    42  
    43    server.on('upgrade', function (req, socket, head) {
    44      if (
    45        req.url.startsWith('/v1/client/allocation') &&
    46        req.url.includes('exec?')
    47      ) {
    48        req.headers.origin = proxyAddress;
    49        proxy.ws(req, socket, head, { target: proxyAddress });
    50      }
    51    });
    52  };