├── 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 |
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 |
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 = '' + "Copying to clipboard was successful!"+ "
";
17 | },
18 | function (err) {
19 | msg.innerHTML = '' + "Could not copy text"+ "
";
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 = '' + "Copying to clipboard was successful!"+ "
";
41 | },
42 | function (err) {
43 | msg.innerHTML = '' + "Could not copy text"+ "
";
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 |
--------------------------------------------------------------------------------