81 lines
2.3 KiB
TypeScript
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 })
|