UNPKG

resolve-runtime

Version:
104 lines (79 loc) 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _server_side_rendering = _interopRequireDefault(require("./server_side_rendering")); var _command_handler = _interopRequireDefault(require("./command_handler")); var _query_handler = _interopRequireDefault(require("./query_handler")); var _status_handler = _interopRequireDefault(require("./status_handler")); var _subscribe_handler = _interopRequireDefault(require("./subscribe_handler")); var _get_root_based_url = _interopRequireDefault(require("../utils/get_root_based_url")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const mainHandler = async (originalReq, res) => { const { rootPath, jwtCookie, apiHandlers } = originalReq.resolve; const checkPath = value => { const baseUrl = (0, _get_root_based_url.default)(rootPath, value).toLowerCase(); return originalReq.path.toLowerCase().startsWith(baseUrl); }; const req = Object.create(originalReq); let jwtToken = req.cookies[jwtCookie.name]; if (req.headers && req.headers.authorization) { jwtToken = req.headers.authorization.replace(/^Bearer /i, ''); } req.jwtToken = jwtToken; if (jwtToken) { res.setHeader('Authorization', `Bearer ${jwtToken}`); } if (rootPath && originalReq.path === `/${rootPath}`) { await res.redirect(`/${rootPath}/`); return; } // TODO: Matching URLs one by one is very slow and inefficient // TODO: Use Left prefix mathing tree instead of switch/case for (const _ref of apiHandlers) { const { method, path, controller } = _ref; if (req.method.toLowerCase() === method.toLowerCase() && checkPath(`/api/${path}`)) { return await controller(req, res); } } switch (true) { case checkPath('/api/query') && ['GET', 'POST'].includes(req.method): { return await (0, _query_handler.default)(req, res); } case checkPath('/api/status') && req.method === 'GET': { return await (0, _status_handler.default)(req, res); } case checkPath('/api/commands') && req.method === 'POST': { return await (0, _command_handler.default)(req, res); } case checkPath('/api/subscribe') && ['GET', 'POST'].includes(req.method): { return await (0, _subscribe_handler.default)(req, res); } case checkPath(`/`) && req.method === 'GET': { return await (0, _server_side_rendering.default)(req, res); } default: { await res.status(405); await res.end(`Access error: path "${req.path}" is not addressable by current executor`); resolveLog('warn', 'Path is not addressable by current executor', req.path, req); return; } } }; var _default = mainHandler; exports.default = _default; //# sourceMappingURL=main_handler.js.map