Fix type errors

This commit is contained in:
Michel Roegl-Brunner
2025-11-28 13:21:37 +01:00
parent 7fe2a8b453
commit 7833d5d408
43 changed files with 829 additions and 524 deletions

View File

@@ -29,6 +29,7 @@ export const backupsRouter = createTRPCRouter({
storage_name: string;
storage_type: string;
discovered_at: Date;
server_id?: number;
server_name: string | null;
server_color: string | null;
}>;
@@ -38,7 +39,7 @@ export const backupsRouter = createTRPCRouter({
if (backups.length === 0) continue;
// Get hostname from first backup (all backups for same container should have same hostname)
const hostname = backups[0]?.hostname || '';
const hostname = backups[0]?.hostname ?? '';
result.push({
container_id: containerId,

View File

@@ -71,9 +71,12 @@ function parseRawConfig(rawConfig: string): any {
// Parse rootfs into storage and size
if (config.rootfs) {
const match = config.rootfs.match(/^([^:]+):([^,]+)(?:,size=(.+))?$/);
if (match) {
config.rootfs_storage = `${match[1]}:${match[2]}`;
const regex = /^([^:]+):([^,]+)(?:,size=(.+))?$/;
const match = regex.exec(config.rootfs as string);
const storage = match?.[1];
const path = match?.[2];
if (storage && path) {
config.rootfs_storage = `${storage}:${path}`;
config.rootfs_size = match[3] ?? '';
}
delete config.rootfs; // Remove the rootfs field since we only need rootfs_storage and rootfs_size
@@ -788,7 +791,7 @@ export const installedScriptsRouter = createTRPCRouter({
let detectedContainers: any[] = [];
// Helper function to parse list output and extract IDs
const parseListOutput = (output: string, isVM: boolean): string[] => {
const parseListOutput = (output: string, _p0: boolean): string[] => {
const ids: string[] = [];
const lines = output.split('\n').filter(line => line.trim());
@@ -1047,10 +1050,11 @@ export const installedScriptsRouter = createTRPCRouter({
const scriptData = script as any;
if (!scriptData.server_id) continue;
if (!scriptsByServer.has(scriptData.server_id)) {
scriptsByServer.set(scriptData.server_id, []);
const serverId = Number(scriptData.server_id);
if (!scriptsByServer.has(serverId)) {
scriptsByServer.set(serverId, []);
}
scriptsByServer.get(scriptData.server_id)!.push(scriptData);
scriptsByServer.get(serverId)!.push(scriptData);
}
// Process each server
@@ -1229,7 +1233,7 @@ export const installedScriptsRouter = createTRPCRouter({
}
}
} catch (error) {
console.error(`cleanupOrphanedScripts: Error checking script ${String((scriptData as any).script_name)}:`, error);
console.error(`cleanupOrphanedScripts: Error checking script ${String((scriptData).script_name)}:`, error);
}
}
} catch (error) {
@@ -1347,7 +1351,7 @@ export const installedScriptsRouter = createTRPCRouter({
try {
await Promise.race([
new Promise<void>((resolve, reject) => {
new Promise<void>((resolve) => {
void sshExecutionService.executeCommand(
server as Server,
'pct list',
@@ -1375,7 +1379,7 @@ export const installedScriptsRouter = createTRPCRouter({
try {
await Promise.race([
new Promise<void>((resolve, reject) => {
new Promise<void>((resolve) => {
void sshExecutionService.executeCommand(
server as Server,
'qm list',
@@ -1479,7 +1483,7 @@ export const installedScriptsRouter = createTRPCRouter({
}
// Determine if it's a VM or LXC
const vm = await isVM(input.id, scriptData.container_id, scriptData.server_id);
const vm = await isVM(input.id, String(scriptData.container_id), Number(scriptData.server_id));
// Check container status (use qm for VMs, pct for LXC)
const statusCommand = vm
@@ -1582,7 +1586,7 @@ export const installedScriptsRouter = createTRPCRouter({
}
// Determine if it's a VM or LXC
const vm = await isVM(input.id, scriptData.container_id, scriptData.server_id);
const vm = await isVM(input.id, String(scriptData.container_id), Number(scriptData.server_id));
// Execute control command (use qm for VMs, pct for LXC)
const controlCommand = vm
@@ -1678,7 +1682,7 @@ export const installedScriptsRouter = createTRPCRouter({
}
// Determine if it's a VM or LXC
const vm = await isVM(input.id, scriptData.container_id, scriptData.server_id);
const vm = await isVM(input.id, String(scriptData.container_id), Number(scriptData.server_id));
// First check if container is running and stop it if necessary
const statusCommand = vm
@@ -2372,7 +2376,7 @@ EOFCONFIG`;
let serverHostname = '';
try {
await new Promise<void>((resolve, reject) => {
sshExecutionService.executeCommand(
void sshExecutionService.executeCommand(
server as Server,
'hostname',
(data: string) => {

View File

@@ -100,7 +100,7 @@ export const scriptsRouter = createTRPCRouter({
getAllScripts: publicProcedure
.query(async () => {
try {
const scripts = await githubJsonService.getAllScripts();
const scripts = await githubJsonService.getAllScripts("");
return { success: true, scripts };
} catch (error) {
return {

View File

@@ -1,5 +1,5 @@
import { createTRPCRouter, publicProcedure } from "~/server/api/trpc";
import { readFile, writeFile } from "fs/promises";
import { readFile, writeFile, stat } from "fs/promises";
import { join } from "path";
import { spawn } from "child_process";
import { env } from "~/env";
@@ -176,10 +176,21 @@ export const versionRouter = createTRPCRouter({
return {
success: true,
logs: [],
isComplete: false
isComplete: false,
logFileModifiedTime: null
};
}
// Get log file modification time for session validation
let logFileModifiedTime: number | null = null;
try {
const stats = await stat(logPath);
logFileModifiedTime = stats.mtimeMs;
} catch (statError) {
// If we can't get stats, continue without timestamp
console.warn('Could not get log file stats:', statError);
}
const logs = await readFile(logPath, 'utf-8');
const logLines = logs.split('\n')
.filter(line => line.trim())
@@ -202,7 +213,8 @@ export const versionRouter = createTRPCRouter({
return {
success: true,
logs: logLines,
isComplete
isComplete,
logFileModifiedTime
};
} catch (error) {
console.error('Error reading update logs:', error);
@@ -210,7 +222,8 @@ export const versionRouter = createTRPCRouter({
success: false,
error: error instanceof Error ? error.message : 'Failed to read update logs',
logs: [],
isComplete: false
isComplete: false,
logFileModifiedTime: null
};
}
}),