{ "name": "homelab-topology", "private": true, "version": "1.0.0", "type": "module", "scripts": { "dev": "vite", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", "discover": "npx tsx src/services/sshDiscovery.ts", "server": "tsx server/index.ts", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage" }, "dependencies": { "@types/cors": "^2.8.19", "@types/dagre": "^0.7.53", "@types/express": "^5.0.6", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", "@xyflow/react": "^12.4.4", "bcrypt": "^6.0.0", "cors": "^2.8.6", "dagre": "^0.8.5", "dotenv": "^17.3.1", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "helmet": "^8.1.0", "jsonwebtoken": "^9.0.3", "lucide-react": "^0.468.0", "pino": "^10.3.1", "pino-pretty": "^13.1.3", "react": "^18.3.1", "react-dom": "^18.3.1", "recharts": "^2.15.0", "socket.io": "^4.8.3", "socket.io-client": "^4.8.3", "ssh2": "^1.17.0", "zustand": "^5.0.2" }, "devDependencies": { "@eslint/js": "^9.17.0", "@prisma/client": "^5.22.0", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@types/bcrypt": "^6.0.0", "@types/express-rate-limit": "^5.1.3", "@types/jsdom": "^27.0.0", "@types/jsonwebtoken": "^9.0.10", "@types/node": "^22.0.0", "@types/pino": "^7.0.4", "@types/react": "^18.3.18", "@types/react-dom": "^18.3.5", "@types/ssh2": "^1.15.0", "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", "eslint": "^9.17.0", "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-refresh": "^0.4.16", "globals": "^15.14.0", "jsdom": "^28.1.0", "postcss": "^8.4.49", "prisma": "^5.22.0", "tailwindcss": "^3.4.17", "tsx": "^4.19.0", "typescript": "~5.6.2", "typescript-eslint": "^8.18.2", "vite": "^6.0.5", "vitest": "^4.0.18" } }