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