panda-sky-client
Version:
Auto-assembling client for APIs deployed with Panda Sky
142 lines (111 loc) • 10.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _pandaParchment = require("panda-parchment");
var _authorization = _interopRequireDefault(require("./authorization"));
var _validation = require("./validation");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var createMethod, http, method, parseSignature;
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;
}
(0, _validation.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 (0, _validation.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 = (0, _pandaParchment.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"] = (0, _authorization.default)(authorization);
}
} // Override global header settings with anything in the method invocation.
_context.headers = (0, _pandaParchment.merge)(_context.headers, methodArgs != null ? methodArgs.headers : void 0);
return http[context.methodName](lib, _context);
};
};
var _default = createMethod;
exports.default = _default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9kYXZpZC9yZXBvcy9wYW5kYS1za3ktY2xpZW50L3NyYy9tZXRob2QuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUZBLElBQUEsWUFBQSxFQUFBLElBQUEsRUFBQSxNQUFBLEVBQUEsY0FBQTs7QUFJQSxNQUFBLEdBQVMsVUFBQSxJQUFBLEVBQUE7U0FDUCxnQkFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBO0FBRUUsUUFBQSxLQUFBLEVBQUEsSUFBQSxFQUFBLFFBQUEsQ0FGRixDOztBQUVFLElBQUEsSUFBQSxHQUNFO0FBQUEsTUFBQSxNQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUEsT0FBQSxFQUFTLE9BQU8sQ0FEaEIsT0FBQTtBQUVBLE1BQUEsSUFBQSxFQUFNO0FBRk4sS0FERjs7QUFLQSxRQUF3QyxPQUFBLENBQUEsWUFBQSxJQUF4QyxJQUFBLEVBQUE7QUFBQSxNQUFBLElBQUksQ0FBSixRQUFBLEdBQWdCLE9BQU8sQ0FBdkIsWUFBQTs7O0FBQ0EsUUFBNEIsT0FBQSxDQUFBLElBQUEsSUFBNUIsSUFBQSxFQUFBO0FBQUEsTUFBQSxJQUFJLENBQUosSUFBQSxHQUFZLE9BQU8sQ0FBbkIsSUFBQTs7O0FBRUEsa0NBQUEsR0FBQSxFQVJBLE9BUUEsRUFWRixDOztBQWFFLElBQUEsS0FBQSxHQUFRLEdBQUcsQ0FBQyxLQUFaO0FBQ0EsSUFBQSxRQUFBLEdBQVcsTUFBTSxLQUFBLENBQU0sT0FBTyxDQUFiLElBQUEsRUFBQSxJQUFBLEVBQU4sT0FBTSxDQUFqQjtBQUVBLFdBQUEsTUFBTSwrQkFBQSxHQUFBLEVBQUEsT0FBQSxFQUFOLFFBQU0sQ0FBTjtBQWhCRixHO0FBRE8sQ0FBVDs7QUFtQkEsSUFBQSxHQUNFO0FBQUEsRUFBQSxHQUFBLEVBQUssTUFBQSxDQUFMLEtBQUssQ0FBTDtBQUNBLEVBQUEsSUFBQSxFQUFNLE1BQUEsQ0FETixNQUNNLENBRE47QUFFQSxFQUFBLE1BQUEs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LE9BQUEsRUFBQSxVQUFBLElBQUEsSUFBQSxHQUF3QixVQUFVLENBQUUsT0FBcEMsR0FBb0MsS0FBcEMsQ0FBQSxDQUFuQjtXQUVBLElBQUssQ0FBQSxPQUFPLENBQVosVUFBSyxDQUFMLENBQUEsR0FBQSxFQUFBLFFBQUEsQztBQXZCRixHO0FBRGEsQ0FBZjs7ZUEwQmUsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWVyZ2V9IGZyb20gXCJwYW5kYS1wYXJjaG1lbnRcIlxuaW1wb3J0IGJ1aWxkQXV0aG9yaXphdGlvbiBmcm9tIFwiLi9hdXRob3JpemF0aW9uXCJcbmltcG9ydCB7cmVxdWVzdENoZWNrLCByZXNwb25zZUNoZWNrfSBmcm9tIFwiLi92YWxpZGF0aW9uXCJcblxubWV0aG9kID0gKG5hbWUpIC0+XG4gIChsaWIsIGNvbnRleHQpIC0+XG4gICAgIyBTZXR1cCB0aGUgRmV0Y2ggaW5pdCBvYmplY3RcbiAgICBpbml0ID1cbiAgICAgIG1ldGhvZDogbmFtZVxuICAgICAgaGVhZGVyczogY29udGV4dC5oZWFkZXJzXG4gICAgICBtb2RlOiBcImNvcnNcIlxuXG4gICAgaW5pdC5yZWRpcmVjdCA9IGNvbnRleHQuc2hvdWxkRm9sbG93IGlmIGNvbnRleHQuc2hvdWxkRm9sbG93P1xuICAgIGluaXQuYm9keSA9IGNvbnRleHQuYm9keSBpZiBjb250ZXh0LmJvZHk/XG5cbiAgICByZXF1ZXN0Q2hlY2sgbGliLCBjb250ZXh0XG5cbiAgICAjIE5PVEU6IFRoZXJlIGlzIHNvbWV0aGluZyBzcGVjaWFsIGFib3V0IGZldGNoIGluIHRoZSBicm93c2VyLlxuICAgIGZldGNoID0gbGliLmZldGNoXG4gICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCBjb250ZXh0LnBhdGgsIGluaXQsIGNvbnRleHRcblxuICAgIGF3YWl0IHJlc3BvbnNlQ2hlY2sgbGliLCBjb250ZXh0LCByZXNwb25zZVxuXG5odHRwID1cbiAgZ2V0OiBtZXRob2QgXCJHRVRcIlxuICBwb3N0OiBtZXRob2QgXCJQT1NUXCJcbiAgZGVsZXRlOiBtZXRob2QgXCJERUxFVEVcIlxuICBwdXQ6IG1ldGhvZCBcIlBVVFwiXG4gIHBhdGNoOiBtZXRob2QgXCJQQVRDSFwiXG4gIGhlYWQ6IG1ldGhvZCBcIkhFQURcIlxuICBvcHRpb25zOiBtZXRob2QgXCJPUFRJT05TXCJcblxucGFyc2VTaWduYXR1cmUgPSAoc2lnbmF0dXJlcykgLT5cbiAge3Jlc3BvbnNlfSA9IHNpZ25hdHVyZXNcbiAgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzWzBdXG5cbiAgaGVhZGVycyA9IFtdXG4gIGlmIHN0YXR1cyA9PSAyMDFcbiAgICBoZWFkZXJzLnB1c2ggXCJsb2NhdGlvblwiXG4gIGlmIHJlc3BvbnNlLmNhY2hlP1xuICAgIHtldGFnLCBtYXhBZ2UsIGxhc3RNb2RpZmllZH0gPSByZXNwb25zZS5jYWNoZVxuICAgIGlmIGV0YWc/XG4gICAgICBoZWFkZXJzLnB1c2ggXCJldGFnXCJcbiAgICBpZiBtYXhBZ2U/IHx8IGxhc3RNb2RpZmllZD9cbiAgICAgIGhlYWRlcnMucHVzaCBcImNhY2hlLWNvbnRyb2xcIlxuXG4gIHtzdGF0dXMsIGhlYWRlcnN9XG5cbmNyZWF0ZU1ldGhvZCA9IChsaWIsIGNvbnRleHQsIG1ldGhvZCkgLT5cbiAgKG1ldGhvZEFyZ3MpIC0+XG4gICAgaGVhZGVycyA9IHt9XG4gICAgaGVhZGVyc1trXSA9IHYgZm9yIGssIHYgb2YgbGliLmhlYWRlcnNcblxuICAgIF9jb250ZXh0ID0gbWVyZ2UgY29udGV4dCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnNcbiAgICAgIGV4cGVjdGVkOiBwYXJzZVNpZ25hdHVyZSBjb250ZXh0LnNpZ25hdHVyZXNcblxuICAgIGlmIG1ldGhvZEFyZ3NcbiAgICAgIHtib2R5LCBhdXRob3JpemF0aW9uLCBzaG91bGRGb2xsb3d9ID0gbWV0aG9kQXJnc1xuICAgICAgX2NvbnRleHQuc2hvdWxkRm9sbG93ID0gc2hvdWxkRm9sbG93XG4gICAgICBpZiBib2R5P1xuICAgICAgICAjIFRPRE86IHRoaXMgd2lsbCBsYXRlciByZWx5IG9uIHRoZSBtZXRob2Qgc2lnbmF0dXJlXG4gICAgICAgIF9jb250ZXh0LmJvZHkgPSBKU09OLnN0cmluZ2lmeSBib2R5XG4gICAgICAgIF9jb250ZXh0LmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gPz0gXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgIGlmIGNvbnRleHQubWV0aG9kTmFtZSBpbiBbXCJnZXRcIiwgXCJwdXRcIiwgXCJwb3N0XCIsIFwicGF0Y2hcIl1cbiAgICAgICAgX2NvbnRleHQuaGVhZGVyc1tcImFjY2VwdFwiXSA/PSBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgaWYgYXV0aG9yaXphdGlvbj9cbiAgICAgICAgX2NvbnRleHQuaGVhZGVyc1tcImF1dGhvcml6YXRpb25cIl0gPSBidWlsZEF1dGhvcml6YXRpb24gYXV0aG9yaXphdGlvblxuXG4gICAgIyBPdmVycmlkZSBnbG9iYWwgaGVhZGVyIHNldHRpbmdzIHdpdGggYW55dGhpbmcgaW4gdGhlIG1ldGhvZCBpbnZvY2F0aW9uLlxuICAgIF9jb250ZXh0LmhlYWRlcnMgPSBtZXJnZSBfY29udGV4dC5oZWFkZXJzLCBtZXRob2RBcmdzPy5oZWFkZXJzXG5cbiAgICBodHRwW2NvbnRleHQubWV0aG9kTmFtZV0gbGliLCBfY29udGV4dFxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVNZXRob2RcbiJdLCJzb3VyY2VSb290IjoiIn0=
//# sourceURL=/Users/david/repos/panda-sky-client/src/method.coffee