File size: 2,881 Bytes
c01955c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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;