├── projects source codes ├── .gitignore ├── 2.getrandom │ ├── .gitignore │ ├── public │ │ ├── assets │ │ │ ├── styles │ │ │ │ ├── style.css │ │ │ │ └── time.css │ │ │ └── js │ │ │ │ ├── app.js │ │ │ │ ├── time.js │ │ │ │ └── random.js │ │ ├── index.html │ │ ├── time.html │ │ └── random.html │ ├── package.json │ ├── index.js │ └── package-lock.json ├── 1.simple API servers todo and reminder │ ├── startup │ │ ├── logger.js │ │ ├── db.js │ │ └── routers.js │ ├── .gitignore │ ├── public │ │ ├── assets │ │ │ ├── js │ │ │ │ └── main.js │ │ │ └── styles │ │ │ │ └── style.css │ │ └── index.html │ ├── config │ │ └── default.json │ ├── routes │ │ ├── auth.js │ │ ├── category.js │ │ ├── todo.js │ │ └── user.js │ ├── middleware │ │ ├── error.js │ │ ├── role.js │ │ └── auth.js │ ├── index.js │ ├── views │ │ └── index.ejs │ ├── package.json │ ├── models │ │ ├── category.js │ │ ├── usersHasCategory.js │ │ ├── todo.js │ │ └── user.js │ ├── controller │ │ ├── authController.js │ │ ├── userController.js │ │ ├── todoController.js │ │ └── categoryController.js │ └── package-lock.json └── 3.url_shortener │ ├── config │ └── .env │ ├── utils │ ├── db.js │ ├── options.js │ └── utils.js │ ├── models │ └── url.js │ ├── package.json │ ├── index.js │ ├── routes │ └── url.js │ └── package-lock.json └── README.md /projects source codes/.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules -------------------------------------------------------------------------------- /projects source codes/2.getrandom/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /projects source codes/2.getrandom/public/assets/styles/style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/startup/logger.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /projects source codes/2.getrandom/public/assets/js/app.js: -------------------------------------------------------------------------------- 1 | let a = "sfsd"; 2 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/public/assets/js/main.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/public/assets/styles/style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/config/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "jwtAuthToken":"parol12345" 3 | } -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/config/.env: -------------------------------------------------------------------------------- 1 | PORT='5000' 2 | DB_URL='mongodb://localhost/urlshortener' 3 | BASE='http://localhost:5000' -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/routes/auth.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const authContrller = require('../controller/authController'); 3 | 4 | router.post('/', authContrller.postUser); 5 | 6 | module.exports = router; -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/middleware/error.js: -------------------------------------------------------------------------------- 1 | const winston = require('winston'); 2 | 3 | module.exports = function(err,req,res,next){ 4 | winston.error(err.message,err); 5 | res.status(500).send("Serverda kutilmagan xato ro'y berdi"); 6 | } -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | 4 | // require('./startup/logger')() 5 | require('./startup/db')(); 6 | require('./startup/routers')(app); 7 | 8 | const port = process.env.PORT || 5500; 9 | 10 | app.listen(port, () => { 11 | console.log(`server running on port ${port}`); 12 | }); -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/startup/db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | module.exports = function(){ 4 | mongoose.connect("mongodb://127.0.0.1/todo") 5 | .then(()=>{ 6 | console.log('DB connection is succsess'); 7 | }) 8 | .catch(err=>{ 9 | console.log(`db connection error: ${err}`); 10 | }); 11 | } -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/utils/db.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const connectDB = async () => { 4 | try { 5 | mongoose.connect(process.env.DB_URL, { 6 | useNewUrlParser: true, 7 | useUnifiedTopology: true, 8 | }).then(()=>console.log("DB connection successful")) 9 | } catch (err) { 10 | console.log(err); 11 | process.exit(1); 12 | } 13 | }; 14 | 15 | export default connectDB; 16 | -------------------------------------------------------------------------------- /projects source codes/2.getrandom/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "getrandom", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node index.js", 9 | "dev": "nodemon index.js" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "express": "^4.18.2" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/middleware/role.js: -------------------------------------------------------------------------------- 1 | //admin 2 | const admin = function(req,res,next){ 3 | if(req.user.role !== "admin"){ 4 | return res.status(403).send("Murojat rad etildi"); 5 | } 6 | next(); 7 | } 8 | 9 | //user 10 | const user = function(req,res,next){ 11 | if(!req.user.role){ 12 | return res.status(403).send("Murojat rad etildi"); 13 | } 14 | next(); 15 | } 16 | 17 | module.exports.admin = admin; 18 | module.exports.user = user; -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/middleware/auth.js: -------------------------------------------------------------------------------- 1 | const jwt = require('jsonwebtoken'); 2 | const config = require('config'); 3 | 4 | module.exports = function auth(req,res,next){ 5 | const token = req.header('x-auth-token'); 6 | if(!token) 7 | return res.status(401).send("Token yuq"); 8 | try{ 9 | const decoded = jwt.verify(token,config.get('jwtAuthToken')); 10 | req.user = decoded; 11 | next(); 12 | } 13 | catch(err){ 14 | return res.status(400).send('Yokin yaroqsiz'); 15 | } 16 | } -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/models/url.js: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | const UrlSchema = new mongoose.Schema({ 4 | urlId: { 5 | type: String, 6 | required: true, 7 | }, 8 | origUrl: { 9 | type: String, 10 | required: true, 11 | }, 12 | shortUrl: { 13 | type: String, 14 | required: true, 15 | }, 16 | clicks: { 17 | type: Number, 18 | required: true, 19 | default: 0, 20 | }, 21 | date: { 22 | type: String, 23 | default: Date.now, 24 | }, 25 | }); 26 | 27 | 28 | export default mongoose.model("Url", UrlSchema); -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "url_shortener", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "start": "node index.js", 9 | "dev": "nodemon index.js" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "dotenv": "^16.3.1", 16 | "express": "^4.18.2", 17 | "joi": "^17.10.0", 18 | "mongoose": "^7.4.5", 19 | "nanoid": "^4.0.2", 20 | "swagger-jsdoc": "^6.2.8", 21 | "swagger-ui-express": "^5.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/routes/category.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const categoryController = require('../controller/categoryController'); 3 | const auth = require('../middleware/auth'); 4 | //get category 5 | router.get('/', categoryController.getCategory); 6 | 7 | // //add category 8 | router.post('/',auth , categoryController.addCategory); 9 | 10 | //update category 11 | router.put('/:id', auth, categoryController.updateCategory) 12 | 13 | // //delete category 14 | router.delete('/:id', auth, categoryController.deleteCategory); 15 | 16 | 17 | 18 | module.exports = router; -------------------------------------------------------------------------------- /projects source codes/2.getrandom/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const app = express(); 3 | 4 | app.use(express.json()); 5 | app.use(express.urlencoded({ extended: false })); 6 | app.use(express.static("public")); 7 | // app.set("view engine", "ejs"); 8 | 9 | app.get("/", (req, res) => { 10 | res.render("index"); 11 | }); 12 | // app.get("/random", (req, res) => { 13 | // res.render("random"); 14 | // }); 15 | // app.get("/time", (req, res) => { 16 | // res.render("time"); 17 | // }); 18 | 19 | const port = process.env.PORT || 5000; 20 | app.listen(port, () => { 21 | console.log(`Server is running on port ${port}`); 22 | }); 23 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Simple APIs todo and reminder 8 | 9 | 10 | 11 |

Simple APIs todo and reminder

12 |

13 | /api/todos 14 | 15 |

16 | 17 | 18 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/routes/todo.js: -------------------------------------------------------------------------------- 1 | const router = require("express").Router(); 2 | const { Todo } = require('../models/todo'); 3 | const todoController = require('../controller/todoController'); 4 | const auth = require("../middleware/auth"); 5 | 6 | //get all todos 7 | router.get('/', auth, todoController.getAllTodos); 8 | 9 | //get a todo with id 10 | router.get("/:id", todoController.getTodo); 11 | 12 | //get a todo with id 13 | router.post("/", auth, todoController.addTodo); 14 | 15 | router.put("/:id", auth, todoController.editTodo); 16 | 17 | router.delete("/:id", auth, todoController.deleteTodo); 18 | 19 | 20 | 21 | module.exports = router; -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/views/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Simple APIs todo and reminder 8 | 9 | 10 | 11 |

Simple APIs todo and reminder

12 |

13 | /api/todos 14 | 15 |

