snips-sam
Version:
The Snips Assistant Manager
73 lines • 2.9 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const process = require("process");
const cli_1 = require("../cli");
const ssh_1 = require("../session/ssh");
const device_1 = require("../utils/device");
const chalk_1 = require("chalk");
const shelljs = require("shelljs");
exports.command = 'devices';
exports.desc = 'Discover devices on your local network';
exports.handler = (_) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
let devicesIP;
cli_1.default.stream.loading('Scanning devices on the network...');
const ip = device_1.getLocalExternalIp().split('.');
ip[ip.length - 1] = '255';
const broadcastAddress = ip.join('.');
try {
yield shelljs.exec(`ping ${broadcastAddress} -c 2`, { async: true, silent: true });
}
catch (e) {
cli_1.default.stream.stop();
cli_1.default.stream.error(`Broadcasting ping failed on ${broadcastAddress}, some devices may not appear`);
}
devicesIP = yield device_1.scanNetwork()
.catch(e => {
cli_1.default.stream.stop();
cli_1.default.stream.hint(e.message);
process.exit();
});
if (devicesIP === undefined) {
cli_1.default.stream.stop();
cli_1.default.stream.hint('Apparently no devices were found.');
cli_1.default.stream.hint(`Don't panic, the default hostname is raspberrypi, try connecting with ${chalk_1.default.blue('sam connect raspberrypi')}`);
return process.exit();
}
const devicesIPAndHostname = yield ssh_1.SSHService.fetchBootHostname(devicesIP)
.catch(e => {
cli_1.default.stream.stop();
cli_1.default.stream.error(e);
});
if (devicesIPAndHostname === undefined) {
cli_1.default.stream.stop();
cli_1.default.stream.error('Error fetching device hostnames');
return process.exit();
}
const devicesList = devicesIPAndHostname.map(({ ip, hostname, snipsHostname }) => {
if (snipsHostname.length > 0) {
if (hostname.length === 0) {
return `- ${ip}, alias: ${snipsHostname}`;
}
return `- ${hostname} (${ip}, alias: ${snipsHostname})`;
}
if (hostname.length === 0) {
return `- ${ip}`;
}
return `- ${hostname} (${ip})`;
});
cli_1.default.stream.stopAndClear();
cli_1.default.stream.println('\n');
if (devicesList.length === 1) {
cli_1.default.stream.println('Found 1 device:');
}
else {
cli_1.default.stream.println(`Found ${devicesList.length} devices:\n`);
}
devicesList.forEach(device => {
cli_1.default.stream.println(device);
});
cli_1.default.stream.println(`\nConnect to a device using ${chalk_1.default.blue('sam connect HOSTNAME_OR_IP')}`);
process.exit();
});
//# sourceMappingURL=devices.js.map
;