UNPKG

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
"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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