Files
ember-market-frontend/lib/server-service.ts
2025-02-14 16:07:37 +00:00

36 lines
955 B
TypeScript

import { cookies } from 'next/headers';
import { redirect } from 'next/navigation';
/**
* Server-side fetch wrapper with authentication.
*/
export async function fetchServer<T = unknown>(
endpoint: string,
options: RequestInit = {}
): Promise<T> {
const cookieStore = cookies();
const authToken = cookieStore.get('Authorization')?.value;
if (!authToken) redirect('/login');
try {
console.log(`${endpoint}`)
const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}${endpoint}`, {
...options,
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${authToken}`,
...options.headers,
},
cache: 'no-store',
});
if (res.status === 401) redirect('/login');
if (!res.ok) throw new Error(`Request failed: ${res.statusText}`);
return res.json();
} catch (error) {
console.error(`Server request to ${endpoint} failed:`, error);
throw error;
}
}