Add GPS trip reports and route maps
This commit is contained in:
@@ -130,6 +130,50 @@ export type BluetoothStatus = {
|
||||
message: string;
|
||||
};
|
||||
|
||||
export type TripSummary = {
|
||||
id: number;
|
||||
deviceId: string;
|
||||
deviceName: string;
|
||||
startedAt: number;
|
||||
endedAt: number | null;
|
||||
active: boolean;
|
||||
durationSeconds: number;
|
||||
movingSeconds: number;
|
||||
distanceKm: number;
|
||||
pointCount: number;
|
||||
averageSpeedKph: number | null;
|
||||
peakSpeedKph: number | null;
|
||||
vehicleBatteryStartPercent: number | null;
|
||||
vehicleBatteryEndPercent: number | null;
|
||||
batteryConsumedPercent: number | null;
|
||||
energyConsumedKwh: number | null;
|
||||
phoneBatteryStartPercent: number | null;
|
||||
phoneBatteryEndPercent: number | null;
|
||||
start: { latitude: number; longitude: number };
|
||||
end: { latitude: number; longitude: number };
|
||||
};
|
||||
|
||||
export type TripPoint = {
|
||||
capturedAt: number;
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
accuracyMeters: number;
|
||||
altitudeMeters: number | null;
|
||||
speedKph: number | null;
|
||||
bearingDegrees: number | null;
|
||||
vehicleBatteryPercent: number | null;
|
||||
};
|
||||
|
||||
export type TripPin = {
|
||||
type: "start" | "end" | "peak-speed";
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
capturedAt: number | null;
|
||||
speedKph?: number | null;
|
||||
};
|
||||
|
||||
export type TripDetail = TripSummary & { points: TripPoint[]; pins: TripPin[] };
|
||||
|
||||
export type CarTelemetry = {
|
||||
available: true;
|
||||
collectedAt: string;
|
||||
@@ -274,6 +318,17 @@ export async function getBluetoothStatus(): Promise<BluetoothStatus> {
|
||||
return parseResponse<BluetoothStatus>(await fetch("/api/mobile/bluetooth", { credentials: "same-origin" }));
|
||||
}
|
||||
|
||||
export async function getTrips(): Promise<TripSummary[]> {
|
||||
const response = await parseResponse<{ trips: TripSummary[] }>(
|
||||
await fetch("/api/trips", { credentials: "same-origin" })
|
||||
);
|
||||
return response.trips;
|
||||
}
|
||||
|
||||
export async function getTrip(id: number): Promise<TripDetail> {
|
||||
return parseResponse<TripDetail>(await fetch(`/api/trips/${id}`, { credentials: "same-origin" }));
|
||||
}
|
||||
|
||||
export async function revokeMobileDevice(id: string, csrfToken: string): Promise<void> {
|
||||
await parseResponse(await fetch(`/api/mobile/devices/${encodeURIComponent(id)}`, {
|
||||
method: "DELETE",
|
||||
|
||||
Reference in New Issue
Block a user