forked from cybrespace/pinafore
54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
const TIMEOUT = 15000
|
|
|
|
function fetchWithTimeout (url, options) {
|
|
return new Promise((resolve, reject) => {
|
|
fetch(url, options).then(resolve, reject)
|
|
setTimeout(() => reject(new Error(`Timed out after ${TIMEOUT / 1000} seconds`)), TIMEOUT)
|
|
})
|
|
}
|
|
|
|
async function _post (url, body, headers, timeout) {
|
|
let fetchFunc = timeout ? fetchWithTimeout : fetch
|
|
return (await fetchFunc(url, {
|
|
method: 'POST',
|
|
headers: Object.assign(headers, {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'application/json'
|
|
}),
|
|
body: JSON.stringify(body)
|
|
})).json()
|
|
}
|
|
|
|
async function _get (url, headers, timeout) {
|
|
let fetchFunc = timeout ? fetchWithTimeout : fetch
|
|
return (await fetchFunc(url, {
|
|
method: 'GET',
|
|
headers: Object.assign(headers, {
|
|
'Accept': 'application/json'
|
|
})
|
|
})).json()
|
|
}
|
|
|
|
export async function post (url, body, headers = {}) {
|
|
return _post(url, body, headers, false)
|
|
}
|
|
|
|
export async function postWithTimeout (url, body, headers = {}) {
|
|
return _post(url, body, headers, true)
|
|
}
|
|
|
|
export async function getWithTimeout (url, headers = {}) {
|
|
return _get(url, headers, true)
|
|
}
|
|
|
|
export async function get (url, headers = {}) {
|
|
return _get(url, headers, false)
|
|
}
|
|
|
|
export function paramsString (paramsObject) {
|
|
let params = new URLSearchParams()
|
|
Object.keys(paramsObject).forEach(key => {
|
|
params.set(key, paramsObject[key])
|
|
})
|
|
return params.toString()
|
|
} |