diff --git a/backend/controllers/cln/channels.js b/backend/controllers/cln/channels.js index 15d7ae70..6f652bdd 100644 --- a/backend/controllers/cln/channels.js +++ b/backend/controllers/cln/channels.js @@ -11,7 +11,7 @@ export const listPeerChannels = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listpeerchannels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listpeerchannels'; 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) => { @@ -33,7 +33,7 @@ export const openChannel = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/fundchannel'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/fundchannel'; 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) => { @@ -50,7 +50,7 @@ export const setChannelFee = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/setchannel'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/setchannel'; 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) => { @@ -68,7 +68,7 @@ export const closeChannel = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/close'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/close'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Closing Channel', data: options.url }); request.post(options).then((body) => { @@ -86,7 +86,7 @@ export const listForwards = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listforwards'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listforwards'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Forwarding History Received For Status ' + status, data: body }); @@ -103,7 +103,7 @@ export const funderUpdatePolicy = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/funderupdate'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/funderupdate'; 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) => { diff --git a/backend/controllers/cln/getInfo.js b/backend/controllers/cln/getInfo.js index 9b917173..c6bd8d9c 100644 --- a/backend/controllers/cln/getInfo.js +++ b/backend/controllers/cln/getInfo.js @@ -16,7 +16,7 @@ export const getInfo = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/getinfo'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/getinfo'; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Selected Node ' + req.session.selectedNode.lnNode }); logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Calling Info from Core Lightning server url ' + options.url }); if (!options.headers || !options.headers.rune) { diff --git a/backend/controllers/cln/invoices.js b/backend/controllers/cln/invoices.js index 2f26a949..81aaf0a0 100644 --- a/backend/controllers/cln/invoices.js +++ b/backend/controllers/cln/invoices.js @@ -10,7 +10,7 @@ export const deleteExpiredInvoice = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/delexpiredinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/delexpiredinvoice'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Invoices Deleted', data: body }); @@ -26,7 +26,7 @@ export const listInvoices = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listinvoices'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listinvoices'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Invoice', msg: 'Invoices List URL', data: options.url }); request.post(options).then((body) => { @@ -43,7 +43,7 @@ export const addInvoice = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/invoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/invoice'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Invoice Created', data: body }); diff --git a/backend/controllers/cln/network.js b/backend/controllers/cln/network.js index 81c72d29..44aaa31d 100644 --- a/backend/controllers/cln/network.js +++ b/backend/controllers/cln/network.js @@ -10,7 +10,7 @@ export const getRoute = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/getroute'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/getroute'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Network Routes Received', data: body }); @@ -29,7 +29,7 @@ export const listChannels = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listchannels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listchannels'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Channel Lookup Finished', data: body }); @@ -46,7 +46,7 @@ export const feeRates = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/feerates'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/feerates'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Network Fee Rates Received for ' + style, data: body }); @@ -64,7 +64,7 @@ export const listNodes = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listnodes'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listnodes'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Network', msg: 'List Nodes URL' + options.url }); request.post(options).then((body) => { @@ -80,7 +80,7 @@ export const listNodes = (req, res, next) => { }); }; export const getAlias = (selNode, peer, id) => { - options.url = selNode.settings.lnServerUrl + '/v1/listnodes'; + options.url = selNode.Settings.lnServerUrl + '/v1/listnodes'; if (!peer[id]) { logger.log({ selectedNode: selNode, level: 'ERROR', fileName: 'Network', msg: 'Empty Peer ID' }); peer.alias = ''; diff --git a/backend/controllers/cln/offers.js b/backend/controllers/cln/offers.js index f427d538..2822a2e4 100644 --- a/backend/controllers/cln/offers.js +++ b/backend/controllers/cln/offers.js @@ -34,7 +34,7 @@ export const listOffers = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listoffers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listoffers'; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Offers', msg: 'Offers List URL', data: options.url }); request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Offers List Received', data: body }); @@ -50,7 +50,7 @@ export const createOffer = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/offer'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/offer'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Offer Created', data: body }); @@ -66,7 +66,7 @@ export const fetchOfferInvoice = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/fetchinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/fetchinvoice'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Offers', msg: 'Offer Invoice Body', data: options.body }); request.post(options).then((body) => { @@ -83,7 +83,7 @@ export const disableOffer = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/disableOffer'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/disableOffer'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Offer Disabled', data: body }); diff --git a/backend/controllers/cln/onchain.js b/backend/controllers/cln/onchain.js index f4615442..176cdac1 100644 --- a/backend/controllers/cln/onchain.js +++ b/backend/controllers/cln/onchain.js @@ -10,7 +10,7 @@ export const getNewAddress = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/newaddr'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/newaddr'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'New Address Generated', data: body }); @@ -26,7 +26,7 @@ export const onChainWithdraw = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/withdraw'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/withdraw'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'OnChain', msg: 'OnChain Withdraw Options', data: options.body }); request.post(options).then((body) => { @@ -43,7 +43,7 @@ export const getUTXOs = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listfunds'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listfunds'; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Funds List Received', data: body }); // Local Remote Balance Calculation diff --git a/backend/controllers/cln/payments.js b/backend/controllers/cln/payments.js index 6a756a00..5e2c0cab 100644 --- a/backend/controllers/cln/payments.js +++ b/backend/controllers/cln/payments.js @@ -8,7 +8,7 @@ const logger = Logger; const common = Common; const databaseService = Database; export const getMemo = (selNode, payment) => { - options.url = selNode.settings.lnServerUrl + '/v1/decode'; + options.url = selNode.Settings.lnServerUrl + '/v1/decode'; options.body = { string: payment.bolt11 }; return request.post(options).then((res) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Payments', msg: 'Payment Decode Received', data: res }); @@ -81,7 +81,7 @@ export const listPayments = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listsendpays'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listsendpays'; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'Payment List Received', data: body.payments }); body.payments = body.payments && body.payments.length && body.payments.length > 0 ? groupBy(body.payments) : []; @@ -103,7 +103,7 @@ export const postPayment = (req, res, next) => { const options_body = JSON.parse(JSON.stringify(req.body)); if (paymentType === 'KEYSEND') { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Keysend Payment..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/keysend'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/keysend'; delete options_body.uiMessage; delete options_body.fromDialog; delete options_body.paymentType; @@ -144,7 +144,7 @@ export const postPayment = (req, res, next) => { delete options_body.pubkey; delete options_body.saveToDB; options.body = options_body; - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/pay'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/pay'; } request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Payment Sent', data: body }); diff --git a/backend/controllers/cln/peers.js b/backend/controllers/cln/peers.js index dba0c304..61ab3651 100644 --- a/backend/controllers/cln/peers.js +++ b/backend/controllers/cln/peers.js @@ -11,7 +11,7 @@ export const getPeers = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listpeers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listpeers'; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peers List Received', data: body }); const peers = !body.peers ? [] : body.peers; @@ -30,12 +30,12 @@ export const postPeer = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/connect'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/connect'; options.body = req.body; request.post(options).then((connectRes) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peer Connected', data: connectRes }); const listOptions = common.getOptions(req); - listOptions.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listpeers'; + listOptions.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listpeers'; request.post(listOptions).then((listPeersRes) => { const peers = listPeersRes && listPeersRes.peers ? common.newestOnTop(listPeersRes.peers, 'id', connectRes.id) : []; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Peers List after Connect Received', data: peers }); @@ -55,7 +55,7 @@ export const deletePeer = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/disconnect'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/disconnect'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Peer Disconnected', data: body }); diff --git a/backend/controllers/cln/utility.js b/backend/controllers/cln/utility.js index 5a10dcdc..df071fb7 100644 --- a/backend/controllers/cln/utility.js +++ b/backend/controllers/cln/utility.js @@ -10,7 +10,7 @@ export const decodePayment = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/decode'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/decode'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Payment Decoded', data: body }); @@ -26,7 +26,7 @@ export const signMessage = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/signmessage'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/signmessage'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Message', msg: 'Message Signed', data: body }); @@ -42,7 +42,7 @@ export const verifyMessage = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/checkmessage'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/checkmessage'; options.body = req.body; request.post(options, (error, response, body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Message', msg: 'Message Verified', data: body }); @@ -58,7 +58,7 @@ export const listConfigs = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listconfigs'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listconfigs'; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Utility', msg: 'List Configs Received', data: body }); res.status(200).json(body); diff --git a/backend/controllers/cln/webSocketClient.js b/backend/controllers/cln/webSocketClient.js index 5749ff92..11da4464 100644 --- a/backend/controllers/cln/webSocketClient.js +++ b/backend/controllers/cln/webSocketClient.js @@ -27,14 +27,14 @@ export class CLWebSocketClient { try { const clientExists = this.webSocketClients.find((wsc) => wsc.selectedNode.index === selectedNode.index); if (!clientExists) { - if (selectedNode.settings.lnServerUrl) { + if (selectedNode.Settings.lnServerUrl) { const newWebSocketClient = { selectedNode: selectedNode, reConnect: true, webSocketClient: null }; this.connectWithClient(newWebSocketClient); this.webSocketClients.push(newWebSocketClient); } } else { - if ((!clientExists.webSocketClient || !clientExists.webSocketClient.connected) && selectedNode.settings.lnServerUrl) { + if ((!clientExists.webSocketClient || !clientExists.webSocketClient.connected) && selectedNode.Settings.lnServerUrl) { clientExists.reConnect = true; this.connectWithClient(clientExists); } @@ -47,11 +47,11 @@ export class CLWebSocketClient { this.connectWithClient = (clWsClt) => { this.logger.log({ selectedNode: clWsClt.selectedNode, level: 'INFO', fileName: 'CLWebSocket', msg: 'Connecting to the Core Lightning\'s Websocket Server..' }); try { - if (!clWsClt.selectedNode.authentication.runeValue) { - clWsClt.selectedNode.authentication.runeValue = this.common.getRuneValue(clWsClt.selectedNode.authentication.runePath); + if (!clWsClt.selectedNode.Authentication.runeValue) { + clWsClt.selectedNode.Authentication.runeValue = this.common.getRuneValue(clWsClt.selectedNode.Authentication.runePath); } - clWsClt.webSocketClient = socketIOClient(clWsClt.selectedNode.settings.lnServerUrl, { - extraHeaders: { rune: clWsClt.selectedNode.authentication.runeValue }, + clWsClt.webSocketClient = socketIOClient(clWsClt.selectedNode.Settings.lnServerUrl, { + extraHeaders: { rune: clWsClt.selectedNode.Authentication.runeValue }, transports: ['websocket'], secure: true, rejectUnauthorized: false diff --git a/backend/controllers/eclair/channels.js b/backend/controllers/eclair/channels.js index e4bbfca8..480c576f 100644 --- a/backend/controllers/eclair/channels.js +++ b/backend/controllers/eclair/channels.js @@ -27,7 +27,7 @@ export const simplifyAllChannels = (selNode, channels) => { }); }); channelNodeIds = channelNodeIds.substring(1); - options.url = selNode.settings.lnServerUrl + '/nodes'; + options.url = selNode.Settings.lnServerUrl + '/nodes'; options.form = { nodeIds: channelNodeIds }; logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Channels', msg: 'Node Ids to find alias', data: channelNodeIds }); return request.post(options).then((nodes) => { @@ -47,7 +47,7 @@ export const getChannels = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/channels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/channels'; options.form = {}; if (req.query && req.query.nodeId) { options.form = req.query; @@ -83,7 +83,7 @@ export const getChannelStats = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/channelstats'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/channelstats'; const today = new Date(Date.now()); const tillToday = (Math.round(today.getTime() / 1000)).toString(); const fromLastMonth = (Math.round(new Date(today.getFullYear(), today.getMonth() - 1, today.getDate() + 1, 0, 0, 0).getTime() / 1000)).toString(); @@ -105,7 +105,7 @@ export const openChannel = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/open'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/open'; options.form = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Open Channel Params', data: options.form }); request.post(options).then((body) => { @@ -122,7 +122,7 @@ export const updateChannelRelayFee = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/updaterelayfee'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/updaterelayfee'; options.form = req.query; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Update Relay Fee Params', data: options.form }); request.post(options).then((body) => { @@ -140,11 +140,11 @@ export const closeChannel = (req, res, next) => { } if (req.query.force !== 'true') { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Closing Channel..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/close'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/close'; } else { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Force Closing Channel..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/forceclose'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/forceclose'; } options.form = { channelId: req.query.channelId }; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Close URL', data: options.url }); diff --git a/backend/controllers/eclair/fees.js b/backend/controllers/eclair/fees.js index 660ad5af..303daa89 100644 --- a/backend/controllers/eclair/fees.js +++ b/backend/controllers/eclair/fees.js @@ -99,7 +99,7 @@ export const getFees = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/audit'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/audit'; const today = new Date(Date.now()); const tillToday = (Math.round(today.getTime() / 1000)).toString(); const fromLastMonth = (Math.round(new Date(today.getFullYear(), today.getMonth() - 1, today.getDate() + 1, 0, 0, 0).getTime() / 1000)).toString(); @@ -127,7 +127,7 @@ export const getPayments = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/audit'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/audit'; const tillToday = (Math.round(new Date(Date.now()).getTime() / 1000)).toString(); options.form = { from: 0, to: tillToday }; if (common.read_dummy_data) { diff --git a/backend/controllers/eclair/getInfo.js b/backend/controllers/eclair/getInfo.js index eb2ccf8b..3e34057b 100644 --- a/backend/controllers/eclair/getInfo.js +++ b/backend/controllers/eclair/getInfo.js @@ -16,7 +16,7 @@ export const getInfo = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/getinfo'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/getinfo'; options.form = {}; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Selected Node ' + req.session.selectedNode.lnNode }); logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Calling Info from Eclair server url ' + options.url }); diff --git a/backend/controllers/eclair/invoices.js b/backend/controllers/eclair/invoices.js index e60680f0..8d7a0f8c 100644 --- a/backend/controllers/eclair/invoices.js +++ b/backend/controllers/eclair/invoices.js @@ -39,7 +39,7 @@ export const getInvoice = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/getinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/getinvoice'; options.form = { paymentHash: req.params.paymentHash }; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Invoice Found', data: body }); @@ -55,8 +55,8 @@ export const getInvoice = (req, res, next) => { }; export const listPendingInvoicesRequestCall = (selectedNode) => { logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'List Pending Invoices..' }); - options = selectedNode.authentication.options; - options.url = selectedNode.settings.lnServerUrl + '/listpendinginvoices'; + options = selectedNode.Authentication.options; + options.url = selectedNode.Settings.lnServerUrl + '/listpendinginvoices'; options.form = { from: 0, to: (Math.round(new Date(Date.now()).getTime() / 1000)).toString() }; return new Promise((resolve, reject) => { request.post(options).then((pendingInvoicesResponse) => { @@ -76,16 +76,16 @@ export const listInvoices = (req, res, next) => { const tillToday = (Math.round(new Date(Date.now()).getTime() / 1000)).toString(); options.form = { from: 0, to: tillToday }; const options1 = JSON.parse(JSON.stringify(options)); - options1.url = req.session.selectedNode.settings.lnServerUrl + '/listinvoices'; + options1.url = req.session.selectedNode.Settings.lnServerUrl + '/listinvoices'; options1.form = { from: 0, to: tillToday }; const options2 = JSON.parse(JSON.stringify(options)); - options2.url = req.session.selectedNode.settings.lnServerUrl + '/listpendinginvoices'; + options2.url = req.session.selectedNode.Settings.lnServerUrl + '/listpendinginvoices'; options2.form = { from: 0, to: tillToday }; if (common.read_dummy_data) { return common.getDummyData('Invoices', req.session.selectedNode.lnImplementation).then((body) => { const invoices = (!body[0] || body[0].length <= 0) ? [] : body[0]; pendingInvoices = (!body[1] || body[1].length <= 0) ? [] : body[1]; - return Promise.all(invoices?.map((invoice) => getReceivedPaymentInfo(req.session.selectedNode.settings.lnServerUrl, invoice))). + return Promise.all(invoices?.map((invoice) => getReceivedPaymentInfo(req.session.selectedNode.Settings.lnServerUrl, invoice))). then((values) => res.status(200).json(invoices)); }); } @@ -96,7 +96,7 @@ export const listInvoices = (req, res, next) => { const invoices = (!body[0] || body[0].length <= 0) ? [] : body[0]; pendingInvoices = (!body[1] || body[1].length <= 0) ? [] : body[1]; if (invoices && invoices.length > 0) { - return Promise.all(invoices?.map((invoice) => getReceivedPaymentInfo(req.session.selectedNode.settings.lnServerUrl, invoice))). + return Promise.all(invoices?.map((invoice) => getReceivedPaymentInfo(req.session.selectedNode.Settings.lnServerUrl, invoice))). then((values) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Sorted Invoices List Received', data: invoices }); return res.status(200).json(invoices); @@ -119,8 +119,8 @@ export const listInvoices = (req, res, next) => { }; export const createInvoiceRequestCall = (selectedNode, description, amount) => { logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Creating Invoice..' }); - options = selectedNode.authentication.options; - options.url = selectedNode.settings.lnServerUrl + '/createinvoice'; + options = selectedNode.Authentication.options; + options.url = selectedNode.Settings.lnServerUrl + '/createinvoice'; options.form = { description: description, amountMsat: amount }; return new Promise((resolve, reject) => { request.post(options).then((invResponse) => { diff --git a/backend/controllers/eclair/network.js b/backend/controllers/eclair/network.js index c9924fd4..504c1061 100644 --- a/backend/controllers/eclair/network.js +++ b/backend/controllers/eclair/network.js @@ -10,7 +10,7 @@ export const getNodes = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/nodes'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/nodes'; options.form = { nodeIds: req.params.id }; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Node Lookup Finished', data: body }); @@ -22,8 +22,8 @@ export const getNodes = (req, res, next) => { }; export const findRouteBetweenNodesRequestCall = (selectedNode, amountMsat, sourceNodeId, targetNodeId, ignoreNodeIds = [], format = 'shortChannelId') => { logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'Network', msg: 'Find Route Between Nodes..' }); - options = selectedNode.authentication.options; - options.url = selectedNode.settings.lnServerUrl + '/findroutebetweennodes'; + options = selectedNode.Authentication.options; + options.url = selectedNode.Settings.lnServerUrl + '/findroutebetweennodes'; options.form = { amountMsat: amountMsat, sourceNodeId: sourceNodeId, targetNodeId: targetNodeId, ignoreNodeIds: ignoreNodeIds, format: format }; return new Promise((resolve, reject) => { request.post(options).then((body) => { diff --git a/backend/controllers/eclair/onchain.js b/backend/controllers/eclair/onchain.js index 858e3e0e..6d78cd23 100644 --- a/backend/controllers/eclair/onchain.js +++ b/backend/controllers/eclair/onchain.js @@ -21,7 +21,7 @@ export const getNewAddress = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/getnewaddress'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/getnewaddress'; options.form = {}; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'New Address Generated', data: body }); @@ -37,7 +37,7 @@ export const getBalance = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/onchainbalance'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/onchainbalance'; options.form = {}; if (common.read_dummy_data) { common.getDummyData('OnChainBalance', req.session.selectedNode.lnImplementation).then((data) => { res.status(200).json(arrangeBalances(data)); }); @@ -59,7 +59,7 @@ export const getTransactions = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/onchaintransactions'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/onchaintransactions'; options.form = { count: req.query.count, skip: req.query.skip @@ -80,7 +80,7 @@ export const sendFunds = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/sendonchain'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/sendonchain'; options.form = { address: address, amountSatoshis: amount, confirmationTarget: blocks }; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Onchain', msg: 'Send Funds Options', data: options.form }); request.post(options).then((body) => { diff --git a/backend/controllers/eclair/payments.js b/backend/controllers/eclair/payments.js index 25f6d974..671c1a6d 100644 --- a/backend/controllers/eclair/payments.js +++ b/backend/controllers/eclair/payments.js @@ -5,7 +5,7 @@ let options = null; const logger = Logger; const common = Common; export const getSentInfoFromPaymentRequest = (selNode, payment) => { - options.url = selNode.settings.lnServerUrl + '/getsentinfo'; + options.url = selNode.Settings.lnServerUrl + '/getsentinfo'; options.form = { paymentHash: payment }; return request.post(options).then((body) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Payments', msg: 'Payment Sent Information Received', data: body }); @@ -21,7 +21,7 @@ export const getSentInfoFromPaymentRequest = (selNode, payment) => { }).catch((err) => err); }; export const getQueryNodes = (selNode, nodeIds) => { - options.url = selNode.settings.lnServerUrl + '/nodes'; + options.url = selNode.Settings.lnServerUrl + '/nodes'; options.form = { nodeIds: nodeIds?.reduce((acc, curr) => acc + ',' + curr) }; return request.post(options).then((nodes) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Payments', msg: 'Query Nodes Received', data: nodes }); @@ -34,7 +34,7 @@ export const decodePayment = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/parseinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/parseinvoice'; options.form = { invoice: req.params.invoice }; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Payment Decoded', data: body }); @@ -53,7 +53,7 @@ export const postPayment = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/payinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/payinvoice'; options.form = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'Send Payment Options', data: options.form }); request.post(options).then((body) => { @@ -70,7 +70,7 @@ export const queryPaymentRoute = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/findroutetonode'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/findroutetonode'; options.form = { nodeId: req.query.nodeId, amountMsat: req.query.amountMsat @@ -129,8 +129,8 @@ export const getSentPaymentsInformation = (req, res, next) => { }; export const sendPaymentToRouteRequestCall = (selectedNode, shortChannelIds, invoice, amountMsat) => { logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Creating Invoice..' }); - options = selectedNode.authentication.options; - options.url = selectedNode.settings.lnServerUrl + '/sendtoroute'; + options = selectedNode.Authentication.options; + options.url = selectedNode.Settings.lnServerUrl + '/sendtoroute'; options.form = { shortChannelIds: shortChannelIds, amountMsat: amountMsat, invoice: invoice }; return new Promise((resolve, reject) => { logger.log({ selectedNode: selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'Send Payment To Route Options', data: options.form }); diff --git a/backend/controllers/eclair/peers.js b/backend/controllers/eclair/peers.js index c29f4e22..2830a532 100644 --- a/backend/controllers/eclair/peers.js +++ b/backend/controllers/eclair/peers.js @@ -5,7 +5,7 @@ let options = null; const logger = Logger; const common = Common; export const getFilteredNodes = (selNode, peersNodeIds) => { - options.url = selNode.settings.lnServerUrl + '/nodes'; + options.url = selNode.Settings.lnServerUrl + '/nodes'; options.form = { nodeIds: peersNodeIds }; return request.post(options).then((nodes) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Peers', msg: 'Filtered Nodes Received', data: nodes }); @@ -18,7 +18,7 @@ export const getPeers = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/peers'; options.form = {}; if (common.read_dummy_data) { common.getDummyData('Peers', req.session.selectedNode.lnImplementation).then((data) => { res.status(200).json(data); }); @@ -58,7 +58,7 @@ export const connectPeer = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/connect'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/connect'; options.form = {}; if (req.query) { options.form = req.query; @@ -74,7 +74,7 @@ export const connectPeer = (req, res, next) => { const err = common.handleError({ statusCode: 500, message: 'Connect Peer Error', error: body }, 'Peers', body, req.session.selectedNode); return res.status(err.statusCode).json({ message: err.message, error: err.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/peers'; options.form = {}; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peers List after Connect', data: body }); @@ -112,7 +112,7 @@ export const deletePeer = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/disconnect'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/disconnect'; options.form = {}; if (req.params.nodeId) { options.form = { nodeId: req.params.nodeId }; diff --git a/backend/controllers/eclair/webSocketClient.js b/backend/controllers/eclair/webSocketClient.js index 6c692c3a..70f35d6c 100644 --- a/backend/controllers/eclair/webSocketClient.js +++ b/backend/controllers/eclair/webSocketClient.js @@ -28,14 +28,14 @@ export class ECLWebSocketClient { try { const clientExists = this.webSocketClients.find((wsc) => wsc.selectedNode.index === selectedNode.index); if (!clientExists) { - if (selectedNode.settings.lnServerUrl) { + if (selectedNode.Settings.lnServerUrl) { const newWebSocketClient = { selectedNode: selectedNode, reConnect: true, webSocketClient: null }; this.connectWithClient(newWebSocketClient); this.webSocketClients.push(newWebSocketClient); } } else { - if ((!clientExists.webSocketClient || clientExists.webSocketClient.readyState !== WebSocket.OPEN) && selectedNode.settings.lnServerUrl) { + if ((!clientExists.webSocketClient || clientExists.webSocketClient.readyState !== WebSocket.OPEN) && selectedNode.Settings.lnServerUrl) { clientExists.reConnect = true; this.connectWithClient(clientExists); } @@ -47,9 +47,9 @@ export class ECLWebSocketClient { }; this.connectWithClient = (eclWsClt) => { this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'INFO', fileName: 'ECLWebSocket', msg: 'Connecting to the Eclair\'s Websocket Server..' }); - const UpdatedLNServerURL = (eclWsClt.selectedNode.settings.lnServerUrl)?.replace(/^http/, 'ws'); + const UpdatedLNServerURL = (eclWsClt.selectedNode.Settings.lnServerUrl)?.replace(/^http/, 'ws'); const firstSubStrIndex = (UpdatedLNServerURL.indexOf('//') + 2); - const WS_LINK = UpdatedLNServerURL.slice(0, firstSubStrIndex) + ':' + eclWsClt.selectedNode.authentication.lnApiPassword + '@' + UpdatedLNServerURL.slice(firstSubStrIndex) + '/ws'; + const WS_LINK = UpdatedLNServerURL.slice(0, firstSubStrIndex) + ':' + eclWsClt.selectedNode.Authentication.lnApiPassword + '@' + UpdatedLNServerURL.slice(firstSubStrIndex) + '/ws'; eclWsClt.webSocketClient = new WebSocket(WS_LINK); eclWsClt.webSocketClient.onopen = () => { this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'INFO', fileName: 'ECLWebSocket', msg: 'Connected to the Eclair\'s Websocket Server..' }); diff --git a/backend/controllers/lnd/balance.js b/backend/controllers/lnd/balance.js index b49f7a02..24b0a907 100644 --- a/backend/controllers/lnd/balance.js +++ b/backend/controllers/lnd/balance.js @@ -10,7 +10,7 @@ export const getBlockchainBalance = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/balance/blockchain'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/balance/blockchain'; options.qs = req.query; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Balance', msg: 'Request params', data: req.params }); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Balance', msg: 'Request Query', data: req.query }); diff --git a/backend/controllers/lnd/channels.js b/backend/controllers/lnd/channels.js index 66d091e0..f88beb8e 100644 --- a/backend/controllers/lnd/channels.js +++ b/backend/controllers/lnd/channels.js @@ -6,7 +6,7 @@ const logger = Logger; const common = Common; export const getAliasForChannel = (selNode, channel) => { const pubkey = (channel.remote_pubkey) ? channel.remote_pubkey : (channel.remote_node_pub) ? channel.remote_node_pub : ''; - options.url = selNode.settings.lnServerUrl + '/v1/graph/node/' + pubkey; + options.url = selNode.Settings.lnServerUrl + '/v1/graph/node/' + pubkey; return request(options).then((aliasBody) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Channels', msg: 'Alias Received', data: aliasBody.node.alias }); channel.remote_alias = aliasBody.node.alias && aliasBody.node.alias !== '' ? aliasBody.node.alias : aliasBody.node.pub_key.slice(0, 20); @@ -22,7 +22,7 @@ export const getAllChannels = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels'; options.qs = req.query; let local = 0; let remote = 0; @@ -60,7 +60,7 @@ export const getPendingChannels = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/pending'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/pending'; options.qs = req.query; request(options).then((body) => { if (!body.total_limbo_balance) { @@ -98,7 +98,7 @@ export const getClosedChannels = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/closed'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/closed'; options.qs = req.query; request(options).then((body) => { if (body.channels && body.channels.length > 0) { @@ -129,7 +129,7 @@ export const postChannel = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels'; options.form = { node_pubkey_string: node_pubkey, local_funding_amount: local_funding_amount, @@ -162,7 +162,7 @@ export const postTransactions = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/transaction-stream'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/transaction-stream'; options.form = { payment_request: paymentReq }; if (paymentAmount) { options.form.amt = paymentAmount; @@ -208,7 +208,7 @@ export const closeChannel = (req, res, next) => { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } const channelpoint = req.params.channelPoint?.replace(':', '/'); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/' + channelpoint + '?force=' + req.query.force; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/' + channelpoint + '?force=' + req.query.force; if (req.query.target_conf) { options.url = options.url + '&target_conf=' + req.query.target_conf; } @@ -232,7 +232,7 @@ export const postChanPolicy = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/chanpolicy'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/chanpolicy'; if (chanPoint === 'all') { options.form = JSON.stringify({ global: true, diff --git a/backend/controllers/lnd/channelsBackup.js b/backend/controllers/lnd/channelsBackup.js index a00a8074..3f19bdaa 100644 --- a/backend/controllers/lnd/channelsBackup.js +++ b/backend/controllers/lnd/channelsBackup.js @@ -39,15 +39,15 @@ export const getBackup = (req, res, next) => { let channel_backup_file = ''; let message = ''; if (req.params.channelPoint === 'ALL') { - channel_backup_file = req.session.selectedNode.settings.channelBackupPath + sep + 'channel-all.bak'; + channel_backup_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-all.bak'; message = 'All Channels Backup Successful.'; - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/backup'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/backup'; } else { - channel_backup_file = req.session.selectedNode.settings.channelBackupPath + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; + channel_backup_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; message = 'Channel Backup Successful.'; const channelpoint = req.params.channelPoint?.replace(':', '/'); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/backup/' + channelpoint; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/backup/' + channelpoint; const exists = fs.existsSync(channel_backup_file); if (exists) { fs.writeFile(channel_backup_file, '', () => { }); @@ -86,13 +86,13 @@ export const postBackupVerify = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/backup/verify'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/backup/verify'; let channel_verify_file = ''; let message = ''; let verify_backup = ''; if (req.params.channelPoint === 'ALL') { message = 'All Channels Verify Successful.'; - channel_verify_file = req.session.selectedNode.settings.channelBackupPath + sep + 'channel-all.bak'; + channel_verify_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-all.bak'; const exists = fs.existsSync(channel_verify_file); if (exists) { verify_backup = fs.readFileSync(channel_verify_file, 'utf-8'); @@ -116,7 +116,7 @@ export const postBackupVerify = (req, res, next) => { } else { message = 'Channel Verify Successful.'; - channel_verify_file = req.session.selectedNode.settings.channelBackupPath + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; + channel_verify_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; const exists = fs.existsSync(channel_verify_file); if (exists) { verify_backup = fs.readFileSync(channel_verify_file, 'utf-8'); @@ -146,13 +146,13 @@ export const postRestore = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/backup/restore'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/backup/restore'; let channel_restore_file = ''; let message = ''; let restore_backup = ''; if (req.params.channelPoint === 'ALL') { message = 'All Channels Restore Successful.'; - channel_restore_file = req.session.selectedNode.settings.channelBackupPath + sep + 'restore' + sep; + channel_restore_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'restore' + sep; const exists = fs.existsSync(channel_restore_file + 'channel-all.bak'); const downloaded_exists = fs.existsSync(channel_restore_file + 'backup-channel-all.bak'); if (exists) { @@ -188,7 +188,7 @@ export const postRestore = (req, res, next) => { } else { message = 'Channel Restore Successful.'; - channel_restore_file = req.session.selectedNode.settings.channelBackupPath + sep + 'restore' + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; + channel_restore_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'restore' + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; const exists = fs.existsSync(channel_restore_file); if (exists) { restore_backup = fs.readFileSync(channel_restore_file, 'utf-8'); @@ -208,7 +208,7 @@ export const postRestore = (req, res, next) => { channel_restore_file = channel_restore_file + 'channel-all.bak'; } fs.rename(channel_restore_file, channel_restore_file + '.restored', () => { - getFilesList(req.session.selectedNode.settings.channelBackupPath, (getFilesListRes) => { + getFilesList(req.session.selectedNode.Settings.channelBackupPath, (getFilesListRes) => { if (getFilesListRes.error) { const errMsg = getFilesListRes.error; const err = common.handleError({ statusCode: 500, message: 'Restore Channel Error', error: errMsg }, 'ChannelBackup', errMsg, req.session.selectedNode); @@ -228,7 +228,7 @@ export const postRestore = (req, res, next) => { } }; export const getRestoreList = (req, res, next) => { - getFilesList(req.session.selectedNode.settings.channelBackupPath, (getFilesListRes) => { + getFilesList(req.session.selectedNode.Settings.channelBackupPath, (getFilesListRes) => { if (getFilesListRes.error) { return res.status(getFilesListRes.statusCode).json(getFilesListRes); } diff --git a/backend/controllers/lnd/fees.js b/backend/controllers/lnd/fees.js index 643a5e91..5cd03960 100644 --- a/backend/controllers/lnd/fees.js +++ b/backend/controllers/lnd/fees.js @@ -11,7 +11,7 @@ export const getFees = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/fees'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/fees'; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Fees', msg: 'Fee Received', data: body }); const today = new Date(Date.now()); diff --git a/backend/controllers/lnd/getInfo.js b/backend/controllers/lnd/getInfo.js index fbc72493..f482676c 100644 --- a/backend/controllers/lnd/getInfo.js +++ b/backend/controllers/lnd/getInfo.js @@ -16,7 +16,7 @@ export const getInfo = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/getinfo'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/getinfo'; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Selected Node ' + req.session.selectedNode.lnNode }); logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Calling Info from LND server url ' + options.url }); if (!options.headers || !options.headers['Grpc-Metadata-macaroon']) { diff --git a/backend/controllers/lnd/graph.js b/backend/controllers/lnd/graph.js index 7d008e40..d2ddb987 100644 --- a/backend/controllers/lnd/graph.js +++ b/backend/controllers/lnd/graph.js @@ -5,7 +5,7 @@ let options = null; const logger = Logger; const common = Common; export const getAliasFromPubkey = (selNode, pubkey) => { - options.url = selNode.settings.lnServerUrl + '/v1/graph/node/' + pubkey; + options.url = selNode.Settings.lnServerUrl + '/v1/graph/node/' + pubkey; return request(options).then((res) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Graph', msg: 'Alias Received', data: res.node.alias }); return res.node.alias; @@ -18,7 +18,7 @@ export const getDescribeGraph = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph'; request.get(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Network Graph Received', data: body }); res.status(200).json(body); @@ -33,7 +33,7 @@ export const getGraphInfo = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/info'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/info'; request.get(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Graph Information Received', data: body }); res.status(200).json(body); @@ -48,7 +48,7 @@ export const getGraphNode = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/node/' + req.params.pubKey; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/node/' + req.params.pubKey; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Graph Node Information Received', data: body }); res.status(200).json(body); @@ -63,7 +63,7 @@ export const getGraphEdge = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/edge/' + req.params.chanid; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/edge/' + req.params.chanid; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Graph Edge Information Received', data: body }); res.status(200).json(body); @@ -78,7 +78,7 @@ export const getQueryRoutes = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/routes/' + req.params.destPubkey + '/' + req.params.amount; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/routes/' + req.params.destPubkey + '/' + req.params.amount; if (req.query.outgoing_chan_id) { options.url = options.url + '?outgoing_chan_id=' + req.query.outgoing_chan_id; } @@ -116,7 +116,7 @@ export const getRemoteFeePolicy = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/edge/' + req.params.chanid; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/edge/' + req.params.chanid; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Graph', msg: 'Edge Info Received', data: body }); let remoteNodeFee = {}; diff --git a/backend/controllers/lnd/invoices.js b/backend/controllers/lnd/invoices.js index 59601ab9..09a219fd 100644 --- a/backend/controllers/lnd/invoices.js +++ b/backend/controllers/lnd/invoices.js @@ -12,7 +12,7 @@ export const invoiceLookup = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/invoices/lookup'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/invoices/lookup'; if (req.query.payment_addr) { options.url = options.url + '?payment_addr=' + req.query.payment_addr; } @@ -36,7 +36,7 @@ export const listInvoices = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/invoices?num_max_invoices=' + req.query.num_max_invoices + '&index_offset=' + req.query.index_offset + + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/invoices?num_max_invoices=' + req.query.num_max_invoices + '&index_offset=' + req.query.index_offset + '&reversed=' + req.query.reversed; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Invoice', msg: 'Invoices List Received', data: body }); @@ -60,7 +60,7 @@ export const addInvoice = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/invoices'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/invoices'; options.form = JSON.stringify(req.body); request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Invoice Added', data: body }); diff --git a/backend/controllers/lnd/message.js b/backend/controllers/lnd/message.js index 65a1328f..ac5b559c 100644 --- a/backend/controllers/lnd/message.js +++ b/backend/controllers/lnd/message.js @@ -11,7 +11,7 @@ export const signMessage = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/signmessage'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/signmessage'; options.form = JSON.stringify({ msg: Buffer.from(message).toString('base64') }); @@ -30,7 +30,7 @@ export const verifyMessage = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/verifymessage'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/verifymessage'; options.form = JSON.stringify({ msg: Buffer.from(message).toString('base64'), signature: signature diff --git a/backend/controllers/lnd/newAddress.js b/backend/controllers/lnd/newAddress.js index b8857064..71289106 100644 --- a/backend/controllers/lnd/newAddress.js +++ b/backend/controllers/lnd/newAddress.js @@ -10,7 +10,7 @@ export const getNewAddress = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/newaddress?type=' + req.query.type; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/newaddress?type=' + req.query.type; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'NewAddress', msg: 'New Address Generated', data: body }); res.status(200).json(body); diff --git a/backend/controllers/lnd/payments.js b/backend/controllers/lnd/payments.js index 208a1883..1fd13415 100644 --- a/backend/controllers/lnd/payments.js +++ b/backend/controllers/lnd/payments.js @@ -5,7 +5,7 @@ let options = null; const logger = Logger; const common = Common; export const decodePaymentFromPaymentRequest = (selNode, payment) => { - options.url = selNode.settings.lnServerUrl + '/v1/payreq/' + payment; + options.url = selNode.Settings.lnServerUrl + '/v1/payreq/' + payment; return request(options).then((res) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'PayReq', msg: 'Description Received', data: res.description }); return res; @@ -17,7 +17,7 @@ export const decodePayment = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/payreq/' + req.params.payRequest; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/payreq/' + req.params.payRequest; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'PayRequest', msg: 'Payment Decoded', data: body }); res.status(200).json(body); @@ -56,7 +56,7 @@ export const getPayments = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/payments?max_payments=' + req.query.max_payments + '&index_offset=' + req.query.index_offset + '&reversed=' + req.query.reversed; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/payments?max_payments=' + req.query.max_payments + '&index_offset=' + req.query.index_offset + '&reversed=' + req.query.reversed; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'Payment List Received', data: body }); res.status(200).json(body); @@ -69,8 +69,8 @@ export const getAllLightningTransactions = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Getting All Lightning Transactions..' }); const options1 = JSON.parse(JSON.stringify(common.getOptions(req))); const options2 = JSON.parse(JSON.stringify(common.getOptions(req))); - // options1.url = req.session.selectedNode.settings.lnServerUrl + '/v1/payments?max_payments=100000&index_offset=0&reversed=true'; - options2.url = req.session.selectedNode.settings.lnServerUrl + '/v1/invoices?num_max_invoices=100000&index_offset=0&reversed=true'; + // options1.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/payments?max_payments=100000&index_offset=0&reversed=true'; + options2.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/invoices?num_max_invoices=100000&index_offset=0&reversed=true'; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'All Payments Options', data: options1 }); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'All Invoices Options', data: options2 }); // return Promise.all([request(options1), request(options2)]).then((values) => { @@ -88,7 +88,7 @@ export const paymentLookup = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/router/track/' + req.params.paymentHash; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/router/track/' + req.params.paymentHash; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Payment Information Received for ' + req.params.paymentHash, data: body }); res.status(200).json(body.result || body); diff --git a/backend/controllers/lnd/peers.js b/backend/controllers/lnd/peers.js index 104dc753..e1feaffb 100644 --- a/backend/controllers/lnd/peers.js +++ b/backend/controllers/lnd/peers.js @@ -5,7 +5,7 @@ let options = null; const logger = Logger; const common = Common; export const getAliasForPeers = (selNode, peer) => { - options.url = selNode.settings.lnServerUrl + '/v1/graph/node/' + peer.pub_key; + options.url = selNode.Settings.lnServerUrl + '/v1/graph/node/' + peer.pub_key; return request(options).then((aliasBody) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Peers', msg: 'Alias Received', data: aliasBody.node.alias }); peer.alias = aliasBody.node.alias; @@ -21,7 +21,7 @@ export const getPeers = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/peers'; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peers List Received', data: body }); const peers = !body.peers ? [] : body.peers; @@ -41,14 +41,14 @@ export const postPeer = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/peers'; options.form = JSON.stringify({ addr: { host: host, pubkey: pubkey }, perm: perm }); request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peer Connected', data: body }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/peers'; request(options).then((body) => { const peers = (!body.peers) ? [] : body.peers; return Promise.all(peers?.map((peer) => getAliasForPeers(req.session.selectedNode, peer))).then((values) => { @@ -76,7 +76,7 @@ export const deletePeer = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/peers/' + req.params.peerPubKey; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/peers/' + req.params.peerPubKey; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Peer Disconnect Pubkey', data: req.params.peerPubKey }); request.delete(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Peer Disconneted', data: body }); diff --git a/backend/controllers/lnd/switch.js b/backend/controllers/lnd/switch.js index a8571941..144889dc 100644 --- a/backend/controllers/lnd/switch.js +++ b/backend/controllers/lnd/switch.js @@ -27,7 +27,7 @@ export const getAllForwardingEvents = (req, start, end, offset, caller, callback return callback({ message: err.message, error: err.error, statusCode: err.statusCode }); } options = common.getOptions(req); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/switch'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/switch'; options.form = {}; if (start) { options.form.start_time = start; diff --git a/backend/controllers/lnd/transactions.js b/backend/controllers/lnd/transactions.js index cb715822..192a1da0 100644 --- a/backend/controllers/lnd/transactions.js +++ b/backend/controllers/lnd/transactions.js @@ -10,7 +10,7 @@ export const getTransactions = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/transactions'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/transactions'; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Transactions', msg: 'Transactions List Received', data: body }); res.status(200).json(body.transactions); @@ -26,7 +26,7 @@ export const postTransactions = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/transactions'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/transactions'; options.form = { amount: amount, addr: address, diff --git a/backend/controllers/lnd/wallet.js b/backend/controllers/lnd/wallet.js index 25217244..6e12cd84 100644 --- a/backend/controllers/lnd/wallet.js +++ b/backend/controllers/lnd/wallet.js @@ -12,10 +12,10 @@ export const genSeed = (req, res, next) => { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } if (req.params.passphrase) { - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/genseed?aezeed_passphrase=' + Buffer.from(atob(req.params.passphrase)).toString('base64'); + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/genseed?aezeed_passphrase=' + Buffer.from(atob(req.params.passphrase)).toString('base64'); } else { - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/genseed'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/genseed'; } request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Seed Generated', data: body }); @@ -35,7 +35,7 @@ export const operateWallet = (req, res, next) => { options.method = 'POST'; if (!req.params.operation || req.params.operation === 'unlockwallet') { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Unlocking Wallet..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/unlockwallet'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/unlockwallet'; options.form = JSON.stringify({ wallet_password: Buffer.from(atob(wallet_password)).toString('base64') }); @@ -43,7 +43,7 @@ export const operateWallet = (req, res, next) => { } else { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Initializing Wallet..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/initwallet'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/initwallet'; if (aezeed_passphrase && aezeed_passphrase !== '') { options.form = JSON.stringify({ wallet_password: Buffer.from(atob(wallet_password)).toString('base64'), @@ -104,7 +104,7 @@ export const getUTXOs = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/utxos'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/utxos'; if (common.isVersionCompatible(req.session.selectedNode.lnVersion, '0.14.0')) { options.form = JSON.stringify({ max_confs: req.query.max_confs }); } @@ -126,7 +126,7 @@ export const bumpFee = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/bumpfee'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/bumpfee'; options.form = {}; options.form.outpoint = { txid_str: txid, @@ -153,7 +153,7 @@ export const labelTransaction = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/tx/label'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/tx/label'; options.form = JSON.parse(JSON.stringify(options.form)); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Wallet', msg: 'Label Transaction Options', data: options.form }); request.post(options).then((body) => { @@ -171,7 +171,7 @@ export const leaseUTXO = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/utxos/lease'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/utxos/lease'; options.form = {}; options.form.id = txid; options.form.outpoint = { @@ -195,7 +195,7 @@ export const releaseUTXO = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/utxos/release'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/utxos/release'; options.form = {}; options.form.id = txid; options.form.outpoint = { diff --git a/backend/controllers/lnd/webSocketClient.js b/backend/controllers/lnd/webSocketClient.js index 0519da4f..bb088334 100644 --- a/backend/controllers/lnd/webSocketClient.js +++ b/backend/controllers/lnd/webSocketClient.js @@ -13,7 +13,7 @@ export class LNDWebSocketClient { this.connect = (selectedNode) => { try { const clientExists = this.webSocketClients.find((wsc) => wsc.selectedNode.index === selectedNode.index); - if (!clientExists && selectedNode.settings.lnServerUrl) { + if (!clientExists && selectedNode.Settings.lnServerUrl) { const newWebSocketClient = { selectedNode: selectedNode }; this.webSocketClients.push(newWebSocketClient); } @@ -25,7 +25,7 @@ export class LNDWebSocketClient { this.fetchUnpaidInvoices = (selectedNode) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Getting Unpaid Invoices..' }); const options = this.setOptionsForSelNode(selectedNode); - options.url = selectedNode.settings.lnServerUrl + '/v1/invoices?pending_only=true'; + options.url = selectedNode.Settings.lnServerUrl + '/v1/invoices?pending_only=true'; return request(options).then((body) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Unpaid Invoices Received', data: body }); if (body.invoices && body.invoices.length > 0) { @@ -44,7 +44,7 @@ export class LNDWebSocketClient { this.subscribeToInvoice = (options, selectedNode, rHash) => { rHash = rHash?.replace(/\+/g, '-')?.replace(/[/]/g, '_'); this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Subscribing to Invoice ' + rHash + ' ..' }); - options.url = selectedNode.settings.lnServerUrl + '/v2/invoices/subscribe/' + rHash; + options.url = selectedNode.Settings.lnServerUrl + '/v2/invoices/subscribe/' + rHash; request(options).then((msg) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Invoice Information Received for ' + rHash }); if (typeof msg === 'string') { @@ -67,7 +67,7 @@ export class LNDWebSocketClient { }; this.subscribeToPayment = (options, selectedNode, paymentHash) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Subscribing to Payment ' + paymentHash + ' ..' }); - options.url = selectedNode.settings.lnServerUrl + '/v2/router/track/' + paymentHash; + options.url = selectedNode.Settings.lnServerUrl + '/v2/router/track/' + paymentHash; request(options).then((msg) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Payment Information Received for ' + paymentHash }); msg['type'] = 'payment'; @@ -84,7 +84,7 @@ export class LNDWebSocketClient { this.setOptionsForSelNode = (selectedNode) => { const options = { url: '', rejectUnauthorized: false, json: true, form: null }; try { - options['headers'] = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(selectedNode.authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; + options['headers'] = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(selectedNode.Authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; } catch (err) { this.logger.log({ selectedNode: selectedNode, level: 'ERROR', fileName: 'WebSocketClient', msg: 'Set Options Error', error: JSON.stringify(err) }); diff --git a/backend/controllers/shared/RTLConf.js b/backend/controllers/shared/RTLConf.js index ca300cd0..eddf5a6a 100644 --- a/backend/controllers/shared/RTLConf.js +++ b/backend/controllers/shared/RTLConf.js @@ -23,7 +23,7 @@ export const maskPasswords = (obj) => { keys[keys[i]] = maskPasswords(obj[keys[i]]); } if (typeof keys[i] === 'string' && - (keys[i].toLowerCase().includes('password') || keys[i].toLowerCase().includes('multipass') || + ((keys[i].toLowerCase().includes('password') && keys[i] !== 'allowPasswordUpdate') || keys[i].toLowerCase().includes('multipass') || keys[i].toLowerCase().includes('rpcpass') || keys[i].toLowerCase().includes('rpcpassword') || keys[i].toLowerCase().includes('rpcuser'))) { obj[keys[i]] = '*'.repeat(20); @@ -39,13 +39,9 @@ export const removeSensitiveData = (config) => { delete config.multiPassHashed; delete config.secret2FA; config.nodes.map((node) => { - node.authentication = node.Authentication; - node.settings = node.Settings; - delete node.Authentication; - delete node.Settings; - delete node.authentication.macaroonPath; - delete node.authentication.runePath; - delete node.authentication.lnApiPassword; + delete node.Authentication.macaroonPath; + delete node.Authentication.runePath; + delete node.Authentication.lnApiPassword; return node; }); return config; @@ -64,7 +60,7 @@ export const getCurrencyRates = (req, res, next) => { }; export const getFile = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Getting File..' }); - const file = req.query.path ? req.query.path : (req.session.selectedNode.settings.channelBackupPath + sep + 'channel-' + req.query.channel?.replace(':', '-') + '.bak'); + const file = req.query.path ? req.query.path : (req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-' + req.query.channel?.replace(':', '-') + '.bak'); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'RTLConf', msg: 'Channel Point', data: req.query.channel }); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'RTLConf', msg: 'File Path', data: file }); fs.readFile(file, 'utf8', (errRes, data) => { @@ -93,6 +89,7 @@ export const getApplicationSettings = (req, res, next) => { } else { const appConfData = removeSensitiveData(JSON.parse(data)); + appConfData.allowPasswordUpdate = common.appConfig.allowPasswordUpdate; appConfData.enable2FA = common.appConfig.enable2FA; appConfData.selectedNodeIndex = (req.session.selectedNode && req.session.selectedNode.index ? req.session.selectedNode.index : common.selectedNode.index); const token = req.headers.authorization ? req.headers.authorization.split(' ')[1] : ''; @@ -103,14 +100,14 @@ export const getApplicationSettings = (req, res, next) => { appConfData.SSO = new SSO(); appConfData.secret2FA = ''; appConfData.dbDirectoryPath = ''; - appConfData.nodes[selNodeIdx].authentication = new NodeAuthentication(); - delete appConfData.nodes[selNodeIdx].settings.bitcoindConfigPath; - delete appConfData.nodes[selNodeIdx].settings.lnServerUrl; - delete appConfData.nodes[selNodeIdx].settings.swapServerUrl; - delete appConfData.nodes[selNodeIdx].settings.boltzServerUrl; - delete appConfData.nodes[selNodeIdx].settings.enableOffers; - delete appConfData.nodes[selNodeIdx].settings.enablePeerswap; - delete appConfData.nodes[selNodeIdx].settings.channelBackupPath; + appConfData.nodes[selNodeIdx].Authentication = new NodeAuthentication(); + delete appConfData.nodes[selNodeIdx].Settings.bitcoindConfigPath; + delete appConfData.nodes[selNodeIdx].Settings.lnServerUrl; + delete appConfData.nodes[selNodeIdx].Settings.swapServerUrl; + delete appConfData.nodes[selNodeIdx].Settings.boltzServerUrl; + delete appConfData.nodes[selNodeIdx].Settings.enableOffers; + delete appConfData.nodes[selNodeIdx].Settings.enablePeerswap; + delete appConfData.nodes[selNodeIdx].Settings.channelBackupPath; appConfData.nodes = [appConfData.nodes[selNodeIdx]]; } logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'RTL Configuration Received', data: appConfData }); @@ -142,10 +139,10 @@ export const getConfig = (req, res, next) => { let fileFormat = 'INI'; switch (req.params.nodeType) { case 'ln': - confFile = req.session.selectedNode.authentication.configPath; + confFile = req.session.selectedNode.Authentication.configPath; break; case 'bitcoind': - confFile = req.session.selectedNode.settings.bitcoindConfigPath; + confFile = req.session.selectedNode.Settings.bitcoindConfigPath; break; case 'rtl': fileFormat = 'JSON'; @@ -198,8 +195,8 @@ export const updateNodeSettings = (req, res, next) => { try { fs.writeFileSync(RTLConfFile, JSON.stringify(config, null, 2), 'utf-8'); const selectedNode = common.findNode(req.session.selectedNode.index); - if (selectedNode && selectedNode.settings) { - selectedNode.settings = req.body; + if (selectedNode && selectedNode.Settings) { + selectedNode.Settings = req.body; common.replaceNode(req, selectedNode); } logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Node Settings Updated', data: maskPasswords(config) }); @@ -215,12 +212,9 @@ export const updateApplicationSettings = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Updating Application Settings..' }); const RTLConfFile = common.appConfig.rtlConfFilePath + sep + 'RTL-Config.json'; try { - const config = JSON.parse(req.body); - fs.writeFileSync(RTLConfFile, JSON.stringify(config, null, 2), 'utf-8'); - // config.enable2FA = common.appConfig.enable2FA; - // config.selectedNodeIndex = (req.session.selectedNode && req.session.selectedNode.index ? req.session.selectedNode.index : common.selectedNode.index); - common.appConfig = config; - logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Application Settings Updated', data: maskPasswords(config) }); + fs.writeFileSync(RTLConfFile, JSON.stringify(req.body, null, 2), 'utf-8'); + common.appConfig = req.body; + logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Application Settings Updated', data: maskPasswords(common.appConfig) }); res.status(201).json(removeSensitiveData(common.appConfig)); } catch (errRes) { diff --git a/backend/models/config.model.js b/backend/models/config.model.js index fcac4b47..eb1b2319 100644 --- a/backend/models/config.model.js +++ b/backend/models/config.model.js @@ -31,7 +31,7 @@ export class NodeAuthentication { } } export class SelectedNode { - constructor(logLevel, logFile, index, lnNode, lnImplementation, lnVersion, apiVersion, settings, authentication) { + constructor(logLevel, logFile, index, lnNode, lnImplementation, lnVersion, apiVersion, Settings, Authentication) { this.logLevel = logLevel; this.logFile = logFile; this.index = index; @@ -39,8 +39,8 @@ export class SelectedNode { this.lnImplementation = lnImplementation; this.lnVersion = lnVersion; this.apiVersion = apiVersion; - this.settings = settings; - this.authentication = authentication; + this.Settings = Settings; + this.Authentication = Authentication; } } export class SSO { diff --git a/backend/utils/common.js b/backend/utils/common.js index 56aa814e..3ba46c6f 100644 --- a/backend/utils/common.js +++ b/backend/utils/common.js @@ -23,15 +23,15 @@ export class CommonService { ]; this.setSwapServerOptions = (req) => { const swapOptions = { - baseUrl: req.session.selectedNode.settings.swapServerUrl, + baseUrl: req.session.selectedNode.Settings.swapServerUrl, uri: '', rejectUnauthorized: false, json: true, headers: { 'Grpc-Metadata-macaroon': '' } }; - if (req.session.selectedNode.authentication.swapMacaroonPath) { + if (req.session.selectedNode.Authentication.swapMacaroonPath) { try { - swapOptions.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.authentication.swapMacaroonPath, 'loop.macaroon')).toString('hex') }; + swapOptions.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.Authentication.swapMacaroonPath, 'loop.macaroon')).toString('hex') }; } catch (err) { this.logger.log({ selectedNode: this.selectedNode, level: 'ERROR', fileName: 'Common', msg: 'Loop macaroon Error', error: err }); @@ -42,14 +42,14 @@ export class CommonService { }; this.getBoltzServerOptions = (req) => { const boltzOptions = { - url: req.session.selectedNode.settings.boltzServerUrl, + url: req.session.selectedNode.Settings.boltzServerUrl, rejectUnauthorized: false, json: true, headers: { 'Grpc-Metadata-macaroon': '' } }; - if (req.session.selectedNode.authentication.boltzMacaroonPath) { + if (req.session.selectedNode.Authentication.boltzMacaroonPath) { try { - boltzOptions.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.authentication.boltzMacaroonPath, 'admin.macaroon')).toString('hex') }; + boltzOptions.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.Authentication.boltzMacaroonPath, 'admin.macaroon')).toString('hex') }; } catch (err) { this.logger.log({ selectedNode: this.selectedNode, level: 'ERROR', fileName: 'Common', msg: 'Boltz macaroon Error', error: err }); @@ -59,12 +59,12 @@ export class CommonService { return boltzOptions; }; this.getOptions = (req) => { - if (req.session.selectedNode && req.session.selectedNode.authentication.options) { - req.session.selectedNode.authentication.options.method = (req.session.selectedNode.lnImplementation && req.session.selectedNode.lnImplementation.toUpperCase() === 'LND') ? 'GET' : 'POST'; - delete req.session.selectedNode.authentication.options.form; - delete req.session.selectedNode.authentication.options.body; - req.session.selectedNode.authentication.options.qs = {}; - return req.session.selectedNode.authentication.options; + if (req.session.selectedNode && req.session.selectedNode.Authentication.options) { + req.session.selectedNode.Authentication.options.method = (req.session.selectedNode.lnImplementation && req.session.selectedNode.lnImplementation.toUpperCase() === 'LND') ? 'GET' : 'POST'; + delete req.session.selectedNode.Authentication.options.form; + delete req.session.selectedNode.Authentication.options.body; + req.session.selectedNode.Authentication.options.qs = {}; + return req.session.selectedNode.Authentication.options; } return this.handleError({ statusCode: 401, message: 'Session expired after a day\'s inactivity' }, 'Session Expired', 'Session Expiry Error', this.selectedNode); }; @@ -72,7 +72,7 @@ export class CommonService { if (!req.session.selectedNode) { req.session.selectedNode = {}; } - req.session.selectedNode.authentication.options = { + req.session.selectedNode.Authentication.options = { url: '', rejectUnauthorized: false, json: true, @@ -83,30 +83,30 @@ export class CommonService { switch (req.session.selectedNode.lnImplementation.toUpperCase()) { case 'CLN': try { - if (!req.session.selectedNode.authentication.runeValue) { - req.session.selectedNode.authentication.runeValue = this.getRuneValue(req.session.selectedNode.authentication.runePath); + if (!req.session.selectedNode.Authentication.runeValue) { + req.session.selectedNode.Authentication.runeValue = this.getRuneValue(req.session.selectedNode.Authentication.runePath); } - req.session.selectedNode.authentication.options.headers = { rune: req.session.selectedNode.authentication.runeValue }; + req.session.selectedNode.Authentication.options.headers = { rune: req.session.selectedNode.Authentication.runeValue }; } catch (err) { throw new Error(err); } break; case 'ECL': - req.session.selectedNode.authentication.options.headers = { authorization: 'Basic ' + Buffer.from(':' + req.session.selectedNode.authentication.lnApiPassword).toString('base64') }; + req.session.selectedNode.Authentication.options.headers = { authorization: 'Basic ' + Buffer.from(':' + req.session.selectedNode.Authentication.lnApiPassword).toString('base64') }; break; default: - req.session.selectedNode.authentication.options.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; + req.session.selectedNode.Authentication.options.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.Authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; break; } } if (req.session.selectedNode) { - this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Updated Node Options for ' + req.session.selectedNode.lnNode, data: req.session.selectedNode.authentication.options }); + this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Updated Node Options for ' + req.session.selectedNode.lnNode, data: req.session.selectedNode.Authentication.options }); } return { status: 200, message: 'Updated Successfully' }; } catch (err) { - req.session.selectedNode.authentication.options = { + req.session.selectedNode.Authentication.options = { url: '', rejectUnauthorized: false, json: true, @@ -128,12 +128,12 @@ export class CommonService { } }; this.setOptions = (req) => { - if (this.nodes[0].authentication.options && this.nodes[0].authentication.options.headers) { + if (this.nodes[0].Authentication.options && this.nodes[0].Authentication.options.headers) { return; } if (this.nodes && this.nodes.length > 0) { this.nodes.forEach((node) => { - node.authentication.options = { + node.Authentication.options = { url: '', rejectUnauthorized: false, json: true, @@ -144,34 +144,34 @@ export class CommonService { switch (node.lnImplementation.toUpperCase()) { case 'CLN': try { - if (!node.authentication.runeValue) { - node.authentication.runeValue = this.getRuneValue(node.authentication.runePath); + if (!node.Authentication.runeValue) { + node.Authentication.runeValue = this.getRuneValue(node.Authentication.runePath); } - node.authentication.options.headers = { rune: node.authentication.runeValue }; + node.Authentication.options.headers = { rune: node.Authentication.runeValue }; } catch (err) { throw new Error(err); } break; case 'ECL': - node.authentication.options.headers = { authorization: 'Basic ' + Buffer.from(':' + node.authentication.lnApiPassword).toString('base64') }; + node.Authentication.options.headers = { authorization: 'Basic ' + Buffer.from(':' + node.Authentication.lnApiPassword).toString('base64') }; break; default: - node.authentication.options.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(node.authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; + node.Authentication.options.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(node.Authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; break; } } } catch (err) { this.logger.log({ selectedNode: this.selectedNode, level: 'ERROR', fileName: 'Common', msg: 'Common Set Options Error', error: err }); - node.authentication.options = { + node.Authentication.options = { url: '', rejectUnauthorized: false, json: true, form: '' }; } - this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Set Node Options for ' + node.lnNode, data: node.authentication.options }); + this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Set Node Options for ' + node.lnNode, data: node.Authentication.options }); }); this.updateSelectedNodeOptions(req); } @@ -411,12 +411,12 @@ export class CommonService { } }; this.getAllNodeAllChannelBackup = (node) => { - const channel_backup_file = node.settings.channelBackupPath + sep + 'channel-all.bak'; + const channel_backup_file = node.Settings.channelBackupPath + sep + 'channel-all.bak'; const options = { - url: node.settings.lnServerUrl + '/v1/channels/backup', + url: node.Settings.lnServerUrl + '/v1/channels/backup', rejectUnauthorized: false, json: true, - headers: { 'Grpc-Metadata-macaroon': fs.readFileSync(node.authentication.macaroonPath + '/admin.macaroon').toString('hex') } + headers: { 'Grpc-Metadata-macaroon': fs.readFileSync(node.Authentication.macaroonPath + '/admin.macaroon').toString('hex') } }; this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Getting Channel Backup for Node ' + node.lnNode + '..' }); request(options).then((body) => { @@ -478,9 +478,9 @@ export class CommonService { this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'INDEX: ' + selNode.index }); this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LN NODE: ' + selNode.lnNode }); this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LN IMPLEMENTATION: ' + selNode.lnImplementation }); - this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'FIAT CONVERSION: ' + selNode.settings.fiatConversion }); - this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'CURRENCY UNIT: ' + selNode.settings.currencyUnit }); - this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LN SERVER URL: ' + selNode.settings.lnServerUrl }); + this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'FIAT CONVERSION: ' + selNode.Settings.fiatConversion }); + this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'CURRENCY UNIT: ' + selNode.Settings.currencyUnit }); + this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LN SERVER URL: ' + selNode.Settings.lnServerUrl }); this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LOGOUT REDIRECT LINK: ' + this.appConfig.SSO.logoutRedirectLink + '\r\n' }); } }; diff --git a/backend/utils/config.js b/backend/utils/config.js index 555dd5f8..7f8d6115 100644 --- a/backend/utils/config.js +++ b/backend/utils/config.js @@ -142,7 +142,7 @@ export class ConfigService { this.common.appConfig.dbDirectoryPath = (process?.env?.DB_DIRECTORY_PATH) ? process?.env?.DB_DIRECTORY_PATH : (config.dbDirectoryPath) ? config.dbDirectoryPath : join(dirname(fileURLToPath(import.meta.url)), '..', '..'); if (config.nodes && config.nodes.length > 0) { config.nodes.forEach((node, idx) => { - this.common.nodes[idx] = { settings: {}, authentication: {} }; + this.common.nodes[idx] = { Settings: {}, Authentication: {} }; this.common.nodes[idx].index = node.index; this.common.nodes[idx].lnNode = node.lnNode; this.common.nodes[idx].lnImplementation = (process?.env?.lnImplementation) ? process?.env?.lnImplementation : node.lnImplementation ? node.lnImplementation : 'LND'; @@ -152,10 +152,10 @@ export class ConfigService { switch (this.common.nodes[idx].lnImplementation) { case 'CLN': if (process?.env?.RUNE_PATH && process?.env?.RUNE_PATH.trim() !== '') { - this.common.nodes[idx].authentication.runePath = process?.env?.RUNE_PATH; + this.common.nodes[idx].Authentication.runePath = process?.env?.RUNE_PATH; } else if (node.Authentication && node.Authentication.runePath && node.Authentication.runePath.trim() !== '') { - this.common.nodes[idx].authentication.runePath = node.Authentication.runePath; + this.common.nodes[idx].Authentication.runePath = node.Authentication.runePath; } else { this.errMsg = 'Please set rune path for node index ' + node.index + ' in RTL-Config.json!'; @@ -163,21 +163,21 @@ export class ConfigService { break; case 'ECL': if (process?.env?.LN_API_PASSWORD) { - this.common.nodes[idx].authentication.lnApiPassword = process?.env?.LN_API_PASSWORD; + this.common.nodes[idx].Authentication.lnApiPassword = process?.env?.LN_API_PASSWORD; } else if (node.Authentication && node.Authentication.lnApiPassword) { - this.common.nodes[idx].authentication.lnApiPassword = node.Authentication.lnApiPassword; + this.common.nodes[idx].Authentication.lnApiPassword = node.Authentication.lnApiPassword; } else { - this.common.nodes[idx].authentication.lnApiPassword = ''; + this.common.nodes[idx].Authentication.lnApiPassword = ''; } break; default: if (process?.env?.MACAROON_PATH && process?.env?.MACAROON_PATH.trim() !== '') { - this.common.nodes[idx].authentication.macaroonPath = process?.env?.MACAROON_PATH; + this.common.nodes[idx].Authentication.macaroonPath = process?.env?.MACAROON_PATH; } else if (node.Authentication && node.Authentication.macaroonPath && node.Authentication.macaroonPath.trim() !== '') { - this.common.nodes[idx].authentication.macaroonPath = node.Authentication.macaroonPath; + this.common.nodes[idx].Authentication.macaroonPath = node.Authentication.macaroonPath; } else { this.errMsg = 'Please set macaroon path for node index ' + node.index + ' in RTL-Config.json!'; @@ -185,100 +185,100 @@ export class ConfigService { break; } if (process?.env?.CONFIG_PATH) { - this.common.nodes[idx].authentication.configPath = process?.env?.CONFIG_PATH; + this.common.nodes[idx].Authentication.configPath = process?.env?.CONFIG_PATH; } else if (node.Authentication && node.Authentication.configPath) { - this.common.nodes[idx].authentication.configPath = node.Authentication.configPath; + this.common.nodes[idx].Authentication.configPath = node.Authentication.configPath; } else { - this.common.nodes[idx].authentication.configPath = ''; + this.common.nodes[idx].Authentication.configPath = ''; } - if (this.common.nodes[idx].lnImplementation === 'ECL' && this.common.nodes[idx].authentication.lnApiPassword === '' && this.common.nodes[idx].authentication.configPath !== '') { + if (this.common.nodes[idx].lnImplementation === 'ECL' && this.common.nodes[idx].Authentication.lnApiPassword === '' && this.common.nodes[idx].Authentication.configPath !== '') { try { - const exists = fs.existsSync(this.common.nodes[idx].authentication.configPath || ''); + const exists = fs.existsSync(this.common.nodes[idx].Authentication.configPath || ''); if (exists) { try { - const configFile = fs.readFileSync((this.common.nodes[idx].authentication.configPath || ''), 'utf-8'); + const configFile = fs.readFileSync((this.common.nodes[idx].Authentication.configPath || ''), 'utf-8'); const iniParsed = ini.parse(configFile); - this.common.nodes[idx].authentication.lnApiPassword = iniParsed['eclair.api.password'] ? iniParsed['eclair.api.password'] : parseHocon(configFile).eclair.api.password; + this.common.nodes[idx].Authentication.lnApiPassword = iniParsed['eclair.api.password'] ? iniParsed['eclair.api.password'] : parseHocon(configFile).eclair.api.password; } catch (err) { this.errMsg = this.errMsg + '\nSomething went wrong while reading config file: \n' + err; } } else { - this.errMsg = this.errMsg + '\nInvalid config path: ' + this.common.nodes[idx].authentication.configPath; + this.errMsg = this.errMsg + '\nInvalid config path: ' + this.common.nodes[idx].Authentication.configPath; } } catch (err) { this.errMsg = this.errMsg + '\nUnable to read config file: \n' + err; } } - if (this.common.nodes[idx].lnImplementation === 'ECL' && this.common.nodes[idx].authentication.lnApiPassword === '') { + if (this.common.nodes[idx].lnImplementation === 'ECL' && this.common.nodes[idx].Authentication.lnApiPassword === '') { this.errMsg = this.errMsg + '\nPlease set config path Or api password for node index ' + node.index + ' in RTL-Config.json! It is mandatory for Eclair authentication!'; } if (process?.env?.LN_SERVER_URL && process?.env?.LN_SERVER_URL.trim() !== '') { - this.common.nodes[idx].settings.lnServerUrl = process?.env?.LN_SERVER_URL.endsWith('/v1') ? process?.env?.LN_SERVER_URL.slice(0, -3) : process?.env?.LN_SERVER_URL; + this.common.nodes[idx].Settings.lnServerUrl = process?.env?.LN_SERVER_URL.endsWith('/v1') ? process?.env?.LN_SERVER_URL.slice(0, -3) : process?.env?.LN_SERVER_URL; } else if (process?.env?.LND_SERVER_URL && process?.env?.LND_SERVER_URL.trim() !== '') { - this.common.nodes[idx].settings.lnServerUrl = process?.env?.LND_SERVER_URL.endsWith('/v1') ? process?.env?.LND_SERVER_URL.slice(0, -3) : process?.env?.LND_SERVER_URL; + this.common.nodes[idx].Settings.lnServerUrl = process?.env?.LND_SERVER_URL.endsWith('/v1') ? process?.env?.LND_SERVER_URL.slice(0, -3) : process?.env?.LND_SERVER_URL; } else if (node.Settings.lnServerUrl && node.Settings.lnServerUrl.trim() !== '') { - this.common.nodes[idx].settings.lnServerUrl = node.Settings.lnServerUrl.endsWith('/v1') ? node.Settings.lnServerUrl.slice(0, -3) : node.Settings.lnServerUrl; + this.common.nodes[idx].Settings.lnServerUrl = node.Settings.lnServerUrl.endsWith('/v1') ? node.Settings.lnServerUrl.slice(0, -3) : node.Settings.lnServerUrl; } else if (node.Settings.lndServerUrl && node.Settings.lndServerUrl.trim() !== '') { - this.common.nodes[idx].settings.lnServerUrl = node.Settings.lndServerUrl.endsWith('/v1') ? node.Settings.lndServerUrl.slice(0, -3) : node.Settings.lndServerUrl; + this.common.nodes[idx].Settings.lnServerUrl = node.Settings.lndServerUrl.endsWith('/v1') ? node.Settings.lndServerUrl.slice(0, -3) : node.Settings.lndServerUrl; } else { this.errMsg = this.errMsg + '\nPlease set LN Server URL for node index ' + node.index + ' in RTL-Config.json!'; } - this.common.nodes[idx].settings.userPersona = node.Settings.userPersona ? node.Settings.userPersona : 'MERCHANT'; - this.common.nodes[idx].settings.themeMode = node.Settings.themeMode ? node.Settings.themeMode : 'DAY'; - this.common.nodes[idx].settings.themeColor = node.Settings.themeColor ? node.Settings.themeColor : 'PURPLE'; - this.common.nodes[idx].settings.unannouncedChannels = node.Settings.unannouncedChannels ? !!node.Settings.unannouncedChannels : false; - this.common.nodes[idx].settings.logLevel = node.Settings.logLevel ? node.Settings.logLevel : 'ERROR'; - this.common.nodes[idx].settings.fiatConversion = node.Settings.fiatConversion ? !!node.Settings.fiatConversion : false; - if (this.common.nodes[idx].settings.fiatConversion) { - this.common.nodes[idx].settings.currencyUnit = node.Settings.currencyUnit ? node.Settings.currencyUnit : 'USD'; + this.common.nodes[idx].Settings.userPersona = node.Settings.userPersona ? node.Settings.userPersona : 'MERCHANT'; + this.common.nodes[idx].Settings.themeMode = node.Settings.themeMode ? node.Settings.themeMode : 'DAY'; + this.common.nodes[idx].Settings.themeColor = node.Settings.themeColor ? node.Settings.themeColor : 'PURPLE'; + this.common.nodes[idx].Settings.unannouncedChannels = node.Settings.unannouncedChannels ? !!node.Settings.unannouncedChannels : false; + this.common.nodes[idx].Settings.logLevel = node.Settings.logLevel ? node.Settings.logLevel : 'ERROR'; + this.common.nodes[idx].Settings.fiatConversion = node.Settings.fiatConversion ? !!node.Settings.fiatConversion : false; + if (this.common.nodes[idx].Settings.fiatConversion) { + this.common.nodes[idx].Settings.currencyUnit = node.Settings.currencyUnit ? node.Settings.currencyUnit : 'USD'; } if (process?.env?.SWAP_SERVER_URL && process?.env?.SWAP_SERVER_URL.trim() !== '') { - this.common.nodes[idx].settings.swapServerUrl = process?.env?.SWAP_SERVER_URL.endsWith('/v1') ? process?.env?.SWAP_SERVER_URL.slice(0, -3) : process?.env?.SWAP_SERVER_URL; - this.common.nodes[idx].authentication.swapMacaroonPath = process?.env?.SWAP_MACAROON_PATH; + this.common.nodes[idx].Settings.swapServerUrl = process?.env?.SWAP_SERVER_URL.endsWith('/v1') ? process?.env?.SWAP_SERVER_URL.slice(0, -3) : process?.env?.SWAP_SERVER_URL; + this.common.nodes[idx].Authentication.swapMacaroonPath = process?.env?.SWAP_MACAROON_PATH; } else if (node.Settings.swapServerUrl && node.Settings.swapServerUrl.trim() !== '') { - this.common.nodes[idx].settings.swapServerUrl = node.Settings.swapServerUrl.endsWith('/v1') ? node.Settings.swapServerUrl.slice(0, -3) : node.Settings.swapServerUrl; - this.common.nodes[idx].authentication.swapMacaroonPath = node.Authentication.swapMacaroonPath ? node.Authentication.swapMacaroonPath : ''; + this.common.nodes[idx].Settings.swapServerUrl = node.Settings.swapServerUrl.endsWith('/v1') ? node.Settings.swapServerUrl.slice(0, -3) : node.Settings.swapServerUrl; + this.common.nodes[idx].Authentication.swapMacaroonPath = node.Authentication.swapMacaroonPath ? node.Authentication.swapMacaroonPath : ''; } else { - this.common.nodes[idx].settings.swapServerUrl = ''; - this.common.nodes[idx].authentication.swapMacaroonPath = ''; + this.common.nodes[idx].Settings.swapServerUrl = ''; + this.common.nodes[idx].Authentication.swapMacaroonPath = ''; } if (process?.env?.BOLTZ_SERVER_URL && process?.env?.BOLTZ_SERVER_URL.trim() !== '') { - this.common.nodes[idx].settings.boltzServerUrl = process?.env?.BOLTZ_SERVER_URL.endsWith('/v1') ? process?.env?.BOLTZ_SERVER_URL.slice(0, -3) : process?.env?.BOLTZ_SERVER_URL; - this.common.nodes[idx].authentication.boltzMacaroonPath = process?.env?.BOLTZ_MACAROON_PATH; + this.common.nodes[idx].Settings.boltzServerUrl = process?.env?.BOLTZ_SERVER_URL.endsWith('/v1') ? process?.env?.BOLTZ_SERVER_URL.slice(0, -3) : process?.env?.BOLTZ_SERVER_URL; + this.common.nodes[idx].Authentication.boltzMacaroonPath = process?.env?.BOLTZ_MACAROON_PATH; } else if (node.Settings.boltzServerUrl && node.Settings.boltzServerUrl.trim() !== '') { - this.common.nodes[idx].settings.boltzServerUrl = node.Settings.boltzServerUrl.endsWith('/v1') ? node.Settings.boltzServerUrl.slice(0, -3) : node.Settings.boltzServerUrl; - this.common.nodes[idx].authentication.boltzMacaroonPath = node.Authentication.boltzMacaroonPath ? node.Authentication.boltzMacaroonPath : ''; + this.common.nodes[idx].Settings.boltzServerUrl = node.Settings.boltzServerUrl.endsWith('/v1') ? node.Settings.boltzServerUrl.slice(0, -3) : node.Settings.boltzServerUrl; + this.common.nodes[idx].Authentication.boltzMacaroonPath = node.Authentication.boltzMacaroonPath ? node.Authentication.boltzMacaroonPath : ''; } else { - this.common.nodes[idx].settings.boltzServerUrl = ''; - this.common.nodes[idx].authentication.boltzMacaroonPath = ''; + this.common.nodes[idx].Settings.boltzServerUrl = ''; + this.common.nodes[idx].Authentication.boltzMacaroonPath = ''; } - this.common.nodes[idx].settings.enableOffers = process?.env?.ENABLE_OFFERS ? process?.env?.ENABLE_OFFERS : (node.Settings.enableOffers) ? node.Settings.enableOffers : false; - this.common.nodes[idx].settings.enablePeerswap = process?.env?.ENABLE_PEERSWAP ? process?.env?.ENABLE_PEERSWAP : (node.Settings.enablePeerswap) ? node.Settings.enablePeerswap : false; - this.common.nodes[idx].settings.bitcoindConfigPath = process?.env?.BITCOIND_CONFIG_PATH ? process?.env?.BITCOIND_CONFIG_PATH : (node.Settings.bitcoindConfigPath) ? node.Settings.bitcoindConfigPath : ''; - this.common.nodes[idx].settings.channelBackupPath = process?.env?.CHANNEL_BACKUP_PATH ? process?.env?.CHANNEL_BACKUP_PATH : (node.Settings.channelBackupPath) ? node.Settings.channelBackupPath : this.common.appConfig.rtlConfFilePath + sep + 'channels-backup' + sep + 'node-' + node.index; + this.common.nodes[idx].Settings.enableOffers = process?.env?.ENABLE_OFFERS ? process?.env?.ENABLE_OFFERS : (node.Settings.enableOffers) ? node.Settings.enableOffers : false; + this.common.nodes[idx].Settings.enablePeerswap = process?.env?.ENABLE_PEERSWAP ? process?.env?.ENABLE_PEERSWAP : (node.Settings.enablePeerswap) ? node.Settings.enablePeerswap : false; + this.common.nodes[idx].Settings.bitcoindConfigPath = process?.env?.BITCOIND_CONFIG_PATH ? process?.env?.BITCOIND_CONFIG_PATH : (node.Settings.bitcoindConfigPath) ? node.Settings.bitcoindConfigPath : ''; + this.common.nodes[idx].Settings.channelBackupPath = process?.env?.CHANNEL_BACKUP_PATH ? process?.env?.CHANNEL_BACKUP_PATH : (node.Settings.channelBackupPath) ? node.Settings.channelBackupPath : this.common.appConfig.rtlConfFilePath + sep + 'channels-backup' + sep + 'node-' + node.index; try { - this.common.createDirectory(this.common.nodes[idx].settings.channelBackupPath); - const exists = fs.existsSync(this.common.nodes[idx].settings.channelBackupPath + sep + 'channel-all.bak'); + this.common.createDirectory(this.common.nodes[idx].Settings.channelBackupPath); + const exists = fs.existsSync(this.common.nodes[idx].Settings.channelBackupPath + sep + 'channel-all.bak'); if (!exists) { try { if (this.common.nodes[idx].lnImplementation === 'LND') { this.common.getAllNodeAllChannelBackup(this.common.nodes[idx]); } else { - const createStream = fs.createWriteStream(this.common.nodes[idx].settings.channelBackupPath + sep + 'channel-all.bak'); + const createStream = fs.createWriteStream(this.common.nodes[idx].Settings.channelBackupPath + sep + 'channel-all.bak'); createStream.end(); } } @@ -290,9 +290,9 @@ export class ConfigService { catch (err) { this.logger.log({ selectedNode: this.common.selectedNode, level: 'ERROR', fileName: 'Config', msg: 'Something went wrong while creating the backup directory: \n' + err }); } - this.common.nodes[idx].settings.logFile = this.common.appConfig.rtlConfFilePath + '/logs/RTL-Node-' + node.index + '.log'; + this.common.nodes[idx].Settings.logFile = this.common.appConfig.rtlConfFilePath + '/logs/RTL-Node-' + node.index + '.log'; this.logger.log({ selectedNode: this.common.selectedNode, level: 'INFO', fileName: 'Config', msg: 'Node Config: ' + JSON.stringify(this.common.nodes[idx]) }); - const log_file = this.common.nodes[idx].settings.logFile; + const log_file = this.common.nodes[idx].Settings.logFile; if (fs.existsSync(log_file || '')) { fs.writeFile((log_file || ''), '', () => { }); } diff --git a/backend/utils/logger.js b/backend/utils/logger.js index 7ce9dbb1..89b412b0 100644 --- a/backend/utils/logger.js +++ b/backend/utils/logger.js @@ -16,15 +16,15 @@ export class LoggerService { msgStr = msgStr + '.\r\n'; } console.error(msgStr); - if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } break; case 'WARN': msgStr = prepMsgData(msgJSON, msgStr); - if (!msgJSON.selectedNode || msgJSON.selectedNode.settings.logLevel === 'WARN' || msgJSON.selectedNode.settings.logLevel === 'INFO' || msgJSON.selectedNode.settings.logLevel === 'DEBUG') { - if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (!msgJSON.selectedNode || msgJSON.selectedNode.Settings.logLevel === 'WARN' || msgJSON.selectedNode.Settings.logLevel === 'INFO' || msgJSON.selectedNode.Settings.logLevel === 'DEBUG') { + if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } } break; @@ -32,18 +32,18 @@ export class LoggerService { if (!msgJSON.selectedNode && msgJSON.fileName === 'RTL') { console.log(msgStr + '.\r\n'); } - else if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logLevel === 'INFO') { + else if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logLevel === 'INFO') { msgStr = msgStr + '.\r\n'; console.log(msgStr); - if (msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } } - else if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logLevel === 'DEBUG') { + else if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logLevel === 'DEBUG') { msgStr = prepMsgData(msgJSON, msgStr); console.log(msgStr); - if (msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } } break; @@ -51,11 +51,11 @@ export class LoggerService { if (!msgJSON.selectedNode) { console.log(msgStr + '.\r\n'); } - else if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logLevel === 'DEBUG') { + else if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logLevel === 'DEBUG') { msgStr = prepMsgData(msgJSON, msgStr); console.log(msgStr); - if (msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } } break; diff --git a/server/controllers/cln/channels.ts b/server/controllers/cln/channels.ts index 62f02914..f3396e5b 100644 --- a/server/controllers/cln/channels.ts +++ b/server/controllers/cln/channels.ts @@ -11,7 +11,7 @@ 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.settings.lnServerUrl + '/v1/listpeerchannels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listpeerchannels'; 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) => { @@ -32,7 +32,7 @@ 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.settings.lnServerUrl + '/v1/fundchannel'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/fundchannel'; 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) => { @@ -48,7 +48,7 @@ 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.settings.lnServerUrl + '/v1/setchannel'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/setchannel'; 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) => { @@ -65,7 +65,7 @@ export const closeChannel = (req, res, next) => { 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 }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/close'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/close'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Closing Channel', data: options.url }); request.post(options).then((body) => { @@ -82,7 +82,7 @@ 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 }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listforwards'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listforwards'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Forwarding History Received For Status ' + status, data: body }); @@ -98,7 +98,7 @@ 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.settings.lnServerUrl + '/v1/funderupdate'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/funderupdate'; 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) => { diff --git a/server/controllers/cln/getInfo.ts b/server/controllers/cln/getInfo.ts index bdb773d9..5d727d62 100644 --- a/server/controllers/cln/getInfo.ts +++ b/server/controllers/cln/getInfo.ts @@ -16,7 +16,7 @@ export const getInfo = (req, res, next) => { common.setOptions(req); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/getinfo'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/getinfo'; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Selected Node ' + req.session.selectedNode.lnNode }); logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Calling Info from Core Lightning server url ' + options.url }); if (!options.headers || !options.headers.rune) { diff --git a/server/controllers/cln/invoices.ts b/server/controllers/cln/invoices.ts index 7ff9eee5..624c506e 100644 --- a/server/controllers/cln/invoices.ts +++ b/server/controllers/cln/invoices.ts @@ -9,7 +9,7 @@ export const deleteExpiredInvoice = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Deleting Expired Invoices..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/delexpiredinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/delexpiredinvoice'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Invoices Deleted', data: body }); @@ -24,7 +24,7 @@ export const listInvoices = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Getting Invoices..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listinvoices'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listinvoices'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Invoice', msg: 'Invoices List URL', data: options.url }); request.post(options).then((body) => { @@ -40,7 +40,7 @@ export const addInvoice = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Creating Invoice..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/invoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/invoice'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Invoice Created', data: body }); diff --git a/server/controllers/cln/network.ts b/server/controllers/cln/network.ts index 37cf8ad1..3704e67d 100644 --- a/server/controllers/cln/network.ts +++ b/server/controllers/cln/network.ts @@ -11,7 +11,7 @@ export const getRoute = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Getting Network Routes..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/getroute'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/getroute'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Network Routes Received', data: body }); @@ -29,7 +29,7 @@ export const listChannels = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Channel Lookup..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listchannels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listchannels'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Channel Lookup Finished', data: body }); @@ -45,7 +45,7 @@ export const feeRates = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Getting Network Fee Rates..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/feerates'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/feerates'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Network Fee Rates Received for ' + style, data: body }); @@ -62,7 +62,7 @@ export const listNodes = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'List Nodes..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listnodes'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listnodes'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Network', msg: 'List Nodes URL' + options.url }); request.post(options).then((body) => { @@ -79,7 +79,7 @@ export const listNodes = (req, res, next) => { }; export const getAlias = (selNode: SelectedNode, peer: any, id: string) => { - options.url = selNode.settings.lnServerUrl + '/v1/listnodes'; + options.url = selNode.Settings.lnServerUrl + '/v1/listnodes'; if (!peer[id]) { logger.log({ selectedNode: selNode, level: 'ERROR', fileName: 'Network', msg: 'Empty Peer ID' }); peer.alias = ''; diff --git a/server/controllers/cln/offers.ts b/server/controllers/cln/offers.ts index 993b852c..9ecb634d 100644 --- a/server/controllers/cln/offers.ts +++ b/server/controllers/cln/offers.ts @@ -36,7 +36,7 @@ export const listOffers = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Getting Offers..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listoffers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listoffers'; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Offers', msg: 'Offers List URL', data: options.url }); request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Offers List Received', data: body }); @@ -51,7 +51,7 @@ export const createOffer = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Creating Offer..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/offer'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/offer'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Offer Created', data: body }); @@ -66,7 +66,7 @@ export const fetchOfferInvoice = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Getting Offer Invoice..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/fetchinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/fetchinvoice'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Offers', msg: 'Offer Invoice Body', data: options.body }); request.post(options).then((body) => { @@ -82,7 +82,7 @@ export const disableOffer = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Disabling Offer..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/disableOffer'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/disableOffer'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Offer Disabled', data: body }); diff --git a/server/controllers/cln/onchain.ts b/server/controllers/cln/onchain.ts index 0495499b..da737fe0 100644 --- a/server/controllers/cln/onchain.ts +++ b/server/controllers/cln/onchain.ts @@ -9,7 +9,7 @@ export const getNewAddress = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Generating New Address..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/newaddr'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/newaddr'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'New Address Generated', data: body }); @@ -24,7 +24,7 @@ export const onChainWithdraw = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Withdrawing from On Chain..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/withdraw'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/withdraw'; options.body = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'OnChain', msg: 'OnChain Withdraw Options', data: options.body }); request.post(options).then((body) => { @@ -40,7 +40,7 @@ export const getUTXOs = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Listing Funds..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listfunds'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listfunds'; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Funds List Received', data: body }); // Local Remote Balance Calculation diff --git a/server/controllers/cln/payments.ts b/server/controllers/cln/payments.ts index fbf424aa..978b97dc 100644 --- a/server/controllers/cln/payments.ts +++ b/server/controllers/cln/payments.ts @@ -11,7 +11,7 @@ const common: CommonService = Common; const databaseService: DatabaseService = Database; export const getMemo = (selNode: SelectedNode, payment: any) => { - options.url = selNode.settings.lnServerUrl + '/v1/decode'; + options.url = selNode.Settings.lnServerUrl + '/v1/decode'; options.body = { string: payment.bolt11 }; return request.post(options).then((res) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Payments', msg: 'Payment Decode Received', data: res }); @@ -74,7 +74,7 @@ export const listPayments = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'List Payments..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listsendpays'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listsendpays'; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'Payment List Received', data: body.payments }); body.payments = body.payments && body.payments.length && body.payments.length > 0 ? groupBy(body.payments) : []; @@ -95,7 +95,7 @@ export const postPayment = (req, res, next) => { const options_body = JSON.parse(JSON.stringify(req.body)); if (paymentType === 'KEYSEND') { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Keysend Payment..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/keysend'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/keysend'; delete options_body.uiMessage; delete options_body.fromDialog; delete options_body.paymentType; @@ -134,7 +134,7 @@ export const postPayment = (req, res, next) => { delete options_body.pubkey; delete options_body.saveToDB; options.body = options_body; - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/pay'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/pay'; } request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Payment Sent', data: body }); diff --git a/server/controllers/cln/peers.ts b/server/controllers/cln/peers.ts index 2772cf40..2cb636ce 100644 --- a/server/controllers/cln/peers.ts +++ b/server/controllers/cln/peers.ts @@ -11,7 +11,7 @@ export const getPeers = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'List Peers..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listpeers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listpeers'; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peers List Received', data: body }); const peers = !body.peers ? [] : body.peers; @@ -29,12 +29,12 @@ export const postPeer = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Connecting Peer..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/connect'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/connect'; options.body = req.body; request.post(options).then((connectRes) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peer Connected', data: connectRes }); const listOptions = common.getOptions(req); - listOptions.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listpeers'; + listOptions.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listpeers'; request.post(listOptions).then((listPeersRes) => { const peers = listPeersRes && listPeersRes.peers ? common.newestOnTop(listPeersRes.peers, 'id', connectRes.id) : []; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Peers List after Connect Received', data: peers }); @@ -53,7 +53,7 @@ export const deletePeer = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Disconnecting Peer..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/disconnect'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/disconnect'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Peer Disconnected', data: body }); diff --git a/server/controllers/cln/utility.ts b/server/controllers/cln/utility.ts index 2949d40d..a83a7942 100644 --- a/server/controllers/cln/utility.ts +++ b/server/controllers/cln/utility.ts @@ -10,7 +10,7 @@ export const decodePayment = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Decoding Payment..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/decode'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/decode'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Payment Decoded', data: body }); @@ -25,7 +25,7 @@ export const signMessage = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Message', msg: 'Signing Message..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/signmessage'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/signmessage'; options.body = req.body; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Message', msg: 'Message Signed', data: body }); @@ -40,7 +40,7 @@ export const verifyMessage = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Message', msg: 'Verifying Message..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/checkmessage'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/checkmessage'; options.body = req.body; request.post(options, (error, response, body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Message', msg: 'Message Verified', data: body }); @@ -55,7 +55,7 @@ export const listConfigs = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Utility', msg: 'List Configs..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/listconfigs'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/listconfigs'; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Utility', msg: 'List Configs Received', data: body }); res.status(200).json(body); diff --git a/server/controllers/cln/webSocketClient.ts b/server/controllers/cln/webSocketClient.ts index 25100a20..8a187593 100644 --- a/server/controllers/cln/webSocketClient.ts +++ b/server/controllers/cln/webSocketClient.ts @@ -38,13 +38,13 @@ export class CLWebSocketClient { try { const clientExists = this.webSocketClients.find((wsc) => wsc.selectedNode.index === selectedNode.index); if (!clientExists) { - if (selectedNode.settings.lnServerUrl) { + if (selectedNode.Settings.lnServerUrl) { const newWebSocketClient = { selectedNode: selectedNode, reConnect: true, webSocketClient: null }; this.connectWithClient(newWebSocketClient); this.webSocketClients.push(newWebSocketClient); } } else { - if ((!clientExists.webSocketClient || !clientExists.webSocketClient.connected) && selectedNode.settings.lnServerUrl) { + if ((!clientExists.webSocketClient || !clientExists.webSocketClient.connected) && selectedNode.Settings.lnServerUrl) { clientExists.reConnect = true; this.connectWithClient(clientExists); } @@ -57,11 +57,11 @@ export class CLWebSocketClient { public connectWithClient = (clWsClt) => { this.logger.log({ selectedNode: clWsClt.selectedNode, level: 'INFO', fileName: 'CLWebSocket', msg: 'Connecting to the Core Lightning\'s Websocket Server..' }); try { - if (!clWsClt.selectedNode.authentication.runeValue) { - clWsClt.selectedNode.authentication.runeValue = this.common.getRuneValue(clWsClt.selectedNode.authentication.runePath); + if (!clWsClt.selectedNode.Authentication.runeValue) { + clWsClt.selectedNode.Authentication.runeValue = this.common.getRuneValue(clWsClt.selectedNode.Authentication.runePath); } - clWsClt.webSocketClient = socketIOClient(clWsClt.selectedNode.settings.lnServerUrl, { - extraHeaders: { rune: clWsClt.selectedNode.authentication.runeValue }, + clWsClt.webSocketClient = socketIOClient(clWsClt.selectedNode.Settings.lnServerUrl, { + extraHeaders: { rune: clWsClt.selectedNode.Authentication.runeValue }, transports: ['websocket'], secure: true, rejectUnauthorized: false diff --git a/server/controllers/eclair/channels.ts b/server/controllers/eclair/channels.ts index 2451d34c..31b3b233 100644 --- a/server/controllers/eclair/channels.ts +++ b/server/controllers/eclair/channels.ts @@ -30,7 +30,7 @@ export const simplifyAllChannels = (selNode: SelectedNode, channels) => { }); }); channelNodeIds = channelNodeIds.substring(1); - options.url = selNode.settings.lnServerUrl + '/nodes'; + options.url = selNode.Settings.lnServerUrl + '/nodes'; options.form = { nodeIds: channelNodeIds }; logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Channels', msg: 'Node Ids to find alias', data: channelNodeIds }); return request.post(options).then((nodes) => { @@ -49,7 +49,7 @@ export const getChannels = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'List 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.settings.lnServerUrl + '/channels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/channels'; options.form = {}; if (req.query && req.query.nodeId) { options.form = req.query; @@ -82,7 +82,7 @@ export const getChannelStats = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Getting Channel States..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/channelstats'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/channelstats'; const today = new Date(Date.now()); const tillToday = (Math.round(today.getTime() / 1000)).toString(); const fromLastMonth = (Math.round(new Date(today.getFullYear(), today.getMonth() - 1, today.getDate() + 1, 0, 0, 0).getTime() / 1000)).toString(); @@ -103,7 +103,7 @@ 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.settings.lnServerUrl + '/open'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/open'; options.form = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Open Channel Params', data: options.form }); request.post(options).then((body) => { @@ -119,7 +119,7 @@ export const updateChannelRelayFee = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Updating Channel Relay 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.settings.lnServerUrl + '/updaterelayfee'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/updaterelayfee'; options.form = req.query; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Update Relay Fee Params', data: options.form }); request.post(options).then((body) => { @@ -136,10 +136,10 @@ export const closeChannel = (req, res, next) => { if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } if (req.query.force !== 'true') { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Closing Channel..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/close'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/close'; } else { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Force Closing Channel..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/forceclose'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/forceclose'; } options.form = { channelId: req.query.channelId }; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Close URL', data: options.url }); diff --git a/server/controllers/eclair/fees.ts b/server/controllers/eclair/fees.ts index e4c62b5e..3ada9385 100644 --- a/server/controllers/eclair/fees.ts +++ b/server/controllers/eclair/fees.ts @@ -84,7 +84,7 @@ export const getFees = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Fees', msg: 'Getting Fees..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/audit'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/audit'; const today = new Date(Date.now()); const tillToday = (Math.round(today.getTime() / 1000)).toString(); const fromLastMonth = (Math.round(new Date(today.getFullYear(), today.getMonth() - 1, today.getDate() + 1, 0, 0, 0).getTime() / 1000)).toString(); @@ -110,7 +110,7 @@ export const getPayments = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Fees', msg: 'Getting Payments..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/audit'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/audit'; const tillToday = (Math.round(new Date(Date.now()).getTime() / 1000)).toString(); options.form = { from: 0, to: tillToday }; if (common.read_dummy_data) { diff --git a/server/controllers/eclair/getInfo.ts b/server/controllers/eclair/getInfo.ts index ad7a0b3f..9a3fcc98 100644 --- a/server/controllers/eclair/getInfo.ts +++ b/server/controllers/eclair/getInfo.ts @@ -16,7 +16,7 @@ export const getInfo = (req, res, next) => { common.setOptions(req); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/getinfo'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/getinfo'; options.form = {}; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Selected Node ' + req.session.selectedNode.lnNode }); logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Calling Info from Eclair server url ' + options.url }); diff --git a/server/controllers/eclair/invoices.ts b/server/controllers/eclair/invoices.ts index eaa8e2b3..c94473b2 100644 --- a/server/controllers/eclair/invoices.ts +++ b/server/controllers/eclair/invoices.ts @@ -37,7 +37,7 @@ export const getInvoice = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Getting Invoice..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/getinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/getinvoice'; options.form = { paymentHash: req.params.paymentHash }; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Invoice Found', data: body }); @@ -54,8 +54,8 @@ export const getInvoice = (req, res, next) => { export const listPendingInvoicesRequestCall = (selectedNode: SelectedNode) => { logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'List Pending Invoices..' }); - options = selectedNode.authentication.options; - options.url = selectedNode.settings.lnServerUrl + '/listpendinginvoices'; + options = selectedNode.Authentication.options; + options.url = selectedNode.Settings.lnServerUrl + '/listpendinginvoices'; options.form = { from: 0, to: (Math.round(new Date(Date.now()).getTime() / 1000)).toString() }; return new Promise((resolve, reject) => { request.post(options).then((pendingInvoicesResponse) => { @@ -74,16 +74,16 @@ export const listInvoices = (req, res, next) => { const tillToday = (Math.round(new Date(Date.now()).getTime() / 1000)).toString(); options.form = { from: 0, to: tillToday }; const options1 = JSON.parse(JSON.stringify(options)); - options1.url = req.session.selectedNode.settings.lnServerUrl + '/listinvoices'; + options1.url = req.session.selectedNode.Settings.lnServerUrl + '/listinvoices'; options1.form = { from: 0, to: tillToday }; const options2 = JSON.parse(JSON.stringify(options)); - options2.url = req.session.selectedNode.settings.lnServerUrl + '/listpendinginvoices'; + options2.url = req.session.selectedNode.Settings.lnServerUrl + '/listpendinginvoices'; options2.form = { from: 0, to: tillToday }; if (common.read_dummy_data) { return common.getDummyData('Invoices', req.session.selectedNode.lnImplementation).then((body) => { const invoices = (!body[0] || body[0].length <= 0) ? [] : body[0]; pendingInvoices = (!body[1] || body[1].length <= 0) ? [] : body[1]; - return Promise.all(invoices?.map((invoice) => getReceivedPaymentInfo(req.session.selectedNode.settings.lnServerUrl, invoice))). + return Promise.all(invoices?.map((invoice) => getReceivedPaymentInfo(req.session.selectedNode.Settings.lnServerUrl, invoice))). then((values) => res.status(200).json(invoices)); }); } else { @@ -93,7 +93,7 @@ export const listInvoices = (req, res, next) => { const invoices = (!body[0] || body[0].length <= 0) ? [] : body[0]; pendingInvoices = (!body[1] || body[1].length <= 0) ? [] : body[1]; if (invoices && invoices.length > 0) { - return Promise.all(invoices?.map((invoice) => getReceivedPaymentInfo(req.session.selectedNode.settings.lnServerUrl, invoice))). + return Promise.all(invoices?.map((invoice) => getReceivedPaymentInfo(req.session.selectedNode.Settings.lnServerUrl, invoice))). then((values) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Sorted Invoices List Received', data: invoices }); return res.status(200).json(invoices); @@ -116,8 +116,8 @@ export const listInvoices = (req, res, next) => { export const createInvoiceRequestCall = (selectedNode: SelectedNode, description: string, amount: number) => { logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Creating Invoice..' }); - options = selectedNode.authentication.options; - options.url = selectedNode.settings.lnServerUrl + '/createinvoice'; + options = selectedNode.Authentication.options; + options.url = selectedNode.Settings.lnServerUrl + '/createinvoice'; options.form = { description: description, amountMsat: amount }; return new Promise((resolve, reject) => { request.post(options).then((invResponse) => { diff --git a/server/controllers/eclair/network.ts b/server/controllers/eclair/network.ts index 934ec5f7..5011fef4 100644 --- a/server/controllers/eclair/network.ts +++ b/server/controllers/eclair/network.ts @@ -10,7 +10,7 @@ export const getNodes = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Node Lookup..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/nodes'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/nodes'; options.form = { nodeIds: req.params.id }; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Network', msg: 'Node Lookup Finished', data: body }); @@ -23,8 +23,8 @@ export const getNodes = (req, res, next) => { export const findRouteBetweenNodesRequestCall = (selectedNode: SelectedNode, amountMsat: number, sourceNodeId: string, targetNodeId: string, ignoreNodeIds: string[] = [], format: string = 'shortChannelId') => { logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'Network', msg: 'Find Route Between Nodes..' }); - options = selectedNode.authentication.options; - options.url = selectedNode.settings.lnServerUrl + '/findroutebetweennodes'; + options = selectedNode.Authentication.options; + options.url = selectedNode.Settings.lnServerUrl + '/findroutebetweennodes'; options.form = { amountMsat: amountMsat, sourceNodeId: sourceNodeId, targetNodeId: targetNodeId, ignoreNodeIds: ignoreNodeIds, format: format }; return new Promise((resolve, reject) => { request.post(options).then((body) => { diff --git a/server/controllers/eclair/onchain.ts b/server/controllers/eclair/onchain.ts index 4da0b24a..b17dfa54 100644 --- a/server/controllers/eclair/onchain.ts +++ b/server/controllers/eclair/onchain.ts @@ -17,7 +17,7 @@ export const getNewAddress = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Generating New Address..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/getnewaddress'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/getnewaddress'; options.form = {}; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'New Address Generated', data: body }); @@ -32,7 +32,7 @@ export const getBalance = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Getting On Chain Balance..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/onchainbalance'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/onchainbalance'; options.form = {}; if (common.read_dummy_data) { common.getDummyData('OnChainBalance', req.session.selectedNode.lnImplementation).then((data) => { res.status(200).json(arrangeBalances(data)); }); @@ -52,7 +52,7 @@ export const getTransactions = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Getting On Chain Transactions..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/onchaintransactions'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/onchaintransactions'; options.form = { count: req.query.count, skip: req.query.skip @@ -72,7 +72,7 @@ export const sendFunds = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'OnChain', msg: 'Sending On Chain Funds..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/sendonchain'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/sendonchain'; options.form = { address: address, amountSatoshis: amount, confirmationTarget: blocks }; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Onchain', msg: 'Send Funds Options', data: options.form }); request.post(options).then((body) => { diff --git a/server/controllers/eclair/payments.ts b/server/controllers/eclair/payments.ts index 80339325..25404ae2 100644 --- a/server/controllers/eclair/payments.ts +++ b/server/controllers/eclair/payments.ts @@ -7,7 +7,7 @@ const logger: LoggerService = Logger; const common: CommonService = Common; export const getSentInfoFromPaymentRequest = (selNode: SelectedNode, payment) => { - options.url = selNode.settings.lnServerUrl + '/getsentinfo'; + options.url = selNode.Settings.lnServerUrl + '/getsentinfo'; options.form = { paymentHash: payment }; return request.post(options).then((body) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Payments', msg: 'Payment Sent Information Received', data: body }); @@ -20,7 +20,7 @@ export const getSentInfoFromPaymentRequest = (selNode: SelectedNode, payment) => }; export const getQueryNodes = (selNode: SelectedNode, nodeIds) => { - options.url = selNode.settings.lnServerUrl + '/nodes'; + options.url = selNode.Settings.lnServerUrl + '/nodes'; options.form = { nodeIds: nodeIds?.reduce((acc, curr) => acc + ',' + curr) }; return request.post(options).then((nodes) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Payments', msg: 'Query Nodes Received', data: nodes }); @@ -32,7 +32,7 @@ export const decodePayment = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Decoding Payment..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/parseinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/parseinvoice'; options.form = { invoice: req.params.invoice }; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Payment Decoded', data: body }); @@ -48,7 +48,7 @@ export const postPayment = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Paying Invoice..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/payinvoice'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/payinvoice'; options.form = req.body; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'Send Payment Options', data: options.form }); request.post(options).then((body) => { @@ -64,7 +64,7 @@ export const queryPaymentRoute = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Querying Payment Route..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/findroutetonode'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/findroutetonode'; options.form = { nodeId: req.query.nodeId, amountMsat: req.query.amountMsat @@ -121,8 +121,8 @@ export const getSentPaymentsInformation = (req, res, next) => { export const sendPaymentToRouteRequestCall = (selectedNode: SelectedNode, shortChannelIds: string, invoice: string, amountMsat: number) => { logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'Invoices', msg: 'Creating Invoice..' }); - options = selectedNode.authentication.options; - options.url = selectedNode.settings.lnServerUrl + '/sendtoroute'; + options = selectedNode.Authentication.options; + options.url = selectedNode.Settings.lnServerUrl + '/sendtoroute'; options.form = { shortChannelIds: shortChannelIds, amountMsat: amountMsat, invoice: invoice }; return new Promise((resolve, reject) => { logger.log({ selectedNode: selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'Send Payment To Route Options', data: options.form }); diff --git a/server/controllers/eclair/peers.ts b/server/controllers/eclair/peers.ts index 2690774d..fee841a7 100644 --- a/server/controllers/eclair/peers.ts +++ b/server/controllers/eclair/peers.ts @@ -7,7 +7,7 @@ const logger: LoggerService = Logger; const common: CommonService = Common; export const getFilteredNodes = (selNode: SelectedNode, peersNodeIds) => { - options.url = selNode.settings.lnServerUrl + '/nodes'; + options.url = selNode.Settings.lnServerUrl + '/nodes'; options.form = { nodeIds: peersNodeIds }; return request.post(options).then((nodes) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Peers', msg: 'Filtered Nodes Received', data: nodes }); @@ -19,7 +19,7 @@ export const getPeers = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Getting Peers..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/peers'; options.form = {}; if (common.read_dummy_data) { common.getDummyData('Peers', req.session.selectedNode.lnImplementation).then((data) => { res.status(200).json(data); }); @@ -56,7 +56,7 @@ export const connectPeer = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Conneting Peer..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/connect'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/connect'; options.form = {}; if (req.query) { options.form = req.query; @@ -71,7 +71,7 @@ export const connectPeer = (req, res, next) => { const err = common.handleError({ statusCode: 500, message: 'Connect Peer Error', error: body }, 'Peers', body, req.session.selectedNode); return res.status(err.statusCode).json({ message: err.message, error: err.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/peers'; options.form = {}; request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peers List after Connect', data: body }); @@ -107,7 +107,7 @@ export const deletePeer = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Disconneting Peer..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/disconnect'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/disconnect'; options.form = {}; if (req.params.nodeId) { options.form = { nodeId: req.params.nodeId }; diff --git a/server/controllers/eclair/webSocketClient.ts b/server/controllers/eclair/webSocketClient.ts index 218d284d..8d114d44 100644 --- a/server/controllers/eclair/webSocketClient.ts +++ b/server/controllers/eclair/webSocketClient.ts @@ -40,13 +40,13 @@ export class ECLWebSocketClient { try { const clientExists = this.webSocketClients.find((wsc) => wsc.selectedNode.index === selectedNode.index); if (!clientExists) { - if (selectedNode.settings.lnServerUrl) { + if (selectedNode.Settings.lnServerUrl) { const newWebSocketClient = { selectedNode: selectedNode, reConnect: true, webSocketClient: null }; this.connectWithClient(newWebSocketClient); this.webSocketClients.push(newWebSocketClient); } } else { - if ((!clientExists.webSocketClient || clientExists.webSocketClient.readyState !== WebSocket.OPEN) && selectedNode.settings.lnServerUrl) { + if ((!clientExists.webSocketClient || clientExists.webSocketClient.readyState !== WebSocket.OPEN) && selectedNode.Settings.lnServerUrl) { clientExists.reConnect = true; this.connectWithClient(clientExists); } @@ -58,9 +58,9 @@ export class ECLWebSocketClient { public connectWithClient = (eclWsClt) => { this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'INFO', fileName: 'ECLWebSocket', msg: 'Connecting to the Eclair\'s Websocket Server..' }); - const UpdatedLNServerURL = (eclWsClt.selectedNode.settings.lnServerUrl)?.replace(/^http/, 'ws'); + const UpdatedLNServerURL = (eclWsClt.selectedNode.Settings.lnServerUrl)?.replace(/^http/, 'ws'); const firstSubStrIndex = (UpdatedLNServerURL.indexOf('//') + 2); - const WS_LINK = UpdatedLNServerURL.slice(0, firstSubStrIndex) + ':' + eclWsClt.selectedNode.authentication.lnApiPassword + '@' + UpdatedLNServerURL.slice(firstSubStrIndex) + '/ws'; + const WS_LINK = UpdatedLNServerURL.slice(0, firstSubStrIndex) + ':' + eclWsClt.selectedNode.Authentication.lnApiPassword + '@' + UpdatedLNServerURL.slice(firstSubStrIndex) + '/ws'; eclWsClt.webSocketClient = new WebSocket(WS_LINK); eclWsClt.webSocketClient.onopen = () => { this.logger.log({ selectedNode: eclWsClt.selectedNode, level: 'INFO', fileName: 'ECLWebSocket', msg: 'Connected to the Eclair\'s Websocket Server..' }); diff --git a/server/controllers/lnd/balance.ts b/server/controllers/lnd/balance.ts index fde5efa8..3009d207 100644 --- a/server/controllers/lnd/balance.ts +++ b/server/controllers/lnd/balance.ts @@ -9,7 +9,7 @@ export const getBlockchainBalance = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Balance', msg: 'Getting Balance..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/balance/blockchain'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/balance/blockchain'; options.qs = req.query; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Balance', msg: 'Request params', data: req.params }); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Balance', msg: 'Request Query', data: req.query }); diff --git a/server/controllers/lnd/channels.ts b/server/controllers/lnd/channels.ts index 76e196c4..8ab1087a 100644 --- a/server/controllers/lnd/channels.ts +++ b/server/controllers/lnd/channels.ts @@ -8,7 +8,7 @@ const common: CommonService = Common; export const getAliasForChannel = (selNode: SelectedNode, channel) => { const pubkey = (channel.remote_pubkey) ? channel.remote_pubkey : (channel.remote_node_pub) ? channel.remote_node_pub : ''; - options.url = selNode.settings.lnServerUrl + '/v1/graph/node/' + pubkey; + options.url = selNode.Settings.lnServerUrl + '/v1/graph/node/' + pubkey; return request(options).then((aliasBody) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Channels', msg: 'Alias Received', data: aliasBody.node.alias }); channel.remote_alias = aliasBody.node.alias && aliasBody.node.alias !== '' ? aliasBody.node.alias : aliasBody.node.pub_key.slice(0, 20); @@ -23,7 +23,7 @@ export const getAllChannels = (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 }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels'; options.qs = req.query; let local = 0; let remote = 0; @@ -61,7 +61,7 @@ export const getPendingChannels = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Getting Pending 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.settings.lnServerUrl + '/v1/channels/pending'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/pending'; options.qs = req.query; request(options).then((body) => { if (!body.total_limbo_balance) { @@ -98,7 +98,7 @@ export const getClosedChannels = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Getting Closed 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.settings.lnServerUrl + '/v1/channels/closed'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/closed'; options.qs = req.query; request(options).then((body) => { if (body.channels && body.channels.length > 0) { @@ -129,7 +129,7 @@ export const postChannel = (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.settings.lnServerUrl + '/v1/channels'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels'; options.form = { node_pubkey_string: node_pubkey, local_funding_amount: local_funding_amount, @@ -160,7 +160,7 @@ export const postTransactions = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Sending Payment..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/transaction-stream'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/transaction-stream'; options.form = { payment_request: paymentReq }; if (paymentAmount) { options.form.amt = paymentAmount; @@ -196,7 +196,7 @@ export const closeChannel = (req, res, next) => { options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } const channelpoint = req.params.channelPoint?.replace(':', '/'); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/' + channelpoint + '?force=' + req.query.force; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/' + channelpoint + '?force=' + req.query.force; if (req.query.target_conf) { options.url = options.url + '&target_conf=' + req.query.target_conf; } if (req.query.sat_per_byte) { options.url = options.url + '&sat_per_byte=' + req.query.sat_per_byte; } logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Channels', msg: 'Closing Channel Options URL', data: options.url }); @@ -214,7 +214,7 @@ export const postChanPolicy = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Channels', msg: 'Updating Channel 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.settings.lnServerUrl + '/v1/chanpolicy'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/chanpolicy'; if (chanPoint === 'all') { options.form = JSON.stringify({ global: true, diff --git a/server/controllers/lnd/channelsBackup.ts b/server/controllers/lnd/channelsBackup.ts index 82eb0e95..b9dae43b 100644 --- a/server/controllers/lnd/channelsBackup.ts +++ b/server/controllers/lnd/channelsBackup.ts @@ -39,14 +39,14 @@ export const getBackup = (req, res, next) => { let channel_backup_file = ''; let message = ''; if (req.params.channelPoint === 'ALL') { - channel_backup_file = req.session.selectedNode.settings.channelBackupPath + sep + 'channel-all.bak'; + channel_backup_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-all.bak'; message = 'All Channels Backup Successful.'; - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/backup'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/backup'; } else { - channel_backup_file = req.session.selectedNode.settings.channelBackupPath + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; + channel_backup_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; message = 'Channel Backup Successful.'; const channelpoint = req.params.channelPoint?.replace(':', '/'); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/backup/' + channelpoint; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/backup/' + channelpoint; const exists = fs.existsSync(channel_backup_file); if (exists) { fs.writeFile(channel_backup_file, '', () => { }); @@ -81,13 +81,13 @@ export const postBackupVerify = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'ChannelBackup', msg: 'Verifying Channel Backup..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/backup/verify'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/backup/verify'; let channel_verify_file = ''; let message = ''; let verify_backup = ''; if (req.params.channelPoint === 'ALL') { message = 'All Channels Verify Successful.'; - channel_verify_file = req.session.selectedNode.settings.channelBackupPath + sep + 'channel-all.bak'; + channel_verify_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-all.bak'; const exists = fs.existsSync(channel_verify_file); if (exists) { verify_backup = fs.readFileSync(channel_verify_file, 'utf-8'); @@ -108,7 +108,7 @@ export const postBackupVerify = (req, res, next) => { } } else { message = 'Channel Verify Successful.'; - channel_verify_file = req.session.selectedNode.settings.channelBackupPath + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; + channel_verify_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; const exists = fs.existsSync(channel_verify_file); if (exists) { verify_backup = fs.readFileSync(channel_verify_file, 'utf-8'); @@ -136,13 +136,13 @@ export const postRestore = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'ChannelBackup', msg: 'Restoring Channel Backup..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/channels/backup/restore'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/channels/backup/restore'; let channel_restore_file = ''; let message = ''; let restore_backup = ''; if (req.params.channelPoint === 'ALL') { message = 'All Channels Restore Successful.'; - channel_restore_file = req.session.selectedNode.settings.channelBackupPath + sep + 'restore' + sep; + channel_restore_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'restore' + sep; const exists = fs.existsSync(channel_restore_file + 'channel-all.bak'); const downloaded_exists = fs.existsSync(channel_restore_file + 'backup-channel-all.bak'); if (exists) { @@ -173,7 +173,7 @@ export const postRestore = (req, res, next) => { } } else { message = 'Channel Restore Successful.'; - channel_restore_file = req.session.selectedNode.settings.channelBackupPath + sep + 'restore' + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; + channel_restore_file = req.session.selectedNode.Settings.channelBackupPath + sep + 'restore' + sep + 'channel-' + req.params.channelPoint?.replace(':', '-') + '.bak'; const exists = fs.existsSync(channel_restore_file); if (exists) { restore_backup = fs.readFileSync(channel_restore_file, 'utf-8'); @@ -190,7 +190,7 @@ export const postRestore = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'ChannelBackup', msg: 'Channel Restored', data: body }); if (req.params.channelPoint === 'ALL') { channel_restore_file = channel_restore_file + 'channel-all.bak'; } fs.rename(channel_restore_file, channel_restore_file + '.restored', () => { - getFilesList(req.session.selectedNode.settings.channelBackupPath, (getFilesListRes) => { + getFilesList(req.session.selectedNode.Settings.channelBackupPath, (getFilesListRes) => { if (getFilesListRes.error) { const errMsg = getFilesListRes.error; const err = common.handleError({ statusCode: 500, message: 'Restore Channel Error', error: errMsg }, 'ChannelBackup', errMsg, req.session.selectedNode); @@ -210,7 +210,7 @@ export const postRestore = (req, res, next) => { }; export const getRestoreList = (req, res, next) => { - getFilesList(req.session.selectedNode.settings.channelBackupPath, (getFilesListRes) => { + getFilesList(req.session.selectedNode.Settings.channelBackupPath, (getFilesListRes) => { if (getFilesListRes.error) { return res.status(getFilesListRes.statusCode).json(getFilesListRes); } else { diff --git a/server/controllers/lnd/fees.ts b/server/controllers/lnd/fees.ts index 428b1a41..50976d2e 100644 --- a/server/controllers/lnd/fees.ts +++ b/server/controllers/lnd/fees.ts @@ -10,7 +10,7 @@ export const getFees = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Fees', msg: 'Getting Fees..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/fees'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/fees'; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Fees', msg: 'Fee Received', data: body }); const today = new Date(Date.now()); diff --git a/server/controllers/lnd/getInfo.ts b/server/controllers/lnd/getInfo.ts index ad686995..c3e38300 100644 --- a/server/controllers/lnd/getInfo.ts +++ b/server/controllers/lnd/getInfo.ts @@ -16,7 +16,7 @@ export const getInfo = (req, res, next) => { common.setOptions(req); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/getinfo'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/getinfo'; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Selected Node ' + req.session.selectedNode.lnNode }); logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'GetInfo', msg: 'Calling Info from LND server url ' + options.url }); if (!options.headers || !options.headers['Grpc-Metadata-macaroon']) { diff --git a/server/controllers/lnd/graph.ts b/server/controllers/lnd/graph.ts index 6f5ff67b..38d50874 100644 --- a/server/controllers/lnd/graph.ts +++ b/server/controllers/lnd/graph.ts @@ -7,7 +7,7 @@ const logger: LoggerService = Logger; const common: CommonService = Common; export const getAliasFromPubkey = (selNode: SelectedNode, pubkey) => { - options.url = selNode.settings.lnServerUrl + '/v1/graph/node/' + pubkey; + options.url = selNode.Settings.lnServerUrl + '/v1/graph/node/' + pubkey; return request(options).then((res) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Graph', msg: 'Alias Received', data: res.node.alias }); return res.node.alias; @@ -19,7 +19,7 @@ export const getDescribeGraph = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Getting Network Graph..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph'; request.get(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Network Graph Received', data: body }); res.status(200).json(body); @@ -33,7 +33,7 @@ export const getGraphInfo = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Getting Graph Information..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/info'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/info'; request.get(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Graph Information Received', data: body }); res.status(200).json(body); @@ -47,7 +47,7 @@ export const getGraphNode = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Getting Graph Node Information..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/node/' + req.params.pubKey; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/node/' + req.params.pubKey; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Graph Node Information Received', data: body }); res.status(200).json(body); @@ -61,7 +61,7 @@ export const getGraphEdge = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Getting Graph Edge Information..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/edge/' + req.params.chanid; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/edge/' + req.params.chanid; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Graph Edge Information Received', data: body }); res.status(200).json(body); @@ -75,7 +75,7 @@ export const getQueryRoutes = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Getting Graph Routes..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/graph/routes/' + req.params.destPubkey + '/' + req.params.amount; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/routes/' + req.params.destPubkey + '/' + req.params.amount; if (req.query.outgoing_chan_id) { options.url = options.url + '?outgoing_chan_id=' + req.query.outgoing_chan_id; } @@ -111,7 +111,7 @@ export const getRemoteFeePolicy = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Graph', msg: 'Getting Remote Fee 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.settings.lnServerUrl + '/v1/graph/edge/' + req.params.chanid; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/graph/edge/' + req.params.chanid; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Graph', msg: 'Edge Info Received', data: body }); let remoteNodeFee = {}; diff --git a/server/controllers/lnd/invoices.ts b/server/controllers/lnd/invoices.ts index 2897689f..55e78415 100644 --- a/server/controllers/lnd/invoices.ts +++ b/server/controllers/lnd/invoices.ts @@ -12,7 +12,7 @@ export const invoiceLookup = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Getting Invoice Information..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/invoices/lookup'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/invoices/lookup'; if (req.query.payment_addr) { options.url = options.url + '?payment_addr=' + req.query.payment_addr; } else { @@ -34,7 +34,7 @@ export const listInvoices = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Getting List Invoices..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/invoices?num_max_invoices=' + req.query.num_max_invoices + '&index_offset=' + req.query.index_offset + + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/invoices?num_max_invoices=' + req.query.num_max_invoices + '&index_offset=' + req.query.index_offset + '&reversed=' + req.query.reversed; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Invoice', msg: 'Invoices List Received', data: body }); @@ -57,7 +57,7 @@ export const addInvoice = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Adding Invoice..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/invoices'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/invoices'; options.form = JSON.stringify(req.body); request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Invoice', msg: 'Invoice Added', data: body }); diff --git a/server/controllers/lnd/message.ts b/server/controllers/lnd/message.ts index 864dddd4..1fe35f42 100644 --- a/server/controllers/lnd/message.ts +++ b/server/controllers/lnd/message.ts @@ -10,7 +10,7 @@ export const signMessage = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Message', msg: 'Signing Message..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/signmessage'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/signmessage'; options.form = JSON.stringify({ msg: Buffer.from(message).toString('base64') }); @@ -28,7 +28,7 @@ export const verifyMessage = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Message', msg: 'Verifying Message..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/verifymessage'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/verifymessage'; options.form = JSON.stringify({ msg: Buffer.from(message).toString('base64'), signature: signature diff --git a/server/controllers/lnd/newAddress.ts b/server/controllers/lnd/newAddress.ts index cbeb6fc8..0f3725e1 100644 --- a/server/controllers/lnd/newAddress.ts +++ b/server/controllers/lnd/newAddress.ts @@ -9,7 +9,7 @@ export const getNewAddress = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'NewAddress', msg: 'Getting New Address..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/newaddress?type=' + req.query.type; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/newaddress?type=' + req.query.type; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'NewAddress', msg: 'New Address Generated', data: body }); res.status(200).json(body); diff --git a/server/controllers/lnd/payments.ts b/server/controllers/lnd/payments.ts index dd927271..8ea44870 100644 --- a/server/controllers/lnd/payments.ts +++ b/server/controllers/lnd/payments.ts @@ -8,7 +8,7 @@ const logger: LoggerService = Logger; const common: CommonService = Common; export const decodePaymentFromPaymentRequest = (selNode: SelectedNode, payment) => { - options.url = selNode.settings.lnServerUrl + '/v1/payreq/' + payment; + options.url = selNode.Settings.lnServerUrl + '/v1/payreq/' + payment; return request(options).then((res) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'PayReq', msg: 'Description Received', data: res.description }); return res; @@ -19,7 +19,7 @@ export const decodePayment = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'PayRequest', msg: 'Decoding Payment..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/payreq/' + req.params.payRequest; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/payreq/' + req.params.payRequest; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'PayRequest', msg: 'Payment Decoded', data: body }); res.status(200).json(body); @@ -55,7 +55,7 @@ export const getPayments = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Getting Payments List..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/payments?max_payments=' + req.query.max_payments + '&index_offset=' + req.query.index_offset + '&reversed=' + req.query.reversed; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/payments?max_payments=' + req.query.max_payments + '&index_offset=' + req.query.index_offset + '&reversed=' + req.query.reversed; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'Payment List Received', data: body }); res.status(200).json(body); @@ -69,8 +69,8 @@ export const getAllLightningTransactions = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Getting All Lightning Transactions..' }); const options1 = JSON.parse(JSON.stringify(common.getOptions(req))); const options2 = JSON.parse(JSON.stringify(common.getOptions(req))); - // options1.url = req.session.selectedNode.settings.lnServerUrl + '/v1/payments?max_payments=100000&index_offset=0&reversed=true'; - options2.url = req.session.selectedNode.settings.lnServerUrl + '/v1/invoices?num_max_invoices=100000&index_offset=0&reversed=true'; + // options1.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/payments?max_payments=100000&index_offset=0&reversed=true'; + options2.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/invoices?num_max_invoices=100000&index_offset=0&reversed=true'; logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'All Payments Options', data: options1 }); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Payments', msg: 'All Invoices Options', data: options2 }); // return Promise.all([request(options1), request(options2)]).then((values) => { @@ -87,7 +87,7 @@ export const paymentLookup = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Looking up Payment..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/router/track/' + req.params.paymentHash; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/router/track/' + req.params.paymentHash; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Payments', msg: 'Payment Information Received for ' + req.params.paymentHash, data: body }); res.status(200).json(body.result || body); diff --git a/server/controllers/lnd/peers.ts b/server/controllers/lnd/peers.ts index 0723ea03..254fe8af 100644 --- a/server/controllers/lnd/peers.ts +++ b/server/controllers/lnd/peers.ts @@ -7,7 +7,7 @@ const logger: LoggerService = Logger; const common: CommonService = Common; export const getAliasForPeers = (selNode: SelectedNode, peer) => { - options.url = selNode.settings.lnServerUrl + '/v1/graph/node/' + peer.pub_key; + options.url = selNode.Settings.lnServerUrl + '/v1/graph/node/' + peer.pub_key; return request(options).then((aliasBody) => { logger.log({ selectedNode: selNode, level: 'DEBUG', fileName: 'Peers', msg: 'Alias Received', data: aliasBody.node.alias }); peer.alias = aliasBody.node.alias; @@ -22,7 +22,7 @@ export const getPeers = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Getting Peers..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/peers'; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peers List Received', data: body }); const peers = !body.peers ? [] : body.peers; @@ -41,14 +41,14 @@ export const postPeer = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Connecting Peer..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/peers'; options.form = JSON.stringify({ addr: { host: host, pubkey: pubkey }, perm: perm }); request.post(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Peers', msg: 'Peer Connected', data: body }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/peers'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/peers'; request(options).then((body) => { const peers = (!body.peers) ? [] : body.peers; return Promise.all(peers?.map((peer) => getAliasForPeers(req.session.selectedNode, peer))).then((values) => { @@ -75,7 +75,7 @@ export const deletePeer = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Disconnecting Peer..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/peers/' + req.params.peerPubKey; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/peers/' + req.params.peerPubKey; logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Peer Disconnect Pubkey', data: req.params.peerPubKey }); request.delete(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Peers', msg: 'Peer Disconneted', data: body }); diff --git a/server/controllers/lnd/switch.ts b/server/controllers/lnd/switch.ts index be755263..17fb0fe4 100644 --- a/server/controllers/lnd/switch.ts +++ b/server/controllers/lnd/switch.ts @@ -25,7 +25,7 @@ export const getAllForwardingEvents = (req, start, end, offset, caller, callback const err = common.handleError({ message: 'Session Expired after a day\'s inactivity.', statusCode: 401 }, 'Balance', 'Get Balance Error', req.session.selectedNode); return callback({ message: err.message, error: err.error, statusCode: err.statusCode }); } options = common.getOptions(req); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/switch'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/switch'; options.form = {}; if (start) { options.form.start_time = start; } if (end) { options.form.end_time = end; } diff --git a/server/controllers/lnd/transactions.ts b/server/controllers/lnd/transactions.ts index d92ea3ea..2d98dece 100644 --- a/server/controllers/lnd/transactions.ts +++ b/server/controllers/lnd/transactions.ts @@ -9,7 +9,7 @@ export const getTransactions = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Transactions', msg: 'Getting Transactions..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/transactions'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/transactions'; request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Transactions', msg: 'Transactions List Received', data: body }); res.status(200).json(body.transactions); @@ -24,7 +24,7 @@ export const postTransactions = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Transactions', msg: 'Sending Transaction..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/transactions'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/transactions'; options.form = { amount: amount, addr: address, diff --git a/server/controllers/lnd/wallet.ts b/server/controllers/lnd/wallet.ts index 924fa297..1720639b 100644 --- a/server/controllers/lnd/wallet.ts +++ b/server/controllers/lnd/wallet.ts @@ -11,9 +11,9 @@ export const genSeed = (req, res, next) => { options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } if (req.params.passphrase) { - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/genseed?aezeed_passphrase=' + Buffer.from(atob(req.params.passphrase)).toString('base64'); + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/genseed?aezeed_passphrase=' + Buffer.from(atob(req.params.passphrase)).toString('base64'); } else { - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/genseed'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/genseed'; } request(options).then((body) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Seed Generated', data: body }); @@ -32,14 +32,14 @@ export const operateWallet = (req, res, next) => { options.method = 'POST'; if (!req.params.operation || req.params.operation === 'unlockwallet') { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Unlocking Wallet..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/unlockwallet'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/unlockwallet'; options.form = JSON.stringify({ wallet_password: Buffer.from(atob(wallet_password)).toString('base64') }); err_message = 'Unlocking wallet failed! Verify that lnd is running and the wallet is locked!'; } else { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Initializing Wallet..' }); - options.url = req.session.selectedNode.settings.lnServerUrl + '/v1/initwallet'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v1/initwallet'; if (aezeed_passphrase && aezeed_passphrase !== '') { options.form = JSON.stringify({ wallet_password: Buffer.from(atob(wallet_password)).toString('base64'), @@ -94,7 +94,7 @@ export const getUTXOs = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Getting UTXOs..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/utxos'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/utxos'; if (common.isVersionCompatible(req.session.selectedNode.lnVersion, '0.14.0')) { options.form = JSON.stringify({ max_confs: req.query.max_confs }); } else { @@ -114,7 +114,7 @@ export const bumpFee = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Bumping 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.settings.lnServerUrl + '/v2/wallet/bumpfee'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/bumpfee'; options.form = {}; options.form.outpoint = { txid_str: txid, @@ -139,7 +139,7 @@ export const labelTransaction = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Labelling Transaction..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/tx/label'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/tx/label'; options.form = JSON.parse(JSON.stringify(options.form)); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'Wallet', msg: 'Label Transaction Options', data: options.form }); request.post(options).then((body) => { @@ -156,7 +156,7 @@ export const leaseUTXO = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Leasing UTXO..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/utxos/lease'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/utxos/lease'; options.form = {}; options.form.id = txid; options.form.outpoint = { @@ -179,7 +179,7 @@ export const releaseUTXO = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Wallet', msg: 'Releasing UTXO..' }); options = common.getOptions(req); if (options.error) { return res.status(options.statusCode).json({ message: options.message, error: options.error }); } - options.url = req.session.selectedNode.settings.lnServerUrl + '/v2/wallet/utxos/release'; + options.url = req.session.selectedNode.Settings.lnServerUrl + '/v2/wallet/utxos/release'; options.form = {}; options.form.id = txid; options.form.outpoint = { diff --git a/server/controllers/lnd/webSocketClient.ts b/server/controllers/lnd/webSocketClient.ts index 09605704..efeda492 100644 --- a/server/controllers/lnd/webSocketClient.ts +++ b/server/controllers/lnd/webSocketClient.ts @@ -26,7 +26,7 @@ export class LNDWebSocketClient { public connect = (selectedNode: SelectedNode) => { try { const clientExists = this.webSocketClients.find((wsc) => wsc.selectedNode.index === selectedNode.index); - if (!clientExists && selectedNode.settings.lnServerUrl) { + if (!clientExists && selectedNode.Settings.lnServerUrl) { const newWebSocketClient = { selectedNode: selectedNode }; this.webSocketClients.push(newWebSocketClient); } @@ -38,7 +38,7 @@ export class LNDWebSocketClient { public fetchUnpaidInvoices = (selectedNode: SelectedNode) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Getting Unpaid Invoices..' }); const options = this.setOptionsForSelNode(selectedNode); - options.url = selectedNode.settings.lnServerUrl + '/v1/invoices?pending_only=true'; + options.url = selectedNode.Settings.lnServerUrl + '/v1/invoices?pending_only=true'; return request(options).then((body) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Unpaid Invoices Received', data: body }); if (body.invoices && body.invoices.length > 0) { @@ -58,7 +58,7 @@ export class LNDWebSocketClient { public subscribeToInvoice = (options: any, selectedNode: SelectedNode, rHash: string) => { rHash = rHash?.replace(/\+/g, '-')?.replace(/[/]/g, '_'); this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Subscribing to Invoice ' + rHash + ' ..' }); - options.url = selectedNode.settings.lnServerUrl + '/v2/invoices/subscribe/' + rHash; + options.url = selectedNode.Settings.lnServerUrl + '/v2/invoices/subscribe/' + rHash; request(options).then((msg) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Invoice Information Received for ' + rHash }); if (typeof msg === 'string') { @@ -82,7 +82,7 @@ export class LNDWebSocketClient { public subscribeToPayment = (options: any, selectedNode: SelectedNode, paymentHash: string) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Subscribing to Payment ' + paymentHash + ' ..' }); - options.url = selectedNode.settings.lnServerUrl + '/v2/router/track/' + paymentHash; + options.url = selectedNode.Settings.lnServerUrl + '/v2/router/track/' + paymentHash; request(options).then((msg) => { this.logger.log({ selectedNode: selectedNode, level: 'INFO', fileName: 'WebSocketClient', msg: 'Payment Information Received for ' + paymentHash }); msg['type'] = 'payment'; @@ -100,7 +100,7 @@ export class LNDWebSocketClient { public setOptionsForSelNode = (selectedNode: SelectedNode) => { const options = { url: '', rejectUnauthorized: false, json: true, form: null }; try { - options['headers'] = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(selectedNode.authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; + options['headers'] = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(selectedNode.Authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; } catch (err) { this.logger.log({ selectedNode: selectedNode, level: 'ERROR', fileName: 'WebSocketClient', msg: 'Set Options Error', error: JSON.stringify(err) }); } diff --git a/server/controllers/shared/RTLConf.ts b/server/controllers/shared/RTLConf.ts index f44304b6..7d423d78 100644 --- a/server/controllers/shared/RTLConf.ts +++ b/server/controllers/shared/RTLConf.ts @@ -8,7 +8,7 @@ import { Database, DatabaseService } from '../../utils/database.js'; import { Logger, LoggerService } from '../../utils/logger.js'; import { Common, CommonService } from '../../utils/common.js'; import { WSServer } from '../../utils/webSocketServer.js'; -import { NodeAuthentication, SSO } from '../../models/config.model.js'; +import { ApplicationConfig, NodeAuthentication, SSO } from '../../models/config.model.js'; const options = { url: '' }; const logger: LoggerService = Logger; @@ -25,7 +25,7 @@ export const maskPasswords = (obj) => { keys[keys[i]] = maskPasswords(obj[keys[i]]); } if (typeof keys[i] === 'string' && - (keys[i].toLowerCase().includes('password') || keys[i].toLowerCase().includes('multipass') || + ((keys[i].toLowerCase().includes('password') && keys[i] !== 'allowPasswordUpdate') || keys[i].toLowerCase().includes('multipass') || keys[i].toLowerCase().includes('rpcpass') || keys[i].toLowerCase().includes('rpcpassword') || keys[i].toLowerCase().includes('rpcuser')) ) { @@ -36,20 +36,16 @@ export const maskPasswords = (obj) => { return obj; }; -export const removeSensitiveData = (config) => { +export const removeSensitiveData = (config: ApplicationConfig) => { delete config.rtlConfFilePath; delete config.rtlPass; delete config.multiPass; delete config.multiPassHashed; delete config.secret2FA; config.nodes.map((node) => { - node.authentication = node.Authentication; - node.settings = node.Settings; - delete node.Authentication; - delete node.Settings; - delete node.authentication.macaroonPath; - delete node.authentication.runePath; - delete node.authentication.lnApiPassword; + delete node.Authentication.macaroonPath; + delete node.Authentication.runePath; + delete node.Authentication.lnApiPassword; return node; }); return config; @@ -70,7 +66,7 @@ export const getCurrencyRates = (req, res, next) => { export const getFile = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Getting File..' }); - const file = req.query.path ? req.query.path : (req.session.selectedNode.settings.channelBackupPath + sep + 'channel-' + req.query.channel?.replace(':', '-') + '.bak'); + const file = req.query.path ? req.query.path : (req.session.selectedNode.Settings.channelBackupPath + sep + 'channel-' + req.query.channel?.replace(':', '-') + '.bak'); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'RTLConf', msg: 'Channel Point', data: req.query.channel }); logger.log({ selectedNode: req.session.selectedNode, level: 'DEBUG', fileName: 'RTLConf', msg: 'File Path', data: file }); fs.readFile(file, 'utf8', (errRes, data) => { @@ -96,6 +92,7 @@ export const getApplicationSettings = (req, res, next) => { return res.status(err.statusCode).json({ message: err.error, error: err.error }); } else { const appConfData = removeSensitiveData(JSON.parse(data)); + appConfData.allowPasswordUpdate = common.appConfig.allowPasswordUpdate; appConfData.enable2FA = common.appConfig.enable2FA; appConfData.selectedNodeIndex = (req.session.selectedNode && req.session.selectedNode.index ? req.session.selectedNode.index : common.selectedNode.index); const token = req.headers.authorization ? req.headers.authorization.split(' ')[1] : ''; @@ -106,14 +103,14 @@ export const getApplicationSettings = (req, res, next) => { appConfData.SSO = new SSO(); appConfData.secret2FA = ''; appConfData.dbDirectoryPath = ''; - appConfData.nodes[selNodeIdx].authentication = new NodeAuthentication(); - delete appConfData.nodes[selNodeIdx].settings.bitcoindConfigPath; - delete appConfData.nodes[selNodeIdx].settings.lnServerUrl; - delete appConfData.nodes[selNodeIdx].settings.swapServerUrl; - delete appConfData.nodes[selNodeIdx].settings.boltzServerUrl; - delete appConfData.nodes[selNodeIdx].settings.enableOffers; - delete appConfData.nodes[selNodeIdx].settings.enablePeerswap; - delete appConfData.nodes[selNodeIdx].settings.channelBackupPath; + appConfData.nodes[selNodeIdx].Authentication = new NodeAuthentication(); + delete appConfData.nodes[selNodeIdx].Settings.bitcoindConfigPath; + delete appConfData.nodes[selNodeIdx].Settings.lnServerUrl; + delete appConfData.nodes[selNodeIdx].Settings.swapServerUrl; + delete appConfData.nodes[selNodeIdx].Settings.boltzServerUrl; + delete appConfData.nodes[selNodeIdx].Settings.enableOffers; + delete appConfData.nodes[selNodeIdx].Settings.enablePeerswap; + delete appConfData.nodes[selNodeIdx].Settings.channelBackupPath; appConfData.nodes = [appConfData.nodes[selNodeIdx]]; } logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'RTL Configuration Received', data: appConfData }); @@ -147,10 +144,10 @@ export const getConfig = (req, res, next) => { let fileFormat = 'INI'; switch (req.params.nodeType) { case 'ln': - confFile = req.session.selectedNode.authentication.configPath; + confFile = req.session.selectedNode.Authentication.configPath; break; case 'bitcoind': - confFile = req.session.selectedNode.settings.bitcoindConfigPath; + confFile = req.session.selectedNode.Settings.bitcoindConfigPath; break; case 'rtl': fileFormat = 'JSON'; @@ -202,8 +199,8 @@ export const updateNodeSettings = (req, res, next) => { try { fs.writeFileSync(RTLConfFile, JSON.stringify(config, null, 2), 'utf-8'); const selectedNode = common.findNode(req.session.selectedNode.index); - if (selectedNode && selectedNode.settings) { - selectedNode.settings = req.body; + if (selectedNode && selectedNode.Settings) { + selectedNode.Settings = req.body; common.replaceNode(req, selectedNode); } logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Node Settings Updated', data: maskPasswords(config) }); @@ -219,12 +216,9 @@ export const updateApplicationSettings = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Updating Application Settings..' }); const RTLConfFile = common.appConfig.rtlConfFilePath + sep + 'RTL-Config.json'; try { - const config = JSON.parse(req.body); - fs.writeFileSync(RTLConfFile, JSON.stringify(config, null, 2), 'utf-8'); - // config.enable2FA = common.appConfig.enable2FA; - // config.selectedNodeIndex = (req.session.selectedNode && req.session.selectedNode.index ? req.session.selectedNode.index : common.selectedNode.index); - common.appConfig = config; - logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Application Settings Updated', data: maskPasswords(config) }); + fs.writeFileSync(RTLConfFile, JSON.stringify(req.body, null, 2), 'utf-8'); + common.appConfig = req.body; + logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'RTLConf', msg: 'Application Settings Updated', data: maskPasswords(common.appConfig) }); res.status(201).json(removeSensitiveData(common.appConfig)); } catch (errRes) { const errMsg = 'Update Default Node Error'; diff --git a/server/models/config.model.ts b/server/models/config.model.ts index 1f1846cd..501f54e2 100644 --- a/server/models/config.model.ts +++ b/server/models/config.model.ts @@ -41,13 +41,13 @@ export class SelectedNode { constructor( public logLevel?: string, public logFile?: string, - public index?: string, + public index?: number, public lnNode?: string, public lnImplementation?: string, public lnVersion?: string, public apiVersion?: string, - public settings?: NodeSettings, - public authentication?: NodeAuthentication + public Settings?: NodeSettings, + public Authentication?: NodeAuthentication ) { } } diff --git a/server/utils/common.ts b/server/utils/common.ts index 906ef459..5956351d 100644 --- a/server/utils/common.ts +++ b/server/utils/common.ts @@ -28,15 +28,15 @@ export class CommonService { public setSwapServerOptions = (req) => { const swapOptions = { - baseUrl: req.session.selectedNode.settings.swapServerUrl, + baseUrl: req.session.selectedNode.Settings.swapServerUrl, uri: '', rejectUnauthorized: false, json: true, headers: { 'Grpc-Metadata-macaroon': '' } }; - if (req.session.selectedNode.authentication.swapMacaroonPath) { + if (req.session.selectedNode.Authentication.swapMacaroonPath) { try { - swapOptions.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.authentication.swapMacaroonPath, 'loop.macaroon')).toString('hex') }; + swapOptions.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.Authentication.swapMacaroonPath, 'loop.macaroon')).toString('hex') }; } catch (err) { this.logger.log({ selectedNode: this.selectedNode, level: 'ERROR', fileName: 'Common', msg: 'Loop macaroon Error', error: err }); } @@ -47,14 +47,14 @@ export class CommonService { public getBoltzServerOptions = (req) => { const boltzOptions = { - url: req.session.selectedNode.settings.boltzServerUrl, + url: req.session.selectedNode.Settings.boltzServerUrl, rejectUnauthorized: false, json: true, headers: { 'Grpc-Metadata-macaroon': '' } }; - if (req.session.selectedNode.authentication.boltzMacaroonPath) { + if (req.session.selectedNode.Authentication.boltzMacaroonPath) { try { - boltzOptions.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.authentication.boltzMacaroonPath, 'admin.macaroon')).toString('hex') }; + boltzOptions.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.Authentication.boltzMacaroonPath, 'admin.macaroon')).toString('hex') }; } catch (err) { this.logger.log({ selectedNode: this.selectedNode, level: 'ERROR', fileName: 'Common', msg: 'Boltz macaroon Error', error: err }); } @@ -64,12 +64,12 @@ export class CommonService { }; public getOptions = (req) => { - if (req.session.selectedNode && req.session.selectedNode.authentication.options) { - req.session.selectedNode.authentication.options.method = (req.session.selectedNode.lnImplementation && req.session.selectedNode.lnImplementation.toUpperCase() === 'LND') ? 'GET' : 'POST'; - delete req.session.selectedNode.authentication.options.form; - delete req.session.selectedNode.authentication.options.body; - req.session.selectedNode.authentication.options.qs = {}; - return req.session.selectedNode.authentication.options; + if (req.session.selectedNode && req.session.selectedNode.Authentication.options) { + req.session.selectedNode.Authentication.options.method = (req.session.selectedNode.lnImplementation && req.session.selectedNode.lnImplementation.toUpperCase() === 'LND') ? 'GET' : 'POST'; + delete req.session.selectedNode.Authentication.options.form; + delete req.session.selectedNode.Authentication.options.body; + req.session.selectedNode.Authentication.options.qs = {}; + return req.session.selectedNode.Authentication.options; } return this.handleError({ statusCode: 401, message: 'Session expired after a day\'s inactivity' }, 'Session Expired', 'Session Expiry Error', this.selectedNode); }; @@ -78,7 +78,7 @@ export class CommonService { if (!req.session.selectedNode) { req.session.selectedNode = {}; } - req.session.selectedNode.authentication.options = { + req.session.selectedNode.Authentication.options = { url: '', rejectUnauthorized: false, json: true, @@ -89,30 +89,30 @@ export class CommonService { switch (req.session.selectedNode.lnImplementation.toUpperCase()) { case 'CLN': try { - if (!req.session.selectedNode.authentication.runeValue) { - req.session.selectedNode.authentication.runeValue = this.getRuneValue(req.session.selectedNode.authentication.runePath); + if (!req.session.selectedNode.Authentication.runeValue) { + req.session.selectedNode.Authentication.runeValue = this.getRuneValue(req.session.selectedNode.Authentication.runePath); } - req.session.selectedNode.authentication.options.headers = { rune: req.session.selectedNode.authentication.runeValue }; + req.session.selectedNode.Authentication.options.headers = { rune: req.session.selectedNode.Authentication.runeValue }; } catch (err) { throw new Error(err); } break; case 'ECL': - req.session.selectedNode.authentication.options.headers = { authorization: 'Basic ' + Buffer.from(':' + req.session.selectedNode.authentication.lnApiPassword).toString('base64') }; + req.session.selectedNode.Authentication.options.headers = { authorization: 'Basic ' + Buffer.from(':' + req.session.selectedNode.Authentication.lnApiPassword).toString('base64') }; break; default: - req.session.selectedNode.authentication.options.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; + req.session.selectedNode.Authentication.options.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(req.session.selectedNode.Authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; break; } } if (req.session.selectedNode) { - this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Updated Node Options for ' + req.session.selectedNode.lnNode, data: req.session.selectedNode.authentication.options }); + this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Updated Node Options for ' + req.session.selectedNode.lnNode, data: req.session.selectedNode.Authentication.options }); } return { status: 200, message: 'Updated Successfully' }; } catch (err) { - req.session.selectedNode.authentication.options = { + req.session.selectedNode.Authentication.options = { url: '', rejectUnauthorized: false, json: true, @@ -135,10 +135,10 @@ export class CommonService { }; public setOptions = (req) => { - if (this.nodes[0].authentication.options && this.nodes[0].authentication.options.headers) { return; } + if (this.nodes[0].Authentication.options && this.nodes[0].Authentication.options.headers) { return; } if (this.nodes && this.nodes.length > 0) { this.nodes.forEach((node) => { - node.authentication.options = { + node.Authentication.options = { url: '', rejectUnauthorized: false, json: true, @@ -149,34 +149,34 @@ export class CommonService { switch (node.lnImplementation.toUpperCase()) { case 'CLN': try { - if (!node.authentication.runeValue) { - node.authentication.runeValue = this.getRuneValue(node.authentication.runePath); + if (!node.Authentication.runeValue) { + node.Authentication.runeValue = this.getRuneValue(node.Authentication.runePath); } - node.authentication.options.headers = { rune: node.authentication.runeValue }; + node.Authentication.options.headers = { rune: node.Authentication.runeValue }; } catch (err) { throw new Error(err); } break; case 'ECL': - node.authentication.options.headers = { authorization: 'Basic ' + Buffer.from(':' + node.authentication.lnApiPassword).toString('base64') }; + node.Authentication.options.headers = { authorization: 'Basic ' + Buffer.from(':' + node.Authentication.lnApiPassword).toString('base64') }; break; default: - node.authentication.options.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(node.authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; + node.Authentication.options.headers = { 'Grpc-Metadata-macaroon': fs.readFileSync(join(node.Authentication.macaroonPath, 'admin.macaroon')).toString('hex') }; break; } } } catch (err) { this.logger.log({ selectedNode: this.selectedNode, level: 'ERROR', fileName: 'Common', msg: 'Common Set Options Error', error: err }); - node.authentication.options = { + node.Authentication.options = { url: '', rejectUnauthorized: false, json: true, form: '' }; } - this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Set Node Options for ' + node.lnNode, data: node.authentication.options }); + this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Set Node Options for ' + node.lnNode, data: node.Authentication.options }); }); this.updateSelectedNodeOptions(req); } @@ -420,12 +420,12 @@ export class CommonService { }; public getAllNodeAllChannelBackup = (node: SelectedNode) => { - const channel_backup_file = node.settings.channelBackupPath + sep + 'channel-all.bak'; + const channel_backup_file = node.Settings.channelBackupPath + sep + 'channel-all.bak'; const options = { - url: node.settings.lnServerUrl + '/v1/channels/backup', + url: node.Settings.lnServerUrl + '/v1/channels/backup', rejectUnauthorized: false, json: true, - headers: { 'Grpc-Metadata-macaroon': fs.readFileSync(node.authentication.macaroonPath + '/admin.macaroon').toString('hex') } + headers: { 'Grpc-Metadata-macaroon': fs.readFileSync(node.Authentication.macaroonPath + '/admin.macaroon').toString('hex') } }; this.logger.log({ selectedNode: this.selectedNode, level: 'INFO', fileName: 'Common', msg: 'Getting Channel Backup for Node ' + node.lnNode + '..' }); request(options).then((body) => { @@ -486,9 +486,9 @@ export class CommonService { this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'INDEX: ' + selNode.index }); this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LN NODE: ' + selNode.lnNode }); this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LN IMPLEMENTATION: ' + selNode.lnImplementation }); - this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'FIAT CONVERSION: ' + selNode.settings.fiatConversion }); - this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'CURRENCY UNIT: ' + selNode.settings.currencyUnit }); - this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LN SERVER URL: ' + selNode.settings.lnServerUrl }); + this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'FIAT CONVERSION: ' + selNode.Settings.fiatConversion }); + this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'CURRENCY UNIT: ' + selNode.Settings.currencyUnit }); + this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LN SERVER URL: ' + selNode.Settings.lnServerUrl }); this.logger.log({ selectedNode: selNode, level: 'INFO', fileName: 'Config Setup Variable', msg: 'LOGOUT REDIRECT LINK: ' + this.appConfig.SSO.logoutRedirectLink + '\r\n' }); } }; diff --git a/server/utils/config.ts b/server/utils/config.ts index b909fd2e..caaf9446 100644 --- a/server/utils/config.ts +++ b/server/utils/config.ts @@ -146,7 +146,7 @@ export class ConfigService { this.common.appConfig.dbDirectoryPath = (process?.env?.DB_DIRECTORY_PATH) ? process?.env?.DB_DIRECTORY_PATH : (config.dbDirectoryPath) ? config.dbDirectoryPath : join(dirname(fileURLToPath(import.meta.url)), '..', '..'); if (config.nodes && config.nodes.length > 0) { config.nodes.forEach((node, idx) => { - this.common.nodes[idx] = { settings: {}, authentication: {} }; + this.common.nodes[idx] = { Settings: {}, Authentication: {} }; this.common.nodes[idx].index = node.index; this.common.nodes[idx].lnNode = node.lnNode; this.common.nodes[idx].lnImplementation = (process?.env?.lnImplementation) ? process?.env?.lnImplementation : node.lnImplementation ? node.lnImplementation : 'LND'; @@ -154,9 +154,9 @@ export class ConfigService { switch (this.common.nodes[idx].lnImplementation) { case 'CLN': if (process?.env?.RUNE_PATH && process?.env?.RUNE_PATH.trim() !== '') { - this.common.nodes[idx].authentication.runePath = process?.env?.RUNE_PATH; + this.common.nodes[idx].Authentication.runePath = process?.env?.RUNE_PATH; } else if (node.Authentication && node.Authentication.runePath && node.Authentication.runePath.trim() !== '') { - this.common.nodes[idx].authentication.runePath = node.Authentication.runePath; + this.common.nodes[idx].Authentication.runePath = node.Authentication.runePath; } else { this.errMsg = 'Please set rune path for node index ' + node.index + ' in RTL-Config.json!'; } @@ -164,106 +164,106 @@ export class ConfigService { case 'ECL': if (process?.env?.LN_API_PASSWORD) { - this.common.nodes[idx].authentication.lnApiPassword = process?.env?.LN_API_PASSWORD; + this.common.nodes[idx].Authentication.lnApiPassword = process?.env?.LN_API_PASSWORD; } else if (node.Authentication && node.Authentication.lnApiPassword) { - this.common.nodes[idx].authentication.lnApiPassword = node.Authentication.lnApiPassword; + this.common.nodes[idx].Authentication.lnApiPassword = node.Authentication.lnApiPassword; } else { - this.common.nodes[idx].authentication.lnApiPassword = ''; + this.common.nodes[idx].Authentication.lnApiPassword = ''; } break; default: if (process?.env?.MACAROON_PATH && process?.env?.MACAROON_PATH.trim() !== '') { - this.common.nodes[idx].authentication.macaroonPath = process?.env?.MACAROON_PATH; + this.common.nodes[idx].Authentication.macaroonPath = process?.env?.MACAROON_PATH; } else if (node.Authentication && node.Authentication.macaroonPath && node.Authentication.macaroonPath.trim() !== '') { - this.common.nodes[idx].authentication.macaroonPath = node.Authentication.macaroonPath; + this.common.nodes[idx].Authentication.macaroonPath = node.Authentication.macaroonPath; } else { this.errMsg = 'Please set macaroon path for node index ' + node.index + ' in RTL-Config.json!'; } break; } if (process?.env?.CONFIG_PATH) { - this.common.nodes[idx].authentication.configPath = process?.env?.CONFIG_PATH; + this.common.nodes[idx].Authentication.configPath = process?.env?.CONFIG_PATH; } else if (node.Authentication && node.Authentication.configPath) { - this.common.nodes[idx].authentication.configPath = node.Authentication.configPath; + this.common.nodes[idx].Authentication.configPath = node.Authentication.configPath; } else { - this.common.nodes[idx].authentication.configPath = ''; + this.common.nodes[idx].Authentication.configPath = ''; } - if (this.common.nodes[idx].lnImplementation === 'ECL' && this.common.nodes[idx].authentication.lnApiPassword === '' && this.common.nodes[idx].authentication.configPath !== '') { + if (this.common.nodes[idx].lnImplementation === 'ECL' && this.common.nodes[idx].Authentication.lnApiPassword === '' && this.common.nodes[idx].Authentication.configPath !== '') { try { - const exists = fs.existsSync(this.common.nodes[idx].authentication.configPath || ''); + const exists = fs.existsSync(this.common.nodes[idx].Authentication.configPath || ''); if (exists) { try { - const configFile = fs.readFileSync((this.common.nodes[idx].authentication.configPath || ''), 'utf-8'); + const configFile = fs.readFileSync((this.common.nodes[idx].Authentication.configPath || ''), 'utf-8'); const iniParsed = ini.parse(configFile); - this.common.nodes[idx].authentication.lnApiPassword = iniParsed['eclair.api.password'] ? iniParsed['eclair.api.password'] : parseHocon(configFile).eclair.api.password; + this.common.nodes[idx].Authentication.lnApiPassword = iniParsed['eclair.api.password'] ? iniParsed['eclair.api.password'] : parseHocon(configFile).eclair.api.password; } catch (err) { this.errMsg = this.errMsg + '\nSomething went wrong while reading config file: \n' + err; } } else { - this.errMsg = this.errMsg + '\nInvalid config path: ' + this.common.nodes[idx].authentication.configPath; + this.errMsg = this.errMsg + '\nInvalid config path: ' + this.common.nodes[idx].Authentication.configPath; } } catch (err) { this.errMsg = this.errMsg + '\nUnable to read config file: \n' + err; } } - if (this.common.nodes[idx].lnImplementation === 'ECL' && this.common.nodes[idx].authentication.lnApiPassword === '') { + if (this.common.nodes[idx].lnImplementation === 'ECL' && this.common.nodes[idx].Authentication.lnApiPassword === '') { this.errMsg = this.errMsg + '\nPlease set config path Or api password for node index ' + node.index + ' in RTL-Config.json! It is mandatory for Eclair authentication!'; } if (process?.env?.LN_SERVER_URL && process?.env?.LN_SERVER_URL.trim() !== '') { - this.common.nodes[idx].settings.lnServerUrl = process?.env?.LN_SERVER_URL.endsWith('/v1') ? process?.env?.LN_SERVER_URL.slice(0, -3) : process?.env?.LN_SERVER_URL; + this.common.nodes[idx].Settings.lnServerUrl = process?.env?.LN_SERVER_URL.endsWith('/v1') ? process?.env?.LN_SERVER_URL.slice(0, -3) : process?.env?.LN_SERVER_URL; } else if (process?.env?.LND_SERVER_URL && process?.env?.LND_SERVER_URL.trim() !== '') { - this.common.nodes[idx].settings.lnServerUrl = process?.env?.LND_SERVER_URL.endsWith('/v1') ? process?.env?.LND_SERVER_URL.slice(0, -3) : process?.env?.LND_SERVER_URL; + this.common.nodes[idx].Settings.lnServerUrl = process?.env?.LND_SERVER_URL.endsWith('/v1') ? process?.env?.LND_SERVER_URL.slice(0, -3) : process?.env?.LND_SERVER_URL; } else if (node.Settings.lnServerUrl && node.Settings.lnServerUrl.trim() !== '') { - this.common.nodes[idx].settings.lnServerUrl = node.Settings.lnServerUrl.endsWith('/v1') ? node.Settings.lnServerUrl.slice(0, -3) : node.Settings.lnServerUrl; + this.common.nodes[idx].Settings.lnServerUrl = node.Settings.lnServerUrl.endsWith('/v1') ? node.Settings.lnServerUrl.slice(0, -3) : node.Settings.lnServerUrl; } else if (node.Settings.lndServerUrl && node.Settings.lndServerUrl.trim() !== '') { - this.common.nodes[idx].settings.lnServerUrl = node.Settings.lndServerUrl.endsWith('/v1') ? node.Settings.lndServerUrl.slice(0, -3) : node.Settings.lndServerUrl; + this.common.nodes[idx].Settings.lnServerUrl = node.Settings.lndServerUrl.endsWith('/v1') ? node.Settings.lndServerUrl.slice(0, -3) : node.Settings.lndServerUrl; } else { this.errMsg = this.errMsg + '\nPlease set LN Server URL for node index ' + node.index + ' in RTL-Config.json!'; } - this.common.nodes[idx].settings.userPersona = node.Settings.userPersona ? node.Settings.userPersona : 'MERCHANT'; - this.common.nodes[idx].settings.themeMode = node.Settings.themeMode ? node.Settings.themeMode : 'DAY'; - this.common.nodes[idx].settings.themeColor = node.Settings.themeColor ? node.Settings.themeColor : 'PURPLE'; - this.common.nodes[idx].settings.unannouncedChannels = node.Settings.unannouncedChannels ? !!node.Settings.unannouncedChannels : false; - this.common.nodes[idx].settings.logLevel = node.Settings.logLevel ? node.Settings.logLevel : 'ERROR'; - this.common.nodes[idx].settings.fiatConversion = node.Settings.fiatConversion ? !!node.Settings.fiatConversion : false; - if (this.common.nodes[idx].settings.fiatConversion) { - this.common.nodes[idx].settings.currencyUnit = node.Settings.currencyUnit ? node.Settings.currencyUnit : 'USD'; + this.common.nodes[idx].Settings.userPersona = node.Settings.userPersona ? node.Settings.userPersona : 'MERCHANT'; + this.common.nodes[idx].Settings.themeMode = node.Settings.themeMode ? node.Settings.themeMode : 'DAY'; + this.common.nodes[idx].Settings.themeColor = node.Settings.themeColor ? node.Settings.themeColor : 'PURPLE'; + this.common.nodes[idx].Settings.unannouncedChannels = node.Settings.unannouncedChannels ? !!node.Settings.unannouncedChannels : false; + this.common.nodes[idx].Settings.logLevel = node.Settings.logLevel ? node.Settings.logLevel : 'ERROR'; + this.common.nodes[idx].Settings.fiatConversion = node.Settings.fiatConversion ? !!node.Settings.fiatConversion : false; + if (this.common.nodes[idx].Settings.fiatConversion) { + this.common.nodes[idx].Settings.currencyUnit = node.Settings.currencyUnit ? node.Settings.currencyUnit : 'USD'; } if (process?.env?.SWAP_SERVER_URL && process?.env?.SWAP_SERVER_URL.trim() !== '') { - this.common.nodes[idx].settings.swapServerUrl = process?.env?.SWAP_SERVER_URL.endsWith('/v1') ? process?.env?.SWAP_SERVER_URL.slice(0, -3) : process?.env?.SWAP_SERVER_URL; - this.common.nodes[idx].authentication.swapMacaroonPath = process?.env?.SWAP_MACAROON_PATH; + this.common.nodes[idx].Settings.swapServerUrl = process?.env?.SWAP_SERVER_URL.endsWith('/v1') ? process?.env?.SWAP_SERVER_URL.slice(0, -3) : process?.env?.SWAP_SERVER_URL; + this.common.nodes[idx].Authentication.swapMacaroonPath = process?.env?.SWAP_MACAROON_PATH; } else if (node.Settings.swapServerUrl && node.Settings.swapServerUrl.trim() !== '') { - this.common.nodes[idx].settings.swapServerUrl = node.Settings.swapServerUrl.endsWith('/v1') ? node.Settings.swapServerUrl.slice(0, -3) : node.Settings.swapServerUrl; - this.common.nodes[idx].authentication.swapMacaroonPath = node.Authentication.swapMacaroonPath ? node.Authentication.swapMacaroonPath : ''; + this.common.nodes[idx].Settings.swapServerUrl = node.Settings.swapServerUrl.endsWith('/v1') ? node.Settings.swapServerUrl.slice(0, -3) : node.Settings.swapServerUrl; + this.common.nodes[idx].Authentication.swapMacaroonPath = node.Authentication.swapMacaroonPath ? node.Authentication.swapMacaroonPath : ''; } else { - this.common.nodes[idx].settings.swapServerUrl = ''; - this.common.nodes[idx].authentication.swapMacaroonPath = ''; + this.common.nodes[idx].Settings.swapServerUrl = ''; + this.common.nodes[idx].Authentication.swapMacaroonPath = ''; } if (process?.env?.BOLTZ_SERVER_URL && process?.env?.BOLTZ_SERVER_URL.trim() !== '') { - this.common.nodes[idx].settings.boltzServerUrl = process?.env?.BOLTZ_SERVER_URL.endsWith('/v1') ? process?.env?.BOLTZ_SERVER_URL.slice(0, -3) : process?.env?.BOLTZ_SERVER_URL; - this.common.nodes[idx].authentication.boltzMacaroonPath = process?.env?.BOLTZ_MACAROON_PATH; + this.common.nodes[idx].Settings.boltzServerUrl = process?.env?.BOLTZ_SERVER_URL.endsWith('/v1') ? process?.env?.BOLTZ_SERVER_URL.slice(0, -3) : process?.env?.BOLTZ_SERVER_URL; + this.common.nodes[idx].Authentication.boltzMacaroonPath = process?.env?.BOLTZ_MACAROON_PATH; } else if (node.Settings.boltzServerUrl && node.Settings.boltzServerUrl.trim() !== '') { - this.common.nodes[idx].settings.boltzServerUrl = node.Settings.boltzServerUrl.endsWith('/v1') ? node.Settings.boltzServerUrl.slice(0, -3) : node.Settings.boltzServerUrl; - this.common.nodes[idx].authentication.boltzMacaroonPath = node.Authentication.boltzMacaroonPath ? node.Authentication.boltzMacaroonPath : ''; + this.common.nodes[idx].Settings.boltzServerUrl = node.Settings.boltzServerUrl.endsWith('/v1') ? node.Settings.boltzServerUrl.slice(0, -3) : node.Settings.boltzServerUrl; + this.common.nodes[idx].Authentication.boltzMacaroonPath = node.Authentication.boltzMacaroonPath ? node.Authentication.boltzMacaroonPath : ''; } else { - this.common.nodes[idx].settings.boltzServerUrl = ''; - this.common.nodes[idx].authentication.boltzMacaroonPath = ''; + this.common.nodes[idx].Settings.boltzServerUrl = ''; + this.common.nodes[idx].Authentication.boltzMacaroonPath = ''; } - this.common.nodes[idx].settings.enableOffers = process?.env?.ENABLE_OFFERS ? process?.env?.ENABLE_OFFERS : (node.Settings.enableOffers) ? node.Settings.enableOffers : false; - this.common.nodes[idx].settings.enablePeerswap = process?.env?.ENABLE_PEERSWAP ? process?.env?.ENABLE_PEERSWAP : (node.Settings.enablePeerswap) ? node.Settings.enablePeerswap : false; - this.common.nodes[idx].settings.bitcoindConfigPath = process?.env?.BITCOIND_CONFIG_PATH ? process?.env?.BITCOIND_CONFIG_PATH : (node.Settings.bitcoindConfigPath) ? node.Settings.bitcoindConfigPath : ''; - this.common.nodes[idx].settings.channelBackupPath = process?.env?.CHANNEL_BACKUP_PATH ? process?.env?.CHANNEL_BACKUP_PATH : (node.Settings.channelBackupPath) ? node.Settings.channelBackupPath : this.common.appConfig.rtlConfFilePath + sep + 'channels-backup' + sep + 'node-' + node.index; + this.common.nodes[idx].Settings.enableOffers = process?.env?.ENABLE_OFFERS ? process?.env?.ENABLE_OFFERS : (node.Settings.enableOffers) ? node.Settings.enableOffers : false; + this.common.nodes[idx].Settings.enablePeerswap = process?.env?.ENABLE_PEERSWAP ? process?.env?.ENABLE_PEERSWAP : (node.Settings.enablePeerswap) ? node.Settings.enablePeerswap : false; + this.common.nodes[idx].Settings.bitcoindConfigPath = process?.env?.BITCOIND_CONFIG_PATH ? process?.env?.BITCOIND_CONFIG_PATH : (node.Settings.bitcoindConfigPath) ? node.Settings.bitcoindConfigPath : ''; + this.common.nodes[idx].Settings.channelBackupPath = process?.env?.CHANNEL_BACKUP_PATH ? process?.env?.CHANNEL_BACKUP_PATH : (node.Settings.channelBackupPath) ? node.Settings.channelBackupPath : this.common.appConfig.rtlConfFilePath + sep + 'channels-backup' + sep + 'node-' + node.index; try { - this.common.createDirectory(this.common.nodes[idx].settings.channelBackupPath); - const exists = fs.existsSync(this.common.nodes[idx].settings.channelBackupPath + sep + 'channel-all.bak'); + this.common.createDirectory(this.common.nodes[idx].Settings.channelBackupPath); + const exists = fs.existsSync(this.common.nodes[idx].Settings.channelBackupPath + sep + 'channel-all.bak'); if (!exists) { try { if (this.common.nodes[idx].lnImplementation === 'LND') { this.common.getAllNodeAllChannelBackup(this.common.nodes[idx]); } else { - const createStream = fs.createWriteStream(this.common.nodes[idx].settings.channelBackupPath + sep + 'channel-all.bak'); + const createStream = fs.createWriteStream(this.common.nodes[idx].Settings.channelBackupPath + sep + 'channel-all.bak'); createStream.end(); } } catch (err) { @@ -273,9 +273,9 @@ export class ConfigService { } catch (err) { this.logger.log({ selectedNode: this.common.selectedNode, level: 'ERROR', fileName: 'Config', msg: 'Something went wrong while creating the backup directory: \n' + err }); } - this.common.nodes[idx].settings.logFile = this.common.appConfig.rtlConfFilePath + '/logs/RTL-Node-' + node.index + '.log'; + this.common.nodes[idx].Settings.logFile = this.common.appConfig.rtlConfFilePath + '/logs/RTL-Node-' + node.index + '.log'; this.logger.log({ selectedNode: this.common.selectedNode, level: 'INFO', fileName: 'Config', msg: 'Node Config: ' + JSON.stringify(this.common.nodes[idx]) }); - const log_file = this.common.nodes[idx].settings.logFile; + const log_file = this.common.nodes[idx].Settings.logFile; if (fs.existsSync(log_file || '')) { fs.writeFile((log_file || ''), '', () => { }); } else { diff --git a/server/utils/logger.ts b/server/utils/logger.ts index 37f8c7fb..219e5a37 100644 --- a/server/utils/logger.ts +++ b/server/utils/logger.ts @@ -17,16 +17,16 @@ export class LoggerService { msgStr = msgStr + '.\r\n'; } console.error(msgStr); - if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } break; case 'WARN': msgStr = prepMsgData(msgJSON, msgStr); - if (!msgJSON.selectedNode || msgJSON.selectedNode.settings.logLevel === 'WARN' || msgJSON.selectedNode.settings.logLevel === 'INFO' || msgJSON.selectedNode.settings.logLevel === 'DEBUG') { - if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (!msgJSON.selectedNode || msgJSON.selectedNode.Settings.logLevel === 'WARN' || msgJSON.selectedNode.Settings.logLevel === 'INFO' || msgJSON.selectedNode.Settings.logLevel === 'DEBUG') { + if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } } break; @@ -34,17 +34,17 @@ export class LoggerService { case 'INFO': if (!msgJSON.selectedNode && msgJSON.fileName === 'RTL') { console.log(msgStr + '.\r\n'); - } else if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logLevel === 'INFO') { + } else if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logLevel === 'INFO') { msgStr = msgStr + '.\r\n'; console.log(msgStr); - if (msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } - } else if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logLevel === 'DEBUG') { + } else if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logLevel === 'DEBUG') { msgStr = prepMsgData(msgJSON, msgStr); console.log(msgStr); - if (msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } } break; @@ -52,11 +52,11 @@ export class LoggerService { case 'DEBUG': if (!msgJSON.selectedNode) { console.log(msgStr + '.\r\n'); - } else if (msgJSON.selectedNode && msgJSON.selectedNode.settings.logLevel === 'DEBUG') { + } else if (msgJSON.selectedNode && msgJSON.selectedNode.Settings.logLevel === 'DEBUG') { msgStr = prepMsgData(msgJSON, msgStr); console.log(msgStr); - if (msgJSON.selectedNode.settings.logFile) { - fs.appendFile(msgJSON.selectedNode.settings.logFile, msgStr, () => { }); + if (msgJSON.selectedNode.Settings.logFile) { + fs.appendFile(msgJSON.selectedNode.Settings.logFile, msgStr, () => { }); } } break; diff --git a/src/app/cln/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts b/src/app/cln/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts index 9d5ad12d..db3e1aca 100644 --- a/src/app/cln/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts +++ b/src/app/cln/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts @@ -132,8 +132,8 @@ export class CLNOnChainSendModalComponent implements OnInit, OnDestroy { }); combineLatest([this.store.select(rootSelectedNode), this.store.select(rootAppConfig)]).pipe(takeUntil(this.unSubs[1])). subscribe(([selNode, appConfig]) => { - this.fiatConversion = selNode.settings.fiatConversion; - this.amountUnits = selNode.settings.currencyUnits; + this.fiatConversion = selNode.Settings.fiatConversion; + this.amountUnits = selNode.Settings.currencyUnits; this.appConfig = appConfig; }); this.store.select(clnNodeInformation).pipe(takeUntil(this.unSubs[2])). diff --git a/src/app/eclair/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts b/src/app/eclair/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts index 549aeafb..9e733ccc 100644 --- a/src/app/eclair/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts +++ b/src/app/eclair/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts @@ -48,8 +48,8 @@ export class ECLOnChainSendModalComponent implements OnInit, OnDestroy { ngOnInit() { this.store.select(rootSelectedNode).pipe(takeUntil(this.unSubs[0])).subscribe((selNode) => { - this.fiatConversion = selNode.settings.fiatConversion; - this.amountUnits = selNode.settings.currencyUnits; + this.fiatConversion = selNode.Settings.fiatConversion; + this.amountUnits = selNode.Settings.currencyUnits; this.logger.info(selNode); }); this.actions.pipe( diff --git a/src/app/lnd/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts b/src/app/lnd/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts index b8679b36..09a0c630 100644 --- a/src/app/lnd/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts +++ b/src/app/lnd/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts @@ -109,8 +109,8 @@ export class OnChainSendModalComponent implements OnInit, OnDestroy { this.appConfig = appConfig; }); this.store.select(rootSelectedNode).pipe(takeUntil(this.unSubs[2])).subscribe((selNode) => { - this.fiatConversion = selNode.settings.fiatConversion; - this.amountUnits = selNode.settings.currencyUnits; + this.fiatConversion = selNode.Settings.fiatConversion; + this.amountUnits = selNode.Settings.currencyUnits; this.logger.info(selNode); }); this.actions.pipe( diff --git a/src/app/shared/components/currency-unit-converter/currency-unit-converter.component.ts b/src/app/shared/components/currency-unit-converter/currency-unit-converter.component.ts index 4dc4a9bb..0742a463 100644 --- a/src/app/shared/components/currency-unit-converter/currency-unit-converter.component.ts +++ b/src/app/shared/components/currency-unit-converter/currency-unit-converter.component.ts @@ -34,8 +34,8 @@ export class CurrencyUnitConverterComponent implements OnInit, OnChanges, OnDest ngOnInit() { this.store.select(rootSelectedNode).pipe(takeUntil(this.unSubs[0])).subscribe((selNode) => { - this.fiatConversion = selNode.settings.fiatConversion; - this.currencyUnits = selNode.settings.currencyUnits; + this.fiatConversion = selNode.Settings.fiatConversion; + this.currencyUnits = selNode.Settings.currencyUnits; if (!this.fiatConversion) { this.currencyUnits.splice(2, 1); } diff --git a/src/app/shared/components/data-modal/two-factor-auth/two-factor-auth.component.ts b/src/app/shared/components/data-modal/two-factor-auth/two-factor-auth.component.ts index cdaf7e35..a1ca3b14 100644 --- a/src/app/shared/components/data-modal/two-factor-auth/two-factor-auth.component.ts +++ b/src/app/shared/components/data-modal/two-factor-auth/two-factor-auth.component.ts @@ -91,7 +91,8 @@ export class TwoFactorAuthComponent implements OnInit, OnDestroy { onVerifyToken(): boolean | void { if (this.appConfig?.enable2FA) { - this.store.dispatch(updateApplicationSettings({ payload: { enable2FA: this.appConfig?.enable2FA, secret2FA: '' } })); + this.appConfig.secret2FA = ''; + this.store.dispatch(updateApplicationSettings({ payload: this.appConfig })); this.generateSecret(); this.isTokenValid = true; } else { @@ -103,7 +104,8 @@ export class TwoFactorAuthComponent implements OnInit, OnDestroy { this.tokenFormGroup.controls.token.setErrors({ notValid: true }); return true; } - this.store.dispatch(updateApplicationSettings({ payload: { enable2FA: this.appConfig?.enable2FA, secret2FA: this.secretFormGroup.controls.secret.value } })); + this.appConfig.secret2FA = this.secretFormGroup.controls.secret.value; + this.store.dispatch(updateApplicationSettings({ payload: this.appConfig })); this.tokenFormGroup.controls.token.setValue(''); } this.flgValidated = true; diff --git a/src/app/shared/components/help/help.component.ts b/src/app/shared/components/help/help.component.ts index 9f0f8179..9465084b 100644 --- a/src/app/shared/components/help/help.component.ts +++ b/src/app/shared/components/help/help.component.ts @@ -4,7 +4,7 @@ import { takeUntil } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { faQuestion } from '@fortawesome/free-solid-svg-icons'; -import { HelpTopic, ConfigSettingsNode } from '../../models/RTLconfig'; +import { HelpTopic, Node } from '../../models/RTLconfig'; import { SessionService } from '../../services/session.service'; import { RTLState } from '../../../store/rtl.state'; @@ -19,7 +19,7 @@ export class HelpComponent implements OnInit, OnDestroy { public helpTopics: Array = []; public faQuestion = faQuestion; - public selNode: ConfigSettingsNode | any; + public selNode: Node | any; public LNPLink = '/lnd/'; public flgLoggedIn = false; private unSubs = [new Subject(), new Subject(), new Subject(), new Subject()]; diff --git a/src/app/shared/components/navigation/side-navigation/side-navigation.component.ts b/src/app/shared/components/navigation/side-navigation/side-navigation.component.ts index d166ee01..cd09e017 100644 --- a/src/app/shared/components/navigation/side-navigation/side-navigation.component.ts +++ b/src/app/shared/components/navigation/side-navigation/side-navigation.component.ts @@ -8,7 +8,7 @@ import { NestedTreeControl } from '@angular/cdk/tree'; import { MatTreeNestedDataSource, MatTree } from '@angular/material/tree'; import { faEject, faEye } from '@fortawesome/free-solid-svg-icons'; -import { RTLConfiguration, ConfigSettingsNode, Settings, GetInfoRoot } from '../../../models/RTLconfig'; +import { RTLConfiguration, Node, Settings, GetInfoRoot } from '../../../models/RTLconfig'; import { LoggerService } from '../../../services/logger.service'; import { SessionService } from '../../../services/session.service'; import { GetInfoChain } from '../../../models/lndModels'; @@ -34,7 +34,7 @@ export class SideNavigationComponent implements OnInit, OnDestroy { faEye = faEye; public appConfig: RTLConfiguration; public selConfigNodeIndex: Number; - public selNode: ConfigSettingsNode | any; + public selNode: Node | any; public settings: Settings | null; public version = ''; public information: GetInfoRoot = {}; @@ -73,7 +73,7 @@ export class SideNavigationComponent implements OnInit, OnDestroy { this.appConfig = appConfig; }); this.store.select(rootSelNodeAndNodeData).pipe(takeUntil(this.unSubs[1])). - subscribe((rootData: { nodeDate: GetInfoRoot, selNode: ConfigSettingsNode | null }) => { + subscribe((rootData: { nodeDate: GetInfoRoot, selNode: Node | null }) => { this.information = rootData.nodeDate; if (this.information.identity_pubkey) { if (this.information.chains && typeof this.information.chains[0] === 'string') { diff --git a/src/app/shared/components/node-config/experimental-settings/experimental-settings.component.ts b/src/app/shared/components/node-config/experimental-settings/experimental-settings.component.ts index 14fb38fc..f6922f98 100644 --- a/src/app/shared/components/node-config/experimental-settings/experimental-settings.component.ts +++ b/src/app/shared/components/node-config/experimental-settings/experimental-settings.component.ts @@ -7,7 +7,7 @@ import { faInfoCircle, faCode, faExclamationTriangle } from '@fortawesome/free-s import { LoggerService } from '../../../services/logger.service'; import { RTLState } from '../../../../store/rtl.state'; import { rootSelectedNode } from '../../../../store/rtl.selector'; -import { ConfigSettingsNode } from '../../../models/RTLconfig'; +import { Node } from '../../../models/RTLconfig'; import { updateNodeSettings } from '../../../../store/rtl.actions'; import { setChildNodeSettingsLND } from '../../../../lnd/store/lnd.actions'; import { setChildNodeSettingsCLN } from '../../../../cln/store/cln.actions'; @@ -31,7 +31,7 @@ export class ExperimentalSettingsComponent implements OnInit, OnDestroy { public faCode = faCode; public features = [{ name: 'Offers', enabled: false }, { name: 'Channel Funding Policy', enabled: false }]; public enableOffers = false; - public selNode: ConfigSettingsNode; + public selNode: Node; public fundingPolicy: FunderPolicy = {}; public policyTypes = LADS_POLICY; public selPolicyType = LADS_POLICY[0]; @@ -60,7 +60,7 @@ export class ExperimentalSettingsComponent implements OnInit, OnDestroy { this.store.select(rootSelectedNode).pipe(takeUntil(this.unSubs[1])). subscribe((selNode) => { this.selNode = selNode; - this.enableOffers = this.selNode.settings.enableOffers || false; + this.enableOffers = this.selNode.Settings.enableOffers || false; this.features[0].enabled = this.enableOffers; this.logger.info(this.selNode); }); @@ -89,25 +89,25 @@ export class ExperimentalSettingsComponent implements OnInit, OnDestroy { onUpdateFeature(): boolean | void { this.logger.info(this.selNode); - this.selNode.settings.enableOffers = this.enableOffers; + this.selNode.Settings.enableOffers = this.enableOffers; this.features[0].enabled = this.enableOffers; // this.store.dispatch(updateNodeSettings({ payload: { uiMessage: UI_MESSAGES.UPDATE_SETTING, service: ServicesEnum.OFFERS, settings: { enableOffers: this.enableOffers } } })); // this.store.dispatch(setChildNodeSettingsLND({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.Settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.enableOffers // } // })); // this.store.dispatch(setChildNodeSettingsCLN({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.Settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.enableOffers // } // })); // this.store.dispatch(setChildNodeSettingsECL({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.Settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.enableOffers // } // })); } diff --git a/src/app/shared/components/node-config/node-config.component.ts b/src/app/shared/components/node-config/node-config.component.ts index a34e60ce..c676371a 100644 --- a/src/app/shared/components/node-config/node-config.component.ts +++ b/src/app/shared/components/node-config/node-config.component.ts @@ -8,7 +8,7 @@ import { openAlert } from '../../../store/rtl.actions'; import { RTLEffects } from '../../../store/rtl.effects'; import { IsAuthorizedComponent } from '../../components/data-modal/is-authorized/is-authorized.component'; -import { ConfigSettingsNode, RTLConfiguration } from '../../models/RTLconfig'; +import { Node, RTLConfiguration } from '../../models/RTLconfig'; import { RTLState } from '../../../store/rtl.state'; import { rootAppConfig, rootSelectedNode } from '../../../store/rtl.selector'; @@ -22,7 +22,7 @@ export class NodeConfigComponent implements OnInit, OnDestroy { public faTools = faTools; public showLnConfig = false; public appConfig: RTLConfiguration; - public selNode: ConfigSettingsNode | any; + public selNode: Node | any; public lnImplementationStr = ''; public links = [{ link: 'nodesettings', name: 'Node Settings' }, { link: 'pglayout', name: 'Page Layout' }, { link: 'services', name: 'Services' }, { link: 'experimental', name: 'Experimental' }, { link: 'lnconfig', name: this.lnImplementationStr }]; public activeLink = ''; diff --git a/src/app/shared/components/node-config/node-settings/node-settings.component.html b/src/app/shared/components/node-config/node-settings/node-settings.component.html index edb182f3..fb2bccd8 100644 --- a/src/app/shared/components/node-config/node-settings/node-settings.component.html +++ b/src/app/shared/components/node-config/node-settings/node-settings.component.html @@ -14,7 +14,7 @@ Use this control to toggle setting which defaults to opening unannounced channels only.
- Open Unannounced Channels + Open Unannounced Channels
@@ -31,15 +31,15 @@ Fiat conversion calls Blockchain.com API to get conversion rates.
- Enable Fiat Conversion + Enable Fiat Conversion Fiat Currency - + {{currencyUnit.id}} - Currency unit is required. + Currency unit is required.
@@ -58,8 +58,8 @@

Dashboard Layout

- - + + {{userPersona | titlecase}} diff --git a/src/app/shared/components/node-config/node-settings/node-settings.component.ts b/src/app/shared/components/node-config/node-settings/node-settings.component.ts index 93bed70b..67452fc2 100644 --- a/src/app/shared/components/node-config/node-settings/node-settings.component.ts +++ b/src/app/shared/components/node-config/node-settings/node-settings.component.ts @@ -5,7 +5,7 @@ import { Store } from '@ngrx/store'; import { faMoneyBillAlt, faPaintBrush, faInfoCircle, faExclamationTriangle, faEyeSlash } from '@fortawesome/free-solid-svg-icons'; import { CURRENCY_UNITS, UserPersonaEnum, ScreenSizeEnum, FIAT_CURRENCY_UNITS, NODE_SETTINGS, UI_MESSAGES } from '../../../services/consts-enums-functions'; -import { ConfigSettingsNode, Settings } from '../../../models/RTLconfig'; +import { Node, Settings } from '../../../models/RTLconfig'; import { LoggerService } from '../../../services/logger.service'; import { CommonService } from '../../../services/common.service'; import { RTLState } from '../../../../store/rtl.state'; @@ -27,7 +27,7 @@ export class NodeSettingsComponent implements OnInit, OnDestroy { public faPaintBrush = faPaintBrush; public faInfoCircle = faInfoCircle; public faEyeSlash = faEyeSlash; - public selNode: ConfigSettingsNode | any; + public selNode: Node | any; public userPersonas = [UserPersonaEnum.OPERATOR, UserPersonaEnum.MERCHANT]; public currencyUnits = FIAT_CURRENCY_UNITS; public themeModes = NODE_SETTINGS.modes; @@ -49,10 +49,10 @@ export class NodeSettingsComponent implements OnInit, OnDestroy { ngOnInit() { this.store.select(rootSelectedNode).pipe(takeUntil(this.unSubs[0])).subscribe((selNode) => { this.selNode = selNode; - this.selectedThemeMode = this.themeModes.find((themeMode) => this.selNode.settings.themeMode === themeMode.id) || this.themeModes[0]; - this.selectedThemeColor = this.selNode.settings.themeColor; - if (!this.selNode.settings.fiatConversion) { - this.selNode.settings.currencyUnit = ''; + this.selectedThemeMode = this.themeModes.find((themeMode) => this.selNode.Settings.themeMode === themeMode.id) || this.themeModes[0]; + this.selectedThemeColor = this.selNode.Settings.themeColor; + if (!this.selNode.Settings.fiatConversion) { + this.selNode.Settings.currencyUnit = ''; } this.previousSettings = JSON.parse(JSON.stringify(this.selNode.settings)); this.logger.info(selNode); @@ -60,26 +60,26 @@ export class NodeSettingsComponent implements OnInit, OnDestroy { } onCurrencyChange(event: any) { - this.selNode.settings.currencyUnits = [...CURRENCY_UNITS, event.value]; + this.selNode.Settings.currencyUnits = [...CURRENCY_UNITS, event.value]; this.store.dispatch(setChildNodeSettingsLND({ payload: { - userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: event.value, - currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, unannouncedChannels: this.selNode.settings.unannouncedChannels, - lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl + userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: event.value, + currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, unannouncedChannels: this.selNode.Settings.unannouncedChannels, + lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl } })); this.store.dispatch(setChildNodeSettingsCLN({ payload: { - userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: event.value, - currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, unannouncedChannels: this.selNode.settings.unannouncedChannels, - lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl + userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: event.value, + currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, unannouncedChannels: this.selNode.Settings.unannouncedChannels, + lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl } })); this.store.dispatch(setChildNodeSettingsECL({ payload: { - userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: event.value, - currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, unannouncedChannels: this.selNode.settings.unannouncedChannels, - lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl + userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: event.value, + currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, unannouncedChannels: this.selNode.Settings.unannouncedChannels, + lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl } })); } @@ -90,40 +90,40 @@ export class NodeSettingsComponent implements OnInit, OnDestroy { changeThemeColor(newThemeColor: string) { this.selectedThemeColor = newThemeColor; - this.selNode.settings.themeColor = newThemeColor; + this.selNode.Settings.themeColor = newThemeColor; } chooseThemeMode() { - this.selNode.settings.themeMode = this.selectedThemeMode.id; + this.selNode.Settings.themeMode = this.selectedThemeMode.id; } onUpdateNodeSettings(): boolean | void { - if (this.selNode.settings.fiatConversion && !this.selNode.settings.currencyUnit) { + if (this.selNode.Settings.fiatConversion && !this.selNode.Settings.currencyUnit) { return true; } this.logger.info(this.selNode.settings); this.store.dispatch(setChildNodeSettingsLND({ payload: { - userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, - selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, - fiatConversion: this.selNode.settings.fiatConversion, unannouncedChannels: this.selNode.settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, - swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl + userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, + selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, + fiatConversion: this.selNode.Settings.fiatConversion, unannouncedChannels: this.selNode.Settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, + swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl } })); this.store.dispatch(setChildNodeSettingsCLN({ payload: { - userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, - selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, - fiatConversion: this.selNode.settings.fiatConversion, unannouncedChannels: this.selNode.settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, - swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl + userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, + selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, + fiatConversion: this.selNode.Settings.fiatConversion, unannouncedChannels: this.selNode.Settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, + swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl } })); this.store.dispatch(setChildNodeSettingsECL({ payload: { - userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, - selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, - fiatConversion: this.selNode.settings.fiatConversion, unannouncedChannels: this.selNode.settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, - swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl + userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, + selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, + fiatConversion: this.selNode.Settings.fiatConversion, unannouncedChannels: this.selNode.Settings.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, + swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl } })); } diff --git a/src/app/shared/components/node-config/page-settings/page-settings.component.ts b/src/app/shared/components/node-config/page-settings/page-settings.component.ts index fa15eb7d..53686a87 100644 --- a/src/app/shared/components/node-config/page-settings/page-settings.component.ts +++ b/src/app/shared/components/node-config/page-settings/page-settings.component.ts @@ -11,7 +11,7 @@ import { CommonService } from '../../../services/common.service'; import { RTLState } from '../../../../store/rtl.state'; import { ApiCallStatusPayload } from '../../../models/apiCallsPayload'; import { rootSelectedNode } from '../../../../store/rtl.selector'; -import { SelNodeChild, ConfigSettingsNode } from '../../../models/RTLconfig'; +import { SelNodeChild, Node } from '../../../models/RTLconfig'; import { TableSetting, PageSettings } from '../../../models/pageSettings'; import { clnNodeSettings, clnPageSettings } from '../../../../cln/store/cln.selector'; import { lndNodeSettings, lndPageSettings } from '../../../../lnd/store/lnd.selector'; @@ -29,7 +29,7 @@ export class PageSettingsComponent implements OnInit, OnDestroy { public faPenRuler = faPenRuler; public faExclamationTriangle = faExclamationTriangle; - public selNode: ConfigSettingsNode; + public selNode: Node; public screenSize = ''; public screenSizeEnum = ScreenSizeEnum; public pageSizeOptions = PAGE_SIZE_OPTIONS; diff --git a/src/app/shared/components/node-config/services-settings/boltz-service-settings/boltz-service-settings.component.ts b/src/app/shared/components/node-config/services-settings/boltz-service-settings/boltz-service-settings.component.ts index 78b05cdc..fc44651f 100644 --- a/src/app/shared/components/node-config/services-settings/boltz-service-settings/boltz-service-settings.component.ts +++ b/src/app/shared/components/node-config/services-settings/boltz-service-settings/boltz-service-settings.component.ts @@ -4,7 +4,7 @@ import { takeUntil } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { ServicesEnum, UI_MESSAGES } from '../../../../services/consts-enums-functions'; -import { ConfigSettingsNode } from '../../../../models/RTLconfig'; +import { Node } from '../../../../models/RTLconfig'; import { LoggerService } from '../../../../services/logger.service'; import { faInfoCircle } from '@fortawesome/free-solid-svg-icons'; import { updateNodeSettings } from '../../../../../store/rtl.actions'; @@ -23,8 +23,8 @@ export class BoltzServiceSettingsComponent implements OnInit, OnDestroy { @ViewChild('form', { static: true }) form: any; public faInfoCircle = faInfoCircle; - public selNode: ConfigSettingsNode | any; - public previousSelNode: ConfigSettingsNode | any; + public selNode: Node | any; + public previousSelNode: Node | any; public enableBoltz = false; public serverUrl = ''; public macaroonPath = ''; @@ -37,8 +37,8 @@ export class BoltzServiceSettingsComponent implements OnInit, OnDestroy { pipe(takeUntil(this.unSubs[0])). subscribe((selNode) => { this.selNode = selNode; - this.enableBoltz = !!(selNode.settings.boltzServerUrl && selNode.settings.boltzServerUrl.trim() !== ''); - this.serverUrl = this.selNode.settings.boltzServerUrl || ''; + this.enableBoltz = !!(selNode.Settings.boltzServerUrl && selNode.Settings.boltzServerUrl.trim() !== ''); + this.serverUrl = this.selNode.Settings.boltzServerUrl || ''; this.macaroonPath = this.selNode.authentication.boltzMacaroonPath; this.previousSelNode = JSON.parse(JSON.stringify(this.selNode)); this.logger.info(selNode); @@ -67,32 +67,32 @@ export class BoltzServiceSettingsComponent implements OnInit, OnDestroy { return true; } this.logger.info(this.selNode); - this.selNode.settings.boltzServerUrl = this.serverUrl; + this.selNode.Settings.boltzServerUrl = this.serverUrl; this.selNode.authentication.boltzMacaroonPath = this.macaroonPath; // this.store.dispatch(updateNodeSettings({ payload: { uiMessage: UI_MESSAGES.UPDATE_BOLTZ_SETTINGS, service: ServicesEnum.BOLTZ, settings: { enable: this.enableBoltz, serverUrl: this.serverUrl, macaroonPath: this.macaroonPath } } })); // this.store.dispatch(setChildNodeSettingsLND({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.serverUrl, enableOffers: this.selNode.settings.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.serverUrl, enableOffers: this.selNode.Settings.enableOffers // } // })); // this.store.dispatch(setChildNodeSettingsCLN({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.serverUrl, enableOffers: this.selNode.settings.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.serverUrl, enableOffers: this.selNode.Settings.enableOffers // } // })); // this.store.dispatch(setChildNodeSettingsECL({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.serverUrl, enableOffers: this.selNode.settings.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.serverUrl, enableOffers: this.selNode.Settings.enableOffers // } // })); } onReset() { this.selNode = JSON.parse(JSON.stringify(this.previousSelNode)); - this.serverUrl = this.selNode.settings.boltzServerUrl || ''; + this.serverUrl = this.selNode.Settings.boltzServerUrl || ''; this.macaroonPath = this.selNode.authentication.boltzMacaroonPath; this.enableBoltz = !!(this.serverUrl && this.serverUrl.trim() !== ''); } diff --git a/src/app/shared/components/node-config/services-settings/loop-service-settings/loop-service-settings.component.html b/src/app/shared/components/node-config/services-settings/loop-service-settings/loop-service-settings.component.html index ec49f376..5cb03a55 100644 --- a/src/app/shared/components/node-config/services-settings/loop-service-settings/loop-service-settings.component.html +++ b/src/app/shared/components/node-config/services-settings/loop-service-settings/loop-service-settings.component.html @@ -8,9 +8,9 @@ Enable Loop Service Loop Server URL - + Service url for loop server REST APIs, eg. https://127.0.0.1:8081 - Loop server URL is required. + Loop server URL is required. Specify the loop server url with 'https://'. diff --git a/src/app/shared/components/node-config/services-settings/loop-service-settings/loop-service-settings.component.ts b/src/app/shared/components/node-config/services-settings/loop-service-settings/loop-service-settings.component.ts index ba61c403..e5c187da 100644 --- a/src/app/shared/components/node-config/services-settings/loop-service-settings/loop-service-settings.component.ts +++ b/src/app/shared/components/node-config/services-settings/loop-service-settings/loop-service-settings.component.ts @@ -4,7 +4,7 @@ import { takeUntil } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { ServicesEnum, UI_MESSAGES } from '../../../../services/consts-enums-functions'; -import { ConfigSettingsNode } from '../../../../models/RTLconfig'; +import { Node } from '../../../../models/RTLconfig'; import { LoggerService } from '../../../../services/logger.service'; import { faInfoCircle } from '@fortawesome/free-solid-svg-icons'; import { updateNodeSettings } from '../../../../../store/rtl.actions'; @@ -23,8 +23,8 @@ export class LoopServiceSettingsComponent implements OnInit, OnDestroy { @ViewChild('form', { static: true }) form: any; public faInfoCircle = faInfoCircle; - public selNode: ConfigSettingsNode | any; - public previousSelNode: ConfigSettingsNode | any; + public selNode: Node | any; + public previousSelNode: Node | any; public enableLoop = false; unSubs: Array> = [new Subject(), new Subject()]; @@ -35,7 +35,7 @@ export class LoopServiceSettingsComponent implements OnInit, OnDestroy { pipe(takeUntil(this.unSubs[0])). subscribe((selNode) => { this.selNode = selNode; - this.enableLoop = !!(selNode.settings.swapServerUrl && selNode.settings.swapServerUrl.trim() !== ''); + this.enableLoop = !!(selNode.Settings.swapServerUrl && selNode.Settings.swapServerUrl.trim() !== ''); this.previousSelNode = JSON.parse(JSON.stringify(this.selNode)); this.logger.info(selNode); }); @@ -45,42 +45,42 @@ export class LoopServiceSettingsComponent implements OnInit, OnDestroy { this.enableLoop = event.checked; if (!this.enableLoop) { this.selNode.authentication.swapMacaroonPath = ''; - this.selNode.settings.swapServerUrl = ''; + this.selNode.Settings.swapServerUrl = ''; } } onUpdateService(): boolean | void { - if (this.selNode.settings.swapServerUrl && this.selNode.settings.swapServerUrl.trim() !== '' && !this.form.controls.srvrUrl.value.includes('https://')) { + if (this.selNode.Settings.swapServerUrl && this.selNode.Settings.swapServerUrl.trim() !== '' && !this.form.controls.srvrUrl.value.includes('https://')) { this.form.controls.srvrUrl.setErrors({ invalid: true }); } - if (this.enableLoop && (!this.selNode.settings.swapServerUrl || this.selNode.settings.swapServerUrl.trim() === '' || !this.selNode.authentication.swapMacaroonPath || this.selNode.authentication.swapMacaroonPath.trim() === '')) { + if (this.enableLoop && (!this.selNode.Settings.swapServerUrl || this.selNode.Settings.swapServerUrl.trim() === '' || !this.selNode.authentication.swapMacaroonPath || this.selNode.authentication.swapMacaroonPath.trim() === '')) { return true; } this.logger.info(this.selNode); - // this.store.dispatch(updateNodeSettings({ payload: { uiMessage: UI_MESSAGES.UPDATE_LOOP_SETTINGS, service: ServicesEnum.LOOP, settings: { enable: this.enableLoop, serverUrl: this.selNode.settings.swapServerUrl, macaroonPath: this.selNode.authentication.swapMacaroonPath } } })); + // this.store.dispatch(updateNodeSettings({ payload: { uiMessage: UI_MESSAGES.UPDATE_LOOP_SETTINGS, service: ServicesEnum.LOOP, settings: { enable: this.enableLoop, serverUrl: this.selNode.Settings.swapServerUrl, macaroonPath: this.selNode.authentication.swapMacaroonPath } } })); // this.store.dispatch(setChildNodeSettingsLND({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.selNode.settings.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.selNode.Settings.enableOffers // } // })); // this.store.dispatch(setChildNodeSettingsCLN({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.selNode.settings.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.selNode.Settings.enableOffers // } // })); // this.store.dispatch(setChildNodeSettingsECL({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.selNode.settings.enableOffers + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.selNode.Settings.enableOffers // } // })); } onReset() { this.selNode = JSON.parse(JSON.stringify(this.previousSelNode)); - this.enableLoop = !!(this.selNode.settings.swapServerUrl && this.selNode.settings.swapServerUrl.trim() !== ''); + this.enableLoop = !!(this.selNode.Settings.swapServerUrl && this.selNode.Settings.swapServerUrl.trim() !== ''); } ngOnDestroy() { diff --git a/src/app/shared/components/node-config/services-settings/peerswap-service-settings/peerswap-service-settings.component.ts b/src/app/shared/components/node-config/services-settings/peerswap-service-settings/peerswap-service-settings.component.ts index 47bcd657..cc8a5571 100644 --- a/src/app/shared/components/node-config/services-settings/peerswap-service-settings/peerswap-service-settings.component.ts +++ b/src/app/shared/components/node-config/services-settings/peerswap-service-settings/peerswap-service-settings.component.ts @@ -4,7 +4,7 @@ import { takeUntil } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { ServicesEnum, UI_MESSAGES } from '../../../../services/consts-enums-functions'; -import { ConfigSettingsNode } from '../../../../models/RTLconfig'; +import { Node } from '../../../../models/RTLconfig'; import { LoggerService } from '../../../../services/logger.service'; import { faInfoCircle } from '@fortawesome/free-solid-svg-icons'; import { updateNodeSettings } from '../../../../../store/rtl.actions'; @@ -22,7 +22,7 @@ import { rootSelectedNode } from '../../../../../store/rtl.selector'; export class PeerswapServiceSettingsComponent implements OnInit, OnDestroy { public faInfoCircle = faInfoCircle; - public selNode: ConfigSettingsNode | any; + public selNode: Node | any; public enablePeerswap = false; unSubs: Array> = [new Subject(), new Subject()]; @@ -33,7 +33,7 @@ export class PeerswapServiceSettingsComponent implements OnInit, OnDestroy { pipe(takeUntil(this.unSubs[0])). subscribe((selNode) => { this.selNode = selNode; - this.enablePeerswap = !!selNode?.settings.enablePeerswap; + this.enablePeerswap = !!selNode?.Settings.enablePeerswap; this.logger.info(selNode); }); } @@ -42,23 +42,23 @@ export class PeerswapServiceSettingsComponent implements OnInit, OnDestroy { // this.store.dispatch(updateNodeSettings({ payload: { uiMessage: UI_MESSAGES.UPDATE_PEERSWAP_SETTINGS, service: ServicesEnum.PEERSWAP, settings: { enablePeerswap: this.enablePeerswap } } })); // this.store.dispatch(setChildNodeSettingsLND({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.selNode.settings.enableOffers, enablePeerswap: - // this.selNode.settings.enablePeerswap + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.selNode.Settings.enableOffers, enablePeerswap: + // this.selNode.Settings.enablePeerswap // } // })); // this.store.dispatch(setChildNodeSettingsCLN({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.selNode.settings.enableOffers, enablePeerswap: - // this.selNode.settings.enablePeerswap + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.selNode.Settings.enableOffers, enablePeerswap: + // this.selNode.Settings.enablePeerswap // } // })); // this.store.dispatch(setChildNodeSettingsECL({ // payload: { - // userPersona: this.selNode.settings.userPersona, channelBackupPath: this.selNode.settings.channelBackupPath, selCurrencyUnit: this.selNode.settings.currencyUnit, currencyUnits: this.selNode.settings.currencyUnits, fiatConversion: this.selNode.settings.fiatConversion, - // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.settings.swapServerUrl, boltzServerUrl: this.selNode.settings.boltzServerUrl, enableOffers: this.selNode.settings.enableOffers, enablePeerswap: - // this.selNode.settings.enablePeerswap + // userPersona: this.selNode.Settings.userPersona, channelBackupPath: this.selNode.Settings.channelBackupPath, selCurrencyUnit: this.selNode.Settings.currencyUnit, currencyUnits: this.selNode.Settings.currencyUnits, fiatConversion: this.selNode.Settings.fiatConversion, + // unannouncedChannels: this.selNode.unannouncedChannels, lnImplementation: this.selNode.lnImplementation, swapServerUrl: this.selNode.Settings.swapServerUrl, boltzServerUrl: this.selNode.Settings.boltzServerUrl, enableOffers: this.selNode.Settings.enableOffers, enablePeerswap: + // this.selNode.Settings.enablePeerswap // } // })); } diff --git a/src/app/shared/components/node-config/services-settings/services-settings.component.ts b/src/app/shared/components/node-config/services-settings/services-settings.component.ts index 2b4aaa0c..ae51f1c2 100644 --- a/src/app/shared/components/node-config/services-settings/services-settings.component.ts +++ b/src/app/shared/components/node-config/services-settings/services-settings.component.ts @@ -3,7 +3,7 @@ import { Router, ResolveEnd, Event, ActivatedRoute } from '@angular/router'; import { Subject } from 'rxjs'; import { takeUntil, filter } from 'rxjs/operators'; import { faLayerGroup } from '@fortawesome/free-solid-svg-icons'; -import { ConfigSettingsNode } from '../../../models/RTLconfig'; +import { Node } from '../../../models/RTLconfig'; import { Store } from '@ngrx/store'; import { RTLState } from '../../../../store/rtl.state'; import { rootSelectedNode } from '../../../../store/rtl.selector'; @@ -19,7 +19,7 @@ export class ServicesSettingsComponent implements OnInit, OnDestroy { // public links = [{ link: 'loop', name: 'Loop' }, { link: 'boltz', name: 'Boltz' }, { link: 'peerswap', name: 'Peerswap' }, { link: 'noservice', name: 'No Service' }]; public links = [{ link: 'loop', name: 'Loop' }, { link: 'boltz', name: 'Boltz' }, { link: 'noservice', name: 'No Service' }]; public activeLink = ''; - public selNode: ConfigSettingsNode | any; + public selNode: Node | any; private unSubs: Array> = [new Subject(), new Subject(), new Subject()]; constructor(private store: Store, private router: Router, private activatedRoute: ActivatedRoute) { } @@ -41,11 +41,11 @@ export class ServicesSettingsComponent implements OnInit, OnDestroy { setActiveLink() { if (this.selNode && this.selNode.settings) { - if (this.selNode.settings.swapServerUrl && this.selNode.settings.swapServerUrl.trim() !== '') { + if (this.selNode.Settings.swapServerUrl && this.selNode.Settings.swapServerUrl.trim() !== '') { this.activeLink = this.links[0].link; - } else if (this.selNode.settings.boltzServerUrl && this.selNode.settings.boltzServerUrl.trim() !== '') { + } else if (this.selNode.Settings.boltzServerUrl && this.selNode.Settings.boltzServerUrl.trim() !== '') { this.activeLink = this.links[1].link; - } else if (this.selNode.settings.enablePeerswap) { + } else if (this.selNode.Settings.enablePeerswap) { this.activeLink = this.links[2].link; } else { this.activeLink = this.links[this.links.length - 1].link; diff --git a/src/app/shared/components/settings/app-settings/app-settings.component.ts b/src/app/shared/components/settings/app-settings/app-settings.component.ts index 29f72033..df215def 100644 --- a/src/app/shared/components/settings/app-settings/app-settings.component.ts +++ b/src/app/shared/components/settings/app-settings/app-settings.component.ts @@ -41,8 +41,8 @@ export class AppSettingsComponent implements OnInit, OnDestroy { } onUpdateApplicationSettings(): boolean | void { - const defaultNodeIndex = (this.appConfig.defaultNodeIndex) ? this.appConfig.defaultNodeIndex : (this.appConfig && this.appConfig.nodes && this.appConfig.nodes.length && this.appConfig.nodes.length > 0 && this.appConfig.nodes[0].index) ? +this.appConfig.nodes[0].index : -1; - this.store.dispatch(updateApplicationSettings({ payload: { defaultNodeIndex: defaultNodeIndex } })); + this.appConfig.defaultNodeIndex = (this.appConfig.defaultNodeIndex) ? this.appConfig.defaultNodeIndex : (this.appConfig && this.appConfig.nodes && this.appConfig.nodes.length && this.appConfig.nodes.length > 0 && this.appConfig.nodes[0].index) ? +this.appConfig.nodes[0].index : -1; + this.store.dispatch(updateApplicationSettings({ payload: this.appConfig })); } onResetSettings() { diff --git a/src/app/shared/components/settings/auth-settings/auth-settings.component.ts b/src/app/shared/components/settings/auth-settings/auth-settings.component.ts index 8c51782c..d1a06319 100644 --- a/src/app/shared/components/settings/auth-settings/auth-settings.component.ts +++ b/src/app/shared/components/settings/auth-settings/auth-settings.component.ts @@ -8,7 +8,7 @@ import { faUserLock, faUserClock, faInfoCircle, faLock } from '@fortawesome/free import * as sha256 from 'sha256'; import { TwoFactorAuthComponent } from '../../data-modal/two-factor-auth/two-factor-auth.component'; -import { RTLConfiguration, ConfigSettingsNode } from '../../../models/RTLconfig'; +import { RTLConfiguration, Node } from '../../../models/RTLconfig'; import { PASSWORD_BLACKLIST, RTLActions, UI_MESSAGES } from '../../../services/consts-enums-functions'; import { SessionService } from '../../../services/session.service'; import { openAlert, resetPassword, setSelectedNode } from '../../../../store/rtl.actions'; @@ -36,7 +36,7 @@ export class AuthSettingsComponent implements OnInit, OnDestroy { public errorConfirmMsg = ''; public initializeNodeData = false; public appConfig: RTLConfiguration; - public selNode: ConfigSettingsNode | any; + public selNode: Node | any; unSubs: Array> = [new Subject(), new Subject(), new Subject()]; constructor(private logger: LoggerService, private store: Store, private actions: Actions, private router: Router, private sessionService: SessionService) { } diff --git a/src/app/shared/components/settings/settings.component.ts b/src/app/shared/components/settings/settings.component.ts index 69cbadf5..a616f36f 100644 --- a/src/app/shared/components/settings/settings.component.ts +++ b/src/app/shared/components/settings/settings.component.ts @@ -5,7 +5,7 @@ import { takeUntil, filter } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { faUserCog } from '@fortawesome/free-solid-svg-icons'; -import { ConfigSettingsNode, RTLConfiguration } from '../../models/RTLconfig'; +import { Node, RTLConfiguration } from '../../models/RTLconfig'; import { RTLState } from '../../../store/rtl.state'; import { rootSelectedNode, rootAppConfig } from '../../../store/rtl.selector'; @@ -18,7 +18,7 @@ export class SettingsComponent implements OnInit, OnDestroy { public faUserCog = faUserCog; public showBitcoind = false; - public selNode: ConfigSettingsNode | any; + public selNode: Node | any; public appConfig: RTLConfiguration; public links = [{ link: 'app', name: 'Application' }, { link: 'auth', name: 'Authentication' }, { link: 'bconfig', name: 'BitcoinD Config' }]; public activeLink = ''; @@ -42,7 +42,7 @@ export class SettingsComponent implements OnInit, OnDestroy { this.store.select(rootSelectedNode).pipe(takeUntil(this.unSubs[2])).subscribe((selNode) => { this.showBitcoind = false; this.selNode = selNode; - if (this.selNode.settings && this.selNode.settings.bitcoindConfigPath && this.selNode.settings.bitcoindConfigPath.trim() !== '') { + if (this.selNode.settings && this.selNode.Settings.bitcoindConfigPath && this.selNode.Settings.bitcoindConfigPath.trim() !== '') { this.showBitcoind = true; } }); diff --git a/src/app/shared/models/RTLconfig.ts b/src/app/shared/models/RTLconfig.ts index 36c67213..8d01f8c9 100644 --- a/src/app/shared/models/RTLconfig.ts +++ b/src/app/shared/models/RTLconfig.ts @@ -41,11 +41,11 @@ export class Authentication { } -export class ConfigSettingsNode { +export class Node { constructor( - public settings: Settings, - public authentication: Authentication, + public Settings: Settings, + public Authentication: Authentication, public index?: number, public lnNode?: string, public lnImplementation?: string @@ -62,7 +62,7 @@ export class RTLConfiguration { public enable2FA: boolean, public secret2FA: string, public allowPasswordUpdate: boolean, - public nodes: ConfigSettingsNode[] + public nodes: Node[] ) { } } diff --git a/src/app/shared/models/rtlModels.ts b/src/app/shared/models/rtlModels.ts index bfc40848..f62d2a06 100644 --- a/src/app/shared/models/rtlModels.ts +++ b/src/app/shared/models/rtlModels.ts @@ -1,5 +1,5 @@ import { ServicesEnum } from '../services/consts-enums-functions'; -import { ConfigSettingsNode, RTLConfiguration, Settings } from './RTLconfig'; +import { Node, Settings } from './RTLconfig'; export interface OpenSnackBar { message: string; @@ -10,7 +10,7 @@ export interface OpenSnackBar { export interface SetSelectedNode { uiMessage: string; prevLnNodeIndex: number; - currentLnNode: ConfigSettingsNode | null; + currentLnNode: Node | null; isInitialSetup: boolean; } diff --git a/src/app/store/rtl.actions.ts b/src/app/store/rtl.actions.ts index b055760f..61c1fe70 100644 --- a/src/app/store/rtl.actions.ts +++ b/src/app/store/rtl.actions.ts @@ -2,7 +2,7 @@ import { createAction, props } from '@ngrx/store'; import { DialogConfig } from '../shared/models/alertData'; import { ApiCallStatusPayload } from '../shared/models/apiCallsPayload'; -import { RTLConfiguration, ConfigSettingsNode, GetInfoRoot } from '../shared/models/RTLconfig'; +import { RTLConfiguration, Node, GetInfoRoot } from '../shared/models/RTLconfig'; import { FetchFile, Login, OpenSnackBar, ResetPassword, SetSelectedNode, UpdateNodeSettings, VerifyTwoFA } from '../shared/models/rtlModels'; import { RTLActions } from '../shared/services/consts-enums-functions'; @@ -36,7 +36,7 @@ export const showConfig = createAction(RTLActions.SHOW_CONFIG, props<{ payload: export const updateSelectedNodeOptions = createAction(RTLActions.UPDATE_SELECTED_NODE_OPTIONS); -export const resetRootStore = createAction(RTLActions.RESET_ROOT_STORE, props<{ payload: ConfigSettingsNode }>()); +export const resetRootStore = createAction(RTLActions.RESET_ROOT_STORE, props<{ payload: Node }>()); export const fetchRTLConfig = createAction(RTLActions.FETCH_APPLICATION_SETTINGS); diff --git a/src/app/store/rtl.effects.ts b/src/app/store/rtl.effects.ts index 1bcba338..5a786e35 100644 --- a/src/app/store/rtl.effects.ts +++ b/src/app/store/rtl.effects.ts @@ -14,7 +14,7 @@ import { LoggerService } from '../shared/services/logger.service'; import { SessionService } from '../shared/services/session.service'; import { CommonService } from '../shared/services/common.service'; import { DataService } from '../shared/services/data.service'; -import { RTLConfiguration, ConfigSettingsNode, GetInfoRoot } from '../shared/models/RTLconfig'; +import { RTLConfiguration, Node, GetInfoRoot } from '../shared/models/RTLconfig'; import { API_URL, API_END_POINTS, RTLActions, APICallStatusEnum, AuthenticateWith, CURRENCY_UNITS, ScreenSizeEnum, UI_MESSAGES } from '../shared/services/consts-enums-functions'; import { DialogConfig } from '../shared/models/alertData'; import { FetchFile, Login, OpenSnackBar, ResetPassword, UpdateNodeSettings, SetSelectedNode, VerifyTwoFA } from '../shared/models/rtlModels'; @@ -218,9 +218,9 @@ export class RTLEffects implements OnDestroy { this.logger.info(rtlConfig); this.store.dispatch(closeSpinner({ payload: UI_MESSAGES.GET_RTL_CONFIG })); this.store.dispatch(updateRootAPICallStatus({ payload: { action: 'FetchRTLConfig', status: APICallStatusEnum.COMPLETED } })); - let searchNode: ConfigSettingsNode | null = null; + let searchNode: Node | null = null; rtlConfig.nodes.forEach((node) => { - node.settings.currencyUnits = [...CURRENCY_UNITS, (node.settings?.currencyUnit ? node.settings?.currencyUnit : '')]; + node.Settings.currencyUnits = [...CURRENCY_UNITS, (node.Settings?.currencyUnit ? node.Settings?.currencyUnit : '')]; if (+(node.index || -1) === rtlConfig.selectedNodeIndex) { searchNode = node; } @@ -280,6 +280,9 @@ export class RTLEffects implements OnDestroy { mergeMap((action: { type: string, payload: RTLConfiguration }) => { this.store.dispatch(openSpinner({ payload: UI_MESSAGES.UPDATE_APPLICATION_SETTINGS })); this.store.dispatch(updateRootAPICallStatus({ payload: { action: 'updateApplicationSettings', status: APICallStatusEnum.INITIATED } })); + action.payload.nodes.forEach((node) => { + delete node.Settings.currencyUnits; + }); return this.httpClient.post(API_END_POINTS.CONF_API + '/application', action.payload). pipe(map((appConfig: RTLConfiguration) => { this.store.dispatch(updateRootAPICallStatus({ payload: { action: 'updateApplicationSettings', status: APICallStatusEnum.COMPLETED } })); @@ -516,14 +519,14 @@ export class RTLEffects implements OnDestroy { { dispatch: false } ); - initializeNode(node: ConfigSettingsNode, isInitialSetup: boolean) { + initializeNode(node: Node, isInitialSetup: boolean) { this.logger.info('Initializing node from RTL Effects.'); const landingPage = isInitialSetup ? '' : 'HOME'; - const selNode = { userPersona: node.settings.userPersona, channelBackupPath: node.settings.channelBackupPath, unannouncedChannels: !!node.settings.unannouncedChannels, - selCurrencyUnit: node.settings.currencyUnit, currencyUnits: CURRENCY_UNITS, fiatConversion: node.settings.fiatConversion, lnImplementation: node.lnImplementation, - swapServerUrl: node.settings.swapServerUrl, boltzServerUrl: node.settings.boltzServerUrl, enableOffers: node.settings.enableOffers, enablePeerswap: node.settings.enablePeerswap }; - if (node.settings.fiatConversion && node.settings.currencyUnit) { - selNode['currencyUnits'] = [...CURRENCY_UNITS, node.settings.currencyUnit]; + const selNode = { userPersona: node.Settings.userPersona, channelBackupPath: node.Settings.channelBackupPath, unannouncedChannels: !!node.Settings.unannouncedChannels, + selCurrencyUnit: node.Settings.currencyUnit, currencyUnits: CURRENCY_UNITS, fiatConversion: node.Settings.fiatConversion, lnImplementation: node.lnImplementation, + swapServerUrl: node.Settings.swapServerUrl, boltzServerUrl: node.Settings.boltzServerUrl, enableOffers: node.Settings.enableOffers, enablePeerswap: node.Settings.enablePeerswap }; + if (node.Settings.fiatConversion && node.Settings.currencyUnit) { + selNode['currencyUnits'] = [...CURRENCY_UNITS, node.Settings.currencyUnit]; } this.sessionService.removeItem('lndUnlocked'); this.sessionService.removeItem('clnUnlocked'); diff --git a/src/app/store/rtl.reducers.spec.ts b/src/app/store/rtl.reducers.spec.ts index bfea3477..0a19bcc4 100644 --- a/src/app/store/rtl.reducers.spec.ts +++ b/src/app/store/rtl.reducers.spec.ts @@ -18,9 +18,9 @@ describe('RTL reducer', () => { const SetSelectedNodeAction = setSelectedNode({ payload: { uiMessage: UI_MESSAGES.NO_SPINNER, prevLnNodeIndex: -1, currentLnNode: mockActionsData.setSelectedNode, isInitialSetup: false } }); const newState = RootReducer(initRootState, SetSelectedNodeAction); - expect(newState.selNode.settings.themeMode).toBe('NIGHT'); - expect(newState.selNode.settings.themeColor).toBe('TEAL'); - expect(newState.selNode.settings.userPersona).toBe('MERCHANT'); + expect(newState.selNode.Settings.themeMode).toBe('NIGHT'); + expect(newState.selNode.Settings.themeColor).toBe('TEAL'); + expect(newState.selNode.Settings.userPersona).toBe('MERCHANT'); expect(newState.selNode.lnImplementation).toEqual('LND'); }); }); diff --git a/src/app/store/rtl.reducers.ts b/src/app/store/rtl.reducers.ts index 034ae6ef..ec6bec2f 100644 --- a/src/app/store/rtl.reducers.ts +++ b/src/app/store/rtl.reducers.ts @@ -2,8 +2,6 @@ import { createReducer, on } from '@ngrx/store'; import { initRootState } from './rtl.state'; import { resetRootStore, setNodeData, setApplicationSettings, setSelectedNode, updateRootAPICallStatus } from './rtl.actions'; -import { ServicesEnum } from '../shared/services/consts-enums-functions'; -import { ConfigSettingsNode } from '../shared/models/RTLconfig'; export const RootReducer = createReducer(initRootState, on(updateRootAPICallStatus, (state, { payload }) => { diff --git a/src/app/store/rtl.state.ts b/src/app/store/rtl.state.ts index f2584811..8addf2be 100644 --- a/src/app/store/rtl.state.ts +++ b/src/app/store/rtl.state.ts @@ -1,6 +1,6 @@ import { ApiCallsListRoot } from '../shared/models/apiCallsPayload'; import { APICallStatusEnum } from '../shared/services/consts-enums-functions'; -import { RTLConfiguration, ConfigSettingsNode, GetInfoRoot } from '../shared/models/RTLconfig'; +import { RTLConfiguration, Node, GetInfoRoot } from '../shared/models/RTLconfig'; import { LNDState } from '../lnd/store/lnd.state'; import { CLNState } from '../cln/store/cln.state'; @@ -9,7 +9,7 @@ import { ECLState } from '../eclair/store/ecl.state'; export interface RootState { apiURL: string; apisCallStatus: ApiCallsListRoot; - selNode: ConfigSettingsNode | any; + selNode: Node | any; appConfig: RTLConfiguration; nodeData: GetInfoRoot; } @@ -28,7 +28,7 @@ export const initRootState: RootState = { enable2FA: false, secret2FA: '', allowPasswordUpdate: true, - nodes: [{ settings: initNodeSettings, authentication: initNodeAuthentication }] + nodes: [{ Settings: initNodeSettings, Authentication: initNodeAuthentication }] }, nodeData: {} };