58 lines
1.6 KiB
JavaScript

// Description: This file contains functions to access the API with JWT authentication.
/**
* Accept a full URL, method, and body to send to the API.
* - If successful, return the response
* - If first fail, attempt to refresh JWT token and try again
* - If second fail, return false
* @param {*} endpoint API endpoint
* @param {*} method String (GET, POST, PUT, DELETE)
* @param {*} body Data to send to the API
* @returns boolean
*/
async function accessAPI(endpoint, method, body) {
let response = await fetch(`/api${endpoint}`, {
method: method,
body: body,
});
if (response.ok) {
let data = await response.json();
data = await data;
console.log(data);
return data;
} else if (response.status === 401) {
console.log('REFRESHING TOKEN')
if (await refreshAccessToken()) {
// Try the request again
let response = await fetch(`/api${endpoint}`, {
method: method,
body: body,
});
if (response.ok) {
let data = await response.json();
data = await data;
console.log("REFRESHED DATA")
return data;
}
}
}
return false;
}
/**
* Attempt to refresh the JWT token
* @returns boolean
*/
async function refreshAccessToken () {
const response = await fetch('/api/auth/refresh', {
method: 'POST',
});
if (response.ok) {
console.log("TOKEN REFRESH")
return true;
} else {
console.log("TOKEN REFRESH FAILED")
return false;
}
}