nginx-proxy-manager/backend/lib/validator/api.js
2024-07-11 15:44:23 +02:00

46 lines
1.1 KiB
JavaScript

const error = require('../error');
const path = require('path');
const parser = require('@apidevtools/json-schema-ref-parser');
const Ajv = require('ajv');
const addFormats = require('ajv-formats');
const ajv = new Ajv({
verbose: true,
validateSchema: true,
allErrors: false,
coerceTypes: true,
strict: false,
});
addFormats(ajv);
/**
* @param {Object} schema
* @param {Object} payload
* @returns {Promise}
*/
function apiValidator(schema, payload /*, description */) {
return new Promise(function Promise_apiValidator(resolve, reject) {
if (typeof payload === 'undefined') {
reject(new error.ValidationError('Payload is undefined'));
}
const validate = ajv.compile(schema);
const valid = validate(payload);
if (valid && !validate.errors) {
resolve(payload);
} else {
const message = ajv.errorsText(validate.errors);
const err = new error.ValidationError(message);
err.debug = [validate.errors, payload];
reject(err);
}
});
}
apiValidator.loadSchemas = parser.dereference(path.resolve('schema/index.json')).then((schema) => {
ajv.addSchema(schema);
return schema;
});
module.exports = apiValidator;