error manager
This commit is contained in:
parent
48c7d6d3cc
commit
90d67f0c72
1 changed files with 142 additions and 0 deletions
142
utils/lightningServices/errors.js
Normal file
142
utils/lightningServices/errors.js
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
|
||||
const LightningServices = require('./lightning-services')
|
||||
|
||||
/**
|
||||
* @typedef {{
|
||||
* code:number,
|
||||
* details:string,
|
||||
* message:string
|
||||
* }} LNDError
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {(err:LNDError,response:object)=>void} HealthListener
|
||||
*/
|
||||
|
||||
class LNDErrorManager {
|
||||
|
||||
/**
|
||||
* @type {boolean}
|
||||
*/
|
||||
_isCheckingHealth = false
|
||||
|
||||
/**
|
||||
* @type {HealthListener[]}
|
||||
*/
|
||||
_healthListeners = []
|
||||
|
||||
getAvailableService(){
|
||||
|
||||
//require('shock-common').Utils.makePromise((res, rej) => ...)
|
||||
return new Promise((res,rej)=>{
|
||||
if(!this._isCheckingHealth){
|
||||
this._isCheckingHealth = true
|
||||
this.getInfo()
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param {LNDError} err
|
||||
* @param {object} response
|
||||
*/
|
||||
const listener = (err,response)=>{
|
||||
if (err) {
|
||||
if (err.code === 12) {
|
||||
res({
|
||||
service: 'walletUnlocker',
|
||||
message: 'Wallet locked',
|
||||
code: err.code,
|
||||
walletStatus: 'locked',
|
||||
success: true
|
||||
})
|
||||
} else if (err.code === 14) {
|
||||
rej({
|
||||
service: 'unknown',
|
||||
message:
|
||||
"Failed to connect to LND server, make sure it's up and running.",
|
||||
code: 14,
|
||||
walletStatus: 'unknown',
|
||||
success: false
|
||||
})
|
||||
} else {
|
||||
rej({
|
||||
service: 'lightning',
|
||||
message: this.sanitizeLNDError(err),
|
||||
code: err.code,
|
||||
walletStatus: 'unlocked',
|
||||
success: false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
res({
|
||||
service: 'lightning',
|
||||
message: response,
|
||||
code: null,
|
||||
walletStatus: 'unlocked',
|
||||
success: true
|
||||
})
|
||||
|
||||
}
|
||||
this._healthListeners.push(listener)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
//private
|
||||
getInfo(){
|
||||
const { lightning } = LightningServices.services
|
||||
/**
|
||||
*
|
||||
* @param {LNDError} err
|
||||
* @param {object} response
|
||||
*/
|
||||
const callback = (err, response) => {
|
||||
this._healthListeners.forEach(l =>{
|
||||
l(err,response)
|
||||
})
|
||||
this._healthListeners.length = 0
|
||||
this._isCheckingHealth = false
|
||||
}
|
||||
const deadline = Date.now() + 2000
|
||||
lightning.getInfo({},{deadline}, callback)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {LNDError} e
|
||||
*/
|
||||
handleError(e){
|
||||
return this.sanitizeLNDError(e)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {LNDError} e
|
||||
*/
|
||||
// eslint-disable-next-line
|
||||
sanitizeLNDError(e){
|
||||
let eMessage = ''
|
||||
if(typeof e === 'string'){
|
||||
eMessage = e
|
||||
}else if(e.details){
|
||||
eMessage = e.details
|
||||
} else if(e.message){
|
||||
eMessage = e.message
|
||||
}
|
||||
if (eMessage.toLowerCase().includes('unknown')) {
|
||||
const splittedMessage = eMessage.split('UNKNOWN: ')
|
||||
return splittedMessage.length > 1
|
||||
? splittedMessage.slice(1).join('')
|
||||
: splittedMessage.join('')
|
||||
}
|
||||
if(eMessage === ''){
|
||||
return 'unknown LND error'
|
||||
}
|
||||
return eMessage
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
const lndErrorManager = new LNDErrorManager()
|
||||
|
||||
module.exports = lndErrorManager
|
||||
Loading…
Add table
Add a link
Reference in a new issue