import fetch from 'node-fetch'; const NHTSA_BASE = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValues'; const TTL_SECONDS = 90 * 24 * 60 * 60; // 90 days /** Fetch decoded VIN data from NHTSA vPIC */ export async function fetchFromNhtsa(vin) { const url = `${NHTSA_BASE}/${encodeURIComponent(vin)}?format=json`; const res = await fetch(url, { timeout: 10000 }); if (!res.ok) throw new Error(`NHTSA returned HTTP ${res.status}`); const json = await res.json(); const results = json.Results?.[0]; if (!results) throw new Error('NHTSA returned empty Results array'); return results; } /** Map NHTSA flat key/value response to our schema */ export function mapNhtsaToSchema(raw) { const cc = raw.DisplacementCC ? parseFloat(raw.DisplacementCC) : null; const litre = raw.DisplacementL ? parseFloat(raw.DisplacementL) : null; const cylinders = raw.EngineCylinders ? parseInt(raw.EngineCylinders, 10) : null; return { make: raw.Make || null, model: raw.Model || null, model_year: raw.ModelYear || null, trim: raw.Trim || null, series: raw.Series || null, body_class: raw.BodyClass || null, drive_type: raw.DriveType || null, engine_displacement_cc: isNaN(cc) ? null : cc, engine_displacement_l: isNaN(litre) ? null : litre, engine_cylinders: isNaN(cylinders) ? null : cylinders, fuel_type_primary: raw.FuelTypePrimary || null, transmission_style: raw.TransmissionStyle || null, transmission_speeds: raw.TransmissionSpeeds || null, plant_city: raw.PlantCity || null, plant_state: raw.PlantState || null, plant_country: raw.PlantCountry || null, manufacturer_name: raw.Manufacturer || null, vehicle_type: raw.VehicleType || null, error_code: raw.ErrorCode || '0', error_text: raw.ErrorText || null, }; } export { TTL_SECONDS };