vodafone-station-cli
Version:
Access your Vodafone Station from the comfort of the command line.
105 lines (104 loc) • 3.54 kB
JavaScript
;
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}")`);
}