diff --git a/.eslintrc b/.eslintrc index e155b83b..87ba9521 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,7 +10,8 @@ "plugin:flowtype/recommended", "plugin:import/errors", "plugin:import/warnings", - "plugin:jsx-a11y/strict" + "plugin:jsx-a11y/strict", + "plugin:promise/recommended" ], "env": { "browser": true, diff --git a/app/lnd/methods/channelController.js b/app/lnd/methods/channelController.js index fc3ee68e..5d841e97 100644 --- a/app/lnd/methods/channelController.js +++ b/app/lnd/methods/channelController.js @@ -5,6 +5,17 @@ import pushopenchannel from '../push/openchannel' const BufferUtil = bitcore.util.buffer +function ensurePeerConnected(lnd, meta, pubkey, host) { + return listPeers(lnd, meta) + .then(({ peers }) => { + const peer = find(peers, { pub_key: pubkey }) + if (peer) { + return peer + } + return connectPeer(lnd, meta, { pubkey, host }) + }) +} + /** * Attempts to open a singly funded channel specified in the request to a remote peer. * @param {[type]} lnd [description] @@ -14,40 +25,23 @@ const BufferUtil = bitcore.util.buffer */ export function connectAndOpen(lnd, meta, event, payload) { const { pubkey, host, localamt } = payload - const channelPayload = { - node_pubkey: BufferUtil.hexToBuffer(pubkey), - local_funding_amount: Number(localamt) - } - return new Promise((resolve, reject) => { - listPeers(lnd, meta) - .then(({ peers }) => { - const peer = find(peers, { pub_key: pubkey }) - - if (peer) { - const call = lnd.openChannel(channelPayload, meta) - - call.on('data', data => event.sender.send('pushchannelupdated', { pubkey, data })) - call.on('error', error => event.sender.send('pushchannelerror', { pubkey, error: error.toString() })) - } else { - connectPeer(lnd, meta, { pubkey, host }) - .then(() => { - const call = lnd.openChannel(channelPayload, meta) - - call.on('data', data => event.sender.send('pushchannelupdated', { pubkey, data })) - call.on('error', error => event.sender.send('pushchannelerror', { pubkey, error: error.toString() })) - }) - .catch((err) => { - event.sender.send('pushchannelerror', { pubkey, error: err.toString() }) - reject(err) - }) - } - }) - .catch((err) => { - event.sender.send('pushchannelerror', { pubkey, error: err.toString() }) - reject(err) - }) - }) + return ensurePeerConnected(lnd, meta, pubkey, host) + .then(() => { + const call = lnd.openChannel({ + node_pubkey: BufferUtil.hexToBuffer(pubkey), + local_funding_amount: Number(localamt) + }, meta) + + call.on('data', data => event.sender.send('pushchannelupdated', { pubkey, data })) + call.on('error', error => event.sender.send('pushchannelerror', { pubkey, error: error.toString() })) + + return call + }) + .catch((err) => { + event.sender.send('pushchannelerror', { pubkey, error: err.toString() }) + throw err + }) } /** diff --git a/app/lnd/methods/index.js b/app/lnd/methods/index.js index 1e48ac59..eb238e8b 100644 --- a/app/lnd/methods/index.js +++ b/app/lnd/methods/index.js @@ -25,6 +25,7 @@ export default function (lnd, meta, event, msg, data) { .then((infoData) => { event.sender.send('receiveInfo', infoData) event.sender.send('receiveCryptocurrency', infoData.chains[0]) + return infoData }) .catch(() => event.sender.send('infoFailed')) break @@ -42,13 +43,15 @@ export default function (lnd, meta, event, msg, data) { case 'getInvoiceAndQueryRoutes': // Data looks like { pubkey: String, amount: Number } invoicesController.getInvoice(lnd, meta, { pay_req: data.payreq }) - .then((invoiceData) => { - networkController.queryRoutes(lnd, meta, { pubkey: invoiceData.destination, amount: invoiceData.num_satoshis }) - .then((routes) => { - event.sender.send('receiveInvoiceAndQueryRoutes', routes) - }) - .catch(error => console.log('getInvoiceAndQueryRoutes queryRoutes error: ', error)) - }) + .then(invoiceData => + networkController.queryRoutes(lnd, meta, { + pubkey: invoiceData.destination, + amount: invoiceData.num_satoshis + }) + ) + .then(routes => + event.sender.send('receiveInvoiceAndQueryRoutes', routes) + ) .catch(error => console.log('getInvoiceAndQueryRoutes invoice error: ', error)) break case 'newaddress': @@ -106,6 +109,7 @@ export default function (lnd, meta, event, msg, data) { Promise.all([walletController.walletBalance, channelController.channelBalance].map(func => func(lnd, meta))) .then((balance) => { event.sender.send('receiveBalance', { walletBalance: balance[0].total_balance, channelBalance: balance[1].balance }) + return balance }) .catch(error => console.log('balance error: ', error)) break @@ -132,9 +136,11 @@ export default function (lnd, meta, event, msg, data) { // Payment looks like { payment_preimage: Buffer, payment_route: Object } // { paymentRequest } = data paymentsController.sendPaymentSync(lnd, meta, data) - .then(({ payment_route }) => { + .then((payment) => { + const { payment_route } = payment console.log('payinvoice success: ', payment_route) event.sender.send('paymentSuccessful', Object.assign(data, { payment_route })) + return payment }) .catch(({ error }) => { console.log('error: ', error) @@ -158,6 +164,7 @@ export default function (lnd, meta, event, msg, data) { .then((channel) => { console.log('CHANNEL: ', channel) event.sender.send('channelSuccessful', { channel }) + return channel }) .catch(error => console.log('openChannel error: ', error)) break @@ -168,6 +175,7 @@ export default function (lnd, meta, event, msg, data) { .then((result) => { console.log('CLOSE CHANNEL: ', result) event.sender.send('closeChannelSuccessful') + return result }) .catch(error => console.log('closeChannel error: ', error)) break @@ -175,9 +183,11 @@ export default function (lnd, meta, event, msg, data) { // Returns a peer_id. Pass the pubkey, host and peer_id so we can add a new peer to the list // { pubkey, host } = data peersController.connectPeer(lnd, meta, data) - .then(({ peer_id }) => { + .then((peer) => { + const { peer_id } = peer console.log('peer_id: ', peer_id) event.sender.send('connectSuccess', { pub_key: data.pubkey, address: data.host, peer_id }) + return peer }) .catch((error) => { event.sender.send('connectFailure', { error: error.toString() }) @@ -191,6 +201,7 @@ export default function (lnd, meta, event, msg, data) { .then(() => { console.log('pubkey: ', data.pubkey) event.sender.send('disconnectSuccess', { pubkey: data.pubkey }) + return null }) .catch(error => console.log('disconnectPeer error: ', error)) break @@ -201,6 +212,7 @@ export default function (lnd, meta, event, msg, data) { .then((channelData) => { console.log('connectAndOpen data: ', channelData) // event.sender.send('connectSuccess', { pub_key: data.pubkey, address: data.host, peer_id }) + return channelData }) .catch((error) => { // event.sender.send('connectFailure', { error: error.toString() })