You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
1.8 KiB
92 lines
1.8 KiB
const PREFIX = "/api";
|
|
|
|
function formatUrl(url, params = {}) {
|
|
const urlWithPrefix = PREFIX + url;
|
|
|
|
const queryString =
|
|
Object
|
|
.keys(params)
|
|
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]));
|
|
|
|
if (queryString.length > 0) {
|
|
return urlWithPrefix + "?" + queryString;
|
|
}
|
|
|
|
return urlWithPrefix;
|
|
}
|
|
|
|
/**
|
|
* @param {Response} res
|
|
* @return {Promise<array<object, object>>}
|
|
*/
|
|
function authCheck(res) {
|
|
return res.json().then(json => {
|
|
if (typeof json.data === "undefined") {
|
|
json.data = null;
|
|
}
|
|
|
|
if (typeof json.error === "undefined") {
|
|
json.error = null;
|
|
}
|
|
|
|
return Promise.resolve(json);
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param {string} url
|
|
* @param {object} params
|
|
* @returns {Promise<object|null>}
|
|
*/
|
|
export function fetchGet(url, params = {}) {
|
|
return fetch(formatUrl(url, params), {
|
|
method: "GET",
|
|
credentials: "include",
|
|
}).then(authCheck);
|
|
}
|
|
|
|
/**
|
|
* @param {string} url
|
|
* @param {object} params
|
|
* @returns {Promise<object|null>}
|
|
*/
|
|
export function fetchDelete(url, params = {}) {
|
|
return fetch(formatUrl(url, params), {
|
|
method: "DELETE",
|
|
credentials: "include",
|
|
}).then(authCheck);
|
|
}
|
|
|
|
|
|
/**
|
|
* @param {string} url
|
|
* @param {object} data
|
|
* @returns {Promise<object|null>}
|
|
*/
|
|
export function fetchPost(url, data = {}) {
|
|
return fetch(formatUrl(url), {
|
|
method: "POST",
|
|
credentials: "include",
|
|
headers: {
|
|
"Content-Type": "application/json; charset=utf-8",
|
|
},
|
|
body: JSON.stringify(data),
|
|
}).then(authCheck);
|
|
}
|
|
|
|
|
|
/**
|
|
* @param {string} url
|
|
* @param {object} data
|
|
* @returns {Promise<object|null>}
|
|
*/
|
|
export function fetchPatch(url, data = {}) {
|
|
return fetch(formatUrl(url), {
|
|
method: "PATCH",
|
|
credentials: "include",
|
|
headers: {
|
|
"Content-Type": "application/json; charset=utf-8",
|
|
},
|
|
body: JSON.stringify(data),
|
|
}).then(authCheck);
|
|
}
|