UNPKG

asarmor

Version:

Protect asar archive files from extraction

56 lines (55 loc) 2.03 kB
#!/usr/bin/env node "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const extra_typings_1 = require("@commander-js/extra-typings"); const src_1 = require("../src"); const package_json_1 = require("../package.json"); function parseNumber(value, isRequired) { if (value == null && !isRequired) { return; } const parsedValue = parseInt(value, 10); if (isNaN(parsedValue)) { throw new extra_typings_1.InvalidArgumentError('Not a number.'); } return parsedValue; } const program = new extra_typings_1.Command() .version(package_json_1.version) .requiredOption('-a, --archive <archive>', 'input asar file (required)') .requiredOption('-o, --output <output>', 'output asar file (required)') .option('-b, --backup', 'create backup') .option('-r, --restore', 'restore backup') .option('-bl, --bloat [gigabytes]', 'fill the drive with useless data on extraction attempt', (value) => parseNumber(value, false)) .option('-e, --encryption', 'encrypt the JavaScript files stored in the archive') .addHelpText('after', ` Examples: $ asarmor -a app.asar -o asarmor.asar --backup --bloat 1000 $ asarmor -a plaintext.asar -o encrypted.asar --encryption `) .parse(process.argv); const options = program.opts(); if (!options.archive || !options.output) { program.help(); process.exit(); } async function main() { if (options.encryption) { await (0, src_1.encrypt)({ src: options.archive, dst: options.output, }); } const asarmor = await (0, src_1.open)(options.encryption ? options.output : options.archive); if (options.restore) { await asarmor.restoreBackup(); } else if (options.output) { if (options.backup) await asarmor.createBackup(); if (options.bloat) asarmor.patch((0, src_1.createBloatPatch)(options.bloat === true ? undefined : options.bloat)); await asarmor.write(options.output); } } main();