turboci-admin/src/functions/ttyd/grab-ttyd-info.ts
2026-03-14 08:49:12 +01:00

49 lines
1.3 KiB
TypeScript

import {
NSQLITE_TURBOCI_ADMIN_USERS_PORTS,
NSQLiteTables,
} from "@/src/db/types";
import { TtydInfoObject, User } from "@/src/types";
import getNextAvailablePort from "@/src/utils/grab-next-available-port";
import grabTtydCmd from "@/src/utils/grab-ttyd-cmd";
import grabConnectedWebsocketUserdata from "@/src/websocket/(utils)/grab-connected-websocket-user-data";
import BunSQLite from "@moduletrace/bun-sqlite";
import { exec } from "child_process";
type Params = {
user: User;
cmd: string;
};
export default async function grabTtydInfo({
user,
cmd,
}: Params): Promise<TtydInfoObject> {
const available_port = await getNextAvailablePort();
let url = `/ttyd/${available_port}`;
const ttyd_cmd = grabTtydCmd({
cmd,
port: available_port,
});
const ttyd_exec = exec(ttyd_cmd.cmd);
await Bun.sleep(2000);
const connected_user_data = grabConnectedWebsocketUserdata({ user });
await BunSQLite.insert<
NSQLITE_TURBOCI_ADMIN_USERS_PORTS,
(typeof NSQLiteTables)[number]
>({
data: [{ user_id: user.id, port: available_port }],
table: "users_ports",
});
connected_user_data.child_processes.push(ttyd_exec);
connected_user_data.ports.push(available_port);
return { port: available_port, url };
}