resolve-runtime
Version:
This package create server with resolve.
104 lines (79 loc) • 2.93 kB
JavaScript
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
;