verusd-web
Version:
A Verus Blockchain library that enables a bi-directional communication with the Verus and other Verus PBaas chains.
101 lines • 9.47 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpServer = void 0;
const helmet_1 = __importDefault(require("helmet"));
const express_1 = __importDefault(require("express"));
const RpcService_1 = require("./RpcService");
const RpcServiceConfig_1 = require("./RpcServiceConfig");
const RestApiRoutesService_1 = require("./RestApiRoutesService");
const RestApiService_1 = require("./RestApiService");
class HttpServer {
constructor(config) {
this.clientHookInterface = [];
this.customApiRoutes = [];
this.apiToken = '';
this.wsSuffix = 'verusd/web';
this.port = config.port;
this.wsServer = config.wsServer;
this.clientHookInterface = config.clientHooks;
this.apiToken = config.apiToken;
if (config.customApiRoutes !== undefined && config.customApiRoutes.at(0) !== undefined) {
this.customApiRoutes = config.customApiRoutes;
}
}
close() {
this.expressApp = undefined;
return true;
}
open() {
this.wsServer.open().receive();
this.expressApp = (0, express_1.default)();
this.expressApp
.use((0, helmet_1.default)())
.use(express_1.default.json())
.use(express_1.default.urlencoded({ extended: true }));
this.setupDefaultRpcApis(this.expressApp);
this.setupCustomApis(this.expressApp);
const httpServer = this.expressApp.listen(this.port);
this.attachWsServerConnection(httpServer);
console.log(`HTTP and WS Server running in port ${this.port} ...`);
return this;
}
attachWsServerConnection(httpServer) {
if (this.wsServer.socket === undefined) {
throw new Error("Websocket Server is not running!");
}
const wss = this.wsServer.socket;
const clientHook = this.clientHookInterface;
httpServer.on('upgrade', (request, socket, head) => {
const pathname = request.url;
if (pathname === `/${this.wsSuffix}`) {
wss.handleUpgrade(request, socket, head, function done(ws) {
ws.send(JSON.stringify({ data: 'connection established' }));
ws.on('message', function message(data) {
console.log('received: %s', data);
const convData = data;
if (clientHook[0] !== undefined) {
HttpServer.iterateHookOperations(ws, convData, {}, 'messageReceived', clientHook);
return;
}
const d = JSON.parse(convData);
if (!RpcServiceConfig_1.RpcServiceConfig.getAllowedMethods().includes(d.m.trim())) {
ws.send(JSON.stringify({ result: 'unknown rest api method', error: true }));
return;
}
RpcService_1.RpcService.sendChainRequest(d.m, d.p)
.then((v) => { ws.send(JSON.stringify(v)); });
});
ws.on('error', console.error);
});
}
else {
socket.destroy();
}
});
}
static iterateHookOperations(ws, data, previousHookResult, methodName, hooks) {
let results = [];
hooks.forEach((currentHook, _index) => {
const method = Reflect.get(currentHook, methodName);
if (typeof method === 'function') {
const result = Reflect.apply(method, currentHook, [ws, data, previousHookResult]);
results.push(result);
}
});
return results;
}
setupDefaultRpcApis(app) {
const routes = [
{ method: 'get', apiVersion: 1, route: this.wsSuffix, controller: RestApiService_1.RestApiService.routeController }
];
RestApiRoutesService_1.RestApiRoutesService.generate(app, routes, this.apiToken);
}
setupCustomApis(app) {
RestApiRoutesService_1.RestApiRoutesService.generate(app, this.customApiRoutes, this.apiToken);
}
}
exports.HttpServer = HttpServer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cFNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvSHR0cFNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxvREFBNEI7QUFDNUIsc0RBQTJDO0FBRzNDLDZDQUEwQztBQUMxQyx5REFBc0Q7QUFDdEQsaUVBQWdGO0FBQ2hGLHFEQUFrRDtBQWNsRCxNQUFhLFVBQVU7SUFTbkIsWUFBWSxNQUF3QjtRQUw1Qix3QkFBbUIsR0FBaUMsRUFBRSxDQUFDO1FBQ3ZELG9CQUFlLEdBQWtCLEVBQUUsQ0FBQztRQUNwQyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ0wsYUFBUSxHQUFHLFlBQVksQ0FBQztRQUdyQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFHLE1BQU0sQ0FBQyxlQUFlLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BGLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSTtRQUNBLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFBLGlCQUFPLEdBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMs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