@u4/adbkit
Version:
A Typescript client for the Android Debug Bridge.
81 lines • 3.31 kB
JavaScript
import fs from 'node:fs';
import { program } from 'commander';
import forge from 'node-forge';
import { createClient } from './adb.js';
import Auth from './adb/auth.js';
import PacketReader from './adb/tcpusb/packetreader.js';
import path from 'node:path';
import Utils from './adb/utils.js';
import { getClientDevice } from './cli-common.js';
import './cli-airplane.js';
import './cli-connectivity.js';
import './cli-tethering.js';
import './cli-boatware.js';
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), { encoding: 'utf-8' }));
program.version(pkg.version);
program
.command('pubkey-convert <file>')
.option('-f, --format <format>', 'format (pem or openssh)', String, 'pem')
.description('Converts an ADB-generated public key into PEM format.')
.action(async (file, options) => {
const key = await Auth.parsePublicKey(fs.readFileSync(file).toString('utf8'));
switch (options.format.toLowerCase()) {
case 'pem':
return console.log(forge.pki.publicKeyToPem(key).trim());
case 'openssh':
return console.log(forge.ssh.publicKeyToOpenSSH(key, 'adbkey').trim());
default:
console.error("Unsupported format '" + options.format + "'");
return process.exit(1);
}
});
program
.command('pubkey-fingerprint <file>')
.description('Outputs the fingerprint of an ADB-generated public key.')
.action(async (file) => {
const key = await Auth.parsePublicKey(fs.readFileSync(file).toString('utf8'));
return console.log('%s %s', key.fingerprint, key.comment);
});
program
.command('usb-device-to-tcp <serial>')
.option('-p, --port <port>', 'port number', (value) => String(value), '6174')
.description('Provides an USB device over TCP using a translating proxy.')
.action((serial, options) => {
const adb = createClient();
const server = adb
.createTcpUsbBridge(serial, {
auth: () => Promise.resolve(),
})
.on('listening', () => console.info('Connect with `adb connect localhost:%d`', options.port))
.on('error', (err) => console.error('An error occured: ' + err.message));
server.listen(options.port);
});
program
.command('parse-tcp-packets <file>')
.description('Parses ADB TCP packets from the given file.')
.action((file) => {
const reader = new PacketReader(fs.createReadStream(file));
reader.on('packet', (packet) => console.log(packet.toString()));
});
program
.command('capture dest [serials...]')
.description('capture screen of one or many device as png.')
.action(async (dest, serials) => {
const devices = await getClientDevice(serials);
for (let i = 0; i < devices.length; i++) {
const device = devices[i];
let out = dest;
if (devices.length > 1) {
out = path.join(path.dirname(out), device.serial + '-' + path.basename(out));
}
const stream = await device.screencap();
const capture = await Utils.readAll(stream);
fs.writeFileSync(dest, capture);
}
});
program.parse(process.argv);
//# sourceMappingURL=cli.js.map