16 | 17 | 18 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/routes/user.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const userController = require('../controller/userController'); 3 | const auth = require('../middleware/auth'); 4 | const { user, admin } = require('../middleware/role'); 5 | 6 | // get all users 7 | router.get('/', auth, userController.getAllUsers); 8 | 9 | //get user with id 10 | router.get('/:id', auth, userController.getUser); 11 | 12 | // add user 13 | router.post('/', userController.postUser); 14 | 15 | //update user 16 | router.put('/:id', auth, userController.putUser); 17 | 18 | //delete user 19 | router.delete('/:id', auth, admin, userController.deleteUser); 20 | 21 | module.exports = router; -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/utils/options.js: -------------------------------------------------------------------------------- 1 | const options = { 2 | definition: { 3 | openapi: "3.1.0", 4 | info: { 5 | title: "URL shortener API with Swagger", 6 | version: "0.1.0", 7 | description: 8 | "This is a simple url shortener application made with Express and documented with Swagger", 9 | license: { 10 | name: "MIT", 11 | url: "https://spdx.org/licenses/MIT.html", 12 | }, 13 | contact: { 14 | url: "https://github.com/qobulovasror", 15 | email: "qobulovasror0@gmail.com", 16 | }, 17 | }, 18 | servers: [ 19 | { 20 | url: "http://localhost:3000", 21 | description: 'Development server', 22 | }, 23 | ], 24 | }, 25 | apis: ["./routes/*.js"], 26 | }; 27 | 28 | export default options; -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "1.simple-api-servers-todo-and-reminder", 3 | "version": "1.0.0", 4 | "description": "this is application for working API", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node index.js", 9 | "dev": "nodemon index.js" 10 | }, 11 | "keywords": [ 12 | "simple API", 13 | "todo", 14 | "reminder" 15 | ], 16 | "author": "Qobulov Asror", 17 | "license": "ISC", 18 | "dependencies": { 19 | "bcrypt": "^5.1.0", 20 | "config": "^3.3.9", 21 | "ejs": "^3.1.9", 22 | "express": "^4.18.2", 23 | "joi": "^17.9.2", 24 | "jsonwebtoken": "^9.0.0", 25 | "lodash": "^4.17.21", 26 | "mongoose": "^7.1.2", 27 | "winston": "^3.9.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /projects source codes/2.getrandom/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Home 8 | 12 | 13 | 14 | 15 |
16 |
17 |
18 | random 19 |
20 |
21 | timer 22 |
23 |
24 |
25 | 26 | 27 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/models/category.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Joi = require('joi'); 3 | 4 | const CategorySchema = new mongoose.Schema({ 5 | name: { 6 | type: String, 7 | required: true, 8 | unique:true, 9 | minlength: 3, 10 | maxlength: 50, 11 | }, 12 | icon: { 13 | type: String, 14 | default: 'none', 15 | } 16 | }); 17 | 18 | const Category = mongoose.model('Category', CategorySchema, 'category'); 19 | 20 | const categoryValidate = (category)=> { 21 | const categoryValidateSchema = Joi.object({ 22 | name: Joi.string().required().min(3).max(50), 23 | icon: Joi.string(), 24 | userId: Joi.string().required() 25 | }); 26 | return categoryValidateSchema.validate(category) 27 | } 28 | 29 | module.exports = { 30 | categoryValidate, 31 | Category 32 | }; -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/models/usersHasCategory.js: -------------------------------------------------------------------------------- 1 | const Joi = require('joi'); 2 | const mongoose = require('mongoose'); 3 | 4 | const UsersHasCategorySchema = new mongoose.Schema({ 5 | userId: { 6 | type: mongoose.Types.ObjectId, 7 | requried: true 8 | }, 9 | categoryId: { 10 | type: mongoose.Types.ObjectId, 11 | requried: true 12 | }, 13 | }); 14 | 15 | const UsersHasCategory = mongoose.model('UsersHasCategory', UsersHasCategorySchema, 'usersHasCategory'); 16 | 17 | const usersHasCategoryVali = (req) =>{ 18 | const userCateValiSchema = Joi.object({ 19 | userId: Joi.string().requred(), 20 | categoryId: Joi.string().requred(), 21 | }); 22 | return userCateValiSchema.validate(req); 23 | } 24 | 25 | 26 | module.exports.UsersHasCategory = UsersHasCategory; 27 | module.exports.usersHasCategoryVali = usersHasCategoryVali; -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/startup/routers.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const todo = require("../routes/todo"); 3 | const user = require('../routes/user'); 4 | const category = require('../routes/category'); 5 | const auth = require('../routes/auth'); 6 | const errorMiddleware = require('../middleware/error') 7 | 8 | module.exports = function(app) { 9 | // middlewares 10 | app.use(express.json()); 11 | app.use(express.urlencoded({ extended: false })); 12 | app.use(express.static('public')); 13 | 14 | //run engine 15 | // app.set("view engine", "ejs"); 16 | 17 | // routes 18 | app.use("/api/todo", todo); 19 | app.use("/api/user", user); 20 | app.use("/api/auth", auth); 21 | app.use("/api/category", category); 22 | 23 | // root route 24 | // app.get("/", (req, res) => { 25 | // res.render("index"); 26 | // }); 27 | 28 | app.use(errorMiddleware); 29 | }; -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/utils/utils.js: -------------------------------------------------------------------------------- 1 | import Joi from "joi"; 2 | 3 | 4 | function validateRequrest(req) { 5 | const schema = Joi.object({ 6 | origUrl: Joi.string().required().min(3) 7 | }) 8 | return schema.validate(req); 9 | } 10 | 11 | function validateUrl(value) { 12 | // const urlPattern = /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i; 13 | const urlPattern = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i; 14 | return urlPattern.test(value); 15 | } 16 | 17 | export { 18 | validateRequrest, 19 | validateUrl 20 | }; 21 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/controller/authController.js: -------------------------------------------------------------------------------- 1 | const {User, authValidate} = require('../models/user'); 2 | const bcrypt = require('bcrypt'); 3 | 4 | async function postUser(req, res) { 5 | try{ 6 | const {error} = authValidate(req.body); 7 | if(error) 8 | return res.status(401).send(error.details[0].message); 9 | let user = await User.findOne({email: req.body.email}); 10 | if(!user) 11 | return res.status(400).send("Email yok parol xato"); 12 | const isValidPwd = await bcrypt.compare(req.body.password, user.password) 13 | if(!isValidPwd) 14 | return res.status(400).send("Email yok parol xato"); 15 | const token = user.generateAuthToken(); 16 | res.header("x-auth-token", token).send(true); 17 | } 18 | catch(error){ 19 | res.status(500).json({ error: `Failed to fetch user: ${error}` }); 20 | } 21 | } 22 | 23 | module.exports = { 24 | postUser 25 | } -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/index.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import dotenv from "dotenv"; 3 | import url from "./routes/url.js"; 4 | import connectDB from "./utils/db.js"; 5 | import options from "./utils/options.js"; 6 | import swaggerJSDoc from "swagger-jsdoc"; 7 | import swaggerUi from "swagger-ui-express" 8 | 9 | dotenv.config({ path: "./config/.env" }); 10 | const app = express(); 11 | 12 | 13 | 14 | const specs = swaggerJSDoc(options); 15 | 16 | app.use(express.urlencoded({ extended: true })); 17 | app.use(express.json()); 18 | app.use( 19 | "/api-docs", 20 | swaggerUi.serve, 21 | swaggerUi.setup(specs, { 22 | explorer: true, 23 | customCssUrl: 24 | // "https://cdn.jsdelivr.net/npm/swagger-ui-themes@3.0.0/themes/3.x/theme-newspaper.css", 25 | "https://cdn.jsdelivr.net/npm/swagger-ui-themes@3.0.0/themes/3.x/theme-material.css", 26 | }) 27 | ); 28 | 29 | 30 | connectDB(); 31 | 32 | app.use("/", url); 33 | 34 | const port = process.env.PORT || 3000; 35 | app.listen(port, () => { 36 | console.log(`Server is running on port ${port}`); 37 | }); 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /projects source codes/2.getrandom/public/time.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Clock 8 | 9 | 10 | 11 |
12 |
13 |

14 |
15 |
16 |
17 |
18 |
19 |
20 |
12
21 |
3
22 |
6
23 |
9
24 |
25 |
26 |
27 |
28 | 00 29 |

:

30 | 00 31 |

:

32 | 00 33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/models/todo.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Joi = require('joi'); 3 | 4 | const TodoSchema = new mongoose.Schema({ 5 | name: { 6 | type: String, 7 | required: true, 8 | minlength: 3, 9 | maxlength: 100, 10 | unique: true 11 | }, 12 | status: { 13 | type: String, 14 | required: true, 15 | enum: ['complate', 'todo', 'fail', "none"] 16 | }, 17 | didline: { 18 | type: Date 19 | }, 20 | subitem: { 21 | title: { 22 | type: String, 23 | maxlength: 100 24 | }, 25 | subItemStatus:{ 26 | typr: String, 27 | enum: ['complate', 'todo', 'fail'] 28 | } 29 | }, 30 | dateCreated: { 31 | type: Date, 32 | default: new Date() 33 | }, 34 | categoryId: { 35 | type: mongoose.Types.ObjectId, 36 | requried: true 37 | }, 38 | userId: { 39 | type: mongoose.Types.ObjectId, 40 | requried: true 41 | } 42 | }); 43 | 44 | 45 | const Todo = mongoose.model("Todo", TodoSchema, "todo"); 46 | 47 | const todoValidate = (todo)=>{ 48 | const todoValidateSchema = Joi.object({ 49 | name: Joi.string().required().min(3).max(100), 50 | status: Joi.string().required(), 51 | dateCreated: Joi.date().default(new Date()), 52 | subitem: Joi.object({ 53 | title: Joi.string().max(100), 54 | subItemStatus: Joi.string() 55 | }), 56 | categoryId: Joi.string().required(), 57 | userId: Joi.string().required() 58 | }); 59 | return todoValidateSchema.validate(todo); 60 | } 61 | 62 | module.exports.todoValidate = todoValidate; 63 | module.exports.Todo = Todo; -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/models/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Joi = require('joi'); 3 | const config = require('config'); 4 | const jwt = require('jsonwebtoken'); 5 | 6 | const userSchema = new mongoose.Schema({ 7 | name: { 8 | type: String, 9 | required: true, 10 | minlength: 2, 11 | maxlength: 50 12 | }, 13 | email:{ 14 | type:String, 15 | unique:true, 16 | lowercase:true, 17 | trim:true, 18 | required: true 19 | }, 20 | password: { 21 | type: String, 22 | required: true, 23 | minlength:[6,'Password must be at least 5 characters long'] 24 | }, 25 | role:{ 26 | type: String, 27 | default: "user", 28 | enum: ["admin", "user"] 29 | } 30 | }); 31 | 32 | userSchema.methods.generateAuthToken = ()=>{ 33 | let token = jwt.sign({_id : this._id}, config.get("jwtAuthToken")) 34 | return token; 35 | } 36 | 37 | const User = mongoose.model('User', userSchema, 'user'); 38 | 39 | 40 | const userRequirestValidate = (user)=>{ 41 | const userValidateSchema = Joi.object({ 42 | name: Joi.string().required().min(2).max(50), 43 | email: Joi.string().required().lowercase(), 44 | password: Joi.string().required().min(6), 45 | role: Joi.string().default("user") 46 | }); 47 | return userValidateSchema.validate(user); 48 | } 49 | 50 | const authValidate = (req)=>{ 51 | const userValidateSchema = Joi.object({ 52 | email: Joi.string().required().min(4).max(35), 53 | password: Joi.string().required().min(6) 54 | }); 55 | return userValidateSchema.validate(req); 56 | } 57 | 58 | module.exports = { 59 | User, 60 | userRequirestValidate, 61 | authValidate 62 | } -------------------------------------------------------------------------------- /projects source codes/2.getrandom/public/assets/js/time.js: -------------------------------------------------------------------------------- 1 | const today = document.getElementById('today').innerText = new Date().toLocaleDateString(); 2 | let hour = document.querySelector("#hour"); 3 | let minute = document.querySelector("#minute"); 4 | let secund = document.querySelector("#secund"); 5 | 6 | let hourDisp = document.querySelector("#hourDisp"); 7 | let minuteDisp = document.querySelector("#minuteDisp"); 8 | let secundDisp = document.querySelector("#secundDisp"); 9 | 10 | setInterval(function () { 11 | let secuntNumber = new Date().getUTCSeconds(); 12 | let minuteNumber = new Date().getUTCMinutes(); 13 | let hourNumber = new Date().getHours(); 14 | secund.style.transform = `translate(-50%,-100%) rotate(${secuntNumber*6}deg)`; 15 | minute.style.transform = `translate(-50%,-100%) rotate(${minuteNumber*6}deg)`; 16 | hour.style.transform = `translate(-50%,-100%) rotate(${hourNumber*30}deg)`; 17 | 18 | if(secuntNumber < 10 ) 19 | secundDisp.innerText = "0"+ secuntNumber; 20 | else 21 | secundDisp.innerText = secuntNumber; 22 | if(minuteNumber < 10) 23 | minuteDisp.innerText = "0" + minuteNumber; 24 | else 25 | minuteDisp.innerText = minuteNumber; 26 | hourDisp.innerText = hourNumber; 27 | 28 | secuntNumber = null; 29 | minuteNumber = null; 30 | hourNumber = null; 31 | }, 1000); 32 | 33 | 34 | 35 | let settingBtn = document.getElementById("setting-Btn"); 36 | settingBtn.addEventListener("click", function(){ 37 | let moon = document.querySelector(".moon"); 38 | let sunbtn = document.querySelector(".sunbtn"); 39 | let munSun = document.querySelector("#mun-sun"); 40 | if (munSun.className == "light") { 41 | munSun.className = "dark"; 42 | sunbtn.style.transform = "translateX(18px)"; 43 | } else { 44 | munSun.className = "light"; 45 | sunbtn.style.transform = "translateX(0px)"; 46 | } 47 | }); 48 | -------------------------------------------------------------------------------- /projects source codes/2.getrandom/public/random.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Random Number 8 | 12 | 13 | 14 |
15 |
16 |
17 |
18 |
19 |
Random Number Generator
20 | 21 | 22 | 23 | 24 | 27 |
28 |
29 | 30 |
31 |
Random Element From Your Elements
32 |

33 | hint: returns one of the input elements at random 34 |

35 | 36 | 37 | 40 |
41 |
42 |
43 |
44 |
45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /projects source codes/2.getrandom/public/assets/js/random.js: -------------------------------------------------------------------------------- 1 | const generateNum = document.getElementById("generateNum"); 2 | const result = document.getElementById("result"); 3 | const minNum = document.getElementById("minNum").value; 4 | const maxNum = document.getElementById("maxNum").value; 5 | const msg = document.getElementById('msg'); 6 | 7 | generateNum.addEventListener("click", function () { 8 | let rand = Math.random() * (Number(maxNum) - Number(minNum)); 9 | result.innerHTML = 10 | "

" + Math.round(rand) + "

"; 11 | }); 12 | result.addEventListener("click", function () { 13 | if(!result.innerText) return; 14 | navigator.clipboard.writeText(result.innerText).then( 15 | function () { 16 | msg.innerHTML = '"; 17 | }, 18 | function (err) { 19 | msg.innerHTML = '"; 20 | } 21 | ); 22 | setTimeout(()=>{ 23 | msg.innerHTML = ''; 24 | }, 5000) 25 | }); 26 | 27 | const generateNumInElem = document.getElementById('generateNumInElem'); 28 | const numElem = document.getElementById('minNumElem'); 29 | const resultInElem = document.getElementById('resultInElem'); 30 | generateNumInElem.addEventListener('click', function (){ 31 | let numList = numElem.value.toString().split(','); 32 | if(numList.length < 2) return; 33 | let rand = Math.random() * (numList.length - 1); 34 | resultInElem.innerHTML = "

" + numList[Math.floor(rand)] + "

"; 35 | }); 36 | resultInElem.addEventListener("click", function () { 37 | if(!resultInElem.innerText) return; 38 | navigator.clipboard.writeText(resultInElem.innerText).then( 39 | function () { 40 | msg.innerHTML = '"; 41 | }, 42 | function (err) { 43 | msg.innerHTML = '"; 44 | } 45 | ); 46 | setTimeout(()=>{ 47 | msg.innerHTML = ''; 48 | }, 5000) 49 | }); -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/controller/userController.js: -------------------------------------------------------------------------------- 1 | const {User, userRequirestValidate} = require('../models/user'); 2 | const bcrypt = require('bcrypt'); 3 | const _ = require('lodash'); 4 | 5 | async function getAllUsers(req, res){ 6 | try { 7 | const user = await User 8 | .find() 9 | .select({password: 0}); 10 | if(!user) 11 | return res.status(404).send('User topilmadi'); 12 | res.send(user); 13 | } catch (error) { 14 | res.status(500).json({ error: "ma'lumot olishda qatolik" }); 15 | } 16 | } 17 | 18 | async function getUser(req, res) { 19 | try{ 20 | const user = await User.findById(req.params.id).select({password: 0}); 21 | if(!user) 22 | return res.status(404).send('User topilmadi'); 23 | res.send(user); 24 | } 25 | catch(error){ 26 | res.status(500).json({ error: "ma'lumot olishda xatolik" }); 27 | } 28 | } 29 | 30 | async function postUser(req, res) { 31 | try{ 32 | const {error} = userRequirestValidate(req.body); 33 | if(error) 34 | return res.status(401).send(error.details[0].message); 35 | let user = await User.findOne({email: req.body.email}); 36 | if(user) 37 | return res.status(400).send("Bu email oldin ro'yxatdan o'tgan"); 38 | user = new User({ 39 | name: req.body.name, 40 | email: req.body.email, 41 | password: req.body.password, 42 | role: req.body.role 43 | }); 44 | const salt = await bcrypt.genSalt(); 45 | const hashPass = await bcrypt.hash(req.body.password,salt); 46 | user.password = hashPass; 47 | await user.save(); 48 | res.send(_.pick(user,['_id','name','email'])); 49 | } 50 | catch(error){ 51 | res.status(500).json({ error: `ma'lumot olishda xatolik: ${error}` }); 52 | } 53 | } 54 | 55 | async function putUser(req, res) { 56 | try{ 57 | let user = User.findById(req.params.id); 58 | if(!user) 59 | return res.status(404).send('user topilmadi'); 60 | const {error} = userRequirestValidate(req.body); 61 | if(error) 62 | return res.status(401).send(error.details[0].message); 63 | const newPass = req.body.newPassword; 64 | let hashPass; 65 | if(newPass){ 66 | const isValidPwd = await bcrypt.compare(req.body.password, user.password) 67 | if(!isValidPwd) 68 | return res.status(400).send("Oldingi parol xato kiritilgan"); 69 | const salt = await bcrypt.genSalt(); 70 | hashPass = await bcrypt.hash(req.body.newPass,salt); 71 | }else{ 72 | hashPass = req.body.password; 73 | } 74 | user = await User.findByIdAndUpdate(req.params.id, { 75 | name: req.body.name, 76 | password: hashPass, 77 | role: req.body.role 78 | },{new: true}); 79 | 80 | if(!user) 81 | return res.status(404).send('Berilgan ID li ma\'lumot topilmadi'); 82 | res.send(_.pick(user,['_id','name','email'])); 83 | } 84 | catch(error){ 85 | res.status(500).json({ error: "ma'lumot olishda xatolik" }); 86 | } 87 | } 88 | 89 | const deleteUser = async (req, res) => { 90 | try{ 91 | const user = await User.findByIdAndDelete(req.params.id); 92 | if(!user) 93 | return res.status(404).send('user topilmadi'); 94 | res.send("Foydalanuvchi ma'lumotlari o'chirildi"); 95 | } 96 | catch(error){ 97 | res.status(500).json({ error: "ma'lumot olishda xatolik" }); 98 | } 99 | } 100 | 101 | 102 | 103 | module.exports = { 104 | getAllUsers, 105 | getUser, 106 | postUser, 107 | putUser, 108 | deleteUser 109 | } -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/controller/todoController.js: -------------------------------------------------------------------------------- 1 | const { Todo, todoValidate } = require("../models/todo"); 2 | const { User } = require('../models/user'); 3 | const { Category } = require('../models/category'); 4 | const objectId = require('mongoose').Types.ObjectId; 5 | const categoryController = require('./categoryController'); 6 | 7 | async function getAllTodos(req, res) { 8 | try { 9 | const userId = req.body.userId; 10 | if(!userId) 11 | return res.status(401).json({"error": "userId is required"}); 12 | if(!objectId.isValid(userId)) 13 | return res.status(401).json({"error": "userId must be of type objectId"}); 14 | const categories = await categoryController.getCategories(userId) 15 | var categoryIds = categories.map(category => category._id); 16 | 17 | const todo = await Todo.aggregate([ 18 | { $match: { categoryId: { $in: categoryIds } } }, 19 | { $group: { _id: "$categoryId", document: { $push: "$$ROOT" } } } 20 | ]); 21 | res.json({"todos": todo, "categories": categories}); 22 | } catch (error) { 23 | res.status(500).json({ error: "Ma'lumotni olishda xatolik" }); 24 | } 25 | } 26 | 27 | async function getTodo(req, res) { 28 | try { 29 | const todo = await Todo.find(req.params.id); 30 | res.json(todo); 31 | } catch (error) { 32 | res.status(500).json({ error: "Ma'lumotni olishda xatolik" }); 33 | } 34 | } 35 | 36 | async function addTodo(req, res){ 37 | try{ 38 | const {error} = todoValidate(req.body); 39 | if(error) 40 | return res.status(400).send(error.details[0].message); 41 | const userId = await User.findById(req.body.userId); 42 | if(!userId) 43 | return res.status(401).send("userId topilmadi"); 44 | const categoryId = await Category.findById(req.body.categoryId); 45 | if(!categoryId) 46 | return res.status(401).send("categoryId topilmadi"); 47 | let todo = new Todo({ 48 | name: req.body.name, 49 | status: req.body.status, 50 | didline: (req.body.didline)? req.body.didline : "", 51 | subitem: req.body.subitem, 52 | categoryId: categoryId, 53 | userId: userId 54 | }) 55 | todo = await todo.save(); 56 | res.send(todo) 57 | } catch (error) { 58 | res.status(500).json({ error: `Ma'lumotni olishda xatolik` }); 59 | } 60 | } 61 | 62 | async function editTodo(req, res){ 63 | try{ 64 | const {error} = todoValidate(req.body); 65 | if(error) 66 | return res.status(400).send(error.details[0].message); 67 | const userId = await User.findById(req.body.userId); 68 | if(!userId) 69 | return res.status(401).send("userId topilmadi"); 70 | const categoryId = await Category.findById(req.body.categoryId); 71 | if(!categoryId) 72 | return res.status(401).send("categoryId topilmadi"); 73 | let todo = await Todo.findByIdAndUpdate(req.params.id, { 74 | name: req.body.name, 75 | status: req.body.status, 76 | didline: (req.body.didline)? req.body.didline : "", 77 | subitem: req.body.subitem, 78 | categoryId: categoryId 79 | }) 80 | res.send("ma'lumot o'zgartirildi") 81 | } catch (error) { 82 | res.status(500).json({ error: `Ma'lumotni olishda xatolik ${error}` }); 83 | } 84 | } 85 | 86 | async function deleteTodo(req, res){ 87 | try{ 88 | if(!objectId.isValid(req.params.id)) 89 | return res.status(401).json({"error": "id objectId turida bo'lishi kerak"}); 90 | let todo = await Todo.findByIdAndDelete(req.params.id); 91 | if(!todo) 92 | return res.status(404).send("Berilgan id'li todo yo'q") 93 | res.send("ma'lumot o'chirildi") 94 | } catch (error) { 95 | res.status(500).json({ error: "Ma'lumotni olishda xatolik" }); 96 | } 97 | } 98 | 99 | module.exports = { 100 | getAllTodos, 101 | getTodo, 102 | addTodo, 103 | editTodo, 104 | deleteTodo 105 | }; 106 | -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/routes/url.js: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | import { nanoid } from "nanoid"; 3 | import { validateRequrest, validateUrl } from "../utils/utils.js"; 4 | import Url from "../models/url.js"; 5 | 6 | const router = Router(); 7 | /** 8 | * @swagger 9 | * /short: 10 | * post: 11 | * summary: Post request to shorten your url. 12 | * description: You enter a long url address and you go to your page through the given short url address. 13 | * requestBody: 14 | * required: true 15 | * description: Enter a long url address. 16 | * content: 17 | * application/json: 18 | * schema: 19 | * type: object 20 | * properties: 21 | * origUrl: 22 | * type: string 23 | * description: long url. 24 | * example: https://your-web-site/.../index.html 25 | * responses: 26 | * 200: 27 | * description: get short url address. 28 | * content: 29 | * application/json: 30 | * schema: 31 | * type: object 32 | * properties: 33 | * urlId: 34 | * type: string 35 | * description: short url id 36 | * example: 'TxDRmK92sV8mE-BksCV_7' 37 | * origUrl: 38 | * type: string 39 | * description: long url. 40 | * example: https://your-web-site/.../index.html 41 | * shortUrl: 42 | * type: string 43 | * description: short url. 44 | * example: http://localhost:5000/TxDRmK92sV8mE-BksCV_7 45 | * clicks: 46 | * type: integer 47 | * description: clicks count. 48 | * example: 0 49 | * date: 50 | * type: date 51 | * description: created date. 52 | * example: Tue Aug 29 2023 22:48:30 53 | * _id: 54 | * type: string 55 | * description: id for db. 56 | * example: 64ee2f6e04befbdbebd98c42 57 | * 58 | */ 59 | router.post("/short", async (req, res) => { 60 | const {error} = validateRequrest(req.body); 61 | if(error) 62 | return res.send(error.details[0].message); 63 | 64 | const { origUrl } = req.body; 65 | const base = process.env.BASE; 66 | 67 | const urlId = nanoid(); 68 | if (validateUrl(origUrl)) { 69 | try { 70 | let url = await Url.findOne({ origUrl }); 71 | if (url) return res.json(url); 72 | else { 73 | const shortUrl = `${base}/${urlId}`; 74 | url = new Url({ 75 | origUrl, 76 | shortUrl, 77 | urlId, 78 | date: new Date(), 79 | }); 80 | await url.save(); 81 | res.json(url); 82 | } 83 | } catch (error) { 84 | console.log(error); 85 | res.status(500).json("Server Error"); 86 | } 87 | } else { 88 | res.status(404).json("URL is invalid"); 89 | } 90 | }); 91 | 92 | /** 93 | * @swagger 94 | * /api/{urlId}: 95 | * get: 96 | * summary: get request to go to your site via short url. 97 | * description: get request to go to your site via short url. 98 | * parameters: 99 | * - in: path 100 | * name: url id 101 | * required: true 102 | * description: url id 103 | * schema: 104 | * type: string 105 | */ 106 | router.get("/api/:urlId", async (req, res) => { 107 | try { 108 | const url = await Url.findOne({ urlId: req.params.urlId }); 109 | if (url) { 110 | await Url.updateOne( 111 | { 112 | urlId: req.params.urlId, 113 | }, 114 | { $inc: { clicks: 1 } } 115 | ); 116 | return res.redirect(url.origUrl); 117 | } else { 118 | res.status(404).json("Not found"); 119 | } 120 | } catch (error) { 121 | console.log(error); 122 | res.status(500).json("Server Error"); 123 | } 124 | }); 125 | 126 | export default router; 127 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/controller/categoryController.js: -------------------------------------------------------------------------------- 1 | const objectId = require('mongoose').Types.ObjectId; 2 | const { Category, categoryValidate } = require("../models/category"); 3 | const { UsersHasCategory } = require("../models/usersHasCategory"); 4 | 5 | const getCategories = async (userId) =>{ 6 | const usersHasCategory = await UsersHasCategory.find({userId: userId}).select({categoryId: 1, _id: 0}); 7 | var categoryIds = usersHasCategory.map(category => category.categoryId); 8 | const categories = await Category.find({"_id" : { "$in" : categoryIds} }); 9 | return categories; 10 | } 11 | async function getCategory(req, res){ 12 | try { 13 | const userId = req.body.userId; 14 | if(!userId) 15 | return res.status(401).send('userId is required'); 16 | if(!objectId.isValid(userId)) 17 | return res.status(401).json({"error": "userId must be of type objectId"}); 18 | const categories = await getCategories(userId) 19 | res.send(categories); 20 | } catch (error) { 21 | res.status(500).json({ error: `Ma'lumotni olishda xatolik ${error}`}); 22 | } 23 | } 24 | 25 | async function addCategory(req, res){ 26 | try{ 27 | const {error} = categoryValidate(req.body); 28 | if(error) 29 | return res.status(401).send(error.details[0].message); 30 | if(!objectId.isValid(req.body.userId)) 31 | return res.status(401).json({"error": "userId must be of type objectId"}); 32 | let category = await Category.findOne({name: req.body.name}); 33 | if(!category){ 34 | category = new Category({ 35 | name: req.body.name, 36 | icon: req.body.icon, 37 | }); 38 | category = await category.save(); 39 | } 40 | let usersHasCategory = await UsersHasCategory.findOne({userId: req.body.userId, categoryId: category._id}); 41 | if(!usersHasCategory){ 42 | usersHasCategory = new UsersHasCategory({ 43 | userId: req.body.userId, 44 | categoryId: category._id 45 | }); 46 | await usersHasCategory.save() 47 | } 48 | res.send(category) 49 | } catch (error) { 50 | res.status(500).json({ error: `Ma'lumotni olishda xatolik ${error}`}); 51 | } 52 | } 53 | 54 | 55 | async function updateCategory(req, res){ 56 | try{ 57 | if(!objectId.isValid(req.params.id)) 58 | return res.status(401).json({"error": "id objectId turida bo'lishi kerak"}); 59 | let category = await Category.findById(req.params.id); 60 | if(!category) 61 | return res.status(404).send('Berilgan id\'li category yo\'q') 62 | const {error} = categoryValidate(req.body); 63 | if(error) 64 | return res.status(401).send(error.details[0].message); 65 | //get req.user id no equel in db userId 66 | let usersHasCategory = await UsersHasCategory 67 | .find({categoryId: category._id, userId: {$ne: req.body.userId}}); 68 | console.log(usersHasCategory) 69 | if(usersHasCategory.length!==0){ 70 | return res.status(400).send("Berilga id'li category o'zgartirib bo'lmaydi") 71 | } 72 | category = await Category.findByIdAndUpdate(req.params.id, { 73 | name: req.body.name, 74 | icon: req.body.icon 75 | }) 76 | res.send(category._id) 77 | } catch (error) { 78 | res.status(500).json({ error: `Ma'lumotni olishda xatolik ${error}`}); 79 | } 80 | } 81 | 82 | async function deleteCategory(req, res){ 83 | try{ 84 | if(!objectId.isValid(req.params.id)) 85 | return res.status(401).json({"error": "id objectId turida bo'lishi kerak"}); 86 | let category = await Category.findById(req.params.id) 87 | if(!category) 88 | return res.status(404).send("Berilgan id'li category yo'q") 89 | let usersHasCategory = await UsersHasCategory 90 | .find({categoryId: category._id, userId: {$ne: req.body.userId}}); 91 | if(usersHasCategory){ 92 | usersHasCategory = await UsersHasCategory 93 | .deleteOne({categoryId: category._id, userId: req.body.userId}) 94 | }else{ 95 | usersHasCategory = await UsersHasCategory 96 | .deleteOne({categoryId: category._id, userId: req.body.userId}); 97 | category = await Category.findByIdAndDelete(req.params.id) 98 | } 99 | res.send(category) 100 | }catch(error){ 101 | res.status(500).json({ error: `Ma'lumotni olishda xatolik ${error}`}); 102 | } 103 | } 104 | 105 | module.exports = { 106 | getCategory, 107 | getCategories, 108 | addCategory, 109 | updateCategory, 110 | deleteCategory 111 | } -------------------------------------------------------------------------------- /projects source codes/2.getrandom/public/assets/styles/time.css: -------------------------------------------------------------------------------- 1 | * { 2 | padding: 0; 3 | margin: 0; 4 | box-sizing: border-box; 5 | } 6 | .row { 7 | display: flex; 8 | flex-direction: row; 9 | } 10 | .column { 11 | display: flex; 12 | flex-direction: column; 13 | } 14 | .between { 15 | justify-content: space-between; 16 | } 17 | .t-center { 18 | text-align: center; 19 | } 20 | #mun-sun { 21 | width: 100%; 22 | height: 100vh; 23 | position: relative; 24 | } 25 | .card { 26 | width: 280px; 27 | height: 400px; 28 | position: relative; 29 | top: 50%; 30 | left: 50%; 31 | transform: translate(-50%,-50%); 32 | background-color: rgb(241, 241, 241); 33 | padding: 15px; 34 | border-radius: 10px; 35 | overflow: hidden; 36 | box-shadow: 0 0 9px 1px; 37 | } 38 | .energy span { 39 | width: 20px; 40 | height: 15px; 41 | margin-left: 5px; 42 | border: 1px solid #000; 43 | border-radius: 20%; 44 | } 45 | .energy span::after { 46 | content: ''; 47 | position: absolute; 48 | width: 10px; 49 | height: 11px; 50 | margin: 1px; 51 | background-color: #000; 52 | } 53 | .energy span::before { 54 | content: ''; 55 | position: absolute; 56 | width: 2px; 57 | height: 7px; 58 | margin-left: 18px; 59 | margin-top: 2px; 60 | border: 1px solid #000; 61 | } 62 | .time { 63 | width: 230px; 64 | height: 230px; 65 | margin: 10px auto; 66 | margin-top: 25px; 67 | position: relative; 68 | border-radius: 50%; 69 | border: 2px solid #000; 70 | } 71 | .time #tayanch { 72 | width: 15px; 73 | height: 15px; 74 | position: absolute; 75 | top: 50%; 76 | left: 50%; 77 | transform: translate(-50%,-50%); 78 | border-radius: 50%; 79 | z-index: 5; 80 | background-color: #fff; 81 | border: 2px solid #000; 82 | } 83 | .time #hour { 84 | width: 8px; 85 | height: 80px; 86 | position: absolute; 87 | top: 50%; 88 | left: 50%; 89 | transform: translate(-50%,-100%) rotate(0deg); 90 | transform-origin: bottom; 91 | background-color: #000; 92 | } 93 | .time #minute { 94 | width: 5px; 95 | height: 90px; 96 | position: absolute; 97 | top: 50%; 98 | left: 50%; 99 | transform: translate(-50%,-100%) rotate(0deg); 100 | transform-origin: bottom; 101 | background-color: #000; 102 | } 103 | .time #secund { 104 | width: 3px; 105 | height: 90px; 106 | position: absolute; 107 | top: 50%; 108 | left: 50%; 109 | transform: translate(-50%,-100%) rotate(0deg); 110 | transform-origin: bottom; 111 | background-color: #f00; 112 | } 113 | .hour-number { 114 | width: 230px; 115 | height: 230px; 116 | margin: -2px; 117 | border-radius: 50%; 118 | position: absolute; 119 | border: 2px solid #000; 120 | font-size: 23px; 121 | font-weight: bold; 122 | } 123 | .hour-number .unikki { 124 | position: absolute; 125 | top: 0; 126 | left: 50%; 127 | transform: translateX(-50%); 128 | } 129 | .unikki::after { 130 | content: ''; 131 | position: absolute; 132 | width: 5px; 133 | height: 15px; 134 | top: 47%; 135 | left: -195%; 136 | transform: rotate(-33deg); 137 | background-color: #000; 138 | } 139 | .unikki::before { 140 | content: ''; 141 | position: absolute; 142 | width: 5px; 143 | height: 15px; 144 | top: 51%; 145 | left: 262%; 146 | transform: rotate(33deg); 147 | background-color: #000; 148 | } 149 | .hour-number .uch { 150 | position: absolute; 151 | top: 50%; 152 | right: 0; 153 | transform: translate(-50%,-50%); 154 | } 155 | .uch::after { 156 | content: ''; 157 | position: absolute; 158 | width: 5px; 159 | height: 15px; 160 | top: 217%; 161 | left: -65%; 162 | transform: rotate(-61deg); 163 | background-color: #000; 164 | } 165 | .uch::before { 166 | content: ''; 167 | position: absolute; 168 | width: 5px; 169 | height: 15px; 170 | top: -182%; 171 | left: -50%; 172 | transform: rotate(59deg); 173 | background-color: #000; 174 | } 175 | .hour-number .olti { 176 | position: absolute; 177 | top: 95%; 178 | left: 50%; 179 | transform: translate(-50%,-50%); 180 | } 181 | .olti::after { 182 | content: ''; 183 | position: absolute; 184 | width: 5px; 185 | height: 15px; 186 | top: -13%; 187 | left: -406%; 188 | transform: rotate(32deg); 189 | background-color: #000; 190 | } 191 | .olti::before { 192 | content: ''; 193 | position: absolute; 194 | width: 5px; 195 | height: 15px; 196 | top: -18%; 197 | left: 486%; 198 | transform: rotate(-38deg); 199 | background-color: #000; 200 | } 201 | .hour-number .tuqqiz { 202 | position: absolute; 203 | top: 50%; 204 | left: 5%; 205 | transform: translate(-50%,-50%); 206 | } 207 | .tuqqiz::after { 208 | content: ''; 209 | position: absolute; 210 | width: 5px; 211 | height: 15px; 212 | top: -177%; 213 | left: 105%; 214 | transform: rotate(-60deg); 215 | background-color: #000; 216 | } 217 | .tuqqiz::before { 218 | content: ''; 219 | position: absolute; 220 | width: 5px; 221 | height: 15px; 222 | top: 225%; 223 | left: 119%; 224 | transform: rotate(53deg); 225 | background-color: #000 226 | } 227 | .time-disp { 228 | margin-top: 20px; 229 | text-align: center; 230 | } 231 | .time-disp span { 232 | font-size: 28px; 233 | font-family: sans-serif; 234 | font-weight: bold; 235 | margin: 5px 0; 236 | } 237 | .time-disp h3 { 238 | margin-right: 20px; 239 | } 240 | .display { 241 | margin: 0 66px; 242 | } 243 | .setting { 244 | position: absolute; 245 | top: 90%; 246 | right: 3%; 247 | } 248 | 249 | .moon { 250 | width: 38px; 251 | height: 21px; 252 | border-radius: 50px; 253 | outline: none; 254 | background-color: #CDC; 255 | margin: 10px auto; 256 | padding: 1px; 257 | } 258 | .moon .sunbtn { 259 | width: 17px; 260 | height: 18px; 261 | background-color: #000; 262 | border-radius: 50%; 263 | transform: translateX(0px); 264 | transition: .5s; 265 | } 266 | .light { 267 | background-color: #ccc; 268 | color: #000 269 | } 270 | 271 | 272 | 273 | .dark { 274 | background-color: #000; 275 | color: #fff; 276 | } 277 | .dark .card { 278 | background-color: #222; 279 | } 280 | .dark .energy span , .dark .energy span::before ,.dark .hour-number { 281 | border-color: #fff; 282 | } 283 | .dark .energy span::after, 284 | .dark #hour , 285 | .dark #minute , 286 | .dark .hour-number > *::after , 287 | .dark .hour-number > *::before { 288 | background-color: #fff; 289 | } 290 | .dark .card , .dark .setting-win{ 291 | box-shadow: none; 292 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Backend Projects 2 | 3 | A collection of backend projects for learning and practice. 4 | - - - - - - 5 | O'rganish va amaliyot uchun backend loyihalari to'plami. 6 | 7 | ## Projects 8 | 9 | 1. [Simple API Server | Oddiy API serveri](#1-simple-api-server) 10 | 2. [Get random number | Tasodifiy son qaytarish](#2-get-random-number) 11 | 3. [URL Shortener | URL qisqartiruvchi](#3-url-shortener) 12 | 4. [Authentication System](#4-authentication-system) 13 | 5. [Real-Time Chat Application](#5-real-time-chat-application) 14 | 6. [Blogging Platform](#6-blogging-platform) 15 | 7. [E-commerce Store](#7-e-commerce-store) 16 | 8. [Social Media Application](#8-social-media-application) 17 | 9. [Task Management System](#9-task-management-system) 18 | 10. [Weather App](#10-weather-app) 19 | 11. [File Uploader](#11-file-uploader) 20 | 12. [RSS Feed Reader](#12-rss-feed-reader) 21 | 13. [Job Board](#13-job-board) 22 | 14. [Payment Gateway Integration](#14-payment-gateway-integration) 23 | 15. [Forum or Q&A Platform](#15-forum-or-qa-platform) 24 | 16. [Content Management System (CMS)](#16-content-management-system-cms) 25 | 17. [Social Networking Platform](#17-social-networking-platform) 26 | 18. [E-learning Platform](#18-e-learning-platform) 27 | 19. [Ride-Sharing Service](#19-ride-sharing-service) 28 | 29 | 30 | ## Project Descriptions 31 | 32 | ### 1. Simple API Server 33 | 34 | Build a basic API server using Express.js that handles CRUD operations for a simple resource like "todos" or "notes." 35 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 36 | Oddiy API serveri: "todos" yoki "eslatmalar" kabi oddiy resurs uchun CRUD operatsiyalarini boshqaradigan Express.js yordamida asosiy API serverini yarating. Marshrutlarni sozlash, so'rovlar va javoblarni ko'rib chiqish va oddiy xotiradagi ma'lumotlar ombori bilan o'zaro ishlashga e'tibor qarating. 37 | 38 | [for example | namuna](https://github.com/qobulovasror/backend-project-ideas/tree/master/projects%20source%20codes/1.simple%20API%20servers%20todo%20and%20reminder) 39 | 40 | ### 2. Get random Number 41 | 42 | Get random number 43 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 44 | Tasodifiy son qaytaruvchi xizmat: bu dasturda siz berilgan chegaradagi tasodifiy sonnni qaytarishingiz kerak 45 | 46 | [for example | namuna](https://github.com/qobulovasror/backend-project-ideas/tree/master/projects%20source%20codes/2.getrandom) 47 | 48 | ### 3. URL Shortener 49 | 50 | Create a URL shortening service using Express.js and a database like MongoDB. 51 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 52 | URL qisqartiruvchi: Express.js va MongoDB kabi maʼlumotlar bazasidan foydalanib URL qisqartirish xizmatini yarating. Foydalanuvchilar uzun URL manzilini yuborishlari va qisqartirilgan versiyasini olishlari kerak. Qisqartirilgan havolaga tashrif buyurgan foydalanuvchilarni asl URL manziliga yo'naltirish uchun qayta yo'naltirish mantiqini amalga oshiring. 53 | 54 | [for example | namuna](https://github.com/qobulovasror/backend-project-ideas/tree/master/projects%20source%20codes/3.url_shortener) 55 | 56 | ### 4. Authentication System 57 | 58 | Build a user authentication system using a framework like Passport.js. 59 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 60 | Autentifikatsiya tizimi: Passport.js kabi ramka yordamida foydalanuvchi autentifikatsiya tizimini yarating. Foydalanuvchini ro'yxatdan o'tkazish, tizimga kirish, tizimdan chiqish va parolni tiklash funksiyasi kabi xususiyatlarni amalga oshiring. Foydalanuvchi ma'lumotlarini xavfsiz saqlash uchun MongoDB kabi ma'lumotlar bazasidan foydalaning. 61 | 62 | ### 5. Real-Time Chat Application 63 | 64 | Develop a real-time chat application using the Socket.io library. 65 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 66 | Real time chat ilovasi: Socket.io kutubxonasidan foydalanib, real vaqtda chat ilovasini yarating. Foydalanuvchilar real vaqt rejimida turli chat xonalariga qo'shilishlari va xabarlar almashishlari kerak. Yozish ko'rsatkichlari va onlayn holat bildirishnomalari kabi xususiyatlarni amalga oshiring. 67 | 68 | ### 6. Blogging Platform 69 | 70 | Create a blogging platform using Express.js and a database like MySQL or PostgreSQL. 71 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 72 | Bloglash platformasi: Express.js va MySQL yoki PostgreSQL kabi ma'lumotlar bazasidan foydalangan holda bloglash platformasini ishlab chiqing. Foydalanuvchilar blog postlarini yaratish, tahrirlash va o‘chirish imkoniyatiga ega bo‘lishi kerak. Foydalanuvchi autentifikatsiyasi, rolga asoslangan kirishni boshqarish va sharhlar funksiyasi kabi xususiyatlarni amalga oshiring. 73 | 74 | ### 7. E-commerce Store 75 | 76 | Build an e-commerce store with features like product listing, shopping cart functionality, and checkout process. 77 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 78 | Elektron tijorat do'koni: Mahsulotlar ro'yxati, xarid qilish savatchasi funksiyasi va to'lov jarayoni kabi xususiyatlarga ega elektron tijorat do'konini yarating. MongoDB yoki MySQL kabi ma'lumotlar bazasi bilan birga Express.js kabi ramkadan foydalaning. Stripe kabi xizmat bilan xavfsiz toʻlov integratsiyasini amalga oshiring. 79 | 80 | ### 8. Social Media Application 81 | 82 | Develop a social media application using Express.js, MongoDB, and a front-end framework like React. 83 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 84 | Ijtimoiy media ilovasi: Express.js, MongoDB va React kabi front-end ramkadan foydalangan holda ijtimoiy media ilovasini ishlab chiqing. Foydalanuvchi profillari, yangiliklar tasmasi, yoqtirishlar, sharhlar va izdoshlar/kuzatish funksiyalari kabi xususiyatlarni amalga oshiring. 85 | 86 | ### 9. Task Management System 87 | 88 | Create a task management system with features like creating tasks, assigning tasks to users, and tracking progress. 89 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 90 | Vazifalarni boshqarish tizimi: Vazifalar yaratish, foydalanuvchilarga topshiriqlar berish, tugash sanalarini belgilash va taraqqiyotni kuzatish kabi xususiyatlarga ega vazifalarni boshqarish tizimini yarating. Loyihani yaratish uchun Express.js, MongoDB va React yoki Vue.js kabi front-end ramkalaridan foydalaning. 91 | 92 | ### 10. Weather App 93 | 94 | Build a weather application that fetches weather data from a weather API. 95 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 96 | Ob-havo ilovasi: Ob-havo maʼlumotlarini foydalanuvchi kiritgan maʼlumotlarga (masalan, shahar nomi) asoslangan ob-havo APIʼsidan (masalan, OpenWeatherMap) oladigan ob-havo ilovasini yarating. Tanlangan joy uchun joriy ob-havo, harorat va prognozni ko'rsatish. Geolokatsiya va bir nechta joylashuvni qoʻllab-quvvatlash kabi xususiyatlarni qoʻshish orqali ilovani yaxshilang. 97 | 98 | ### 11. File Uploader 99 | 100 | Develop a file uploader using Express.js and the Multer middleware. 101 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 102 | Fayl yuklovchi: Express.js va Multer o'rta dasturidan foydalanib fayl yuklovchi yarating. Foydalanuvchilarga fayllarni yuklash, fayl turlari va oʻlchamlarini tasdiqlash hamda fayllarni serverda yoki AWS S3 kabi bulutli saqlash xizmatida saqlashga ruxsat bering. Yuklangan fayllarni ko'rish va yuklab olish funksiyasini qo'llang. 103 | 104 | ### 12. RSS Feed Reader 105 | 106 | Create an RSS feed reader that fetches and parses RSS feeds from different sources. 107 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 108 | RSS Feed Reader: Node.js yordamida RSS tasmasi o'quvchini ishlab chiqing. Feedparser kabi kutubxonalar yordamida turli manbalardan RSS tasmalarini oling va tahlil qiling. Eng soʻnggi maqolalarni koʻrsating va foydalanuvchilarga maqolalarni saqlash va oʻqilgan deb belgilashga ruxsat bering. Siz turkumlashtirish va qidirish funksiyasi kabi xususiyatlarni qo'shish orqali ilovani yaxshilashingiz mumkin. 109 | 110 | ### 13. Job Board 111 | 112 | Build a job board application where employers can post job listings and job seekers can browse and apply for jobs. 113 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 114 | Ish kengashi: Ish beruvchilar ish o'rinlari ro'yxatini e'lon qilishlari va ish izlovchilar ish o'rinlarini ko'rib chiqishlari va ariza berishlari mumkin bo'lgan ish kengashiga ariza yarating. MongoDB kabi ma'lumotlar bazasi Express.js dan foydalaning va foydalanuvchi autentifikatsiyasi, rolga asoslangan kirishni boshqarish va ish ilovalarini boshqarish kabi xususiyatlarni amalga oshiring. 115 | 116 | ### 14. Payment Gateway Integration 117 | 118 | Integrate a payment gateway like PayPal or Stripe into an existing e-commerce application. 119 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 120 | Toʻlov shlyuzi integratsiyasi: PayPal yoki Stripe kabi toʻlov shlyuzini mavjud elektron tijorat ilovasiga integratsiyalash. Foydalanuvchilarga xaridlarni amalga oshirish, tranzaktsiyalarni xavfsiz boshqarish va buyurtmalarni boshqarish, jumladan, buyurtmalar tarixi va kuzatish imkonini beradi. 121 | 122 | ### 15. Forum or Q&A Platform 123 | 124 | Develop a forum or question-and-answer platform for users to engage in discussions. 125 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 126 | Forum yoki Savol-javob platformasi: Foydalanuvchilar savollarni joylashtirishlari, javob berishlari va muhokamalarda qatnashishlari mumkin bo‘lgan forum yoki savol-javob platformasini ishlab chiqing. Foydalanuvchi profillari, ovoz berish, sharhlash va mashhurlik yoki dolzarblik asosida saralash kabi xususiyatlarni amalga oshiring 127 | 128 | ### 16. Content Management System (CMS) 129 | 130 | Create a CMS using Node.js and a database like MongoDB or MySQL. 131 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 132 | Kontentni boshqarish tizimi (CMS): Node.js va MongoDB yoki MySQL kabi ma'lumotlar bazasidan foydalangan holda CMS yarating. Foydalanuvchilarga boy matnni tahrirlash imkoniyatlariga ega maqolalar yoki blog postlarini yaratish, tahrirlash va nashr etishga ruxsat bering. Foydalanuvchi rollari va ruxsatlarini, toifalarni boshqarish va qidiruv funksiyalarini amalga oshiring. 133 | 134 | ### 17. Social Networking Platform 135 | 136 | Build a social networking platform with features like user profiles, posts, and direct messaging. 137 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 138 | Ijtimoiy tarmoq platformasi: Facebook yoki Twitter kabi to'liq ijtimoiy tarmoq platformasini yarating. Foydalanuvchi profillari, postlar, yoqtirishlar, sharhlar, to'g'ridan-to'g'ri xabarlar, bildirishnomalar va do'stlik so'rovlari kabi xususiyatlarni amalga oshiring. Express.js, ma'lumotlar bazasi va React yoki Angular kabi front-end ramkalar kombinatsiyasidan foydalaning. 139 | 140 | 141 | ### 18. E-learning Platform 142 | 143 | Develop an e-learning platform where users can enroll in courses and track their progress. 144 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 145 | Elektron ta'lim platformasi: Foydalanuvchilar kurslarga yozilishlari, video darslarni tomosha qilishlari, viktorinalarni bajarishlari va ularning taraqqiyotini kuzatishlari mumkin bo'lgan elektron ta'lim platformasini ishlab chiqish. Foydalanuvchi autentifikatsiyasi, kurslarni boshqarish, taraqqiyotni kuzatish va kurslar uchun reyting/ko‘rib chiqish tizimi kabi xususiyatlarni joriy qiling. 146 | 147 | ### 19. Ride-Sharing Service 148 | 149 | Create a ride-sharing application like Uber or Lyft. 150 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 151 | Ride-Sharing Service: Uber yoki Lyft kabi sayohatlarni almashish ilovasini yarating. Foydalanuvchilarga sayohatlarni soʻrash, real vaqt rejimida haydovchilarning joylashuvini kuzatish, toʻlovlarni xavfsiz boshqarish, reyting va fikr-mulohazalarni taqdim etish imkonini bering. Haydovchilarning mavjudligi, haydash tarixi va yo‘l haqini baholash kabi funksiyalarni amalga oshiring. 152 | 153 | 154 | Feel free to choose any of these projects to practice and enhance your Node.js backend skills. Enjoy coding! 155 | 156 | **Note:** These projects are not only for nade js developers, all backend developers can do these projects using other known technologies 157 | 158 | **Eslatma:** Bu loyhalar faqat nade js dasturchilari uchun emas, bu loyhalarni barcha backend dasturchilari boshqa bilgan texnologiyalar yordamida qilishi munkun 159 | 160 | Remember that you should try to implement best practices such as modular code organization, error handling, and security considerations when implementing projects. Also, consider deploying your projects to a cloud platform like Heroku or AWS to gain experience with deployment workflows. 161 | 162 | Start with simpler projects and gradually progress to more complex projects as you gain confidence and understanding. Good luck with your Node.js backend course! 163 | 164 | Remember that these projects increase in complexity as you progress and require a deeper understanding of various concepts and technologies. Don't hesitate to break projects down into smaller tasks and tackle them one at a time. Have fun building and learning with these projects! 165 | -------------------------------------------------------------------------------- /projects source codes/2.getrandom/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "getrandom", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "getrandom", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.18.2" 13 | } 14 | }, 15 | "node_modules/accepts": { 16 | "version": "1.3.8", 17 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 18 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 19 | "dependencies": { 20 | "mime-types": "~2.1.34", 21 | "negotiator": "0.6.3" 22 | }, 23 | "engines": { 24 | "node": ">= 0.6" 25 | } 26 | }, 27 | "node_modules/array-flatten": { 28 | "version": "1.1.1", 29 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 30 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 31 | }, 32 | "node_modules/body-parser": { 33 | "version": "1.20.1", 34 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 35 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 36 | "dependencies": { 37 | "bytes": "3.1.2", 38 | "content-type": "~1.0.4", 39 | "debug": "2.6.9", 40 | "depd": "2.0.0", 41 | "destroy": "1.2.0", 42 | "http-errors": "2.0.0", 43 | "iconv-lite": "0.4.24", 44 | "on-finished": "2.4.1", 45 | "qs": "6.11.0", 46 | "raw-body": "2.5.1", 47 | "type-is": "~1.6.18", 48 | "unpipe": "1.0.0" 49 | }, 50 | "engines": { 51 | "node": ">= 0.8", 52 | "npm": "1.2.8000 || >= 1.4.16" 53 | } 54 | }, 55 | "node_modules/bytes": { 56 | "version": "3.1.2", 57 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 58 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 59 | "engines": { 60 | "node": ">= 0.8" 61 | } 62 | }, 63 | "node_modules/call-bind": { 64 | "version": "1.0.2", 65 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 66 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 67 | "dependencies": { 68 | "function-bind": "^1.1.1", 69 | "get-intrinsic": "^1.0.2" 70 | }, 71 | "funding": { 72 | "url": "https://github.com/sponsors/ljharb" 73 | } 74 | }, 75 | "node_modules/content-disposition": { 76 | "version": "0.5.4", 77 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 78 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 79 | "dependencies": { 80 | "safe-buffer": "5.2.1" 81 | }, 82 | "engines": { 83 | "node": ">= 0.6" 84 | } 85 | }, 86 | "node_modules/content-type": { 87 | "version": "1.0.5", 88 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 89 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 90 | "engines": { 91 | "node": ">= 0.6" 92 | } 93 | }, 94 | "node_modules/cookie": { 95 | "version": "0.5.0", 96 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 97 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 98 | "engines": { 99 | "node": ">= 0.6" 100 | } 101 | }, 102 | "node_modules/cookie-signature": { 103 | "version": "1.0.6", 104 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 105 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 106 | }, 107 | "node_modules/debug": { 108 | "version": "2.6.9", 109 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 110 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 111 | "dependencies": { 112 | "ms": "2.0.0" 113 | } 114 | }, 115 | "node_modules/depd": { 116 | "version": "2.0.0", 117 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 118 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 119 | "engines": { 120 | "node": ">= 0.8" 121 | } 122 | }, 123 | "node_modules/destroy": { 124 | "version": "1.2.0", 125 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 126 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 127 | "engines": { 128 | "node": ">= 0.8", 129 | "npm": "1.2.8000 || >= 1.4.16" 130 | } 131 | }, 132 | "node_modules/ee-first": { 133 | "version": "1.1.1", 134 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 135 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 136 | }, 137 | "node_modules/encodeurl": { 138 | "version": "1.0.2", 139 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 140 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 141 | "engines": { 142 | "node": ">= 0.8" 143 | } 144 | }, 145 | "node_modules/escape-html": { 146 | "version": "1.0.3", 147 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 148 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 149 | }, 150 | "node_modules/etag": { 151 | "version": "1.8.1", 152 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 153 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 154 | "engines": { 155 | "node": ">= 0.6" 156 | } 157 | }, 158 | "node_modules/express": { 159 | "version": "4.18.2", 160 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 161 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 162 | "dependencies": { 163 | "accepts": "~1.3.8", 164 | "array-flatten": "1.1.1", 165 | "body-parser": "1.20.1", 166 | "content-disposition": "0.5.4", 167 | "content-type": "~1.0.4", 168 | "cookie": "0.5.0", 169 | "cookie-signature": "1.0.6", 170 | "debug": "2.6.9", 171 | "depd": "2.0.0", 172 | "encodeurl": "~1.0.2", 173 | "escape-html": "~1.0.3", 174 | "etag": "~1.8.1", 175 | "finalhandler": "1.2.0", 176 | "fresh": "0.5.2", 177 | "http-errors": "2.0.0", 178 | "merge-descriptors": "1.0.1", 179 | "methods": "~1.1.2", 180 | "on-finished": "2.4.1", 181 | "parseurl": "~1.3.3", 182 | "path-to-regexp": "0.1.7", 183 | "proxy-addr": "~2.0.7", 184 | "qs": "6.11.0", 185 | "range-parser": "~1.2.1", 186 | "safe-buffer": "5.2.1", 187 | "send": "0.18.0", 188 | "serve-static": "1.15.0", 189 | "setprototypeof": "1.2.0", 190 | "statuses": "2.0.1", 191 | "type-is": "~1.6.18", 192 | "utils-merge": "1.0.1", 193 | "vary": "~1.1.2" 194 | }, 195 | "engines": { 196 | "node": ">= 0.10.0" 197 | } 198 | }, 199 | "node_modules/finalhandler": { 200 | "version": "1.2.0", 201 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 202 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 203 | "dependencies": { 204 | "debug": "2.6.9", 205 | "encodeurl": "~1.0.2", 206 | "escape-html": "~1.0.3", 207 | "on-finished": "2.4.1", 208 | "parseurl": "~1.3.3", 209 | "statuses": "2.0.1", 210 | "unpipe": "~1.0.0" 211 | }, 212 | "engines": { 213 | "node": ">= 0.8" 214 | } 215 | }, 216 | "node_modules/forwarded": { 217 | "version": "0.2.0", 218 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 219 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 220 | "engines": { 221 | "node": ">= 0.6" 222 | } 223 | }, 224 | "node_modules/fresh": { 225 | "version": "0.5.2", 226 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 227 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 228 | "engines": { 229 | "node": ">= 0.6" 230 | } 231 | }, 232 | "node_modules/function-bind": { 233 | "version": "1.1.1", 234 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 235 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 236 | }, 237 | "node_modules/get-intrinsic": { 238 | "version": "1.2.1", 239 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 240 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 241 | "dependencies": { 242 | "function-bind": "^1.1.1", 243 | "has": "^1.0.3", 244 | "has-proto": "^1.0.1", 245 | "has-symbols": "^1.0.3" 246 | }, 247 | "funding": { 248 | "url": "https://github.com/sponsors/ljharb" 249 | } 250 | }, 251 | "node_modules/has": { 252 | "version": "1.0.3", 253 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 254 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 255 | "dependencies": { 256 | "function-bind": "^1.1.1" 257 | }, 258 | "engines": { 259 | "node": ">= 0.4.0" 260 | } 261 | }, 262 | "node_modules/has-proto": { 263 | "version": "1.0.1", 264 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 265 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 266 | "engines": { 267 | "node": ">= 0.4" 268 | }, 269 | "funding": { 270 | "url": "https://github.com/sponsors/ljharb" 271 | } 272 | }, 273 | "node_modules/has-symbols": { 274 | "version": "1.0.3", 275 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 276 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 277 | "engines": { 278 | "node": ">= 0.4" 279 | }, 280 | "funding": { 281 | "url": "https://github.com/sponsors/ljharb" 282 | } 283 | }, 284 | "node_modules/http-errors": { 285 | "version": "2.0.0", 286 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 287 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 288 | "dependencies": { 289 | "depd": "2.0.0", 290 | "inherits": "2.0.4", 291 | "setprototypeof": "1.2.0", 292 | "statuses": "2.0.1", 293 | "toidentifier": "1.0.1" 294 | }, 295 | "engines": { 296 | "node": ">= 0.8" 297 | } 298 | }, 299 | "node_modules/iconv-lite": { 300 | "version": "0.4.24", 301 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 302 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 303 | "dependencies": { 304 | "safer-buffer": ">= 2.1.2 < 3" 305 | }, 306 | "engines": { 307 | "node": ">=0.10.0" 308 | } 309 | }, 310 | "node_modules/inherits": { 311 | "version": "2.0.4", 312 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 313 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 314 | }, 315 | "node_modules/ipaddr.js": { 316 | "version": "1.9.1", 317 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 318 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 319 | "engines": { 320 | "node": ">= 0.10" 321 | } 322 | }, 323 | "node_modules/media-typer": { 324 | "version": "0.3.0", 325 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 326 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 327 | "engines": { 328 | "node": ">= 0.6" 329 | } 330 | }, 331 | "node_modules/merge-descriptors": { 332 | "version": "1.0.1", 333 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 334 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 335 | }, 336 | "node_modules/methods": { 337 | "version": "1.1.2", 338 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 339 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 340 | "engines": { 341 | "node": ">= 0.6" 342 | } 343 | }, 344 | "node_modules/mime": { 345 | "version": "1.6.0", 346 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 347 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 348 | "bin": { 349 | "mime": "cli.js" 350 | }, 351 | "engines": { 352 | "node": ">=4" 353 | } 354 | }, 355 | "node_modules/mime-db": { 356 | "version": "1.52.0", 357 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 358 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 359 | "engines": { 360 | "node": ">= 0.6" 361 | } 362 | }, 363 | "node_modules/mime-types": { 364 | "version": "2.1.35", 365 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 366 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 367 | "dependencies": { 368 | "mime-db": "1.52.0" 369 | }, 370 | "engines": { 371 | "node": ">= 0.6" 372 | } 373 | }, 374 | "node_modules/ms": { 375 | "version": "2.0.0", 376 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 377 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 378 | }, 379 | "node_modules/negotiator": { 380 | "version": "0.6.3", 381 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 382 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 383 | "engines": { 384 | "node": ">= 0.6" 385 | } 386 | }, 387 | "node_modules/object-inspect": { 388 | "version": "1.12.3", 389 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 390 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 391 | "funding": { 392 | "url": "https://github.com/sponsors/ljharb" 393 | } 394 | }, 395 | "node_modules/on-finished": { 396 | "version": "2.4.1", 397 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 398 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 399 | "dependencies": { 400 | "ee-first": "1.1.1" 401 | }, 402 | "engines": { 403 | "node": ">= 0.8" 404 | } 405 | }, 406 | "node_modules/parseurl": { 407 | "version": "1.3.3", 408 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 409 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 410 | "engines": { 411 | "node": ">= 0.8" 412 | } 413 | }, 414 | "node_modules/path-to-regexp": { 415 | "version": "0.1.7", 416 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 417 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 418 | }, 419 | "node_modules/proxy-addr": { 420 | "version": "2.0.7", 421 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 422 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 423 | "dependencies": { 424 | "forwarded": "0.2.0", 425 | "ipaddr.js": "1.9.1" 426 | }, 427 | "engines": { 428 | "node": ">= 0.10" 429 | } 430 | }, 431 | "node_modules/qs": { 432 | "version": "6.11.0", 433 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 434 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 435 | "dependencies": { 436 | "side-channel": "^1.0.4" 437 | }, 438 | "engines": { 439 | "node": ">=0.6" 440 | }, 441 | "funding": { 442 | "url": "https://github.com/sponsors/ljharb" 443 | } 444 | }, 445 | "node_modules/range-parser": { 446 | "version": "1.2.1", 447 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 448 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 449 | "engines": { 450 | "node": ">= 0.6" 451 | } 452 | }, 453 | "node_modules/raw-body": { 454 | "version": "2.5.1", 455 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 456 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 457 | "dependencies": { 458 | "bytes": "3.1.2", 459 | "http-errors": "2.0.0", 460 | "iconv-lite": "0.4.24", 461 | "unpipe": "1.0.0" 462 | }, 463 | "engines": { 464 | "node": ">= 0.8" 465 | } 466 | }, 467 | "node_modules/safe-buffer": { 468 | "version": "5.2.1", 469 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 470 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 471 | "funding": [ 472 | { 473 | "type": "github", 474 | "url": "https://github.com/sponsors/feross" 475 | }, 476 | { 477 | "type": "patreon", 478 | "url": "https://www.patreon.com/feross" 479 | }, 480 | { 481 | "type": "consulting", 482 | "url": "https://feross.org/support" 483 | } 484 | ] 485 | }, 486 | "node_modules/safer-buffer": { 487 | "version": "2.1.2", 488 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 489 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 490 | }, 491 | "node_modules/send": { 492 | "version": "0.18.0", 493 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 494 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 495 | "dependencies": { 496 | "debug": "2.6.9", 497 | "depd": "2.0.0", 498 | "destroy": "1.2.0", 499 | "encodeurl": "~1.0.2", 500 | "escape-html": "~1.0.3", 501 | "etag": "~1.8.1", 502 | "fresh": "0.5.2", 503 | "http-errors": "2.0.0", 504 | "mime": "1.6.0", 505 | "ms": "2.1.3", 506 | "on-finished": "2.4.1", 507 | "range-parser": "~1.2.1", 508 | "statuses": "2.0.1" 509 | }, 510 | "engines": { 511 | "node": ">= 0.8.0" 512 | } 513 | }, 514 | "node_modules/send/node_modules/ms": { 515 | "version": "2.1.3", 516 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 517 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 518 | }, 519 | "node_modules/serve-static": { 520 | "version": "1.15.0", 521 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 522 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 523 | "dependencies": { 524 | "encodeurl": "~1.0.2", 525 | "escape-html": "~1.0.3", 526 | "parseurl": "~1.3.3", 527 | "send": "0.18.0" 528 | }, 529 | "engines": { 530 | "node": ">= 0.8.0" 531 | } 532 | }, 533 | "node_modules/setprototypeof": { 534 | "version": "1.2.0", 535 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 536 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 537 | }, 538 | "node_modules/side-channel": { 539 | "version": "1.0.4", 540 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 541 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 542 | "dependencies": { 543 | "call-bind": "^1.0.0", 544 | "get-intrinsic": "^1.0.2", 545 | "object-inspect": "^1.9.0" 546 | }, 547 | "funding": { 548 | "url": "https://github.com/sponsors/ljharb" 549 | } 550 | }, 551 | "node_modules/statuses": { 552 | "version": "2.0.1", 553 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 554 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 555 | "engines": { 556 | "node": ">= 0.8" 557 | } 558 | }, 559 | "node_modules/toidentifier": { 560 | "version": "1.0.1", 561 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 562 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 563 | "engines": { 564 | "node": ">=0.6" 565 | } 566 | }, 567 | "node_modules/type-is": { 568 | "version": "1.6.18", 569 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 570 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 571 | "dependencies": { 572 | "media-typer": "0.3.0", 573 | "mime-types": "~2.1.24" 574 | }, 575 | "engines": { 576 | "node": ">= 0.6" 577 | } 578 | }, 579 | "node_modules/unpipe": { 580 | "version": "1.0.0", 581 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 582 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 583 | "engines": { 584 | "node": ">= 0.8" 585 | } 586 | }, 587 | "node_modules/utils-merge": { 588 | "version": "1.0.1", 589 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 590 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 591 | "engines": { 592 | "node": ">= 0.4.0" 593 | } 594 | }, 595 | "node_modules/vary": { 596 | "version": "1.1.2", 597 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 598 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 599 | "engines": { 600 | "node": ">= 0.8" 601 | } 602 | } 603 | } 604 | } 605 | -------------------------------------------------------------------------------- /projects source codes/3.url_shortener/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "url_shortener", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "url_shortener", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "dotenv": "^16.3.1", 13 | "express": "^4.18.2", 14 | "joi": "^17.10.0", 15 | "mongoose": "^7.4.5", 16 | "nanoid": "^4.0.2", 17 | "swagger-jsdoc": "^6.2.8", 18 | "swagger-ui-express": "^5.0.0" 19 | } 20 | }, 21 | "node_modules/@apidevtools/json-schema-ref-parser": { 22 | "version": "9.1.2", 23 | "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", 24 | "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", 25 | "dependencies": { 26 | "@jsdevtools/ono": "^7.1.3", 27 | "@types/json-schema": "^7.0.6", 28 | "call-me-maybe": "^1.0.1", 29 | "js-yaml": "^4.1.0" 30 | } 31 | }, 32 | "node_modules/@apidevtools/openapi-schemas": { 33 | "version": "2.1.0", 34 | "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", 35 | "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", 36 | "engines": { 37 | "node": ">=10" 38 | } 39 | }, 40 | "node_modules/@apidevtools/swagger-methods": { 41 | "version": "3.0.2", 42 | "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", 43 | "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==" 44 | }, 45 | "node_modules/@apidevtools/swagger-parser": { 46 | "version": "10.0.3", 47 | "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz", 48 | "integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==", 49 | "dependencies": { 50 | "@apidevtools/json-schema-ref-parser": "^9.0.6", 51 | "@apidevtools/openapi-schemas": "^2.0.4", 52 | "@apidevtools/swagger-methods": "^3.0.2", 53 | "@jsdevtools/ono": "^7.1.3", 54 | "call-me-maybe": "^1.0.1", 55 | "z-schema": "^5.0.1" 56 | }, 57 | "peerDependencies": { 58 | "openapi-types": ">=7" 59 | } 60 | }, 61 | "node_modules/@hapi/hoek": { 62 | "version": "9.3.0", 63 | "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", 64 | "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" 65 | }, 66 | "node_modules/@hapi/topo": { 67 | "version": "5.1.0", 68 | "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", 69 | "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", 70 | "dependencies": { 71 | "@hapi/hoek": "^9.0.0" 72 | } 73 | }, 74 | "node_modules/@jsdevtools/ono": { 75 | "version": "7.1.3", 76 | "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", 77 | "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" 78 | }, 79 | "node_modules/@sideway/address": { 80 | "version": "4.1.4", 81 | "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", 82 | "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", 83 | "dependencies": { 84 | "@hapi/hoek": "^9.0.0" 85 | } 86 | }, 87 | "node_modules/@sideway/formula": { 88 | "version": "3.0.1", 89 | "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", 90 | "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" 91 | }, 92 | "node_modules/@sideway/pinpoint": { 93 | "version": "2.0.0", 94 | "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", 95 | "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" 96 | }, 97 | "node_modules/@types/json-schema": { 98 | "version": "7.0.12", 99 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", 100 | "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" 101 | }, 102 | "node_modules/@types/node": { 103 | "version": "20.5.7", 104 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", 105 | "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==" 106 | }, 107 | "node_modules/@types/webidl-conversions": { 108 | "version": "7.0.0", 109 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 110 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 111 | }, 112 | "node_modules/@types/whatwg-url": { 113 | "version": "8.2.2", 114 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 115 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 116 | "dependencies": { 117 | "@types/node": "*", 118 | "@types/webidl-conversions": "*" 119 | } 120 | }, 121 | "node_modules/accepts": { 122 | "version": "1.3.8", 123 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 124 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 125 | "dependencies": { 126 | "mime-types": "~2.1.34", 127 | "negotiator": "0.6.3" 128 | }, 129 | "engines": { 130 | "node": ">= 0.6" 131 | } 132 | }, 133 | "node_modules/argparse": { 134 | "version": "2.0.1", 135 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 136 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 137 | }, 138 | "node_modules/array-flatten": { 139 | "version": "1.1.1", 140 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 141 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 142 | }, 143 | "node_modules/balanced-match": { 144 | "version": "1.0.2", 145 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 146 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 147 | }, 148 | "node_modules/body-parser": { 149 | "version": "1.20.1", 150 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 151 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 152 | "dependencies": { 153 | "bytes": "3.1.2", 154 | "content-type": "~1.0.4", 155 | "debug": "2.6.9", 156 | "depd": "2.0.0", 157 | "destroy": "1.2.0", 158 | "http-errors": "2.0.0", 159 | "iconv-lite": "0.4.24", 160 | "on-finished": "2.4.1", 161 | "qs": "6.11.0", 162 | "raw-body": "2.5.1", 163 | "type-is": "~1.6.18", 164 | "unpipe": "1.0.0" 165 | }, 166 | "engines": { 167 | "node": ">= 0.8", 168 | "npm": "1.2.8000 || >= 1.4.16" 169 | } 170 | }, 171 | "node_modules/brace-expansion": { 172 | "version": "1.1.11", 173 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 174 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 175 | "dependencies": { 176 | "balanced-match": "^1.0.0", 177 | "concat-map": "0.0.1" 178 | } 179 | }, 180 | "node_modules/bson": { 181 | "version": "5.4.0", 182 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", 183 | "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==", 184 | "engines": { 185 | "node": ">=14.20.1" 186 | } 187 | }, 188 | "node_modules/bytes": { 189 | "version": "3.1.2", 190 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 191 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 192 | "engines": { 193 | "node": ">= 0.8" 194 | } 195 | }, 196 | "node_modules/call-bind": { 197 | "version": "1.0.2", 198 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 199 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 200 | "dependencies": { 201 | "function-bind": "^1.1.1", 202 | "get-intrinsic": "^1.0.2" 203 | }, 204 | "funding": { 205 | "url": "https://github.com/sponsors/ljharb" 206 | } 207 | }, 208 | "node_modules/call-me-maybe": { 209 | "version": "1.0.2", 210 | "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", 211 | "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" 212 | }, 213 | "node_modules/commander": { 214 | "version": "6.2.0", 215 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", 216 | "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", 217 | "engines": { 218 | "node": ">= 6" 219 | } 220 | }, 221 | "node_modules/concat-map": { 222 | "version": "0.0.1", 223 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 224 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 225 | }, 226 | "node_modules/content-disposition": { 227 | "version": "0.5.4", 228 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 229 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 230 | "dependencies": { 231 | "safe-buffer": "5.2.1" 232 | }, 233 | "engines": { 234 | "node": ">= 0.6" 235 | } 236 | }, 237 | "node_modules/content-type": { 238 | "version": "1.0.5", 239 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 240 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 241 | "engines": { 242 | "node": ">= 0.6" 243 | } 244 | }, 245 | "node_modules/cookie": { 246 | "version": "0.5.0", 247 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 248 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 249 | "engines": { 250 | "node": ">= 0.6" 251 | } 252 | }, 253 | "node_modules/cookie-signature": { 254 | "version": "1.0.6", 255 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 256 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 257 | }, 258 | "node_modules/debug": { 259 | "version": "2.6.9", 260 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 261 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 262 | "dependencies": { 263 | "ms": "2.0.0" 264 | } 265 | }, 266 | "node_modules/depd": { 267 | "version": "2.0.0", 268 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 269 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 270 | "engines": { 271 | "node": ">= 0.8" 272 | } 273 | }, 274 | "node_modules/destroy": { 275 | "version": "1.2.0", 276 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 277 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 278 | "engines": { 279 | "node": ">= 0.8", 280 | "npm": "1.2.8000 || >= 1.4.16" 281 | } 282 | }, 283 | "node_modules/doctrine": { 284 | "version": "3.0.0", 285 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 286 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 287 | "dependencies": { 288 | "esutils": "^2.0.2" 289 | }, 290 | "engines": { 291 | "node": ">=6.0.0" 292 | } 293 | }, 294 | "node_modules/dotenv": { 295 | "version": "16.3.1", 296 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", 297 | "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", 298 | "engines": { 299 | "node": ">=12" 300 | }, 301 | "funding": { 302 | "url": "https://github.com/motdotla/dotenv?sponsor=1" 303 | } 304 | }, 305 | "node_modules/ee-first": { 306 | "version": "1.1.1", 307 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 308 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 309 | }, 310 | "node_modules/encodeurl": { 311 | "version": "1.0.2", 312 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 313 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 314 | "engines": { 315 | "node": ">= 0.8" 316 | } 317 | }, 318 | "node_modules/escape-html": { 319 | "version": "1.0.3", 320 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 321 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 322 | }, 323 | "node_modules/esutils": { 324 | "version": "2.0.3", 325 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 326 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 327 | "engines": { 328 | "node": ">=0.10.0" 329 | } 330 | }, 331 | "node_modules/etag": { 332 | "version": "1.8.1", 333 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 334 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 335 | "engines": { 336 | "node": ">= 0.6" 337 | } 338 | }, 339 | "node_modules/express": { 340 | "version": "4.18.2", 341 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 342 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 343 | "dependencies": { 344 | "accepts": "~1.3.8", 345 | "array-flatten": "1.1.1", 346 | "body-parser": "1.20.1", 347 | "content-disposition": "0.5.4", 348 | "content-type": "~1.0.4", 349 | "cookie": "0.5.0", 350 | "cookie-signature": "1.0.6", 351 | "debug": "2.6.9", 352 | "depd": "2.0.0", 353 | "encodeurl": "~1.0.2", 354 | "escape-html": "~1.0.3", 355 | "etag": "~1.8.1", 356 | "finalhandler": "1.2.0", 357 | "fresh": "0.5.2", 358 | "http-errors": "2.0.0", 359 | "merge-descriptors": "1.0.1", 360 | "methods": "~1.1.2", 361 | "on-finished": "2.4.1", 362 | "parseurl": "~1.3.3", 363 | "path-to-regexp": "0.1.7", 364 | "proxy-addr": "~2.0.7", 365 | "qs": "6.11.0", 366 | "range-parser": "~1.2.1", 367 | "safe-buffer": "5.2.1", 368 | "send": "0.18.0", 369 | "serve-static": "1.15.0", 370 | "setprototypeof": "1.2.0", 371 | "statuses": "2.0.1", 372 | "type-is": "~1.6.18", 373 | "utils-merge": "1.0.1", 374 | "vary": "~1.1.2" 375 | }, 376 | "engines": { 377 | "node": ">= 0.10.0" 378 | } 379 | }, 380 | "node_modules/finalhandler": { 381 | "version": "1.2.0", 382 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 383 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 384 | "dependencies": { 385 | "debug": "2.6.9", 386 | "encodeurl": "~1.0.2", 387 | "escape-html": "~1.0.3", 388 | "on-finished": "2.4.1", 389 | "parseurl": "~1.3.3", 390 | "statuses": "2.0.1", 391 | "unpipe": "~1.0.0" 392 | }, 393 | "engines": { 394 | "node": ">= 0.8" 395 | } 396 | }, 397 | "node_modules/forwarded": { 398 | "version": "0.2.0", 399 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 400 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 401 | "engines": { 402 | "node": ">= 0.6" 403 | } 404 | }, 405 | "node_modules/fresh": { 406 | "version": "0.5.2", 407 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 408 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 409 | "engines": { 410 | "node": ">= 0.6" 411 | } 412 | }, 413 | "node_modules/fs.realpath": { 414 | "version": "1.0.0", 415 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 416 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 417 | }, 418 | "node_modules/function-bind": { 419 | "version": "1.1.1", 420 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 421 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 422 | }, 423 | "node_modules/get-intrinsic": { 424 | "version": "1.2.1", 425 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 426 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 427 | "dependencies": { 428 | "function-bind": "^1.1.1", 429 | "has": "^1.0.3", 430 | "has-proto": "^1.0.1", 431 | "has-symbols": "^1.0.3" 432 | }, 433 | "funding": { 434 | "url": "https://github.com/sponsors/ljharb" 435 | } 436 | }, 437 | "node_modules/glob": { 438 | "version": "7.1.6", 439 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 440 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 441 | "dependencies": { 442 | "fs.realpath": "^1.0.0", 443 | "inflight": "^1.0.4", 444 | "inherits": "2", 445 | "minimatch": "^3.0.4", 446 | "once": "^1.3.0", 447 | "path-is-absolute": "^1.0.0" 448 | }, 449 | "engines": { 450 | "node": "*" 451 | }, 452 | "funding": { 453 | "url": "https://github.com/sponsors/isaacs" 454 | } 455 | }, 456 | "node_modules/has": { 457 | "version": "1.0.3", 458 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 459 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 460 | "dependencies": { 461 | "function-bind": "^1.1.1" 462 | }, 463 | "engines": { 464 | "node": ">= 0.4.0" 465 | } 466 | }, 467 | "node_modules/has-proto": { 468 | "version": "1.0.1", 469 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 470 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 471 | "engines": { 472 | "node": ">= 0.4" 473 | }, 474 | "funding": { 475 | "url": "https://github.com/sponsors/ljharb" 476 | } 477 | }, 478 | "node_modules/has-symbols": { 479 | "version": "1.0.3", 480 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 481 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 482 | "engines": { 483 | "node": ">= 0.4" 484 | }, 485 | "funding": { 486 | "url": "https://github.com/sponsors/ljharb" 487 | } 488 | }, 489 | "node_modules/http-errors": { 490 | "version": "2.0.0", 491 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 492 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 493 | "dependencies": { 494 | "depd": "2.0.0", 495 | "inherits": "2.0.4", 496 | "setprototypeof": "1.2.0", 497 | "statuses": "2.0.1", 498 | "toidentifier": "1.0.1" 499 | }, 500 | "engines": { 501 | "node": ">= 0.8" 502 | } 503 | }, 504 | "node_modules/iconv-lite": { 505 | "version": "0.4.24", 506 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 507 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 508 | "dependencies": { 509 | "safer-buffer": ">= 2.1.2 < 3" 510 | }, 511 | "engines": { 512 | "node": ">=0.10.0" 513 | } 514 | }, 515 | "node_modules/inflight": { 516 | "version": "1.0.6", 517 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 518 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 519 | "dependencies": { 520 | "once": "^1.3.0", 521 | "wrappy": "1" 522 | } 523 | }, 524 | "node_modules/inherits": { 525 | "version": "2.0.4", 526 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 527 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 528 | }, 529 | "node_modules/ip": { 530 | "version": "2.0.0", 531 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 532 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 533 | }, 534 | "node_modules/ipaddr.js": { 535 | "version": "1.9.1", 536 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 537 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 538 | "engines": { 539 | "node": ">= 0.10" 540 | } 541 | }, 542 | "node_modules/joi": { 543 | "version": "17.10.0", 544 | "resolved": "https://registry.npmjs.org/joi/-/joi-17.10.0.tgz", 545 | "integrity": "sha512-hrazgRSlhzacZ69LdcKfhi3Vu13z2yFfoAzmEov3yFIJlatTdVGUW6vle1zjH8qkzdCn/qGw8rapjqsObbYXAg==", 546 | "dependencies": { 547 | "@hapi/hoek": "^9.0.0", 548 | "@hapi/topo": "^5.0.0", 549 | "@sideway/address": "^4.1.3", 550 | "@sideway/formula": "^3.0.1", 551 | "@sideway/pinpoint": "^2.0.0" 552 | } 553 | }, 554 | "node_modules/js-yaml": { 555 | "version": "4.1.0", 556 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 557 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 558 | "dependencies": { 559 | "argparse": "^2.0.1" 560 | }, 561 | "bin": { 562 | "js-yaml": "bin/js-yaml.js" 563 | } 564 | }, 565 | "node_modules/kareem": { 566 | "version": "2.5.1", 567 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 568 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", 569 | "engines": { 570 | "node": ">=12.0.0" 571 | } 572 | }, 573 | "node_modules/lodash.get": { 574 | "version": "4.4.2", 575 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 576 | "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" 577 | }, 578 | "node_modules/lodash.isequal": { 579 | "version": "4.5.0", 580 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 581 | "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" 582 | }, 583 | "node_modules/lodash.mergewith": { 584 | "version": "4.6.2", 585 | "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", 586 | "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" 587 | }, 588 | "node_modules/media-typer": { 589 | "version": "0.3.0", 590 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 591 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 592 | "engines": { 593 | "node": ">= 0.6" 594 | } 595 | }, 596 | "node_modules/memory-pager": { 597 | "version": "1.5.0", 598 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 599 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 600 | "optional": true 601 | }, 602 | "node_modules/merge-descriptors": { 603 | "version": "1.0.1", 604 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 605 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 606 | }, 607 | "node_modules/methods": { 608 | "version": "1.1.2", 609 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 610 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 611 | "engines": { 612 | "node": ">= 0.6" 613 | } 614 | }, 615 | "node_modules/mime": { 616 | "version": "1.6.0", 617 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 618 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 619 | "bin": { 620 | "mime": "cli.js" 621 | }, 622 | "engines": { 623 | "node": ">=4" 624 | } 625 | }, 626 | "node_modules/mime-db": { 627 | "version": "1.52.0", 628 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 629 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 630 | "engines": { 631 | "node": ">= 0.6" 632 | } 633 | }, 634 | "node_modules/mime-types": { 635 | "version": "2.1.35", 636 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 637 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 638 | "dependencies": { 639 | "mime-db": "1.52.0" 640 | }, 641 | "engines": { 642 | "node": ">= 0.6" 643 | } 644 | }, 645 | "node_modules/minimatch": { 646 | "version": "3.1.2", 647 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 648 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 649 | "dependencies": { 650 | "brace-expansion": "^1.1.7" 651 | }, 652 | "engines": { 653 | "node": "*" 654 | } 655 | }, 656 | "node_modules/mongodb": { 657 | "version": "5.7.0", 658 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.7.0.tgz", 659 | "integrity": "sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==", 660 | "dependencies": { 661 | "bson": "^5.4.0", 662 | "mongodb-connection-string-url": "^2.6.0", 663 | "socks": "^2.7.1" 664 | }, 665 | "engines": { 666 | "node": ">=14.20.1" 667 | }, 668 | "optionalDependencies": { 669 | "saslprep": "^1.0.3" 670 | }, 671 | "peerDependencies": { 672 | "@aws-sdk/credential-providers": "^3.201.0", 673 | "@mongodb-js/zstd": "^1.1.0", 674 | "kerberos": "^2.0.1", 675 | "mongodb-client-encryption": ">=2.3.0 <3", 676 | "snappy": "^7.2.2" 677 | }, 678 | "peerDependenciesMeta": { 679 | "@aws-sdk/credential-providers": { 680 | "optional": true 681 | }, 682 | "@mongodb-js/zstd": { 683 | "optional": true 684 | }, 685 | "kerberos": { 686 | "optional": true 687 | }, 688 | "mongodb-client-encryption": { 689 | "optional": true 690 | }, 691 | "snappy": { 692 | "optional": true 693 | } 694 | } 695 | }, 696 | "node_modules/mongodb-connection-string-url": { 697 | "version": "2.6.0", 698 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 699 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 700 | "dependencies": { 701 | "@types/whatwg-url": "^8.2.1", 702 | "whatwg-url": "^11.0.0" 703 | } 704 | }, 705 | "node_modules/mongoose": { 706 | "version": "7.4.5", 707 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.4.5.tgz", 708 | "integrity": "sha512-X7Mw7KHUYZmyOQmlu7D9TnZh/3vOrAYmZwEpXDU0VDvLPKT0T7PF6blwiv3aXOEMwv9T3rLTC9lJb3C5dWld2A==", 709 | "dependencies": { 710 | "bson": "^5.4.0", 711 | "kareem": "2.5.1", 712 | "mongodb": "5.7.0", 713 | "mpath": "0.9.0", 714 | "mquery": "5.0.0", 715 | "ms": "2.1.3", 716 | "sift": "16.0.1" 717 | }, 718 | "engines": { 719 | "node": ">=14.20.1" 720 | }, 721 | "funding": { 722 | "type": "opencollective", 723 | "url": "https://opencollective.com/mongoose" 724 | } 725 | }, 726 | "node_modules/mongoose/node_modules/ms": { 727 | "version": "2.1.3", 728 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 729 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 730 | }, 731 | "node_modules/mpath": { 732 | "version": "0.9.0", 733 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 734 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 735 | "engines": { 736 | "node": ">=4.0.0" 737 | } 738 | }, 739 | "node_modules/mquery": { 740 | "version": "5.0.0", 741 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 742 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 743 | "dependencies": { 744 | "debug": "4.x" 745 | }, 746 | "engines": { 747 | "node": ">=14.0.0" 748 | } 749 | }, 750 | "node_modules/mquery/node_modules/debug": { 751 | "version": "4.3.4", 752 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 753 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 754 | "dependencies": { 755 | "ms": "2.1.2" 756 | }, 757 | "engines": { 758 | "node": ">=6.0" 759 | }, 760 | "peerDependenciesMeta": { 761 | "supports-color": { 762 | "optional": true 763 | } 764 | } 765 | }, 766 | "node_modules/mquery/node_modules/ms": { 767 | "version": "2.1.2", 768 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 769 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 770 | }, 771 | "node_modules/ms": { 772 | "version": "2.0.0", 773 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 774 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 775 | }, 776 | "node_modules/nanoid": { 777 | "version": "4.0.2", 778 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", 779 | "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", 780 | "funding": [ 781 | { 782 | "type": "github", 783 | "url": "https://github.com/sponsors/ai" 784 | } 785 | ], 786 | "bin": { 787 | "nanoid": "bin/nanoid.js" 788 | }, 789 | "engines": { 790 | "node": "^14 || ^16 || >=18" 791 | } 792 | }, 793 | "node_modules/negotiator": { 794 | "version": "0.6.3", 795 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 796 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 797 | "engines": { 798 | "node": ">= 0.6" 799 | } 800 | }, 801 | "node_modules/object-inspect": { 802 | "version": "1.12.3", 803 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 804 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 805 | "funding": { 806 | "url": "https://github.com/sponsors/ljharb" 807 | } 808 | }, 809 | "node_modules/on-finished": { 810 | "version": "2.4.1", 811 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 812 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 813 | "dependencies": { 814 | "ee-first": "1.1.1" 815 | }, 816 | "engines": { 817 | "node": ">= 0.8" 818 | } 819 | }, 820 | "node_modules/once": { 821 | "version": "1.4.0", 822 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 823 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 824 | "dependencies": { 825 | "wrappy": "1" 826 | } 827 | }, 828 | "node_modules/openapi-types": { 829 | "version": "12.1.3", 830 | "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", 831 | "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", 832 | "peer": true 833 | }, 834 | "node_modules/parseurl": { 835 | "version": "1.3.3", 836 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 837 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 838 | "engines": { 839 | "node": ">= 0.8" 840 | } 841 | }, 842 | "node_modules/path-is-absolute": { 843 | "version": "1.0.1", 844 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 845 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 846 | "engines": { 847 | "node": ">=0.10.0" 848 | } 849 | }, 850 | "node_modules/path-to-regexp": { 851 | "version": "0.1.7", 852 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 853 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 854 | }, 855 | "node_modules/proxy-addr": { 856 | "version": "2.0.7", 857 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 858 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 859 | "dependencies": { 860 | "forwarded": "0.2.0", 861 | "ipaddr.js": "1.9.1" 862 | }, 863 | "engines": { 864 | "node": ">= 0.10" 865 | } 866 | }, 867 | "node_modules/punycode": { 868 | "version": "2.3.0", 869 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 870 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 871 | "engines": { 872 | "node": ">=6" 873 | } 874 | }, 875 | "node_modules/qs": { 876 | "version": "6.11.0", 877 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 878 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 879 | "dependencies": { 880 | "side-channel": "^1.0.4" 881 | }, 882 | "engines": { 883 | "node": ">=0.6" 884 | }, 885 | "funding": { 886 | "url": "https://github.com/sponsors/ljharb" 887 | } 888 | }, 889 | "node_modules/range-parser": { 890 | "version": "1.2.1", 891 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 892 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 893 | "engines": { 894 | "node": ">= 0.6" 895 | } 896 | }, 897 | "node_modules/raw-body": { 898 | "version": "2.5.1", 899 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 900 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 901 | "dependencies": { 902 | "bytes": "3.1.2", 903 | "http-errors": "2.0.0", 904 | "iconv-lite": "0.4.24", 905 | "unpipe": "1.0.0" 906 | }, 907 | "engines": { 908 | "node": ">= 0.8" 909 | } 910 | }, 911 | "node_modules/safe-buffer": { 912 | "version": "5.2.1", 913 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 914 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 915 | "funding": [ 916 | { 917 | "type": "github", 918 | "url": "https://github.com/sponsors/feross" 919 | }, 920 | { 921 | "type": "patreon", 922 | "url": "https://www.patreon.com/feross" 923 | }, 924 | { 925 | "type": "consulting", 926 | "url": "https://feross.org/support" 927 | } 928 | ] 929 | }, 930 | "node_modules/safer-buffer": { 931 | "version": "2.1.2", 932 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 933 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 934 | }, 935 | "node_modules/saslprep": { 936 | "version": "1.0.3", 937 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 938 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 939 | "optional": true, 940 | "dependencies": { 941 | "sparse-bitfield": "^3.0.3" 942 | }, 943 | "engines": { 944 | "node": ">=6" 945 | } 946 | }, 947 | "node_modules/send": { 948 | "version": "0.18.0", 949 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 950 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 951 | "dependencies": { 952 | "debug": "2.6.9", 953 | "depd": "2.0.0", 954 | "destroy": "1.2.0", 955 | "encodeurl": "~1.0.2", 956 | "escape-html": "~1.0.3", 957 | "etag": "~1.8.1", 958 | "fresh": "0.5.2", 959 | "http-errors": "2.0.0", 960 | "mime": "1.6.0", 961 | "ms": "2.1.3", 962 | "on-finished": "2.4.1", 963 | "range-parser": "~1.2.1", 964 | "statuses": "2.0.1" 965 | }, 966 | "engines": { 967 | "node": ">= 0.8.0" 968 | } 969 | }, 970 | "node_modules/send/node_modules/ms": { 971 | "version": "2.1.3", 972 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 973 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 974 | }, 975 | "node_modules/serve-static": { 976 | "version": "1.15.0", 977 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 978 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 979 | "dependencies": { 980 | "encodeurl": "~1.0.2", 981 | "escape-html": "~1.0.3", 982 | "parseurl": "~1.3.3", 983 | "send": "0.18.0" 984 | }, 985 | "engines": { 986 | "node": ">= 0.8.0" 987 | } 988 | }, 989 | "node_modules/setprototypeof": { 990 | "version": "1.2.0", 991 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 992 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 993 | }, 994 | "node_modules/side-channel": { 995 | "version": "1.0.4", 996 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 997 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 998 | "dependencies": { 999 | "call-bind": "^1.0.0", 1000 | "get-intrinsic": "^1.0.2", 1001 | "object-inspect": "^1.9.0" 1002 | }, 1003 | "funding": { 1004 | "url": "https://github.com/sponsors/ljharb" 1005 | } 1006 | }, 1007 | "node_modules/sift": { 1008 | "version": "16.0.1", 1009 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 1010 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 1011 | }, 1012 | "node_modules/smart-buffer": { 1013 | "version": "4.2.0", 1014 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1015 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1016 | "engines": { 1017 | "node": ">= 6.0.0", 1018 | "npm": ">= 3.0.0" 1019 | } 1020 | }, 1021 | "node_modules/socks": { 1022 | "version": "2.7.1", 1023 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 1024 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 1025 | "dependencies": { 1026 | "ip": "^2.0.0", 1027 | "smart-buffer": "^4.2.0" 1028 | }, 1029 | "engines": { 1030 | "node": ">= 10.13.0", 1031 | "npm": ">= 3.0.0" 1032 | } 1033 | }, 1034 | "node_modules/sparse-bitfield": { 1035 | "version": "3.0.3", 1036 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1037 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1038 | "optional": true, 1039 | "dependencies": { 1040 | "memory-pager": "^1.0.2" 1041 | } 1042 | }, 1043 | "node_modules/statuses": { 1044 | "version": "2.0.1", 1045 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1046 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1047 | "engines": { 1048 | "node": ">= 0.8" 1049 | } 1050 | }, 1051 | "node_modules/swagger-jsdoc": { 1052 | "version": "6.2.8", 1053 | "resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-6.2.8.tgz", 1054 | "integrity": "sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==", 1055 | "dependencies": { 1056 | "commander": "6.2.0", 1057 | "doctrine": "3.0.0", 1058 | "glob": "7.1.6", 1059 | "lodash.mergewith": "^4.6.2", 1060 | "swagger-parser": "^10.0.3", 1061 | "yaml": "2.0.0-1" 1062 | }, 1063 | "bin": { 1064 | "swagger-jsdoc": "bin/swagger-jsdoc.js" 1065 | }, 1066 | "engines": { 1067 | "node": ">=12.0.0" 1068 | } 1069 | }, 1070 | "node_modules/swagger-parser": { 1071 | "version": "10.0.3", 1072 | "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz", 1073 | "integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==", 1074 | "dependencies": { 1075 | "@apidevtools/swagger-parser": "10.0.3" 1076 | }, 1077 | "engines": { 1078 | "node": ">=10" 1079 | } 1080 | }, 1081 | "node_modules/swagger-ui-dist": { 1082 | "version": "5.4.2", 1083 | "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.4.2.tgz", 1084 | "integrity": "sha512-vT5QxP/NOr9m4gLZl+SpavWI3M9Fdh30+Sdw9rEtZbkqNmNNEPhjXas2xTD9rsJYYdLzAiMfwXvtooWH3xbLJA==" 1085 | }, 1086 | "node_modules/swagger-ui-express": { 1087 | "version": "5.0.0", 1088 | "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.0.tgz", 1089 | "integrity": "sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA==", 1090 | "dependencies": { 1091 | "swagger-ui-dist": ">=5.0.0" 1092 | }, 1093 | "engines": { 1094 | "node": ">= v0.10.32" 1095 | }, 1096 | "peerDependencies": { 1097 | "express": ">=4.0.0 || >=5.0.0-beta" 1098 | } 1099 | }, 1100 | "node_modules/toidentifier": { 1101 | "version": "1.0.1", 1102 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1103 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 1104 | "engines": { 1105 | "node": ">=0.6" 1106 | } 1107 | }, 1108 | "node_modules/tr46": { 1109 | "version": "3.0.0", 1110 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1111 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1112 | "dependencies": { 1113 | "punycode": "^2.1.1" 1114 | }, 1115 | "engines": { 1116 | "node": ">=12" 1117 | } 1118 | }, 1119 | "node_modules/type-is": { 1120 | "version": "1.6.18", 1121 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1122 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1123 | "dependencies": { 1124 | "media-typer": "0.3.0", 1125 | "mime-types": "~2.1.24" 1126 | }, 1127 | "engines": { 1128 | "node": ">= 0.6" 1129 | } 1130 | }, 1131 | "node_modules/unpipe": { 1132 | "version": "1.0.0", 1133 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1134 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 1135 | "engines": { 1136 | "node": ">= 0.8" 1137 | } 1138 | }, 1139 | "node_modules/utils-merge": { 1140 | "version": "1.0.1", 1141 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1142 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 1143 | "engines": { 1144 | "node": ">= 0.4.0" 1145 | } 1146 | }, 1147 | "node_modules/validator": { 1148 | "version": "13.11.0", 1149 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", 1150 | "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", 1151 | "engines": { 1152 | "node": ">= 0.10" 1153 | } 1154 | }, 1155 | "node_modules/vary": { 1156 | "version": "1.1.2", 1157 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1158 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 1159 | "engines": { 1160 | "node": ">= 0.8" 1161 | } 1162 | }, 1163 | "node_modules/webidl-conversions": { 1164 | "version": "7.0.0", 1165 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1166 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 1167 | "engines": { 1168 | "node": ">=12" 1169 | } 1170 | }, 1171 | "node_modules/whatwg-url": { 1172 | "version": "11.0.0", 1173 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 1174 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 1175 | "dependencies": { 1176 | "tr46": "^3.0.0", 1177 | "webidl-conversions": "^7.0.0" 1178 | }, 1179 | "engines": { 1180 | "node": ">=12" 1181 | } 1182 | }, 1183 | "node_modules/wrappy": { 1184 | "version": "1.0.2", 1185 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1186 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1187 | }, 1188 | "node_modules/yaml": { 1189 | "version": "2.0.0-1", 1190 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-1.tgz", 1191 | "integrity": "sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==", 1192 | "engines": { 1193 | "node": ">= 6" 1194 | } 1195 | }, 1196 | "node_modules/z-schema": { 1197 | "version": "5.0.5", 1198 | "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", 1199 | "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", 1200 | "dependencies": { 1201 | "lodash.get": "^4.4.2", 1202 | "lodash.isequal": "^4.5.0", 1203 | "validator": "^13.7.0" 1204 | }, 1205 | "bin": { 1206 | "z-schema": "bin/z-schema" 1207 | }, 1208 | "engines": { 1209 | "node": ">=8.0.0" 1210 | }, 1211 | "optionalDependencies": { 1212 | "commander": "^9.4.1" 1213 | } 1214 | }, 1215 | "node_modules/z-schema/node_modules/commander": { 1216 | "version": "9.5.0", 1217 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", 1218 | "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", 1219 | "optional": true, 1220 | "engines": { 1221 | "node": "^12.20.0 || >=14" 1222 | } 1223 | } 1224 | } 1225 | } 1226 | -------------------------------------------------------------------------------- /projects source codes/1.simple API servers todo and reminder/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "1.simple-api-servers-todo-and-reminder", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "1.simple-api-servers-todo-and-reminder", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "bcrypt": "^5.1.0", 13 | "config": "^3.3.9", 14 | "ejs": "^3.1.9", 15 | "express": "^4.18.2", 16 | "joi": "^17.9.2", 17 | "jsonwebtoken": "^9.0.0", 18 | "lodash": "^4.17.21", 19 | "mongoose": "^7.1.2", 20 | "winston": "^3.9.0" 21 | } 22 | }, 23 | "node_modules/@colors/colors": { 24 | "version": "1.5.0", 25 | "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", 26 | "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", 27 | "engines": { 28 | "node": ">=0.1.90" 29 | } 30 | }, 31 | "node_modules/@dabh/diagnostics": { 32 | "version": "2.0.3", 33 | "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", 34 | "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", 35 | "dependencies": { 36 | "colorspace": "1.1.x", 37 | "enabled": "2.0.x", 38 | "kuler": "^2.0.0" 39 | } 40 | }, 41 | "node_modules/@hapi/hoek": { 42 | "version": "9.3.0", 43 | "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", 44 | "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" 45 | }, 46 | "node_modules/@hapi/topo": { 47 | "version": "5.1.0", 48 | "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", 49 | "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", 50 | "dependencies": { 51 | "@hapi/hoek": "^9.0.0" 52 | } 53 | }, 54 | "node_modules/@mapbox/node-pre-gyp": { 55 | "version": "1.0.10", 56 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", 57 | "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", 58 | "dependencies": { 59 | "detect-libc": "^2.0.0", 60 | "https-proxy-agent": "^5.0.0", 61 | "make-dir": "^3.1.0", 62 | "node-fetch": "^2.6.7", 63 | "nopt": "^5.0.0", 64 | "npmlog": "^5.0.1", 65 | "rimraf": "^3.0.2", 66 | "semver": "^7.3.5", 67 | "tar": "^6.1.11" 68 | }, 69 | "bin": { 70 | "node-pre-gyp": "bin/node-pre-gyp" 71 | } 72 | }, 73 | "node_modules/@sideway/address": { 74 | "version": "4.1.4", 75 | "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", 76 | "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", 77 | "dependencies": { 78 | "@hapi/hoek": "^9.0.0" 79 | } 80 | }, 81 | "node_modules/@sideway/formula": { 82 | "version": "3.0.1", 83 | "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", 84 | "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" 85 | }, 86 | "node_modules/@sideway/pinpoint": { 87 | "version": "2.0.0", 88 | "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", 89 | "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" 90 | }, 91 | "node_modules/@types/node": { 92 | "version": "20.2.1", 93 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.1.tgz", 94 | "integrity": "sha512-DqJociPbZP1lbZ5SQPk4oag6W7AyaGMO6gSfRwq3PWl4PXTwJpRQJhDq4W0kzrg3w6tJ1SwlvGZ5uKFHY13LIg==" 95 | }, 96 | "node_modules/@types/triple-beam": { 97 | "version": "1.3.2", 98 | "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", 99 | "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==" 100 | }, 101 | "node_modules/@types/webidl-conversions": { 102 | "version": "7.0.0", 103 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 104 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" 105 | }, 106 | "node_modules/@types/whatwg-url": { 107 | "version": "8.2.2", 108 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 109 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 110 | "dependencies": { 111 | "@types/node": "*", 112 | "@types/webidl-conversions": "*" 113 | } 114 | }, 115 | "node_modules/abbrev": { 116 | "version": "1.1.1", 117 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 118 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 119 | }, 120 | "node_modules/accepts": { 121 | "version": "1.3.8", 122 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 123 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 124 | "dependencies": { 125 | "mime-types": "~2.1.34", 126 | "negotiator": "0.6.3" 127 | }, 128 | "engines": { 129 | "node": ">= 0.6" 130 | } 131 | }, 132 | "node_modules/agent-base": { 133 | "version": "6.0.2", 134 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 135 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 136 | "dependencies": { 137 | "debug": "4" 138 | }, 139 | "engines": { 140 | "node": ">= 6.0.0" 141 | } 142 | }, 143 | "node_modules/agent-base/node_modules/debug": { 144 | "version": "4.3.4", 145 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 146 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 147 | "dependencies": { 148 | "ms": "2.1.2" 149 | }, 150 | "engines": { 151 | "node": ">=6.0" 152 | }, 153 | "peerDependenciesMeta": { 154 | "supports-color": { 155 | "optional": true 156 | } 157 | } 158 | }, 159 | "node_modules/agent-base/node_modules/ms": { 160 | "version": "2.1.2", 161 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 162 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 163 | }, 164 | "node_modules/ansi-regex": { 165 | "version": "5.0.1", 166 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 167 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 168 | "engines": { 169 | "node": ">=8" 170 | } 171 | }, 172 | "node_modules/ansi-styles": { 173 | "version": "4.3.0", 174 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 175 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 176 | "dependencies": { 177 | "color-convert": "^2.0.1" 178 | }, 179 | "engines": { 180 | "node": ">=8" 181 | }, 182 | "funding": { 183 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 184 | } 185 | }, 186 | "node_modules/aproba": { 187 | "version": "2.0.0", 188 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", 189 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" 190 | }, 191 | "node_modules/are-we-there-yet": { 192 | "version": "2.0.0", 193 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", 194 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", 195 | "dependencies": { 196 | "delegates": "^1.0.0", 197 | "readable-stream": "^3.6.0" 198 | }, 199 | "engines": { 200 | "node": ">=10" 201 | } 202 | }, 203 | "node_modules/array-flatten": { 204 | "version": "1.1.1", 205 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 206 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 207 | }, 208 | "node_modules/async": { 209 | "version": "3.2.4", 210 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 211 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" 212 | }, 213 | "node_modules/balanced-match": { 214 | "version": "1.0.2", 215 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 216 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 217 | }, 218 | "node_modules/bcrypt": { 219 | "version": "5.1.0", 220 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", 221 | "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", 222 | "hasInstallScript": true, 223 | "dependencies": { 224 | "@mapbox/node-pre-gyp": "^1.0.10", 225 | "node-addon-api": "^5.0.0" 226 | }, 227 | "engines": { 228 | "node": ">= 10.0.0" 229 | } 230 | }, 231 | "node_modules/body-parser": { 232 | "version": "1.20.1", 233 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 234 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 235 | "dependencies": { 236 | "bytes": "3.1.2", 237 | "content-type": "~1.0.4", 238 | "debug": "2.6.9", 239 | "depd": "2.0.0", 240 | "destroy": "1.2.0", 241 | "http-errors": "2.0.0", 242 | "iconv-lite": "0.4.24", 243 | "on-finished": "2.4.1", 244 | "qs": "6.11.0", 245 | "raw-body": "2.5.1", 246 | "type-is": "~1.6.18", 247 | "unpipe": "1.0.0" 248 | }, 249 | "engines": { 250 | "node": ">= 0.8", 251 | "npm": "1.2.8000 || >= 1.4.16" 252 | } 253 | }, 254 | "node_modules/brace-expansion": { 255 | "version": "1.1.11", 256 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 257 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 258 | "dependencies": { 259 | "balanced-match": "^1.0.0", 260 | "concat-map": "0.0.1" 261 | } 262 | }, 263 | "node_modules/bson": { 264 | "version": "5.3.0", 265 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", 266 | "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==", 267 | "engines": { 268 | "node": ">=14.20.1" 269 | } 270 | }, 271 | "node_modules/buffer-equal-constant-time": { 272 | "version": "1.0.1", 273 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 274 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" 275 | }, 276 | "node_modules/bytes": { 277 | "version": "3.1.2", 278 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 279 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 280 | "engines": { 281 | "node": ">= 0.8" 282 | } 283 | }, 284 | "node_modules/call-bind": { 285 | "version": "1.0.2", 286 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 287 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 288 | "dependencies": { 289 | "function-bind": "^1.1.1", 290 | "get-intrinsic": "^1.0.2" 291 | }, 292 | "funding": { 293 | "url": "https://github.com/sponsors/ljharb" 294 | } 295 | }, 296 | "node_modules/chalk": { 297 | "version": "4.1.2", 298 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 299 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 300 | "dependencies": { 301 | "ansi-styles": "^4.1.0", 302 | "supports-color": "^7.1.0" 303 | }, 304 | "engines": { 305 | "node": ">=10" 306 | }, 307 | "funding": { 308 | "url": "https://github.com/chalk/chalk?sponsor=1" 309 | } 310 | }, 311 | "node_modules/chownr": { 312 | "version": "2.0.0", 313 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 314 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 315 | "engines": { 316 | "node": ">=10" 317 | } 318 | }, 319 | "node_modules/color": { 320 | "version": "3.2.1", 321 | "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", 322 | "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", 323 | "dependencies": { 324 | "color-convert": "^1.9.3", 325 | "color-string": "^1.6.0" 326 | } 327 | }, 328 | "node_modules/color-convert": { 329 | "version": "2.0.1", 330 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 331 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 332 | "dependencies": { 333 | "color-name": "~1.1.4" 334 | }, 335 | "engines": { 336 | "node": ">=7.0.0" 337 | } 338 | }, 339 | "node_modules/color-name": { 340 | "version": "1.1.4", 341 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 342 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 343 | }, 344 | "node_modules/color-string": { 345 | "version": "1.9.1", 346 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", 347 | "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", 348 | "dependencies": { 349 | "color-name": "^1.0.0", 350 | "simple-swizzle": "^0.2.2" 351 | } 352 | }, 353 | "node_modules/color-support": { 354 | "version": "1.1.3", 355 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 356 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 357 | "bin": { 358 | "color-support": "bin.js" 359 | } 360 | }, 361 | "node_modules/color/node_modules/color-convert": { 362 | "version": "1.9.3", 363 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 364 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 365 | "dependencies": { 366 | "color-name": "1.1.3" 367 | } 368 | }, 369 | "node_modules/color/node_modules/color-name": { 370 | "version": "1.1.3", 371 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 372 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 373 | }, 374 | "node_modules/colorspace": { 375 | "version": "1.1.4", 376 | "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", 377 | "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", 378 | "dependencies": { 379 | "color": "^3.1.3", 380 | "text-hex": "1.0.x" 381 | } 382 | }, 383 | "node_modules/concat-map": { 384 | "version": "0.0.1", 385 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 386 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 387 | }, 388 | "node_modules/config": { 389 | "version": "3.3.9", 390 | "resolved": "https://registry.npmjs.org/config/-/config-3.3.9.tgz", 391 | "integrity": "sha512-G17nfe+cY7kR0wVpc49NCYvNtelm/pPy8czHoFkAgtV1lkmcp7DHtWCdDu+C9Z7gb2WVqa9Tm3uF9aKaPbCfhg==", 392 | "dependencies": { 393 | "json5": "^2.2.3" 394 | }, 395 | "engines": { 396 | "node": ">= 10.0.0" 397 | } 398 | }, 399 | "node_modules/console-control-strings": { 400 | "version": "1.1.0", 401 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 402 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" 403 | }, 404 | "node_modules/content-disposition": { 405 | "version": "0.5.4", 406 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 407 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 408 | "dependencies": { 409 | "safe-buffer": "5.2.1" 410 | }, 411 | "engines": { 412 | "node": ">= 0.6" 413 | } 414 | }, 415 | "node_modules/content-type": { 416 | "version": "1.0.5", 417 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 418 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 419 | "engines": { 420 | "node": ">= 0.6" 421 | } 422 | }, 423 | "node_modules/cookie": { 424 | "version": "0.5.0", 425 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 426 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 427 | "engines": { 428 | "node": ">= 0.6" 429 | } 430 | }, 431 | "node_modules/cookie-signature": { 432 | "version": "1.0.6", 433 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 434 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 435 | }, 436 | "node_modules/debug": { 437 | "version": "2.6.9", 438 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 439 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 440 | "dependencies": { 441 | "ms": "2.0.0" 442 | } 443 | }, 444 | "node_modules/delegates": { 445 | "version": "1.0.0", 446 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 447 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" 448 | }, 449 | "node_modules/depd": { 450 | "version": "2.0.0", 451 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 452 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 453 | "engines": { 454 | "node": ">= 0.8" 455 | } 456 | }, 457 | "node_modules/destroy": { 458 | "version": "1.2.0", 459 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 460 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 461 | "engines": { 462 | "node": ">= 0.8", 463 | "npm": "1.2.8000 || >= 1.4.16" 464 | } 465 | }, 466 | "node_modules/detect-libc": { 467 | "version": "2.0.1", 468 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", 469 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", 470 | "engines": { 471 | "node": ">=8" 472 | } 473 | }, 474 | "node_modules/ecdsa-sig-formatter": { 475 | "version": "1.0.11", 476 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 477 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 478 | "dependencies": { 479 | "safe-buffer": "^5.0.1" 480 | } 481 | }, 482 | "node_modules/ee-first": { 483 | "version": "1.1.1", 484 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 485 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 486 | }, 487 | "node_modules/ejs": { 488 | "version": "3.1.9", 489 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", 490 | "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", 491 | "dependencies": { 492 | "jake": "^10.8.5" 493 | }, 494 | "bin": { 495 | "ejs": "bin/cli.js" 496 | }, 497 | "engines": { 498 | "node": ">=0.10.0" 499 | } 500 | }, 501 | "node_modules/emoji-regex": { 502 | "version": "8.0.0", 503 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 504 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 505 | }, 506 | "node_modules/enabled": { 507 | "version": "2.0.0", 508 | "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", 509 | "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" 510 | }, 511 | "node_modules/encodeurl": { 512 | "version": "1.0.2", 513 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 514 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 515 | "engines": { 516 | "node": ">= 0.8" 517 | } 518 | }, 519 | "node_modules/escape-html": { 520 | "version": "1.0.3", 521 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 522 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 523 | }, 524 | "node_modules/etag": { 525 | "version": "1.8.1", 526 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 527 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 528 | "engines": { 529 | "node": ">= 0.6" 530 | } 531 | }, 532 | "node_modules/express": { 533 | "version": "4.18.2", 534 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 535 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 536 | "dependencies": { 537 | "accepts": "~1.3.8", 538 | "array-flatten": "1.1.1", 539 | "body-parser": "1.20.1", 540 | "content-disposition": "0.5.4", 541 | "content-type": "~1.0.4", 542 | "cookie": "0.5.0", 543 | "cookie-signature": "1.0.6", 544 | "debug": "2.6.9", 545 | "depd": "2.0.0", 546 | "encodeurl": "~1.0.2", 547 | "escape-html": "~1.0.3", 548 | "etag": "~1.8.1", 549 | "finalhandler": "1.2.0", 550 | "fresh": "0.5.2", 551 | "http-errors": "2.0.0", 552 | "merge-descriptors": "1.0.1", 553 | "methods": "~1.1.2", 554 | "on-finished": "2.4.1", 555 | "parseurl": "~1.3.3", 556 | "path-to-regexp": "0.1.7", 557 | "proxy-addr": "~2.0.7", 558 | "qs": "6.11.0", 559 | "range-parser": "~1.2.1", 560 | "safe-buffer": "5.2.1", 561 | "send": "0.18.0", 562 | "serve-static": "1.15.0", 563 | "setprototypeof": "1.2.0", 564 | "statuses": "2.0.1", 565 | "type-is": "~1.6.18", 566 | "utils-merge": "1.0.1", 567 | "vary": "~1.1.2" 568 | }, 569 | "engines": { 570 | "node": ">= 0.10.0" 571 | } 572 | }, 573 | "node_modules/fecha": { 574 | "version": "4.2.3", 575 | "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", 576 | "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" 577 | }, 578 | "node_modules/filelist": { 579 | "version": "1.0.4", 580 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 581 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 582 | "dependencies": { 583 | "minimatch": "^5.0.1" 584 | } 585 | }, 586 | "node_modules/filelist/node_modules/brace-expansion": { 587 | "version": "2.0.1", 588 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 589 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 590 | "dependencies": { 591 | "balanced-match": "^1.0.0" 592 | } 593 | }, 594 | "node_modules/filelist/node_modules/minimatch": { 595 | "version": "5.1.6", 596 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 597 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 598 | "dependencies": { 599 | "brace-expansion": "^2.0.1" 600 | }, 601 | "engines": { 602 | "node": ">=10" 603 | } 604 | }, 605 | "node_modules/finalhandler": { 606 | "version": "1.2.0", 607 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 608 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 609 | "dependencies": { 610 | "debug": "2.6.9", 611 | "encodeurl": "~1.0.2", 612 | "escape-html": "~1.0.3", 613 | "on-finished": "2.4.1", 614 | "parseurl": "~1.3.3", 615 | "statuses": "2.0.1", 616 | "unpipe": "~1.0.0" 617 | }, 618 | "engines": { 619 | "node": ">= 0.8" 620 | } 621 | }, 622 | "node_modules/fn.name": { 623 | "version": "1.1.0", 624 | "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", 625 | "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" 626 | }, 627 | "node_modules/forwarded": { 628 | "version": "0.2.0", 629 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 630 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 631 | "engines": { 632 | "node": ">= 0.6" 633 | } 634 | }, 635 | "node_modules/fresh": { 636 | "version": "0.5.2", 637 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 638 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 639 | "engines": { 640 | "node": ">= 0.6" 641 | } 642 | }, 643 | "node_modules/fs-minipass": { 644 | "version": "2.1.0", 645 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 646 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 647 | "dependencies": { 648 | "minipass": "^3.0.0" 649 | }, 650 | "engines": { 651 | "node": ">= 8" 652 | } 653 | }, 654 | "node_modules/fs-minipass/node_modules/minipass": { 655 | "version": "3.3.6", 656 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 657 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 658 | "dependencies": { 659 | "yallist": "^4.0.0" 660 | }, 661 | "engines": { 662 | "node": ">=8" 663 | } 664 | }, 665 | "node_modules/fs.realpath": { 666 | "version": "1.0.0", 667 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 668 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 669 | }, 670 | "node_modules/function-bind": { 671 | "version": "1.1.1", 672 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 673 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 674 | }, 675 | "node_modules/gauge": { 676 | "version": "3.0.2", 677 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", 678 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", 679 | "dependencies": { 680 | "aproba": "^1.0.3 || ^2.0.0", 681 | "color-support": "^1.1.2", 682 | "console-control-strings": "^1.0.0", 683 | "has-unicode": "^2.0.1", 684 | "object-assign": "^4.1.1", 685 | "signal-exit": "^3.0.0", 686 | "string-width": "^4.2.3", 687 | "strip-ansi": "^6.0.1", 688 | "wide-align": "^1.1.2" 689 | }, 690 | "engines": { 691 | "node": ">=10" 692 | } 693 | }, 694 | "node_modules/get-intrinsic": { 695 | "version": "1.2.1", 696 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", 697 | "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", 698 | "dependencies": { 699 | "function-bind": "^1.1.1", 700 | "has": "^1.0.3", 701 | "has-proto": "^1.0.1", 702 | "has-symbols": "^1.0.3" 703 | }, 704 | "funding": { 705 | "url": "https://github.com/sponsors/ljharb" 706 | } 707 | }, 708 | "node_modules/glob": { 709 | "version": "7.2.3", 710 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 711 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 712 | "dependencies": { 713 | "fs.realpath": "^1.0.0", 714 | "inflight": "^1.0.4", 715 | "inherits": "2", 716 | "minimatch": "^3.1.1", 717 | "once": "^1.3.0", 718 | "path-is-absolute": "^1.0.0" 719 | }, 720 | "engines": { 721 | "node": "*" 722 | }, 723 | "funding": { 724 | "url": "https://github.com/sponsors/isaacs" 725 | } 726 | }, 727 | "node_modules/has": { 728 | "version": "1.0.3", 729 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 730 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 731 | "dependencies": { 732 | "function-bind": "^1.1.1" 733 | }, 734 | "engines": { 735 | "node": ">= 0.4.0" 736 | } 737 | }, 738 | "node_modules/has-flag": { 739 | "version": "4.0.0", 740 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 741 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 742 | "engines": { 743 | "node": ">=8" 744 | } 745 | }, 746 | "node_modules/has-proto": { 747 | "version": "1.0.1", 748 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 749 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 750 | "engines": { 751 | "node": ">= 0.4" 752 | }, 753 | "funding": { 754 | "url": "https://github.com/sponsors/ljharb" 755 | } 756 | }, 757 | "node_modules/has-symbols": { 758 | "version": "1.0.3", 759 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 760 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 761 | "engines": { 762 | "node": ">= 0.4" 763 | }, 764 | "funding": { 765 | "url": "https://github.com/sponsors/ljharb" 766 | } 767 | }, 768 | "node_modules/has-unicode": { 769 | "version": "2.0.1", 770 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 771 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" 772 | }, 773 | "node_modules/http-errors": { 774 | "version": "2.0.0", 775 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 776 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 777 | "dependencies": { 778 | "depd": "2.0.0", 779 | "inherits": "2.0.4", 780 | "setprototypeof": "1.2.0", 781 | "statuses": "2.0.1", 782 | "toidentifier": "1.0.1" 783 | }, 784 | "engines": { 785 | "node": ">= 0.8" 786 | } 787 | }, 788 | "node_modules/https-proxy-agent": { 789 | "version": "5.0.1", 790 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 791 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 792 | "dependencies": { 793 | "agent-base": "6", 794 | "debug": "4" 795 | }, 796 | "engines": { 797 | "node": ">= 6" 798 | } 799 | }, 800 | "node_modules/https-proxy-agent/node_modules/debug": { 801 | "version": "4.3.4", 802 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 803 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 804 | "dependencies": { 805 | "ms": "2.1.2" 806 | }, 807 | "engines": { 808 | "node": ">=6.0" 809 | }, 810 | "peerDependenciesMeta": { 811 | "supports-color": { 812 | "optional": true 813 | } 814 | } 815 | }, 816 | "node_modules/https-proxy-agent/node_modules/ms": { 817 | "version": "2.1.2", 818 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 819 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 820 | }, 821 | "node_modules/iconv-lite": { 822 | "version": "0.4.24", 823 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 824 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 825 | "dependencies": { 826 | "safer-buffer": ">= 2.1.2 < 3" 827 | }, 828 | "engines": { 829 | "node": ">=0.10.0" 830 | } 831 | }, 832 | "node_modules/inflight": { 833 | "version": "1.0.6", 834 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 835 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 836 | "dependencies": { 837 | "once": "^1.3.0", 838 | "wrappy": "1" 839 | } 840 | }, 841 | "node_modules/inherits": { 842 | "version": "2.0.4", 843 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 844 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 845 | }, 846 | "node_modules/ip": { 847 | "version": "2.0.0", 848 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 849 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 850 | }, 851 | "node_modules/ipaddr.js": { 852 | "version": "1.9.1", 853 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 854 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 855 | "engines": { 856 | "node": ">= 0.10" 857 | } 858 | }, 859 | "node_modules/is-arrayish": { 860 | "version": "0.3.2", 861 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 862 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" 863 | }, 864 | "node_modules/is-fullwidth-code-point": { 865 | "version": "3.0.0", 866 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 867 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 868 | "engines": { 869 | "node": ">=8" 870 | } 871 | }, 872 | "node_modules/is-stream": { 873 | "version": "2.0.1", 874 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 875 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 876 | "engines": { 877 | "node": ">=8" 878 | }, 879 | "funding": { 880 | "url": "https://github.com/sponsors/sindresorhus" 881 | } 882 | }, 883 | "node_modules/jake": { 884 | "version": "10.8.6", 885 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.6.tgz", 886 | "integrity": "sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA==", 887 | "dependencies": { 888 | "async": "^3.2.3", 889 | "chalk": "^4.0.2", 890 | "filelist": "^1.0.4", 891 | "minimatch": "^3.1.2" 892 | }, 893 | "bin": { 894 | "jake": "bin/cli.js" 895 | }, 896 | "engines": { 897 | "node": ">=10" 898 | } 899 | }, 900 | "node_modules/joi": { 901 | "version": "17.9.2", 902 | "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", 903 | "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", 904 | "dependencies": { 905 | "@hapi/hoek": "^9.0.0", 906 | "@hapi/topo": "^5.0.0", 907 | "@sideway/address": "^4.1.3", 908 | "@sideway/formula": "^3.0.1", 909 | "@sideway/pinpoint": "^2.0.0" 910 | } 911 | }, 912 | "node_modules/json5": { 913 | "version": "2.2.3", 914 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 915 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 916 | "bin": { 917 | "json5": "lib/cli.js" 918 | }, 919 | "engines": { 920 | "node": ">=6" 921 | } 922 | }, 923 | "node_modules/jsonwebtoken": { 924 | "version": "9.0.0", 925 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", 926 | "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", 927 | "dependencies": { 928 | "jws": "^3.2.2", 929 | "lodash": "^4.17.21", 930 | "ms": "^2.1.1", 931 | "semver": "^7.3.8" 932 | }, 933 | "engines": { 934 | "node": ">=12", 935 | "npm": ">=6" 936 | } 937 | }, 938 | "node_modules/jsonwebtoken/node_modules/ms": { 939 | "version": "2.1.3", 940 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 941 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 942 | }, 943 | "node_modules/jwa": { 944 | "version": "1.4.1", 945 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 946 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 947 | "dependencies": { 948 | "buffer-equal-constant-time": "1.0.1", 949 | "ecdsa-sig-formatter": "1.0.11", 950 | "safe-buffer": "^5.0.1" 951 | } 952 | }, 953 | "node_modules/jws": { 954 | "version": "3.2.2", 955 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 956 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 957 | "dependencies": { 958 | "jwa": "^1.4.1", 959 | "safe-buffer": "^5.0.1" 960 | } 961 | }, 962 | "node_modules/kareem": { 963 | "version": "2.5.1", 964 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", 965 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", 966 | "engines": { 967 | "node": ">=12.0.0" 968 | } 969 | }, 970 | "node_modules/kuler": { 971 | "version": "2.0.0", 972 | "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", 973 | "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" 974 | }, 975 | "node_modules/lodash": { 976 | "version": "4.17.21", 977 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 978 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 979 | }, 980 | "node_modules/logform": { 981 | "version": "2.5.1", 982 | "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", 983 | "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", 984 | "dependencies": { 985 | "@colors/colors": "1.5.0", 986 | "@types/triple-beam": "^1.3.2", 987 | "fecha": "^4.2.0", 988 | "ms": "^2.1.1", 989 | "safe-stable-stringify": "^2.3.1", 990 | "triple-beam": "^1.3.0" 991 | } 992 | }, 993 | "node_modules/logform/node_modules/ms": { 994 | "version": "2.1.3", 995 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 996 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 997 | }, 998 | "node_modules/lru-cache": { 999 | "version": "6.0.0", 1000 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1001 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1002 | "dependencies": { 1003 | "yallist": "^4.0.0" 1004 | }, 1005 | "engines": { 1006 | "node": ">=10" 1007 | } 1008 | }, 1009 | "node_modules/make-dir": { 1010 | "version": "3.1.0", 1011 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1012 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1013 | "dependencies": { 1014 | "semver": "^6.0.0" 1015 | }, 1016 | "engines": { 1017 | "node": ">=8" 1018 | }, 1019 | "funding": { 1020 | "url": "https://github.com/sponsors/sindresorhus" 1021 | } 1022 | }, 1023 | "node_modules/make-dir/node_modules/semver": { 1024 | "version": "6.3.0", 1025 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1026 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1027 | "bin": { 1028 | "semver": "bin/semver.js" 1029 | } 1030 | }, 1031 | "node_modules/media-typer": { 1032 | "version": "0.3.0", 1033 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1034 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1035 | "engines": { 1036 | "node": ">= 0.6" 1037 | } 1038 | }, 1039 | "node_modules/memory-pager": { 1040 | "version": "1.5.0", 1041 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 1042 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 1043 | "optional": true 1044 | }, 1045 | "node_modules/merge-descriptors": { 1046 | "version": "1.0.1", 1047 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1048 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1049 | }, 1050 | "node_modules/methods": { 1051 | "version": "1.1.2", 1052 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1053 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 1054 | "engines": { 1055 | "node": ">= 0.6" 1056 | } 1057 | }, 1058 | "node_modules/mime": { 1059 | "version": "1.6.0", 1060 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1061 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1062 | "bin": { 1063 | "mime": "cli.js" 1064 | }, 1065 | "engines": { 1066 | "node": ">=4" 1067 | } 1068 | }, 1069 | "node_modules/mime-db": { 1070 | "version": "1.52.0", 1071 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1072 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1073 | "engines": { 1074 | "node": ">= 0.6" 1075 | } 1076 | }, 1077 | "node_modules/mime-types": { 1078 | "version": "2.1.35", 1079 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1080 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1081 | "dependencies": { 1082 | "mime-db": "1.52.0" 1083 | }, 1084 | "engines": { 1085 | "node": ">= 0.6" 1086 | } 1087 | }, 1088 | "node_modules/minimatch": { 1089 | "version": "3.1.2", 1090 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1091 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1092 | "dependencies": { 1093 | "brace-expansion": "^1.1.7" 1094 | }, 1095 | "engines": { 1096 | "node": "*" 1097 | } 1098 | }, 1099 | "node_modules/minipass": { 1100 | "version": "5.0.0", 1101 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", 1102 | "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", 1103 | "engines": { 1104 | "node": ">=8" 1105 | } 1106 | }, 1107 | "node_modules/minizlib": { 1108 | "version": "2.1.2", 1109 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 1110 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 1111 | "dependencies": { 1112 | "minipass": "^3.0.0", 1113 | "yallist": "^4.0.0" 1114 | }, 1115 | "engines": { 1116 | "node": ">= 8" 1117 | } 1118 | }, 1119 | "node_modules/minizlib/node_modules/minipass": { 1120 | "version": "3.3.6", 1121 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 1122 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 1123 | "dependencies": { 1124 | "yallist": "^4.0.0" 1125 | }, 1126 | "engines": { 1127 | "node": ">=8" 1128 | } 1129 | }, 1130 | "node_modules/mkdirp": { 1131 | "version": "1.0.4", 1132 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1133 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1134 | "bin": { 1135 | "mkdirp": "bin/cmd.js" 1136 | }, 1137 | "engines": { 1138 | "node": ">=10" 1139 | } 1140 | }, 1141 | "node_modules/mongodb": { 1142 | "version": "5.3.0", 1143 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.3.0.tgz", 1144 | "integrity": "sha512-Wy/sbahguL8c3TXQWXmuBabiLD+iVmz+tOgQf+FwkCjhUIorqbAxRbbz00g4ZoN4sXIPwpAlTANMaGRjGGTikQ==", 1145 | "dependencies": { 1146 | "bson": "^5.2.0", 1147 | "mongodb-connection-string-url": "^2.6.0", 1148 | "socks": "^2.7.1" 1149 | }, 1150 | "engines": { 1151 | "node": ">=14.20.1" 1152 | }, 1153 | "optionalDependencies": { 1154 | "saslprep": "^1.0.3" 1155 | }, 1156 | "peerDependencies": { 1157 | "@aws-sdk/credential-providers": "^3.201.0", 1158 | "mongodb-client-encryption": ">=2.3.0 <3", 1159 | "snappy": "^7.2.2" 1160 | }, 1161 | "peerDependenciesMeta": { 1162 | "@aws-sdk/credential-providers": { 1163 | "optional": true 1164 | }, 1165 | "mongodb-client-encryption": { 1166 | "optional": true 1167 | }, 1168 | "snappy": { 1169 | "optional": true 1170 | } 1171 | } 1172 | }, 1173 | "node_modules/mongodb-connection-string-url": { 1174 | "version": "2.6.0", 1175 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", 1176 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", 1177 | "dependencies": { 1178 | "@types/whatwg-url": "^8.2.1", 1179 | "whatwg-url": "^11.0.0" 1180 | } 1181 | }, 1182 | "node_modules/mongoose": { 1183 | "version": "7.1.2", 1184 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.1.2.tgz", 1185 | "integrity": "sha512-89+rFzYphsOCdIDam03ryECeOy4bFKvZqnu4NDdUduoOt2ip0/otIqVBBrjQ1Owz1xza6zy4VTifxBG/jNaJNQ==", 1186 | "dependencies": { 1187 | "bson": "^5.2.0", 1188 | "kareem": "2.5.1", 1189 | "mongodb": "5.3.0", 1190 | "mpath": "0.9.0", 1191 | "mquery": "5.0.0", 1192 | "ms": "2.1.3", 1193 | "sift": "16.0.1" 1194 | }, 1195 | "engines": { 1196 | "node": ">=14.0.0" 1197 | }, 1198 | "funding": { 1199 | "type": "opencollective", 1200 | "url": "https://opencollective.com/mongoose" 1201 | } 1202 | }, 1203 | "node_modules/mongoose/node_modules/ms": { 1204 | "version": "2.1.3", 1205 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1206 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1207 | }, 1208 | "node_modules/mpath": { 1209 | "version": "0.9.0", 1210 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 1211 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 1212 | "engines": { 1213 | "node": ">=4.0.0" 1214 | } 1215 | }, 1216 | "node_modules/mquery": { 1217 | "version": "5.0.0", 1218 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", 1219 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", 1220 | "dependencies": { 1221 | "debug": "4.x" 1222 | }, 1223 | "engines": { 1224 | "node": ">=14.0.0" 1225 | } 1226 | }, 1227 | "node_modules/mquery/node_modules/debug": { 1228 | "version": "4.3.4", 1229 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1230 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1231 | "dependencies": { 1232 | "ms": "2.1.2" 1233 | }, 1234 | "engines": { 1235 | "node": ">=6.0" 1236 | }, 1237 | "peerDependenciesMeta": { 1238 | "supports-color": { 1239 | "optional": true 1240 | } 1241 | } 1242 | }, 1243 | "node_modules/mquery/node_modules/ms": { 1244 | "version": "2.1.2", 1245 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1246 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1247 | }, 1248 | "node_modules/ms": { 1249 | "version": "2.0.0", 1250 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1251 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1252 | }, 1253 | "node_modules/negotiator": { 1254 | "version": "0.6.3", 1255 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1256 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1257 | "engines": { 1258 | "node": ">= 0.6" 1259 | } 1260 | }, 1261 | "node_modules/node-addon-api": { 1262 | "version": "5.1.0", 1263 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", 1264 | "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" 1265 | }, 1266 | "node_modules/node-fetch": { 1267 | "version": "2.6.11", 1268 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", 1269 | "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", 1270 | "dependencies": { 1271 | "whatwg-url": "^5.0.0" 1272 | }, 1273 | "engines": { 1274 | "node": "4.x || >=6.0.0" 1275 | }, 1276 | "peerDependencies": { 1277 | "encoding": "^0.1.0" 1278 | }, 1279 | "peerDependenciesMeta": { 1280 | "encoding": { 1281 | "optional": true 1282 | } 1283 | } 1284 | }, 1285 | "node_modules/node-fetch/node_modules/tr46": { 1286 | "version": "0.0.3", 1287 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1288 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1289 | }, 1290 | "node_modules/node-fetch/node_modules/webidl-conversions": { 1291 | "version": "3.0.1", 1292 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1293 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1294 | }, 1295 | "node_modules/node-fetch/node_modules/whatwg-url": { 1296 | "version": "5.0.0", 1297 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1298 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1299 | "dependencies": { 1300 | "tr46": "~0.0.3", 1301 | "webidl-conversions": "^3.0.0" 1302 | } 1303 | }, 1304 | "node_modules/nopt": { 1305 | "version": "5.0.0", 1306 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 1307 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 1308 | "dependencies": { 1309 | "abbrev": "1" 1310 | }, 1311 | "bin": { 1312 | "nopt": "bin/nopt.js" 1313 | }, 1314 | "engines": { 1315 | "node": ">=6" 1316 | } 1317 | }, 1318 | "node_modules/npmlog": { 1319 | "version": "5.0.1", 1320 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", 1321 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", 1322 | "dependencies": { 1323 | "are-we-there-yet": "^2.0.0", 1324 | "console-control-strings": "^1.1.0", 1325 | "gauge": "^3.0.0", 1326 | "set-blocking": "^2.0.0" 1327 | } 1328 | }, 1329 | "node_modules/object-assign": { 1330 | "version": "4.1.1", 1331 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1332 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1333 | "engines": { 1334 | "node": ">=0.10.0" 1335 | } 1336 | }, 1337 | "node_modules/object-inspect": { 1338 | "version": "1.12.3", 1339 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 1340 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 1341 | "funding": { 1342 | "url": "https://github.com/sponsors/ljharb" 1343 | } 1344 | }, 1345 | "node_modules/on-finished": { 1346 | "version": "2.4.1", 1347 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1348 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1349 | "dependencies": { 1350 | "ee-first": "1.1.1" 1351 | }, 1352 | "engines": { 1353 | "node": ">= 0.8" 1354 | } 1355 | }, 1356 | "node_modules/once": { 1357 | "version": "1.4.0", 1358 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1359 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1360 | "dependencies": { 1361 | "wrappy": "1" 1362 | } 1363 | }, 1364 | "node_modules/one-time": { 1365 | "version": "1.0.0", 1366 | "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", 1367 | "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", 1368 | "dependencies": { 1369 | "fn.name": "1.x.x" 1370 | } 1371 | }, 1372 | "node_modules/parseurl": { 1373 | "version": "1.3.3", 1374 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1375 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1376 | "engines": { 1377 | "node": ">= 0.8" 1378 | } 1379 | }, 1380 | "node_modules/path-is-absolute": { 1381 | "version": "1.0.1", 1382 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1383 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1384 | "engines": { 1385 | "node": ">=0.10.0" 1386 | } 1387 | }, 1388 | "node_modules/path-to-regexp": { 1389 | "version": "0.1.7", 1390 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1391 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1392 | }, 1393 | "node_modules/proxy-addr": { 1394 | "version": "2.0.7", 1395 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1396 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1397 | "dependencies": { 1398 | "forwarded": "0.2.0", 1399 | "ipaddr.js": "1.9.1" 1400 | }, 1401 | "engines": { 1402 | "node": ">= 0.10" 1403 | } 1404 | }, 1405 | "node_modules/punycode": { 1406 | "version": "2.3.0", 1407 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 1408 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 1409 | "engines": { 1410 | "node": ">=6" 1411 | } 1412 | }, 1413 | "node_modules/qs": { 1414 | "version": "6.11.0", 1415 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1416 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1417 | "dependencies": { 1418 | "side-channel": "^1.0.4" 1419 | }, 1420 | "engines": { 1421 | "node": ">=0.6" 1422 | }, 1423 | "funding": { 1424 | "url": "https://github.com/sponsors/ljharb" 1425 | } 1426 | }, 1427 | "node_modules/range-parser": { 1428 | "version": "1.2.1", 1429 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1430 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1431 | "engines": { 1432 | "node": ">= 0.6" 1433 | } 1434 | }, 1435 | "node_modules/raw-body": { 1436 | "version": "2.5.1", 1437 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1438 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1439 | "dependencies": { 1440 | "bytes": "3.1.2", 1441 | "http-errors": "2.0.0", 1442 | "iconv-lite": "0.4.24", 1443 | "unpipe": "1.0.0" 1444 | }, 1445 | "engines": { 1446 | "node": ">= 0.8" 1447 | } 1448 | }, 1449 | "node_modules/readable-stream": { 1450 | "version": "3.6.2", 1451 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 1452 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 1453 | "dependencies": { 1454 | "inherits": "^2.0.3", 1455 | "string_decoder": "^1.1.1", 1456 | "util-deprecate": "^1.0.1" 1457 | }, 1458 | "engines": { 1459 | "node": ">= 6" 1460 | } 1461 | }, 1462 | "node_modules/rimraf": { 1463 | "version": "3.0.2", 1464 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1465 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1466 | "dependencies": { 1467 | "glob": "^7.1.3" 1468 | }, 1469 | "bin": { 1470 | "rimraf": "bin.js" 1471 | }, 1472 | "funding": { 1473 | "url": "https://github.com/sponsors/isaacs" 1474 | } 1475 | }, 1476 | "node_modules/safe-buffer": { 1477 | "version": "5.2.1", 1478 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1479 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1480 | "funding": [ 1481 | { 1482 | "type": "github", 1483 | "url": "https://github.com/sponsors/feross" 1484 | }, 1485 | { 1486 | "type": "patreon", 1487 | "url": "https://www.patreon.com/feross" 1488 | }, 1489 | { 1490 | "type": "consulting", 1491 | "url": "https://feross.org/support" 1492 | } 1493 | ] 1494 | }, 1495 | "node_modules/safe-stable-stringify": { 1496 | "version": "2.4.3", 1497 | "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", 1498 | "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", 1499 | "engines": { 1500 | "node": ">=10" 1501 | } 1502 | }, 1503 | "node_modules/safer-buffer": { 1504 | "version": "2.1.2", 1505 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1506 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1507 | }, 1508 | "node_modules/saslprep": { 1509 | "version": "1.0.3", 1510 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1511 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1512 | "optional": true, 1513 | "dependencies": { 1514 | "sparse-bitfield": "^3.0.3" 1515 | }, 1516 | "engines": { 1517 | "node": ">=6" 1518 | } 1519 | }, 1520 | "node_modules/semver": { 1521 | "version": "7.5.2", 1522 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", 1523 | "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", 1524 | "dependencies": { 1525 | "lru-cache": "^6.0.0" 1526 | }, 1527 | "bin": { 1528 | "semver": "bin/semver.js" 1529 | }, 1530 | "engines": { 1531 | "node": ">=10" 1532 | } 1533 | }, 1534 | "node_modules/send": { 1535 | "version": "0.18.0", 1536 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1537 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1538 | "dependencies": { 1539 | "debug": "2.6.9", 1540 | "depd": "2.0.0", 1541 | "destroy": "1.2.0", 1542 | "encodeurl": "~1.0.2", 1543 | "escape-html": "~1.0.3", 1544 | "etag": "~1.8.1", 1545 | "fresh": "0.5.2", 1546 | "http-errors": "2.0.0", 1547 | "mime": "1.6.0", 1548 | "ms": "2.1.3", 1549 | "on-finished": "2.4.1", 1550 | "range-parser": "~1.2.1", 1551 | "statuses": "2.0.1" 1552 | }, 1553 | "engines": { 1554 | "node": ">= 0.8.0" 1555 | } 1556 | }, 1557 | "node_modules/send/node_modules/ms": { 1558 | "version": "2.1.3", 1559 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1560 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1561 | }, 1562 | "node_modules/serve-static": { 1563 | "version": "1.15.0", 1564 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1565 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1566 | "dependencies": { 1567 | "encodeurl": "~1.0.2", 1568 | "escape-html": "~1.0.3", 1569 | "parseurl": "~1.3.3", 1570 | "send": "0.18.0" 1571 | }, 1572 | "engines": { 1573 | "node": ">= 0.8.0" 1574 | } 1575 | }, 1576 | "node_modules/set-blocking": { 1577 | "version": "2.0.0", 1578 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1579 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 1580 | }, 1581 | "node_modules/setprototypeof": { 1582 | "version": "1.2.0", 1583 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1584 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1585 | }, 1586 | "node_modules/side-channel": { 1587 | "version": "1.0.4", 1588 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1589 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1590 | "dependencies": { 1591 | "call-bind": "^1.0.0", 1592 | "get-intrinsic": "^1.0.2", 1593 | "object-inspect": "^1.9.0" 1594 | }, 1595 | "funding": { 1596 | "url": "https://github.com/sponsors/ljharb" 1597 | } 1598 | }, 1599 | "node_modules/sift": { 1600 | "version": "16.0.1", 1601 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", 1602 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" 1603 | }, 1604 | "node_modules/signal-exit": { 1605 | "version": "3.0.7", 1606 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1607 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1608 | }, 1609 | "node_modules/simple-swizzle": { 1610 | "version": "0.2.2", 1611 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 1612 | "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", 1613 | "dependencies": { 1614 | "is-arrayish": "^0.3.1" 1615 | } 1616 | }, 1617 | "node_modules/smart-buffer": { 1618 | "version": "4.2.0", 1619 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1620 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1621 | "engines": { 1622 | "node": ">= 6.0.0", 1623 | "npm": ">= 3.0.0" 1624 | } 1625 | }, 1626 | "node_modules/socks": { 1627 | "version": "2.7.1", 1628 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", 1629 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", 1630 | "dependencies": { 1631 | "ip": "^2.0.0", 1632 | "smart-buffer": "^4.2.0" 1633 | }, 1634 | "engines": { 1635 | "node": ">= 10.13.0", 1636 | "npm": ">= 3.0.0" 1637 | } 1638 | }, 1639 | "node_modules/sparse-bitfield": { 1640 | "version": "3.0.3", 1641 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1642 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1643 | "optional": true, 1644 | "dependencies": { 1645 | "memory-pager": "^1.0.2" 1646 | } 1647 | }, 1648 | "node_modules/stack-trace": { 1649 | "version": "0.0.10", 1650 | "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", 1651 | "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", 1652 | "engines": { 1653 | "node": "*" 1654 | } 1655 | }, 1656 | "node_modules/statuses": { 1657 | "version": "2.0.1", 1658 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1659 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1660 | "engines": { 1661 | "node": ">= 0.8" 1662 | } 1663 | }, 1664 | "node_modules/string_decoder": { 1665 | "version": "1.3.0", 1666 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1667 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1668 | "dependencies": { 1669 | "safe-buffer": "~5.2.0" 1670 | } 1671 | }, 1672 | "node_modules/string-width": { 1673 | "version": "4.2.3", 1674 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1675 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1676 | "dependencies": { 1677 | "emoji-regex": "^8.0.0", 1678 | "is-fullwidth-code-point": "^3.0.0", 1679 | "strip-ansi": "^6.0.1" 1680 | }, 1681 | "engines": { 1682 | "node": ">=8" 1683 | } 1684 | }, 1685 | "node_modules/strip-ansi": { 1686 | "version": "6.0.1", 1687 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1688 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1689 | "dependencies": { 1690 | "ansi-regex": "^5.0.1" 1691 | }, 1692 | "engines": { 1693 | "node": ">=8" 1694 | } 1695 | }, 1696 | "node_modules/supports-color": { 1697 | "version": "7.2.0", 1698 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1699 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1700 | "dependencies": { 1701 | "has-flag": "^4.0.0" 1702 | }, 1703 | "engines": { 1704 | "node": ">=8" 1705 | } 1706 | }, 1707 | "node_modules/tar": { 1708 | "version": "6.1.15", 1709 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", 1710 | "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", 1711 | "dependencies": { 1712 | "chownr": "^2.0.0", 1713 | "fs-minipass": "^2.0.0", 1714 | "minipass": "^5.0.0", 1715 | "minizlib": "^2.1.1", 1716 | "mkdirp": "^1.0.3", 1717 | "yallist": "^4.0.0" 1718 | }, 1719 | "engines": { 1720 | "node": ">=10" 1721 | } 1722 | }, 1723 | "node_modules/text-hex": { 1724 | "version": "1.0.0", 1725 | "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", 1726 | "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" 1727 | }, 1728 | "node_modules/toidentifier": { 1729 | "version": "1.0.1", 1730 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1731 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 1732 | "engines": { 1733 | "node": ">=0.6" 1734 | } 1735 | }, 1736 | "node_modules/tr46": { 1737 | "version": "3.0.0", 1738 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1739 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1740 | "dependencies": { 1741 | "punycode": "^2.1.1" 1742 | }, 1743 | "engines": { 1744 | "node": ">=12" 1745 | } 1746 | }, 1747 | "node_modules/triple-beam": { 1748 | "version": "1.3.0", 1749 | "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", 1750 | "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" 1751 | }, 1752 | "node_modules/type-is": { 1753 | "version": "1.6.18", 1754 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1755 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1756 | "dependencies": { 1757 | "media-typer": "0.3.0", 1758 | "mime-types": "~2.1.24" 1759 | }, 1760 | "engines": { 1761 | "node": ">= 0.6" 1762 | } 1763 | }, 1764 | "node_modules/unpipe": { 1765 | "version": "1.0.0", 1766 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1767 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 1768 | "engines": { 1769 | "node": ">= 0.8" 1770 | } 1771 | }, 1772 | "node_modules/util-deprecate": { 1773 | "version": "1.0.2", 1774 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1775 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1776 | }, 1777 | "node_modules/utils-merge": { 1778 | "version": "1.0.1", 1779 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1780 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 1781 | "engines": { 1782 | "node": ">= 0.4.0" 1783 | } 1784 | }, 1785 | "node_modules/vary": { 1786 | "version": "1.1.2", 1787 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1788 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 1789 | "engines": { 1790 | "node": ">= 0.8" 1791 | } 1792 | }, 1793 | "node_modules/webidl-conversions": { 1794 | "version": "7.0.0", 1795 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1796 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 1797 | "engines": { 1798 | "node": ">=12" 1799 | } 1800 | }, 1801 | "node_modules/whatwg-url": { 1802 | "version": "11.0.0", 1803 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 1804 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 1805 | "dependencies": { 1806 | "tr46": "^3.0.0", 1807 | "webidl-conversions": "^7.0.0" 1808 | }, 1809 | "engines": { 1810 | "node": ">=12" 1811 | } 1812 | }, 1813 | "node_modules/wide-align": { 1814 | "version": "1.1.5", 1815 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 1816 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 1817 | "dependencies": { 1818 | "string-width": "^1.0.2 || 2 || 3 || 4" 1819 | } 1820 | }, 1821 | "node_modules/winston": { 1822 | "version": "3.9.0", 1823 | "resolved": "https://registry.npmjs.org/winston/-/winston-3.9.0.tgz", 1824 | "integrity": "sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==", 1825 | "dependencies": { 1826 | "@colors/colors": "1.5.0", 1827 | "@dabh/diagnostics": "^2.0.2", 1828 | "async": "^3.2.3", 1829 | "is-stream": "^2.0.0", 1830 | "logform": "^2.4.0", 1831 | "one-time": "^1.0.0", 1832 | "readable-stream": "^3.4.0", 1833 | "safe-stable-stringify": "^2.3.1", 1834 | "stack-trace": "0.0.x", 1835 | "triple-beam": "^1.3.0", 1836 | "winston-transport": "^4.5.0" 1837 | }, 1838 | "engines": { 1839 | "node": ">= 12.0.0" 1840 | } 1841 | }, 1842 | "node_modules/winston-transport": { 1843 | "version": "4.5.0", 1844 | "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", 1845 | "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", 1846 | "dependencies": { 1847 | "logform": "^2.3.2", 1848 | "readable-stream": "^3.6.0", 1849 | "triple-beam": "^1.3.0" 1850 | }, 1851 | "engines": { 1852 | "node": ">= 6.4.0" 1853 | } 1854 | }, 1855 | "node_modules/wrappy": { 1856 | "version": "1.0.2", 1857 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1858 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1859 | }, 1860 | "node_modules/yallist": { 1861 | "version": "4.0.0", 1862 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1863 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1864 | } 1865 | } 1866 | } 1867 | --------------------------------------------------------------------------------