/** * CSV Rates API Client * * Client for CSV-based rate search endpoints */ import { CsvRateSearchRequest, CsvRateSearchResponse, AvailableCompanies, FilterOptions, } from '@/types/rate-filters'; const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000'; /** * Create headers — auth is carried by httpOnly cookies (credentials: 'include') */ function createHeaders(): HeadersInit { return { 'Content-Type': 'application/json', }; } /** * Search CSV-based rates with filters */ export async function searchCsvRates( request: CsvRateSearchRequest ): Promise { const response = await fetch(`${API_BASE_URL}/api/v1/rates/search-csv`, { method: 'POST', credentials: 'include', headers: createHeaders(), body: JSON.stringify(request), }); if (!response.ok) { const error = await response.json().catch(() => ({})); throw new Error(error.message || `Failed to search CSV rates: ${response.statusText}`); } return response.json(); } /** * Get available carrier companies */ export async function getAvailableCompanies(): Promise { const response = await fetch(`${API_BASE_URL}/api/v1/rates/companies`, { method: 'GET', credentials: 'include', headers: createHeaders(), }); if (!response.ok) { throw new Error(`Failed to fetch companies: ${response.statusText}`); } return response.json(); } /** * Get available filter options */ export async function getFilterOptions(): Promise { const response = await fetch(`${API_BASE_URL}/api/v1/rates/filters/options`, { method: 'GET', credentials: 'include', headers: createHeaders(), }); if (!response.ok) { throw new Error(`Failed to fetch filter options: ${response.statusText}`); } return response.json(); }