UNPKG

blackbox_server

Version:

service for quickly creating server applications

153 lines (152 loc) 6.97 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.readFromFile = exports.decodeJwtForResponse = exports.checkTokenBearer = exports.checkAccessIp = exports.onErrorRequest = exports.BlackBoxBaseServiceModel = exports.BlackBoxHttpUnauthorizedException = exports.BlackBoxHttpInternalServerException = exports.BlackBoxHttpTooManyRequests = exports.BlackBoxHttpValidationException = exports.BlackBoxBaseController = exports.BlackBoxRouter = exports.onErrorAfterResponse = exports.notFound = exports.createApp = exports.BlackBoxApp = void 0; const express_1 = __importDefault(require("express")); const compression_1 = __importDefault(require("compression")); const body_parser_1 = __importDefault(require("body-parser")); const emitters_1 = require("./emitters"); const log_colors_1 = require("./utils/log-colors"); const httpErrors_1 = require("./dataClasses/httpErrors"); const clientInfo_1 = __importDefault(require("./dataClasses/clientInfo")); const statusAppConnect_1 = __importDefault(require("./dataClasses/statusAppConnect")); const utils_1 = require("./utils"); const server_1 = require("./server"); const http_1 = __importDefault(require("http")); const baseController_1 = __importDefault(require("./controllers/baseController")); const baseServiceModel_1 = __importDefault(require("./services/baseServiceModel")); const decorators_1 = require("./decorators"); exports.BlackBoxApp = express_1.default(); function createApp(env) { exports.BlackBoxApp.use(compression_1.default()); const urlencodedParser = body_parser_1.default.urlencoded({ limit: '50mb', extended: false, parameterLimit: 50000, }); const jsonParser = body_parser_1.default.json({ limit: '50mb' }); exports.BlackBoxApp.use(urlencodedParser); exports.BlackBoxApp.use(jsonParser); exports.BlackBoxApp.addListener('eventLog', emitters_1.eventLog); exports.BlackBoxApp.addListener('errorLog', emitters_1.errorLog); exports.BlackBoxApp.addListener('errorPromiseLog', emitters_1.errorPromiseLog); process.on('uncaughtException', (error) => { exports.BlackBoxApp.emit('errorLog', error); process.exit(1); }); process.on('unhandledRejection', (reason, promise) => { if (reason instanceof httpErrors_1.HttpInternalServerException) { reason.response.send(reason.message); } else if (reason instanceof httpErrors_1.HttpValidationException) { reason.response.send(reason.message); } exports.BlackBoxApp.emit('errorPromiseLog', reason, promise); }); const exits = ['exit', 'SIGTERM', 'SIGINT', 'SIGHUP', 'SIGQUIT']; exits.forEach((event) => { process.on(event, (code) => { console.log(log_colors_1.warnMsg(`⚡️[event ${"SERVER_IS_STOPPED"}]: ${new Date()} - server остановлен по коду ${code}`)); process.exit(0); }); }); exports.BlackBoxApp.use(onRequest); exports.BlackBoxApp.use(setHeader); exports.BlackBoxApp.get('/_ping', ping); exports.BlackBoxApp.get('/healthcheck', healthCheck); exports.BlackBoxApp.use(onErrorRequest); const server = http_1.default.createServer(exports.BlackBoxApp); server_1.serverStart(server, env); return exports.BlackBoxApp; } exports.createApp = createApp; function notFound(_request, response, _next) { return response.status(404).send('Ресурс не найден'); } exports.notFound = notFound; function onErrorAfterResponse(error, _request, _response, _next) { if (error instanceof SyntaxError) exports.BlackBoxApp.emit('errorLog', error, "CONTROLLER"); } exports.onErrorAfterResponse = onErrorAfterResponse; function BlackBoxRouter() { return express_1.default.Router(); } exports.BlackBoxRouter = BlackBoxRouter; function BlackBoxBaseController() { return baseController_1.default; } exports.BlackBoxBaseController = BlackBoxBaseController; function BlackBoxHttpValidationException() { return httpErrors_1.HttpValidationException; } exports.BlackBoxHttpValidationException = BlackBoxHttpValidationException; function BlackBoxHttpTooManyRequests() { return httpErrors_1.HttpTooManyRequests; } exports.BlackBoxHttpTooManyRequests = BlackBoxHttpTooManyRequests; function BlackBoxHttpInternalServerException() { return httpErrors_1.HttpInternalServerException; } exports.BlackBoxHttpInternalServerException = BlackBoxHttpInternalServerException; function BlackBoxHttpUnauthorizedException() { return httpErrors_1.HttpUnauthorizedException; } exports.BlackBoxHttpUnauthorizedException = BlackBoxHttpUnauthorizedException; function BlackBoxBaseServiceModel() { return baseServiceModel_1.default; } exports.BlackBoxBaseServiceModel = BlackBoxBaseServiceModel; function onErrorRequest(error, _request, response, _next) { exports.BlackBoxApp.emit('errorLog', error, "REQUEST"); if (error instanceof URIError) { return response.status(400).send('oops ...'); } if (error instanceof httpErrors_1.HttpUnauthorizedException) { return response.send(error.message); } if (error instanceof httpErrors_1.HttpValidationException) { return response.send(error.message); } if (error instanceof httpErrors_1.HttpTooManyRequests) { return response.send(error.message); } if (error instanceof httpErrors_1.HttpUnauthorizedException) { return response.send(error.message); } return response.status(500).send(error.message); } exports.onErrorRequest = onErrorRequest; function onRequest(request, _response, next) { const clientInfo = new clientInfo_1.default(request); request['ClientInfo'] = clientInfo.toObject(); exports.BlackBoxApp.emit('eventLog', "CLIENT_REQUEST", clientInfo.toString()); next(); } function ping(_request, response, _next) { return response.status(200).send('OK'); } function healthCheck(_request, response, _next) { if ((utils_1.getConfigFile.USE_RABBIT && !statusAppConnect_1.default.connectedRabbit) || !statusAppConnect_1.default.connectedDB) { return response .status(404) .send(JSON.stringify(statusAppConnect_1.default)); } return response.status(200).send('OK'); } function setHeader(_request, response, next) { const headers = utils_1.getConfigFile.HEADERS; if (headers && Array.isArray(headers)) { headers.forEach((head) => { response.setHeader(head === null || head === void 0 ? void 0 : head.key, head === null || head === void 0 ? void 0 : head.value); }); } next(); } exports.checkAccessIp = decorators_1.checkAccessIP; exports.checkTokenBearer = decorators_1.checkBearerToken; exports.decodeJwtForResponse = utils_1.decodeJWTforResponse; exports.readFromFile = utils_1.getConfig;