chainscript
Version:
Client for chainscript.io
233 lines (175 loc) • 6.42 kB
JavaScript
;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _commander = require('commander');
var _commander2 = _interopRequireDefault(_commander);
var _objectPath = require('object-path');
var _objectPath2 = _interopRequireDefault(_objectPath);
var _bitcore = require('bitcore');
var _bitcore2 = _interopRequireDefault(_bitcore);
var _mergeDeep = require('merge-deep');
var _mergeDeep2 = _interopRequireDefault(_mergeDeep);
var _utilsReadPackageSync = require('../utils/readPackageSync');
var _utilsReadPackageSync2 = _interopRequireDefault(_utilsReadPackageSync);
var _ = require('..');
var _2 = _interopRequireDefault(_);
function collectUpdates(val, memo) {
memo.push(val);
return memo;
}
function collectUpdateKeys(val, memo) {
memo.push(val);
return memo;
}
function parseBool(v) {
return v === 'true' || v === '1' ? true : false;
}
_commander2['default'].version(_utilsReadPackageSync2['default']('version')).usage('[options] [script | uuid]').option('-u, --update <updates>', 'Update script', collectUpdates, []).option('-U, --update-key <key:value>', 'Update specific content key', collectUpdateKeys, []).option('-s, --snapshot', 'Snapshot script').option('-n, --notarize', 'Notarize script').option('-e, --email <address>', 'Email').option('--subject <subject>', 'Email subject').option('-g, --get <path>', 'Output value at path').option('-S, --sign <wif>', 'Sign the digest').option('--command-auditing <bool>', 'Enable or disable command auditing', parseBool).option('--revision-auditing <bool>', 'Enable or disable revision auditing', parseBool).option('-K, --gen-key', 'Generate and print a key pair and address').option('-T, --testnet', 'Use testnet').option('--execute-url <url>', 'Set execute url').option('--snapshots-url <url>', 'Set snapshots url').parse(process.argv);
function handleOutput(o) {
var output = _commander2['default'].get ? _objectPath2['default'].get(output, _commander2['default'].get) : o;
var str = undefined;
if (typeof output === 'object' && output) {
str = JSON.stringify(output, null, '\t') + '\n';
} else {
str = output + '\n';
}
process.stdout.write(str, function () {
return process.exit(0);
});
}
function handleError(err) {
process.stderr.write(err.message + '\n', function () {
return process.exit(1);
});
}
function stage0(cs) {
if (typeof cs.get('x_chainscript') === 'undefined') {
return cs.run();
}
return Promise.resolve(cs);
}
function stage1(cs) {
var s = cs;
if (typeof _commander2['default'].commandAuditing !== 'undefined') {
s = s.set('x_chainscript.command_auditing', _commander2['default'].commandAuditing);
}
if (typeof _commander2['default'].revisionAuditing !== 'undefined') {
s = s.set('x_chainscript.revision_auditing', _commander2['default'].revisionAuditing);
}
if (_commander2['default'].update.length > 0 || _commander2['default'].updateKey.length > 0) {
var _ret = (function () {
var updates = undefined;
_commander2['default'].update.forEach(function (u) {
var update = undefined;
try {
update = JSON.parse(u);
} catch (e) {
update = u;
}
if (typeof updates === 'object' && updates && typeof update === 'object' && update) {
updates = _mergeDeep2['default'](updates, update);
} else {
updates = update;
}
});
_commander2['default'].updateKey.forEach(function (update) {
var parts = update.split(':');
var key = parts[0];
var raw = parts.slice(1).join(':');
var value = {};
try {
_objectPath2['default'].set(value, key, JSON.parse(raw));
} catch (e) {
_objectPath2['default'].set(value, key, raw);
}
updates = _mergeDeep2['default'](updates, value);
});
return {
v: s.update(updates).run()
};
})();
if (typeof _ret === 'object') return _ret.v;
}
return Promise.resolve(s);
}
function stage2(cs) {
var s = cs;
if (_commander2['default'].sign) {
s = s.sign(_commander2['default'].sign);
}
if (_commander2['default'].snapshot) {
s = s.snapshot();
}
if (_commander2['default'].notarize) {
s = s.notarize();
}
if (_commander2['default'].email) {
s = s.email(_commander2['default'].email, _commander2['default'].subject);
}
return s.run();
}
function run(cs) {
if (typeof _commander2['default'].executeUrl !== 'undefined') {
_2['default'].EXECUTE_URL = _commander2['default'].executeUrl;
}
if (typeof _commander2['default'].snapshotsUrl !== 'undefined') {
_2['default'].SNAPSHOTS_URL = _commander2['default'].snapshotsUrl;
}
stage0(cs).then(stage1).then(stage2).then(function (s) {
return handleOutput(s.toJSON());
})['catch'](handleError);
}
function handleInput(input) {
if (input.match(/^chainscript:/)) {
_2['default'].load(input, true).then(run)['catch'](handleError);
} else {
var json = undefined;
try {
json = JSON.parse(input);
} catch (e) {
json = { content: input };
}
run(new _2['default'](json, true));
}
}
if (_commander2['default'].genKey) {
var privateKey = new _bitcore2['default'].PrivateKey();
var publicKey = privateKey.toPublicKey();
var address = undefined;
if (_commander2['default'].testnet) {
address = publicKey.toAddress(_bitcore2['default'].Networks.testnet);
} else {
address = publicKey.toAddress(_bitcore2['default'].Networks.livenet);
}
handleOutput({
'private': privateKey.toWIF(),
'public': publicKey.toString(),
address: address.toString()
});
}
if (_commander2['default'].args.length > 1) {
_commander2['default'].outputHelp();
process.exit(1);
}
if (_commander2['default'].args.length === 0) {
(function () {
process.stdin.setEncoding('utf8');
var input = '';
process.stdin.on('readable', function () {
var chunk = process.stdin.read();
if (chunk !== null) {
input += chunk.toString();
}
});
process.stdin.on('end', function () {
input = input.replace(/\n$/, '');
if (input.length) {
handleInput(input);
} else {
_commander2['default'].outputHelp();
process.exit(1);
}
});
})();
} else {
handleInput(_commander2['default'].args[0]);
}