panda-sky-client
Version:
Auto-assembling client for APIs deployed with Panda Sky
69 lines (58 loc) • 6.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.responseCheck = exports.requestCheck = void 0;
var HttpError, requestCheck, responseCheck;
exports.responseCheck = responseCheck;
exports.requestCheck = requestCheck;
HttpError = class HttpError extends Error {
constructor(message, status) {
super(message);
this.status = status;
}
}; // TODO: We need resource definition validation here.
// TODO: This assumes the "schema" library passed in is AJV, but we need to make this more generic in the future.
exports.requestCheck = requestCheck = function (lib, context) {
var body, isValid, methodName, resourceName, schema, signatures, validator;
({
resourceName,
methodName,
signatures,
body
} = context);
methodName = methodName.toUpperCase();
({
schema
} = signatures.request);
if (lib.validator != null && schema != null) {
validator = lib.validator();
isValid = validator.validate(schema, JSON.parse(body));
if (!isValid) {
throw new Error(`${resourceName} ${methodName} request body failed validation ${JSON.stringify(validator.errors)}`);
}
}
};
exports.responseCheck = responseCheck = async function (lib, context, response) {
var expected, header, i, len, methodName, path, ref, ref1, resourceName;
({
resourceName,
methodName,
path,
expected
} = context);
methodName = methodName.toUpperCase();
if ((ref = response.status) !== expected.status && ref !== 304) {
throw new HttpError(`${resourceName} ${methodName} unexpected response status ${response.status} ${await response.text()}`, response.status);
}
ref1 = expected.headers;
for (i = 0, len = ref1.length; i < len; i++) {
header = ref1[i];
if (response.headers.get(header) == null) {
throw new Error(`${resourceName} ${methodName} Response header '${header}' was not present or null`);
}
}
return response;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZC9yZXBvcy9wYW5kYS1za3ktY2xpZW50L3NyYy92YWxpZGF0aW9uLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBLFNBQUEsRUFBQSxZQUFBLEVBQUEsYUFBQTs7O0FBQU0sU0FBQSxHQUFOLE1BQUEsU0FBQSxTQUF3QixLQUF4QixDQUFBO0FBQ0UsRUFBQSxXQUFhLENBQUEsT0FBQSxFQUFBLE1BQUEsRUFBQTs7QUFBVSxTQUFDLE1BQUQsR0FBQyxNQUFEO0FBQVY7O0FBRGYsQ0FBTSxDOzs7QUFNTix1QkFBQSxZQUFBLEdBQWUsVUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBO0FBQ2IsTUFBQSxJQUFBLEVBQUEsT0FBQSxFQUFBLFVBQUEsRUFBQSxZQUFBLEVBQUEsTUFBQSxFQUFBLFVBQUEsRUFBQSxTQUFBO0FBQUEsR0FBQTtBQUFBLElBQUEsWUFBQTtBQUFBLElBQUEsVUFBQTtBQUFBLElBQUEsVUFBQTtBQUFBLElBQUE7QUFBQSxNQUFBLE9BQUE7QUFDQSxFQUFBLFVBQUEsR0FBYSxVQUFVLENBQVYsV0FBQSxFQUFiO0FBQ0EsR0FBQTtBQUFBLElBQUE7QUFBQSxNQUFXLFVBQVUsQ0FBckIsT0FBQTs7QUFFQSxNQUFHLEdBQUEsQ0FBQSxTQUFBLElBQUEsSUFBQSxJQUFrQixNQUFBLElBQXJCLElBQUEsRUFBQTtBQUNFLElBQUEsU0FBQSxHQUFZLEdBQUcsQ0FBSCxTQUFBLEVBQVo7QUFDQSxJQUFBLE9BQUEsR0FBVSxTQUFTLENBQVQsUUFBQSxDQUFBLE1BQUEsRUFBMkIsSUFBSSxDQUFKLEtBQUEsQ0FBM0IsSUFBMkIsQ0FBM0IsQ0FBVjs7QUFDQSxRQUFHLENBQUgsT0FBQSxFQUFBO0FBQ0UsWUFBTSxJQUFBLEtBQUEsQ0FBVSxHQUFBLFlBQUEsSUFBQSxVQUFBLG1DQUNaLElBQUksQ0FBSixTQUFBLENBQWUsU0FBUyxDQURaLE1BQ1osQ0FGTixFQUNRLENBQU47QUFKSjs7QUFMYSxDQUFmOztBQVlBLHdCQUFBLGFBQUEsR0FBZ0IsZ0JBQUEsR0FBQSxFQUFBLE9BQUEsRUFBQSxRQUFBLEVBQUE7QUFDZCxNQUFBLFFBQUEsRUFBQSxNQUFBLEVBQUEsQ0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLEVBQUEsWUFBQTtBQUFBLEdBQUE7QUFBQSxJQUFBLFlBQUE7QUFBQSxJQUFBLFVBQUE7QUFBQSxJQUFBLElBQUE7QUFBQSxJQUFBO0FBQUEsTUFBQSxPQUFBO0FBQ0EsRUFBQSxVQUFBLEdBQWEsVUFBVSxDQUFWLFdBQUEsRUFBYjs7QUFFQSxNQUFBLENBQUEsR0FBQSxHQUFHLFFBQVEsQ0FBUixNQUFILE1BQTJCLFFBQVEsQ0FBaEMsTUFBSCxJQUFHLEdBQUEsS0FBSCxHQUFBLEVBQUE7QUFDRSxVQUFNLElBQUEsU0FBQSxDQUFjLEdBQUEsWUFBQSxJQUFBLFVBQUEsK0JBQTRELFFBQVEsQ0FBcEUsTUFBQSxJQUErRSxNQUFNLFFBQVEsQ0FBN0YsSUFBcUYsRUFBbkcsRUFBQSxFQUNKLFFBQVEsQ0FGWixNQUNRLENBQU47OztBQUdGLEVBQUEsSUFBQSxHQUFBLFFBQUEsQ0FBQSxPQUFBOztBQUFBLE9BQUEsQ0FBQSxHQUFBLENBQUEsRUFBQSxHQUFBLEdBQUEsSUFBQSxDQUFBLE1BQUEsRUFBQSxDQUFBLEdBQUEsR0FBQSxFQUFBLENBQUEsRUFBQSxFQUFBOzs7QUFDRSxRQUFPLFFBQUEsQ0FBQSxPQUFBLENBQUEsR0FBQSxDQUFBLE1BQUEsS0FBUCxJQUFBLEVBQUE7QUFDRSxZQUFNLElBQUEsS0FBQSxDQUFVLEdBQUEsWUFBQSxJQUFBLFVBQUEscUJBQUEsTUFEbEIsMkJBQ1EsQ0FBTjs7QUFGSjs7U0FLQSxRO0FBYmMsQ0FBaEIiLCJzb3VyY2VzQ29udGVudCI6WyJjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvclxuICBjb25zdHJ1Y3RvcjogKG1lc3NhZ2UsIEBzdGF0dXMpIC0+XG4gICAgc3VwZXIgbWVzc2FnZVxuXG4jIFRPRE86IFdlIG5lZWQgcmVzb3VyY2UgZGVmaW5pdGlvbiB2YWxpZGF0aW9uIGhlcmUuXG4jIFRPRE86IFRoaXMgYXNzdW1lcyB0aGUgXCJzY2hlbWFcIiBsaWJyYXJ5IHBhc3NlZCBpbiBpcyBBSlYsIGJ1dCB3ZSBuZWVkIHRvIG1ha2UgdGhpcyBtb3JlIGdlbmVyaWMgaW4gdGhlIGZ1dHVyZS5cbnJlcXVlc3RDaGVjayA9IChsaWIsIGNvbnRleHQpIC0+XG4gIHtyZXNvdXJjZU5hbWUsIG1ldGhvZE5hbWUsIHNpZ25hdHVyZXMsIGJvZHl9ID0gY29udGV4dFxuICBtZXRob2ROYW1lID0gbWV0aG9kTmFtZS50b1VwcGVyQ2FzZSgpXG4gIHtzY2hlbWF9ID0gc2lnbmF0dXJlcy5yZXF1ZXN0XG5cbiAgaWYgbGliLnZhbGlkYXRvcj8gJiYgc2NoZW1hP1xuICAgIHZhbGlkYXRvciA9IGxpYi52YWxpZGF0b3IoKVxuICAgIGlzVmFsaWQgPSB2YWxpZGF0b3IudmFsaWRhdGUgc2NoZW1hLCBKU09OLnBhcnNlIGJvZHlcbiAgICBpZiAhaXNWYWxpZFxuICAgICAgdGhyb3cgbmV3IEVycm9yIFwiI3tyZXNvdXJjZU5hbWV9ICN7bWV0aG9kTmFtZX0gcmVxdWVzdCBib2R5IGZhaWxlZCB2YWxpZGF0aW9uXG4gICAgICAgICN7SlNPTi5zdHJpbmdpZnkgdmFsaWRhdG9yLmVycm9yc31cIlxuXG5yZXNwb25zZUNoZWNrID0gKGxpYiwgY29udGV4dCwgcmVzcG9uc2UpIC0+XG4gIHtyZXNvdXJjZU5hbWUsIG1ldGhvZE5hbWUsIHBhdGgsIGV4cGVjdGVkfSA9IGNvbnRleHRcbiAgbWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKVxuXG4gIGlmIHJlc3BvbnNlLnN0YXR1cyBub3QgaW4gW2V4cGVjdGVkLnN0YXR1cywgMzA0XVxuICAgIHRocm93IG5ldyBIdHRwRXJyb3IgXCIje3Jlc291cmNlTmFtZX0gI3ttZXRob2ROYW1lfSB1bmV4cGVjdGVkIHJlc3BvbnNlIHN0YXR1cyAje3Jlc3BvbnNlLnN0YXR1c30gI3thd2FpdCByZXNwb25zZS50ZXh0KCl9XCIsXG4gICAgICByZXNwb25zZS5zdGF0dXNcblxuICBmb3IgaGVhZGVyIGluIGV4cGVjdGVkLmhlYWRlcnNcbiAgICB1bmxlc3MgcmVzcG9uc2UuaGVhZGVycy5nZXQoaGVhZGVyKT9cbiAgICAgIHRocm93IG5ldyBFcnJvciBcIiN7cmVzb3VyY2VOYW1lfSAje21ldGhvZE5hbWV9XG4gICAgICAgIFJlc3BvbnNlIGhlYWRlciAnI3toZWFkZXJ9JyB3YXMgbm90IHByZXNlbnQgb3IgbnVsbFwiXG5cbiAgcmVzcG9uc2VcblxuXG5leHBvcnQge1xuICByZXF1ZXN0Q2hlY2tcbiAgcmVzcG9uc2VDaGVja1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceURL=/Users/david/repos/panda-sky-client/src/validation.coffee