From d42e15bbf5b4ea783d8f0342386f42abea3acaff Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Thu, 14 Feb 2019 10:51:55 -0300 Subject: [PATCH 1/6] update to latests bitcore-wallet CLI --- packages/bitcore-wallet/bin/cli-utils.js | 24 ++- packages/bitcore-wallet/bin/wallet-address | 6 + packages/bitcore-wallet/bin/wallet-addresses | 6 + packages/bitcore-wallet/bin/wallet-balance | 17 +- packages/bitcore-wallet/bin/wallet-broadcast | 1 - packages/bitcore-wallet/bin/wallet-create | 7 +- packages/bitcore-wallet/bin/wallet-genkey | 6 +- packages/bitcore-wallet/bin/wallet-history | 186 ++++++++++++++++--- packages/bitcore-wallet/bin/wallet-import | 40 +++- packages/bitcore-wallet/bin/wallet-scan | 19 ++ packages/bitcore-wallet/bin/wallet-send | 5 +- packages/bitcore-wallet/bin/wallet-status | 2 +- packages/bitcore-wallet/bin/wallet-support | 39 +++- 13 files changed, 290 insertions(+), 68 deletions(-) create mode 100755 packages/bitcore-wallet/bin/wallet-scan diff --git a/packages/bitcore-wallet/bin/cli-utils.js b/packages/bitcore-wallet/bin/cli-utils.js index b57197d8202..0378ff65492 100644 --- a/packages/bitcore-wallet/bin/cli-utils.js +++ b/packages/bitcore-wallet/bin/cli-utils.js @@ -2,7 +2,7 @@ var _ = require('lodash'); var url = require('url'); var read = require('read') var log = require('npmlog'); -var Client = require('../../bitcore-wallet-client'); +var Client = require('bitcore-wallet-client'); var FileStorage = require('./filestorage'); var sjcl = require('sjcl'); @@ -93,16 +93,18 @@ Utils.getClient = function(args, opts, cb) { opts = opts || {}; var filename = args.file || process.env['WALLET_FILE'] || process.env['HOME'] + '/.wallet.dat'; - var host = args.host || process.env['BWS_HOST'] || 'https://bws.bitpay.com/bws/api'; + var host = args.host || process.env['BWS_HOST'] || 'https://bws.bitpay.com/'; var storage = new FileStorage({ filename: filename, }); var client = new Client({ - baseUrl: host, + baseUrl: url.resolve(host, '/bws/api'), verbose: args.verbose, supportStaffWalletId: opts.walletId, + timeout: 20 * 60 * 1000, + //timeout: 1000, }); storage.load(function(err, walletData) { @@ -213,7 +215,7 @@ Utils.findOneTxProposal = function(txps, id) { if (matches.length > 1) { console.log('More than one TX Proposals match:' + id); Utils.renderTxProposals(txps); - program.exit(1); + process.exit(1); } return matches[0]; @@ -232,17 +234,23 @@ Utils.parseAmount = function(text) { var regex = '^(\\d*(\\.\\d{0,8})?)\\s*(' + _.keys(Utils.UNITS2).join('|') + ')?$'; var match = new RegExp(regex, 'i').exec(text.trim()); - if (!match || match.length === 0) throw new Error('Invalid amount'); + if (!match || match.length === 0) { + Utils.die('Invalid amount: ' + text); + } var amount = parseFloat(match[1]); if (!_.isNumber(amount) || _.isNaN(amount)) throw new Error('Invalid amount'); var unit = (match[3] || 'sat').toLowerCase(); var rate = Utils.UNITS2[unit]; - if (!rate) throw new Error('Invalid unit') + if (!rate) { + Utils.die('Invalid unit: ' + unit); + } var amountSat = parseFloat((amount * rate).toPrecision(12)); - if (amountSat != Math.round(amountSat)) throw new Error('Invalid amount'); + if (amountSat != Math.round(amountSat)) { + Utils.die('Invalid amount: ' + amount + ' ' + unit); + } return amountSat; }; @@ -251,7 +259,7 @@ Utils.configureCommander = function(program) { program .version('0.0.1') .option('-f, --file ', 'Wallet file') - .option('-h, --host ', 'Bitcore Wallet Service URL (eg: http://localhost:3000/bws/api') + .option('-h, --host ', 'Bitcore Wallet Service URL (eg: http://localhost:3001/copay/api') .option('-v, --verbose', 'be verbose') return program; diff --git a/packages/bitcore-wallet/bin/wallet-address b/packages/bitcore-wallet/bin/wallet-address index 0adf13f4c16..798da622500 100755 --- a/packages/bitcore-wallet/bin/wallet-address +++ b/packages/bitcore-wallet/bin/wallet-address @@ -1,6 +1,7 @@ #!/usr/bin/env node var program = require('commander'); +var bitcoreCash = require('bitcore-wallet-client').BitcoreCash; var utils = require('./cli-utils'); program = utils.configureCommander(program); @@ -13,6 +14,11 @@ utils.getClient(program, { }, function(client) { client.createAddress({}, function(err, x) { utils.die(err); + + if (client.credentials.coin == 'bch') { + x.address = (new bitcoreCash.Address(x.address)).toCashAddress(); + } + console.log('* New Address %s ', x.address); }); }); diff --git a/packages/bitcore-wallet/bin/wallet-addresses b/packages/bitcore-wallet/bin/wallet-addresses index 84f6b76e93a..75023bb4830 100755 --- a/packages/bitcore-wallet/bin/wallet-addresses +++ b/packages/bitcore-wallet/bin/wallet-addresses @@ -2,6 +2,7 @@ var _ = require('lodash'); var program = require('commander'); +var bitcoreCash = require('bitcore-wallet-client').BitcoreCash; var utils = require('./cli-utils'); program = utils.configureCommander(program); @@ -19,6 +20,11 @@ utils.getClient(program, { mustExist: true }, function (client) { if (x.length > 0) { console.log('* Addresses:'); _.each(x, function(a) { + if (client.credentials.coin == 'bch') { + a.address = (new bitcoreCash.Address(a.address)).toCashAddress(); + } + + console.log(' ', a.address); }); } else { diff --git a/packages/bitcore-wallet/bin/wallet-balance b/packages/bitcore-wallet/bin/wallet-balance index 8e4ec9e61de..daf48d6cd42 100755 --- a/packages/bitcore-wallet/bin/wallet-balance +++ b/packages/bitcore-wallet/bin/wallet-balance @@ -5,24 +5,17 @@ var utils = require('./cli-utils'); program = utils.configureCommander(program); program .option('-c, --coin ', 'coin (btc/bch)') - .option('-n, --network ', 'network of the coin') - .option('-w, --wallet ', 'wallet id') .parse(process.argv); + +program.option = function(){};; + var args = program.args; var opts = {}; if (program.coin) { - opts.coin = program.coin; -} - -if (program.network) { - opts.network = program.network; -} - -if(program.wallet) { - opts.wallet = program.wallet; + opts.coin = program.coin } utils.getClient(program, { @@ -30,6 +23,6 @@ utils.getClient(program, { }, function(client) { client.getBalance(opts, function(err, x) { utils.die(err); - console.log('* Wallet balance %s (Locked %s)', utils.renderAmount(x.totalAmount, opts.coin), utils.renderAmount(x.lockedAmount, opts.coin)); + console.log('* Wallet balance %s (Locked %s)', utils.renderAmount(x.totalAmount), utils.renderAmount(x.lockedAmount)); }); }); diff --git a/packages/bitcore-wallet/bin/wallet-broadcast b/packages/bitcore-wallet/bin/wallet-broadcast index 339dac06dd4..dccc4f6ce1b 100755 --- a/packages/bitcore-wallet/bin/wallet-broadcast +++ b/packages/bitcore-wallet/bin/wallet-broadcast @@ -7,7 +7,6 @@ program = utils.configureCommander(program); program .usage('[options] ') - .option('--path ', 'REQUIRED - Where wallet is stored') .parse(process.argv); var args = program.args; diff --git a/packages/bitcore-wallet/bin/wallet-create b/packages/bitcore-wallet/bin/wallet-create index 1b16b89cdc1..895b1fc0d4e 100755 --- a/packages/bitcore-wallet/bin/wallet-create +++ b/packages/bitcore-wallet/bin/wallet-create @@ -6,7 +6,7 @@ var utils = require('./cli-utils'); program = utils.configureCommander(program); program - .option('-n, --network ', 'Network for the wallet') + .option('-t, --testnet', 'Create a Testnet Wallet') .option('-p, --password', 'Encrypt wallet. Will ask password interactively') .option('-c, --coin ', 'coin (btc/bch)') .usage('[options] [copayerName] ') @@ -19,8 +19,8 @@ if (!args[0]) var walletName = args[0]; var copayerName = args[2] || process.env.USER; var passphrase = args[3]; +var network = program.testnet ? 'testnet' : 'livenet'; var coin = program.coin ? program.coin : 'btc'; -var network = program.network ? program.network : 'livenet' var mn; try { @@ -38,9 +38,10 @@ utils.getClient(program, { language: 'en', coin: coin, }); + client.createWallet(walletName, copayerName, mn[0], mn[1], { network: network, - coin: coin + coin: coin, }, function(err, secret) { utils.die(err); console.log(' * ' + _.capitalize(network) + ' Wallet Created.'); diff --git a/packages/bitcore-wallet/bin/wallet-genkey b/packages/bitcore-wallet/bin/wallet-genkey index 50276ad37b0..b340399f62b 100755 --- a/packages/bitcore-wallet/bin/wallet-genkey +++ b/packages/bitcore-wallet/bin/wallet-genkey @@ -8,15 +8,17 @@ program = utils.configureCommander(program); program .option('-t, --testnet', 'Create a Testnet Extended Private Key') + .option('-c, --coin ', 'coin (btc/bch)') .option('-p, --password', 'Encrypt wallet. Will ask password interactively') .parse(process.argv); var args = program.args; var network = program.testnet ? 'testnet' : 'livenet'; +var coin = program.coin ? 'btc' : 'bch'; utils.getClient(program, { doNotComplete: true, mustBeNew: true }, function (client) { - client.seedFromRandom(network); + client.seedFromRandom({network:network, coin:coin}); utils.saveClient(program, client, function () { - console.log(' * ' + _.capitalize(network) + ' Extended Private Key Created.'); + console.log(' * ' + _.capitalize(network) + '/' + coin + ' Extended Private Key Created.'); console.log(' To operate with the corresponding public keys from a proxy device, please run `wallet-export --nosign` and then on the proxy device `wallet-import`.'); }); }); diff --git a/packages/bitcore-wallet/bin/wallet-history b/packages/bitcore-wallet/bin/wallet-history index edfbc9bd134..d27af66a79f 100755 --- a/packages/bitcore-wallet/bin/wallet-history +++ b/packages/bitcore-wallet/bin/wallet-history @@ -3,40 +3,178 @@ var _ = require('lodash'); var fs = require('fs'); var moment = require('moment'); +var async = require('async'); var program = require('commander'); var utils = require('./cli-utils'); program = utils.configureCommander(program); program + .option('-o, --output ', 'get JSON output in file') + .option('-l, --limit ', 'limit history to n transactions') + .option('-i, --info', 'get extra history info') + .option('-t, --format ', 'format csv / json') .parse(process.argv); var args = program.args; -utils.getClient(program, { mustExist: true }, function (client) { - client.getTxHistory({}, function (err, txs) { - if (_.isEmpty(txs)) - return; - - console.log("* TX History:") - - _.each(txs, function(tx) { - var time = moment(tx.time * 1000).fromNow(); - var amount = utils.renderAmount(tx.amount); - var confirmations = tx.confirmations || 0; - var proposal = tx.proposalId ? '["' + tx.message + '" by ' + tx.creatorName + '] ' : ''; - switch (tx.action) { - case 'received': - direction = '<='; - break; - case 'moved': - direction = '=='; - break; - case 'sent': - direction = '=>'; - break; +var skip = 0, total = 0 , + limit = program.limit, got, page = 1000; +console.warn("* TX History:") + +let converter = JSON.stringify.bind(); + + +function formatDate(date) { + var dateObj = new Date(date); + if (!dateObj) { + this.logger.warn('Error formating a date'); + return 'DateError'; + } + if (!dateObj.toJSON()) { + return ''; + } + return dateObj.toJSON(); +} + + + +if (program.format == 'csv') { + converter = function(txs) { + + var ret = ''; + var _amount, _note, _copayers, _creator, _comment; + var csvContent = []; + + // from Copay + txs.forEach(it => { + var amount = it.amount; + if (it.action == 'moved') amount = 0; + + _copayers = ''; + _creator = ''; + + if (it.actions && it.actions.length > 1) { + for (var i = 0; i < it.actions.length; i++) { + _copayers += + it.actions[i].copayerName + ':' + it.actions[i].type + ' - '; + } + _creator = + it.creatorName && it.creatorName != 'undefined' + ? it.creatorName + : ''; + } + _amount = (it.action == 'sent' ? '-' : '') + (amount /1e8).toFixed(8); + _note = it.message || ''; + _comment = it.note ? it.note.body : ''; + + if (it.action == 'moved') + _note += ' Moved:' + (it.amount /1e8).toFixed(8); + + csvContent.push({ + Date: formatDate(it.time * 1000), + Destination: it.addressTo || '', + Description: _note, + Amount: _amount, + Currency: this.currency, + Txid: it.txid, + Creator: _creator, + Copayers: _copayers, + Comment: _comment + }); + + if (it.fees && (it.action == 'moved' || it.action == 'sent')) { + var _fee = (it.fees / 1e8).toFixed(8); + csvContent.push({ + Date: formatDate(it.time * 1000), + Destination: 'Bitcoin Network Fees', + Description: '', + Amount: '-' + _fee, + Currency: this.currency, + Txid: '', + Creator: '', + Copayers: '' + }); } - console.log("\t%s: %s %s %s %s(%s confirmations)", time, direction, tx.action, amount, proposal, confirmations); }); - }); + + csvContent.forEach(it => { + ret = ret + `${it.Date},${it.Txid},${it.Destination},${it.Amount}` + "\n"; + }); + return ret; + }; +} else if (program.format == 'json') { +} else if (program.format) { + utils.die('Unknown format ' + program.format); +} + + +var allTxs=[]; + +utils.getClient(program, { mustExist: true }, function (client) { + async.doWhilst( + function(cb) { + client.getTxHistory({ + skip: skip, + limit: page+ 1, + includeExtendedInfo: program.info, + }, function(err, txs) { + if (err) return cb(err); + + if (_.isEmpty(txs)) + return; + + got = txs.length; + if (got > page) { + txs.pop(); + } + + if (program.output) { + allTxs = allTxs.concat(txs); + fs.writeFile(program.output,converter(allTxs), { + encoding: 'utf8' + }, function(err) { + if (err) console.error(err); + console.warn('Output file updated') + }); + } else { + _.each(txs, function(tx) { + var time = moment(tx.time * 1000).fromNow(); + var amount = utils.renderAmount(tx.amount); + var confirmations = tx.confirmations || 0; + var proposal = tx.proposalId ? '["' + tx.message + '" by ' + tx.creatorName + '] ' : ''; + var direction; + switch (tx.action) { + case 'received': + direction = '<='; + break; + case 'moved': + direction = '=='; + break; + case 'sent': + direction = '=>'; + break; + default: + direction = tx.action; + break; + } + console.log("\t%s: %s %s %s %s(%s confirmations)", time, direction, tx.action, amount, proposal, confirmations); + }); + } + return cb(); + }); + }, + function() { + total = total + got; + var cont = got > page && (!limit || total < limit); + if (cont) { + skip+= page; + console.warn('* Skip:', skip); + } + return cont; + }, + function (err) { + if (err) console.log(err); + } + ); }); diff --git a/packages/bitcore-wallet/bin/wallet-import b/packages/bitcore-wallet/bin/wallet-import index 3c4bb034882..da51cb9b860 100755 --- a/packages/bitcore-wallet/bin/wallet-import +++ b/packages/bitcore-wallet/bin/wallet-import @@ -2,16 +2,19 @@ var program = require('commander'); var fs = require('fs'); +var sjcl = require('sjcl'); var utils = require('./cli-utils'); program = utils.configureCommander(program); program + .option('-c, --coin ', 'coin (btc/bch)') .option('-t, --testnet', 'testnet network') - .option('-f, --file', 'import from file') + .option('-i, --input', 'import from file') .option('-q, --qr', 'import from a QR code') .option('-e, --exportpassword ', 'a password to decrypt the data being imported') + .option('-k, --keypassword ', 'password to decrypt private key from imported file') .option('-p, --password', 'Encrypt wallet. Will ask password interactively') - .usage('[options] ') + .usage('[options] [<"backup-words"> | ] ') .parse(process.argv); var args = program.args; @@ -22,19 +25,37 @@ if (!args[0]) utils.getClient(program, { mustBeNew: true }, function(client) { - if (program.file) { + + if (program.input) { var file = args[0]; - var str = fs.readFileSync(file, { - encoding: 'utf8' - }); + console.log("Importing from file:" + file); + var str; + + try { + str = fs.readFileSync(file, { + encoding: 'utf8' + }); + } catch (e) { + utils.die('Could not import: ' + e); + }; + if (str.substr(0,6) == '{"iv":') { + console.log('Backup is encrypted'); + if (!program.exportpassword) + utils.die('Provide export\'s password with -e '); + try { + str = sjcl.decrypt( program.exportpassword, str); + } catch (e) { + utils.die('Could not decrypt import: ' + e); + }; + }; try { client.import(str, { compressed: !!program.qr, - password: program.exportpassword, + password: program.keypassword, }); } catch (ex) { - utils.die('Could not import. Check input file and password'); + utils.die('Could not import. Check input file and password:' + ex.message); } utils.saveClient(program, client, function() { @@ -42,12 +63,15 @@ utils.getClient(program, { console.log('Wallet Imported ' + access + '.'); }); } else { + console.log("Importing from mnemonic"); var mnemonics = args[0]; var passphrase = args[1]; var network = program.testnet ? 'testnet' : 'livenet'; + var coin = program.coin ? program.coin : 'btc'; client.importFromMnemonic(mnemonics, { network: network, passphrase: passphrase, + coin: coin, }, function(err) { if (err) utils.die('Could not import' + err); diff --git a/packages/bitcore-wallet/bin/wallet-scan b/packages/bitcore-wallet/bin/wallet-scan new file mode 100755 index 00000000000..8ee166dab95 --- /dev/null +++ b/packages/bitcore-wallet/bin/wallet-scan @@ -0,0 +1,19 @@ +#!/usr/bin/env node + +var _ = require('lodash'); +var program = require('commander'); +var utils = require('./cli-utils'); +program = utils.configureCommander(program); + +program + .usage('[options]') + .description('Scan wallets addresses for funds') + .parse(process.argv); + +var args = program.args; +utils.getClient(program, { mustExist: true }, function (client) { + client.startScan({}, function(err) { + utils.die(err); + console.log(' * Scan started. Check with `wallet-status`.'); + }); +}); diff --git a/packages/bitcore-wallet/bin/wallet-send b/packages/bitcore-wallet/bin/wallet-send index 81e033f37ed..83adb88a3f9 100755 --- a/packages/bitcore-wallet/bin/wallet-send +++ b/packages/bitcore-wallet/bin/wallet-send @@ -87,7 +87,6 @@ utils.getClient(program, { var coin = client.credentials.coin; var bitcore = Bitcore_[coin]; - var uri, addr, amount, note; // no backwards compat uri @@ -101,8 +100,8 @@ utils.getClient(program, { // BIP21 try { - var parsed = new bitcore.URI(arg1); + var parsed = new bitcore.URI(arg1); if (!parsed.r) { addr = parsed.address ? parsed.address.toString() : ''; @@ -113,7 +112,7 @@ utils.getClient(program, { uri = parsed.r; } } catch (e) { - utils.die(e); + uri = null; } } diff --git a/packages/bitcore-wallet/bin/wallet-status b/packages/bitcore-wallet/bin/wallet-status index eb960a2754d..19355d9f98d 100755 --- a/packages/bitcore-wallet/bin/wallet-status +++ b/packages/bitcore-wallet/bin/wallet-status @@ -21,7 +21,7 @@ utils.getClient(program, { mustExist: true }, function (client) { console.log(' Missing copayers:', x.n - x.copayers.length); console.log(' Wallet secret:', x.secret); } - console.log('* Copayers:', _.pluck(x.copayers,'name').join(', ')); + console.log('* Copayers:', _.map(x.copayers,'name').join(', ')); if (program.verbose) { diff --git a/packages/bitcore-wallet/bin/wallet-support b/packages/bitcore-wallet/bin/wallet-support index d924ebb3f8f..57935823fe9 100755 --- a/packages/bitcore-wallet/bin/wallet-support +++ b/packages/bitcore-wallet/bin/wallet-support @@ -7,11 +7,14 @@ var moment = require('moment'); var async = require('async'); program = utils.configureCommander(program); var N = 100; +var bitcoreCash = require('bitcore-wallet-client').BitcoreCash; + program .option('-t, --testnet', 'Query testnet wallet') .option('-h, --history', 'Include full tx history') .option('-f, --full', 'Dont trim output to ' + N + ' items') + .option('-v, --verbose', 'Show verbose output') .usage('') .parse(process.argv); @@ -26,12 +29,20 @@ var format = (amount, coin) => { return utils.renderAmount(amount, coin); }; +try { + identifier = (new bitcoreCash.Address(identifier)).toLegacyAddress(); +// console.log('Cashaddr detected. Changed to :' + identifier); +} catch (e) { +}; + utils.getClient(program, { mustExist: true }, (client) => { client.getStatusByIdentifier({ identifier: identifier }, (err, status) => { + if (program.verbose) + console.log(require('util').inspect(status, true, 10)); // 10 levels deep utils.die(err); if (!status) { console.log('Could not find wallet associated to ' + identifier); @@ -45,6 +56,7 @@ utils.getClient(program, { walletId: status.wallet.id, }, (client) => { + displayStatus(status); async.parallel([ function(done) { client.getSendMaxInfo({ @@ -60,9 +72,7 @@ utils.getClient(program, { client.getTxHistory({}, done); }, ], (err, res) => { - utils.die(err); - displayStatus(status); if (trim) { if ((res[1] && res[1].length>N) || (res[2] && res[2].length> N)) console.log('\n Trimming results to %s items', N ); @@ -74,9 +84,16 @@ utils.getClient(program, { res[2] = res[2].splice(0,N); }; - displaySendMaxInfo(res[0], status.wallet); - displayAddresses(res[1], status.wallet); - displayHistory(res[2], status.wallet); + if (res[0]) + displaySendMaxInfo(res[0], status.wallet); + + if (res[1]) + displayAddresses(res[1], status.wallet); + + if (res[2]) + displayHistory(res[2], status.wallet); + + if (err) utils.die(err); }); }); }); @@ -106,6 +123,10 @@ function displayStatus(status) { console.log(' By address:'); } _.each(x.byAddress, function(item) { + + if (w.coin =='bch') { + item.address = (new bitcoreCash.Address(item.address).toCashAddress()); + } console.log(' %s (%s): %s', item.address, item.path, format(item.amount, w.coin)); }); @@ -116,6 +137,9 @@ function displayStatus(status) { return a.type == 'accept'; }).length; console.log(" [%s] %s (fee/kb %s) => %s (status: %s)", new moment(x.createdOn * 1000), format(x.amount, w.coin), format(x.feePerKb, w.coin), x.outputs[0].toAddress, missingSignatures > 0 ? 'missing ' + missingSignatures + ' signatures' : 'ready to broadcast'); + + if (!missingSignatures) + console.log('Raw transaction',x.raw); //TODO }); } else { console.log('\n* No pending tx proposals.'); @@ -141,13 +165,16 @@ function displaySendMaxInfo(info, wallet) { }); }; -function displayAddresses(addresses) { +function displayAddresses(addresses, w) { if (_.isEmpty(addresses)) { console.log('\n* No addresses.'); return; } console.log('\n* Main addresses (not including change addresses)'); _.each(addresses, function(a) { + if (w.coin == 'bch') { + a.address = (new bitcoreCash.Address(a.address).toCashAddress()); + } console.log(' [%s] %s (%s)', moment(a.createdOn * 1000), a.address, a.path); }); }; From 52d7e7992e09e0447d71fce62af3664f0cdad9bf Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Thu, 14 Feb 2019 15:18:23 -0300 Subject: [PATCH 2/6] fix ProtoBuf PayPro for nodejs --- packages/bitcore-wallet-client/lib/paypro.js | 22 +++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/bitcore-wallet-client/lib/paypro.js b/packages/bitcore-wallet-client/lib/paypro.js index 8e0cda49d85..d6a1dc68629 100644 --- a/packages/bitcore-wallet-client/lib/paypro.js +++ b/packages/bitcore-wallet-client/lib/paypro.js @@ -1,4 +1,5 @@ var $ = require('preconditions').singleton(); +const URL = require('url'); var Bitcore = require('bitcore-lib'); var Bitcore_ = { btc: Bitcore, @@ -10,14 +11,23 @@ var PayPro = {}; PayPro._nodeRequest = function(opts, cb) { opts.agent = false; + var http = opts.httpNode || (opts.proto === 'http' ? require("http") : require("https")); - var fn = opts.method == 'POST' ? 'post' : 'get'; + const url = URL.parse(opts.url); + let ropts = { + headers: opts.headers, + method: opts.method || 'GET', + hostname: url.host, + port:url.port || (opts.proto === 'http' ? 80 : 443), + path:url.path, + protocol: url.protocol, + agent: false, + }; - http[fn](opts, function(res) { + var req = http.request(ropts, function(res) { var data = []; // List of Buffer objects - if (res.statusCode != 200) return cb(new Error('HTTP Request Error: ' + res.statusCode + ' ' + res.statusMessage + ' ' + ( data ? data : '' ) )); @@ -29,6 +39,12 @@ PayPro._nodeRequest = function(opts, cb) { return cb(null, data); }); }); + + req.on("error", function(error) { + return cb(error); + }); + + req.end(); }; PayPro._browserRequest = function(opts, cb) { From f42260d1a7d9f083c0acd1589f9a14827bd462cb Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Mon, 18 Feb 2019 16:15:04 -0300 Subject: [PATCH 3/6] fix tests --- packages/bitcore-wallet-client/test/paypro.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-wallet-client/test/paypro.js b/packages/bitcore-wallet-client/test/paypro.js index 8835638d706..ba2fa638504 100644 --- a/packages/bitcore-wallet-client/test/paypro.js +++ b/packages/bitcore-wallet-client/test/paypro.js @@ -37,7 +37,7 @@ describe('paypro', function() { }; httpNode = {}; - httpNode.get = function(opts, cb) { + httpNode.request = function(opts, cb) { var res = {}; res.statusCode = httpNode.error || 200; if (httpNode.error == 404) From 459fcb3f52255b9dcb953e770e083f5bad3153ae Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Mon, 18 Feb 2019 18:18:36 -0300 Subject: [PATCH 4/6] rm console log --- packages/bitcore-wallet-service/lib/storage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-wallet-service/lib/storage.js b/packages/bitcore-wallet-service/lib/storage.js index b901ba400a8..a196dda18e6 100644 --- a/packages/bitcore-wallet-service/lib/storage.js +++ b/packages/bitcore-wallet-service/lib/storage.js @@ -818,7 +818,7 @@ Storage.prototype.getTxHistoryCacheV8 = function(walletId, skip, limit, cb) { if (lastPosition <= 0) return cb(null, []); - console.log('[storage.js.750:first/lastPosition:]',firstPosition + '/'+lastPosition); //TODO + //console.log('[storage.js.750:first/lastPosition:]',firstPosition + '/'+lastPosition); //TODO self.db.collection(collections.CACHE).find({ walletId: walletId, From 50990985944ee69b5f7582d9b04aab0dfb045486 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Wed, 20 Feb 2019 15:41:21 -0300 Subject: [PATCH 5/6] make path a param in v8tool --- packages/bitcore-wallet-service/scripts/v8tool | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/bitcore-wallet-service/scripts/v8tool b/packages/bitcore-wallet-service/scripts/v8tool index 9385fd3ca31..1479db64a0e 100755 --- a/packages/bitcore-wallet-service/scripts/v8tool +++ b/packages/bitcore-wallet-service/scripts/v8tool @@ -8,6 +8,7 @@ const Client = require('../lib/blockchainexplorers/v8/client.js'); const coin = 'BCH'; const network = 'mainnet'; const authKey = process.argv[2]; +const path = process.argv[3] || 'addresses; if (!authKey) throw "provide authKey" @@ -32,7 +33,7 @@ let client = new Client({ }); -const url = `${baseUrl}/wallet/${pubKey}/addresses`; +const url = `${baseUrl}/wallet/${pubKey}/${path}`; const signature = client.sign({ method: 'GET', url }); const payload = {}; From dfe2474015773ff194e3628130f38fb4178a707d Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Wed, 20 Feb 2019 16:08:27 -0300 Subject: [PATCH 6/6] . --- packages/bitcore-wallet-service/scripts/v8tool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-wallet-service/scripts/v8tool b/packages/bitcore-wallet-service/scripts/v8tool index 1479db64a0e..ac8ca6b0096 100755 --- a/packages/bitcore-wallet-service/scripts/v8tool +++ b/packages/bitcore-wallet-service/scripts/v8tool @@ -8,7 +8,7 @@ const Client = require('../lib/blockchainexplorers/v8/client.js'); const coin = 'BCH'; const network = 'mainnet'; const authKey = process.argv[2]; -const path = process.argv[3] || 'addresses; +const path = process.argv[3] || 'addresses'; if (!authKey) throw "provide authKey"