diff --git a/src/lib/api/server/base.ts b/src/lib/api/server/base.ts index 359d14a..9818f8a 100644 --- a/src/lib/api/server/base.ts +++ b/src/lib/api/server/base.ts @@ -1,14 +1,27 @@ -import { logout } from '@/lib/auth/server'; +import { cookies } from 'next/headers'; import { redirect } from 'next/navigation'; +export async function clearAuthAndRedirect(to = '/login') { + const c = await cookies(); + c.delete('session'); + c.delete('refresh'); + redirect(to); +} + const BASE_URL = process.env.API_BASE_URL || 'http://localhost:8080'; +type ApiResponse = { + data?: T; + error?: string; + message?: string; +}; + export async function fetchServerAPI( endpoint: string, token: string, method: string = 'GET', body?: object -): Promise { +): Promise> { const headers: Record = { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` @@ -22,8 +35,8 @@ export async function fetchServerAPI( if (!response.ok) { if (response.status == 401) { - await logout(); - redirect('/login'); + clearAuthAndRedirect(); + return { error: 'unauthorized' }; } throw new Error( `API Error: ${response.statusText} - ${method} - ${BASE_URL}${endpoint} - ${token}` @@ -31,8 +44,8 @@ export async function fetchServerAPI( } if (response.headers.get('Content-Type')?.includes('application/json')) { - return response.json(); + return await response.json(); } - return response.text() as T; + return { message: await response.text() }; } diff --git a/src/lib/api/server/configuration.ts b/src/lib/api/server/configuration.ts index 3a9980b..2401c53 100644 --- a/src/lib/api/server/configuration.ts +++ b/src/lib/api/server/configuration.ts @@ -6,7 +6,8 @@ import type { EventConfig, EventRules, ServerSettings, - ConfigFile + ConfigFile, + Config } from '@/lib/types/config'; const serverRoute = '/server'; @@ -15,22 +16,27 @@ export async function getServerConfigurations( token: string, serverId: string ): Promise { - return fetchServerAPI(`${serverRoute}/${serverId}/config`, token); + const response = await fetchServerAPI(`${serverRoute}/${serverId}/config`, token); + return response.data!; } export async function getServerConfiguration( token: string, serverId: string, configType: ConfigFile -): Promise { - return fetchServerAPI(`${serverRoute}/${serverId}/config/${configType}`, token); +): Promise { + const response = await fetchServerAPI( + `${serverRoute}/${serverId}/config/${configType}`, + token + ); + return response.data!; } export async function updateServerConfiguration( token: string, serverId: string, configType: ConfigFile, - config: Configuration | AssistRules | EventConfig | EventRules | ServerSettings, + config: Config, restart = false ): Promise { await fetchServerAPI(`${serverRoute}/${serverId}/config/${configType}`, token, 'PUT', { diff --git a/src/lib/api/server/lookups.ts b/src/lib/api/server/lookups.ts index 66ea345..8062c7e 100644 --- a/src/lib/api/server/lookups.ts +++ b/src/lib/api/server/lookups.ts @@ -4,21 +4,29 @@ import { Track, CarModel, CupCategory, DriverCategory, SessionType } from '@/lib const lookupRoute = '/lookup'; export async function getTracks(token: string): Promise { - return fetchServerAPI(`${lookupRoute}/tracks`, token); + const response = await fetchServerAPI(`${lookupRoute}/tracks`, token); + return response.data!; } export async function getCarModels(token: string): Promise { - return fetchServerAPI(`${lookupRoute}/car-models`, token); + const response = await fetchServerAPI(`${lookupRoute}/car-models`, token); + return response.data!; } export async function getCupCategories(token: string): Promise { - return fetchServerAPI(`${lookupRoute}/cup-categories`, token); + const response = await fetchServerAPI(`${lookupRoute}/cup-categories`, token); + return response.data!; } export async function getDriverCategories(token: string): Promise { - return fetchServerAPI(`${lookupRoute}/driver-categories`, token); + const response = await fetchServerAPI( + `${lookupRoute}/driver-categories`, + token + ); + return response.data!; } export async function getSessionTypes(token: string): Promise { - return fetchServerAPI(`${lookupRoute}/session-types`, token); + const response = await fetchServerAPI(`${lookupRoute}/session-types`, token); + return response.data!; } diff --git a/src/lib/api/server/membership.ts b/src/lib/api/server/membership.ts index 5fa83e6..0403a4a 100644 --- a/src/lib/api/server/membership.ts +++ b/src/lib/api/server/membership.ts @@ -24,28 +24,35 @@ export async function getUsers(token: string, params: UserListParams = {}): Prom const queryString = searchParams.toString(); const endpoint = `${membershipRoute}${queryString ? `?${queryString}` : ''}`; - return fetchServerAPI(endpoint, token); + const response = await fetchServerAPI(endpoint, token); + return response.data!; } export async function createUser( token: string, userData: { username: string; password: string; role: string } -) { - return fetchServerAPI(membershipRoute, token, 'POST', userData); +): Promise { + await fetchServerAPI(membershipRoute, token, 'POST', userData); } export async function getUserById(token: string, userId: string): Promise { - return fetchServerAPI(`${membershipRoute}/${userId}`, token); + const response = await fetchServerAPI(`${membershipRoute}/${userId}`, token); + return response.data!; } -export async function updateUser(token: string, userId: string, userData: Partial) { - return fetchServerAPI(`${membershipRoute}/${userId}`, token, 'PUT', userData); +export async function updateUser( + token: string, + userId: string, + userData: Partial +): Promise { + await fetchServerAPI(`${membershipRoute}/${userId}`, token, 'PUT', userData); } -export async function deleteUser(token: string, userId: string) { - return fetchServerAPI(`${membershipRoute}/${userId}`, token, 'DELETE'); +export async function deleteUser(token: string, userId: string): Promise { + await fetchServerAPI(`${membershipRoute}/${userId}`, token, 'DELETE'); } export async function getRoles(token: string): Promise { - return fetchServerAPI(`${membershipRoute}/roles`, token); + const response = await fetchServerAPI(`${membershipRoute}/roles`, token); + return response.data!; } diff --git a/src/lib/api/server/servers.ts b/src/lib/api/server/servers.ts index 1c6a027..c79d582 100644 --- a/src/lib/api/server/servers.ts +++ b/src/lib/api/server/servers.ts @@ -1,30 +1,31 @@ import { fetchServerAPI } from './base'; -import { Server } from '@/lib/types/server'; +import { Server, ServiceStatus } from '@/lib/types/server'; const serverRoute = '/server'; export async function getServers(token: string): Promise { const response = await fetchServerAPI(serverRoute, token); - return response; + return response.data!; } export async function getServer(token: string, serverId: string): Promise { const response = await fetchServerAPI(`${serverRoute}/${serverId}`, token); - return response; + return response.data!; } -export async function restartService(token: string, serverId: string) { - return fetchServerAPI(`${serverRoute}/${serverId}/service/restart`, token, 'POST'); +export async function restartService(token: string, serverId: string): Promise { + await fetchServerAPI(`${serverRoute}/${serverId}/service/restart`, token, 'POST'); } -export async function startService(token: string, serverId: string) { - return fetchServerAPI(`${serverRoute}/${serverId}/service/start`, token, 'POST'); +export async function startService(token: string, serverId: string): Promise { + await fetchServerAPI(`${serverRoute}/${serverId}/service/start`, token, 'POST'); } -export async function stopService(token: string, serverId: string) { - return fetchServerAPI(`${serverRoute}/${serverId}/service/stop`, token, 'POST'); +export async function stopService(token: string, serverId: string): Promise { + await fetchServerAPI(`${serverRoute}/${serverId}/service/stop`, token, 'POST'); } -export async function getServiceStatus(token: string, serverId: string) { - return fetchServerAPI(`${serverRoute}/${serverId}/service`, token); +export async function getServiceStatus(token: string, serverId: string): Promise { + const response = await fetchServerAPI(`${serverRoute}/${serverId}/service`, token); + return response.data!; } diff --git a/src/lib/api/server/statistics.ts b/src/lib/api/server/statistics.ts index 7c3209a..b3c48bc 100644 --- a/src/lib/api/server/statistics.ts +++ b/src/lib/api/server/statistics.ts @@ -9,8 +9,9 @@ export async function getServerStatistics( startDate: string, endDate: string ): Promise { - return fetchServerAPI( + const response = await fetchServerAPI( `${serverRoute}/${serverId}/state-history/statistics?start_date=${startDate}&end_date=${endDate}`, token ); + return response.data!; }