UNPKG

vodafone-station-cli

Version:

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

105 lines (104 loc) 3.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Modem = void 0; exports.normalizeModulation = normalizeModulation; const tslib_1 = require("tslib"); const axios_1 = tslib_1.__importDefault(require("axios")); const http_1 = require("http-cookie-agent/http"); const tough_cookie_1 = require("tough-cookie"); class Modem { modemIp; protocol; logger; static USERNAME = 'admin'; cookieJar; httpClient; constructor(modemIp, protocol, logger) { this.modemIp = modemIp; this.protocol = protocol; this.logger = logger; this.cookieJar = new tough_cookie_1.CookieJar(); this.httpClient = this.initAxios(); } get baseUrl() { return `${this.protocol}://${this.modemIp}`; } docsis() { throw new Error('Method not implemented.'); } getHostExposure() { throw new Error('Method not implemented.'); } login(_password) { throw new Error('Method not implemented.'); } logout() { throw new Error('Method not implemented.'); } restart() { throw new Error('Method not implemented.'); } setHostExposure(_) { throw new Error('Method not implemented.'); } initAxios() { const config = { baseURL: this.baseUrl, headers: { 'X-Requested-With': 'XMLHttpRequest', }, timeout: 45_000, withCredentials: true, }; if (this.protocol === 'https') { config.httpsAgent = new http_1.HttpsCookieAgent({ cookies: { jar: this.cookieJar }, keepAlive: true, rejectUnauthorized: false, // the modems have a self signed ssl certificate }); } else { config.httpAgent = new http_1.HttpCookieAgent({ cookies: { jar: this.cookieJar }, keepAlive: true, }); } return axios_1.default.create(config); } } exports.Modem = Modem; function normalizeModulation(modulation) { let normalizedModulation = modulation; // Handle empty or undefined modulation if (!modulation || modulation.trim() === '') { throw new Error(`Empty modulation value received: "${modulation}"`); } // Handle slash-separated values by taking the first one if (modulation.includes('/')) { return normalizeModulation(modulation.split('/')[0]); } // Remove dashes and spaces if (modulation.includes('-')) { normalizedModulation = modulation.split('-').join(''); } if (modulation.includes(' ')) { normalizedModulation = modulation.split(' ').join(''); } // Convert to uppercase normalizedModulation = normalizedModulation.toUpperCase(); // Handle "Unknown" case if (normalizedModulation === 'UNKNOWN') { return 'Unknown'; } // Handle formats like "QAM256" -> "256QAM" if (normalizedModulation.startsWith('QAM') && normalizedModulation.length > 3) { const number = normalizedModulation.slice(3); normalizedModulation = `${number}QAM`; } // Validate against known modulations const validModulations = ['16QAM', '32QAM', '64QAM', '256QAM', '1024QAM', '2048QAM', '4096QAM', 'QPSK', 'Unknown']; if (validModulations.includes(normalizedModulation)) { return normalizedModulation; } throw new Error(`Unknown modulation "${modulation}" (normalized: "${normalizedModulation}")`); }