This commit fixes critical issues with the database encryption system: **Database Write Operations Fixed:** - Modified credential creation/update operations to use EncryptedDBOperations - Fixed SSH data and credential access to properly decrypt data - All sensitive data writes now go through encryption layer **Database Schema Migration:** - Added missing columns (private_key, public_key, detected_key_type) to ssh_credentials table - Fixed "no such column" SQLite errors during encrypted operations **Application Startup Order:** - Fixed DatabaseEncryption initialization timing issues - Moved encryption-dependent modules to load after encryption initialization - Prevents "DatabaseEncryption not initialized" errors **Key Management Improvements:** - Enhanced EncryptedDBOperations.insert() to return properly decrypted data with all fields - Fixed TypeScript type issues with database insert operations - Improved error handling for database encryption context All credential operations now properly encrypt sensitive data including SSH keys, passwords, and authentication tokens before writing to database.
129 lines
4.5 KiB
JSON
129 lines
4.5 KiB
JSON
{
|
|
"name": "termix",
|
|
"private": true,
|
|
"version": "1.6.0",
|
|
"description": "A web-based server management platform with SSH terminal, tunneling, and file editing capabilities",
|
|
"author": "Karmaa",
|
|
"main": "electron/main.cjs",
|
|
"type": "module",
|
|
"scripts": {
|
|
"clean": "npx prettier . --write",
|
|
"dev": "vite",
|
|
"build": "vite build && tsc -p tsconfig.node.json",
|
|
"build:backend": "tsc -p tsconfig.node.json",
|
|
"dev:backend": "tsc -p tsconfig.node.json && node ./dist/backend/backend/starter.js",
|
|
"lint": "eslint .",
|
|
"preview": "vite preview",
|
|
"electron": "electron .",
|
|
"electron:dev": "concurrently \"npm run dev\" \"wait-on http://localhost:5173 && electron .\"",
|
|
"build:win-portable": "npm run build && electron-builder --win --dir",
|
|
"build:win-installer": "npm run build && electron-builder --win --publish=never",
|
|
"build:linux-portable": "npm run build && electron-builder --linux --dir",
|
|
"test:encryption": "tsc -p tsconfig.node.json && node ./dist/backend/backend/utils/encryption-test.js",
|
|
"migrate:encryption": "tsc -p tsconfig.node.json && node ./dist/backend/backend/utils/encryption-migration.js"
|
|
},
|
|
"dependencies": {
|
|
"@hookform/resolvers": "^5.1.1",
|
|
"@radix-ui/react-accordion": "^1.2.11",
|
|
"@radix-ui/react-avatar": "^1.1.10",
|
|
"@radix-ui/react-checkbox": "^1.3.2",
|
|
"@radix-ui/react-collapsible": "^1.1.11",
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.15",
|
|
"@radix-ui/react-label": "^2.1.7",
|
|
"@radix-ui/react-popover": "^1.1.14",
|
|
"@radix-ui/react-progress": "^1.1.7",
|
|
"@radix-ui/react-scroll-area": "^1.2.9",
|
|
"@radix-ui/react-select": "^2.2.5",
|
|
"@radix-ui/react-separator": "^1.1.7",
|
|
"@radix-ui/react-slider": "^1.3.5",
|
|
"@radix-ui/react-slot": "^1.2.3",
|
|
"@radix-ui/react-switch": "^1.2.5",
|
|
"@radix-ui/react-tabs": "^1.1.12",
|
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
"@tailwindcss/vite": "^4.1.11",
|
|
"@types/bcryptjs": "^2.4.6",
|
|
"@types/multer": "^2.0.0",
|
|
"@types/qrcode": "^1.5.5",
|
|
"@types/speakeasy": "^2.0.10",
|
|
"@uiw/codemirror-extensions-hyper-link": "^4.24.1",
|
|
"@uiw/codemirror-extensions-langs": "^4.24.1",
|
|
"@uiw/codemirror-themes": "^4.24.1",
|
|
"@uiw/react-codemirror": "^4.24.1",
|
|
"@xterm/addon-attach": "^0.11.0",
|
|
"@xterm/addon-clipboard": "^0.1.0",
|
|
"@xterm/addon-fit": "^0.10.0",
|
|
"@xterm/addon-search": "^0.15.0",
|
|
"@xterm/addon-unicode11": "^0.8.0",
|
|
"@xterm/addon-web-links": "^0.11.0",
|
|
"@xterm/xterm": "^5.5.0",
|
|
"axios": "^1.10.0",
|
|
"bcryptjs": "^3.0.2",
|
|
"better-sqlite3": "^12.2.0",
|
|
"chalk": "^4.1.2",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"cookie-parser": "^1.4.7",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^17.2.0",
|
|
"drizzle-orm": "^0.44.3",
|
|
"express": "^5.1.0",
|
|
"i18next": "^25.4.2",
|
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
"i18next-http-backend": "^3.0.2",
|
|
"jose": "^5.2.3",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"lucide-react": "^0.525.0",
|
|
"multer": "^2.0.2",
|
|
"nanoid": "^5.1.5",
|
|
"next-themes": "^0.4.6",
|
|
"node-fetch": "^3.3.2",
|
|
"qrcode": "^1.5.4",
|
|
"react": "^19.1.0",
|
|
"react-dom": "^19.1.0",
|
|
"react-hook-form": "^7.60.0",
|
|
"react-i18next": "^15.7.3",
|
|
"react-resizable-panels": "^3.0.3",
|
|
"react-simple-keyboard": "^3.8.120",
|
|
"react-xtermjs": "^1.0.10",
|
|
"sonner": "^2.0.7",
|
|
"speakeasy": "^2.0.0",
|
|
"ssh2": "^1.16.0",
|
|
"tailwind-merge": "^3.3.1",
|
|
"tailwindcss": "^4.1.11",
|
|
"validator": "^13.15.15",
|
|
"ws": "^8.18.3",
|
|
"zod": "^4.0.5"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.34.0",
|
|
"@types/better-sqlite3": "^7.6.13",
|
|
"@types/cors": "^2.8.19",
|
|
"@types/express": "^5.0.3",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/node": "^24.3.0",
|
|
"@types/react": "^19.1.8",
|
|
"@types/react-dom": "^19.1.6",
|
|
"@types/ssh2": "^1.15.5",
|
|
"@types/ws": "^8.18.1",
|
|
"@vitejs/plugin-react-swc": "^3.10.2",
|
|
"autoprefixer": "^10.4.21",
|
|
"concurrently": "^9.2.1",
|
|
"electron": "^38.0.0",
|
|
"electron-builder": "^26.0.12",
|
|
"electron-icon-builder": "^2.0.1",
|
|
"electron-packager": "^17.1.2",
|
|
"eslint": "^9.34.0",
|
|
"eslint-plugin-react-hooks": "^5.2.0",
|
|
"eslint-plugin-react-refresh": "^0.4.20",
|
|
"globals": "^16.3.0",
|
|
"prettier": "3.6.2",
|
|
"ts-node": "^10.9.2",
|
|
"tw-animate-css": "^1.3.5",
|
|
"typescript": "~5.9.2",
|
|
"typescript-eslint": "^8.40.0",
|
|
"vite": "^7.1.5",
|
|
"wait-on": "^8.0.4"
|
|
}
|
|
}
|