"use strict";
/**
* Interactive console.
*
* @function
* @name interactive
* @arg {Commands} cmd - Commands instance.
* @arg {Vorpal} [cli] - Vorpal instance.
* @return {Vorpal} - Configured Vorpal instance.
*/
var vorpal = require("vorpal")();
var U = require("glace-utils");
// HACK to return colors back after vorpal import.
require("colors");
require("colors/lib/extendStringPrototype")();
var d = U.switchColor();
var interactive = (cmd, cli) => {
cli = U.defVal(cli, vorpal);
cli.command("url <url>")
.description(d("Set proxied URL."))
.action(function (args, cb) {
if (!args.url.toString().startsWith("http")) {
this.log("Invalid URL".red);
return cb();
};
return cmd
.setProxiedUrl(args.url)
.then(isOk => {
if (!isOk) return;
this.log(`Proxied URL changed to ${args.url}`.green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy start http")
.description(d("Start HTTP proxy."))
.action(function (args, cb) {
return cmd
.launchHttpProxy()
.then(isOk => {
if (!isOk) return;
this.log("HTTP proxy is launched".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy start global")
.description(d("Start global proxy."))
.action(function (args, cb) {
return cmd
.launchGlobalProxy()
.then(isOk => {
if (!isOk) return;
this.log("Global proxy is launched".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy stop http")
.description(d("Stop HTTP proxy."))
.action(function (args, cb) {
return cmd
.stopHttpProxy()
.then(isOk => {
if (!isOk) return;
this.log("HTTP proxy is stopped".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy stop global")
.description(d("Stop global proxy."))
.action(function (args, cb) {
return cmd
.stopGlobalProxy()
.then(isOk => {
if (!isOk) return;
this.log("Global proxy is stopped".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy restart http")
.description(d("Restart HTTP proxy."))
.action(function (args, cb) {
return cmd
.restartHttpProxy()
.then(isOk => {
if (!isOk) return;
this.log("HTTP proxy is restarted".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy restart global")
.description(d("Restart global proxy."))
.action(function (args, cb) {
return cmd
.restartGlobalProxy()
.then(isOk => {
if (!isOk) return;
this.log("Global proxy is restarted".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy speed <speed>")
.description(d("Limit proxy speed, kb/s."))
.action(function (args, cb) {
if (+args.speed < 0) {
this.log("Speed value should be a number".red);
return cb();
};
return cmd
.setProxySpeed(+args.speed)
.then(isOk => {
if (!isOk) return;
this.log(
`Proxy speed is limited to ${args.speed} kb/s`.green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy requests speed <speed>")
.description(d("Limit proxy requests speed, kb/s."))
.action(function (args, cb) {
if (+args.speed < 0) {
this.log("Speed value should be a number".red);
return cb();
};
return cmd
.setProxySpeed({ req: +args.speed })
.then(isOk => {
if (!isOk) return;
this.log(
`Proxy requests speed is limited to ${args.speed} kb/s`.green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy responses speed <speed>")
.description(d("Limit proxy responses speed, kb/s."))
.action(function (args, cb) {
if (+args.speed < 0) {
this.log("Speed value should be a number".red);
return cb();
};
return cmd
.setProxySpeed({ res: +args.speed })
.then(isOk => {
if (!isOk) return;
this.log(
`Proxy responses speed is limited to ${args.speed} kb/s`.green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("proxy speed reset")
.description(d("Unlimit proxy speed."))
.action(function (args, cb) {
return cmd
.resetProxySpeed()
.then(isOk => {
if (!isOk) return;
this.log("Proxy speed is unlimited".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("chrome")
.description(d("Launch google chrome browser.",
"Pristine profile will be used each time."))
.action(function (args, cb) {
return cmd
.launchChrome()
.then(isOk => {
if (!isOk) return;
this.log("Chrome browser is launched".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("chrome close")
.description(d("Close google chrome browser."))
.action(function (args, cb) {
return cmd
.closeChrome()
.then(isOk => {
if (!isOk) return;
this.log("Chrome browser is closed".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("chrome restart")
.description(d("Restart google chrome browser.",
"Pristine profile will be used each time."))
.action(function (args, cb) {
return cmd
.restartChrome()
.then(isOk => {
if (!isOk) return;
this.log("Chrome browser is launched".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("cache")
.description(d("Cache server responses to disk.",
"Cached responses will be replayed by proxy."))
.action(function (args, cb) {
return cmd
.enableProxyCache()
.then(isOk => {
if (!isOk) return;
this.log("Proxy cache is enabled".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("cache disable")
.description(d("Disable proxy cache."))
.action(function (args, cb) {
return cmd
.disableProxyCache()
.then(isOk => {
if (!isOk) return;
this.log("Proxy cache is disabled".green);
})
.catch(e => this.log(e))
.then(cb);
});
cli.command("cache clear")
.description(d("Remove cached responses from storage."))
.action(function (args, cb) {
return this.prompt({
type: "confirm",
name: "continue",
default: false,
message: "Proxy cache will be cleaned. It won't be undo. Continue?".yellow,
}, result => {
if (!result.continue) {
this.log("Cancelled by user".green);
return cb();
};
return cmd.clearProxyCache()
.then(() => this.log("Proxy cache is cleaned".green))
.catch(e => this.log(e))
.then(cb);
});
});
cli.delimiter(">".red.bold).show();
var finalize = () => {
if (cmd._isChromeLaunched()) cmd.closeChrome();
};
cli.on("client_prompt_submit", name => {
if (name === "exit") finalize();
});
return cli;
};
module.exports = interactive;