Wallet/bin/Copay.js
Ryan X. Charles 26073921fb add initial command-line interface
You can see commands by running "copay getCommands"

Types are enforced - right now only strings work. This is so that types can be
coerced from the command-line correctly. Number of arguments are also enforced.
In the future you will be able to pass in JSON objects as arguments and they
will be translated to real objects.
2014-04-14 18:24:46 -03:00

118 lines
2.6 KiB
JavaScript

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);