learn
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.

FilePurpose
socket.jsThe whole realtime server plus its helpers.

Dependencies

LibraryVersion rangeWhy it is used here
dotenv^16.5.0First line of index.js.
Socket.io Redis adapter^8.3.0Attached to the io server in utils/socket.js when pub/sub are ready.
ioredis^5.11.1Presence hash plus the pub/sub pair in config/redis.js.
Socket.io^4.7.4Server, rooms, and event handlers in utils/socket.js.
cookie-parser^1.4.7Cookie parsing in index.js, read by authMiddleware.
cors^2.8.5Permissive CORS in index.js and utils/socket.js.
Express^5.1.0App, router mounting, and static uploads in index.js.
express-rate-limit^8.5.2Auth, connection, search, post, and job limiters in middleware/rateLimiter.js.
Mongoose^8.14.1All six models plus the database.js connector.
Cloudinary^1.41.3Configuration in config/cloudinary.js; upload targets in middleware/upload.js.
Multer^2.0.1Avatar, post, cover, and document uploaders in middleware/upload.js.
multer-storage-cloudinary^4.0.0Cloud storage engines in middleware/upload.js.
Nodemailer^9.0.3Admin plus confirmation mails in contactController.js.
bcryptjs^2.4.3Pre-save hash and password check in models/User.js.
better-authDeclared but not used in source^1.6.23Declared in both manifests but never imported in any source file; authentication is JWT plus bcrypt.
jsonwebtoken^9.0.2Token issue in userController and authController; verified in authMiddleware.
validator^13.11.0Field validation in models/User.js.

Dependencies as of commit cdef8af.

Backend utils folder
BrowserAPIRealtimeCacheDatabaseShareddurableephemeral

Talks to

Sources: backend/utils/socket.js (documented at commit cdef8af)

On this page