UNPKG

@microfleet/core

Version:
44 lines 1.79 kB
"use strict"; 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