panda-sky-client
Version:
Auto-assembling client for APIs deployed with Panda Sky
129 lines (104 loc) • 10.1 kB
JavaScript
var createMethod, http, method, parseSignature;
import { merge } from "panda-parchment";
import buildAuthorization from "./authorization";
import { requestCheck, responseCheck } from "./validation";
method = function (name) {
return async function (lib, context) {
var fetch, init, response; // Setup the Fetch init object
init = {
method: name,
headers: context.headers,
mode: "cors"
};
if (context.shouldFollow != null) {
init.redirect = context.shouldFollow;
}
if (context.body != null) {
init.body = context.body;
}
requestCheck(lib, context); // NOTE: There is something special about fetch in the browser.
fetch = lib.fetch;
response = await fetch(context.path, init, context);
return await responseCheck(lib, context, response);
};
};
http = {
get: method("GET"),
post: method("POST"),
delete: method("DELETE"),
put: method("PUT"),
patch: method("PATCH"),
head: method("HEAD"),
options: method("OPTIONS")
};
parseSignature = function (signatures) {
var etag, headers, lastModified, maxAge, response, status;
({
response
} = signatures);
status = response.status[0];
headers = [];
if (status === 201) {
headers.push("location");
}
if (response.cache != null) {
({
etag,
maxAge,
lastModified
} = response.cache);
if (etag != null) {
headers.push("etag");
}
if (maxAge != null || lastModified != null) {
headers.push("cache-control");
}
}
return {
status,
headers
};
};
createMethod = function (lib, context, method) {
return function (methodArgs) {
var _context, authorization, base, base1, body, headers, k, ref, ref1, shouldFollow, v;
headers = {};
ref = lib.headers;
for (k in ref) {
v = ref[k];
headers[k] = v;
}
_context = merge(context, {
headers: headers,
expected: parseSignature(context.signatures)
});
if (methodArgs) {
({
body,
authorization,
shouldFollow
} = methodArgs);
_context.shouldFollow = shouldFollow;
if (body != null) {
// TODO: this will later rely on the method signature
_context.body = JSON.stringify(body);
if ((base = _context.headers)["content-type"] == null) {
base["content-type"] = "application/json";
}
}
if ((ref1 = context.methodName) === "get" || ref1 === "put" || ref1 === "post" || ref1 === "patch") {
if ((base1 = _context.headers)["accept"] == null) {
base1["accept"] = "application/json";
}
}
if (authorization != null) {
_context.headers["authorization"] = buildAuthorization(authorization);
}
} // Override global header settings with anything in the method invocation.
_context.headers = merge(_context.headers, methodArgs != null ? methodArgs.headers : void 0);
return http[context.methodName](lib, _context);
};
};
export default createMethod;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZC9yZXBvcy9wYW5kYS1za3ktY2xpZW50L3NyYy9tZXRob2QuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUEsWUFBQSxFQUFBLElBQUEsRUFBQSxNQUFBLEVBQUEsY0FBQTtBQUFBLFNBQUEsS0FBQSxRQUFBLGlCQUFBO0FBQ0EsT0FBQSxrQkFBQSxNQUFBLGlCQUFBO0FBQ0EsU0FBQSxZQUFBLEVBQUEsYUFBQSxRQUFBLGNBQUE7O0FBRUEsTUFBQSxHQUFTLFVBQUEsSUFBQSxFQUFBO1NBQ1AsZ0JBQUEsR0FBQSxFQUFBLE9BQUEsRUFBQTtBQUVFLFFBQUEsS0FBQSxFQUFBLElBQUEsRUFBQSxRQUFBLENBRkYsQzs7QUFFRSxJQUFBLElBQUEsR0FDRTtBQUFBLE1BQUEsTUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBLE9BQUEsRUFBUyxPQUFPLENBRGhCLE9BQUE7QUFFQSxNQUFBLElBQUEsRUFBTTtBQUZOLEtBREY7O0FBS0EsUUFBd0MsT0FBQSxDQUFBLFlBQUEsSUFBeEMsSUFBQSxFQUFBO0FBQUEsTUFBQSxJQUFJLENBQUosUUFBQSxHQUFnQixPQUFPLENBQXZCLFlBQUE7OztBQUNBLFFBQTRCLE9BQUEsQ0FBQSxJQUFBLElBQTVCLElBQUEsRUFBQTtBQUFBLE1BQUEsSUFBSSxDQUFKLElBQUEsR0FBWSxPQUFPLENBQW5CLElBQUE7OztBQUVBLElBQUEsWUFBQSxDQUFBLEdBQUEsRUFSQSxPQVFBLENBQUEsQ0FWRixDOztBQWFFLElBQUEsS0FBQSxHQUFRLEdBQUcsQ0FBQyxLQUFaO0FBQ0EsSUFBQSxRQUFBLEdBQVcsTUFBTSxLQUFBLENBQU0sT0FBTyxDQUFiLElBQUEsRUFBQSxJQUFBLEVBQU4sT0FBTSxDQUFqQjtBQUVBLFdBQUEsTUFBTSxhQUFBLENBQUEsR0FBQSxFQUFBLE9BQUEsRUFBTixRQUFNLENBQU47QUFoQkYsRztBQURPLENBQVQ7O0FBbUJBLElBQUEsR0FDRTtBQUFBLEVBQUEsR0FBQSxF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QUFBLENBRHRDLGFBQ3NDLENBQXBDO0FBVko7QUFQQSxLQURGLEM7OztBQXFCRSxJQUFBLFFBQVEsQ0FBUixPQUFBLEdBQW1CLEtBQUEsQ0FBTSxRQUFRLENBQWQsT0FBQSxFQUFBLFVBQUEsSUFBQSxJQUFBLEdBQXdCLFVBQVUsQ0FBRSxPQUFwQyxHQUFvQyxLQUFwQyxDQUFBLENBQW5CO1dBRUEsSUFBSyxDQUFBLE9BQU8sQ0FBWixVQUFLLENBQUwsQ0FBQSxHQUFBLEVBQUEsUUFBQSxDO0FBdkJGLEc7QUFEYSxDQUFmOztBQTBCQSxlQUFlLFlBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21lcmdlfSBmcm9tIFwicGFuZGEtcGFyY2htZW50XCJcbmltcG9ydCBidWlsZEF1dGhvcml6YXRpb24gZnJvbSBcIi4vYXV0aG9yaXphdGlvblwiXG5pbXBvcnQge3JlcXVlc3RDaGVjaywgcmVzcG9uc2VDaGVja30gZnJvbSBcIi4vdmFsaWRhdGlvblwiXG5cbm1ldGhvZCA9IChuYW1lKSAtPlxuICAobGliLCBjb250ZXh0KSAtPlxuICAgICMgU2V0dXAgdGhlIEZldGNoIGluaXQgb2JqZWN0XG4gICAgaW5pdCA9XG4gICAgICBtZXRob2Q6IG5hbWVcbiAgICAgIGhlYWRlcnM6IGNvbnRleHQuaGVhZGVyc1xuICAgICAgbW9kZTogXCJjb3JzXCJcblxuICAgIGluaXQucmVkaXJlY3QgPSBjb250ZXh0LnNob3VsZEZvbGxvdyBpZiBjb250ZXh0LnNob3VsZEZvbGxvdz9cbiAgICBpbml0LmJvZHkgPSBjb250ZXh0LmJvZHkgaWYgY29udGV4dC5ib2R5P1xuXG4gICAgcmVxdWVzdENoZWNrIGxpYiwgY29udGV4dFxuXG4gICAgIyBOT1RFOiBUaGVyZSBpcyBzb21ldGhpbmcgc3BlY2lhbCBhYm91dCBmZXRjaCBpbiB0aGUgYnJvd3Nlci5cbiAgICBmZXRjaCA9IGxpYi5mZXRjaFxuICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2ggY29udGV4dC5wYXRoLCBpbml0LCBjb250ZXh0XG5cbiAgICBhd2FpdCByZXNwb25zZUNoZWNrIGxpYiwgY29udGV4dCwgcmVzcG9uc2VcblxuaHR0cCA9XG4gIGdldDogbWV0aG9kIFwiR0VUXCJcbiAgcG9zdDogbWV0aG9kIFwiUE9TVFwiXG4gIGRlbGV0ZTogbWV0aG9kIFwiREVMRVRFXCJcbiAgcHV0OiBtZXRob2QgXCJQVVRcIlxuICBwYXRjaDogbWV0aG9kIFwiUEFUQ0hcIlxuICBoZWFkOiBtZXRob2QgXCJIRUFEXCJcbiAgb3B0aW9uczogbWV0aG9kIFwiT1BUSU9OU1wiXG5cbnBhcnNlU2lnbmF0dXJlID0gKHNpZ25hdHVyZXMpIC0+XG4gIHtyZXNwb25zZX0gPSBzaWduYXR1cmVzXG4gIHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c1swXVxuXG4gIGhlYWRlcnMgPSBbXVxuICBpZiBzdGF0dXMgPT0gMjAxXG4gICAgaGVhZGVycy5wdXNoIFwibG9jYXRpb25cIlxuICBpZiByZXNwb25zZS5jYWNoZT9cbiAgICB7ZXRhZywgbWF4QWdlLCBsYXN0TW9kaWZpZWR9ID0gcmVzcG9uc2UuY2FjaGVcbiAgICBpZiBldGFnP1xuICAgICAgaGVhZGVycy5wdXNoIFwiZXRhZ1wiXG4gICAgaWYgbWF4QWdlPyB8fCBsYXN0TW9kaWZpZWQ/XG4gICAgICBoZWFkZXJzLnB1c2ggXCJjYWNoZS1jb250cm9sXCJcblxuICB7c3RhdHVzLCBoZWFkZXJzfVxuXG5jcmVhdGVNZXRob2QgPSAobGliLCBjb250ZXh0LCBtZXRob2QpIC0+XG4gIChtZXRob2RBcmdzKSAtPlxuICAgIGhlYWRlcnMgPSB7fVxuICAgIGhlYWRlcnNba10gPSB2IGZvciBrLCB2IG9mIGxpYi5oZWFkZXJzXG5cbiAgICBfY29udGV4dCA9IG1lcmdlIGNvbnRleHQsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzXG4gICAgICBleHBlY3RlZDogcGFyc2VTaWduYXR1cmUgY29udGV4dC5zaWduYXR1cmVzXG5cbiAgICBpZiBtZXRob2RBcmdzXG4gICAgICB7Ym9keSwgYXV0aG9yaXphdGlvbiwgc2hvdWxkRm9sbG93fSA9IG1ldGhvZEFyZ3NcbiAgICAgIF9jb250ZXh0LnNob3VsZEZvbGxvdyA9IHNob3VsZEZvbGxvd1xuICAgICAgaWYgYm9keT9cbiAgICAgICAgIyBUT0RPOiB0aGlzIHdpbGwgbGF0ZXIgcmVseSBvbiB0aGUgbWV0aG9kIHNpZ25hdHVyZVxuICAgICAgICBfY29udGV4dC5ib2R5ID0gSlNPTi5zdHJpbmdpZnkgYm9keVxuICAgICAgICBfY29udGV4dC5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdID89IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICBpZiBjb250ZXh0Lm1ldGhvZE5hbWUgaW4gW1wiZ2V0XCIsIFwicHV0XCIsIFwicG9zdFwiLCBcInBhdGNoXCJdXG4gICAgICAgIF9jb250ZXh0LmhlYWRlcnNbXCJhY2NlcHRcIl0gPz0gXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgIGlmIGF1dGhvcml6YXRpb24/XG4gICAgICAgIF9jb250ZXh0LmhlYWRlcnNbXCJhdXRob3JpemF0aW9uXCJdID0gYnVpbGRBdXRob3JpemF0aW9uIGF1dGhvcml6YXRpb25cblxuICAgICMgT3ZlcnJpZGUgZ2xvYmFsIGhlYWRlciBzZXR0aW5ncyB3aXRoIGFueXRoaW5nIGluIHRoZSBtZXRob2QgaW52b2NhdGlvbi5cbiAgICBfY29udGV4dC5oZWFkZXJzID0gbWVyZ2UgX2NvbnRleHQuaGVhZGVycywgbWV0aG9kQXJncz8uaGVhZGVyc1xuXG4gICAgaHR0cFtjb250ZXh0Lm1ldGhvZE5hbWVdIGxpYiwgX2NvbnRleHRcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlTWV0aG9kXG4iXSwic291cmNlUm9vdCI6IiJ9
//# sourceURL=/Users/david/repos/panda-sky-client/src/method.coffee