backend/
utils/
The Socket.io server.
One file owns realtime end to end. Sockets register a user id and join that id as a room, so any process can reach a user by id once the Redis adapter is attached. Presence is tracked twice: a local socket map for instant lookups and a Redis hash so other instances agree. Typing and status broadcasts are never stored; messages always are, with sent, delivered, and read states.
What it owns
- Socket setup: path, transports, heartbeats
- User registration, personal rooms, secret chat rooms
- Presence: local map plus the Redis hash, broadcast to connections
- Chat: send, deliver, read receipts, typing indicators
- The Redis adapter hookup for multi-instance events
Files
File list and purposes from the folder README.
| File | Purpose |
|---|---|
socket.js | The whole realtime server plus its helpers. |
Dependencies
| Library | Version range | Why it is used here |
|---|---|---|
| dotenv | ^16.5.0 | First line of index.js. |
| Socket.io Redis adapter | ^8.3.0 | Attached to the io server in utils/socket.js when pub/sub are ready. |
| ioredis | ^5.11.1 | Presence hash plus the pub/sub pair in config/redis.js. |
| Socket.io | ^4.7.4 | Server, rooms, and event handlers in utils/socket.js. |
| cookie-parser | ^1.4.7 | Cookie parsing in index.js, read by authMiddleware. |
| cors | ^2.8.5 | Permissive CORS in index.js and utils/socket.js. |
| Express | ^5.1.0 | App, router mounting, and static uploads in index.js. |
| express-rate-limit | ^8.5.2 | Auth, connection, search, post, and job limiters in middleware/rateLimiter.js. |
| Mongoose | ^8.14.1 | All six models plus the database.js connector. |
| Cloudinary | ^1.41.3 | Configuration in config/cloudinary.js; upload targets in middleware/upload.js. |
| Multer | ^2.0.1 | Avatar, post, cover, and document uploaders in middleware/upload.js. |
| multer-storage-cloudinary | ^4.0.0 | Cloud storage engines in middleware/upload.js. |
| Nodemailer | ^9.0.3 | Admin plus confirmation mails in contactController.js. |
| bcryptjs | ^2.4.3 | Pre-save hash and password check in models/User.js. |
| better-authDeclared but not used in source | ^1.6.23 | Declared in both manifests but never imported in any source file; authentication is JWT plus bcrypt. |
| jsonwebtoken | ^9.0.2 | Token issue in userController and authController; verified in authMiddleware. |
| validator | ^13.11.0 | Field validation in models/User.js. |
Dependencies as of commit cdef8af.
Laying out Backend utils folder…
BrowserAPIRealtimeCacheDatabaseShareddurableephemeral
Talks to
Sources: backend/utils/socket.js (documented at commit cdef8af)