HARISH20205 commited on
Commit
20b3d84
Β·
1 Parent(s): f04e56d
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ node_modules/
.hfignore ADDED
@@ -0,0 +1 @@
 
 
1
+ node_modules/
Dockerfile ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:18
2
+
3
+ RUN apt-get update && apt-get install -y python3 python3-pip && \
4
+ apt-get clean && rm -rf /var/lib/apt/lists/*
5
+
6
+ WORKDIR /app
7
+
8
+ COPY package*.json ./
9
+ RUN npm install
10
+
11
+ COPY . .
12
+
13
+ EXPOSE 7860
14
+
15
+ ENV PORT=7860
16
+
17
+ CMD ["python3", "app.py"]
app.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import subprocess
2
+ import os
3
+
4
+ # Define the port and Node.js command
5
+ port = os.getenv("PORT", 7860) # Default to 7860 if PORT is not set
6
+ node_command = ["node", "server.js"]
7
+
8
+ # Start the Node.js application
9
+ try:
10
+ print(f"Starting Node.js server on port {port}...")
11
+ subprocess.run(node_command, check=True)
12
+ except Exception as e:
13
+ print(f"Error running Node.js server: {e}")
config/db.js ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import mongoose from "mongoose";
2
+ import dotenv from "dotenv";
3
+
4
+ dotenv.config(); // Load environment variables
5
+
6
+ const connectDB = async () => {
7
+ try {
8
+ const mongo_uri = process.env.MONGODB_URI;
9
+
10
+ if (!mongo_uri) {
11
+ throw new Error("MongoDB URI is missing in .env file");
12
+ }
13
+
14
+ const conn = await mongoose.connect(mongo_uri);
15
+
16
+ console.log(`βœ… MongoDB Connected: ${conn.connection.host}`);
17
+ } catch (err) {
18
+ console.error(`❌ Couldn't connect to MongoDB: ${err.message}`);
19
+ process.exit(1);
20
+ }
21
+ };
22
+
23
+ export default connectDB;
config/dotenv.config.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import dotenv from "dotenv";
2
+
3
+ const loadEnvConfigOfMongodb = () => {
4
+ const envFile = `.env.${process.env.NODE_ENV || "development"}`;
5
+ dotenv.config({ path: envFile });
6
+
7
+ if (!process.env.MONGODB_URI) {
8
+ console.error(`[Dotenv] MongoDB URI is missing in ${envFile}`);
9
+ // process.exit(1);
10
+ }
11
+ };
12
+
13
+ export default loadEnvConfigOfMongodb;
config/passport.js ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import passport from "passport";
2
+ import { Strategy as GoogleStrategy } from "passport-google-oauth20";
3
+ import { Strategy as GitHubStrategy } from "passport-github2";
4
+ import dotenv from "dotenv"; // Load environment variables
5
+ import User from "../model/user.model.js"; // Ensure correct path
6
+ import { v4 as uuidv4 } from "uuid";
7
+
8
+ dotenv.config(); // Load .env variables
9
+
10
+ passport.use(
11
+ new GoogleStrategy(
12
+ {
13
+ clientID: process.env.GOOGLE_CLIENT_ID,
14
+ clientSecret: process.env.GOOGLE_CLIENT_SECRET,
15
+ callbackURL: process.env.GOOGLE_CALLBACK_URL,
16
+ scope: ["profile", "email"], // βœ… Correct Scopes
17
+ },
18
+ async (accessToken, refreshToken, profile, done) => {
19
+ try {
20
+ let user = await User.findOne({ email: profile.emails[0].value });
21
+
22
+ const userId = uuidv4();
23
+
24
+ if (!user) {
25
+ user = new User({
26
+ userId: userId,
27
+ name: profile.displayName,
28
+ email: profile.emails[0].value,
29
+ });
30
+ await user.save();
31
+ }
32
+ return done(null, user);
33
+ } catch (error) {
34
+ return done(error, null);
35
+ }
36
+ }
37
+ )
38
+ );
39
+
40
+
41
+ passport.use(
42
+ new GitHubStrategy(
43
+ {
44
+ clientID: process.env.GITHUB_CLIENT_ID,
45
+ clientSecret: process.env.GITHUB_CLIENT_SECRET,
46
+ callbackURL: process.env.GITHUB_CALLBACK_URL,
47
+ },
48
+ async (accessToken, refreshToken, profile, done) => {
49
+ try {
50
+ const emails = profile.emails || [];
51
+ const email = emails.length > 0 ? emails[0].value : null;
52
+ console.log(profile);
53
+ console.log(profile.displayName);
54
+
55
+ if(!email){
56
+ console.log("No emails found with this github account");
57
+ }
58
+
59
+ let user = await User.findOne({ email });
60
+
61
+ const userId = uuidv4();
62
+
63
+ if (!user) {
64
+ const newUser = new User({
65
+ userId : userId,
66
+ name: profile.displayName,
67
+ email: email,
68
+ password: null,
69
+ });
70
+ await newUser.save();
71
+ }
72
+ return done(null, user);
73
+ } catch (error) {
74
+ return done(error, null);
75
+ }
76
+ }
77
+ )
78
+ );
79
+
80
+ // βœ… Serialize & Deserialize user
81
+ passport.serializeUser((user, done) => {
82
+ done(null, user.id);
83
+ });
84
+
85
+ passport.deserializeUser(async (id, done) => {
86
+ try {
87
+ const user = await User.findById(id);
88
+ done(null, user);
89
+ } catch (error) {
90
+ done(error, null);
91
+ }
92
+ });
93
+
94
+ export default passport;
controllers/user.controller.js ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pkg from "express";
2
+ import User from "../model/user.model.js";
3
+ import jwt from "jsonwebtoken";
4
+ import bcrypt from "bcrypt";
5
+ import { v4 as uuidv4 } from "uuid";
6
+
7
+ const { Request, Response } = pkg;
8
+ // const GoogleStrategy = require("passport-google-oauth20").Strategy;
9
+ // const GithubStrategy = require("passport-github").Strategy;
10
+
11
+ const jwt_secret = process.env.JWT_SECRET || "defaultSecret";
12
+
13
+ export const userRegister = async (req, res) => {
14
+ const { name, email, password } = req.body;
15
+
16
+ try {
17
+ const existingUser = await User.findOne({ email });
18
+
19
+ if (existingUser) {
20
+ return res.status(400).json({ message: "User already exists" });
21
+ }
22
+
23
+ const userId = uuidv4();
24
+ const hashedPassword = await bcrypt.hash(password, 12);
25
+ const newUser = new User({ userId, name, email, password: hashedPassword });
26
+
27
+ await newUser.save();
28
+
29
+ const token = jwt.sign({ userId: newUser.userId, email }, jwt_secret, {
30
+ expiresIn: "1h",
31
+ });
32
+
33
+ res.status(201).json({ message: "User created successfully", token });
34
+ } catch (err) {
35
+ console.error("[UserController] Error during registration: ", err);
36
+ res.status(500).json({ message: "Internal server error" });
37
+ }
38
+ };
39
+
40
+ export const userLogin = async (req, res) => {
41
+ const { email, password } = req.body;
42
+
43
+ try {
44
+ const user = await User.findOne({ email });
45
+ if (!user) {
46
+ return res.status(400).json({ message: "Email not found" });
47
+ }
48
+
49
+ const validPassword = await bcrypt.compare(password, user.password);
50
+ if (!validPassword) {
51
+ return res.status(400).json({ message: "Incorrect password" });
52
+ }
53
+ const token = jwt.sign(
54
+ { userId: user.userId, email},
55
+ jwt_secret,
56
+ { expiresIn: "1hr" }
57
+ );
58
+ res.status(200).json({ message: "User Logged in successfully" });
59
+ } catch (error) {
60
+ console.error("[UserController] Error during login: ", error);
61
+ res.status(500).json({ message: "Internal server" });
62
+ }
63
+ };
middleware/auth.middleware.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import jwt from 'jsonwebtoken';
2
+ import {Request, Response, NextFunction} from 'express';
3
+
4
+ const jwt_secret = process.env.JWT_SECRET | "defaultSecret";
5
+
6
+ export const authMiddleware = (req, res, next) => {
7
+ const authHeader = res.headers.authorization;
8
+ if(authHeader){
9
+ const token = authHeader.split(' ')[1];
10
+ jwt.verify(token, jwt_secret, (err, user) => {
11
+ if(err){
12
+ return res.status(403).json({ message: "Token invalid" });
13
+ }
14
+ req.user = user;
15
+ next();
16
+ })
17
+ }else{
18
+ res.status(401).json({ message: "Access Denied." });
19
+ }
20
+ }
model/user.model.js ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import mongoose, { Document, Schema } from "mongoose";
2
+
3
+ // const UserSchema = new Schema<UserI>({
4
+ // userId : {type : String, required : true, unique : true},
5
+ // name : {type : String, required : true},
6
+ // email : {type : String, required : true, unique : true},
7
+ // password : {type : String, required : true},
8
+ // createdAt : {type : Date, default : Date.now}
9
+ // });
10
+
11
+ // const User = mongoose.model<UserI>('User',UserSchema);
12
+
13
+ // export default User;
14
+
15
+ // import mongoose from "mongoose";
16
+
17
+ const UserSchema = new mongoose.Schema({
18
+ userId: { type: String, required: true, unique: true },
19
+ name: { type: String, required: true },
20
+ email: { type: String, required: true, unique: true },
21
+ password: { type: String, required: false },
22
+ createdAt: { type: Date, default: Date.now },
23
+ });
24
+
25
+ const User = mongoose.model("User", UserSchema);
26
+
27
+ export default User;
package-lock.json ADDED
@@ -0,0 +1,2120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "server",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "dependencies": {
8
+ "bcrypt": "^5.1.1",
9
+ "cors": "^2.8.5",
10
+ "dotenv": "^16.4.7",
11
+ "express": "^4.21.2",
12
+ "express-session": "^1.18.1",
13
+ "jsonwebtoken": "^9.0.2",
14
+ "mongoose": "^8.8.3",
15
+ "passport": "^0.7.0",
16
+ "passport-github2": "^0.1.12",
17
+ "passport-google-oauth20": "^2.0.0",
18
+ "path": "^0.12.7",
19
+ "swagger-autogen": "^2.23.7",
20
+ "url": "^0.11.4",
21
+ "uuid": "^11.0.3"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^22.10.1"
25
+ }
26
+ },
27
+ "node_modules/@mapbox/node-pre-gyp": {
28
+ "version": "1.0.11",
29
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
30
+ "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
31
+ "license": "BSD-3-Clause",
32
+ "dependencies": {
33
+ "detect-libc": "^2.0.0",
34
+ "https-proxy-agent": "^5.0.0",
35
+ "make-dir": "^3.1.0",
36
+ "node-fetch": "^2.6.7",
37
+ "nopt": "^5.0.0",
38
+ "npmlog": "^5.0.1",
39
+ "rimraf": "^3.0.2",
40
+ "semver": "^7.3.5",
41
+ "tar": "^6.1.11"
42
+ },
43
+ "bin": {
44
+ "node-pre-gyp": "bin/node-pre-gyp"
45
+ }
46
+ },
47
+ "node_modules/@mongodb-js/saslprep": {
48
+ "version": "1.2.0",
49
+ "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.2.0.tgz",
50
+ "integrity": "sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==",
51
+ "license": "MIT",
52
+ "dependencies": {
53
+ "sparse-bitfield": "^3.0.3"
54
+ }
55
+ },
56
+ "node_modules/@types/node": {
57
+ "version": "22.13.10",
58
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
59
+ "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==",
60
+ "dev": true,
61
+ "license": "MIT",
62
+ "dependencies": {
63
+ "undici-types": "~6.20.0"
64
+ }
65
+ },
66
+ "node_modules/@types/webidl-conversions": {
67
+ "version": "7.0.3",
68
+ "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
69
+ "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==",
70
+ "license": "MIT"
71
+ },
72
+ "node_modules/@types/whatwg-url": {
73
+ "version": "11.0.5",
74
+ "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz",
75
+ "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==",
76
+ "license": "MIT",
77
+ "dependencies": {
78
+ "@types/webidl-conversions": "*"
79
+ }
80
+ },
81
+ "node_modules/abbrev": {
82
+ "version": "1.1.1",
83
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
84
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
85
+ "license": "ISC"
86
+ },
87
+ "node_modules/accepts": {
88
+ "version": "1.3.8",
89
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
90
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
91
+ "license": "MIT",
92
+ "dependencies": {
93
+ "mime-types": "~2.1.34",
94
+ "negotiator": "0.6.3"
95
+ },
96
+ "engines": {
97
+ "node": ">= 0.6"
98
+ }
99
+ },
100
+ "node_modules/acorn": {
101
+ "version": "7.4.1",
102
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
103
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
104
+ "license": "MIT",
105
+ "bin": {
106
+ "acorn": "bin/acorn"
107
+ },
108
+ "engines": {
109
+ "node": ">=0.4.0"
110
+ }
111
+ },
112
+ "node_modules/agent-base": {
113
+ "version": "6.0.2",
114
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
115
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
116
+ "license": "MIT",
117
+ "dependencies": {
118
+ "debug": "4"
119
+ },
120
+ "engines": {
121
+ "node": ">= 6.0.0"
122
+ }
123
+ },
124
+ "node_modules/agent-base/node_modules/debug": {
125
+ "version": "4.4.0",
126
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
127
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
128
+ "license": "MIT",
129
+ "dependencies": {
130
+ "ms": "^2.1.3"
131
+ },
132
+ "engines": {
133
+ "node": ">=6.0"
134
+ },
135
+ "peerDependenciesMeta": {
136
+ "supports-color": {
137
+ "optional": true
138
+ }
139
+ }
140
+ },
141
+ "node_modules/agent-base/node_modules/ms": {
142
+ "version": "2.1.3",
143
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
144
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
145
+ "license": "MIT"
146
+ },
147
+ "node_modules/ansi-regex": {
148
+ "version": "5.0.1",
149
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
150
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
151
+ "license": "MIT",
152
+ "engines": {
153
+ "node": ">=8"
154
+ }
155
+ },
156
+ "node_modules/aproba": {
157
+ "version": "2.0.0",
158
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
159
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
160
+ "license": "ISC"
161
+ },
162
+ "node_modules/are-we-there-yet": {
163
+ "version": "2.0.0",
164
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
165
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
166
+ "deprecated": "This package is no longer supported.",
167
+ "license": "ISC",
168
+ "dependencies": {
169
+ "delegates": "^1.0.0",
170
+ "readable-stream": "^3.6.0"
171
+ },
172
+ "engines": {
173
+ "node": ">=10"
174
+ }
175
+ },
176
+ "node_modules/array-flatten": {
177
+ "version": "1.1.1",
178
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
179
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
180
+ "license": "MIT"
181
+ },
182
+ "node_modules/balanced-match": {
183
+ "version": "1.0.2",
184
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
185
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
186
+ "license": "MIT"
187
+ },
188
+ "node_modules/base64url": {
189
+ "version": "3.0.1",
190
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
191
+ "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==",
192
+ "license": "MIT",
193
+ "engines": {
194
+ "node": ">=6.0.0"
195
+ }
196
+ },
197
+ "node_modules/bcrypt": {
198
+ "version": "5.1.1",
199
+ "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz",
200
+ "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==",
201
+ "hasInstallScript": true,
202
+ "license": "MIT",
203
+ "dependencies": {
204
+ "@mapbox/node-pre-gyp": "^1.0.11",
205
+ "node-addon-api": "^5.0.0"
206
+ },
207
+ "engines": {
208
+ "node": ">= 10.0.0"
209
+ }
210
+ },
211
+ "node_modules/body-parser": {
212
+ "version": "1.20.3",
213
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
214
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
215
+ "license": "MIT",
216
+ "dependencies": {
217
+ "bytes": "3.1.2",
218
+ "content-type": "~1.0.5",
219
+ "debug": "2.6.9",
220
+ "depd": "2.0.0",
221
+ "destroy": "1.2.0",
222
+ "http-errors": "2.0.0",
223
+ "iconv-lite": "0.4.24",
224
+ "on-finished": "2.4.1",
225
+ "qs": "6.13.0",
226
+ "raw-body": "2.5.2",
227
+ "type-is": "~1.6.18",
228
+ "unpipe": "1.0.0"
229
+ },
230
+ "engines": {
231
+ "node": ">= 0.8",
232
+ "npm": "1.2.8000 || >= 1.4.16"
233
+ }
234
+ },
235
+ "node_modules/brace-expansion": {
236
+ "version": "1.1.11",
237
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
238
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
239
+ "license": "MIT",
240
+ "dependencies": {
241
+ "balanced-match": "^1.0.0",
242
+ "concat-map": "0.0.1"
243
+ }
244
+ },
245
+ "node_modules/bson": {
246
+ "version": "6.10.3",
247
+ "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.3.tgz",
248
+ "integrity": "sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==",
249
+ "license": "Apache-2.0",
250
+ "engines": {
251
+ "node": ">=16.20.1"
252
+ }
253
+ },
254
+ "node_modules/buffer-equal-constant-time": {
255
+ "version": "1.0.1",
256
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
257
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
258
+ "license": "BSD-3-Clause"
259
+ },
260
+ "node_modules/bytes": {
261
+ "version": "3.1.2",
262
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
263
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
264
+ "license": "MIT",
265
+ "engines": {
266
+ "node": ">= 0.8"
267
+ }
268
+ },
269
+ "node_modules/call-bind-apply-helpers": {
270
+ "version": "1.0.2",
271
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
272
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
273
+ "license": "MIT",
274
+ "dependencies": {
275
+ "es-errors": "^1.3.0",
276
+ "function-bind": "^1.1.2"
277
+ },
278
+ "engines": {
279
+ "node": ">= 0.4"
280
+ }
281
+ },
282
+ "node_modules/call-bound": {
283
+ "version": "1.0.4",
284
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
285
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
286
+ "license": "MIT",
287
+ "dependencies": {
288
+ "call-bind-apply-helpers": "^1.0.2",
289
+ "get-intrinsic": "^1.3.0"
290
+ },
291
+ "engines": {
292
+ "node": ">= 0.4"
293
+ },
294
+ "funding": {
295
+ "url": "https://github.com/sponsors/ljharb"
296
+ }
297
+ },
298
+ "node_modules/chownr": {
299
+ "version": "2.0.0",
300
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
301
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
302
+ "license": "ISC",
303
+ "engines": {
304
+ "node": ">=10"
305
+ }
306
+ },
307
+ "node_modules/color-support": {
308
+ "version": "1.1.3",
309
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
310
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
311
+ "license": "ISC",
312
+ "bin": {
313
+ "color-support": "bin.js"
314
+ }
315
+ },
316
+ "node_modules/concat-map": {
317
+ "version": "0.0.1",
318
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
319
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
320
+ "license": "MIT"
321
+ },
322
+ "node_modules/console-control-strings": {
323
+ "version": "1.1.0",
324
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
325
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
326
+ "license": "ISC"
327
+ },
328
+ "node_modules/content-disposition": {
329
+ "version": "0.5.4",
330
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
331
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
332
+ "license": "MIT",
333
+ "dependencies": {
334
+ "safe-buffer": "5.2.1"
335
+ },
336
+ "engines": {
337
+ "node": ">= 0.6"
338
+ }
339
+ },
340
+ "node_modules/content-type": {
341
+ "version": "1.0.5",
342
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
343
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
344
+ "license": "MIT",
345
+ "engines": {
346
+ "node": ">= 0.6"
347
+ }
348
+ },
349
+ "node_modules/cookie": {
350
+ "version": "0.7.1",
351
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
352
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
353
+ "license": "MIT",
354
+ "engines": {
355
+ "node": ">= 0.6"
356
+ }
357
+ },
358
+ "node_modules/cookie-signature": {
359
+ "version": "1.0.6",
360
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
361
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
362
+ "license": "MIT"
363
+ },
364
+ "node_modules/cors": {
365
+ "version": "2.8.5",
366
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
367
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
368
+ "license": "MIT",
369
+ "dependencies": {
370
+ "object-assign": "^4",
371
+ "vary": "^1"
372
+ },
373
+ "engines": {
374
+ "node": ">= 0.10"
375
+ }
376
+ },
377
+ "node_modules/debug": {
378
+ "version": "2.6.9",
379
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
380
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
381
+ "license": "MIT",
382
+ "dependencies": {
383
+ "ms": "2.0.0"
384
+ }
385
+ },
386
+ "node_modules/deepmerge": {
387
+ "version": "4.3.1",
388
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
389
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
390
+ "license": "MIT",
391
+ "engines": {
392
+ "node": ">=0.10.0"
393
+ }
394
+ },
395
+ "node_modules/delegates": {
396
+ "version": "1.0.0",
397
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
398
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
399
+ "license": "MIT"
400
+ },
401
+ "node_modules/depd": {
402
+ "version": "2.0.0",
403
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
404
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
405
+ "license": "MIT",
406
+ "engines": {
407
+ "node": ">= 0.8"
408
+ }
409
+ },
410
+ "node_modules/destroy": {
411
+ "version": "1.2.0",
412
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
413
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
414
+ "license": "MIT",
415
+ "engines": {
416
+ "node": ">= 0.8",
417
+ "npm": "1.2.8000 || >= 1.4.16"
418
+ }
419
+ },
420
+ "node_modules/detect-libc": {
421
+ "version": "2.0.3",
422
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
423
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
424
+ "license": "Apache-2.0",
425
+ "engines": {
426
+ "node": ">=8"
427
+ }
428
+ },
429
+ "node_modules/dotenv": {
430
+ "version": "16.4.7",
431
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
432
+ "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
433
+ "license": "BSD-2-Clause",
434
+ "engines": {
435
+ "node": ">=12"
436
+ },
437
+ "funding": {
438
+ "url": "https://dotenvx.com"
439
+ }
440
+ },
441
+ "node_modules/dunder-proto": {
442
+ "version": "1.0.1",
443
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
444
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
445
+ "license": "MIT",
446
+ "dependencies": {
447
+ "call-bind-apply-helpers": "^1.0.1",
448
+ "es-errors": "^1.3.0",
449
+ "gopd": "^1.2.0"
450
+ },
451
+ "engines": {
452
+ "node": ">= 0.4"
453
+ }
454
+ },
455
+ "node_modules/ecdsa-sig-formatter": {
456
+ "version": "1.0.11",
457
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
458
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
459
+ "license": "Apache-2.0",
460
+ "dependencies": {
461
+ "safe-buffer": "^5.0.1"
462
+ }
463
+ },
464
+ "node_modules/ee-first": {
465
+ "version": "1.1.1",
466
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
467
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
468
+ "license": "MIT"
469
+ },
470
+ "node_modules/emoji-regex": {
471
+ "version": "8.0.0",
472
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
473
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
474
+ "license": "MIT"
475
+ },
476
+ "node_modules/encodeurl": {
477
+ "version": "2.0.0",
478
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
479
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
480
+ "license": "MIT",
481
+ "engines": {
482
+ "node": ">= 0.8"
483
+ }
484
+ },
485
+ "node_modules/es-define-property": {
486
+ "version": "1.0.1",
487
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
488
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
489
+ "license": "MIT",
490
+ "engines": {
491
+ "node": ">= 0.4"
492
+ }
493
+ },
494
+ "node_modules/es-errors": {
495
+ "version": "1.3.0",
496
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
497
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
498
+ "license": "MIT",
499
+ "engines": {
500
+ "node": ">= 0.4"
501
+ }
502
+ },
503
+ "node_modules/es-object-atoms": {
504
+ "version": "1.1.1",
505
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
506
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
507
+ "license": "MIT",
508
+ "dependencies": {
509
+ "es-errors": "^1.3.0"
510
+ },
511
+ "engines": {
512
+ "node": ">= 0.4"
513
+ }
514
+ },
515
+ "node_modules/escape-html": {
516
+ "version": "1.0.3",
517
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
518
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
519
+ "license": "MIT"
520
+ },
521
+ "node_modules/etag": {
522
+ "version": "1.8.1",
523
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
524
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
525
+ "license": "MIT",
526
+ "engines": {
527
+ "node": ">= 0.6"
528
+ }
529
+ },
530
+ "node_modules/express": {
531
+ "version": "4.21.2",
532
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
533
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
534
+ "license": "MIT",
535
+ "dependencies": {
536
+ "accepts": "~1.3.8",
537
+ "array-flatten": "1.1.1",
538
+ "body-parser": "1.20.3",
539
+ "content-disposition": "0.5.4",
540
+ "content-type": "~1.0.4",
541
+ "cookie": "0.7.1",
542
+ "cookie-signature": "1.0.6",
543
+ "debug": "2.6.9",
544
+ "depd": "2.0.0",
545
+ "encodeurl": "~2.0.0",
546
+ "escape-html": "~1.0.3",
547
+ "etag": "~1.8.1",
548
+ "finalhandler": "1.3.1",
549
+ "fresh": "0.5.2",
550
+ "http-errors": "2.0.0",
551
+ "merge-descriptors": "1.0.3",
552
+ "methods": "~1.1.2",
553
+ "on-finished": "2.4.1",
554
+ "parseurl": "~1.3.3",
555
+ "path-to-regexp": "0.1.12",
556
+ "proxy-addr": "~2.0.7",
557
+ "qs": "6.13.0",
558
+ "range-parser": "~1.2.1",
559
+ "safe-buffer": "5.2.1",
560
+ "send": "0.19.0",
561
+ "serve-static": "1.16.2",
562
+ "setprototypeof": "1.2.0",
563
+ "statuses": "2.0.1",
564
+ "type-is": "~1.6.18",
565
+ "utils-merge": "1.0.1",
566
+ "vary": "~1.1.2"
567
+ },
568
+ "engines": {
569
+ "node": ">= 0.10.0"
570
+ },
571
+ "funding": {
572
+ "type": "opencollective",
573
+ "url": "https://opencollective.com/express"
574
+ }
575
+ },
576
+ "node_modules/express-session": {
577
+ "version": "1.18.1",
578
+ "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz",
579
+ "integrity": "sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==",
580
+ "license": "MIT",
581
+ "dependencies": {
582
+ "cookie": "0.7.2",
583
+ "cookie-signature": "1.0.7",
584
+ "debug": "2.6.9",
585
+ "depd": "~2.0.0",
586
+ "on-headers": "~1.0.2",
587
+ "parseurl": "~1.3.3",
588
+ "safe-buffer": "5.2.1",
589
+ "uid-safe": "~2.1.5"
590
+ },
591
+ "engines": {
592
+ "node": ">= 0.8.0"
593
+ }
594
+ },
595
+ "node_modules/express-session/node_modules/cookie": {
596
+ "version": "0.7.2",
597
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
598
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
599
+ "license": "MIT",
600
+ "engines": {
601
+ "node": ">= 0.6"
602
+ }
603
+ },
604
+ "node_modules/express-session/node_modules/cookie-signature": {
605
+ "version": "1.0.7",
606
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
607
+ "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
608
+ "license": "MIT"
609
+ },
610
+ "node_modules/finalhandler": {
611
+ "version": "1.3.1",
612
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
613
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
614
+ "license": "MIT",
615
+ "dependencies": {
616
+ "debug": "2.6.9",
617
+ "encodeurl": "~2.0.0",
618
+ "escape-html": "~1.0.3",
619
+ "on-finished": "2.4.1",
620
+ "parseurl": "~1.3.3",
621
+ "statuses": "2.0.1",
622
+ "unpipe": "~1.0.0"
623
+ },
624
+ "engines": {
625
+ "node": ">= 0.8"
626
+ }
627
+ },
628
+ "node_modules/forwarded": {
629
+ "version": "0.2.0",
630
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
631
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
632
+ "license": "MIT",
633
+ "engines": {
634
+ "node": ">= 0.6"
635
+ }
636
+ },
637
+ "node_modules/fresh": {
638
+ "version": "0.5.2",
639
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
640
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
641
+ "license": "MIT",
642
+ "engines": {
643
+ "node": ">= 0.6"
644
+ }
645
+ },
646
+ "node_modules/fs-minipass": {
647
+ "version": "2.1.0",
648
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
649
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
650
+ "license": "ISC",
651
+ "dependencies": {
652
+ "minipass": "^3.0.0"
653
+ },
654
+ "engines": {
655
+ "node": ">= 8"
656
+ }
657
+ },
658
+ "node_modules/fs-minipass/node_modules/minipass": {
659
+ "version": "3.3.6",
660
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
661
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
662
+ "license": "ISC",
663
+ "dependencies": {
664
+ "yallist": "^4.0.0"
665
+ },
666
+ "engines": {
667
+ "node": ">=8"
668
+ }
669
+ },
670
+ "node_modules/fs.realpath": {
671
+ "version": "1.0.0",
672
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
673
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
674
+ "license": "ISC"
675
+ },
676
+ "node_modules/function-bind": {
677
+ "version": "1.1.2",
678
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
679
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
680
+ "license": "MIT",
681
+ "funding": {
682
+ "url": "https://github.com/sponsors/ljharb"
683
+ }
684
+ },
685
+ "node_modules/gauge": {
686
+ "version": "3.0.2",
687
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
688
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
689
+ "deprecated": "This package is no longer supported.",
690
+ "license": "ISC",
691
+ "dependencies": {
692
+ "aproba": "^1.0.3 || ^2.0.0",
693
+ "color-support": "^1.1.2",
694
+ "console-control-strings": "^1.0.0",
695
+ "has-unicode": "^2.0.1",
696
+ "object-assign": "^4.1.1",
697
+ "signal-exit": "^3.0.0",
698
+ "string-width": "^4.2.3",
699
+ "strip-ansi": "^6.0.1",
700
+ "wide-align": "^1.1.2"
701
+ },
702
+ "engines": {
703
+ "node": ">=10"
704
+ }
705
+ },
706
+ "node_modules/get-intrinsic": {
707
+ "version": "1.3.0",
708
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
709
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
710
+ "license": "MIT",
711
+ "dependencies": {
712
+ "call-bind-apply-helpers": "^1.0.2",
713
+ "es-define-property": "^1.0.1",
714
+ "es-errors": "^1.3.0",
715
+ "es-object-atoms": "^1.1.1",
716
+ "function-bind": "^1.1.2",
717
+ "get-proto": "^1.0.1",
718
+ "gopd": "^1.2.0",
719
+ "has-symbols": "^1.1.0",
720
+ "hasown": "^2.0.2",
721
+ "math-intrinsics": "^1.1.0"
722
+ },
723
+ "engines": {
724
+ "node": ">= 0.4"
725
+ },
726
+ "funding": {
727
+ "url": "https://github.com/sponsors/ljharb"
728
+ }
729
+ },
730
+ "node_modules/get-proto": {
731
+ "version": "1.0.1",
732
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
733
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
734
+ "license": "MIT",
735
+ "dependencies": {
736
+ "dunder-proto": "^1.0.1",
737
+ "es-object-atoms": "^1.0.0"
738
+ },
739
+ "engines": {
740
+ "node": ">= 0.4"
741
+ }
742
+ },
743
+ "node_modules/glob": {
744
+ "version": "7.2.3",
745
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
746
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
747
+ "deprecated": "Glob versions prior to v9 are no longer supported",
748
+ "license": "ISC",
749
+ "dependencies": {
750
+ "fs.realpath": "^1.0.0",
751
+ "inflight": "^1.0.4",
752
+ "inherits": "2",
753
+ "minimatch": "^3.1.1",
754
+ "once": "^1.3.0",
755
+ "path-is-absolute": "^1.0.0"
756
+ },
757
+ "engines": {
758
+ "node": "*"
759
+ },
760
+ "funding": {
761
+ "url": "https://github.com/sponsors/isaacs"
762
+ }
763
+ },
764
+ "node_modules/gopd": {
765
+ "version": "1.2.0",
766
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
767
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
768
+ "license": "MIT",
769
+ "engines": {
770
+ "node": ">= 0.4"
771
+ },
772
+ "funding": {
773
+ "url": "https://github.com/sponsors/ljharb"
774
+ }
775
+ },
776
+ "node_modules/has-symbols": {
777
+ "version": "1.1.0",
778
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
779
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
780
+ "license": "MIT",
781
+ "engines": {
782
+ "node": ">= 0.4"
783
+ },
784
+ "funding": {
785
+ "url": "https://github.com/sponsors/ljharb"
786
+ }
787
+ },
788
+ "node_modules/has-unicode": {
789
+ "version": "2.0.1",
790
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
791
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
792
+ "license": "ISC"
793
+ },
794
+ "node_modules/hasown": {
795
+ "version": "2.0.2",
796
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
797
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
798
+ "license": "MIT",
799
+ "dependencies": {
800
+ "function-bind": "^1.1.2"
801
+ },
802
+ "engines": {
803
+ "node": ">= 0.4"
804
+ }
805
+ },
806
+ "node_modules/http-errors": {
807
+ "version": "2.0.0",
808
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
809
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
810
+ "license": "MIT",
811
+ "dependencies": {
812
+ "depd": "2.0.0",
813
+ "inherits": "2.0.4",
814
+ "setprototypeof": "1.2.0",
815
+ "statuses": "2.0.1",
816
+ "toidentifier": "1.0.1"
817
+ },
818
+ "engines": {
819
+ "node": ">= 0.8"
820
+ }
821
+ },
822
+ "node_modules/https-proxy-agent": {
823
+ "version": "5.0.1",
824
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
825
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
826
+ "license": "MIT",
827
+ "dependencies": {
828
+ "agent-base": "6",
829
+ "debug": "4"
830
+ },
831
+ "engines": {
832
+ "node": ">= 6"
833
+ }
834
+ },
835
+ "node_modules/https-proxy-agent/node_modules/debug": {
836
+ "version": "4.4.0",
837
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
838
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
839
+ "license": "MIT",
840
+ "dependencies": {
841
+ "ms": "^2.1.3"
842
+ },
843
+ "engines": {
844
+ "node": ">=6.0"
845
+ },
846
+ "peerDependenciesMeta": {
847
+ "supports-color": {
848
+ "optional": true
849
+ }
850
+ }
851
+ },
852
+ "node_modules/https-proxy-agent/node_modules/ms": {
853
+ "version": "2.1.3",
854
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
855
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
856
+ "license": "MIT"
857
+ },
858
+ "node_modules/iconv-lite": {
859
+ "version": "0.4.24",
860
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
861
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
862
+ "license": "MIT",
863
+ "dependencies": {
864
+ "safer-buffer": ">= 2.1.2 < 3"
865
+ },
866
+ "engines": {
867
+ "node": ">=0.10.0"
868
+ }
869
+ },
870
+ "node_modules/inflight": {
871
+ "version": "1.0.6",
872
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
873
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
874
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
875
+ "license": "ISC",
876
+ "dependencies": {
877
+ "once": "^1.3.0",
878
+ "wrappy": "1"
879
+ }
880
+ },
881
+ "node_modules/inherits": {
882
+ "version": "2.0.4",
883
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
884
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
885
+ "license": "ISC"
886
+ },
887
+ "node_modules/ipaddr.js": {
888
+ "version": "1.9.1",
889
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
890
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
891
+ "license": "MIT",
892
+ "engines": {
893
+ "node": ">= 0.10"
894
+ }
895
+ },
896
+ "node_modules/is-fullwidth-code-point": {
897
+ "version": "3.0.0",
898
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
899
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
900
+ "license": "MIT",
901
+ "engines": {
902
+ "node": ">=8"
903
+ }
904
+ },
905
+ "node_modules/json5": {
906
+ "version": "2.2.3",
907
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
908
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
909
+ "license": "MIT",
910
+ "bin": {
911
+ "json5": "lib/cli.js"
912
+ },
913
+ "engines": {
914
+ "node": ">=6"
915
+ }
916
+ },
917
+ "node_modules/jsonwebtoken": {
918
+ "version": "9.0.2",
919
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
920
+ "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
921
+ "license": "MIT",
922
+ "dependencies": {
923
+ "jws": "^3.2.2",
924
+ "lodash.includes": "^4.3.0",
925
+ "lodash.isboolean": "^3.0.3",
926
+ "lodash.isinteger": "^4.0.4",
927
+ "lodash.isnumber": "^3.0.3",
928
+ "lodash.isplainobject": "^4.0.6",
929
+ "lodash.isstring": "^4.0.1",
930
+ "lodash.once": "^4.0.0",
931
+ "ms": "^2.1.1",
932
+ "semver": "^7.5.4"
933
+ },
934
+ "engines": {
935
+ "node": ">=12",
936
+ "npm": ">=6"
937
+ }
938
+ },
939
+ "node_modules/jsonwebtoken/node_modules/ms": {
940
+ "version": "2.1.3",
941
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
942
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
943
+ "license": "MIT"
944
+ },
945
+ "node_modules/jwa": {
946
+ "version": "1.4.1",
947
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
948
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
949
+ "license": "MIT",
950
+ "dependencies": {
951
+ "buffer-equal-constant-time": "1.0.1",
952
+ "ecdsa-sig-formatter": "1.0.11",
953
+ "safe-buffer": "^5.0.1"
954
+ }
955
+ },
956
+ "node_modules/jws": {
957
+ "version": "3.2.2",
958
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
959
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
960
+ "license": "MIT",
961
+ "dependencies": {
962
+ "jwa": "^1.4.1",
963
+ "safe-buffer": "^5.0.1"
964
+ }
965
+ },
966
+ "node_modules/kareem": {
967
+ "version": "2.6.3",
968
+ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz",
969
+ "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==",
970
+ "license": "Apache-2.0",
971
+ "engines": {
972
+ "node": ">=12.0.0"
973
+ }
974
+ },
975
+ "node_modules/lodash.includes": {
976
+ "version": "4.3.0",
977
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
978
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
979
+ "license": "MIT"
980
+ },
981
+ "node_modules/lodash.isboolean": {
982
+ "version": "3.0.3",
983
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
984
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
985
+ "license": "MIT"
986
+ },
987
+ "node_modules/lodash.isinteger": {
988
+ "version": "4.0.4",
989
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
990
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
991
+ "license": "MIT"
992
+ },
993
+ "node_modules/lodash.isnumber": {
994
+ "version": "3.0.3",
995
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
996
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
997
+ "license": "MIT"
998
+ },
999
+ "node_modules/lodash.isplainobject": {
1000
+ "version": "4.0.6",
1001
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
1002
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
1003
+ "license": "MIT"
1004
+ },
1005
+ "node_modules/lodash.isstring": {
1006
+ "version": "4.0.1",
1007
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
1008
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
1009
+ "license": "MIT"
1010
+ },
1011
+ "node_modules/lodash.once": {
1012
+ "version": "4.1.1",
1013
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
1014
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
1015
+ "license": "MIT"
1016
+ },
1017
+ "node_modules/make-dir": {
1018
+ "version": "3.1.0",
1019
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1020
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1021
+ "license": "MIT",
1022
+ "dependencies": {
1023
+ "semver": "^6.0.0"
1024
+ },
1025
+ "engines": {
1026
+ "node": ">=8"
1027
+ },
1028
+ "funding": {
1029
+ "url": "https://github.com/sponsors/sindresorhus"
1030
+ }
1031
+ },
1032
+ "node_modules/make-dir/node_modules/semver": {
1033
+ "version": "6.3.1",
1034
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
1035
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
1036
+ "license": "ISC",
1037
+ "bin": {
1038
+ "semver": "bin/semver.js"
1039
+ }
1040
+ },
1041
+ "node_modules/math-intrinsics": {
1042
+ "version": "1.1.0",
1043
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
1044
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
1045
+ "license": "MIT",
1046
+ "engines": {
1047
+ "node": ">= 0.4"
1048
+ }
1049
+ },
1050
+ "node_modules/media-typer": {
1051
+ "version": "0.3.0",
1052
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1053
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
1054
+ "license": "MIT",
1055
+ "engines": {
1056
+ "node": ">= 0.6"
1057
+ }
1058
+ },
1059
+ "node_modules/memory-pager": {
1060
+ "version": "1.5.0",
1061
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
1062
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
1063
+ "license": "MIT"
1064
+ },
1065
+ "node_modules/merge-descriptors": {
1066
+ "version": "1.0.3",
1067
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
1068
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
1069
+ "license": "MIT",
1070
+ "funding": {
1071
+ "url": "https://github.com/sponsors/sindresorhus"
1072
+ }
1073
+ },
1074
+ "node_modules/methods": {
1075
+ "version": "1.1.2",
1076
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1077
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
1078
+ "license": "MIT",
1079
+ "engines": {
1080
+ "node": ">= 0.6"
1081
+ }
1082
+ },
1083
+ "node_modules/mime": {
1084
+ "version": "1.6.0",
1085
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1086
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1087
+ "license": "MIT",
1088
+ "bin": {
1089
+ "mime": "cli.js"
1090
+ },
1091
+ "engines": {
1092
+ "node": ">=4"
1093
+ }
1094
+ },
1095
+ "node_modules/mime-db": {
1096
+ "version": "1.52.0",
1097
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1098
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1099
+ "license": "MIT",
1100
+ "engines": {
1101
+ "node": ">= 0.6"
1102
+ }
1103
+ },
1104
+ "node_modules/mime-types": {
1105
+ "version": "2.1.35",
1106
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1107
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1108
+ "license": "MIT",
1109
+ "dependencies": {
1110
+ "mime-db": "1.52.0"
1111
+ },
1112
+ "engines": {
1113
+ "node": ">= 0.6"
1114
+ }
1115
+ },
1116
+ "node_modules/minimatch": {
1117
+ "version": "3.1.2",
1118
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
1119
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
1120
+ "license": "ISC",
1121
+ "dependencies": {
1122
+ "brace-expansion": "^1.1.7"
1123
+ },
1124
+ "engines": {
1125
+ "node": "*"
1126
+ }
1127
+ },
1128
+ "node_modules/minipass": {
1129
+ "version": "5.0.0",
1130
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
1131
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
1132
+ "license": "ISC",
1133
+ "engines": {
1134
+ "node": ">=8"
1135
+ }
1136
+ },
1137
+ "node_modules/minizlib": {
1138
+ "version": "2.1.2",
1139
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
1140
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
1141
+ "license": "MIT",
1142
+ "dependencies": {
1143
+ "minipass": "^3.0.0",
1144
+ "yallist": "^4.0.0"
1145
+ },
1146
+ "engines": {
1147
+ "node": ">= 8"
1148
+ }
1149
+ },
1150
+ "node_modules/minizlib/node_modules/minipass": {
1151
+ "version": "3.3.6",
1152
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
1153
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
1154
+ "license": "ISC",
1155
+ "dependencies": {
1156
+ "yallist": "^4.0.0"
1157
+ },
1158
+ "engines": {
1159
+ "node": ">=8"
1160
+ }
1161
+ },
1162
+ "node_modules/mkdirp": {
1163
+ "version": "1.0.4",
1164
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1165
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
1166
+ "license": "MIT",
1167
+ "bin": {
1168
+ "mkdirp": "bin/cmd.js"
1169
+ },
1170
+ "engines": {
1171
+ "node": ">=10"
1172
+ }
1173
+ },
1174
+ "node_modules/mongodb": {
1175
+ "version": "6.14.2",
1176
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.14.2.tgz",
1177
+ "integrity": "sha512-kMEHNo0F3P6QKDq17zcDuPeaywK/YaJVCEQRzPF3TOM/Bl9MFg64YE5Tu7ifj37qZJMhwU1tl2Ioivws5gRG5Q==",
1178
+ "license": "Apache-2.0",
1179
+ "dependencies": {
1180
+ "@mongodb-js/saslprep": "^1.1.9",
1181
+ "bson": "^6.10.3",
1182
+ "mongodb-connection-string-url": "^3.0.0"
1183
+ },
1184
+ "engines": {
1185
+ "node": ">=16.20.1"
1186
+ },
1187
+ "peerDependencies": {
1188
+ "@aws-sdk/credential-providers": "^3.188.0",
1189
+ "@mongodb-js/zstd": "^1.1.0 || ^2.0.0",
1190
+ "gcp-metadata": "^5.2.0",
1191
+ "kerberos": "^2.0.1",
1192
+ "mongodb-client-encryption": ">=6.0.0 <7",
1193
+ "snappy": "^7.2.2",
1194
+ "socks": "^2.7.1"
1195
+ },
1196
+ "peerDependenciesMeta": {
1197
+ "@aws-sdk/credential-providers": {
1198
+ "optional": true
1199
+ },
1200
+ "@mongodb-js/zstd": {
1201
+ "optional": true
1202
+ },
1203
+ "gcp-metadata": {
1204
+ "optional": true
1205
+ },
1206
+ "kerberos": {
1207
+ "optional": true
1208
+ },
1209
+ "mongodb-client-encryption": {
1210
+ "optional": true
1211
+ },
1212
+ "snappy": {
1213
+ "optional": true
1214
+ },
1215
+ "socks": {
1216
+ "optional": true
1217
+ }
1218
+ }
1219
+ },
1220
+ "node_modules/mongodb-connection-string-url": {
1221
+ "version": "3.0.2",
1222
+ "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz",
1223
+ "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==",
1224
+ "license": "Apache-2.0",
1225
+ "dependencies": {
1226
+ "@types/whatwg-url": "^11.0.2",
1227
+ "whatwg-url": "^14.1.0 || ^13.0.0"
1228
+ }
1229
+ },
1230
+ "node_modules/mongoose": {
1231
+ "version": "8.12.1",
1232
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.12.1.tgz",
1233
+ "integrity": "sha512-UW22y8QFVYmrb36hm8cGncfn4ARc/XsYWQwRTaj0gxtQk1rDuhzDO1eBantS+hTTatfAIS96LlRCJrcNHvW5+Q==",
1234
+ "license": "MIT",
1235
+ "dependencies": {
1236
+ "bson": "^6.10.3",
1237
+ "kareem": "2.6.3",
1238
+ "mongodb": "~6.14.0",
1239
+ "mpath": "0.9.0",
1240
+ "mquery": "5.0.0",
1241
+ "ms": "2.1.3",
1242
+ "sift": "17.1.3"
1243
+ },
1244
+ "engines": {
1245
+ "node": ">=16.20.1"
1246
+ },
1247
+ "funding": {
1248
+ "type": "opencollective",
1249
+ "url": "https://opencollective.com/mongoose"
1250
+ }
1251
+ },
1252
+ "node_modules/mongoose/node_modules/ms": {
1253
+ "version": "2.1.3",
1254
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1255
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1256
+ "license": "MIT"
1257
+ },
1258
+ "node_modules/mpath": {
1259
+ "version": "0.9.0",
1260
+ "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
1261
+ "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
1262
+ "license": "MIT",
1263
+ "engines": {
1264
+ "node": ">=4.0.0"
1265
+ }
1266
+ },
1267
+ "node_modules/mquery": {
1268
+ "version": "5.0.0",
1269
+ "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
1270
+ "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
1271
+ "license": "MIT",
1272
+ "dependencies": {
1273
+ "debug": "4.x"
1274
+ },
1275
+ "engines": {
1276
+ "node": ">=14.0.0"
1277
+ }
1278
+ },
1279
+ "node_modules/mquery/node_modules/debug": {
1280
+ "version": "4.4.0",
1281
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
1282
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
1283
+ "license": "MIT",
1284
+ "dependencies": {
1285
+ "ms": "^2.1.3"
1286
+ },
1287
+ "engines": {
1288
+ "node": ">=6.0"
1289
+ },
1290
+ "peerDependenciesMeta": {
1291
+ "supports-color": {
1292
+ "optional": true
1293
+ }
1294
+ }
1295
+ },
1296
+ "node_modules/mquery/node_modules/ms": {
1297
+ "version": "2.1.3",
1298
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1299
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1300
+ "license": "MIT"
1301
+ },
1302
+ "node_modules/ms": {
1303
+ "version": "2.0.0",
1304
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1305
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
1306
+ "license": "MIT"
1307
+ },
1308
+ "node_modules/negotiator": {
1309
+ "version": "0.6.3",
1310
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1311
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1312
+ "license": "MIT",
1313
+ "engines": {
1314
+ "node": ">= 0.6"
1315
+ }
1316
+ },
1317
+ "node_modules/node-addon-api": {
1318
+ "version": "5.1.0",
1319
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
1320
+ "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
1321
+ "license": "MIT"
1322
+ },
1323
+ "node_modules/node-fetch": {
1324
+ "version": "2.7.0",
1325
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
1326
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
1327
+ "license": "MIT",
1328
+ "dependencies": {
1329
+ "whatwg-url": "^5.0.0"
1330
+ },
1331
+ "engines": {
1332
+ "node": "4.x || >=6.0.0"
1333
+ },
1334
+ "peerDependencies": {
1335
+ "encoding": "^0.1.0"
1336
+ },
1337
+ "peerDependenciesMeta": {
1338
+ "encoding": {
1339
+ "optional": true
1340
+ }
1341
+ }
1342
+ },
1343
+ "node_modules/node-fetch/node_modules/tr46": {
1344
+ "version": "0.0.3",
1345
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1346
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
1347
+ "license": "MIT"
1348
+ },
1349
+ "node_modules/node-fetch/node_modules/webidl-conversions": {
1350
+ "version": "3.0.1",
1351
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1352
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
1353
+ "license": "BSD-2-Clause"
1354
+ },
1355
+ "node_modules/node-fetch/node_modules/whatwg-url": {
1356
+ "version": "5.0.0",
1357
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1358
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1359
+ "license": "MIT",
1360
+ "dependencies": {
1361
+ "tr46": "~0.0.3",
1362
+ "webidl-conversions": "^3.0.0"
1363
+ }
1364
+ },
1365
+ "node_modules/nopt": {
1366
+ "version": "5.0.0",
1367
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
1368
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
1369
+ "license": "ISC",
1370
+ "dependencies": {
1371
+ "abbrev": "1"
1372
+ },
1373
+ "bin": {
1374
+ "nopt": "bin/nopt.js"
1375
+ },
1376
+ "engines": {
1377
+ "node": ">=6"
1378
+ }
1379
+ },
1380
+ "node_modules/npmlog": {
1381
+ "version": "5.0.1",
1382
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
1383
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
1384
+ "deprecated": "This package is no longer supported.",
1385
+ "license": "ISC",
1386
+ "dependencies": {
1387
+ "are-we-there-yet": "^2.0.0",
1388
+ "console-control-strings": "^1.1.0",
1389
+ "gauge": "^3.0.0",
1390
+ "set-blocking": "^2.0.0"
1391
+ }
1392
+ },
1393
+ "node_modules/oauth": {
1394
+ "version": "0.10.2",
1395
+ "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.2.tgz",
1396
+ "integrity": "sha512-JtFnB+8nxDEXgNyniwz573xxbKSOu3R8D40xQKqcjwJ2CDkYqUDI53o6IuzDJBx60Z8VKCm271+t8iFjakrl8Q==",
1397
+ "license": "MIT"
1398
+ },
1399
+ "node_modules/object-assign": {
1400
+ "version": "4.1.1",
1401
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1402
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1403
+ "license": "MIT",
1404
+ "engines": {
1405
+ "node": ">=0.10.0"
1406
+ }
1407
+ },
1408
+ "node_modules/object-inspect": {
1409
+ "version": "1.13.4",
1410
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
1411
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
1412
+ "license": "MIT",
1413
+ "engines": {
1414
+ "node": ">= 0.4"
1415
+ },
1416
+ "funding": {
1417
+ "url": "https://github.com/sponsors/ljharb"
1418
+ }
1419
+ },
1420
+ "node_modules/on-finished": {
1421
+ "version": "2.4.1",
1422
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1423
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1424
+ "license": "MIT",
1425
+ "dependencies": {
1426
+ "ee-first": "1.1.1"
1427
+ },
1428
+ "engines": {
1429
+ "node": ">= 0.8"
1430
+ }
1431
+ },
1432
+ "node_modules/on-headers": {
1433
+ "version": "1.0.2",
1434
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1435
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
1436
+ "license": "MIT",
1437
+ "engines": {
1438
+ "node": ">= 0.8"
1439
+ }
1440
+ },
1441
+ "node_modules/once": {
1442
+ "version": "1.4.0",
1443
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1444
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1445
+ "license": "ISC",
1446
+ "dependencies": {
1447
+ "wrappy": "1"
1448
+ }
1449
+ },
1450
+ "node_modules/parseurl": {
1451
+ "version": "1.3.3",
1452
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1453
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1454
+ "license": "MIT",
1455
+ "engines": {
1456
+ "node": ">= 0.8"
1457
+ }
1458
+ },
1459
+ "node_modules/passport": {
1460
+ "version": "0.7.0",
1461
+ "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz",
1462
+ "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==",
1463
+ "license": "MIT",
1464
+ "dependencies": {
1465
+ "passport-strategy": "1.x.x",
1466
+ "pause": "0.0.1",
1467
+ "utils-merge": "^1.0.1"
1468
+ },
1469
+ "engines": {
1470
+ "node": ">= 0.4.0"
1471
+ },
1472
+ "funding": {
1473
+ "type": "github",
1474
+ "url": "https://github.com/sponsors/jaredhanson"
1475
+ }
1476
+ },
1477
+ "node_modules/passport-github2": {
1478
+ "version": "0.1.12",
1479
+ "resolved": "https://registry.npmjs.org/passport-github2/-/passport-github2-0.1.12.tgz",
1480
+ "integrity": "sha512-3nPUCc7ttF/3HSP/k9sAXjz3SkGv5Nki84I05kSQPo01Jqq1NzJACgMblCK0fGcv9pKCG/KXU3AJRDGLqHLoIw==",
1481
+ "dependencies": {
1482
+ "passport-oauth2": "1.x.x"
1483
+ },
1484
+ "engines": {
1485
+ "node": ">= 0.8.0"
1486
+ }
1487
+ },
1488
+ "node_modules/passport-google-oauth20": {
1489
+ "version": "2.0.0",
1490
+ "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
1491
+ "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==",
1492
+ "license": "MIT",
1493
+ "dependencies": {
1494
+ "passport-oauth2": "1.x.x"
1495
+ },
1496
+ "engines": {
1497
+ "node": ">= 0.4.0"
1498
+ }
1499
+ },
1500
+ "node_modules/passport-oauth2": {
1501
+ "version": "1.8.0",
1502
+ "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz",
1503
+ "integrity": "sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==",
1504
+ "license": "MIT",
1505
+ "dependencies": {
1506
+ "base64url": "3.x.x",
1507
+ "oauth": "0.10.x",
1508
+ "passport-strategy": "1.x.x",
1509
+ "uid2": "0.0.x",
1510
+ "utils-merge": "1.x.x"
1511
+ },
1512
+ "engines": {
1513
+ "node": ">= 0.4.0"
1514
+ },
1515
+ "funding": {
1516
+ "type": "github",
1517
+ "url": "https://github.com/sponsors/jaredhanson"
1518
+ }
1519
+ },
1520
+ "node_modules/passport-strategy": {
1521
+ "version": "1.0.0",
1522
+ "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
1523
+ "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==",
1524
+ "engines": {
1525
+ "node": ">= 0.4.0"
1526
+ }
1527
+ },
1528
+ "node_modules/path": {
1529
+ "version": "0.12.7",
1530
+ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
1531
+ "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
1532
+ "license": "MIT",
1533
+ "dependencies": {
1534
+ "process": "^0.11.1",
1535
+ "util": "^0.10.3"
1536
+ }
1537
+ },
1538
+ "node_modules/path-is-absolute": {
1539
+ "version": "1.0.1",
1540
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1541
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1542
+ "license": "MIT",
1543
+ "engines": {
1544
+ "node": ">=0.10.0"
1545
+ }
1546
+ },
1547
+ "node_modules/path-to-regexp": {
1548
+ "version": "0.1.12",
1549
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
1550
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
1551
+ "license": "MIT"
1552
+ },
1553
+ "node_modules/pause": {
1554
+ "version": "0.0.1",
1555
+ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
1556
+ "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
1557
+ },
1558
+ "node_modules/process": {
1559
+ "version": "0.11.10",
1560
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
1561
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
1562
+ "license": "MIT",
1563
+ "engines": {
1564
+ "node": ">= 0.6.0"
1565
+ }
1566
+ },
1567
+ "node_modules/proxy-addr": {
1568
+ "version": "2.0.7",
1569
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1570
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1571
+ "license": "MIT",
1572
+ "dependencies": {
1573
+ "forwarded": "0.2.0",
1574
+ "ipaddr.js": "1.9.1"
1575
+ },
1576
+ "engines": {
1577
+ "node": ">= 0.10"
1578
+ }
1579
+ },
1580
+ "node_modules/punycode": {
1581
+ "version": "2.3.1",
1582
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
1583
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
1584
+ "license": "MIT",
1585
+ "engines": {
1586
+ "node": ">=6"
1587
+ }
1588
+ },
1589
+ "node_modules/qs": {
1590
+ "version": "6.13.0",
1591
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
1592
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
1593
+ "license": "BSD-3-Clause",
1594
+ "dependencies": {
1595
+ "side-channel": "^1.0.6"
1596
+ },
1597
+ "engines": {
1598
+ "node": ">=0.6"
1599
+ },
1600
+ "funding": {
1601
+ "url": "https://github.com/sponsors/ljharb"
1602
+ }
1603
+ },
1604
+ "node_modules/random-bytes": {
1605
+ "version": "1.0.0",
1606
+ "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
1607
+ "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==",
1608
+ "license": "MIT",
1609
+ "engines": {
1610
+ "node": ">= 0.8"
1611
+ }
1612
+ },
1613
+ "node_modules/range-parser": {
1614
+ "version": "1.2.1",
1615
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1616
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1617
+ "license": "MIT",
1618
+ "engines": {
1619
+ "node": ">= 0.6"
1620
+ }
1621
+ },
1622
+ "node_modules/raw-body": {
1623
+ "version": "2.5.2",
1624
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
1625
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
1626
+ "license": "MIT",
1627
+ "dependencies": {
1628
+ "bytes": "3.1.2",
1629
+ "http-errors": "2.0.0",
1630
+ "iconv-lite": "0.4.24",
1631
+ "unpipe": "1.0.0"
1632
+ },
1633
+ "engines": {
1634
+ "node": ">= 0.8"
1635
+ }
1636
+ },
1637
+ "node_modules/readable-stream": {
1638
+ "version": "3.6.2",
1639
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
1640
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
1641
+ "license": "MIT",
1642
+ "dependencies": {
1643
+ "inherits": "^2.0.3",
1644
+ "string_decoder": "^1.1.1",
1645
+ "util-deprecate": "^1.0.1"
1646
+ },
1647
+ "engines": {
1648
+ "node": ">= 6"
1649
+ }
1650
+ },
1651
+ "node_modules/rimraf": {
1652
+ "version": "3.0.2",
1653
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1654
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1655
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
1656
+ "license": "ISC",
1657
+ "dependencies": {
1658
+ "glob": "^7.1.3"
1659
+ },
1660
+ "bin": {
1661
+ "rimraf": "bin.js"
1662
+ },
1663
+ "funding": {
1664
+ "url": "https://github.com/sponsors/isaacs"
1665
+ }
1666
+ },
1667
+ "node_modules/safe-buffer": {
1668
+ "version": "5.2.1",
1669
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1670
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1671
+ "funding": [
1672
+ {
1673
+ "type": "github",
1674
+ "url": "https://github.com/sponsors/feross"
1675
+ },
1676
+ {
1677
+ "type": "patreon",
1678
+ "url": "https://www.patreon.com/feross"
1679
+ },
1680
+ {
1681
+ "type": "consulting",
1682
+ "url": "https://feross.org/support"
1683
+ }
1684
+ ],
1685
+ "license": "MIT"
1686
+ },
1687
+ "node_modules/safer-buffer": {
1688
+ "version": "2.1.2",
1689
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1690
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1691
+ "license": "MIT"
1692
+ },
1693
+ "node_modules/semver": {
1694
+ "version": "7.7.1",
1695
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
1696
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
1697
+ "license": "ISC",
1698
+ "bin": {
1699
+ "semver": "bin/semver.js"
1700
+ },
1701
+ "engines": {
1702
+ "node": ">=10"
1703
+ }
1704
+ },
1705
+ "node_modules/send": {
1706
+ "version": "0.19.0",
1707
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
1708
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
1709
+ "license": "MIT",
1710
+ "dependencies": {
1711
+ "debug": "2.6.9",
1712
+ "depd": "2.0.0",
1713
+ "destroy": "1.2.0",
1714
+ "encodeurl": "~1.0.2",
1715
+ "escape-html": "~1.0.3",
1716
+ "etag": "~1.8.1",
1717
+ "fresh": "0.5.2",
1718
+ "http-errors": "2.0.0",
1719
+ "mime": "1.6.0",
1720
+ "ms": "2.1.3",
1721
+ "on-finished": "2.4.1",
1722
+ "range-parser": "~1.2.1",
1723
+ "statuses": "2.0.1"
1724
+ },
1725
+ "engines": {
1726
+ "node": ">= 0.8.0"
1727
+ }
1728
+ },
1729
+ "node_modules/send/node_modules/encodeurl": {
1730
+ "version": "1.0.2",
1731
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
1732
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
1733
+ "license": "MIT",
1734
+ "engines": {
1735
+ "node": ">= 0.8"
1736
+ }
1737
+ },
1738
+ "node_modules/send/node_modules/ms": {
1739
+ "version": "2.1.3",
1740
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1741
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1742
+ "license": "MIT"
1743
+ },
1744
+ "node_modules/serve-static": {
1745
+ "version": "1.16.2",
1746
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
1747
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
1748
+ "license": "MIT",
1749
+ "dependencies": {
1750
+ "encodeurl": "~2.0.0",
1751
+ "escape-html": "~1.0.3",
1752
+ "parseurl": "~1.3.3",
1753
+ "send": "0.19.0"
1754
+ },
1755
+ "engines": {
1756
+ "node": ">= 0.8.0"
1757
+ }
1758
+ },
1759
+ "node_modules/set-blocking": {
1760
+ "version": "2.0.0",
1761
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1762
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
1763
+ "license": "ISC"
1764
+ },
1765
+ "node_modules/setprototypeof": {
1766
+ "version": "1.2.0",
1767
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1768
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
1769
+ "license": "ISC"
1770
+ },
1771
+ "node_modules/side-channel": {
1772
+ "version": "1.1.0",
1773
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
1774
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
1775
+ "license": "MIT",
1776
+ "dependencies": {
1777
+ "es-errors": "^1.3.0",
1778
+ "object-inspect": "^1.13.3",
1779
+ "side-channel-list": "^1.0.0",
1780
+ "side-channel-map": "^1.0.1",
1781
+ "side-channel-weakmap": "^1.0.2"
1782
+ },
1783
+ "engines": {
1784
+ "node": ">= 0.4"
1785
+ },
1786
+ "funding": {
1787
+ "url": "https://github.com/sponsors/ljharb"
1788
+ }
1789
+ },
1790
+ "node_modules/side-channel-list": {
1791
+ "version": "1.0.0",
1792
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
1793
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
1794
+ "license": "MIT",
1795
+ "dependencies": {
1796
+ "es-errors": "^1.3.0",
1797
+ "object-inspect": "^1.13.3"
1798
+ },
1799
+ "engines": {
1800
+ "node": ">= 0.4"
1801
+ },
1802
+ "funding": {
1803
+ "url": "https://github.com/sponsors/ljharb"
1804
+ }
1805
+ },
1806
+ "node_modules/side-channel-map": {
1807
+ "version": "1.0.1",
1808
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
1809
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
1810
+ "license": "MIT",
1811
+ "dependencies": {
1812
+ "call-bound": "^1.0.2",
1813
+ "es-errors": "^1.3.0",
1814
+ "get-intrinsic": "^1.2.5",
1815
+ "object-inspect": "^1.13.3"
1816
+ },
1817
+ "engines": {
1818
+ "node": ">= 0.4"
1819
+ },
1820
+ "funding": {
1821
+ "url": "https://github.com/sponsors/ljharb"
1822
+ }
1823
+ },
1824
+ "node_modules/side-channel-weakmap": {
1825
+ "version": "1.0.2",
1826
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
1827
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
1828
+ "license": "MIT",
1829
+ "dependencies": {
1830
+ "call-bound": "^1.0.2",
1831
+ "es-errors": "^1.3.0",
1832
+ "get-intrinsic": "^1.2.5",
1833
+ "object-inspect": "^1.13.3",
1834
+ "side-channel-map": "^1.0.1"
1835
+ },
1836
+ "engines": {
1837
+ "node": ">= 0.4"
1838
+ },
1839
+ "funding": {
1840
+ "url": "https://github.com/sponsors/ljharb"
1841
+ }
1842
+ },
1843
+ "node_modules/sift": {
1844
+ "version": "17.1.3",
1845
+ "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz",
1846
+ "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==",
1847
+ "license": "MIT"
1848
+ },
1849
+ "node_modules/signal-exit": {
1850
+ "version": "3.0.7",
1851
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1852
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
1853
+ "license": "ISC"
1854
+ },
1855
+ "node_modules/sparse-bitfield": {
1856
+ "version": "3.0.3",
1857
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
1858
+ "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
1859
+ "license": "MIT",
1860
+ "dependencies": {
1861
+ "memory-pager": "^1.0.2"
1862
+ }
1863
+ },
1864
+ "node_modules/statuses": {
1865
+ "version": "2.0.1",
1866
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1867
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1868
+ "license": "MIT",
1869
+ "engines": {
1870
+ "node": ">= 0.8"
1871
+ }
1872
+ },
1873
+ "node_modules/string_decoder": {
1874
+ "version": "1.3.0",
1875
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1876
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1877
+ "license": "MIT",
1878
+ "dependencies": {
1879
+ "safe-buffer": "~5.2.0"
1880
+ }
1881
+ },
1882
+ "node_modules/string-width": {
1883
+ "version": "4.2.3",
1884
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1885
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1886
+ "license": "MIT",
1887
+ "dependencies": {
1888
+ "emoji-regex": "^8.0.0",
1889
+ "is-fullwidth-code-point": "^3.0.0",
1890
+ "strip-ansi": "^6.0.1"
1891
+ },
1892
+ "engines": {
1893
+ "node": ">=8"
1894
+ }
1895
+ },
1896
+ "node_modules/strip-ansi": {
1897
+ "version": "6.0.1",
1898
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1899
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1900
+ "license": "MIT",
1901
+ "dependencies": {
1902
+ "ansi-regex": "^5.0.1"
1903
+ },
1904
+ "engines": {
1905
+ "node": ">=8"
1906
+ }
1907
+ },
1908
+ "node_modules/swagger-autogen": {
1909
+ "version": "2.23.7",
1910
+ "resolved": "https://registry.npmjs.org/swagger-autogen/-/swagger-autogen-2.23.7.tgz",
1911
+ "integrity": "sha512-vr7uRmuV0DCxWc0wokLJAwX3GwQFJ0jwN+AWk0hKxre2EZwusnkGSGdVFd82u7fQLgwSTnbWkxUL7HXuz5LTZQ==",
1912
+ "license": "MIT",
1913
+ "dependencies": {
1914
+ "acorn": "^7.4.1",
1915
+ "deepmerge": "^4.2.2",
1916
+ "glob": "^7.1.7",
1917
+ "json5": "^2.2.3"
1918
+ }
1919
+ },
1920
+ "node_modules/tar": {
1921
+ "version": "6.2.1",
1922
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
1923
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
1924
+ "license": "ISC",
1925
+ "dependencies": {
1926
+ "chownr": "^2.0.0",
1927
+ "fs-minipass": "^2.0.0",
1928
+ "minipass": "^5.0.0",
1929
+ "minizlib": "^2.1.1",
1930
+ "mkdirp": "^1.0.3",
1931
+ "yallist": "^4.0.0"
1932
+ },
1933
+ "engines": {
1934
+ "node": ">=10"
1935
+ }
1936
+ },
1937
+ "node_modules/toidentifier": {
1938
+ "version": "1.0.1",
1939
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1940
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1941
+ "license": "MIT",
1942
+ "engines": {
1943
+ "node": ">=0.6"
1944
+ }
1945
+ },
1946
+ "node_modules/tr46": {
1947
+ "version": "5.0.0",
1948
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
1949
+ "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
1950
+ "license": "MIT",
1951
+ "dependencies": {
1952
+ "punycode": "^2.3.1"
1953
+ },
1954
+ "engines": {
1955
+ "node": ">=18"
1956
+ }
1957
+ },
1958
+ "node_modules/type-is": {
1959
+ "version": "1.6.18",
1960
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1961
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1962
+ "license": "MIT",
1963
+ "dependencies": {
1964
+ "media-typer": "0.3.0",
1965
+ "mime-types": "~2.1.24"
1966
+ },
1967
+ "engines": {
1968
+ "node": ">= 0.6"
1969
+ }
1970
+ },
1971
+ "node_modules/uid-safe": {
1972
+ "version": "2.1.5",
1973
+ "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
1974
+ "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
1975
+ "license": "MIT",
1976
+ "dependencies": {
1977
+ "random-bytes": "~1.0.0"
1978
+ },
1979
+ "engines": {
1980
+ "node": ">= 0.8"
1981
+ }
1982
+ },
1983
+ "node_modules/uid2": {
1984
+ "version": "0.0.4",
1985
+ "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
1986
+ "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==",
1987
+ "license": "MIT"
1988
+ },
1989
+ "node_modules/undici-types": {
1990
+ "version": "6.20.0",
1991
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
1992
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
1993
+ "dev": true,
1994
+ "license": "MIT"
1995
+ },
1996
+ "node_modules/unpipe": {
1997
+ "version": "1.0.0",
1998
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1999
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
2000
+ "license": "MIT",
2001
+ "engines": {
2002
+ "node": ">= 0.8"
2003
+ }
2004
+ },
2005
+ "node_modules/url": {
2006
+ "version": "0.11.4",
2007
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
2008
+ "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
2009
+ "license": "MIT",
2010
+ "dependencies": {
2011
+ "punycode": "^1.4.1",
2012
+ "qs": "^6.12.3"
2013
+ },
2014
+ "engines": {
2015
+ "node": ">= 0.4"
2016
+ }
2017
+ },
2018
+ "node_modules/url/node_modules/punycode": {
2019
+ "version": "1.4.1",
2020
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
2021
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
2022
+ "license": "MIT"
2023
+ },
2024
+ "node_modules/util": {
2025
+ "version": "0.10.4",
2026
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
2027
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
2028
+ "license": "MIT",
2029
+ "dependencies": {
2030
+ "inherits": "2.0.3"
2031
+ }
2032
+ },
2033
+ "node_modules/util-deprecate": {
2034
+ "version": "1.0.2",
2035
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2036
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2037
+ "license": "MIT"
2038
+ },
2039
+ "node_modules/util/node_modules/inherits": {
2040
+ "version": "2.0.3",
2041
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
2042
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
2043
+ "license": "ISC"
2044
+ },
2045
+ "node_modules/utils-merge": {
2046
+ "version": "1.0.1",
2047
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
2048
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
2049
+ "license": "MIT",
2050
+ "engines": {
2051
+ "node": ">= 0.4.0"
2052
+ }
2053
+ },
2054
+ "node_modules/uuid": {
2055
+ "version": "11.1.0",
2056
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
2057
+ "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
2058
+ "funding": [
2059
+ "https://github.com/sponsors/broofa",
2060
+ "https://github.com/sponsors/ctavan"
2061
+ ],
2062
+ "license": "MIT",
2063
+ "bin": {
2064
+ "uuid": "dist/esm/bin/uuid"
2065
+ }
2066
+ },
2067
+ "node_modules/vary": {
2068
+ "version": "1.1.2",
2069
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
2070
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
2071
+ "license": "MIT",
2072
+ "engines": {
2073
+ "node": ">= 0.8"
2074
+ }
2075
+ },
2076
+ "node_modules/webidl-conversions": {
2077
+ "version": "7.0.0",
2078
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
2079
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
2080
+ "license": "BSD-2-Clause",
2081
+ "engines": {
2082
+ "node": ">=12"
2083
+ }
2084
+ },
2085
+ "node_modules/whatwg-url": {
2086
+ "version": "14.1.1",
2087
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.1.tgz",
2088
+ "integrity": "sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==",
2089
+ "license": "MIT",
2090
+ "dependencies": {
2091
+ "tr46": "^5.0.0",
2092
+ "webidl-conversions": "^7.0.0"
2093
+ },
2094
+ "engines": {
2095
+ "node": ">=18"
2096
+ }
2097
+ },
2098
+ "node_modules/wide-align": {
2099
+ "version": "1.1.5",
2100
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
2101
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
2102
+ "license": "ISC",
2103
+ "dependencies": {
2104
+ "string-width": "^1.0.2 || 2 || 3 || 4"
2105
+ }
2106
+ },
2107
+ "node_modules/wrappy": {
2108
+ "version": "1.0.2",
2109
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2110
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
2111
+ "license": "ISC"
2112
+ },
2113
+ "node_modules/yallist": {
2114
+ "version": "4.0.0",
2115
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
2116
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
2117
+ "license": "ISC"
2118
+ }
2119
+ }
2120
+ }
package.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dependencies": {
3
+ "bcrypt": "^5.1.1",
4
+ "cors": "^2.8.5",
5
+ "dotenv": "^16.4.7",
6
+ "express": "^4.21.2",
7
+ "express-session": "^1.18.1",
8
+ "jsonwebtoken": "^9.0.2",
9
+ "mongoose": "^8.8.3",
10
+ "passport": "^0.7.0",
11
+ "passport-github2": "^0.1.12",
12
+ "passport-google-oauth20": "^2.0.0",
13
+ "path": "^0.12.7",
14
+ "swagger-autogen": "^2.23.7",
15
+ "url": "^0.11.4",
16
+ "uuid": "^11.0.3"
17
+ },
18
+ "devDependencies": {
19
+ "@types/node": "^22.10.1"
20
+ },
21
+ "type": "module"
22
+ }
routes/auth.routes.js ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Router } from "express";
2
+ import passport from "passport";
3
+
4
+ const router = Router();
5
+
6
+ // Google OAuth login
7
+ router.get(
8
+ "/google",
9
+ passport.authenticate("google", { scope: ["profile", "email"] })
10
+ );
11
+
12
+ // Google OAuth callback
13
+ router.get(
14
+ "/google/callback",
15
+ passport.authenticate("google", {
16
+ failureRedirect: "http://localhost:5173",
17
+ successRedirect: "http://localhost:5173/documentationDownload",
18
+ })
19
+ );
20
+
21
+ // GitHub OAuth login
22
+ router.get("/github", passport.authenticate("github"));
23
+
24
+ // GitHub OAuth callback
25
+ router.get(
26
+ "/github/callback",
27
+ passport.authenticate("github", {
28
+ failureRedirect: "http://localhost:5173",
29
+ }),
30
+ (req, res, next) => {
31
+ res.json({ message: "GitHub login successful", user: req.user });
32
+ next("http:://localhost:5173/documentationDownload");
33
+ }
34
+ );
35
+
36
+ // Logout route
37
+ router.get("/logout", (req, res) => {
38
+ req.logout((err) => {
39
+ if (err) {
40
+ return res.status(500).json({ message: "Logout failed" });
41
+ }
42
+ res.json({ message: "Logged out successfully" });
43
+ });
44
+ });
45
+
46
+ export default router;
routes/user.routes.js ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Router } from "express";
2
+ import { userRegister, userLogin } from "../controllers/user.controller.js";
3
+ // import { authMiddleware } from "../middleware/auth.middleware.js";
4
+
5
+ const router = Router();
6
+
7
+ router.post("/sign-up", userRegister);
8
+ router.post("/sign-in", userLogin);
9
+
10
+ export default router;
server.js ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import express from "express";
2
+ import session from "express-session";
3
+ import dotenv from "dotenv";
4
+ import connectDB from "./config/db.js";
5
+ import passport from "./config/passport.js"; // Import passport AFTER dotenv
6
+ import userRoutes from "./routes/user.routes.js";
7
+ import authRoutes from "./routes/auth.routes.js";
8
+ import cors from "cors";
9
+
10
+ dotenv.config(); // Load .env variables
11
+ connectDB();
12
+
13
+ const app = express();
14
+
15
+ app.use(express.json());
16
+
17
+ // addinf cors lets see
18
+ app.use(
19
+ cors({
20
+ origin: ["http://localhost:5173"],
21
+ credentials: true, // This allows cookies to be sent cross-origin
22
+ })
23
+ );
24
+
25
+ // βœ… Configure session
26
+ app.use(
27
+ session({
28
+ secret: process.env.SESSION_SECRET || "defaultSecret",
29
+ resave: false,
30
+ saveUninitialized: false,
31
+ })
32
+ );
33
+
34
+ // βœ… Initialize Passport (Must be after session middleware)
35
+ app.use(passport.initialize());
36
+ app.use(passport.session());
37
+
38
+ // βœ… Routes
39
+ app.use("/api", userRoutes);
40
+ app.use("/auth", authRoutes);
41
+
42
+ const PORT = process.env.PORT || 5000;
43
+ app.listen(PORT, () => console.log(`πŸš€ Server running on port ${PORT}`));