mirror of https://github.com/BTCPrivate/copay.git
Merge pull request #39 from ryanxcharles/feature/command-line
WIP: command-line interface
This commit is contained in:
commit
4a9fa42ccd
|
@ -0,0 +1,118 @@
|
|||
var imports = require('soop').imports();
|
||||
var PublicKeyRing = imports.PublicKeyRing || require('../js/models/core/PublicKeyRing');
|
||||
var Wallet = imports.Wallet || require('../js/models/core/Wallet');
|
||||
|
||||
var Copay = function(opts) {
|
||||
this._init(opts);
|
||||
};
|
||||
|
||||
Copay.prototype._init = function(opts) {
|
||||
var self = this;
|
||||
|
||||
opts = opts ? opts : {};
|
||||
|
||||
self.optsList = [
|
||||
'publicKeyRing',
|
||||
'wallet'
|
||||
];
|
||||
|
||||
self.opts = {};
|
||||
for (var a in self.optsList) {
|
||||
if (opts.hasOwnProperty(a))
|
||||
self.opts[a] = opts[a];
|
||||
}
|
||||
|
||||
self.publicKeyRing = self.opts.publicKeyRing ? self.opts.publicKeyRing : new PublicKeyRing();
|
||||
self.wallet = self.opts.wallet ? self.opts.wallet : new Wallet();
|
||||
};
|
||||
|
||||
Copay.prototype._command = function(command, args, callback) {
|
||||
var self = this;
|
||||
|
||||
if (command[0] == "_")
|
||||
return callback(new Error('invalid command'));
|
||||
|
||||
if (typeof self[command] == 'function') {
|
||||
var f = Copay.prototype[command];
|
||||
if (f.argTypes[f.argTypes.length-1][1] == 'function')
|
||||
return self[command].apply(self, args.concat([callback]));
|
||||
else
|
||||
return callback(null, self[command].apply(self, args));
|
||||
};
|
||||
|
||||
return callback(new Error('invalid command'));
|
||||
};
|
||||
|
||||
Copay._checkArgTypes = function(command, args) {
|
||||
var f = Copay.prototype[command];
|
||||
for (var i in args) {
|
||||
if (typeof args[i] != f.argTypes[i][1])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
function checkArgs(name, args) {
|
||||
if (!Copay._checkArgTypes(name, args))
|
||||
throw new Error('Invalid arguments');
|
||||
}
|
||||
|
||||
Copay.prototype.echo = function(str, callback) {
|
||||
var self = this;
|
||||
checkArgs('echo', arguments);
|
||||
|
||||
return callback(null, str);
|
||||
};
|
||||
|
||||
Copay.prototype.echo.argTypes =
|
||||
[
|
||||
['str', 'string'],
|
||||
['callback', 'function']
|
||||
];
|
||||
|
||||
Copay.prototype.getBalance = function(callback) {
|
||||
var self = this;
|
||||
checkArgs('getBalance', arguments);
|
||||
|
||||
return callback(null, self.wallet.getBalance([]));
|
||||
};
|
||||
|
||||
Copay.prototype.getBalance.argTypes =
|
||||
[
|
||||
['callback', 'function']
|
||||
];
|
||||
|
||||
Copay.prototype.getCommands = function(callback) {
|
||||
var self = this;
|
||||
checkArgs('getCommands', arguments);
|
||||
|
||||
var fs = [];
|
||||
|
||||
for (var i in Copay.prototype) {
|
||||
var f = Copay.prototype[i];
|
||||
if (typeof f == 'function' && i[0] != "_")
|
||||
fs.push(i);
|
||||
};
|
||||
|
||||
return callback(null, fs);
|
||||
};
|
||||
|
||||
Copay.prototype.getCommands.argTypes =
|
||||
[
|
||||
['callback', 'function']
|
||||
];
|
||||
|
||||
Copay.prototype.getPublicKeyRingId = function(callback) {
|
||||
var self = this;
|
||||
checkArgs('getPublicKeyRingId', arguments);
|
||||
|
||||
return callback(null, self.publicKeyRing.id);
|
||||
};
|
||||
|
||||
Copay.prototype.getPublicKeyRingId.argTypes =
|
||||
[
|
||||
['callback', 'function']
|
||||
];
|
||||
|
||||
|
||||
module.exports = require('soop')(Copay);
|
|
@ -0,0 +1,32 @@
|
|||
#!/usr/bin/env node
|
||||
var Copay = require('./Copay.js');
|
||||
var commander = require('commander');
|
||||
|
||||
var main = function() {
|
||||
|
||||
commander
|
||||
.version("0.0.1")
|
||||
.option('-f, --file [file]', 'AES encrypted data file', 'copay.json.aes')
|
||||
.option('-p, --pass [passphrase]', 'AES wallet passphrase')
|
||||
.option('-c, --client', 'Issue command over RPC to copay daemon')
|
||||
.option('-d, --daemon', 'Run as daemon accepting RPC commands')
|
||||
.option('--rpcport [port]', 'RPC port [18332]', Number, 18332)
|
||||
.option('--rpcuser [user]', 'RPC user [user]', String, 'user')
|
||||
.option('--rpcpass [password]', 'RPC password [pass]', String, 'pass')
|
||||
.parse(process.argv);
|
||||
|
||||
var copay = new Copay(commander);
|
||||
|
||||
var args = commander.args;
|
||||
|
||||
copay._command(args[0], args.slice(1), function(err, result) {
|
||||
if (err)
|
||||
return console.log("" + err);
|
||||
|
||||
console.log(JSON.stringify(result, null, 2));
|
||||
});
|
||||
};
|
||||
|
||||
if (require.main === module) {
|
||||
main();
|
||||
}
|
Loading…
Reference in New Issue