You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

484 lines
15 KiB
TypeScript

import yargs from 'yargs';
import {hideBin} from 'yargs/helpers';
import {login, logout, startSession} from "./src/startSession";
import {
deleteMessage,
getContactSMSPages,
getInBoxSMS,
getSMSByUsers,
getSMSContacts,
getSMSPages,
sendMessage
} from "./src/ListSMS";
import {controlMobileData, reconnect, status} from "./src/MobileData";
import {getSignalInfo, lteBand} from "./src/Signal";
const huawei = require('./jslib/public');
async function delay(ms: number) {
return new Promise(res => setTimeout(res, ms));
}
// @ts-ignore
yargs(hideBin(process.argv))
.command('sendSMS', 'send SMS to contact or group of contacts', (yargs) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
})
.positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('phone', {
describe: 'phones with ; as separator ',
type: "string",
}).positional('message', {
describe: 'text message ',
type: "string",
})
}, async (argv) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
if (!argv.phone) {
throw new Error('Phone number is not defined');
return;
}
await sendMessage(sessionData, argv.phone, argv.message || '');
} finally {
await logout(argv.url);
}
}).command('contacts', 'get contact list with the latest sms messages', (yargs) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
})
.positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('page', {
describe: 'sms page',
default: 1
}).positional('exportFile', {
describe: 'export to file',
default: './contacts.list'
}).positional('exportFormat', {
describe: 'export format (xml, json, none)',
default: 'none'
})
}, async (argv) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
switch (argv.exportFormat) {
case 'json': {
break;
}
case 'xml': {
break;
}
case 'none': {
break;
}
default: {
throw new Error(`export Format ${argv.exportFile} does not supported: supported only: xml,json,none`)
}
}
await getSMSContacts(sessionData, argv.page, argv.exportFile, argv.exportFormat);
} finally {
await logout(argv.url);
}
}).command('messages', 'get all messages from InBox', (yargs) => {
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
}).positional('deleteAfter', {
describe: 'delete all messages after reading ',
default: false
})
.positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
})
.positional('exportFile', {
describe: 'export to file',
default: './inbox.list'
}).positional('exportFormat', {
describe: 'export format (xml, json, none)',
default: 'none'
})
}, async (argv) => {
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
switch (argv.exportFormat) {
case 'json': {
break;
}
case 'none': {
break;
}
default: {
throw new Error(`export Format ${argv.exportFile} does not supported: supported only: json,none`)
}
}
await getInBoxSMS(sessionData, argv.deleteAfter, argv.exportFile, argv.exportFormat);
} finally {
await logout(argv.url);
}
}).command('contactPages', 'contact list pages', (yargs) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
})
.positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('exportFile', {
describe: 'export to file',
default: './contactsCount.list'
}).positional('exportFormat', {
describe: 'export format (xml, json, none)',
default: 'none'
})
}, async (argv) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
switch (argv.exportFormat) {
case 'json': {
break;
}
case 'xml': {
break;
}
case 'none': {
break;
}
default: {
throw new Error(`export Format ${argv.exportFile} does not supported: supported only: xml,json,none`)
}
}
await getSMSPages(sessionData, argv.exportFile, argv.exportFormat);
} finally {
await logout(argv.url);
}
}).command('sms', 'get contact SMS list', (yargs) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1',
}).positional('phone', {
describe: 'contact phone number',
type: 'string'
})
.positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('page', {
describe: 'sms page',
default: 1
}).positional('exportFile', {
describe: 'export to file',
default: './sms.list'
}).positional('exportFormat', {
describe: 'export format (xml, json, none)',
default: 'none'
}).positional('deleteAfter', {
describe: 'delete all messages after reading ',
default: false
})
}, async (argv) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
if (!argv.phone) {
throw new Error('phone is not defined');
}
switch (argv.exportFormat) {
case 'json': {
break;
}
case 'xml': {
break;
}
case 'none': {
break;
}
default: {
throw new Error(`export Format ${argv.exportFile} does not supported: supported only: xml,json,none`)
}
}
await getSMSByUsers(sessionData, argv.phone, argv.page, argv.exportFile, argv.exportFormat, argv.deleteAfter);
} finally {
await logout(argv.url);
}
}).command('pages', 'count of sms pages', (yargs) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
})
.positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('phone', {
describe: 'contact phone number',
type: 'string'
}).positional('exportFile', {
describe: 'export to file',
default: './smsCount.list'
}).positional('exportFormat', {
describe: 'export format (xml, json, none)',
default: 'none'
})
}, async (argv) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
if (!argv.phone) {
throw new Error('phone is not defined');
}
switch (argv.exportFormat) {
case 'json': {
break;
}
case 'xml': {
break;
}
case 'none': {
break;
}
default: {
throw new Error(`export Format ${argv.exportFile} does not supported: supported only: xml,json,none`)
}
}
await getContactSMSPages(sessionData, argv.phone, argv.exportFile, argv.exportFormat);
} finally {
await logout(argv.url);
}
}).command('deleteSMS', 'delete sms by smsId', (yargs: any) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
})
.positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('messageId', {
describe: 'messageId or index',
type: 'string'
})
}, async (argv: any) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
if (!argv.messageId) {
throw new Error('messageId is not defined');
}
await deleteMessage(sessionData, argv.messageId);
} finally {
await logout(argv.url)
}
}).command('mobileData', 'Enable/Disable or Reconnect Mobile Data', (yargs: any) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
}).positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('mode', {
describe: 'change mobile data to on,off or reconnect',
})
}, async (argv: any) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
switch (argv.mode) {
case 'reconnect': {
await reconnect(sessionData);
return;
}
case 'on': {
break;
}
case 'off': {
break
}
default: {
throw new Error('Does not support Mode: ' + argv.mode + '. Supported only on,off,reconnect')
}
}
await controlMobileData(sessionData, argv.mode);
} finally {
await logout(argv.url);
}
}).command('monitoring', 'current Monitoring status', (yargs: any) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
}).positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('exportFile', {
describe: 'export to file',
default: './monitoring.log'
}).positional('exportFormat', {
describe: 'export format (xml, json, none)',
default: 'none'
})
}, async (argv: any) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
switch (argv.exportFormat) {
case 'json': {
break;
}
case 'xml': {
break;
}
case 'none': {
break;
}
default: {
throw new Error(`export Format ${argv.exportFile} does not supported: supported only: xml,json,none`)
}
}
await status(sessionData, argv.exportFile, argv.exportFormat);
} finally {
await logout(argv.url);
}
}).command('signalInfo', 'current device signal status', (yargs: any) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
}).positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('turn', {
alias: 't',
describe: 'Request Signal info until interrupted',
default: false,
})
}, async (argv: any) => {
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
const sessionData = await startSession(argv.url);
if (argv.turn) {
while (true) {
await getSignalInfo(sessionData);
await delay(2500)
}
} else {
await getSignalInfo(sessionData);
}
} finally {
await logout(argv.url);
}
}).command('changeLteBand', 'change LTE band', (yargs: any) => {
// @ts-ignore
return yargs
.positional('url', {
describe: 'huawei host',
default: '192.168.8.1'
}).positional('username', {
describe: 'huawei username',
default: 'admin'
})
.positional('password', {
describe: 'huawei password',
type: 'string'
}).positional('band', {
alias: 'band',
describe: 'desirable LTE band number, separated by + char (example 1+3+20).If you want to use every supported bands, write \'AUTO\'.", "AUTO"',
default: 'AUTO',
type:'string'
})
}, async (argv: any) => {
if (!argv.band){
throw new Error('Band is empty')
}
huawei.publicKey.rsapadingtype = argv.rsapadingtype || "1";
await login(argv.url, argv.username, argv.password);
try {
await lteBand(await startSession(argv.url),argv.band);
} finally {
await logout(argv.url);
}
})
.option('rsapadingtype', {
type: 'string',
description: 'rsapadingtype, to check your run in web-console: MUI.LoginStateController.rsapadingtype',
default: '1'
})
.parse()