Merge pull request #62 from shocknet/feature/lnd-sockets
LND Sockets added and refactored sockets functionality
This commit is contained in:
commit
609c0f2b96
2 changed files with 62 additions and 45 deletions
|
|
@ -207,17 +207,17 @@ const server = program => {
|
||||||
const CA = LightningServices.servicesConfig.lndCertPath
|
const CA = LightningServices.servicesConfig.lndCertPath
|
||||||
const CA_KEY = CA.replace('cert', 'key')
|
const CA_KEY = CA.replace('cert', 'key')
|
||||||
|
|
||||||
const createServer = async () => {
|
const createServer = () => {
|
||||||
try {
|
try {
|
||||||
if (LightningServices.servicesConfig.lndCertPath && program.usetls) {
|
// if (LightningServices.servicesConfig.lndCertPath && program.usetls) {
|
||||||
const [key, cert] = await Promise.all([
|
// const [key, cert] = await Promise.all([
|
||||||
FS.readFile(CA_KEY),
|
// FS.readFile(CA_KEY),
|
||||||
FS.readFile(CA)
|
// FS.readFile(CA)
|
||||||
])
|
// ])
|
||||||
const httpsServer = Https.createServer({ key, cert }, app)
|
// const httpsServer = Https.createServer({ key, cert }, app)
|
||||||
|
|
||||||
return httpsServer
|
// return httpsServer
|
||||||
}
|
// }
|
||||||
|
|
||||||
const httpServer = Http.Server(app)
|
const httpServer = Http.Server(app)
|
||||||
return httpServer
|
return httpServer
|
||||||
|
|
@ -236,7 +236,7 @@ const server = program => {
|
||||||
|
|
||||||
const io = require('socket.io')(serverInstance)
|
const io = require('socket.io')(serverInstance)
|
||||||
|
|
||||||
const Sockets = require('./sockets')(io, lnd)
|
const Sockets = require('./sockets')(io)
|
||||||
|
|
||||||
require('./routes')(app, defaults, Sockets, {
|
require('./routes')(app, defaults, Sockets, {
|
||||||
serverHost: module.serverHost,
|
serverHost: module.serverHost,
|
||||||
|
|
|
||||||
|
|
@ -1,45 +1,59 @@
|
||||||
// app/sockets.js
|
// app/sockets.js
|
||||||
|
|
||||||
const logger = require("winston");
|
const logger = require("winston");
|
||||||
|
const LightningServices = require("../utils/lightningServices");
|
||||||
|
|
||||||
module.exports = (
|
module.exports = (
|
||||||
/** @type {import('socket.io').Server} */
|
/** @type {import('socket.io').Server} */
|
||||||
io,
|
io
|
||||||
lnd,
|
|
||||||
) => {
|
) => {
|
||||||
|
|
||||||
const Mediator = require("../services/gunDB/Mediator/index.js");
|
const Mediator = require("../services/gunDB/Mediator/index.js");
|
||||||
const EventEmitter = require("events");
|
|
||||||
|
const onNewInvoice = socket => {
|
||||||
class MySocketsEvents extends EventEmitter {}
|
const { lightning } = LightningServices.services;
|
||||||
|
logger.warn("Subscribing to invoices socket...")
|
||||||
const mySocketsEvents = new MySocketsEvents();
|
const stream = lightning.subscribeInvoices({});
|
||||||
|
stream.on("data", data => {
|
||||||
// register the lnd invoices listener
|
logger.info("[SOCKET] New invoice data:", data);
|
||||||
const registerLndInvoiceListener = socket => {
|
socket.emit("invoice:new", data)
|
||||||
socket._invoiceListener = {
|
})
|
||||||
dataReceived(data) {
|
stream.on("end", () => {
|
||||||
socket.emit("invoice", data);
|
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 { 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", () => {
|
||||||
|
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 => {
|
io.on("connection", socket => {
|
||||||
logger.info(`io.onconnection`)
|
logger.info(`io.onconnection`)
|
||||||
|
|
@ -50,6 +64,7 @@ module.exports = (
|
||||||
logger.info("New socket client connected (id=" + socket.id + ").");
|
logger.info("New socket client connected (id=" + socket.id + ").");
|
||||||
|
|
||||||
const isOneTimeUseSocket = !!socket.handshake.query.IS_GUN_AUTH
|
const isOneTimeUseSocket = !!socket.handshake.query.IS_GUN_AUTH
|
||||||
|
const isLNDSocket = !!socket.handshake.query.IS_LND_SOCKET
|
||||||
|
|
||||||
if (isOneTimeUseSocket) {
|
if (isOneTimeUseSocket) {
|
||||||
logger.info('New socket is one time use')
|
logger.info('New socket is one time use')
|
||||||
|
|
@ -78,15 +93,17 @@ module.exports = (
|
||||||
// this is where we create the websocket connection
|
// this is where we create the websocket connection
|
||||||
// with the GunDB service.
|
// with the GunDB service.
|
||||||
Mediator.createMediator(socket);
|
Mediator.createMediator(socket);
|
||||||
registerSocketListeners(socket);
|
if (isLNDSocket) {
|
||||||
|
onNewInvoice(socket);
|
||||||
|
onNewTransaction(socket);
|
||||||
|
}
|
||||||
|
|
||||||
/** listening if client has disconnected */
|
/** listening if client has disconnected */
|
||||||
socket.on("disconnect", () => {
|
socket.on("disconnect", () => {
|
||||||
unregisterSocketListeners(socket);
|
|
||||||
logger.info("client disconnected (id=" + socket.id + ").");
|
logger.info("client disconnected (id=" + socket.id + ").");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return mySocketsEvents;
|
return io;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue