├── README.md ├── backend ├── .gitignore ├── DB │ └── Database.js ├── Routers │ ├── Transactions.js │ └── userRouter.js ├── app.js ├── controllers │ ├── transactionController.js │ └── userController.js ├── models │ ├── TransactionModel.js │ └── UserSchema.js ├── package-lock.json └── package.json └── frontend ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt └── src ├── App.css ├── App.js ├── App.test.js ├── Pages ├── Auth │ ├── Login.js │ ├── Register.js │ └── auth.css ├── Avatar │ ├── avatar.css │ └── setAvatar.js └── Home │ ├── ActionBox.js │ ├── Analytics.js │ ├── CardBox.js │ ├── Home.js │ ├── ModelForm.js │ ├── TableData.js │ └── home.css ├── assets ├── cargando-loading.gif ├── gg.gif ├── loader.gif ├── loading.gif ├── logo.svg └── robot.gif ├── components ├── CircularProgressBar.css ├── CircularProgressBar.js ├── Header.js ├── LineProgressBar.js ├── Particle.js ├── Spinner.js └── style.css ├── index.css ├── index.js ├── logo.svg ├── reportWebVitals.js ├── setupTests.js └── utils └── ApiRequest.js /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Expense Management System using MERN Stack 3 | 4 | ### Live Website: https://main.d1sj7cd70hlter.amplifyapp.com/ 5 | 6 | ### Vercel Link: https://expense-tracker-app-three-beryl.vercel.app/ 7 | 8 | ## Project Description: 9 | 10 | The Expense Management System is a web-based application designed to assist users in tracking and managing their daily expenses. This system is built using the MERN stack (MongoDB, Express.js, React.js, and Node.js) to create a scalable, responsive, and user-friendly application. 11 | 12 | ## Objectives: 13 | 14 | 1. Simplify expense tracking for individuals and organizations. 15 | 16 | 2. Provide detailed insights into spending patterns to enable better financial management. 17 | 18 | 3. Offer a platform for users to create, update, and delete expenses and categories. 19 | 20 | 4. Generate comprehensive reports based on user-defined time periods and categories. 21 | 22 | ## Features 23 | 24 | 25 | - User Authentication and Authorization: 26 | 27 | Allow users to sign up and log in to their personal accounts using secure authentication mechanisms. 28 | Implement role-based access control for administrative tasks. 29 | 30 | - Expense and Category Management: 31 | 32 | Enable users to create, update, and delete expense entries and categories. 33 | Track expenses by date, category, and description. 34 | Support attaching receipts or other relevant documents to expense entries. 35 | 36 | - Dashboard and Reporting: 37 | 38 | Provide a visual dashboard displaying an overview of the user's expenses, including total expenses, expenses by category, and recent transactions. 39 | 40 | Generate reports based on selected date ranges and categories, displaying pie charts and bar graphs to help users understand their spending patterns. 41 | 42 | 43 | - Responsive User Interface: 44 | 45 | Design a clean, responsive user interface that works seamlessly across desktop, tablet, and mobile devices. 46 | 47 | Utilize React.js for building reusable UI components and managing state effectively. 48 | 49 | 50 | ## Technical Architecture: 51 | 52 | - Frontend: 53 | 54 | Utilize React.js for building the user interface, tsparticle library for awesome background effect and used other libraries like unique-names-generator, react-datepicker, moment 55 | 56 | Implement responsive design using CSS frameworks like Bootstrap and Material-Icons. 57 | 58 | - Backend: 59 | 60 | Use Node.js and Express.js to build a RESTful API for handling client requests and serving as the application's backend. 61 | 62 | Implement authentication and authorization using JSON Web Tokens (JWT) and middleware to protect endpoints. 63 | 64 | - Database: 65 | 66 | Store all data, including user information, expense entries, and categories, in MongoDB, a NoSQL database. 67 | 68 | Implement Mongoose ORM for schema definition and validation. 69 | 70 | - Deployment: 71 | 72 | Deploy the application to a cloud provider like AWS and render. 73 | frontend has deployed on AWS and backend on Render. 74 | 75 | Set up Continuous Integration and Continuous Deployment (CI/CD) pipelines for automated builds and deployments. 76 | ## Run Locally 77 | 78 | Clone the project 79 | 80 | ```bash 81 | git clone https://github.com/Priyanshu9898/Expense-Tracker-App 82 | ``` 83 | 84 | Go to the project directory 85 | 86 | ```bash 87 | cd Expense-Tracker-App 88 | ``` 89 | 90 | Go to the frontend directory and Install dependencies 91 | 92 | ```bash 93 | cd frontend 94 | ``` 95 | ```bash 96 | npm install 97 | ``` 98 | 99 | Go to the backend directory and Install dependencies 100 | 101 | ```bash 102 | cd backend 103 | ``` 104 | ```bash 105 | npm install 106 | ``` 107 | 108 | Start the frontend server 109 | 110 | ```bash 111 | npm start 112 | ``` 113 | 114 | 115 | Start the backend server 116 | 117 | ```bash 118 | npm run dev 119 | ``` 120 | 121 | ## Environment Variables 122 | 123 | To run this project, you will need to add the following environment variables to your .env file in backend folder 124 | 125 | create config folder and add config.env file in it and all all env variables there. 126 | 127 | `MONGO_URL` : Your MongoDB Connection String 128 | 129 | `PORT`: PORT number 130 | 131 | 132 | ## Tech Stack 133 | 134 | **Client:** React, Redux, react-bootstrap, Material Icons, tsparticles 135 | 136 | **Server:** Node, Express 137 | 138 | **Database:** MongoDB 139 | 140 | 141 | ## Screenshots 142 | 143 |  144 | 145 |  146 | 147 |  148 | 149 |  150 | 151 |  152 | 153 | ## Badges 154 | 155 | Add badges from somewhere like: [shields.io](https://shields.io/) 156 | 157 | [](https://choosealicense.com/licenses/mit/) 158 | [](https://opensource.org/licenses/) 159 | [](http://www.gnu.org/licenses/agpl-3.0) 160 | 161 | 162 | 163 | 164 | 165 | ## 🔗 Links 166 | [](https://github.com/Priyanshu9898/) 167 | [](https://www.linkedin.com/in/priyanshumalaviya/) 168 | [](https://twitter.com/Priyanshu2281) 169 | [](https://medium.com/@priyanshumalaviya9210) 170 | 171 | ## Demo 172 | 173 | Insert gif or link to demo 174 | 175 | 176 | ## License 177 | 178 | [MIT](https://choosealicense.com/licenses/mit/) 179 | 180 | -------------------------------------------------------------------------------- /backend/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /config -------------------------------------------------------------------------------- /backend/DB/Database.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | export const connectDB = async (req, res) => { 4 | const db = process.env.MONGO_URL; 5 | 6 | const {connection} = await mongoose.connect(db, { useNewUrlParser: true }); 7 | 8 | console.log(`MongoDB Connected to ${connection.host}`); 9 | 10 | } -------------------------------------------------------------------------------- /backend/Routers/Transactions.js: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import { addTransactionController, deleteTransactionController, getAllTransactionController, updateTransactionController } from '../controllers/transactionController.js'; 3 | 4 | const router = express.Router(); 5 | 6 | router.route("/addTransaction").post(addTransactionController); 7 | 8 | router.route("/getTransaction").post(getAllTransactionController); 9 | 10 | router.route("/deleteTransaction/:id").post(deleteTransactionController); 11 | 12 | router.route('/updateTransaction/:id').put(updateTransactionController); 13 | 14 | export default router; -------------------------------------------------------------------------------- /backend/Routers/userRouter.js: -------------------------------------------------------------------------------- 1 | import express from 'express'; 2 | import { loginControllers, registerControllers, setAvatarController } from '../controllers/userController.js'; 3 | 4 | const router = express.Router(); 5 | 6 | router.route("/register").post(registerControllers); 7 | 8 | router.route("/login").post(loginControllers); 9 | 10 | router.route("/setAvatar/:id").post(setAvatarController); 11 | 12 | export default router; -------------------------------------------------------------------------------- /backend/app.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import cors from "cors"; 3 | import { connectDB } from "./DB/Database.js"; 4 | import bodyParser from "body-parser"; 5 | import dotenv from "dotenv"; 6 | import helmet from "helmet"; 7 | import morgan from "morgan"; 8 | import transactionRoutes from "./Routers/Transactions.js"; 9 | import userRoutes from "./Routers/userRouter.js"; 10 | import path from "path"; 11 | 12 | dotenv.config({ path: "./config/config.env" }); 13 | const app = express(); 14 | 15 | const port = process.env.PORT; 16 | 17 | connectDB(); 18 | 19 | const allowedOrigins = [ 20 | "https://main.d1sj7cd70hlter.amplifyapp.com", 21 | "https://expense-tracker-app-three-beryl.vercel.app", 22 | // add more origins as needed 23 | ]; 24 | 25 | // Middleware 26 | app.use(express.json()); 27 | app.use( 28 | cors({ 29 | origin: allowedOrigins, 30 | credentials: true, 31 | methods: ["GET", "POST", "PUT", "DELETE"], 32 | }) 33 | ); 34 | app.use(helmet()); 35 | app.use(helmet.crossOriginResourcePolicy({ policy: "cross-origin" })); 36 | app.use(morgan("dev")); 37 | app.use(bodyParser.json()); 38 | app.use(bodyParser.urlencoded({ extended: false })); 39 | 40 | // Router 41 | app.use("/api/v1", transactionRoutes); 42 | app.use("/api/auth", userRoutes); 43 | 44 | app.get("/", (req, res) => { 45 | res.send("Hello World!"); 46 | }); 47 | 48 | app.listen(port, () => { 49 | console.log(`Server is listening on http://localhost:${port}`); 50 | }); 51 | -------------------------------------------------------------------------------- /backend/controllers/transactionController.js: -------------------------------------------------------------------------------- 1 | import Transaction from "../models/TransactionModel.js"; 2 | import User from "../models/UserSchema.js"; 3 | import moment from "moment"; 4 | 5 | export const addTransactionController = async (req, res) => { 6 | try { 7 | const { 8 | title, 9 | amount, 10 | description, 11 | date, 12 | category, 13 | userId, 14 | transactionType, 15 | } = req.body; 16 | 17 | // console.log(title, amount, description, date, category, userId, transactionType); 18 | 19 | if ( 20 | !title || 21 | !amount || 22 | !description || 23 | !date || 24 | !category || 25 | !transactionType 26 | ) { 27 | return res.status(408).json({ 28 | success: false, 29 | messages: "Please Fill all fields", 30 | }); 31 | } 32 | 33 | const user = await User.findById(userId); 34 | 35 | if (!user) { 36 | return res.status(400).json({ 37 | success: false, 38 | message: "User not found", 39 | }); 40 | } 41 | 42 | let newTransaction = await Transaction.create({ 43 | title: title, 44 | amount: amount, 45 | category: category, 46 | description: description, 47 | date: date, 48 | user: userId, 49 | transactionType: transactionType, 50 | }); 51 | 52 | user.transactions.push(newTransaction); 53 | 54 | user.save(); 55 | 56 | return res.status(200).json({ 57 | success: true, 58 | message: "Transaction Added Successfully", 59 | }); 60 | } catch (err) { 61 | return res.status(401).json({ 62 | success: false, 63 | messages: err.message, 64 | }); 65 | } 66 | }; 67 | 68 | export const getAllTransactionController = async (req, res) => { 69 | try { 70 | const { userId, type, frequency, startDate, endDate } = req.body; 71 | 72 | console.log(userId, type, frequency, startDate, endDate); 73 | 74 | const user = await User.findById(userId); 75 | 76 | if (!user) { 77 | return res.status(400).json({ 78 | success: false, 79 | message: "User not found", 80 | }); 81 | } 82 | 83 | // Create a query object with the user and type conditions 84 | const query = { 85 | user: userId, 86 | }; 87 | 88 | if (type !== 'all') { 89 | query.transactionType = type; 90 | } 91 | 92 | // Add date conditions based on 'frequency' and 'custom' range 93 | if (frequency !== 'custom') { 94 | query.date = { 95 | $gt: moment().subtract(Number(frequency), "days").toDate() 96 | }; 97 | } else if (startDate && endDate) { 98 | query.date = { 99 | $gte: moment(startDate).toDate(), 100 | $lte: moment(endDate).toDate(), 101 | }; 102 | } 103 | 104 | // console.log(query); 105 | 106 | const transactions = await Transaction.find(query); 107 | 108 | // console.log(transactions); 109 | 110 | return res.status(200).json({ 111 | success: true, 112 | transactions: transactions, 113 | }); 114 | } catch (err) { 115 | return res.status(401).json({ 116 | success: false, 117 | messages: err.message, 118 | }); 119 | } 120 | }; 121 | 122 | 123 | export const deleteTransactionController = async (req, res) => { 124 | try { 125 | const transactionId = req.params.id; 126 | const userId = req.body.userId; 127 | 128 | // console.log(transactionId, userId); 129 | 130 | const user = await User.findById(userId); 131 | 132 | if (!user) { 133 | return res.status(400).json({ 134 | success: false, 135 | message: "User not found", 136 | }); 137 | } 138 | const transactionElement = await Transaction.findByIdAndDelete( 139 | transactionId 140 | ); 141 | 142 | if (!transactionElement) { 143 | return res.status(400).json({ 144 | success: false, 145 | message: "transaction not found", 146 | }); 147 | } 148 | 149 | const transactionArr = user.transactions.filter( 150 | (transaction) => transaction._id === transactionId 151 | ); 152 | 153 | user.transactions = transactionArr; 154 | 155 | user.save(); 156 | 157 | // await transactionElement.remove(); 158 | 159 | return res.status(200).json({ 160 | success: true, 161 | message: `Transaction successfully deleted`, 162 | }); 163 | } catch (err) { 164 | return res.status(401).json({ 165 | success: false, 166 | messages: err.message, 167 | }); 168 | } 169 | }; 170 | 171 | export const updateTransactionController = async (req, res) => { 172 | try { 173 | const transactionId = req.params.id; 174 | 175 | const { title, amount, description, date, category, transactionType } = 176 | req.body; 177 | 178 | console.log(title, amount, description, date, category, transactionType); 179 | 180 | const transactionElement = await Transaction.findById(transactionId); 181 | 182 | if (!transactionElement) { 183 | return res.status(400).json({ 184 | success: false, 185 | message: "transaction not found", 186 | }); 187 | } 188 | 189 | if (title) { 190 | transactionElement.title = title; 191 | } 192 | 193 | if (description) { 194 | transactionElement.description = description; 195 | } 196 | 197 | if (amount) { 198 | transactionElement.amount = amount; 199 | } 200 | 201 | if (category) { 202 | transactionElement.category = category; 203 | } 204 | if (transactionType) { 205 | transactionElement.transactionType = transactionType; 206 | } 207 | 208 | if (date) { 209 | transactionElement.date = date; 210 | } 211 | 212 | await transactionElement.save(); 213 | 214 | // await transactionElement.remove(); 215 | 216 | return res.status(200).json({ 217 | success: true, 218 | message: `Transaction Updated Successfully`, 219 | transaction: transactionElement, 220 | }); 221 | } catch (err) { 222 | return res.status(401).json({ 223 | success: false, 224 | messages: err.message, 225 | }); 226 | } 227 | }; 228 | -------------------------------------------------------------------------------- /backend/controllers/userController.js: -------------------------------------------------------------------------------- 1 | import User from "../models/UserSchema.js"; 2 | import bcrypt from "bcrypt"; 3 | 4 | export const registerControllers = async (req, res, next) => { 5 | try{ 6 | const {name, email, password} = req.body; 7 | 8 | // console.log(name, email, password); 9 | 10 | if(!name || !email || !password){ 11 | return res.status(400).json({ 12 | success: false, 13 | message: "Please enter All Fields", 14 | }) 15 | } 16 | 17 | let user = await User.findOne({email}); 18 | 19 | if(user){ 20 | return res.status(409).json({ 21 | success: false, 22 | message: "User already Exists", 23 | }); 24 | } 25 | 26 | const salt = await bcrypt.genSalt(10); 27 | 28 | const hashedPassword = await bcrypt.hash(password, salt); 29 | 30 | // console.log(hashedPassword); 31 | 32 | let newUser = await User.create({ 33 | name, 34 | email, 35 | password: hashedPassword, 36 | }); 37 | 38 | return res.status(200).json({ 39 | success: true, 40 | message: "User Created Successfully", 41 | user: newUser 42 | }); 43 | } 44 | catch(err){ 45 | return res.status(500).json({ 46 | success: false, 47 | message: err.message, 48 | }); 49 | } 50 | 51 | } 52 | export const loginControllers = async (req, res, next) => { 53 | try{ 54 | const { email, password } = req.body; 55 | 56 | // console.log(email, password); 57 | 58 | if (!email || !password){ 59 | return res.status(400).json({ 60 | success: false, 61 | message: "Please enter All Fields", 62 | }); 63 | } 64 | 65 | const user = await User.findOne({ email }); 66 | 67 | if (!user){ 68 | return res.status(401).json({ 69 | success: false, 70 | message: "User not found", 71 | }); 72 | } 73 | 74 | const isMatch = await bcrypt.compare(password, user.password); 75 | 76 | if (!isMatch){ 77 | return res.status(401).json({ 78 | success: false, 79 | message: "Incorrect Email or Password", 80 | }); 81 | } 82 | 83 | delete user.password; 84 | 85 | return res.status(200).json({ 86 | success: true, 87 | message: `Welcome back, ${user.name}`, 88 | user, 89 | }); 90 | 91 | } 92 | catch(err){ 93 | return res.status(500).json({ 94 | success: false, 95 | message: err.message, 96 | }); 97 | } 98 | } 99 | 100 | export const setAvatarController = async (req, res, next)=> { 101 | try{ 102 | 103 | const userId = req.params.id; 104 | 105 | const imageData = req.body.image; 106 | 107 | const userData = await User.findByIdAndUpdate(userId, { 108 | isAvatarImageSet: true, 109 | avatarImage: imageData, 110 | }, 111 | { new: true }); 112 | 113 | return res.status(200).json({ 114 | isSet: userData.isAvatarImageSet, 115 | image: userData.avatarImage, 116 | }); 117 | 118 | 119 | }catch(err){ 120 | next(err); 121 | } 122 | } 123 | 124 | export const allUsers = async (req, res, next) => { 125 | try{ 126 | const user = await User.find({_id: {$ne: req.params.id}}).select([ 127 | "email", 128 | "username", 129 | "avatarImage", 130 | "_id", 131 | ]); 132 | 133 | return res.json(user); 134 | } 135 | catch(err){ 136 | next(err); 137 | } 138 | } -------------------------------------------------------------------------------- /backend/models/TransactionModel.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | 4 | const transactionSchema = new mongoose.Schema({ 5 | title: { 6 | type: String, 7 | required: [true, "Title is required"], 8 | trim: true, 9 | 10 | }, 11 | 12 | amount: { 13 | type: Number, 14 | required: [true, "Amount is required"], 15 | default: 0, 16 | }, 17 | 18 | category: { 19 | type: String, 20 | required: [true, "Category is required"], 21 | 22 | }, 23 | 24 | description: { 25 | type: String, 26 | required: [true, "Description is required"], 27 | 28 | }, 29 | transactionType: { 30 | type: String, 31 | required: [true, "Transaction Type is required"], 32 | 33 | }, 34 | 35 | date: { 36 | type: Date, 37 | required: [true, "Date is required"], 38 | }, 39 | 40 | user:{ 41 | type: mongoose.Schema.Types.ObjectId, 42 | ref: 'User', 43 | }, 44 | 45 | createdAt: { 46 | type: Date, 47 | default: new Date(), 48 | } 49 | 50 | }); 51 | 52 | const Transaction = mongoose.model('Transaction', transactionSchema); 53 | 54 | export default Transaction; -------------------------------------------------------------------------------- /backend/models/UserSchema.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | import validator from "validator"; 3 | import jwt from "jsonwebtoken"; 4 | import bcrypt from "bcrypt"; 5 | 6 | // User Schema Model - (Name, email, password, creation Date) with validation rules 7 | const userSchema = new mongoose.Schema({ 8 | name: { 9 | type: String, 10 | required: [true, "Name is required"], 11 | }, 12 | email: { 13 | type: String, 14 | required: [true, "Email is required"], 15 | unique : true, 16 | validate : validator.isEmail, 17 | }, 18 | password: { 19 | type: String, 20 | required: [true, "Password is required"], 21 | minlength : [6, "Password Must Be Atleast 6 characters"], 22 | }, 23 | isAvatarImageSet: { 24 | type: Boolean, 25 | default: false, 26 | }, 27 | 28 | avatarImage: { 29 | type: String, 30 | default: "" 31 | }, 32 | transactions: { 33 | type: [], 34 | }, 35 | 36 | createdAt: { 37 | type:Date, 38 | default: Date.now, 39 | }, 40 | 41 | 42 | 43 | }); 44 | 45 | const User = mongoose.model("User", userSchema); 46 | 47 | export default User; -------------------------------------------------------------------------------- /backend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "backend", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^1.3.5", 13 | "bcrypt": "^5.1.0", 14 | "concurrently": "^8.0.1", 15 | "cookie-parser": "^1.4.6", 16 | "cors": "^2.8.5", 17 | "dotenv": "^16.0.3", 18 | "express": "^4.18.2", 19 | "helmet": "^6.1.5", 20 | "jsonwebtoken": "^9.0.0", 21 | "moment": "^2.29.4", 22 | "mongoose": "^7.0.3", 23 | "morgan": "^1.10.0", 24 | "nodemon": "^2.0.22", 25 | "validator": "^13.9.0" 26 | } 27 | }, 28 | "node_modules/@mapbox/node-pre-gyp": { 29 | "version": "1.0.10", 30 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", 31 | "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", 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/@mapbox/node-pre-gyp/node_modules/nopt": { 48 | "version": "5.0.0", 49 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 50 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 51 | "dependencies": { 52 | "abbrev": "1" 53 | }, 54 | "bin": { 55 | "nopt": "bin/nopt.js" 56 | }, 57 | "engines": { 58 | "node": ">=6" 59 | } 60 | }, 61 | "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { 62 | "version": "7.4.0", 63 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", 64 | "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", 65 | "dependencies": { 66 | "lru-cache": "^6.0.0" 67 | }, 68 | "bin": { 69 | "semver": "bin/semver.js" 70 | }, 71 | "engines": { 72 | "node": ">=10" 73 | } 74 | }, 75 | "node_modules/@types/node": { 76 | "version": "18.15.11", 77 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", 78 | "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" 79 | }, 80 | "node_modules/@types/webidl-conversions": { 81 | "version": "7.0.0", 82 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 83 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 84 | }, 85 | "node_modules/@types/whatwg-url": { 86 | "version": "8.2.2", 87 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 88 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 89 | "dependencies": { 90 | "@types/node": "*", 91 | "@types/webidl-conversions": "*" 92 | } 93 | }, 94 | "node_modules/abbrev": { 95 | "version": "1.1.1", 96 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 97 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 98 | }, 99 | "node_modules/accepts": { 100 | "version": "1.3.8", 101 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 102 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 103 | "dependencies": { 104 | "mime-types": "~2.1.34", 105 | "negotiator": "0.6.3" 106 | }, 107 | "engines": { 108 | "node": ">= 0.6" 109 | } 110 | }, 111 | "node_modules/agent-base": { 112 | "version": "6.0.2", 113 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 114 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 115 | "dependencies": { 116 | "debug": "4" 117 | }, 118 | "engines": { 119 | "node": ">= 6.0.0" 120 | } 121 | }, 122 | "node_modules/agent-base/node_modules/debug": { 123 | "version": "4.3.4", 124 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 125 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 126 | "dependencies": { 127 | "ms": "2.1.2" 128 | }, 129 | "engines": { 130 | "node": ">=6.0" 131 | }, 132 | "peerDependenciesMeta": { 133 | "supports-color": { 134 | "optional": true 135 | } 136 | } 137 | }, 138 | "node_modules/agent-base/node_modules/ms": { 139 | "version": "2.1.2", 140 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 141 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 142 | }, 143 | "node_modules/ansi-regex": { 144 | "version": "5.0.1", 145 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 146 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 147 | "engines": { 148 | "node": ">=8" 149 | } 150 | }, 151 | "node_modules/ansi-styles": { 152 | "version": "4.3.0", 153 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 154 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 155 | "dependencies": { 156 | "color-convert": "^2.0.1" 157 | }, 158 | "engines": { 159 | "node": ">=8" 160 | }, 161 | "funding": { 162 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 163 | } 164 | }, 165 | "node_modules/anymatch": { 166 | "version": "3.1.3", 167 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 168 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 169 | "dependencies": { 170 | "normalize-path": "^3.0.0", 171 | "picomatch": "^2.0.4" 172 | }, 173 | "engines": { 174 | "node": ">= 8" 175 | } 176 | }, 177 | "node_modules/aproba": { 178 | "version": "2.0.0", 179 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", 180 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" 181 | }, 182 | "node_modules/are-we-there-yet": { 183 | "version": "2.0.0", 184 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", 185 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", 186 | "dependencies": { 187 | "delegates": "^1.0.0", 188 | "readable-stream": "^3.6.0" 189 | }, 190 | "engines": { 191 | "node": ">=10" 192 | } 193 | }, 194 | "node_modules/array-flatten": { 195 | "version": "1.1.1", 196 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 197 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 198 | }, 199 | "node_modules/asynckit": { 200 | "version": "0.4.0", 201 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 202 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 203 | }, 204 | "node_modules/axios": { 205 | "version": "1.3.5", 206 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", 207 | "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", 208 | "dependencies": { 209 | "follow-redirects": "^1.15.0", 210 | "form-data": "^4.0.0", 211 | "proxy-from-env": "^1.1.0" 212 | } 213 | }, 214 | "node_modules/balanced-match": { 215 | "version": "1.0.2", 216 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 217 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 218 | }, 219 | "node_modules/basic-auth": { 220 | "version": "2.0.1", 221 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 222 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 223 | "dependencies": { 224 | "safe-buffer": "5.1.2" 225 | }, 226 | "engines": { 227 | "node": ">= 0.8" 228 | } 229 | }, 230 | "node_modules/basic-auth/node_modules/safe-buffer": { 231 | "version": "5.1.2", 232 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 233 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 234 | }, 235 | "node_modules/bcrypt": { 236 | "version": "5.1.0", 237 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", 238 | "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", 239 | "hasInstallScript": true, 240 | "dependencies": { 241 | "@mapbox/node-pre-gyp": "^1.0.10", 242 | "node-addon-api": "^5.0.0" 243 | }, 244 | "engines": { 245 | "node": ">= 10.0.0" 246 | } 247 | }, 248 | "node_modules/binary-extensions": { 249 | "version": "2.2.0", 250 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 251 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 252 | "engines": { 253 | "node": ">=8" 254 | } 255 | }, 256 | "node_modules/body-parser": { 257 | "version": "1.20.1", 258 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 259 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 260 | "dependencies": { 261 | "bytes": "3.1.2", 262 | "content-type": "~1.0.4", 263 | "debug": "2.6.9", 264 | "depd": "2.0.0", 265 | "destroy": "1.2.0", 266 | "http-errors": "2.0.0", 267 | "iconv-lite": "0.4.24", 268 | "on-finished": "2.4.1", 269 | "qs": "6.11.0", 270 | "raw-body": "2.5.1", 271 | "type-is": "~1.6.18", 272 | "unpipe": "1.0.0" 273 | }, 274 | "engines": { 275 | "node": ">= 0.8", 276 | "npm": "1.2.8000 || >= 1.4.16" 277 | } 278 | }, 279 | "node_modules/brace-expansion": { 280 | "version": "1.1.11", 281 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 282 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 283 | "dependencies": { 284 | "balanced-match": "^1.0.0", 285 | "concat-map": "0.0.1" 286 | } 287 | }, 288 | "node_modules/braces": { 289 | "version": "3.0.2", 290 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 291 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 292 | "dependencies": { 293 | "fill-range": "^7.0.1" 294 | }, 295 | "engines": { 296 | "node": ">=8" 297 | } 298 | }, 299 | "node_modules/bson": { 300 | "version": "5.2.0", 301 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.2.0.tgz", 302 | "integrity": "sha512-HevkSpDbpUfsrHWmWiAsNavANKYIErV2ePXllp1bwq5CDreAaFVj6RVlZpJnxK4WWDCJ/5jMUpaY6G526q3Hjg==", 303 | "engines": { 304 | "node": ">=14.20.1" 305 | } 306 | }, 307 | "node_modules/buffer-equal-constant-time": { 308 | "version": "1.0.1", 309 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 310 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" 311 | }, 312 | "node_modules/bytes": { 313 | "version": "3.1.2", 314 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 315 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 316 | "engines": { 317 | "node": ">= 0.8" 318 | } 319 | }, 320 | "node_modules/call-bind": { 321 | "version": "1.0.2", 322 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 323 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 324 | "dependencies": { 325 | "function-bind": "^1.1.1", 326 | "get-intrinsic": "^1.0.2" 327 | }, 328 | "funding": { 329 | "url": "https://github.com/sponsors/ljharb" 330 | } 331 | }, 332 | "node_modules/chalk": { 333 | "version": "4.1.2", 334 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 335 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 336 | "dependencies": { 337 | "ansi-styles": "^4.1.0", 338 | "supports-color": "^7.1.0" 339 | }, 340 | "engines": { 341 | "node": ">=10" 342 | }, 343 | "funding": { 344 | "url": "https://github.com/chalk/chalk?sponsor=1" 345 | } 346 | }, 347 | "node_modules/chalk/node_modules/has-flag": { 348 | "version": "4.0.0", 349 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 350 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 351 | "engines": { 352 | "node": ">=8" 353 | } 354 | }, 355 | "node_modules/chalk/node_modules/supports-color": { 356 | "version": "7.2.0", 357 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 358 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 359 | "dependencies": { 360 | "has-flag": "^4.0.0" 361 | }, 362 | "engines": { 363 | "node": ">=8" 364 | } 365 | }, 366 | "node_modules/chokidar": { 367 | "version": "3.5.3", 368 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 369 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 370 | "funding": [ 371 | { 372 | "type": "individual", 373 | "url": "https://paulmillr.com/funding/" 374 | } 375 | ], 376 | "dependencies": { 377 | "anymatch": "~3.1.2", 378 | "braces": "~3.0.2", 379 | "glob-parent": "~5.1.2", 380 | "is-binary-path": "~2.1.0", 381 | "is-glob": "~4.0.1", 382 | "normalize-path": "~3.0.0", 383 | "readdirp": "~3.6.0" 384 | }, 385 | "engines": { 386 | "node": ">= 8.10.0" 387 | }, 388 | "optionalDependencies": { 389 | "fsevents": "~2.3.2" 390 | } 391 | }, 392 | "node_modules/chownr": { 393 | "version": "2.0.0", 394 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 395 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 396 | "engines": { 397 | "node": ">=10" 398 | } 399 | }, 400 | "node_modules/cliui": { 401 | "version": "8.0.1", 402 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 403 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 404 | "dependencies": { 405 | "string-width": "^4.2.0", 406 | "strip-ansi": "^6.0.1", 407 | "wrap-ansi": "^7.0.0" 408 | }, 409 | "engines": { 410 | "node": ">=12" 411 | } 412 | }, 413 | "node_modules/color-convert": { 414 | "version": "2.0.1", 415 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 416 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 417 | "dependencies": { 418 | "color-name": "~1.1.4" 419 | }, 420 | "engines": { 421 | "node": ">=7.0.0" 422 | } 423 | }, 424 | "node_modules/color-name": { 425 | "version": "1.1.4", 426 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 427 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 428 | }, 429 | "node_modules/color-support": { 430 | "version": "1.1.3", 431 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 432 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 433 | "bin": { 434 | "color-support": "bin.js" 435 | } 436 | }, 437 | "node_modules/combined-stream": { 438 | "version": "1.0.8", 439 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 440 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 441 | "dependencies": { 442 | "delayed-stream": "~1.0.0" 443 | }, 444 | "engines": { 445 | "node": ">= 0.8" 446 | } 447 | }, 448 | "node_modules/concat-map": { 449 | "version": "0.0.1", 450 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 451 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 452 | }, 453 | "node_modules/concurrently": { 454 | "version": "8.0.1", 455 | "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.0.1.tgz", 456 | "integrity": "sha512-Sh8bGQMEL0TAmAm2meAXMjcASHZa7V0xXQVDBLknCPa9TPtkY9yYs+0cnGGgfdkW0SV1Mlg+hVGfXcoI8d3MJA==", 457 | "dependencies": { 458 | "chalk": "^4.1.2", 459 | "date-fns": "^2.29.3", 460 | "lodash": "^4.17.21", 461 | "rxjs": "^7.8.0", 462 | "shell-quote": "^1.8.0", 463 | "spawn-command": "0.0.2-1", 464 | "supports-color": "^8.1.1", 465 | "tree-kill": "^1.2.2", 466 | "yargs": "^17.7.1" 467 | }, 468 | "bin": { 469 | "conc": "dist/bin/concurrently.js", 470 | "concurrently": "dist/bin/concurrently.js" 471 | }, 472 | "engines": { 473 | "node": "^14.13.0 || >=16.0.0" 474 | }, 475 | "funding": { 476 | "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" 477 | } 478 | }, 479 | "node_modules/concurrently/node_modules/has-flag": { 480 | "version": "4.0.0", 481 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 482 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 483 | "engines": { 484 | "node": ">=8" 485 | } 486 | }, 487 | "node_modules/concurrently/node_modules/supports-color": { 488 | "version": "8.1.1", 489 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", 490 | "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", 491 | "dependencies": { 492 | "has-flag": "^4.0.0" 493 | }, 494 | "engines": { 495 | "node": ">=10" 496 | }, 497 | "funding": { 498 | "url": "https://github.com/chalk/supports-color?sponsor=1" 499 | } 500 | }, 501 | "node_modules/console-control-strings": { 502 | "version": "1.1.0", 503 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 504 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" 505 | }, 506 | "node_modules/content-disposition": { 507 | "version": "0.5.4", 508 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 509 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 510 | "dependencies": { 511 | "safe-buffer": "5.2.1" 512 | }, 513 | "engines": { 514 | "node": ">= 0.6" 515 | } 516 | }, 517 | "node_modules/content-type": { 518 | "version": "1.0.5", 519 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 520 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 521 | "engines": { 522 | "node": ">= 0.6" 523 | } 524 | }, 525 | "node_modules/cookie": { 526 | "version": "0.4.1", 527 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", 528 | "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", 529 | "engines": { 530 | "node": ">= 0.6" 531 | } 532 | }, 533 | "node_modules/cookie-parser": { 534 | "version": "1.4.6", 535 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", 536 | "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", 537 | "dependencies": { 538 | "cookie": "0.4.1", 539 | "cookie-signature": "1.0.6" 540 | }, 541 | "engines": { 542 | "node": ">= 0.8.0" 543 | } 544 | }, 545 | "node_modules/cookie-signature": { 546 | "version": "1.0.6", 547 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 548 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 549 | }, 550 | "node_modules/cors": { 551 | "version": "2.8.5", 552 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 553 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 554 | "dependencies": { 555 | "object-assign": "^4", 556 | "vary": "^1" 557 | }, 558 | "engines": { 559 | "node": ">= 0.10" 560 | } 561 | }, 562 | "node_modules/date-fns": { 563 | "version": "2.29.3", 564 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", 565 | "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", 566 | "engines": { 567 | "node": ">=0.11" 568 | }, 569 | "funding": { 570 | "type": "opencollective", 571 | "url": "https://opencollective.com/date-fns" 572 | } 573 | }, 574 | "node_modules/debug": { 575 | "version": "2.6.9", 576 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 577 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 578 | "dependencies": { 579 | "ms": "2.0.0" 580 | } 581 | }, 582 | "node_modules/delayed-stream": { 583 | "version": "1.0.0", 584 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 585 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 586 | "engines": { 587 | "node": ">=0.4.0" 588 | } 589 | }, 590 | "node_modules/delegates": { 591 | "version": "1.0.0", 592 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 593 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" 594 | }, 595 | "node_modules/depd": { 596 | "version": "2.0.0", 597 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 598 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 599 | "engines": { 600 | "node": ">= 0.8" 601 | } 602 | }, 603 | "node_modules/destroy": { 604 | "version": "1.2.0", 605 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 606 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 607 | "engines": { 608 | "node": ">= 0.8", 609 | "npm": "1.2.8000 || >= 1.4.16" 610 | } 611 | }, 612 | "node_modules/detect-libc": { 613 | "version": "2.0.1", 614 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", 615 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", 616 | "engines": { 617 | "node": ">=8" 618 | } 619 | }, 620 | "node_modules/dotenv": { 621 | "version": "16.0.3", 622 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", 623 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", 624 | "engines": { 625 | "node": ">=12" 626 | } 627 | }, 628 | "node_modules/ecdsa-sig-formatter": { 629 | "version": "1.0.11", 630 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 631 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 632 | "dependencies": { 633 | "safe-buffer": "^5.0.1" 634 | } 635 | }, 636 | "node_modules/ee-first": { 637 | "version": "1.1.1", 638 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 639 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 640 | }, 641 | "node_modules/emoji-regex": { 642 | "version": "8.0.0", 643 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 644 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 645 | }, 646 | "node_modules/encodeurl": { 647 | "version": "1.0.2", 648 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 649 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 650 | "engines": { 651 | "node": ">= 0.8" 652 | } 653 | }, 654 | "node_modules/escalade": { 655 | "version": "3.1.1", 656 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 657 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 658 | "engines": { 659 | "node": ">=6" 660 | } 661 | }, 662 | "node_modules/escape-html": { 663 | "version": "1.0.3", 664 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 665 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 666 | }, 667 | "node_modules/etag": { 668 | "version": "1.8.1", 669 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 670 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 671 | "engines": { 672 | "node": ">= 0.6" 673 | } 674 | }, 675 | "node_modules/express": { 676 | "version": "4.18.2", 677 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 678 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 679 | "dependencies": { 680 | "accepts": "~1.3.8", 681 | "array-flatten": "1.1.1", 682 | "body-parser": "1.20.1", 683 | "content-disposition": "0.5.4", 684 | "content-type": "~1.0.4", 685 | "cookie": "0.5.0", 686 | "cookie-signature": "1.0.6", 687 | "debug": "2.6.9", 688 | "depd": "2.0.0", 689 | "encodeurl": "~1.0.2", 690 | "escape-html": "~1.0.3", 691 | "etag": "~1.8.1", 692 | "finalhandler": "1.2.0", 693 | "fresh": "0.5.2", 694 | "http-errors": "2.0.0", 695 | "merge-descriptors": "1.0.1", 696 | "methods": "~1.1.2", 697 | "on-finished": "2.4.1", 698 | "parseurl": "~1.3.3", 699 | "path-to-regexp": "0.1.7", 700 | "proxy-addr": "~2.0.7", 701 | "qs": "6.11.0", 702 | "range-parser": "~1.2.1", 703 | "safe-buffer": "5.2.1", 704 | "send": "0.18.0", 705 | "serve-static": "1.15.0", 706 | "setprototypeof": "1.2.0", 707 | "statuses": "2.0.1", 708 | "type-is": "~1.6.18", 709 | "utils-merge": "1.0.1", 710 | "vary": "~1.1.2" 711 | }, 712 | "engines": { 713 | "node": ">= 0.10.0" 714 | } 715 | }, 716 | "node_modules/express/node_modules/cookie": { 717 | "version": "0.5.0", 718 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 719 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 720 | "engines": { 721 | "node": ">= 0.6" 722 | } 723 | }, 724 | "node_modules/fill-range": { 725 | "version": "7.0.1", 726 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 727 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 728 | "dependencies": { 729 | "to-regex-range": "^5.0.1" 730 | }, 731 | "engines": { 732 | "node": ">=8" 733 | } 734 | }, 735 | "node_modules/finalhandler": { 736 | "version": "1.2.0", 737 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 738 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 739 | "dependencies": { 740 | "debug": "2.6.9", 741 | "encodeurl": "~1.0.2", 742 | "escape-html": "~1.0.3", 743 | "on-finished": "2.4.1", 744 | "parseurl": "~1.3.3", 745 | "statuses": "2.0.1", 746 | "unpipe": "~1.0.0" 747 | }, 748 | "engines": { 749 | "node": ">= 0.8" 750 | } 751 | }, 752 | "node_modules/follow-redirects": { 753 | "version": "1.15.2", 754 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", 755 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", 756 | "funding": [ 757 | { 758 | "type": "individual", 759 | "url": "https://github.com/sponsors/RubenVerborgh" 760 | } 761 | ], 762 | "engines": { 763 | "node": ">=4.0" 764 | }, 765 | "peerDependenciesMeta": { 766 | "debug": { 767 | "optional": true 768 | } 769 | } 770 | }, 771 | "node_modules/form-data": { 772 | "version": "4.0.0", 773 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 774 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 775 | "dependencies": { 776 | "asynckit": "^0.4.0", 777 | "combined-stream": "^1.0.8", 778 | "mime-types": "^2.1.12" 779 | }, 780 | "engines": { 781 | "node": ">= 6" 782 | } 783 | }, 784 | "node_modules/forwarded": { 785 | "version": "0.2.0", 786 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 787 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 788 | "engines": { 789 | "node": ">= 0.6" 790 | } 791 | }, 792 | "node_modules/fresh": { 793 | "version": "0.5.2", 794 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 795 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 796 | "engines": { 797 | "node": ">= 0.6" 798 | } 799 | }, 800 | "node_modules/fs-minipass": { 801 | "version": "2.1.0", 802 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 803 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 804 | "dependencies": { 805 | "minipass": "^3.0.0" 806 | }, 807 | "engines": { 808 | "node": ">= 8" 809 | } 810 | }, 811 | "node_modules/fs-minipass/node_modules/minipass": { 812 | "version": "3.3.6", 813 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 814 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 815 | "dependencies": { 816 | "yallist": "^4.0.0" 817 | }, 818 | "engines": { 819 | "node": ">=8" 820 | } 821 | }, 822 | "node_modules/fs.realpath": { 823 | "version": "1.0.0", 824 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 825 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 826 | }, 827 | "node_modules/fsevents": { 828 | "version": "2.3.2", 829 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 830 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 831 | "hasInstallScript": true, 832 | "optional": true, 833 | "os": [ 834 | "darwin" 835 | ], 836 | "engines": { 837 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 838 | } 839 | }, 840 | "node_modules/function-bind": { 841 | "version": "1.1.1", 842 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 843 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 844 | }, 845 | "node_modules/gauge": { 846 | "version": "3.0.2", 847 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", 848 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", 849 | "dependencies": { 850 | "aproba": "^1.0.3 || ^2.0.0", 851 | "color-support": "^1.1.2", 852 | "console-control-strings": "^1.0.0", 853 | "has-unicode": "^2.0.1", 854 | "object-assign": "^4.1.1", 855 | "signal-exit": "^3.0.0", 856 | "string-width": "^4.2.3", 857 | "strip-ansi": "^6.0.1", 858 | "wide-align": "^1.1.2" 859 | }, 860 | "engines": { 861 | "node": ">=10" 862 | } 863 | }, 864 | "node_modules/get-caller-file": { 865 | "version": "2.0.5", 866 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 867 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 868 | "engines": { 869 | "node": "6.* || 8.* || >= 10.*" 870 | } 871 | }, 872 | "node_modules/get-intrinsic": { 873 | "version": "1.2.0", 874 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 875 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 876 | "dependencies": { 877 | "function-bind": "^1.1.1", 878 | "has": "^1.0.3", 879 | "has-symbols": "^1.0.3" 880 | }, 881 | "funding": { 882 | "url": "https://github.com/sponsors/ljharb" 883 | } 884 | }, 885 | "node_modules/glob": { 886 | "version": "7.2.3", 887 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 888 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 889 | "dependencies": { 890 | "fs.realpath": "^1.0.0", 891 | "inflight": "^1.0.4", 892 | "inherits": "2", 893 | "minimatch": "^3.1.1", 894 | "once": "^1.3.0", 895 | "path-is-absolute": "^1.0.0" 896 | }, 897 | "engines": { 898 | "node": "*" 899 | }, 900 | "funding": { 901 | "url": "https://github.com/sponsors/isaacs" 902 | } 903 | }, 904 | "node_modules/glob-parent": { 905 | "version": "5.1.2", 906 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 907 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 908 | "dependencies": { 909 | "is-glob": "^4.0.1" 910 | }, 911 | "engines": { 912 | "node": ">= 6" 913 | } 914 | }, 915 | "node_modules/has": { 916 | "version": "1.0.3", 917 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 918 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 919 | "dependencies": { 920 | "function-bind": "^1.1.1" 921 | }, 922 | "engines": { 923 | "node": ">= 0.4.0" 924 | } 925 | }, 926 | "node_modules/has-flag": { 927 | "version": "3.0.0", 928 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 929 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 930 | "engines": { 931 | "node": ">=4" 932 | } 933 | }, 934 | "node_modules/has-symbols": { 935 | "version": "1.0.3", 936 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 937 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 938 | "engines": { 939 | "node": ">= 0.4" 940 | }, 941 | "funding": { 942 | "url": "https://github.com/sponsors/ljharb" 943 | } 944 | }, 945 | "node_modules/has-unicode": { 946 | "version": "2.0.1", 947 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 948 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" 949 | }, 950 | "node_modules/helmet": { 951 | "version": "6.1.5", 952 | "resolved": "https://registry.npmjs.org/helmet/-/helmet-6.1.5.tgz", 953 | "integrity": "sha512-UgAvdoG0BhF9vcCh/j0bWtElo2ZHHk6OzC98NLCM6zK03DEVSM0vUAtT7iR+oTo2Mi6sGelAH3tL6B/uUWxV4g==", 954 | "engines": { 955 | "node": ">=14.0.0" 956 | } 957 | }, 958 | "node_modules/http-errors": { 959 | "version": "2.0.0", 960 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 961 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 962 | "dependencies": { 963 | "depd": "2.0.0", 964 | "inherits": "2.0.4", 965 | "setprototypeof": "1.2.0", 966 | "statuses": "2.0.1", 967 | "toidentifier": "1.0.1" 968 | }, 969 | "engines": { 970 | "node": ">= 0.8" 971 | } 972 | }, 973 | "node_modules/https-proxy-agent": { 974 | "version": "5.0.1", 975 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 976 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 977 | "dependencies": { 978 | "agent-base": "6", 979 | "debug": "4" 980 | }, 981 | "engines": { 982 | "node": ">= 6" 983 | } 984 | }, 985 | "node_modules/https-proxy-agent/node_modules/debug": { 986 | "version": "4.3.4", 987 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 988 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 989 | "dependencies": { 990 | "ms": "2.1.2" 991 | }, 992 | "engines": { 993 | "node": ">=6.0" 994 | }, 995 | "peerDependenciesMeta": { 996 | "supports-color": { 997 | "optional": true 998 | } 999 | } 1000 | }, 1001 | "node_modules/https-proxy-agent/node_modules/ms": { 1002 | "version": "2.1.2", 1003 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1004 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1005 | }, 1006 | "node_modules/iconv-lite": { 1007 | "version": "0.4.24", 1008 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1009 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1010 | "dependencies": { 1011 | "safer-buffer": ">= 2.1.2 < 3" 1012 | }, 1013 | "engines": { 1014 | "node": ">=0.10.0" 1015 | } 1016 | }, 1017 | "node_modules/ignore-by-default": { 1018 | "version": "1.0.1", 1019 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 1020 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" 1021 | }, 1022 | "node_modules/inflight": { 1023 | "version": "1.0.6", 1024 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1025 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1026 | "dependencies": { 1027 | "once": "^1.3.0", 1028 | "wrappy": "1" 1029 | } 1030 | }, 1031 | "node_modules/inherits": { 1032 | "version": "2.0.4", 1033 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1034 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1035 | }, 1036 | "node_modules/ip": { 1037 | "version": "2.0.0", 1038 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 1039 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 1040 | }, 1041 | "node_modules/ipaddr.js": { 1042 | "version": "1.9.1", 1043 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1044 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 1045 | "engines": { 1046 | "node": ">= 0.10" 1047 | } 1048 | }, 1049 | "node_modules/is-binary-path": { 1050 | "version": "2.1.0", 1051 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1052 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1053 | "dependencies": { 1054 | "binary-extensions": "^2.0.0" 1055 | }, 1056 | "engines": { 1057 | "node": ">=8" 1058 | } 1059 | }, 1060 | "node_modules/is-extglob": { 1061 | "version": "2.1.1", 1062 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1063 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1064 | "engines": { 1065 | "node": ">=0.10.0" 1066 | } 1067 | }, 1068 | "node_modules/is-fullwidth-code-point": { 1069 | "version": "3.0.0", 1070 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1071 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1072 | "engines": { 1073 | "node": ">=8" 1074 | } 1075 | }, 1076 | "node_modules/is-glob": { 1077 | "version": "4.0.3", 1078 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1079 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1080 | "dependencies": { 1081 | "is-extglob": "^2.1.1" 1082 | }, 1083 | "engines": { 1084 | "node": ">=0.10.0" 1085 | } 1086 | }, 1087 | "node_modules/is-number": { 1088 | "version": "7.0.0", 1089 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1090 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1091 | "engines": { 1092 | "node": ">=0.12.0" 1093 | } 1094 | }, 1095 | "node_modules/jsonwebtoken": { 1096 | "version": "9.0.0", 1097 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", 1098 | "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", 1099 | "dependencies": { 1100 | "jws": "^3.2.2", 1101 | "lodash": "^4.17.21", 1102 | "ms": "^2.1.1", 1103 | "semver": "^7.3.8" 1104 | }, 1105 | "engines": { 1106 | "node": ">=12", 1107 | "npm": ">=6" 1108 | } 1109 | }, 1110 | "node_modules/jsonwebtoken/node_modules/ms": { 1111 | "version": "2.1.3", 1112 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1113 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1114 | }, 1115 | "node_modules/jsonwebtoken/node_modules/semver": { 1116 | "version": "7.4.0", 1117 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", 1118 | "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", 1119 | "dependencies": { 1120 | "lru-cache": "^6.0.0" 1121 | }, 1122 | "bin": { 1123 | "semver": "bin/semver.js" 1124 | }, 1125 | "engines": { 1126 | "node": ">=10" 1127 | } 1128 | }, 1129 | "node_modules/jwa": { 1130 | "version": "1.4.1", 1131 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 1132 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 1133 | "dependencies": { 1134 | "buffer-equal-constant-time": "1.0.1", 1135 | "ecdsa-sig-formatter": "1.0.11", 1136 | "safe-buffer": "^5.0.1" 1137 | } 1138 | }, 1139 | "node_modules/jws": { 1140 | "version": "3.2.2", 1141 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 1142 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 1143 | "dependencies": { 1144 | "jwa": "^1.4.1", 1145 | "safe-buffer": "^5.0.1" 1146 | } 1147 | }, 1148 | "node_modules/kareem": { 1149 | "version": "2.5.1", 1150 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 1151 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", 1152 | "engines": { 1153 | "node": ">=12.0.0" 1154 | } 1155 | }, 1156 | "node_modules/lodash": { 1157 | "version": "4.17.21", 1158 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1159 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1160 | }, 1161 | "node_modules/lru-cache": { 1162 | "version": "6.0.0", 1163 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1164 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1165 | "dependencies": { 1166 | "yallist": "^4.0.0" 1167 | }, 1168 | "engines": { 1169 | "node": ">=10" 1170 | } 1171 | }, 1172 | "node_modules/make-dir": { 1173 | "version": "3.1.0", 1174 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1175 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1176 | "dependencies": { 1177 | "semver": "^6.0.0" 1178 | }, 1179 | "engines": { 1180 | "node": ">=8" 1181 | }, 1182 | "funding": { 1183 | "url": "https://github.com/sponsors/sindresorhus" 1184 | } 1185 | }, 1186 | "node_modules/make-dir/node_modules/semver": { 1187 | "version": "6.3.0", 1188 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1189 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1190 | "bin": { 1191 | "semver": "bin/semver.js" 1192 | } 1193 | }, 1194 | "node_modules/media-typer": { 1195 | "version": "0.3.0", 1196 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1197 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1198 | "engines": { 1199 | "node": ">= 0.6" 1200 | } 1201 | }, 1202 | "node_modules/memory-pager": { 1203 | "version": "1.5.0", 1204 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1205 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1206 | "optional": true 1207 | }, 1208 | "node_modules/merge-descriptors": { 1209 | "version": "1.0.1", 1210 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1211 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1212 | }, 1213 | "node_modules/methods": { 1214 | "version": "1.1.2", 1215 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1216 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 1217 | "engines": { 1218 | "node": ">= 0.6" 1219 | } 1220 | }, 1221 | "node_modules/mime": { 1222 | "version": "1.6.0", 1223 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1224 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1225 | "bin": { 1226 | "mime": "cli.js" 1227 | }, 1228 | "engines": { 1229 | "node": ">=4" 1230 | } 1231 | }, 1232 | "node_modules/mime-db": { 1233 | "version": "1.52.0", 1234 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1235 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1236 | "engines": { 1237 | "node": ">= 0.6" 1238 | } 1239 | }, 1240 | "node_modules/mime-types": { 1241 | "version": "2.1.35", 1242 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1243 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1244 | "dependencies": { 1245 | "mime-db": "1.52.0" 1246 | }, 1247 | "engines": { 1248 | "node": ">= 0.6" 1249 | } 1250 | }, 1251 | "node_modules/minimatch": { 1252 | "version": "3.1.2", 1253 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1254 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1255 | "dependencies": { 1256 | "brace-expansion": "^1.1.7" 1257 | }, 1258 | "engines": { 1259 | "node": "*" 1260 | } 1261 | }, 1262 | "node_modules/minipass": { 1263 | "version": "4.2.8", 1264 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", 1265 | "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", 1266 | "engines": { 1267 | "node": ">=8" 1268 | } 1269 | }, 1270 | "node_modules/minizlib": { 1271 | "version": "2.1.2", 1272 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 1273 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 1274 | "dependencies": { 1275 | "minipass": "^3.0.0", 1276 | "yallist": "^4.0.0" 1277 | }, 1278 | "engines": { 1279 | "node": ">= 8" 1280 | } 1281 | }, 1282 | "node_modules/minizlib/node_modules/minipass": { 1283 | "version": "3.3.6", 1284 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 1285 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 1286 | "dependencies": { 1287 | "yallist": "^4.0.0" 1288 | }, 1289 | "engines": { 1290 | "node": ">=8" 1291 | } 1292 | }, 1293 | "node_modules/mkdirp": { 1294 | "version": "1.0.4", 1295 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1296 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1297 | "bin": { 1298 | "mkdirp": "bin/cmd.js" 1299 | }, 1300 | "engines": { 1301 | "node": ">=10" 1302 | } 1303 | }, 1304 | "node_modules/moment": { 1305 | "version": "2.29.4", 1306 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 1307 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 1308 | "engines": { 1309 | "node": "*" 1310 | } 1311 | }, 1312 | "node_modules/mongodb": { 1313 | "version": "5.1.0", 1314 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz", 1315 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==", 1316 | "dependencies": { 1317 | "bson": "^5.0.1", 1318 | "mongodb-connection-string-url": "^2.6.0", 1319 | "socks": "^2.7.1" 1320 | }, 1321 | "engines": { 1322 | "node": ">=14.20.1" 1323 | }, 1324 | "optionalDependencies": { 1325 | "saslprep": "^1.0.3" 1326 | }, 1327 | "peerDependencies": { 1328 | "@aws-sdk/credential-providers": "^3.201.0", 1329 | "mongodb-client-encryption": "^2.3.0", 1330 | "snappy": "^7.2.2" 1331 | }, 1332 | "peerDependenciesMeta": { 1333 | "@aws-sdk/credential-providers": { 1334 | "optional": true 1335 | }, 1336 | "mongodb-client-encryption": { 1337 | "optional": true 1338 | }, 1339 | "snappy": { 1340 | "optional": true 1341 | } 1342 | } 1343 | }, 1344 | "node_modules/mongodb-connection-string-url": { 1345 | "version": "2.6.0", 1346 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 1347 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 1348 | "dependencies": { 1349 | "@types/whatwg-url": "^8.2.1", 1350 | "whatwg-url": "^11.0.0" 1351 | } 1352 | }, 1353 | "node_modules/mongoose": { 1354 | "version": "7.0.3", 1355 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.3.tgz", 1356 | "integrity": "sha512-3n8vc1/mssuxKa6vfghSocp3MeiCFYzhX36Ok+PsDNNYzHC9tw3rNkAMLemIwZ2jgXqkZ7CfKOxkzjp/d/SWfg==", 1357 | "dependencies": { 1358 | "bson": "^5.0.1", 1359 | "kareem": "2.5.1", 1360 | "mongodb": "5.1.0", 1361 | "mpath": "0.9.0", 1362 | "mquery": "5.0.0", 1363 | "ms": "2.1.3", 1364 | "sift": "16.0.1" 1365 | }, 1366 | "engines": { 1367 | "node": ">=14.0.0" 1368 | }, 1369 | "funding": { 1370 | "type": "opencollective", 1371 | "url": "https://opencollective.com/mongoose" 1372 | } 1373 | }, 1374 | "node_modules/mongoose/node_modules/ms": { 1375 | "version": "2.1.3", 1376 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1377 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1378 | }, 1379 | "node_modules/morgan": { 1380 | "version": "1.10.0", 1381 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", 1382 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", 1383 | "dependencies": { 1384 | "basic-auth": "~2.0.1", 1385 | "debug": "2.6.9", 1386 | "depd": "~2.0.0", 1387 | "on-finished": "~2.3.0", 1388 | "on-headers": "~1.0.2" 1389 | }, 1390 | "engines": { 1391 | "node": ">= 0.8.0" 1392 | } 1393 | }, 1394 | "node_modules/morgan/node_modules/on-finished": { 1395 | "version": "2.3.0", 1396 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1397 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", 1398 | "dependencies": { 1399 | "ee-first": "1.1.1" 1400 | }, 1401 | "engines": { 1402 | "node": ">= 0.8" 1403 | } 1404 | }, 1405 | "node_modules/mpath": { 1406 | "version": "0.9.0", 1407 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 1408 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 1409 | "engines": { 1410 | "node": ">=4.0.0" 1411 | } 1412 | }, 1413 | "node_modules/mquery": { 1414 | "version": "5.0.0", 1415 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 1416 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 1417 | "dependencies": { 1418 | "debug": "4.x" 1419 | }, 1420 | "engines": { 1421 | "node": ">=14.0.0" 1422 | } 1423 | }, 1424 | "node_modules/mquery/node_modules/debug": { 1425 | "version": "4.3.4", 1426 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1427 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1428 | "dependencies": { 1429 | "ms": "2.1.2" 1430 | }, 1431 | "engines": { 1432 | "node": ">=6.0" 1433 | }, 1434 | "peerDependenciesMeta": { 1435 | "supports-color": { 1436 | "optional": true 1437 | } 1438 | } 1439 | }, 1440 | "node_modules/mquery/node_modules/ms": { 1441 | "version": "2.1.2", 1442 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1443 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1444 | }, 1445 | "node_modules/ms": { 1446 | "version": "2.0.0", 1447 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1448 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1449 | }, 1450 | "node_modules/negotiator": { 1451 | "version": "0.6.3", 1452 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1453 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1454 | "engines": { 1455 | "node": ">= 0.6" 1456 | } 1457 | }, 1458 | "node_modules/node-addon-api": { 1459 | "version": "5.1.0", 1460 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", 1461 | "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" 1462 | }, 1463 | "node_modules/node-fetch": { 1464 | "version": "2.6.9", 1465 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", 1466 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", 1467 | "dependencies": { 1468 | "whatwg-url": "^5.0.0" 1469 | }, 1470 | "engines": { 1471 | "node": "4.x || >=6.0.0" 1472 | }, 1473 | "peerDependencies": { 1474 | "encoding": "^0.1.0" 1475 | }, 1476 | "peerDependenciesMeta": { 1477 | "encoding": { 1478 | "optional": true 1479 | } 1480 | } 1481 | }, 1482 | "node_modules/node-fetch/node_modules/tr46": { 1483 | "version": "0.0.3", 1484 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1485 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1486 | }, 1487 | "node_modules/node-fetch/node_modules/webidl-conversions": { 1488 | "version": "3.0.1", 1489 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1490 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1491 | }, 1492 | "node_modules/node-fetch/node_modules/whatwg-url": { 1493 | "version": "5.0.0", 1494 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1495 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1496 | "dependencies": { 1497 | "tr46": "~0.0.3", 1498 | "webidl-conversions": "^3.0.0" 1499 | } 1500 | }, 1501 | "node_modules/nodemon": { 1502 | "version": "2.0.22", 1503 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", 1504 | "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", 1505 | "dependencies": { 1506 | "chokidar": "^3.5.2", 1507 | "debug": "^3.2.7", 1508 | "ignore-by-default": "^1.0.1", 1509 | "minimatch": "^3.1.2", 1510 | "pstree.remy": "^1.1.8", 1511 | "semver": "^5.7.1", 1512 | "simple-update-notifier": "^1.0.7", 1513 | "supports-color": "^5.5.0", 1514 | "touch": "^3.1.0", 1515 | "undefsafe": "^2.0.5" 1516 | }, 1517 | "bin": { 1518 | "nodemon": "bin/nodemon.js" 1519 | }, 1520 | "engines": { 1521 | "node": ">=8.10.0" 1522 | }, 1523 | "funding": { 1524 | "type": "opencollective", 1525 | "url": "https://opencollective.com/nodemon" 1526 | } 1527 | }, 1528 | "node_modules/nodemon/node_modules/debug": { 1529 | "version": "3.2.7", 1530 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1531 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1532 | "dependencies": { 1533 | "ms": "^2.1.1" 1534 | } 1535 | }, 1536 | "node_modules/nodemon/node_modules/ms": { 1537 | "version": "2.1.3", 1538 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1539 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1540 | }, 1541 | "node_modules/nopt": { 1542 | "version": "1.0.10", 1543 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1544 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 1545 | "dependencies": { 1546 | "abbrev": "1" 1547 | }, 1548 | "bin": { 1549 | "nopt": "bin/nopt.js" 1550 | }, 1551 | "engines": { 1552 | "node": "*" 1553 | } 1554 | }, 1555 | "node_modules/normalize-path": { 1556 | "version": "3.0.0", 1557 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1558 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1559 | "engines": { 1560 | "node": ">=0.10.0" 1561 | } 1562 | }, 1563 | "node_modules/npmlog": { 1564 | "version": "5.0.1", 1565 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", 1566 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", 1567 | "dependencies": { 1568 | "are-we-there-yet": "^2.0.0", 1569 | "console-control-strings": "^1.1.0", 1570 | "gauge": "^3.0.0", 1571 | "set-blocking": "^2.0.0" 1572 | } 1573 | }, 1574 | "node_modules/object-assign": { 1575 | "version": "4.1.1", 1576 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1577 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1578 | "engines": { 1579 | "node": ">=0.10.0" 1580 | } 1581 | }, 1582 | "node_modules/object-inspect": { 1583 | "version": "1.12.3", 1584 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 1585 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 1586 | "funding": { 1587 | "url": "https://github.com/sponsors/ljharb" 1588 | } 1589 | }, 1590 | "node_modules/on-finished": { 1591 | "version": "2.4.1", 1592 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1593 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1594 | "dependencies": { 1595 | "ee-first": "1.1.1" 1596 | }, 1597 | "engines": { 1598 | "node": ">= 0.8" 1599 | } 1600 | }, 1601 | "node_modules/on-headers": { 1602 | "version": "1.0.2", 1603 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1604 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 1605 | "engines": { 1606 | "node": ">= 0.8" 1607 | } 1608 | }, 1609 | "node_modules/once": { 1610 | "version": "1.4.0", 1611 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1612 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1613 | "dependencies": { 1614 | "wrappy": "1" 1615 | } 1616 | }, 1617 | "node_modules/parseurl": { 1618 | "version": "1.3.3", 1619 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1620 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1621 | "engines": { 1622 | "node": ">= 0.8" 1623 | } 1624 | }, 1625 | "node_modules/path-is-absolute": { 1626 | "version": "1.0.1", 1627 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1628 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1629 | "engines": { 1630 | "node": ">=0.10.0" 1631 | } 1632 | }, 1633 | "node_modules/path-to-regexp": { 1634 | "version": "0.1.7", 1635 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1636 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1637 | }, 1638 | "node_modules/picomatch": { 1639 | "version": "2.3.1", 1640 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1641 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1642 | "engines": { 1643 | "node": ">=8.6" 1644 | }, 1645 | "funding": { 1646 | "url": "https://github.com/sponsors/jonschlinkert" 1647 | } 1648 | }, 1649 | "node_modules/proxy-addr": { 1650 | "version": "2.0.7", 1651 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1652 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1653 | "dependencies": { 1654 | "forwarded": "0.2.0", 1655 | "ipaddr.js": "1.9.1" 1656 | }, 1657 | "engines": { 1658 | "node": ">= 0.10" 1659 | } 1660 | }, 1661 | "node_modules/proxy-from-env": { 1662 | "version": "1.1.0", 1663 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 1664 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 1665 | }, 1666 | "node_modules/pstree.remy": { 1667 | "version": "1.1.8", 1668 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 1669 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" 1670 | }, 1671 | "node_modules/punycode": { 1672 | "version": "2.3.0", 1673 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1674 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1675 | "engines": { 1676 | "node": ">=6" 1677 | } 1678 | }, 1679 | "node_modules/qs": { 1680 | "version": "6.11.0", 1681 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1682 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1683 | "dependencies": { 1684 | "side-channel": "^1.0.4" 1685 | }, 1686 | "engines": { 1687 | "node": ">=0.6" 1688 | }, 1689 | "funding": { 1690 | "url": "https://github.com/sponsors/ljharb" 1691 | } 1692 | }, 1693 | "node_modules/range-parser": { 1694 | "version": "1.2.1", 1695 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1696 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1697 | "engines": { 1698 | "node": ">= 0.6" 1699 | } 1700 | }, 1701 | "node_modules/raw-body": { 1702 | "version": "2.5.1", 1703 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1704 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1705 | "dependencies": { 1706 | "bytes": "3.1.2", 1707 | "http-errors": "2.0.0", 1708 | "iconv-lite": "0.4.24", 1709 | "unpipe": "1.0.0" 1710 | }, 1711 | "engines": { 1712 | "node": ">= 0.8" 1713 | } 1714 | }, 1715 | "node_modules/readable-stream": { 1716 | "version": "3.6.2", 1717 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1718 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1719 | "dependencies": { 1720 | "inherits": "^2.0.3", 1721 | "string_decoder": "^1.1.1", 1722 | "util-deprecate": "^1.0.1" 1723 | }, 1724 | "engines": { 1725 | "node": ">= 6" 1726 | } 1727 | }, 1728 | "node_modules/readdirp": { 1729 | "version": "3.6.0", 1730 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1731 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1732 | "dependencies": { 1733 | "picomatch": "^2.2.1" 1734 | }, 1735 | "engines": { 1736 | "node": ">=8.10.0" 1737 | } 1738 | }, 1739 | "node_modules/require-directory": { 1740 | "version": "2.1.1", 1741 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1742 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1743 | "engines": { 1744 | "node": ">=0.10.0" 1745 | } 1746 | }, 1747 | "node_modules/rimraf": { 1748 | "version": "3.0.2", 1749 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1750 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1751 | "dependencies": { 1752 | "glob": "^7.1.3" 1753 | }, 1754 | "bin": { 1755 | "rimraf": "bin.js" 1756 | }, 1757 | "funding": { 1758 | "url": "https://github.com/sponsors/isaacs" 1759 | } 1760 | }, 1761 | "node_modules/rxjs": { 1762 | "version": "7.8.0", 1763 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", 1764 | "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", 1765 | "dependencies": { 1766 | "tslib": "^2.1.0" 1767 | } 1768 | }, 1769 | "node_modules/safe-buffer": { 1770 | "version": "5.2.1", 1771 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1772 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1773 | "funding": [ 1774 | { 1775 | "type": "github", 1776 | "url": "https://github.com/sponsors/feross" 1777 | }, 1778 | { 1779 | "type": "patreon", 1780 | "url": "https://www.patreon.com/feross" 1781 | }, 1782 | { 1783 | "type": "consulting", 1784 | "url": "https://feross.org/support" 1785 | } 1786 | ] 1787 | }, 1788 | "node_modules/safer-buffer": { 1789 | "version": "2.1.2", 1790 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1791 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1792 | }, 1793 | "node_modules/saslprep": { 1794 | "version": "1.0.3", 1795 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1796 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1797 | "optional": true, 1798 | "dependencies": { 1799 | "sparse-bitfield": "^3.0.3" 1800 | }, 1801 | "engines": { 1802 | "node": ">=6" 1803 | } 1804 | }, 1805 | "node_modules/semver": { 1806 | "version": "5.7.1", 1807 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1808 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1809 | "bin": { 1810 | "semver": "bin/semver" 1811 | } 1812 | }, 1813 | "node_modules/send": { 1814 | "version": "0.18.0", 1815 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1816 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1817 | "dependencies": { 1818 | "debug": "2.6.9", 1819 | "depd": "2.0.0", 1820 | "destroy": "1.2.0", 1821 | "encodeurl": "~1.0.2", 1822 | "escape-html": "~1.0.3", 1823 | "etag": "~1.8.1", 1824 | "fresh": "0.5.2", 1825 | "http-errors": "2.0.0", 1826 | "mime": "1.6.0", 1827 | "ms": "2.1.3", 1828 | "on-finished": "2.4.1", 1829 | "range-parser": "~1.2.1", 1830 | "statuses": "2.0.1" 1831 | }, 1832 | "engines": { 1833 | "node": ">= 0.8.0" 1834 | } 1835 | }, 1836 | "node_modules/send/node_modules/ms": { 1837 | "version": "2.1.3", 1838 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1839 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1840 | }, 1841 | "node_modules/serve-static": { 1842 | "version": "1.15.0", 1843 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1844 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1845 | "dependencies": { 1846 | "encodeurl": "~1.0.2", 1847 | "escape-html": "~1.0.3", 1848 | "parseurl": "~1.3.3", 1849 | "send": "0.18.0" 1850 | }, 1851 | "engines": { 1852 | "node": ">= 0.8.0" 1853 | } 1854 | }, 1855 | "node_modules/set-blocking": { 1856 | "version": "2.0.0", 1857 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1858 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 1859 | }, 1860 | "node_modules/setprototypeof": { 1861 | "version": "1.2.0", 1862 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1863 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1864 | }, 1865 | "node_modules/shell-quote": { 1866 | "version": "1.8.1", 1867 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", 1868 | "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", 1869 | "funding": { 1870 | "url": "https://github.com/sponsors/ljharb" 1871 | } 1872 | }, 1873 | "node_modules/side-channel": { 1874 | "version": "1.0.4", 1875 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1876 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1877 | "dependencies": { 1878 | "call-bind": "^1.0.0", 1879 | "get-intrinsic": "^1.0.2", 1880 | "object-inspect": "^1.9.0" 1881 | }, 1882 | "funding": { 1883 | "url": "https://github.com/sponsors/ljharb" 1884 | } 1885 | }, 1886 | "node_modules/sift": { 1887 | "version": "16.0.1", 1888 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 1889 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 1890 | }, 1891 | "node_modules/signal-exit": { 1892 | "version": "3.0.7", 1893 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1894 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1895 | }, 1896 | "node_modules/simple-update-notifier": { 1897 | "version": "1.1.0", 1898 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", 1899 | "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", 1900 | "dependencies": { 1901 | "semver": "~7.0.0" 1902 | }, 1903 | "engines": { 1904 | "node": ">=8.10.0" 1905 | } 1906 | }, 1907 | "node_modules/simple-update-notifier/node_modules/semver": { 1908 | "version": "7.0.0", 1909 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", 1910 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", 1911 | "bin": { 1912 | "semver": "bin/semver.js" 1913 | } 1914 | }, 1915 | "node_modules/smart-buffer": { 1916 | "version": "4.2.0", 1917 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1918 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1919 | "engines": { 1920 | "node": ">= 6.0.0", 1921 | "npm": ">= 3.0.0" 1922 | } 1923 | }, 1924 | "node_modules/socks": { 1925 | "version": "2.7.1", 1926 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 1927 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 1928 | "dependencies": { 1929 | "ip": "^2.0.0", 1930 | "smart-buffer": "^4.2.0" 1931 | }, 1932 | "engines": { 1933 | "node": ">= 10.13.0", 1934 | "npm": ">= 3.0.0" 1935 | } 1936 | }, 1937 | "node_modules/sparse-bitfield": { 1938 | "version": "3.0.3", 1939 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1940 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1941 | "optional": true, 1942 | "dependencies": { 1943 | "memory-pager": "^1.0.2" 1944 | } 1945 | }, 1946 | "node_modules/spawn-command": { 1947 | "version": "0.0.2-1", 1948 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", 1949 | "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==" 1950 | }, 1951 | "node_modules/statuses": { 1952 | "version": "2.0.1", 1953 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1954 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1955 | "engines": { 1956 | "node": ">= 0.8" 1957 | } 1958 | }, 1959 | "node_modules/string_decoder": { 1960 | "version": "1.3.0", 1961 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1962 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1963 | "dependencies": { 1964 | "safe-buffer": "~5.2.0" 1965 | } 1966 | }, 1967 | "node_modules/string-width": { 1968 | "version": "4.2.3", 1969 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1970 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1971 | "dependencies": { 1972 | "emoji-regex": "^8.0.0", 1973 | "is-fullwidth-code-point": "^3.0.0", 1974 | "strip-ansi": "^6.0.1" 1975 | }, 1976 | "engines": { 1977 | "node": ">=8" 1978 | } 1979 | }, 1980 | "node_modules/strip-ansi": { 1981 | "version": "6.0.1", 1982 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1983 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1984 | "dependencies": { 1985 | "ansi-regex": "^5.0.1" 1986 | }, 1987 | "engines": { 1988 | "node": ">=8" 1989 | } 1990 | }, 1991 | "node_modules/supports-color": { 1992 | "version": "5.5.0", 1993 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1994 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1995 | "dependencies": { 1996 | "has-flag": "^3.0.0" 1997 | }, 1998 | "engines": { 1999 | "node": ">=4" 2000 | } 2001 | }, 2002 | "node_modules/tar": { 2003 | "version": "6.1.13", 2004 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", 2005 | "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", 2006 | "dependencies": { 2007 | "chownr": "^2.0.0", 2008 | "fs-minipass": "^2.0.0", 2009 | "minipass": "^4.0.0", 2010 | "minizlib": "^2.1.1", 2011 | "mkdirp": "^1.0.3", 2012 | "yallist": "^4.0.0" 2013 | }, 2014 | "engines": { 2015 | "node": ">=10" 2016 | } 2017 | }, 2018 | "node_modules/to-regex-range": { 2019 | "version": "5.0.1", 2020 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2021 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2022 | "dependencies": { 2023 | "is-number": "^7.0.0" 2024 | }, 2025 | "engines": { 2026 | "node": ">=8.0" 2027 | } 2028 | }, 2029 | "node_modules/toidentifier": { 2030 | "version": "1.0.1", 2031 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2032 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 2033 | "engines": { 2034 | "node": ">=0.6" 2035 | } 2036 | }, 2037 | "node_modules/touch": { 2038 | "version": "3.1.0", 2039 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 2040 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 2041 | "dependencies": { 2042 | "nopt": "~1.0.10" 2043 | }, 2044 | "bin": { 2045 | "nodetouch": "bin/nodetouch.js" 2046 | } 2047 | }, 2048 | "node_modules/tr46": { 2049 | "version": "3.0.0", 2050 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 2051 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 2052 | "dependencies": { 2053 | "punycode": "^2.1.1" 2054 | }, 2055 | "engines": { 2056 | "node": ">=12" 2057 | } 2058 | }, 2059 | "node_modules/tree-kill": { 2060 | "version": "1.2.2", 2061 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 2062 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 2063 | "bin": { 2064 | "tree-kill": "cli.js" 2065 | } 2066 | }, 2067 | "node_modules/tslib": { 2068 | "version": "2.5.0", 2069 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 2070 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 2071 | }, 2072 | "node_modules/type-is": { 2073 | "version": "1.6.18", 2074 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2075 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2076 | "dependencies": { 2077 | "media-typer": "0.3.0", 2078 | "mime-types": "~2.1.24" 2079 | }, 2080 | "engines": { 2081 | "node": ">= 0.6" 2082 | } 2083 | }, 2084 | "node_modules/undefsafe": { 2085 | "version": "2.0.5", 2086 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 2087 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" 2088 | }, 2089 | "node_modules/unpipe": { 2090 | "version": "1.0.0", 2091 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2092 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 2093 | "engines": { 2094 | "node": ">= 0.8" 2095 | } 2096 | }, 2097 | "node_modules/util-deprecate": { 2098 | "version": "1.0.2", 2099 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2100 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2101 | }, 2102 | "node_modules/utils-merge": { 2103 | "version": "1.0.1", 2104 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2105 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 2106 | "engines": { 2107 | "node": ">= 0.4.0" 2108 | } 2109 | }, 2110 | "node_modules/validator": { 2111 | "version": "13.9.0", 2112 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", 2113 | "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", 2114 | "engines": { 2115 | "node": ">= 0.10" 2116 | } 2117 | }, 2118 | "node_modules/vary": { 2119 | "version": "1.1.2", 2120 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2121 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 2122 | "engines": { 2123 | "node": ">= 0.8" 2124 | } 2125 | }, 2126 | "node_modules/webidl-conversions": { 2127 | "version": "7.0.0", 2128 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 2129 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 2130 | "engines": { 2131 | "node": ">=12" 2132 | } 2133 | }, 2134 | "node_modules/whatwg-url": { 2135 | "version": "11.0.0", 2136 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 2137 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 2138 | "dependencies": { 2139 | "tr46": "^3.0.0", 2140 | "webidl-conversions": "^7.0.0" 2141 | }, 2142 | "engines": { 2143 | "node": ">=12" 2144 | } 2145 | }, 2146 | "node_modules/wide-align": { 2147 | "version": "1.1.5", 2148 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 2149 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 2150 | "dependencies": { 2151 | "string-width": "^1.0.2 || 2 || 3 || 4" 2152 | } 2153 | }, 2154 | "node_modules/wrap-ansi": { 2155 | "version": "7.0.0", 2156 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2157 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2158 | "dependencies": { 2159 | "ansi-styles": "^4.0.0", 2160 | "string-width": "^4.1.0", 2161 | "strip-ansi": "^6.0.0" 2162 | }, 2163 | "engines": { 2164 | "node": ">=10" 2165 | }, 2166 | "funding": { 2167 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2168 | } 2169 | }, 2170 | "node_modules/wrappy": { 2171 | "version": "1.0.2", 2172 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2173 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 2174 | }, 2175 | "node_modules/y18n": { 2176 | "version": "5.0.8", 2177 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2178 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 2179 | "engines": { 2180 | "node": ">=10" 2181 | } 2182 | }, 2183 | "node_modules/yallist": { 2184 | "version": "4.0.0", 2185 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2186 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 2187 | }, 2188 | "node_modules/yargs": { 2189 | "version": "17.7.1", 2190 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", 2191 | "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", 2192 | "dependencies": { 2193 | "cliui": "^8.0.1", 2194 | "escalade": "^3.1.1", 2195 | "get-caller-file": "^2.0.5", 2196 | "require-directory": "^2.1.1", 2197 | "string-width": "^4.2.3", 2198 | "y18n": "^5.0.5", 2199 | "yargs-parser": "^21.1.1" 2200 | }, 2201 | "engines": { 2202 | "node": ">=12" 2203 | } 2204 | }, 2205 | "node_modules/yargs-parser": { 2206 | "version": "21.1.1", 2207 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 2208 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 2209 | "engines": { 2210 | "node": ">=12" 2211 | } 2212 | } 2213 | } 2214 | } 2215 | -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "type": "module", 7 | "scripts": { 8 | "dev": "nodemon app.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "axios": "^1.3.5", 15 | "bcrypt": "^5.1.0", 16 | "concurrently": "^8.0.1", 17 | "cookie-parser": "^1.4.6", 18 | "cors": "^2.8.5", 19 | "dotenv": "^16.0.3", 20 | "express": "^4.18.2", 21 | "helmet": "^6.1.5", 22 | "jsonwebtoken": "^9.0.0", 23 | "moment": "^2.29.4", 24 | "mongoose": "^7.0.3", 25 | "morgan": "^1.10.0", 26 | "nodemon": "^2.0.22", 27 | "validator": "^13.9.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /frontend/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started with Create React App 2 | 3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 4 | 5 | ## Available Scripts 6 | 7 | In the project directory, you can run: 8 | 9 | ### `npm start` 10 | 11 | Runs the app in the development mode.\ 12 | Open [http://localhost:3000](http://localhost:3000) to view it in your browser. 13 | 14 | The page will reload when you make changes.\ 15 | You may also see any lint errors in the console. 16 | 17 | ### `npm test` 18 | 19 | Launches the test runner in the interactive watch mode.\ 20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. 21 | 22 | ### `npm run build` 23 | 24 | Builds the app for production to the `build` folder.\ 25 | It correctly bundles React in production mode and optimizes the build for the best performance. 26 | 27 | The build is minified and the filenames include the hashes.\ 28 | Your app is ready to be deployed! 29 | 30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. 31 | 32 | ### `npm run eject` 33 | 34 | **Note: this is a one-way operation. Once you `eject`, you can't go back!** 35 | 36 | If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. 37 | 38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. 39 | 40 | You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. 41 | 42 | ## Learn More 43 | 44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). 45 | 46 | To learn React, check out the [React documentation](https://reactjs.org/). 47 | 48 | ### Code Splitting 49 | 50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) 51 | 52 | ### Analyzing the Bundle Size 53 | 54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) 55 | 56 | ### Making a Progressive Web App 57 | 58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) 59 | 60 | ### Advanced Configuration 61 | 62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) 63 | 64 | ### Deployment 65 | 66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) 67 | 68 | ### `npm run build` fails to minify 69 | 70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) 71 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@emotion/react": "^11.10.6", 7 | "@emotion/styled": "^11.10.6", 8 | "@mui/icons-material": "^5.11.16", 9 | "@mui/material": "^5.12.0", 10 | "@testing-library/jest-dom": "^5.16.5", 11 | "@testing-library/react": "^13.4.0", 12 | "@testing-library/user-event": "^13.5.0", 13 | "axios": "^1.3.5", 14 | "bootstrap": "^5.2.3", 15 | "moment": "^2.29.4", 16 | "react": "^18.2.0", 17 | "react-bootstrap": "^2.7.3", 18 | "react-date-range": "^1.4.0", 19 | "react-datepicker": "^4.11.0", 20 | "react-dom": "^18.2.0", 21 | "react-hot-toast": "^2.4.1", 22 | "react-router-dom": "^6.10.0", 23 | "react-scripts": "5.0.1", 24 | "react-toastify": "^9.1.2", 25 | "react-tsparticles": "^2.9.3", 26 | "tsparticles": "^2.9.3", 27 | "unique-names-generator": "^4.7.1", 28 | "web-vitals": "^2.1.4" 29 | }, 30 | "scripts": { 31 | "start": "react-scripts start", 32 | "build": "react-scripts build", 33 | "test": "react-scripts test", 34 | "eject": "react-scripts eject" 35 | }, 36 | "eslintConfig": { 37 | "extends": [ 38 | "react-app", 39 | "react-app/jest" 40 | ] 41 | }, 42 | "browserslist": { 43 | "production": [ 44 | ">0.2%", 45 | "not dead", 46 | "not op_mini all" 47 | ], 48 | "development": [ 49 | "last 1 chrome version", 50 | "last 1 firefox version", 51 | "last 1 safari version" 52 | ] 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Priyanshu9898/Expense-Tracker-App/24f782df2f7cae45d2866526a3698ed915553f13/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 19 | 20 |203 | Don't Have an Account?{" "} 204 | 205 | Register 206 | 207 |
208 |Already have an account? Login
187 |{card.content}
21 |Date | 99 |Title | 100 |Amount | 101 |Type | 102 |Category | 103 |Action | 104 |
---|---|---|---|---|---|
{moment(item.date).format("YYYY-MM-DD")} | 110 |{item.title} | 111 |{item.amount} | 112 |{item.transactionType} | 113 |{item.category} | 114 |
115 |
116 |
254 |
133 |
249 | >
250 | ) : (
251 | <>>
252 | )}
253 | |
255 |