panda-sky-client
Version:
Auto-assembling client for APIs deployed with Panda Sky
63 lines (52 loc) • 5.91 kB
JavaScript
var HttpError, requestCheck, responseCheck;
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.
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)}`);
}
}
};
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;
};
export { requestCheck, responseCheck };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZC9yZXBvcy9wYW5kYS1za3ktY2xpZW50L3NyYy92YWxpZGF0aW9uLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFBLFNBQUEsRUFBQSxZQUFBLEVBQUEsYUFBQTtBQUFNLFNBQUEsR0FBTixNQUFBLFNBQUEsU0FBd0IsS0FBeEIsQ0FBQTtBQUNFLEVBQUEsV0FBYSxDQUFBLE9BQUEsRUFBQSxNQUFBLEVBQUE7O0FBQVUsU0FBQyxNQUFELEdBQUMsTUFBRDtBQUFWOztBQURmLENBQU0sQzs7O0FBTU4sWUFBQSxHQUFlLFVBQUEsR0FBQSxFQUFBLE9BQUEsRUFBQTtBQUNiLE1BQUEsSUFBQSxFQUFBLE9BQUEsRUFBQSxVQUFBLEVBQUEsWUFBQSxFQUFBLE1BQUEsRUFBQSxVQUFBLEVBQUEsU0FBQTtBQUFBLEdBQUE7QUFBQSxJQUFBLFlBQUE7QUFBQSxJQUFBLFVBQUE7QUFBQSxJQUFBLFVBQUE7QUFBQSxJQUFBO0FBQUEsTUFBQSxPQUFBO0FBQ0EsRUFBQSxVQUFBLEdBQWEsVUFBVSxDQUFWLFdBQUEsRUFBYjtBQUNBLEdBQUE7QUFBQSxJQUFBO0FBQUEsTUFBVyxVQUFVLENBQXJCLE9BQUE7O0FBRUEsTUFBRyxHQUFBLENBQUEsU0FBQSxJQUFBLElBQUEsSUFBa0IsTUFBQSxJQUFyQixJQUFBLEVBQUE7QUFDRSxJQUFBLFNBQUEsR0FBWSxHQUFHLENBQUgsU0FBQSxFQUFaO0FBQ0EsSUFBQSxPQUFBLEdBQVUsU0FBUyxDQUFULFFBQUEsQ0FBQSxNQUFBLEVBQTJCLElBQUksQ0FBSixLQUFBLENBQTNCLElBQTJCLENBQTNCLENBQVY7O0FBQ0EsUUFBRyxDQUFILE9BQUEsRUFBQTtBQUNFLFlBQU0sSUFBQSxLQUFBLENBQVUsR0FBQSxZQUFBLElBQUEsVUFBQSxtQ0FDWixJQUFJLENBQUosU0FBQSxDQUFlLFNBQVMsQ0FEWixNQUNaLENBRk4sRUFDUSxDQUFOO0FBSko7O0FBTGEsQ0FBZjs7QUFZQSxhQUFBLEdBQWdCLGdCQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUFBO0FBQ2QsTUFBQSxRQUFBLEVBQUEsTUFBQSxFQUFBLENBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxFQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxFQUFBLFlBQUE7QUFBQSxHQUFBO0FBQUEsSUFBQSxZQUFBO0FBQUEsSUFBQSxVQUFBO0FBQUEsSUFBQSxJQUFBO0FBQUEsSUFBQTtBQUFBLE1BQUEsT0FBQTtBQUNBLEVBQUEsVUFBQSxHQUFhLFVBQVUsQ0FBVixXQUFBLEVBQWI7O0FBRUEsTUFBQSxDQUFBLEdBQUEsR0FBRyxRQUFRLENBQVIsTUFBSCxNQUEyQixRQUFRLENBQWhDLE1BQUgsSUFBRyxHQUFBLEtBQUgsR0FBQSxFQUFBO0FBQ0UsVUFBTSxJQUFBLFNBQUEsQ0FBYyxHQUFBLFlBQUEsSUFBQSxVQUFBLCtCQUE0RCxRQUFRLENBQXBFLE1BQUEsSUFBK0UsTUFBTSxRQUFRLENBQTdGLElBQXFGLEVBQW5HLEVBQUEsRUFDSixRQUFRLENBRlosTUFDUSxDQUFOOzs7QUFHRixFQUFBLElBQUEsR0FBQSxRQUFBLENBQUEsT0FBQTs7QUFBQSxPQUFBLENBQUEsR0FBQSxDQUFBLEVBQUEsR0FBQSxHQUFBLElBQUEsQ0FBQSxNQUFBLEVBQUEsQ0FBQSxHQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUEsRUFBQTs7O0FBQ0UsUUFBTyxRQUFBLENBQUEsT0FBQSxDQUFBLEdBQUEsQ0FBQSxNQUFBLEtBQVAsSUFBQSxFQUFBO0FBQ0UsWUFBTSxJQUFBLEtBQUEsQ0FBVSxHQUFBLFlBQUEsSUFBQSxVQUFBLHFCQUFBLE1BRGxCLDJCQUNRLENBQU47O0FBRko7O1NBS0EsUTtBQWJjLENBQWhCOztBQWdCQSxTQUFBLFlBQUEsRUFBQSxhQUFBIiwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgSHR0cEVycm9yIGV4dGVuZHMgRXJyb3JcbiAgY29uc3RydWN0b3I6IChtZXNzYWdlLCBAc3RhdHVzKSAtPlxuICAgIHN1cGVyIG1lc3NhZ2VcblxuIyBUT0RPOiBXZSBuZWVkIHJlc291cmNlIGRlZmluaXRpb24gdmFsaWRhdGlvbiBoZXJlLlxuIyBUT0RPOiBUaGlzIGFzc3VtZXMgdGhlIFwic2NoZW1hXCIgbGlicmFyeSBwYXNzZWQgaW4gaXMgQUpWLCBidXQgd2UgbmVlZCB0byBtYWtlIHRoaXMgbW9yZSBnZW5lcmljIGluIHRoZSBmdXR1cmUuXG5yZXF1ZXN0Q2hlY2sgPSAobGliLCBjb250ZXh0KSAtPlxuICB7cmVzb3VyY2VOYW1lLCBtZXRob2ROYW1lLCBzaWduYXR1cmVzLCBib2R5fSA9IGNvbnRleHRcbiAgbWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUudG9VcHBlckNhc2UoKVxuICB7c2NoZW1hfSA9IHNpZ25hdHVyZXMucmVxdWVzdFxuXG4gIGlmIGxpYi52YWxpZGF0b3I/ICYmIHNjaGVtYT9cbiAgICB2YWxpZGF0b3IgPSBsaWIudmFsaWRhdG9yKClcbiAgICBpc1ZhbGlkID0gdmFsaWRhdG9yLnZhbGlkYXRlIHNjaGVtYSwgSlNPTi5wYXJzZSBib2R5XG4gICAgaWYgIWlzVmFsaWRcbiAgICAgIHRocm93IG5ldyBFcnJvciBcIiN7cmVzb3VyY2VOYW1lfSAje21ldGhvZE5hbWV9IHJlcXVlc3QgYm9keSBmYWlsZWQgdmFsaWRhdGlvblxuICAgICAgICAje0pTT04uc3RyaW5naWZ5IHZhbGlkYXRvci5lcnJvcnN9XCJcblxucmVzcG9uc2VDaGVjayA9IChsaWIsIGNvbnRleHQsIHJlc3BvbnNlKSAtPlxuICB7cmVzb3VyY2VOYW1lLCBtZXRob2ROYW1lLCBwYXRoLCBleHBlY3RlZH0gPSBjb250ZXh0XG4gIG1ldGhvZE5hbWUgPSBtZXRob2ROYW1lLnRvVXBwZXJDYXNlKClcblxuICBpZiByZXNwb25zZS5zdGF0dXMgbm90IGluIFtleHBlY3RlZC5zdGF0dXMsIDMwNF1cbiAgICB0aHJvdyBuZXcgSHR0cEVycm9yIFwiI3tyZXNvdXJjZU5hbWV9ICN7bWV0aG9kTmFtZX0gdW5leHBlY3RlZCByZXNwb25zZSBzdGF0dXMgI3tyZXNwb25zZS5zdGF0dXN9ICN7YXdhaXQgcmVzcG9uc2UudGV4dCgpfVwiLFxuICAgICAgcmVzcG9uc2Uuc3RhdHVzXG5cbiAgZm9yIGhlYWRlciBpbiBleHBlY3RlZC5oZWFkZXJzXG4gICAgdW5sZXNzIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KGhlYWRlcik/XG4gICAgICB0aHJvdyBuZXcgRXJyb3IgXCIje3Jlc291cmNlTmFtZX0gI3ttZXRob2ROYW1lfVxuICAgICAgICBSZXNwb25zZSBoZWFkZXIgJyN7aGVhZGVyfScgd2FzIG5vdCBwcmVzZW50IG9yIG51bGxcIlxuXG4gIHJlc3BvbnNlXG5cblxuZXhwb3J0IHtcbiAgcmVxdWVzdENoZWNrXG4gIHJlc3BvbnNlQ2hlY2tcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceURL=/Users/david/repos/panda-sky-client/src/validation.coffee