2021-12-29 18:08:41 -05:00
import request from 'request-promise' ;
import { Logger , LoggerService } from '../../utils/logger.js' ;
import { Common , CommonService } from '../../utils/common.js' ;
2023-12-05 20:32:05 -08:00
import { getAlias } from './network.js' ;
2021-12-29 18:08:41 -05:00
let options = null ;
const logger : LoggerService = Logger ;
const common : CommonService = Common ;
2023-05-16 19:41:50 -07:00
export const listPeerChannels = ( req , res , next ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Getting Peer Channels..' } ) ;
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
2024-06-10 12:40:37 -07:00
options . url = req . session . selectedNode . settings . lnServerUrl + '/v1/listpeerchannels' ;
2023-12-05 20:32:05 -08:00
request . post ( options ) . then ( ( body ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Peer Channels List Received' , data : body.channels } ) ;
return Promise . all ( body . channels ? . map ( ( channel ) = > {
channel . to_them_msat = channel . total_msat - channel . to_us_msat ;
channel . balancedness = ( channel . total_msat === 0 ) ? 1 : ( 1 - Math . abs ( ( channel . to_us_msat - ( channel . total_msat - channel . to_us_msat ) ) / channel . total_msat ) ) . toFixed ( 3 ) ;
return getAlias ( req . session . selectedNode , channel , 'peer_id' ) ;
} ) ) . then ( ( values ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Peer Channels List With Aliases Received' , data : body.channels } ) ;
return res . status ( 200 ) . json ( body . channels || [ ] ) ;
2023-05-16 19:41:50 -07:00
} ) ;
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'List Peer Channels Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;
2021-12-29 18:08:41 -05:00
export const openChannel = ( req , res , next ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Opening Channel..' } ) ;
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
2024-06-10 12:40:37 -07:00
options . url = req . session . selectedNode . settings . lnServerUrl + '/v1/fundchannel' ;
2021-12-29 18:08:41 -05:00
options . body = req . body ;
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Open Channel Options' , data : options.body } ) ;
request . post ( options ) . then ( ( body ) = > {
2022-01-16 15:55:50 -05:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Channel Opened' , data : body } ) ;
2021-12-29 18:08:41 -05:00
res . status ( 201 ) . json ( body ) ;
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'Open Channel Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;
export const setChannelFee = ( req , res , next ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Setting Channel Fee..' } ) ;
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
2024-06-10 12:40:37 -07:00
options . url = req . session . selectedNode . settings . lnServerUrl + '/v1/setchannel' ;
2021-12-29 18:08:41 -05:00
options . body = req . body ;
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Update Channel Policy Options' , data : options.body } ) ;
request . post ( options ) . then ( ( body ) = > {
2022-01-16 15:55:50 -05:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Updated Channel Policy' , data : body } ) ;
2021-12-29 18:08:41 -05:00
res . status ( 201 ) . json ( body ) ;
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'Update Channel Policy Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;
export const closeChannel = ( req , res , next ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Closing Channel..' } ) ;
req . setTimeout ( 60000 * 10 ) ; // timeout 10 mins
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
2024-06-10 12:40:37 -07:00
options . url = req . session . selectedNode . settings . lnServerUrl + '/v1/close' ;
2023-12-05 20:32:05 -08:00
options . body = req . body ;
2021-12-29 18:08:41 -05:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Closing Channel' , data : options.url } ) ;
2023-12-05 20:32:05 -08:00
request . post ( options ) . then ( ( body ) = > {
2022-01-16 15:55:50 -05:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Channel Closed' , data : body } ) ;
2021-12-29 18:08:41 -05:00
res . status ( 204 ) . json ( body ) ;
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'Close Channel Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;
export const listForwards = ( req , res , next ) = > {
2024-06-10 12:40:37 -07:00
const { status } = req . body ;
2021-12-29 18:08:41 -05:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Getting Channel List Forwards..' } ) ;
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
2024-06-10 12:40:37 -07:00
options . url = req . session . selectedNode . settings . lnServerUrl + '/v1/listforwards' ;
2023-12-05 20:32:05 -08:00
options . body = req . body ;
request . post ( options ) . then ( ( body ) = > {
2024-06-10 12:40:37 -07:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Forwarding History Received For Status ' + status , data : body } ) ;
body . forwards = ! body . forwards ? [ ] : ( status === 'failed' || status === 'local_failed' ) ? body . forwards . slice ( Math . max ( 0 , body . forwards . length - 1000 ) , Math . max ( 1000 , body . forwards . length ) ) . reverse ( ) : body . forwards . reverse ( ) ;
2023-12-05 20:32:05 -08:00
res . status ( 200 ) . json ( body . forwards ) ;
2021-12-29 18:08:41 -05:00
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'Forwarding History Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;
2022-05-13 17:24:37 -04:00
export const funderUpdatePolicy = ( req , res , next ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Getting or Updating Funder Policy..' } ) ;
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
2024-06-10 12:40:37 -07:00
options . url = req . session . selectedNode . settings . lnServerUrl + '/v1/funderupdate' ;
2023-12-05 20:32:05 -08:00
options . body = req . body ;
2022-05-13 17:24:37 -04:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Funder Update Body' , data : options.body } ) ;
request . post ( options ) . then ( ( body ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Funder Policy Received' , data : body } ) ;
res . status ( 200 ) . json ( body ) ;
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'Funder Policy Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;