vodafone-station-cli
Version:
Access your Vodafone Station from the comfort of the command line.
90 lines (89 loc) • 3.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDocsisStatus = getDocsisStatus;
const tslib_1 = require("tslib");
const core_1 = require("@oclif/core");
const node_fs_1 = require("node:fs");
const base_command_1 = tslib_1.__importStar(require("../base-command"));
const discovery_1 = require("../modem/discovery");
const factory_1 = require("../modem/factory");
const web_diagnose_1 = require("../modem/web-diagnose");
async function getDocsisStatus(password, logger, discoveryOptions) {
const modemLocation = await (0, discovery_1.discoverModemLocation)(discoveryOptions);
const discoveredModem = await new discovery_1.ModemDiscovery(modemLocation, logger).discover();
const modem = (0, factory_1.modemFactory)(discoveredModem, logger);
try {
await modem.login(password);
const docsisData = await modem.docsis();
return docsisData;
}
catch (error) {
logger.warn('Could not fetch docsis status from modem.');
logger.error(error);
throw error;
}
finally {
await modem.logout();
}
}
class Docsis extends base_command_1.default {
static description = 'Get the current docsis status as reported by the modem in a JSON format.';
static examples = [
`$ vodafone-station-cli docsis -p PASSWORD
{JSON data}
`,
`$ vodafone-station-cli docsis -p PASSWORD --ip 192.168.100.1
{JSON data}
`,
];
static flags = {
file: core_1.Flags.boolean({
char: 'f',
description: 'write out a report file under ./reports/{CURRENT_UNIX_TIMESTAMP}_docsisStatus.json',
}),
ip: (0, base_command_1.ipFlag)(),
password: core_1.Flags.string({
char: 'p',
description: 'router/modem password',
}),
web: core_1.Flags.boolean({
char: 'w',
description: 'review the docsis values in a webapp',
}),
};
async run() {
const { flags } = await this.parse(Docsis);
const password = flags.password ?? process.env.VODAFONE_ROUTER_PASSWORD;
if (!password || password === '') {
this.log('You must provide a password either using -p or by setting the environment variable VODAFONE_ROUTER_PASSWORD');
this.exit();
}
const discoveryOptions = {
ip: flags.ip,
};
try {
const docsisStatus = await getDocsisStatus(password, this.logger, discoveryOptions);
const docsisStatusJSON = JSON.stringify(docsisStatus, undefined, 4);
if (flags.file) {
await this.writeDocsisStatus(docsisStatusJSON);
}
else {
this.log(docsisStatusJSON);
}
if (flags.web) {
this.log(`Review your docsis state online -> ${(0, web_diagnose_1.webDiagnoseLink)(docsisStatus)}`);
}
this.exit();
}
catch (error) {
this.error(error, { message: 'Something went wrong' });
}
}
async writeDocsisStatus(docsisStatusJson) {
const reportFile = `./reports/${Date.now()}_docsisStatus.json`;
this.log('Writing docsis report as json to file: ', reportFile);
const data = new Uint8Array(Buffer.from(docsisStatusJson));
return node_fs_1.promises.writeFile(reportFile, data);
}
}
exports.default = Docsis;