28 lines
1018 B
TypeScript
28 lines
1018 B
TypeScript
import { Router, type Request, type Response } from 'express';
|
|
import type { SessionRegistry } from '../ssh/console-registry.js';
|
|
|
|
export function createConsoleAdminRouter(deps: {
|
|
registry: SessionRegistry;
|
|
requireAdmin: any;
|
|
}): Router {
|
|
const r = Router();
|
|
r.get('/ssh/console-sessions', deps.requireAdmin, (_req: Request, res: Response) => {
|
|
const sessions = deps.registry.listAll().map((s) => ({
|
|
task_id: s.localTaskId,
|
|
owner_id: s.ownerId,
|
|
connection_id: s.connectionId,
|
|
started_at: new Date(s.startedAt).toISOString(),
|
|
last_activity_at: new Date(s.lastActivityAt).toISOString(),
|
|
total_input_bytes: s.totalInputBytes,
|
|
total_output_bytes: s.totalOutputBytes,
|
|
}));
|
|
res.json({ sessions });
|
|
});
|
|
r.post('/ssh/console-sessions/:taskId/kill', deps.requireAdmin, async (req: Request, res: Response) => {
|
|
const taskId = req.params.taskId!;
|
|
await deps.registry.closeForTask(taskId, 'admin_kill');
|
|
res.json({ closed: true });
|
|
});
|
|
return r;
|
|
}
|