UNPKG

@procore/core-http

Version:

A HTTP Client

46 lines (45 loc) 1.22 kB
// 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 };