Files
ember-market-frontend/lib/server-utils.ts
2025-02-07 19:30:49 +00:00

35 lines
932 B
TypeScript

import { cookies } from 'next/headers';
import { redirect } from 'next/navigation';
/**
* Server-side fetch wrapper with auth handling
*/
export const fetchServer = async <T = unknown>(
endpoint: string,
options: RequestInit = {}
): Promise<T> => {
const cookieStore = cookies();
const authToken = await cookieStore.get('Authorization')?.value;
if (!authToken) redirect('/login');
try {
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;
}
};