import { addQueryParams, errorHandler, fetchRespHandler, getAuthHeaderOptions } from "../utils/http"; const API_ENDPOINT = process.env.REACT_APP_OTA_SERVICE_URL; const vehiclesAPI = { addVehicle: async (vehicle, token) => fetch(`${API_ENDPOINT}/vehicle`, { method: "POST", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), body: JSON.stringify(vehicle), }) .then(fetchRespHandler) .catch(errorHandler), deleteVehicle: async (vin, token) => fetch(`${API_ENDPOINT}/vehicle/${vin}`, { method: "DELETE", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler), getConnections: async (vins, token) => { const u = `${API_ENDPOINT}/carsconnected?vins=${vins.join(",")}`; return fetch(u, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler); }, getECUs: async (search, token) => { const u = addQueryParams(`${API_ENDPOINT}/vehicleecus`, search); return fetch(u, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler); }, getModels: async (token) => fetch(`${API_ENDPOINT}/vehiclemodels`, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler), getLocations: async (token) => fetch(`${API_ENDPOINT}/carslocations`, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler), getState: async (token, vin) => fetch(`${API_ENDPOINT}/carstate?vin=${vin}`, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler), getVehicle: async (vin, token) => fetch(`${API_ENDPOINT}/vehicle/${vin}`, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler), getVehicles: async (search, token) => { const u = addQueryParams(`${API_ENDPOINT}/vehicles`, search); return fetch(u, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler); }, getFleets: async (vin, search, token) => { const u = addQueryParams(`${API_ENDPOINT}/vehicle/${vin}/fleets`, search) return fetch(u, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler); }, getYears: async (token) => fetch(`${API_ENDPOINT}/vehicleyears`, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler), sendCommand: async (vins, command, token) => fetch(`${API_ENDPOINT}/vehiclecommand`, { method: "POST", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), body: JSON.stringify({ vins, ...command, }), }) .then(fetchRespHandler) .catch(errorHandler), updateVehicle: async (vin, vehicle, token) => fetch(`${API_ENDPOINT}/vehicle/${vin}`, { method: "PUT", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), body: JSON.stringify(vehicle), }) .then(fetchRespHandler) .catch(errorHandler), getCANSignals: async (vin, token) => fetch(`${API_ENDPOINT}/cansignals/${vin}`, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler), getTRexLogs: async (vin, date, offset, count, direction, token, controller) => fetch(`${API_ENDPOINT}/vehicle/${vin}/trex-logs?date=${date}&offset=${offset}&count=${count}&direction=${direction}`, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), signal: controller.signal }) .then(fetchRespHandler) .catch(errorHandler), getVersionLog: async ({vin, ...search}, token) => { const u = addQueryParams(`${API_ENDPOINT}/vehicle/${vin}/version/logs`, search); return fetch(u, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }) .then(fetchRespHandler) .catch(errorHandler) }, getLogFileLink: async ({vin, year, month, day}, token) => { const u = `${API_ENDPOINT}/vehicle/${vin}/trex-logs-link?year=${year}&month=${month}&day=${day}` return fetch(u, { method: "GET", headers: Object.assign( { "Content-Type": "application/json" }, getAuthHeaderOptions(token) ), }).then(fetchRespHandler) .catch(errorHandler) }, }; export default vehiclesAPI;