Merge pull request #226 from shocknet/bug/tip-retry

Bug/tip retry
This commit is contained in:
CapDog 2020-10-22 16:22:32 -05:00 committed by GitHub
commit 727290584c
2 changed files with 34 additions and 8 deletions

View file

@ -19,6 +19,13 @@ const asyncFilter = async (arr, cb) => {
return arr.filter((_, i) => results[i]) 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 = { module.exports = {
asyncFilter asyncFilter,
wait
} }

View file

@ -2,11 +2,13 @@
* @prettier * @prettier
*/ */
const Logger = require('winston') const Logger = require('winston')
const { wait } = require('./helpers')
const Key = require('../services/gunDB/contact-api/key') const Key = require('../services/gunDB/contact-api/key')
const { getUser } = require('../services/gunDB/Mediator') const { getUser } = require('../services/gunDB/Mediator')
const LightningServices = require('./lightningServices') const LightningServices = require('./lightningServices')
const ERROR_TRIES_THRESHOLD = 3 const ERROR_TRIES_THRESHOLD = 3
const ERROR_TRIES_DELAY = 500
const INVOICE_STATE = { const INVOICE_STATE = {
OPEN: 'OPEN', OPEN: 'OPEN',
SETTLED: 'SETTLED', SETTLED: 'SETTLED',
@ -113,18 +115,35 @@ const _updateTipData = (invoiceHash, data) =>
} }
}) })
const _getTipData = invoiceHash => const _getTipData = (invoiceHash, tries = 0) =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
if (tries >= ERROR_TRIES_THRESHOLD) {
reject(new Error('Malformed data'))
return
}
getUser() getUser()
.get(Key.TIPS_PAYMENT_STATUS) .get(Key.TIPS_PAYMENT_STATUS)
.get(invoiceHash) .get(invoiceHash)
.once(tip => { .once(async tip => {
if (tip === undefined) { try {
reject(new Error('Malformed data')) if (tip === undefined) {
return await wait(ERROR_TRIES_DELAY)
} const tip = await _getTipData(invoiceHash, tries + 1)
resolve(tip) if (tip) {
resolve(tip)
return
}
reject(new Error('Malformed data'))
return
}
resolve(tip)
} catch (err) {
reject(err)
}
}) })
}) })