Add dashboard Bluetooth controls
This commit is contained in:
@@ -3,6 +3,7 @@ import type { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
|
||||
import { z } from "zod";
|
||||
import type { AdbConfig } from "./adb.js";
|
||||
import { launchAdbTarget } from "./adb.js";
|
||||
import { bluetoothActionSchema, readBluetoothStatus, triggerBluetoothAction } from "./bluetooth.js";
|
||||
import type { CarTelemetryRecorder } from "./car-telemetry.js";
|
||||
import type { CompanionDatabase } from "./database.js";
|
||||
import { hashToken, randomToken } from "./security.js";
|
||||
@@ -93,6 +94,26 @@ export function registerMobileRoutes(
|
||||
return { devices };
|
||||
});
|
||||
|
||||
app.get("/api/mobile/bluetooth", async (request, reply) => {
|
||||
if (!requireWebUser(request, reply)) return;
|
||||
return readBluetoothStatus();
|
||||
});
|
||||
|
||||
app.post("/api/mobile/bluetooth", { config: { rateLimit: { max: 12, timeWindow: "1 minute" } } }, async (request, reply) => {
|
||||
if (!requireWebUser(request, reply)) return;
|
||||
const parsed = z.object({ action: bluetoothActionSchema }).safeParse(request.body);
|
||||
if (!parsed.success) {
|
||||
return reply.code(400).send({ error: { code: "INVALID_BLUETOOTH_ACTION", message: "That Bluetooth action is not available" } });
|
||||
}
|
||||
try {
|
||||
return await triggerBluetoothAction(parsed.data.action);
|
||||
} catch {
|
||||
return reply.code(503).send({
|
||||
error: { code: "BLUETOOTH_ACTION_FAILED", message: "The Pi could not change its Bluetooth state" }
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
app.delete<{ Params: { id: string } }>("/api/mobile/devices/:id", async (request, reply) => {
|
||||
if (!requireWebUser(request, reply)) return;
|
||||
const result = database.prepare("UPDATE mobile_devices SET revoked_at = ? WHERE id = ? AND revoked_at IS NULL")
|
||||
|
||||
Reference in New Issue
Block a user