Spaces:
Running
Running
| import { expressRepre,Vexpress } from "@vashuthegreat/vexpress"; | |
| import cors from "cors" | |
| import cookieParser from "cookie-parser"; | |
| import UserRouter from "./routes/user.routes.js" | |
| import connectdb from "./db/connectdb.js"; | |
| import TemplateRouter from "./routes/templates.routes.js"; | |
| import InterviewRouter from "./routes/interviews.routes.js"; | |
| import performanceRouter from "./routes/performance.routes.js" | |
| import questionRouter from "./routes/question.routes.js"; | |
| import CodingSchemaRouter from "./routes/coding.routes.js"; | |
| import StreamRouter from "./routes/stream.routes.js" | |
| import { Request, Response } from "express"; | |
| import { rateLimit } from 'express-rate-limit' | |
| import { RedisStore } from 'rate-limit-redis' | |
| import redisClient from "./utils/RedisClient.js" | |
| import logger from "./logger/create.logger.js" | |
| logger.info("Connecting to MongoDB..."); | |
| connectdb() | |
| const app=new Vexpress(); | |
| logger.info("Setting up documentation..."); | |
| app.setupDocs(); | |
| logger.info("Server is starting at http://localhost:8000") | |
| app.use(cors({ | |
| origin:['http://localhost:5173','http://localhost:5174','http://localhost:8080','*','http://10.226.207.207:8080','https://www.mlearner.tech','www.mlearner.tech'] | |
| ,credentials:true | |
| })); | |
| app.use(cookieParser()) | |
| // Implementing Token Bucket | |
| // bucker | |
| interface Limiter { | |
| windowMs: number; | |
| limit: number; | |
| standardHeaders: 'draft-6' | 'draft-7' | 'draft-8' | boolean; | |
| legacyHeaders: boolean; | |
| ipv6Subnet?: number; // Optional, defaults to 56 | |
| store?: any; // Use any here to avoid typing issues with RedisStore | |
| } | |
| // console.log(process.env) | |
| const limiter = rateLimit({ | |
| windowMs: Number(process.env.windowMs)* 60 * 1000, | |
| limit: Number(process.env.limit), | |
| standardHeaders: process.env.standardHeaders as 'draft-6' | 'draft-7' | 'draft-8' | boolean, | |
| legacyHeaders: process.env.legacyHeaders === 'true', | |
| ipv6Subnet: Number(process.env.ipv6Subnet), | |
| store: new RedisStore({ | |
| // @ts-expect-error - ioredis typing conflict with rate-limit-redis | |
| sendCommand: async (...args: string[]) => redisClient.call(args[0], ...args.slice(1)), | |
| }), | |
| } satisfies Limiter); | |
| // app.use(limiter) | |
| app.use(Vexpress.urlencoded({extended:true,limit:"16kb"}))// extended true bole to or obj ke under obj de pate h and ye url me jo data hota h usko deta h | |
| app.use(Vexpress.json({limit:"16kb"})) // asa no ho ki kitne bhi json bhej de | |
| app.use(Vexpress.static("public")) | |
| app.use("/api/user",UserRouter); | |
| app.use("/api/templates",TemplateRouter); | |
| app.use("/api/interview",InterviewRouter); | |
| app.use("/api/performance",performanceRouter); | |
| app.use("/api/question",questionRouter); | |
| app.use("/api/codingSchema",CodingSchemaRouter); | |
| app.use("/api/stream",StreamRouter) | |
| app.use("/",async (req:Request,res:Response)=>{ | |
| // await new Promise(resolve=>setTimeout(resolve,2000)) | |
| res.status(200).json({message:"Hello World"}) | |
| }) | |
| export default app; |