24850f5597cca24f331b2f531975c463f6e42eda
- Fix admin.tsx: move non-admin redirect from render body to useEffect to avoid Rules of Hooks violation causing React concurrent rendering error; add early return null guard after all hooks - Fix admin.tsx: coerce nullable app/service fields with ?? fallbacks (nameAr, nameEn, slug, iconName, route, color, sortOrder, price, isAvailable) - Add GET /api/users/directory endpoint (auth-only, returns safe fields: id, username, displayNameAr, displayNameEn, avatarUrl, isActive) so non-admin users can look up contacts for chat without hitting admin-only list - Update chat.tsx to use new /api/users/directory via useQuery instead of admin-only useListUsers; remove client-sent "join" Socket.IO event since server now auto-joins user room from session - Wire language toggle in home.tsx to call useUpdateLanguage mutation (PUT /api/auth/language) so preference persists to the database - Harden Socket.IO: export sessionMiddleware from app.ts; apply it via io.engine.use in index.ts so Socket.IO handshake reads express-session; add io.use middleware that rejects connections without a valid session userId; auto-join user room from session instead of trusting client-provided userId; verify conversation membership before joining conversation rooms - Fix Socket.IO CORS: use ALLOWED_ORIGINS env var (matches Express CORS) instead of hardcoded wildcard "*" All TypeScript checks pass; e2e tests confirm: login, language toggle, services, chat, notifications, admin CRUD, and non-admin redirect all work
Description
No description provided
Languages
TypeScript
69.4%
JavaScript
29%
CSS
0.6%
Shell
0.6%
Dockerfile
0.2%
Other
0.2%