From 0f7d255a21955944adade104d929fd0d1ec475e7 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 12:28:02 -0400 Subject: [PATCH 01/11] no longer send initial data --- src/routes.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/routes.js b/src/routes.js index 9c37421d..db22960a 100644 --- a/src/routes.js +++ b/src/routes.js @@ -708,24 +708,6 @@ module.exports = async ( user: { alias, publicKey - }, - follows: await GunGetters.Follows.currentFollows(), - data: { - invoices: await Common.makePromise((res, rej) => { - lightning.listInvoices( - { - reversed: true, - num_max_invoices: 50 - }, - (err, lres) => { - if (err) { - rej(new Error(err.details)) - } else { - res(lres) - } - } - ) - }) } }) From 0bd5fd0be54c667ebc25bc499f98db0b7cb74315 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 12:59:03 -0400 Subject: [PATCH 02/11] await wallet warmup before lightning interactions --- src/routes.js | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/routes.js b/src/routes.js index db22960a..d17990f2 100644 --- a/src/routes.js +++ b/src/routes.js @@ -622,13 +622,39 @@ module.exports = async ( await Storage.set('trustedPKs', [...(trustedKeys || []), publicKey]) } - // Send an event to update lightning's status - mySocketsEvents.emit('updateLightning') + const { lightning } = LightningServices.services + + // Generate auth token and send it as a JSON response + const token = await auth.generateToken() + + // wait for wallet to warm up + await Common.Utils.makePromise((res, rej) => { + let tries = 0 + let intervalID = null + + intervalID = setInterval(() => { + if (tries === 3) { + rej(new Error(`Wallet did not warm up in under 3 seconds.`)) + + clearInterval(intervalID) + return + } + + tries++ + + lightning.listInvoices({}, err => { + if (!err) { + clearInterval(intervalID) + res() + } + }) + }, 1000) + }) //get the latest channel backups before subscribing const user = require('../services/gunDB/Mediator').getUser() const SEA = require('../services/gunDB/Mediator').mySEA - const { lightning } = LightningServices.services + lightning.exportAllChannelBackups({}, (err, channelBackups) => { if (err) { return handleError(res, err) @@ -640,6 +666,9 @@ module.exports = async ( ) }) + // Send an event to update lightning's status + mySocketsEvents.emit('updateLightning') + //register to listen for channel backups const onNewChannelBackup = () => { logger.warn('Subscribing to channel backup ...') @@ -701,8 +730,6 @@ module.exports = async ( onNewChannelBackup() startTipStatusJob() - // Generate auth token and send it as a JSON response - const token = await auth.generateToken() res.json({ authorization: token, user: { From a047dcf4e52df75f76036b17646e0407dbd83c02 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 13:03:22 -0400 Subject: [PATCH 03/11] avoid duplicate heeaders sent by handleError() --- src/routes.js | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/routes.js b/src/routes.js index d17990f2..741c59da 100644 --- a/src/routes.js +++ b/src/routes.js @@ -655,15 +655,20 @@ module.exports = async ( const user = require('../services/gunDB/Mediator').getUser() const SEA = require('../services/gunDB/Mediator').mySEA - lightning.exportAllChannelBackups({}, (err, channelBackups) => { - if (err) { - return handleError(res, err) - } - GunActions.saveChannelsBackup( - JSON.stringify(channelBackups), - user, - SEA - ) + await Common.Utils.makePromise((res, rej) => { + lightning.exportAllChannelBackups({}, (err, channelBackups) => { + if (err) { + return rej(new Error(err.details)) + } + + res( + GunActions.saveChannelsBackup( + JSON.stringify(channelBackups), + user, + SEA + ) + ) + }) }) // Send an event to update lightning's status From 1578cf8c5872dabf80db92c41456b8552c4da6b7 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 10:22:27 -0400 Subject: [PATCH 04/11] do not allow just any socket to connect --- src/sockets.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sockets.js b/src/sockets.js index 8434b58c..c10e3454 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -265,9 +265,11 @@ module.exports = ( const isNotificationsSocket = !!socket.handshake.query .IS_NOTIFICATIONS_SOCKET + logger.info('New socket client connected (id=' + socket.id + ').') + if (!isLNDSocket) { - /** printing out the client who joined */ - logger.info('New socket client connected (id=' + socket.id + ').') + // let's not allow this + return } if (isLNDSocket) { From 669bda34c57e3fc8d2753c32a54d5ae6901b2567 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 10:24:49 -0400 Subject: [PATCH 05/11] logging --- src/sockets.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sockets.js b/src/sockets.js index c10e3454..61231402 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -447,14 +447,18 @@ module.exports = ( // TODO: make this sync async socket => { try { + logger.info('Received connect request for shockping socket') if (!isAuthenticated()) { + logger.info( + 'not authenticated in gun for shockping socket, will send NOT_AUTH' + ) socket.emit(Common.Constants.ErrorCode.NOT_AUTH) return } + logger.info('now checking token') const { token } = socket.handshake.query - const isAuth = await isValidToken(token) if (!isAuth) { From 85033effa461e7110375e4a0c3ef596e561eb5ca Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 11:37:31 -0400 Subject: [PATCH 06/11] remove unused code --- src/routes.js | 43 ------------------------------------------- 1 file changed, 43 deletions(-) diff --git a/src/routes.js b/src/routes.js index 741c59da..3309f41c 100644 --- a/src/routes.js +++ b/src/routes.js @@ -70,49 +70,6 @@ module.exports = async ( const getAvailableService = () => { return lndErrorManager.getAvailableService() } - /* - new Promise((resolve, reject) => { - const { lightning } = LightningServices.services - - lightning.getInfo({}, (err, response) => { - if (err) { - if (err.message.includes('unknown service lnrpc.Lightning')) { - resolve({ - service: 'walletUnlocker', - message: 'Wallet locked', - code: err.code, - walletStatus: 'locked', - success: true - }) - } else if (err.code === 14) { - reject({ - service: 'unknown', - message: - "Failed to connect to LND server, make sure it's up and running.", - code: 14, - walletStatus: 'unknown', - success: false - }) - } else { - reject({ - service: 'lightning', - message: sanitizeLNDError(err.message), - code: err.code, - walletStatus: 'unlocked', - success: false - }) - } - } - - resolve({ - service: 'lightning', - message: response, - code: null, - walletStatus: 'unlocked', - success: true - }) - }) - })*/ const checkHealth = async () => { logger.info('Getting service status...') From adb8cead88b697946bc17d4684d8d170502d1353 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 15:45:48 -0400 Subject: [PATCH 07/11] remove old socket --- src/sockets.js | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/src/sockets.js b/src/sockets.js index 61231402..b18589cc 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -257,35 +257,6 @@ module.exports = ( } } - io.of('default').on('connection', socket => { - logger.info(`io.onconnection`) - logger.info('socket.handshake', socket.handshake) - - const isLNDSocket = !!socket.handshake.query.IS_LND_SOCKET - const isNotificationsSocket = !!socket.handshake.query - .IS_NOTIFICATIONS_SOCKET - - logger.info('New socket client connected (id=' + socket.id + ').') - - if (!isLNDSocket) { - // let's not allow this - return - } - - if (isLNDSocket) { - const subID = Math.floor(Math.random() * 1000).toString() - const isNotifications = isNotificationsSocket ? 'notifications' : '' - logger.info('[LND] New LND Socket created:' + isNotifications + subID) - const cancelInvoiceStream = onNewInvoice(socket, subID) - const cancelTransactionStream = onNewTransaction(socket, subID) - socket.on('disconnect', () => { - logger.info('LND socket disconnected:' + isNotifications + subID) - cancelInvoiceStream() - cancelTransactionStream() - }) - } - }) - io.of('gun').on('connect', socket => { // TODO: off() From 2c128842476c69c9b1c47c6d1dc53211dd991bd0 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 15:46:24 -0400 Subject: [PATCH 08/11] handle dupe ping sockets better --- src/sockets.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sockets.js b/src/sockets.js index b18589cc..8e4d05e7 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -439,7 +439,11 @@ module.exports = ( } if (pingIntervalID !== null) { - logger.error('Tried to set ping socket twice') + logger.error( + 'Tried to set ping socket twice, this might be due to an app restart and the old socket not being recycled by socket.io in time, will disable the older ping interval, which means the old socket wont work and will ping this new socket instead' + ) + clearInterval(pingIntervalID) + pingIntervalID = null } socket.emit('shockping') From c38854d24f653a56b19a599375a7e2249d32fbd8 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 15:46:45 -0400 Subject: [PATCH 09/11] catch and log --- src/sockets.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sockets.js b/src/sockets.js index 8e4d05e7..a79c47e9 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -446,9 +446,8 @@ module.exports = ( pingIntervalID = null } - socket.emit('shockping') - pingIntervalID = setInterval(() => { + logger.info('emitting shockping event to ping socket') socket.emit('shockping') }, 3000) @@ -460,7 +459,8 @@ module.exports = ( } }) } catch (err) { - logger.error('GUNRPC: ' + err.message) + logger.error('Error inside shockping connect: ' + err.message) + socket.emit('$error', err.message) } } ) From cc7fa5589b8adf57a4276096db0a188425d3d096 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Fri, 6 Nov 2020 16:22:26 -0400 Subject: [PATCH 10/11] remove excessive log --- src/sockets.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sockets.js b/src/sockets.js index a79c47e9..52fb9bb2 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -447,7 +447,6 @@ module.exports = ( } pingIntervalID = setInterval(() => { - logger.info('emitting shockping event to ping socket') socket.emit('shockping') }, 3000) From 9f184153d6c69ce77e660b9dcc0c86efc5b4cb01 Mon Sep 17 00:00:00 2001 From: Daniel Lugo Date: Sat, 7 Nov 2020 11:03:32 -0400 Subject: [PATCH 11/11] restore notifs serv socket ns --- src/sockets.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/sockets.js b/src/sockets.js index 52fb9bb2..e09da0be 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -257,6 +257,33 @@ module.exports = ( } } + io.of('default').on('connection', socket => { + logger.info(`io.onconnection`) + logger.info('socket.handshake', socket.handshake) + + const isLNDSocket = !!socket.handshake.query.IS_LND_SOCKET + const isNotificationsSocket = !!socket.handshake.query + .IS_NOTIFICATIONS_SOCKET + + if (!isLNDSocket) { + /** printing out the client who joined */ + logger.info('New socket client connected (id=' + socket.id + ').') + } + + if (isLNDSocket) { + const subID = Math.floor(Math.random() * 1000).toString() + const isNotifications = isNotificationsSocket ? 'notifications' : '' + logger.info('[LND] New LND Socket created:' + isNotifications + subID) + const cancelInvoiceStream = onNewInvoice(socket, subID) + const cancelTransactionStream = onNewTransaction(socket, subID) + socket.on('disconnect', () => { + logger.info('LND socket disconnected:' + isNotifications + subID) + cancelInvoiceStream() + cancelTransactionStream() + }) + } + }) + io.of('gun').on('connect', socket => { // TODO: off()