UNPKG

snips-sam

Version:

The Snips Assistant Manager

73 lines 2.9 kB
"use strict"; 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