UNPKG

@bitgo/utxo-bin

Version:

Command-line utility for BitGo UTXO transactions

120 lines 13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.readStringOptions = void 0; exports.stringToBuffer = stringToBuffer; exports.readStdin = readStdin; exports.argToString = argToString; const process = require("process"); const fs = require("fs"); const clipboardy_cjs_1 = require("clipboardy-cjs"); function stringToBuffer(data, format) { if (typeof format !== 'string') { for (const f of format) { try { return stringToBuffer(data, f); } catch (err) { // ignore, try next } } throw new Error(`could not parse data, formats: ${format}`); } // strip all whitespace data = data.replace(/\s*/g, ''); if (format === 'hex') { data = data.toLowerCase(); } const buf = Buffer.from(data, format); // make sure there were no decoding errors if (buf.toString(format) !== data) { throw new Error(`invalid ${format}`); } return buf; } exports.readStringOptions = { path: { type: 'string', nargs: 1, default: '' }, stdin: { type: 'boolean', default: false }, data: { type: 'string', description: 'hex or base64', alias: 'hex', }, clipboard: { type: 'boolean', default: false }, }; /** * Reads from stdin until Ctrl-D is pressed. */ async function readStdin() { /* * High-performance implementation of reading from stdin. * Standard readline is extremely slow for long lines. */ return new Promise((resolve, reject) => { // Using readline is not an option because it is extremely slow for long lines. // By enabling raw mode, we can read more than 4096 bytes, but it requires manual Ctrl-C/Ctrl-D handling if (!process.stdin.setRawMode) { throw new Error('stdin is not a tty'); } process.stdin.setRawMode(true); const buf = []; process.stdin.on('data', (chunk) => { if (chunk[0] === 0x03) { // Ctrl-C process.exit(130); } if (chunk[0] === 0x04) { // Ctrl-D process.stdin.emit('end'); return; } buf.push(chunk); process.stdout.write(chunk); }); process.stdin.on('end', () => { resolve(Buffer.concat(buf).toString('utf8')); }); process.stdin.on('error', (err) => { reject(err); }); }); } /** * @param argv * @param input - optional input data. If set, this function just ensures that nothing else is set. * @return string from specified source */ async function argToString(argv, input) { if (argv.stdin || argv.path === '-') { if (input) { throw new Error(`conflicting arguments`); } console.log('Reading from stdin. Please paste hex-encoded transaction data.'); console.log('After inserting data, press Ctrl-D to finish. Press Ctrl-C to cancel.'); if (process.stdin.isTTY) { input = await readStdin(); } else { input = await fs.promises.readFile('/dev/stdin', 'utf8'); } } if (argv.clipboard) { if (input) { throw new Error(`conflicting arguments`); } input = await clipboardy_cjs_1.default.read(); } if (argv.path) { if (input) { throw new Error(`conflicting arguments`); } input = (await fs.promises.readFile(argv.path, 'utf8')).toString(); } if (argv.data) { if (input) { throw new Error(`conflicting arguments`); } input = argv.data; } return input; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VTdHJpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXJncy9wYXJzZVN0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSx3Q0F5QkM7QUF1QkQsOEJBb0NDO0FBT0Qsa0NBb0NDO0FBcklELG1DQUFtQztBQUNuQyx5QkFBeUI7QUFFekIsbURBQXdDO0FBR3hDLFNBQWdCLGNBQWMsQ0FBQyxJQUFZLEVBQUUsTUFBeUI7SUFDcEUsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMvQixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQztnQkFDSCxPQUFPLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsbUJBQW1CO1lBQ3JCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVoQyxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QywwQ0FBMEM7SUFDMUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztB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Q0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxLQUFLLEdBQUcsTUFBTSx3QkFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuXG5pbXBvcnQgY2xpcGJvYXJkeSBmcm9tICdjbGlwYm9hcmR5LWNqcyc7XG5cbnR5cGUgRm9ybWF0ID0gJ2hleCcgfCAnYmFzZTY0JztcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0J1ZmZlcihkYXRhOiBzdHJpbmcsIGZvcm1hdDogRm9ybWF0IHwgRm9ybWF0W10pOiBCdWZmZXIge1xuICBpZiAodHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZm9ybWF0KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVG9CdWZmZXIoZGF0YSwgZik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gaWdub3JlLCB0cnkgbmV4dFxuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBwYXJzZSBkYXRhLCBmb3JtYXRzOiAke2Zvcm1hdH1gKTtcbiAgfVxuXG4gIC8vIHN0cmlwIGFsbCB3aGl0ZXNwYWNlXG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xccyovZywgJycpO1xuXG4gIGlmIChmb3JtYXQgPT09ICdoZXgnKSB7XG4gICAgZGF0YSA9IGRhdGEudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGZvcm1hdCk7XG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSB3ZXJlIG5vIGRlY29kaW5nIGVycm9yc1xuICBpZiAoYnVmLnRvU3RyaW5nKGZvcm1hdCkgIT09IGRhdGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgJHtmb3JtYXR9YCk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGNvbnN0IHJlYWRTdHJpbmdPcHRpb25zID0ge1xuICBwYXRoOiB7IHR5cGU6ICdzdHJpbmcnLCBuYXJnczogMSwgZGVmYXVsdDogJycgfSxcbiAgc3RkaW46IHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9LFxuICBkYXRhOiB7XG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVzY3JpcHRpb246ICdoZXggb3IgYmFzZTY0JyxcbiAgICBhbGlhczogJ2hleCcsXG4gIH0sXG4gIGNsaXBib2FyZDogeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0sXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBSZWFkU3RyaW5nT3B0aW9ucyA9IHtcbiAgY2xpcGJvYXJkPzogYm9vbGVhbjtcbiAgcGF0aD86IHN0cmluZztcbiAgZGF0YT86IHN0cmluZztcbiAgc3RkaW46IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFJlYWRzIGZyb20gc3RkaW4gdW50aWwgQ3RybC1EIGlzIHByZXNzZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLypcbiAgICogSGlnaC1wZXJmb3JtYW5jZSBpbXBsZW1lbnRhdGlvbiBvZiByZWFkaW5nIGZyb20gc3RkaW4uXG4gICAqIFN0YW5kYXJkIHJlYWRsaW5lIGlzIGV4dHJlbWVseSBzbG93IGZvciBsb25nIGxpbmVzLlxuICAgKi9cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyBVc2luZyByZWFkbGluZSBpcyBub3QgYW4gb3B0aW9uIGJlY2F1c2UgaXQgaXMgZXh0cmVtZWx5IHNsb3cgZm9yIGxvbmcgbGluZXMuXG4gICAgLy8gQnkgZW5hYmxpbmcgcmF3IG1vZGUsIHdlIGNhbiByZWFkIG1vcmUgdGhhbiA0MDk2IGJ5dGVzLCBidXQgaXQgcmVxdWlyZXMgbWFudWFsIEN0cmwtQy9DdHJsLUQgaGFuZGxpbmdcbiAgICBpZiAoIXByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGRpbiBpcyBub3QgYSB0dHknKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5zdGRpbi5zZXRSYXdNb2RlKHRydWUpO1xuICAgIGNvbnN0IGJ1ZjogQnVmZmVyW10gPSBbXTtcblxuICAgIHByb2Nlc3Muc3RkaW4ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgIGlmIChjaHVua1swXSA9PT0gMHgwMykge1xuICAgICAgICAvLyBDdHJsLUNcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEzMCk7XG4gICAgICB9XG4gICAgICBpZiAoY2h1bmtbMF0gPT09IDB4MDQpIHtcbiAgICAgICAgLy8gQ3RybC1EXG4gICAgICAgIHByb2Nlc3Muc3RkaW4uZW1pdCgnZW5kJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGJ1Zi5wdXNoKGNodW5rKTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNodW5rKTtcbiAgICB9KTtcblxuICAgIHByb2Nlc3Muc3RkaW4ub24oJ2VuZCcsICgpID0+IHtcbiAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChidWYpLnRvU3RyaW5nKCd1dGY4JykpO1xuICAgIH0pO1xuXG4gICAgcHJvY2Vzcy5zdGRpbi5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGFyZ3ZcbiAqIEBwYXJhbSBpbnB1dCAtIG9wdGlvbmFsIGlucHV0IGRhdGEuIElmIHNldCwgdGhpcyBmdW5jdGlvbiBqdXN0IGVuc3VyZXMgdGhhdCBub3RoaW5nIGVsc2UgaXMgc2V0LlxuICogQHJldHVybiBzdHJpbmcgZnJvbSBzcGVjaWZpZWQgc291cmNlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcmdUb1N0cmluZyhhcmd2OiBSZWFkU3RyaW5nT3B0aW9ucywgaW5wdXQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoYXJndi5zdGRpbiB8fCBhcmd2LnBhdGggPT09ICctJykge1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25mbGljdGluZyBhcmd1bWVudHNgKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ1JlYWRpbmcgZnJvbSBzdGRpbi4gUGxlYXNlIHBhc3RlIGhleC1lbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGEuJyk7XG4gICAgY29uc29sZS5sb2coJ0FmdGVyIGluc2VydGluZyBkYXRhLCBwcmVzcyBDdHJsLUQgdG8gZmluaXNoLiBQcmVzcyBDdHJsLUMgdG8gY2FuY2VsLicpO1xuICAgIGlmIChwcm9jZXNzLnN0ZGluLmlzVFRZKSB7XG4gICAgICBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKCcvZGV2L3N0ZGluJywgJ3V0ZjgnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYXJndi5jbGlwYm9hcmQpIHtcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmxpY3RpbmcgYXJndW1lbnRzYCk7XG4gICAgfVxuICAgIGlucHV0ID0gYXdhaXQgY2xpcGJvYXJkeS5yZWFkKCk7XG4gIH1cblxuICBpZiAoYXJndi5wYXRoKSB7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZsaWN0aW5nIGFyZ3VtZW50c2ApO1xuICAgIH1cbiAgICBpbnB1dCA9IChhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShhcmd2LnBhdGgsICd1dGY4JykpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBpZiAoYXJndi5kYXRhKSB7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZsaWN0aW5nIGFyZ3VtZW50c2ApO1xuICAgIH1cbiAgICBpbnB1dCA9IGFyZ3YuZGF0YTtcbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn1cbiJdfQ==