Add ADB management and live car telemetry
This commit is contained in:
@@ -100,6 +100,30 @@ export type NetworkActivity = {
|
||||
messages: string[];
|
||||
};
|
||||
|
||||
export type InstalledAdbPackage = {
|
||||
packageName: string;
|
||||
apkPath: string;
|
||||
system: boolean;
|
||||
};
|
||||
|
||||
export type AdbTarget = { type: "component" | "package"; value: string };
|
||||
|
||||
export type AdbShortcut = AdbTarget & {
|
||||
id: number;
|
||||
name: string;
|
||||
createdAt: string;
|
||||
};
|
||||
|
||||
export type CarTelemetry = {
|
||||
available: true;
|
||||
collectedAt: string;
|
||||
speedKph: Availability<number>;
|
||||
gear: Availability<string>;
|
||||
wheelAngleDegrees: Availability<number>;
|
||||
batteryPercent: Availability<number>;
|
||||
rangeKm: Availability<number>;
|
||||
};
|
||||
|
||||
type ErrorResponse = { error?: { code?: string; message?: string } };
|
||||
|
||||
export class ApiError extends Error {
|
||||
@@ -150,3 +174,45 @@ export async function getNetworkStatus(): Promise<NetworkStatus> {
|
||||
export async function getNetworkActivity(): Promise<NetworkActivity> {
|
||||
return parseResponse<NetworkActivity>(await fetch("/api/network/activity", { credentials: "same-origin" }));
|
||||
}
|
||||
|
||||
export async function getAdbPackages(): Promise<InstalledAdbPackage[]> {
|
||||
const response = await parseResponse<{ packages: InstalledAdbPackage[] }>(
|
||||
await fetch("/api/adb/packages", { credentials: "same-origin" })
|
||||
);
|
||||
return response.packages;
|
||||
}
|
||||
|
||||
export async function getAdbShortcuts(): Promise<AdbShortcut[]> {
|
||||
const response = await parseResponse<{ shortcuts: AdbShortcut[] }>(
|
||||
await fetch("/api/adb/shortcuts", { credentials: "same-origin" })
|
||||
);
|
||||
return response.shortcuts;
|
||||
}
|
||||
|
||||
export async function uploadApk(file: File, csrfToken: string): Promise<void> {
|
||||
await parseResponse(
|
||||
await fetch("/api/adb/install", {
|
||||
method: "POST",
|
||||
credentials: "same-origin",
|
||||
headers: {
|
||||
"Content-Type": "application/vnd.android.package-archive",
|
||||
"X-CSRF-Token": csrfToken
|
||||
},
|
||||
body: file
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
export async function deleteAdbShortcut(id: number, csrfToken: string): Promise<void> {
|
||||
await parseResponse(
|
||||
await fetch(`/api/adb/shortcuts/${id}`, {
|
||||
method: "DELETE",
|
||||
credentials: "same-origin",
|
||||
headers: { "X-CSRF-Token": csrfToken }
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
export async function getCarTelemetry(): Promise<CarTelemetry> {
|
||||
return parseResponse<CarTelemetry>(await fetch("/api/car/telemetry", { credentials: "same-origin" }));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user