From 643f747132e1ec744a6f7693c79a61aca5afcb34 Mon Sep 17 00:00:00 2001 From: rahul Date: Fri, 26 Aug 2022 10:35:44 +0530 Subject: [PATCH 1/2] Assignment 14 Wealth Portfolio App --- Week-14/Assignment 14.1/.env | 2 + Week-14/Assignment 14.1/Screenshot.PNG | Bin 0 -> 52685 bytes Week-14/Assignment 14.1/helper/model.js | 41 + Week-14/Assignment 14.1/helper/route.js | 240 +++ Week-14/Assignment 14.1/index.js | 23 + Week-14/Assignment 14.1/package-lock.json | 2131 +++++++++++++++++++++ Week-14/Assignment 14.1/package.json | 20 + Week-14/Assignment 14.1/readme.md | 71 + 8 files changed, 2528 insertions(+) create mode 100644 Week-14/Assignment 14.1/.env create mode 100644 Week-14/Assignment 14.1/Screenshot.PNG create mode 100644 Week-14/Assignment 14.1/helper/model.js create mode 100644 Week-14/Assignment 14.1/helper/route.js create mode 100644 Week-14/Assignment 14.1/index.js create mode 100644 Week-14/Assignment 14.1/package-lock.json create mode 100644 Week-14/Assignment 14.1/package.json create mode 100644 Week-14/Assignment 14.1/readme.md diff --git a/Week-14/Assignment 14.1/.env b/Week-14/Assignment 14.1/.env new file mode 100644 index 0000000..124e0e0 --- /dev/null +++ b/Week-14/Assignment 14.1/.env @@ -0,0 +1,2 @@ +DB_URL=mongodb+srv://rahulsawant:password%40123@cluster0.ycesmco.mongodb.net/?retryWrites=true&w=majority +PORT=3001 \ No newline at end of file diff --git a/Week-14/Assignment 14.1/Screenshot.PNG b/Week-14/Assignment 14.1/Screenshot.PNG new file mode 100644 index 0000000000000000000000000000000000000000..9cfb24d94d0f719b3d72a8a0114517129e52efd6 GIT binary patch literal 52685 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 +const count_username= await mongoose.models.User.countDocuments({username}) + +return !count_username +},'Username Already Exists') +userSchema.path('email').validate(async (email)=>{ + + const count_email= await mongoose.models.User.countDocuments({email}) + return !count_email + },'Email Already Exists') +const userModel=mongoose.model('User',userSchema) + + + +const holdingsSchema=new mongoose.Schema({ + asset_type:{ required:true,type:String,enum: ['RD','FD','STOCKS','MUTUALFUNDS',"FIXEDINCOME","EXPENSES"]}, + asset_id:{ required:true,type:String}, + asset_value:{ required:true,type:Number}, + intrest_rate:{ required:false,type:Number}, + invested_date:{ required:true,type:Date}, + invested_period_years:{ required:false,type:Number}, + maturity_date:{ required:false,type:Date}, + status:{type:String,enum:['ACTIVE','INACTIVE']}, + expense_type:{type:String, required:true,enum:["CREDIT","DEBIT"]}, + document:{type:Buffer,required:false} +}) +holdingsSchema.path('asset_id').validate(async (asset_id)=>{ + const count_asset_id= await mongoose.models.Holding.countDocuments({asset_id}) + + return !count_asset_id + },'Asset ID Already Exists') +const holdingModel=mongoose.model('Holding',holdingsSchema) +module.exports={userModel,holdingModel} \ No newline at end of file diff --git a/Week-14/Assignment 14.1/helper/route.js b/Week-14/Assignment 14.1/helper/route.js new file mode 100644 index 0000000..ea1da26 --- /dev/null +++ b/Week-14/Assignment 14.1/helper/route.js @@ -0,0 +1,240 @@ +const express = require("express"); +const mongoose = require("mongoose"); +const route = express.Router(); +const { userModel, holdingModel } = require("./model"); +const Grid = require("gridfs-stream"); +const fs = require("fs"); +const database = require("../index"); +Grid.mongo = mongoose.mongo; +//Login request +route.post("/login", async (req, res) => { + const { username, password } = req.body; + + userModel.findOne({ username: username, password: password }, (err, user) => { + if (err) { + res.status(500).send({ error: err }); + } + if (!user) { + res.status(404).send({ error: "user not found" }); + } + + res.status(200).send({ message: `User sucessfully logged in` }); + }); +}); + +//Register +route.post("/register", async (req, res) => { + const data = new userModel({ + fname: req.body.fname, + lname: req.body.lname, + email: req.body.email, + username: req.body.username, + password: req.body.password, + }); + try { + const datasave = await data.save(); + res + .status(200) + .json({ message: "Registration Successful", user: req.body.username }); + } catch (error) { + res.status(400).json({ message: error.message }); + } +}); + +//Add assests +route.post("/holdings", async (req, res) => { + const data = new holdingModel({ + asset_type: req.body.asset_type, + asset_id: req.body.asset_id, + asset_value: req.body.asset_value, + intrest_rate: req.body.intrest_rate ? req.body.intrest_rate : 0, + invested_date: req.body.invested_date, + invested_period_years: req.body.invested_period_years + ? req.body.invested_period_years + : 0, + maturity_date: req.body.maturity_date ? req.body.maturity_date : null, + status: req.body.status ? req.body.status : "ACTIVE", + expense_type: req.body.expense_type, + }); + try { + const datasave = await data.save(); + res.status(200).json({ message: "Assests added sucessfully" }); + } catch (error) { + res.status(400).json({ message: error.message }); + } +}); + +//fetch all assets +route.get("/holdings", async (req, res) => { + try { + const allData = await holdingModel.find(); + res.json(allData); + } catch (error) { + res.status(500).json({ message: error }); + } +}); + +//get income ,expense and saving for current year +// route.get("/holdings/stats", async (req, res) => { +// var today = new Date(); +// if (today.getMonth() + 1 <= 3) { +// start = new Date(today.getFullYear() - 1, 03, 01); +// end = new Date(today.getFullYear(), 02, 31); +// } else { +// start = new Date(today.getFullYear(), 03, 01); +// end = new Date(today.getFullYear() + 1, 02, 31); +// } +// try { +// const allData = await holdingModel.find({ +// $and: [ +// { invested_date: { $gt: start } }, +// { invested_date: { $lt: end } }, +// ], +// }).aggregate( [ { $group : { _id : "$expense_type" } } ] ) +// ; +// res.json(allData); +// } catch (error) { +// res.status(500).json({ message: error }); +// } +// }); + +//get income ,expense and saving +route.get("/holdings/stats", async (req, res) => { + try { + const allData = await holdingModel.aggregate([ + { $match: { expense_type: "DEBIT" } }, + { $group: { _id: "$expense_type", total: { $sum: "$asset_value" } } }, + ]); + const debit = allData[0].total ? allData[0].total : 0; + + const allData1 = await holdingModel.aggregate([ + { $match: { asset_type: "FIXEDINCOME" } }, + { $group: { _id: "$asset_type", total: { $sum: "$asset_value" } } }, + ]); + const income = allData1[0].total ? allData1[0].total : 0; + + const allData2 = await holdingModel.aggregate([ + { $match: { expense_type: "CREDIT" } }, + { $group: { _id: "$expense_type", total: { $sum: "$asset_value" } } }, + ]); + const credit = allData2[0].total ? allData2[0].total : 0; + + res.send({ Income: income, Expenses: debit, Savings: income - debit }); + } catch (error) { + res.status(500).json({ message: error }); + } +}); + +//get holding by asset id +route.get("/holdings/:id", async (req, res) => { + const data = await holdingModel.find({ asset_id: req.params.id }); + try { + res.json(data); + } catch (err) { + res.send(400).json({ message: err.message }); + } +}); + +//update holding by asset id +route.put("/holdings/:id", async (req, res) => { + const asset_id = req.params.id; + const update_data = req.body; + + try { + const data = await holdingModel.findOneAndUpdate( + { asset_id: asset_id }, + update_data, + { + new: true, + upsert: true, + } + ); + res.send({ message: `Asset ${asset_id} sucessfully updated`, data: data }); + } catch (err) { + res.send(400).json({ message: err.message }); + } +}); + +//Activate holding by asset id +route.put("/holdings/activate/:id", async (req, res) => { + const asset_id = req.params.id; + + holdingModel.findOne({ asset_id: asset_id }, async (err, asset) => { + if (err) { + res.status(500).send({ error: err }); + } + if (asset.status == "ACTIVATE") { + res.send({ message: `Asset ${asset_id} Already Activated` }); + } + try { + const data = await holdingModel.findOneAndUpdate( + { asset_id: asset_id }, + { status: "ACTIVATE" }, + { + new: true, + upsert: true, + } + ); + res.send({ message: `Asset ${asset_id} sucessfully Activated` }); + } catch (err) { + res.send(400).json({ message: err.message }); + } + }); +}); + +//Inctivate holding by asset id +route.put("/holdings/inactivate/:id", async (req, res) => { + const asset_id = req.params.id; + + holdingModel.findOne({ asset_id: asset_id }, async (err, asset) => { + if (err) { + res.status(500).send({ error: err }); + } + if (asset.status == "INACTIVATE") { + res.send({ message: `Asset ${asset_id} Already Inctivated` }); + } + try { + const data = await holdingModel.findOneAndUpdate( + { asset_id: asset_id }, + { status: "INACTIVATE" }, + { + new: true, + upsert: true, + } + ); + res.send({ message: `Asset ${asset_id} sucessfully Inctivated` }); + } catch (err) { + res.sendStatus(400); + } + }); +}); + +//add documnet by asset id +// route.post("/holdings/doc/:id", async (req, res) => { + +// try { +// const asset_id = req.params.id; +// const {path} = req.body; +// const gfs=Grid(database.db) +// const writestream=gfs.createWriteStream({ +// document:`documnet${asset_id}.pdf` +// }) +// fs.createReadStream(path).pipe(writestream) +// writestream.on('close',(file)=>{ +// console.log(`${file.filename} written to DB`) +// }) +// // const data = await holdingModel.findOneAndUpdate( +// // { asset_id: asset_id }, +// // update_data, +// // { +// // new: true, +// // upsert: true, +// // } +// // ); +// res.send({ message: `Asset ${asset_id} sucessfully updated`, data: data }); +// } catch (err) { +// res.send(400).json({ message: err.message }); +// } +// }); + +module.exports = route; diff --git a/Week-14/Assignment 14.1/index.js b/Week-14/Assignment 14.1/index.js new file mode 100644 index 0000000..0e6772a --- /dev/null +++ b/Week-14/Assignment 14.1/index.js @@ -0,0 +1,23 @@ +const { application } = require('express') +const express=require('express') +const mongoose=require('mongoose') +const routes=require('./helper/route') +const app=express() +require("dotenv").config(); +const PORT = process.env.PORT; +const DB_URL = process.env.DB_URL; +mongoose.connect(DB_URL) +const database=mongoose.connection +database.on('error',(error)=>{ + console.log(error) +}) + +database.once('connected',()=>{ + console.log('database connected') +}) +app.use(express.json()) +app.listen(PORT,()=>{ + console.log(`Server started a 127.0.0.1:${PORT}`) +}) +app.use('/api',routes) +module.exports = database; \ No newline at end of file diff --git a/Week-14/Assignment 14.1/package-lock.json b/Week-14/Assignment 14.1/package-lock.json new file mode 100644 index 0000000..0bb19f8 --- /dev/null +++ b/Week-14/Assignment 14.1/package-lock.json @@ -0,0 +1,2131 @@ +{ + "name": "wealth", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "wealth", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^16.0.1", + "express": "^4.18.1", + "gridfs-stream": "^1.1.1", + "mongoose": "^6.5.3", + "nodemon": "^2.0.19" + } + }, + "node_modules/@types/node": { + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==" + }, + "node_modules/@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz", + "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/flushwritable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flushwritable/-/flushwritable-1.0.0.tgz", + "integrity": "sha512-3VELfuWCLVzt5d2Gblk8qcqFro6nuwvxwMzHaENVDHI7rxcBRtMCwTk/E9FXcgh+82DSpavPNDueA9+RxXJoFg==" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gridfs-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gridfs-stream/-/gridfs-stream-1.1.1.tgz", + "integrity": "sha512-EcELdPIjC7tpZUiZA/8trfmszLbcsZlFyDQ8DhMtyJIMDmuLi5Vzt/056OO6FqfvY/zwiTCo1eZAqwtqrhBGMQ==", + "dependencies": { + "flushwritable": "^1.0.0" + }, + "engines": { + "node": ">= 0.4.2" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/kareem": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.4.1.tgz", + "integrity": "sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.8.1.tgz", + "integrity": "sha512-/NyiM3Ox9AwP5zrfT9TXjRKDJbXlLaUDQ9Rg//2lbg8D2A8GXV0VidYYnA/gfdK6uwbnL4FnAflH7FbGw3TS7w==", + "dependencies": { + "bson": "^4.6.5", + "denque": "^2.0.1", + "mongodb-connection-string-url": "^2.5.2", + "socks": "^2.6.2" + }, + "engines": { + "node": ">=12.9.0" + }, + "optionalDependencies": { + "saslprep": "^1.0.3" + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz", + "integrity": "sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongoose": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.5.3.tgz", + "integrity": "sha512-0L2ZOPzNQ7kcIgpdfpmVXc+/SypdhzcTlaHXYa983u1lrVp7/i3ekwHpPiTXxYBvV6FwBAsFoHI7+Ovf8tp3Mg==", + "dependencies": { + "bson": "^4.6.5", + "kareem": "2.4.1", + "mongodb": "4.8.1", + "mpath": "0.9.0", + "mquery": "4.0.3", + "ms": "2.1.3", + "sift": "16.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", + "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", + "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==" + }, + "node_modules/simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "@types/node": { + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==" + }, + "@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + }, + "@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bson": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz", + "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==", + "requires": { + "buffer": "^5.6.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "dotenv": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", + "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "flushwritable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flushwritable/-/flushwritable-1.0.0.tgz", + "integrity": "sha512-3VELfuWCLVzt5d2Gblk8qcqFro6nuwvxwMzHaENVDHI7rxcBRtMCwTk/E9FXcgh+82DSpavPNDueA9+RxXJoFg==" + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "gridfs-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gridfs-stream/-/gridfs-stream-1.1.1.tgz", + "integrity": "sha512-EcELdPIjC7tpZUiZA/8trfmszLbcsZlFyDQ8DhMtyJIMDmuLi5Vzt/056OO6FqfvY/zwiTCo1eZAqwtqrhBGMQ==", + "requires": { + "flushwritable": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "kareem": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.4.1.tgz", + "integrity": "sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mongodb": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.8.1.tgz", + "integrity": "sha512-/NyiM3Ox9AwP5zrfT9TXjRKDJbXlLaUDQ9Rg//2lbg8D2A8GXV0VidYYnA/gfdK6uwbnL4FnAflH7FbGw3TS7w==", + "requires": { + "bson": "^4.6.5", + "denque": "^2.0.1", + "mongodb-connection-string-url": "^2.5.2", + "saslprep": "^1.0.3", + "socks": "^2.6.2" + } + }, + "mongodb-connection-string-url": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz", + "integrity": "sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "mongoose": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.5.3.tgz", + "integrity": "sha512-0L2ZOPzNQ7kcIgpdfpmVXc+/SypdhzcTlaHXYa983u1lrVp7/i3ekwHpPiTXxYBvV6FwBAsFoHI7+Ovf8tp3Mg==", + "requires": { + "bson": "^4.6.5", + "kareem": "2.4.1", + "mongodb": "4.8.1", + "mpath": "0.9.0", + "mquery": "4.0.3", + "ms": "2.1.3", + "sift": "16.0.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" + }, + "mquery": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", + "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", + "requires": { + "debug": "4.x" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "nodemon": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "sift": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", + "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==" + }, + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } +} diff --git a/Week-14/Assignment 14.1/package.json b/Week-14/Assignment 14.1/package.json new file mode 100644 index 0000000..3c3ad07 --- /dev/null +++ b/Week-14/Assignment 14.1/package.json @@ -0,0 +1,20 @@ +{ + "name": "wealth", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "nodemon index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "dotenv": "^16.0.1", + "express": "^4.18.1", + "gridfs-stream": "^1.1.1", + "mongoose": "^6.5.3", + "nodemon": "^2.0.19" + } +} diff --git a/Week-14/Assignment 14.1/readme.md b/Week-14/Assignment 14.1/readme.md new file mode 100644 index 0000000..3bd6418 --- /dev/null +++ b/Week-14/Assignment 14.1/readme.md @@ -0,0 +1,71 @@ +# Assignment 14.1 +![img](./Screenshot.PNG) + +Use command npm start to run the application + +1)For registering +TYPE OF REQUEST :POST +/api/register + +BODY: { + "fname":"Rahul", + "lname":"sawant", + "email":"rahul.saant@email.com", + "username":"rahul.sawant", + "password":"password@123" +} + +2)For logging in +TYPE OF REQUEST :POST +/api/login +BODY: { + "username":"rahul.sawant", + "password":"password@123" +} + +3)To add assets +TYPE OF REQUEST :POST +/api/holdings +BODY: { + + "asset_type": "FIXEDINCOME", + "asset_id": "Rkhiugdic7428HG87", + "asset_value": 200, + "intrest_rate": 3, + "invested_date": "2020-12-11T18:30:00.000Z", + "invested_period_years": 5, + "maturity_date": null, + "status": "ACTIVE", + "expense_type":"CREDIT" + } + +4)To fetch all assets +TYPE OF REQUEST :GET +/api/holdings + +5)To fetch income, expenses and savings +TYPE OF REQUEST :GET +/api/holdings/stats + +6)To fetch asset using asset_id +TYPE OF REQUEST :GET +/api/holdings/:id + +7)To update asset using asset_id +TYPE OF REQUEST :PUT +/api/holdings/:id + +BODY:{ + "asset_value": 200, + "intrest_rate": 3, + "invested_date": "2020-12-11T18:30:00.000Z", + "invested_period_years": 5 + } + +8)To activate asset using asset_id +TYPE OF REQUEST :PUT +/api/holdings/activate/:id + +9)To inactivate asset using asset_id +TYPE OF REQUEST :PUT +/api/holdings/inactivate/:id \ No newline at end of file From 9a54e8878100cbec7cc81013fc6aba461e90c5a2 Mon Sep 17 00:00:00 2001 From: rahul Date: Fri, 26 Aug 2022 10:56:41 +0530 Subject: [PATCH 2/2] Readme.md updated --- Week-14/Assignment 14.1/readme.md | 95 +++++++++++++++++-------------- 1 file changed, 52 insertions(+), 43 deletions(-) diff --git a/Week-14/Assignment 14.1/readme.md b/Week-14/Assignment 14.1/readme.md index 3bd6418..7152540 100644 --- a/Week-14/Assignment 14.1/readme.md +++ b/Week-14/Assignment 14.1/readme.md @@ -3,29 +3,35 @@ Use command npm start to run the application -1)For registering -TYPE OF REQUEST :POST +1)For registering
+TYPE OF REQUEST :POST
/api/register -BODY: { - "fname":"Rahul", - "lname":"sawant", - "email":"rahul.saant@email.com", - "username":"rahul.sawant", - "password":"password@123" -} - -2)For logging in -TYPE OF REQUEST :POST -/api/login -BODY: { - "username":"rahul.sawant", - "password":"password@123" -} +BODY: + + { + + "fname": "Rahul", + "lname": "Sawant", + "email": "rahul.sawant@email.com", + "username": "rahul.sawant", + "password": "password@123" + } + +2)For logging in
+TYPE OF REQUEST :POST
+/api/login
+BODY:
+ +{ -3)To add assets -TYPE OF REQUEST :POST -/api/holdings + "username":"rahul.sawant", + "password":"password@123" + } + +3)To add assets
+TYPE OF REQUEST :POST
+/api/holdings
BODY: { "asset_type": "FIXEDINCOME", @@ -39,33 +45,36 @@ BODY: { "expense_type":"CREDIT" } -4)To fetch all assets -TYPE OF REQUEST :GET -/api/holdings +4)To fetch all assets
+TYPE OF REQUEST :GET
+/api/holdings
-5)To fetch income, expenses and savings -TYPE OF REQUEST :GET -/api/holdings/stats +5)To fetch income, expenses and savings
+TYPE OF REQUEST :GET
+/api/holdings/stats
-6)To fetch asset using asset_id -TYPE OF REQUEST :GET -/api/holdings/:id +6)To fetch asset using asset_id
+TYPE OF REQUEST :GET
+/api/holdings/:id
-7)To update asset using asset_id -TYPE OF REQUEST :PUT -/api/holdings/:id +7)To update asset using asset_id
+TYPE OF REQUEST :PUT
+/api/holdings/:id
-BODY:{ - "asset_value": 200, +BODY: + { + + "asset_value": 200, "intrest_rate": 3, - "invested_date": "2020-12-11T18:30:00.000Z", - "invested_period_years": 5 - } + "invested_date": "2020-12-11", + "invested_period_years": 5, + + } -8)To activate asset using asset_id -TYPE OF REQUEST :PUT -/api/holdings/activate/:id +8)To activate asset using asset_id
+TYPE OF REQUEST :PUT
+/api/holdings/activate/:id
-9)To inactivate asset using asset_id -TYPE OF REQUEST :PUT -/api/holdings/inactivate/:id \ No newline at end of file +9)To inactivate asset using asset_id
+TYPE OF REQUEST :PUT
+/api/holdings/inactivate/:id \ No newline at end of file