UNPKG

vodafone-station-cli

Version:

Access your Vodafone Station from the comfort of the command line.

90 lines (89 loc) 3.5 kB
"use strict"; 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 docsis_diagnose_1 = require("../modem/docsis-diagnose"); 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.log((0, docsis_diagnose_1.colorize)('red', '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'); return; } 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)}`); } } 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;