@microfleet/core
Version:
Abstract microservice core
44 lines • 1.79 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const validation_1 = require("@microfleet/validation");
const common_errors_1 = require("common-errors");
const lifecycle_1 = require("./lifecycle");
function handleValidationError(service, err) {
const { responseValidation } = service.router.config.routes;
if (responseValidation.panic) {
if (err.constructor === validation_1.HttpStatusError) {
throw err;
}
throw new common_errors_1.Error('internal response validation error', err);
}
}
async function validate(err, response, request) {
// do nothing with errors
if (err)
return [err, response, request];
const { validator } = this;
const { action } = request;
try {
await validator.validate(action.responseSchema, response);
return [null, response, request];
}
catch (err) {
handleValidationError(this, err);
this.log.warn({ err, action: action.actionName }, '[response] validation failed');
return [null, response, request];
}
}
function passThrough(err, response, request) {
return [err, response, request];
}
function validateResponseHandler(params) {
const [, , request] = params;
const { responseValidation } = this.router.config.routes;
const { enabled, maxSample } = responseValidation;
const { validateResponse } = request.action;
const shouldValidate = Math.round(Math.random() * 100) <= maxSample;
const validateFn = enabled && (validateResponse !== false) && shouldValidate ? validate : passThrough;
return lifecycle_1.default('validate-response', validateFn, this.router.extensions, params, this);
}
exports.default = validateResponseHandler;
//# sourceMappingURL=validate-response.js.map
;