@procore/core-http
Version:
A HTTP Client
46 lines (45 loc) • 1.22 kB
JavaScript
// src/request.ts
function getCSRFToken() {
const token = document.cookie.match("(^|;)\\s*csrf_token\\s*=\\s*([^;]+)");
return token ? decodeURIComponent(token.pop() || "") : "";
}
function getCSRFHeader() {
const csrfToken = getCSRFToken();
return csrfToken ? { "X-CSRF-TOKEN": csrfToken } : {};
}
function removeLeadingSlash(url) {
return url.startsWith("/") ? url.substring(1, url.length) : url;
}
function removeTrailingSlash(url) {
return url.endsWith("/") ? url.substring(0, url.length - 1) : url;
}
function applyBaseUrl(url, baseUrl) {
return `${removeTrailingSlash(baseUrl)}/${removeLeadingSlash(url)}`;
}
function getOptions({ headers, ...options }) {
const opts = {
credentials: "same-origin",
headers: {
...getCSRFHeader(),
...headers
},
mode: "same-origin",
...options
};
return opts;
}
function getUrl(url, baseUrl) {
return baseUrl ? applyBaseUrl(url, baseUrl) : url;
}
function request(url, { baseUrl, ...options } = {}) {
return fetch(getUrl(url, baseUrl), getOptions(options));
}
function requestJSON(url, requestParams = {}) {
return request(url, requestParams).then(
(response) => response.json()
);
}
export {
request,
requestJSON
};