fyp/webpage/src/lib/requests.svelte.ts

124 lines
2.5 KiB
TypeScript

import { goto } from '$app/navigation';
import { userStore } from 'routes/UserStore.svelte';
import { notificationStore } from './NotificationsStore.svelte';
const API = '/api';
export async function get(url: string) {
const headers = new Headers();
//headers.append('content-type', 'application/json');
headers.append('response-type', 'application/json');
if (userStore.user) {
headers.append('token', userStore.user.token);
}
const r = await fetch(`${API}/${url}`, {
method: 'GET',
headers: headers
});
if (r.status === 401) {
userStore.user = undefined;
goto('/login');
} else if (r.status !== 200) {
throw r;
}
return r.json();
}
export async function post(url: string, body: any) {
const headers = new Headers();
headers.append('content-type', 'application/json');
if (userStore.user) {
headers.append('token', userStore.user.token);
}
const r = await fetch(`${API}/${url}`, {
method: 'POST',
headers: headers,
body: JSON.stringify(body)
});
if (r.status === 401) {
userStore.user = undefined;
goto('/login');
throw r;
} else if (r.status !== 200) {
throw r;
}
return r.json();
}
export async function rdelete(url: string, body: any) {
const headers = new Headers();
headers.append('content-type', 'application/json');
if (userStore.user) {
headers.append('token', userStore.user.token);
}
const r = await fetch(`${API}/${url}`, {
method: 'DELETE',
headers: headers,
body: JSON.stringify(body)
});
if (r.status === 401) {
userStore.user = undefined;
goto('/login');
} else if (r.status !== 200) {
throw r;
}
return r.json();
}
export async function postFormData(url: string, body: FormData) {
const headers = new Headers();
//headers.append('content-type', 'multipart/form-data');
headers.append('response-type', 'application/json');
if (userStore.user) {
headers.append('token', userStore.user.token);
}
const r = await fetch(`${API}/${url}`, {
method: 'POST',
headers: headers,
body: body
});
if (r.status == 401) {
userStore.user = undefined;
goto('/login');
throw new Error('Redirect');
}
if (r.status !== 200) {
throw r;
}
return r.json();
}
export async function showMessage(
e: any,
messages: any = notificationStore,
message = 'Could not complete request'
): Promise<boolean> {
if (e == null) {
return false;
} else if (e instanceof Response) {
try {
messages.display(await e.json());
} catch (ex) {
showMessage(ex, messages, message);
}
return true;
} else {
console.error(e);
messages.display(message);
return true;
}
}