From e4564960100f497895c29225e173cf2056188316 Mon Sep 17 00:00:00 2001 From: emad-salah Date: Sun, 5 Apr 2020 18:09:42 +0100 Subject: [PATCH 1/2] LND Sockets added --- src/server.js | 23 ++++++++------- src/sockets.js | 76 ++++++++++++++++++++++++++++---------------------- 2 files changed, 55 insertions(+), 44 deletions(-) diff --git a/src/server.js b/src/server.js index 1afa8104..b08c5d8e 100644 --- a/src/server.js +++ b/src/server.js @@ -207,17 +207,17 @@ const server = program => { const CA = LightningServices.servicesConfig.lndCertPath const CA_KEY = CA.replace('cert', 'key') - const createServer = async () => { + const createServer = () => { try { - if (LightningServices.servicesConfig.lndCertPath && program.usetls) { - const [key, cert] = await Promise.all([ - FS.readFile(CA_KEY), - FS.readFile(CA) - ]) - const httpsServer = Https.createServer({ key, cert }, app) + // if (LightningServices.servicesConfig.lndCertPath && program.usetls) { + // const [key, cert] = await Promise.all([ + // FS.readFile(CA_KEY), + // FS.readFile(CA) + // ]) + // const httpsServer = Https.createServer({ key, cert }, app) - return httpsServer - } + // return httpsServer + // } const httpServer = Http.Server(app) return httpServer @@ -236,7 +236,10 @@ const server = program => { const io = require('socket.io')(serverInstance) - const Sockets = require('./sockets')(io, lnd) + const Sockets = require('./sockets')( + io, + LightningServices.services.lightning + ) require('./routes')(app, defaults, Sockets, { serverHost: module.serverHost, diff --git a/src/sockets.js b/src/sockets.js index 2e41ad0f..628fbe2c 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -5,41 +5,49 @@ const logger = require("winston"); module.exports = ( /** @type {import('socket.io').Server} */ io, - lnd, + lightning, ) => { - const Mediator = require("../services/gunDB/Mediator/index.js"); - const EventEmitter = require("events"); - - class MySocketsEvents extends EventEmitter {} - - const mySocketsEvents = new MySocketsEvents(); - - // register the lnd invoices listener - const registerLndInvoiceListener = socket => { - socket._invoiceListener = { - dataReceived(data) { - socket.emit("invoice", data); + + const onNewInvoice = socket => { + const stream = lightning.subscribeInvoice({}); + stream.on("data", data => { + socket.emit("invoice:new", data) + }) + stream.on("end", () => { + logger.info("New invoice stream ended, starting a new one...") + onNewInvoice(socket); + }) + stream.on("error", err => { + logger.error("New invoice stream error:", err); + }) + stream.on("status", status => { + logger.error("New invoice stream status:", status); + if (status.code === 14) { + onNewInvoice(socket); } - }; - lnd.registerInvoiceListener(socket._invoiceListener); - }; - - // unregister the lnd invoices listener - const unregisterLndInvoiceListener = socket => { - lnd.unregisterInvoiceListener(socket._invoiceListener); - }; - - // register the socket listeners - const registerSocketListeners = socket => { - registerLndInvoiceListener(socket); - }; - - // unregister the socket listeners - const unregisterSocketListeners = socket => { - unregisterLndInvoiceListener(socket); - }; + }) + } + const onNewTransaction = socket => { + const stream = lightning.subscribeTransaction({}); + stream.on("data", data => { + socket.emit("transaction:new", data) + }) + stream.on("end", () => { + logger.info("New invoice stream ended, starting a new one...") + onNewTransaction(socket); + }) + stream.on("error", err => { + logger.error("New invoice stream error:", err); + }) + stream.on("status", status => { + logger.error("New invoice stream status:", status); + if (status.code === 14) { + onNewTransaction(socket); + } + }) + } io.on("connection", socket => { logger.info(`io.onconnection`) @@ -78,15 +86,15 @@ module.exports = ( // this is where we create the websocket connection // with the GunDB service. Mediator.createMediator(socket); - registerSocketListeners(socket); + onNewInvoice(socket); + onNewTransaction(socket); /** listening if client has disconnected */ socket.on("disconnect", () => { - unregisterSocketListeners(socket); logger.info("client disconnected (id=" + socket.id + ")."); }); } }) - return mySocketsEvents; + return io; }; From 652064ba61a13a8aa07b2dd17991415b06f41566 Mon Sep 17 00:00:00 2001 From: emad-salah Date: Wed, 8 Apr 2020 17:06:24 +0100 Subject: [PATCH 2/2] Sockets refactoring and LND Socket functionality completed! --- src/server.js | 5 +---- src/sockets.js | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/server.js b/src/server.js index c430d808..4a22b471 100644 --- a/src/server.js +++ b/src/server.js @@ -236,10 +236,7 @@ const server = program => { const io = require('socket.io')(serverInstance) - const Sockets = require('./sockets')( - io, - LightningServices.services.lightning - ) + const Sockets = require('./sockets')(io) require('./routes')(app, defaults, Sockets, { serverHost: module.serverHost, diff --git a/src/sockets.js b/src/sockets.js index 628fbe2c..476da12f 100644 --- a/src/sockets.js +++ b/src/sockets.js @@ -1,17 +1,20 @@ // app/sockets.js const logger = require("winston"); +const LightningServices = require("../utils/lightningServices"); module.exports = ( /** @type {import('socket.io').Server} */ - io, - lightning, + io ) => { const Mediator = require("../services/gunDB/Mediator/index.js"); const onNewInvoice = socket => { - const stream = lightning.subscribeInvoice({}); + const { lightning } = LightningServices.services; + logger.warn("Subscribing to invoices socket...") + const stream = lightning.subscribeInvoices({}); stream.on("data", data => { + logger.info("[SOCKET] New invoice data:", data); socket.emit("invoice:new", data) }) stream.on("end", () => { @@ -30,8 +33,11 @@ module.exports = ( } const onNewTransaction = socket => { - const stream = lightning.subscribeTransaction({}); + const { lightning } = LightningServices.services; + const stream = lightning.subscribeTransactions({}); + logger.warn("Subscribing to transactions socket...") stream.on("data", data => { + logger.info("[SOCKET] New transaction data:", data); socket.emit("transaction:new", data) }) stream.on("end", () => { @@ -58,6 +64,7 @@ module.exports = ( logger.info("New socket client connected (id=" + socket.id + ")."); const isOneTimeUseSocket = !!socket.handshake.query.IS_GUN_AUTH + const isLNDSocket = !!socket.handshake.query.IS_LND_SOCKET if (isOneTimeUseSocket) { logger.info('New socket is one time use') @@ -86,8 +93,10 @@ module.exports = ( // this is where we create the websocket connection // with the GunDB service. Mediator.createMediator(socket); - onNewInvoice(socket); - onNewTransaction(socket); + if (isLNDSocket) { + onNewInvoice(socket); + onNewTransaction(socket); + } /** listening if client has disconnected */ socket.on("disconnect", () => {