bc83af8e00
Hardened db.ts — added statement_timeout: 30000, idle_in_transaction_session_timeout: 10000, created transaction() helper (BEGIN/COMMIT/ROLLBACK). Multi-step API routes wrapped in transactions — Events POST, Conversations POST use atomic blocks. Fixed leads pagination — status filter pushed into SQL WHERE (no client-side filtering after LIMIT/OFFSET), added SELECT COUNT(*) for total. Rewrote dashboard — SQL aggregations (COUNT + GROUP BY + date_trunc) replace loading all leads into memory. Optimized conversations GET — merged duplicate correlated subqueries into single LEFT JOIN LATERAL. Created migration 021_performance_indexes.sql — 8 missing indexes + set_session_user_context() function caching current_user_hierarchy_level() as session variable (avoids per-query RLS join). Fixed build error — duplicate const other in conversations route. Also fixed a TypeScript never error in dashboard breakdown map. Verified — npx tsc --noEmit clean, npm test (13 pass, 7 integration skip gracefully), npx next build succeeds.
90 lines
3.1 KiB
JSON
90 lines
3.1 KiB
JSON
{
|
|
"name": "frontend",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "npm run dev:precheck & npm run dev:ollama & npm run dev:start",
|
|
"dev:signaling": "node signaling-server.mjs",
|
|
"dev:open": "node scripts/open-browser.mjs",
|
|
"dev:start": "concurrently -n AI,BROWSE,SIGNAL,NEXT,OPEN -c cyan,magenta,yellow,green,white \"npm run dev:rust\" \"npm run dev:browser-use\" \"npm run dev:signaling\" \"npm run dev:next\" \"npm run dev:open\"",
|
|
"dev:next": "next dev -p 3006",
|
|
"dev:precheck": "node scripts/precheck.mjs",
|
|
"dev:ollama": "node scripts/ensure-ollama.mjs",
|
|
"dev:rust": "node ai-server/index.mjs",
|
|
"dev:browser-use": "cd browser-use-service && node ../scripts/run-python.mjs main.py",
|
|
"setup": "node scripts/setup.mjs",
|
|
"migrate": "node scripts/run-migrations.mjs",
|
|
"db:migrate": "npm run migrate",
|
|
"build": "next build",
|
|
"start": "next start -p 3006",
|
|
"lint": "eslint",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"ci": "npm run lint && npx tsc --noEmit && npm test",
|
|
"repair": "echo 'Auto-repair disabled for security. Fix errors manually.'",
|
|
"repair:watch": "echo 'Auto-repair disabled for security. Fix errors manually.'",
|
|
"repair:ci": "echo 'Auto-repair disabled for security. Fix errors manually.'"
|
|
},
|
|
"dependencies": {
|
|
"@emoji-mart/data": "^1.2.1",
|
|
"@emoji-mart/react": "^1.1.1",
|
|
"@hookform/resolvers": "^5.4.0",
|
|
"@radix-ui/react-alert-dialog": "^1.1.6",
|
|
"@radix-ui/react-avatar": "^1.1.3",
|
|
"@radix-ui/react-checkbox": "^1.1.4",
|
|
"@radix-ui/react-dialog": "^1.1.6",
|
|
"@radix-ui/react-dropdown-menu": "^2.1.6",
|
|
"@radix-ui/react-label": "^2.1.2",
|
|
"@radix-ui/react-radio-group": "^1.2.3",
|
|
"@radix-ui/react-scroll-area": "^1.2.3",
|
|
"@radix-ui/react-select": "^2.1.6",
|
|
"@radix-ui/react-separator": "^1.1.2",
|
|
"@radix-ui/react-slot": "^1.1.2",
|
|
"@radix-ui/react-switch": "^1.1.3",
|
|
"@radix-ui/react-tabs": "^1.1.3",
|
|
"@radix-ui/react-tooltip": "^1.1.8",
|
|
"@supabase/ssr": "^0.12.0",
|
|
"@supabase/supabase-js": "^2.108.2",
|
|
"@tanstack/react-table": "^8.20.6",
|
|
"autoprefixer": "^10.4.20",
|
|
"bcryptjs": "^3.0.3",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"dotenv": "^17.4.2",
|
|
"framer-motion": "^11.15.0",
|
|
"jose": "^6.2.3",
|
|
"lucide-react": "^0.468.0",
|
|
"next": "15.0.4",
|
|
"next-themes": "^0.4.4",
|
|
"nodemailer": "^9.0.1",
|
|
"pg": "^8.21.0",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-hook-form": "^7.54.2",
|
|
"recharts": "^2.15.0",
|
|
"socket.io": "^4.8.3",
|
|
"socket.io-client": "^4.8.3",
|
|
"sonner": "^1.7.4",
|
|
"tailwind-merge": "^2.6.0",
|
|
"vaul": "^1.1.2",
|
|
"zod": "^3.24.2"
|
|
},
|
|
"devDependencies": {
|
|
"@next/swc-win32-x64-msvc": "^15.0.4",
|
|
"@types/node": "20.19.43",
|
|
"@types/nodemailer": "8.0.1",
|
|
"@types/pg": "^8.20.0",
|
|
"@types/react": "18.3.31",
|
|
"@types/react-dom": "18.3.7",
|
|
"concurrently": "^10.0.3",
|
|
"devenv": "1.0.1",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "15.0.4",
|
|
"maildev": "^2.2.1",
|
|
"postcss": "^8.4.49",
|
|
"tailwindcss": "^3.4.17",
|
|
"typescript": "^5",
|
|
"vitest": "^1.6.1"
|
|
}
|
|
}
|