commit
727290584c
2 changed files with 34 additions and 8 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue