2021-12-29 23:08:41 +00:00
import request from 'request-promise' ;
import { Logger , LoggerService } from '../../utils/logger.js' ;
import { Common , CommonService } from '../../utils/common.js' ;
let options = null ;
const logger : LoggerService = Logger ;
const common : CommonService = Common ;
2023-05-17 02:41:50 +00: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 } ) ; }
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/listPeerChannels' ;
2023-10-18 02:22:08 +00:00
request . post ( options ) . then ( ( body ) = > {
2023-05-17 02:41:50 +00:00
body ? . map ( ( channel ) = > {
if ( ! channel . alias || channel . alias === '' ) { channel . alias = channel . peer_id . substring ( 0 , 20 ) ; }
const local = channel . to_us_msat || 0 ;
2023-05-29 19:27:28 +00:00
const remote = ( channel . total_msat - local ) || 0 ;
2023-05-17 02:41:50 +00:00
const total = channel . total_msat || 0 ;
2023-05-29 19:27:28 +00:00
channel . to_them_msat = remote ;
2023-05-17 02:41:50 +00:00
channel . balancedness = ( total === 0 ) ? 1 : ( 1 - Math . abs ( ( local - remote ) / total ) ) . toFixed ( 3 ) ;
return channel ;
} ) ;
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Peer Channels List Received' , data : body } ) ;
res . status ( 200 ) . json ( body ) ;
} ) . 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 23:08:41 +00:00
export const listChannels = ( req , res , next ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Getting Channels..' } ) ;
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
2023-05-29 19:27:28 +00:00
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/listPeerChannels' ;
2023-10-18 02:22:08 +00:00
request . post ( options ) . then ( ( body ) = > {
2022-08-17 22:48:04 +00:00
body ? . map ( ( channel ) = > {
2023-08-15 18:45:54 +00:00
if ( ! channel . alias || channel . alias === '' ) { channel . alias = channel . channel_id . substring ( 0 , 20 ) ; }
2023-05-29 19:27:28 +00:00
const local = channel . to_us_msat || 0 ;
const remote = ( channel . total_msat - local ) || 0 ;
const total = channel . total_msat || 0 ;
channel . to_them_msat = remote ;
2021-12-29 23:08:41 +00:00
channel . balancedness = ( total === 0 ) ? 1 : ( 1 - Math . abs ( ( local - remote ) / total ) ) . toFixed ( 3 ) ;
return channel ;
} ) ;
2022-01-16 20:55:50 +00:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Channels List Received' , data : body } ) ;
2021-12-29 23:08:41 +00:00
res . status ( 200 ) . json ( body ) ;
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'List Channels Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;
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 } ) ; }
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/openChannel' ;
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 20:55:50 +00:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Channel Opened' , data : body } ) ;
2021-12-29 23:08:41 +00: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 } ) ; }
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/setChannelFee' ;
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 20:55:50 +00:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Updated Channel Policy' , data : body } ) ;
2021-12-29 23:08:41 +00: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 } ) ; }
const unilateralTimeoutQuery = req . query . force ? '?unilateralTimeout=1' : '' ;
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/closeChannel/' + req . params . channelId + unilateralTimeoutQuery ;
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Closing Channel' , data : options.url } ) ;
request . delete ( options ) . then ( ( body ) = > {
2022-01-16 20:55:50 +00:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Channel Closed' , data : body } ) ;
2021-12-29 23:08:41 +00: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 getLocalRemoteBalance = ( req , res , next ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Getting Local & Remote Balances..' } ) ;
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/localremotebal' ;
2023-10-18 02:22:08 +00:00
request . post ( options ) . then ( ( body ) = > {
2021-12-29 23:08:41 +00:00
if ( ! body . localBalance ) { body . localBalance = 0 ; }
if ( ! body . remoteBalance ) { body . remoteBalance = 0 ; }
2022-01-16 20:55:50 +00:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Local Remote Balance Received' , data : body } ) ;
2021-12-29 23:08:41 +00:00
res . status ( 200 ) . json ( body ) ;
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'Local Remote Balance Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;
export const listForwards = ( req , res , next ) = > {
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 } ) ; }
2022-05-25 00:54:57 +00:00
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/listForwards?status=' + ( req . query . status ? req . query . status : 'settled' ) ;
2021-12-29 23:08:41 +00:00
request . get ( options ) . then ( ( body ) = > {
2022-08-11 06:42:04 +00:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Forwarding History Received For Status ' + req . query . status , data : body } ) ;
2021-12-29 23:08:41 +00:00
res . status ( 200 ) . json ( body ) ;
} ) . 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 21:24:37 +00: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 } ) ; }
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/funderUpdate' ;
if ( req . body && req . body . policy ) {
options . body = req . body ;
}
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 } ) ;
2022-08-17 22:48:04 +00:00
body . channel_fee_max_base_msat = ( body . channel_fee_max_base_msat && typeof body . channel_fee_max_base_msat === 'string' && body . channel_fee_max_base_msat . includes ( 'msat' ) ) ? + body . channel_fee_max_base_msat ? . replace ( 'msat' , '' ) : body . channel_fee_max_base_msat ;
body . lease_fee_base_msat = ( body . lease_fee_base_msat && typeof body . lease_fee_base_msat === 'string' && body . lease_fee_base_msat . includes ( 'msat' ) ) ? + body . lease_fee_base_msat ? . replace ( 'msat' , '' ) : body . channel_fee_max_base_msat ;
2022-05-13 21:24:37 +00:00
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 } ) ;
} ) ;
} ;
2022-05-20 22:07:58 +00:00
export const listForwardsPaginated = ( req , res , next ) = > {
logger . log ( { selectedNode : req.session.selectedNode , level : 'INFO' , fileName : 'Channels' , msg : 'Getting Paginated List Forwards..' } ) ;
options = common . getOptions ( req ) ;
if ( options . error ) { return res . status ( options . statusCode ) . json ( { message : options.message , error : options.error } ) ; }
2022-08-07 23:43:17 +00:00
const { status , maxLen , offset } = req . query ;
2022-05-24 19:52:10 +00:00
let queryStr = '?status=' + ( status ? status : 'settled' ) ;
queryStr = queryStr + '&maxLen=' + ( maxLen ? maxLen : '10' ) ;
queryStr = queryStr + '&offset=' + ( offset ? offset : '0' ) ;
2022-05-24 00:57:22 +00:00
options . url = req . session . selectedNode . ln_server_url + '/v1/channel/listForwardsPaginated' + queryStr ;
2022-05-20 22:07:58 +00:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Paginated Forwarding History url' + options . url } ) ;
request . get ( options ) . then ( ( body ) = > {
2022-08-11 06:42:04 +00:00
logger . log ( { selectedNode : req.session.selectedNode , level : 'DEBUG' , fileName : 'Channels' , msg : 'Paginated Forwarding History Received For Status ' + req . query . status , data : body } ) ;
2022-05-20 22:07:58 +00:00
res . status ( 200 ) . json ( body ) ;
} ) . catch ( ( errRes ) = > {
const err = common . handleError ( errRes , 'Channels' , 'Paginated Forwarding History Error' , req . session . selectedNode ) ;
return res . status ( err . statusCode ) . json ( { message : err.message , error : err.error } ) ;
} ) ;
} ;