/** * Profile API Client * * Functions for fetching and updating profiles from the profile backend. */ import type { ProfileData, ProfileType, ProfileUpdateData } from './types'; /** * Fetch all profiles for the current user. */ export async function fetchAllProfiles( baseUrl: string, authHeaders?: Record ): Promise { const response = await fetch(`${baseUrl}/api/profile/all`, { headers: authHeaders, }); if (response.status === 404) { return []; } if (!response.ok) { throw new Error(`Failed to fetch profiles: ${response.statusText}`); } return response.json(); } /** * Fetch a specific profile by type. */ export async function fetchProfileByType( baseUrl: string, type: ProfileType, authHeaders?: Record ): Promise { const response = await fetch(`${baseUrl}/api/profile/${type}`, { headers: authHeaders, }); if (response.status === 404) { return null; } if (!response.ok) { throw new Error(`Failed to fetch profile: ${response.statusText}`); } return response.json(); } /** * Create or update a profile. */ export async function saveProfile( baseUrl: string, type: ProfileType, data: ProfileUpdateData, authHeaders?: Record ): Promise { const response = await fetch(`${baseUrl}/api/profile/${type}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', ...authHeaders, }, body: JSON.stringify(data), }); if (!response.ok) { const error = await response.json().catch(() => ({ message: response.statusText })); throw new Error(error.message || 'Failed to save profile'); } return response.json(); } /** * Get auth headers for API requests. * Uses Bearer token if available. */ export function getAuthHeaders(accessToken?: string | null): Record { const headers: Record = {}; if (accessToken) { headers['Authorization'] = `Bearer ${accessToken}`; } return headers; }