From 77417da1b4da9ad3192379a3828d39f8437becb3 Mon Sep 17 00:00:00 2001 From: emad-salah Date: Sat, 17 Oct 2020 15:08:26 +0100 Subject: [PATCH 1/3] added wait function to helpers --- utils/helpers.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/utils/helpers.js b/utils/helpers.js index 4fecdc2f..9e08e671 100644 --- a/utils/helpers.js +++ b/utils/helpers.js @@ -19,6 +19,13 @@ const asyncFilter = async (arr, cb) => { return arr.filter((_, i) => results[i]) } +const wait = (seconds = 0) => + new Promise(resolve => { + /** @type {NodeJS.Timeout} */ + const timer = setTimeout(() => resolve(timer), seconds * 1000) + }) + module.exports = { - asyncFilter + asyncFilter, + wait } From 5b6ff06a7e92413d56d8fdb2af788d513b97deaa Mon Sep 17 00:00:00 2001 From: emad-salah Date: Sat, 17 Oct 2020 15:14:15 +0100 Subject: [PATCH 2/3] Retry logic for getting tip data --- utils/lndJobs.js | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/utils/lndJobs.js b/utils/lndJobs.js index 97f5062f..32267532 100644 --- a/utils/lndJobs.js +++ b/utils/lndJobs.js @@ -2,11 +2,13 @@ * @prettier */ const Logger = require('winston') +const { wait } = require('./helpers') const Key = require('../services/gunDB/contact-api/key') const { getUser } = require('../services/gunDB/Mediator') const LightningServices = require('./lightningServices') const ERROR_TRIES_THRESHOLD = 3 +const ERROR_TRIES_DELAY = 500 const INVOICE_STATE = { OPEN: 'OPEN', SETTLED: 'SETTLED', @@ -113,18 +115,33 @@ const _updateTipData = (invoiceHash, data) => } }) -const _getTipData = invoiceHash => +const _getTipData = (invoiceHash, tries = 0) => new Promise((resolve, reject) => { + if (tries >= ERROR_TRIES_THRESHOLD) { + reject(new Error('Malformed data')) + return + } + getUser() .get(Key.TIPS_PAYMENT_STATUS) .get(invoiceHash) - .once(tip => { - if (tip === undefined) { - reject(new Error('Malformed data')) - return - } + .once(async tip => { + try { + if (tip === undefined) { + await wait(ERROR_TRIES_DELAY) + const tip = await _getTipData(invoiceHash, tries + 1) - resolve(tip) + if (tip) { + resolve(tip) + } + + return + } + + resolve(tip) + } catch (err) { + reject(err) + } }) }) From d92b7750e38420cfec5ed2fd1c4a2f914078c727 Mon Sep 17 00:00:00 2001 From: emad-salah Date: Sat, 17 Oct 2020 15:15:36 +0100 Subject: [PATCH 3/3] Better error handling for tips --- utils/lndJobs.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utils/lndJobs.js b/utils/lndJobs.js index 32267532..c7a69524 100644 --- a/utils/lndJobs.js +++ b/utils/lndJobs.js @@ -133,8 +133,10 @@ const _getTipData = (invoiceHash, tries = 0) => if (tip) { resolve(tip) + return } + reject(new Error('Malformed data')) return }