nifty_fifty_bank_nifty_NodeJSEntry point:
src/app.ts
Directory structure
src/
├── app.ts # Express + Socket.IO + cron bootstrap
├── env.ts # Environment variable loading
├── logger.ts # Winston logger
├── config/
│ ├── database/ # MongoDB connection
│ └── zerodha/ # Kite Connect client, token management
├── routes/ # Express route definitions
├── controllers/ # Request handlers and business logic
├── models/ # Mongoose schemas (10 models)
├── middlewares/ # Auth middleware
├── validators/ # Joi request validation
├── interfaces/ # TypeScript interfaces
├── enums/ # Role, page access, index type enums
├── sockets/ # Socket.IO manager and event wiring
├── emitters/ # EventEmitter bridges (order, market data, settings)
└── utils/
├── marketSessionManager.ts # Exchange session lifecycle
├── marketHours.ts # Trading hours per exchange
├── intervalManager.ts # setInterval registry
├── indexSettingGenerator.ts # Instrument sync
├── marketDataProvider.ts # Data provider abstraction
├── helper.utils.ts # Token, password, strike helpers
└── zerodha/ # Kite WebSocket, auto-login, events
Routes → controllers
| Route prefix | Route file | Controller |
|---|---|---|
/api/user | user.route.ts | user.controller.ts |
/api/indexSettings | indexSetting.route.ts | indexSetting.controller.ts |
/api/index | indexData.route.ts | indexData.controller.ts |
/api/zerodha | zerodha.route.ts | zerodha.controller.ts |
/api/setting | setting.route.ts | setting.controller.ts |
/api/order | order.route.ts | order.controller.ts |
/api/recurringOrder | recurringOrder.route.ts | recurringOrder.controller.ts |
/api/scheduleOrder | scheduleOrder.route.ts | scheduleOrder.controller.ts |
Controllers → models
| Controller | Primary models |
|---|---|
user.controller | User |
indexSetting.controller | AppSetting (IndexSetting) |
indexData.controller | IndexData |
zerodha.controller | Order, DummyOrder, Zerodha, AppSetting, Setting |
order.controller | Order, DummyOrder, RecurringOrder, AppSetting, Setting |
recurringOrder.controller | RecurringOrder, Order, DummyOrder, AppSetting, Setting |
scheduleOrder.controller | ScheduleOrder, Order, DummyOrder, AppSetting, Setting |
setting.controller | Setting |
index.controller | Index |
Real-time data flow
Zerodha WebSocket (KiteTicker)
→ zerodha-event.utils.ts (buildSnapshot)
→ Socket.IO emit ({index}TickData)
→ latestDataMap (in-memory)
→ IndexData MongoDB (persist)
→ RecurringOrderController (buy triggers)
→ ScheduleOrderController (sell triggers)
Key utility modules
| Module | Responsibility |
|---|---|
zerodha-event.utils.ts | WebSocket tick processing, snapshot building |
zerodhaPostLogin.ts | Post-OAuth startup: subscribe tokens, start streaming |
autoZerodhaLogin.ts | Headless TOTP login via Puppeteer |
intervalManager.ts | Register/stop named setInterval timers |
marketSessionManager.ts | Start/stop trading services per exchange session |
indexSettingGenerator.ts | Sync instruments, backfill option expiries |
resolveOptionsUnderlying.ts | Resolve SPOT vs FUTURES underlying |
segmentSettings.ts | Read segment-specific config from index setting |
Emitters
| Emitter | Events | Consumers |
|---|---|---|
order.emitter | Order lifecycle | Socket.IO clients |
marketData.emitter | Tick broadcasts | Socket manager |
indexSetting.emitter | Setting changes | Zerodha event processor |
userSetting.emitter | User pref changes | Socket manager |
Config / environment
Seeops/environment/backend for required environment variables. Critical vars: SECRET_KEY, MONGODB_URI, ZERODHA_API_KEY, ZERODHA_API_SECRET, PORT.