97 lines
2.6 KiB
JavaScript
97 lines
2.6 KiB
JavaScript
import Graph from 'graphology';
|
|
import { LogInStatusUpdateEscapeTool } from './AuthProvider.jsx';
|
|
|
|
// This is wrapper functtions to do requests to the api, from the frontend.
|
|
|
|
export const apiUrl = `${window.location.origin}/api`;
|
|
|
|
|
|
//lil helper to throw errorrs from the promise when we get not-ok results
|
|
export const shoofetch = (url, config) => fetch(url, {...defaults, ...config})
|
|
.then(async (res) => {
|
|
if (res.status == 401) {
|
|
LogInStatusUpdateEscapeTool.setLoggedIn(false);
|
|
}
|
|
|
|
localStorage.setItem("session", res.session);
|
|
|
|
if (!res.ok) {
|
|
throw new Error(`got an error from the server: ${await res.text()}`);
|
|
}
|
|
return res.json();
|
|
});
|
|
|
|
const defaults = {
|
|
headers: {'Content-Type': 'application/json'},
|
|
credentials: 'include'
|
|
};
|
|
|
|
export async function postNewPage() {
|
|
return shoofetch(`${apiUrl}/page/new`, {method: 'POST'})
|
|
}
|
|
|
|
export async function fetchPageList() {
|
|
return shoofetch(`${apiUrl}/pages`, {method: 'GET'});
|
|
}
|
|
|
|
export async function fetchPage(number) {
|
|
return shoofetch(`${apiUrl}/page/${number}`, {method: 'GET'});
|
|
}
|
|
|
|
export async function fetchPageHistory(number) {
|
|
return shoofetch(`${apiUrl}/page/${number}/history`, {method: 'GET'});
|
|
}
|
|
|
|
export async function fetchPageAtEdit(number, id) {
|
|
return shoofetch(`${apiUrl}/page/${number}/${id}`, {method: 'GET'});
|
|
}
|
|
|
|
export async function postPage({id, title, description}) {
|
|
return shoofetch(`${apiUrl}/page/${id}`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({id: id, title: title, description: description}),
|
|
})
|
|
}
|
|
|
|
export async function deletePage(id) {
|
|
return shoofetch(`${apiUrl}/page/${id}`, {method: 'DELETE'});
|
|
}
|
|
|
|
export async function fetchGraph() {
|
|
return shoofetch(`${apiUrl}/graph`, {method: 'GET'})
|
|
.then((serialized) => {
|
|
const graph = new Graph();
|
|
graph.import(serialized);
|
|
return graph;
|
|
});
|
|
}
|
|
|
|
export async function createAccount({name, password, nonce}) {
|
|
return shoofetch(`${apiUrl}/register`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({name: name, password: password, nonce: nonce})
|
|
})
|
|
}
|
|
|
|
export async function postLogIn({name, password}) {
|
|
return shoofetch(`${apiUrl}/login`, {
|
|
method: 'POST',
|
|
body: JSON.stringify({name: name, password: password})
|
|
}).then((res) => {
|
|
LogInStatusUpdateEscapeTool.setLoggedIn(true);
|
|
return res;
|
|
})
|
|
}
|
|
|
|
export async function postLogOut() {
|
|
return shoofetch(`${apiUrl}/logout`, {
|
|
method: 'POST'
|
|
}).then((res) => {
|
|
LogInStatusUpdateEscapeTool.setLoggedIn(false);
|
|
return res;
|
|
})
|
|
}
|
|
|
|
export async function fetchProfile() {
|
|
return shoofetch(`${apiUrl}/user`, {method: 'GET'});
|
|
} |