leap-node
Version:
[](https://codecov.io/gh/leapdao/leap-node) [](https://quay.io/re
66 lines (55 loc) • 1.49 kB
JavaScript
const express = require('express');
const cors = require('cors');
const jayson = require('jayson');
const jsonParser = require('body-parser').json;
const WsJsonRpcServer = require('rpc-websockets').Server;
const getMethods = require('./methods');
const api = express();
api.use(
cors({
origin: '*',
})
);
api.use(jsonParser());
/*
* Starts JSON RPC server
*/
module.exports = async (bridgeState, tendermintPort, db, app) => {
const withParams = method => {
return params => method(...params);
};
const { nodeApi, methodsWithCallback } = getMethods(
bridgeState,
db,
app,
tendermintPort
);
api.use(jayson.server(methodsWithCallback).middleware());
return {
listenHttp: async ({ host, port }) => {
return new Promise(resolve => {
const server = api.listen(port || 8645, host || 'localhost', () => {
resolve(server.address());
});
});
},
listenWs: ({ host, port }) => {
const wsServer = new WsJsonRpcServer({
port: port || 8646,
host: host || 'localhost',
});
// register an RPC method
Object.keys(nodeApi).forEach(key => {
wsServer.register(key.toString(), withParams(nodeApi[key]));
});
return new Promise(resolve => {
wsServer.on('listening', () => {
return resolve({
address: wsServer.wss.options.host,
port: wsServer.wss.options.port,
});
});
});
},
};
};