Files
XCDesktop/api/modules/remote/routes.ts
2026-03-08 01:34:54 +08:00

81 lines
2.3 KiB
TypeScript

import express, { type Request, type Response, type Router } from 'express'
import { asyncHandler } from '../../utils/asyncHandler.js'
import { successResponse } from '../../utils/response.js'
import { RemoteService, type DeviceData } from './service.js'
export interface RemoteRoutesDependencies {
remoteService: RemoteService
}
export const createRemoteRoutes = (deps: RemoteRoutesDependencies): Router => {
const router = express.Router()
const { remoteService } = deps
router.get(
'/config',
asyncHandler(async (req: Request, res: Response) => {
const config = await remoteService.getConfig()
successResponse(res, config)
}),
)
router.post(
'/config',
asyncHandler(async (req: Request, res: Response) => {
const config = req.body
await remoteService.saveConfig(config)
successResponse(res, null)
}),
)
router.get(
'/screenshot',
asyncHandler(async (req: Request, res: Response) => {
const deviceName = req.query.device as string | undefined
const buffer = await remoteService.getScreenshot(deviceName)
if (!buffer) {
return successResponse(res, '')
}
const base64 = `data:image/png;base64,${buffer.toString('base64')}`
successResponse(res, base64)
}),
)
router.post(
'/screenshot',
asyncHandler(async (req: Request, res: Response) => {
const { dataUrl, deviceName } = req.body
console.log('[Remote] saveScreenshot called:', { deviceName, hasDataUrl: !!dataUrl })
await remoteService.saveScreenshot(dataUrl, deviceName)
successResponse(res, null)
}),
)
router.get(
'/data',
asyncHandler(async (req: Request, res: Response) => {
const deviceName = req.query.device as string | undefined
const data = await remoteService.getData(deviceName)
successResponse(res, data)
}),
)
router.post(
'/data',
asyncHandler(async (req: Request, res: Response) => {
const { deviceName, lastConnected } = req.body
const data: DeviceData = {}
if (lastConnected !== undefined) {
data.lastConnected = lastConnected
}
await remoteService.saveData(data, deviceName)
successResponse(res, null)
}),
)
return router
}
const remoteService = new RemoteService()
export default createRemoteRoutes({ remoteService })