@vara/custom-logic-sdk
Version:
Server Side JavaScript SDK for Custom Business Logic
37 lines (29 loc) • 1.35 kB
JavaScript
const _ = require('lodash');
const clFnRegistry = require('../services/fn-registry');
const customError = require('../services/custom-error');
const fnExecutorSvc = require('../services/fn-executor-svc');
const ApplicationErrors = require('../constants/application-errors.json');
const logSvc = require('../services/log-svc');
const { ResourceNotFoundError, InternalError } = ApplicationErrors;
async function clActionExecutor(req, res, next) {
const logPrefix = 'RouteHandler#clActionExecutor';
const clActionName = _.get(req, 'params.name');
const clAction = clFnRegistry.getClAction(clActionName);
const logCtx = {
clActionName,
};
if (!clAction) {
const resourceNotFoundErr = customError(ResourceNotFoundError.name, `Custom Logic Action: ${clActionName} was not found`);
logSvc.logWarning(resourceNotFoundErr, logCtx, logPrefix);
return next(resourceNotFoundErr);
}
try {
const { context, done } = fnExecutorSvc.buildClActionParams(req, res, next);
return await fnExecutorSvc.execHandler(clAction.handler, context, done);
} catch (err) {
const internalErr = customError(InternalError.name, null, { innerError: err });
logSvc.logError(internalErr, logCtx, logPrefix, `Custom Logic Action: ${clActionName} failed;`);
return next(internalErr);
}
}
module.exports = clActionExecutor;