"use strict"; /** * Configures `GlaceJS` proxy before run. * * @module */ var path = require("path"); var _ = require("lodash"); const expect = require("chai").expect; var U = require("glace-utils"); /* Set up default config */ /** * Contains `GlaceJS` proxy configuration. * * @namespace GlaceConfig * @prop {?string} [url=null] - Proxied URL. * @prop {object} cache - Cache config. * @prop {number} [cache.ttl] - Time to life cache. Default is maximum. * @prop {number} [cache.size] - Maximum cached file size. Default is 10 GB. * @prop {boolean} [cache.use=false] - Use cache. * @prop {boolean} [cache.existing=false] - Use existing cache if exists. * @prop {boolean} [cache.folder=cwd/.proxy-cache] - Cache folder. * @prop {object} chrome - Chrome config. * @prop {boolean} [chrome.launch=false] - Launch chrome browser. * @prop {boolean} [chrome.incognito=false] - Use incognito mode in chrome. * @prop {object} log - Log config. * @prop {string} [log.level=debug] - Log level. * @prop {string} [log.path=cwd/glace-proxy.log] - Log file path. * @prop {boolean} [log.stdout=false] - Print log messages to terminal. * @prop {object} proxy - Proxy config. * @prop {number} [proxy.timeout=60000] - Proxy time to wait for remote response, ms. * @prop {number} [proxy.http=false] - Launch http proxy. * @prop {number} [proxy.port=0] - Proxy port. By default will be assigned by OS. * @prop {boolean} [proxy.global=false] - Launch global proxy. * @prop {number} [proxy.globalPort=8888] - Global proxy port. * @prop {boolean} [proxy.installCertificates] - Install global proxy certificates * as trusted. Windows only. Admin privileges are required. * @prop {number} [proxy.reconnect=2] - Number of reconnect attemptions if * remote side breaks connection. */ var config = _.merge(U.config, { cache: { ttl: Number.MAX_SAFE_INTEGER, size: 10 * 1024 * 1024 * 1024 }, chrome: { }, log: { level: "debug", }, proxy: { timeout: 60000, }, }); var args = config.args; config.report = U.defVal(config.report, {}); config.report.dir = U.defVal(config.report.dir, U.cwd); config.cluster = U.defVal(config.cluster, {}); /* Use CLI arguments */ config.web = U.defVal(config.web, {}); config.web.url = args.webUrl; // proxied URL config.proxy.http = !!args.httpProxy; // default is `false` config.proxy.port = args.httpProxyPort || 0; // default is random if (config.cluster.slavesNum) { expect(config.proxy.port, "`--http-proxy-port` is incompatible with `--slaves`").to.be.equal(0); } config.proxy.global = !!args.globalProxy; //default `false` config.proxy.globalPort = args.globalProxyPort || 0; // default is random if (config.cluster.slavesNum) { expect(config.proxy.globalPort, "`--global-proxy-port` is incompatible with `--slaves`").to.be.equal(0); } config.proxy.speed = args.speed; // default unlimited config.proxy.installCertificate = !!args.installCertificate; //default `false` config.proxy.sslCaDir = path.resolve(config.report.dir, U.defVal(args.sslCaDir, ".certificates")); config.proxy.reconnect = args.reconnect || 2; // TODO maybe to make as CLI option config.cache.use = !!args.cache || !!args.existingCache; // default `false` config.cache.existing = !!args.existingCache; // default `false` config.cache.folder = path.resolve(config.report.dir, U.defVal(args.cacheFolder, ".proxy-cache")); config.chrome.launch = !!args.chrome; // default `false` config.chrome.incognito = !!args.chromeIncognito; // default `false` module.exports = config;