├── .DS_Store ├── .gitignore ├── 377.txt ├── README.md ├── app.js ├── package-lock.json ├── package.json ├── public └── css │ ├── bootstrap-social.css │ └── styles.css └── views ├── home.ejs ├── login.ejs ├── partials ├── footer.ejs └── header.ejs ├── register.ejs ├── secrets.ejs └── submit.ejs /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JasonLim1009/Authentication-Security/68aefa6f2618a8fbefb4f1df9cab219f3c6771b9/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* -------------------------------------------------------------------------------- /377.txt: -------------------------------------------------------------------------------- 1 | // 377 Level 1 - Username and Password only 2 | npm init -y 3 | npm i express ejs body-parser 4 | nodemon app.js 5 | 6 | 7 | 8 | // 378 9 | connect Studio 3T 10 | localhost:27017 11 | userDB 12 | - Collections 13 | - users 14 | - Open Collections Tab 15 | 16 | 17 | 18 | // 380 Level 2 - Encryption 19 | npm i mongoose-encryption 20 | nodemon app.js 21 | 22 | 23 | 24 | // 381 25 | touch .env 26 | SECRET=Thisisourlittlesecret. 27 | API_KEY=asdhohqwidnoicasnicoqasd 28 | touch .gitignore 29 | https://github.com/github/gitignore/blob/main/Node.gitignore 30 | copy n paste to .gitignore files 31 | 32 | git add . 33 | git commit -m 'Add Environment Vars' 34 | git push -u origin master 35 | ------------------------------------ 36 | git init 37 | git add README.md 38 | git commit -m "first commit" 39 | git branch -M main 40 | git remote add origin https://github.com/JasonLim1009/Authentication-Security.git 41 | git push -u origin main 42 | ------------------------------------ 43 | 44 | // 382 Level 3 - Hashing Passwords 45 | Encryption 46 | Password + Key (Clipher Method)---> Cliphertext 47 | 48 | Decryption 49 | Password <---(Clipher Method) Key + Cliphertext 50 | 51 | Hashing 52 | Password + Key (Hash Function)---> Hash 53 | 54 | 55 | 56 | // 384 Level 4 - Salting and Hashing Passwords with bcrypt 57 | Salting 58 | Password + Salt (Hash Function)---> Hash 59 | qwerty + 123456 (Hash Function)---> Hash 60 | 61 | Salt Rounds 62 | Password + Salt (Hash Function)---> Hash ---> Hash + Salt (Hash Function)---> Hash 63 | 64 | 65 | MD5 破解无需3sec... 66 | bcrypt 破解需要可能8个月以上... 67 | 68 | node --version 69 | - https://github.com/nvm-sh/nvm 70 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 71 | copy n paste to hyper 72 | 73 | nvm --version 74 | - File > New Tab 75 | nvm install 16.17.0 76 | npm i bcrypt 77 | npm i bcrypt@5.0.1 78 | nodemon app.js 79 | 80 | login localhost website 81 | connect Studio 3T 82 | - localhost:27017 83 | - Refresh View 84 | 85 | 86 | 87 | // 385 Level 5 - Cookies & Sessions 88 | npm i passport passport-local passport-local-mongoose express-session 89 | 90 | - Serialise 91 | - Deserialise 92 | 93 | nodemon app.js 94 | 95 | 96 | 97 | // 387 Level 6 - OAuth(Open Authorisation) 98 | npm install passport-google-oauth20 99 | 100 | https://console.cloud.google.com/apis/dashboard 101 | create 102 | 103 | npm install mongoose-findorcreate 104 | 105 | 106 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Authentication-Security 2 | 3 |  4 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | //jshint esversion:6 2 | // 377 Level 1 - Username and Password only 3 | // const express = require('express'); 4 | // const bodyParser = require('body-parser'); 5 | // const ejs = require('ejs'); 6 | 7 | // const app = express(); 8 | 9 | // app.use(express.static('public')); 10 | // app.set('view engine', 'ejs'); 11 | // app.use(bodyParser.urlencoded({ 12 | // extended: true 13 | // })); 14 | 15 | // app.get('/', function(req, res) { 16 | // res.render('home'); 17 | // }); 18 | 19 | // app.get('/login', function(req, res) { 20 | // res.render('login'); 21 | // }); 22 | 23 | // app.get('/register', function(req, res) { 24 | // res.render('register'); 25 | // }); 26 | 27 | // app.listen(3000, function(){ 28 | // console.log('server started on port 3000.') 29 | // }); 30 | 31 | // npm init -y 32 | // npm i express ejs body-parser 33 | // nodemon app.js 34 | 35 | 36 | 37 | // 378 38 | // const express = require('express'); 39 | // const bodyParser = require('body-parser'); 40 | // const ejs = require('ejs'); 41 | // const mongoose = require('mongoose'); 42 | 43 | // const app = express(); 44 | 45 | // app.use(express.static('public')); 46 | // app.set('view engine', 'ejs'); 47 | // app.use(bodyParser.urlencoded({ 48 | // extended: true 49 | // })); 50 | 51 | // mongoose.connect('mongodb://localhost:27017/userDB', {useNewUrlParser: true}); 52 | 53 | // const userSchema = { 54 | // email: String, 55 | // password: String 56 | // }; 57 | 58 | // const User = new mongoose.model('User', userSchema); 59 | 60 | // app.get('/', function(req, res) { 61 | // res.render('home'); 62 | // }); 63 | 64 | // app.get('/login', function(req, res) { 65 | // res.render('login'); 66 | // }); 67 | 68 | // app.get('/register', function(req, res) { 69 | // res.render('register'); 70 | // }); 71 | 72 | 73 | // app.post('/register', function(req, res){ 74 | // const newUser = new User({ 75 | // email: req.body.username, 76 | // password: req.body.password 77 | // }); 78 | 79 | // newUser.save(function(err){ 80 | // if (err){ 81 | // console.log(err); 82 | // } else { 83 | // res.render('secrets'); 84 | // } 85 | // }); 86 | // }); 87 | 88 | // app.post('/login', function(req, res){ 89 | // const username = req.body.username; 90 | // const password = req.body.password; 91 | 92 | // User.findOne({email: username}, function(err, foundUser){ 93 | // if (err) { 94 | // console.log(err); 95 | // } else { 96 | // if (foundUser) { 97 | // if (foundUser.password === password) { 98 | // res.render('secrets'); 99 | // } 100 | // } 101 | // } 102 | // }); 103 | // }); 104 | 105 | // app.listen(3000, function(){ 106 | // console.log('server started on port 3000.') 107 | // }); 108 | 109 | // npm i mongoose 110 | // nodemon app.js 111 | 112 | // File > New Tab 113 | // 1--> mongod 114 | 115 | // 2--> nodemon app.js 116 | 117 | 118 | 119 | // 380 Level 2 - Encryption 120 | // const express = require('express'); 121 | // const bodyParser = require('body-parser'); 122 | // const ejs = require('ejs'); 123 | // const mongoose = require('mongoose'); 124 | // const encrypt = require('mongoose-encryption'); 125 | 126 | // const app = express(); 127 | 128 | // app.use(express.static('public')); 129 | // app.set('view engine', 'ejs'); 130 | // app.use(bodyParser.urlencoded({ 131 | // extended: true 132 | // })); 133 | 134 | // mongoose.connect('mongodb://localhost:27017/userDB', {useNewUrlParser: true}); 135 | 136 | // const userSchema = new mongoose.Schema ({ 137 | // email: String, 138 | // password: String 139 | // }); 140 | 141 | // const secret = 'Thisisourlittlesecret.'; 142 | // userSchema.plugin(encrypt, { secret: secret, encryptedFields: ['password'] }); 143 | 144 | 145 | // const User = new mongoose.model('User', userSchema); 146 | 147 | // app.get('/', function(req, res) { 148 | // res.render('home'); 149 | // }); 150 | 151 | // app.get('/login', function(req, res) { 152 | // res.render('login'); 153 | // }); 154 | 155 | // app.get('/register', function(req, res) { 156 | // res.render('register'); 157 | // }); 158 | 159 | 160 | // app.post('/register', function(req, res){ 161 | // const newUser = new User({ 162 | // email: req.body.username, 163 | // password: req.body.password 164 | // }); 165 | 166 | // newUser.save(function(err){ 167 | // if (err){ 168 | // console.log(err); 169 | // } else { 170 | // res.render('secrets'); 171 | // } 172 | // }); 173 | // }); 174 | 175 | // app.post('/login', function(req, res){ 176 | // const username = req.body.username; 177 | // const password = req.body.password; 178 | 179 | // User.findOne({email: username}, function(err, foundUser){ 180 | // if (err) { 181 | // console.log(err); 182 | // } else { 183 | // if (foundUser) { 184 | // if (foundUser.password === password) { 185 | // res.render('secrets'); 186 | // } 187 | // } 188 | // } 189 | // }); 190 | // }); 191 | 192 | // app.listen(3000, function(){ 193 | // console.log('server started on port 3000.') 194 | // }); 195 | 196 | // npm i mongoose-encryption 197 | // nodemon app.js 198 | 199 | 200 | 201 | // 381 Using Environment variables to Keep Secrets safe 202 | // require('dotenv').config(); 203 | // const express = require('express'); 204 | // const bodyParser = require('body-parser'); 205 | // const ejs = require('ejs'); 206 | // const mongoose = require('mongoose'); 207 | // const encrypt = require('mongoose-encryption'); 208 | 209 | // const app = express(); 210 | 211 | // console.log(process.env.API_KEY); 212 | 213 | // app.use(express.static('public')); 214 | // app.set('view engine', 'ejs'); 215 | // app.use(bodyParser.urlencoded({ 216 | // extended: true 217 | // })); 218 | 219 | // mongoose.connect('mongodb://localhost:27017/userDB', {useNewUrlParser: true}); 220 | 221 | // const userSchema = new mongoose.Schema ({ 222 | // email: String, 223 | // password: String 224 | // }); 225 | 226 | 227 | // userSchema.plugin(encrypt, { secret: process.env.SECRET, encryptedFields: ['password'] }); 228 | 229 | 230 | // const User = new mongoose.model('User', userSchema); 231 | 232 | // app.get('/', function(req, res) { 233 | // res.render('home'); 234 | // }); 235 | 236 | // app.get('/login', function(req, res) { 237 | // res.render('login'); 238 | // }); 239 | 240 | // app.get('/register', function(req, res) { 241 | // res.render('register'); 242 | // }); 243 | 244 | 245 | // app.post('/register', function(req, res){ 246 | // const newUser = new User({ 247 | // email: req.body.username, 248 | // password: req.body.password 249 | // }); 250 | 251 | // newUser.save(function(err){ 252 | // if (err){ 253 | // console.log(err); 254 | // } else { 255 | // res.render('secrets'); 256 | // } 257 | // }); 258 | // }); 259 | 260 | // app.post('/login', function(req, res){ 261 | // const username = req.body.username; 262 | // const password = req.body.password; 263 | 264 | // User.findOne({email: username}, function(err, foundUser){ 265 | // if (err) { 266 | // console.log(err); 267 | // } else { 268 | // if (foundUser) { 269 | // if (foundUser.password === password) { 270 | // res.render('secrets'); 271 | // } 272 | // } 273 | // } 274 | // }); 275 | // }); 276 | 277 | // app.listen(3000, function(){ 278 | // console.log('server started on port 3000.') 279 | // }); 280 | 281 | // npm i dotenv 282 | // touch .env 283 | // ls -a 284 | // nodemon app.js 285 | // touch .gitignore 286 | 287 | 288 | 289 | // 382 Level 3 - Hashing Passwords 290 | // require('dotenv').config(); 291 | // const express = require('express'); 292 | // const bodyParser = require('body-parser'); 293 | // const ejs = require('ejs'); 294 | // const mongoose = require('mongoose'); 295 | // const md5 = require('md5'); 296 | 297 | // const app = express(); 298 | 299 | // console.log(md5('123456')); 300 | 301 | // console.log(process.env.API_KEY); 302 | 303 | // app.use(express.static('public')); 304 | // app.set('view engine', 'ejs'); 305 | // app.use(bodyParser.urlencoded({ 306 | // extended: true 307 | // })); 308 | 309 | // mongoose.connect('mongodb://localhost:27017/userDB', {useNewUrlParser: true}); 310 | 311 | // const userSchema = new mongoose.Schema ({ 312 | // email: String, 313 | // password: String 314 | // }); 315 | 316 | // const User = new mongoose.model('User', userSchema); 317 | 318 | // app.get('/', function(req, res) { 319 | // res.render('home'); 320 | // }); 321 | 322 | // app.get('/login', function(req, res) { 323 | // res.render('login'); 324 | // }); 325 | 326 | // app.get('/register', function(req, res) { 327 | // res.render('register'); 328 | // }); 329 | 330 | 331 | // app.post('/register', function(req, res){ 332 | // const newUser = new User({ 333 | // email: req.body.username, 334 | // password: md5(req.body.password) 335 | // }); 336 | 337 | // newUser.save(function(err){ 338 | // if (err){ 339 | // console.log(err); 340 | // } else { 341 | // res.render('secrets'); 342 | // } 343 | // }); 344 | // }); 345 | 346 | // app.post('/login', function(req, res){ 347 | // const username = req.body.username; 348 | // const password = md5(req.body.password); 349 | 350 | // User.findOne({email: username}, function(err, foundUser){ 351 | // if (err) { 352 | // console.log(err); 353 | // } else { 354 | // if (foundUser) { 355 | // if (foundUser.password === password) { 356 | // res.render('secrets'); 357 | // } 358 | // } 359 | // } 360 | // }); 361 | // }); 362 | 363 | // app.listen(3000, function(){ 364 | // console.log('server started on port 3000.') 365 | // }); 366 | 367 | // npm i md5 368 | // mongod 369 | // nodemon app.js 370 | 371 | 372 | 373 | // 383 Level 4 - Salting and Hashing Passwords with bcrypt 374 | // require('dotenv').config(); 375 | // const express = require('express'); 376 | // const bodyParser = require('body-parser'); 377 | // const ejs = require('ejs'); 378 | // const mongoose = require('mongoose'); 379 | // const bcrypt = require('bcrypt'); 380 | // const saltRounds = 10; 381 | 382 | // const app = express(); 383 | 384 | // app.use(express.static('public')); 385 | // app.set('view engine', 'ejs'); 386 | // app.use(bodyParser.urlencoded({ 387 | // extended: true 388 | // })); 389 | 390 | // mongoose.connect('mongodb://localhost:27017/userDB', {useNewUrlParser: true}); 391 | 392 | // const userSchema = new mongoose.Schema ({ 393 | // email: String, 394 | // password: String 395 | // }); 396 | 397 | // const User = new mongoose.model('User', userSchema); 398 | 399 | // app.get('/', function(req, res) { 400 | // res.render('home'); 401 | // }); 402 | 403 | // app.get('/login', function(req, res) { 404 | // res.render('login'); 405 | // }); 406 | 407 | // app.get('/register', function(req, res) { 408 | // res.render('register'); 409 | // }); 410 | 411 | 412 | // app.post('/register', function(req, res){ 413 | 414 | // bcrypt.hash(req.body.password, saltRounds, function(err, hash) { 415 | // const newUser = new User({ 416 | // email: req.body.username, 417 | // password: hash 418 | // }); 419 | 420 | // newUser.save(function(err){ 421 | // if (err){ 422 | // console.log(err); 423 | // } else { 424 | // res.render('secrets'); 425 | // } 426 | // }); 427 | // }); 428 | 429 | 430 | // }); 431 | 432 | // app.post('/login', function(req, res){ 433 | // const username = req.body.username; 434 | // const password = req.body.password; 435 | 436 | // User.findOne({email: username}, function(err, foundUser){ 437 | // if (err) { 438 | // console.log(err); 439 | // } else { 440 | // if (foundUser) { 441 | // bcrypt.compare(password, foundUser.password, function(err, result) { 442 | // if (result === true) { 443 | // res.render('secrets'); 444 | // } 445 | // }); 446 | // } 447 | // } 448 | // }); 449 | // }); 450 | 451 | // app.listen(3000, function(){ 452 | // console.log('server started on port 3000.') 453 | // }); 454 | 455 | // node --version 456 | // curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 457 | // nvm --version 458 | 459 | // File > New Tab 460 | // nvm install 16.17.0 461 | // npm i bcrypt 462 | // npm i bcrypt@5.0.1 463 | // nodemon app.js 464 | 465 | 466 | 467 | // 386 Level 5 - Cookies & Sessions 468 | // require('dotenv').config(); 469 | // const express = require('express'); 470 | // const bodyParser = require('body-parser'); 471 | // const ejs = require('ejs'); 472 | // const mongoose = require('mongoose'); 473 | // const session = require('express-session'); 474 | // const passport = require('passport'); 475 | // const passportLocalMongoose = require('passport-local-mongoose'); 476 | 477 | 478 | // const app = express(); 479 | 480 | // app.use(express.static('public')); 481 | // app.set('view engine', 'ejs'); 482 | // app.use(bodyParser.urlencoded({ 483 | // extended: true 484 | // })); 485 | 486 | // app.use(session({ 487 | // secret: 'Our little secret.', 488 | // resave: false, 489 | // saveUninitialized: false 490 | // })); 491 | 492 | // app.use(passport.initialize()); 493 | // app.use(passport.session()); 494 | 495 | // mongoose.connect('mongodb://localhost:27017/userDB', {useNewUrlParser: true}); 496 | 497 | // const userSchema = new mongoose.Schema ({ 498 | // email: String, 499 | // password: String 500 | // }); 501 | 502 | // userSchema.plugin(passportLocalMongoose); 503 | 504 | // const User = new mongoose.model('User', userSchema); 505 | 506 | // passport.use(User.createStrategy()); 507 | 508 | // passport.serializeUser(User.serializeUser()); 509 | // passport.deserializeUser(User.deserializeUser()); 510 | 511 | // app.get('/', function(req, res) { 512 | // res.render('home'); 513 | // }); 514 | 515 | // app.get('/login', function(req, res) { 516 | // res.render('login'); 517 | // }); 518 | 519 | // app.get('/register', function(req, res) { 520 | // res.render('register'); 521 | // }); 522 | 523 | // app.get('/secrets', function(req, res){ 524 | // if (req.isAuthenticated()){ 525 | // res.render('secrets'); 526 | // } else { 527 | // res.redirect('/login'); 528 | // } 529 | // }); 530 | 531 | // app.get('/logout', function(req, res){ 532 | // res.redirect('/'); 533 | // }); 534 | 535 | 536 | // app.post('/register', function(req, res){ 537 | 538 | // User.register({username: req.body.username}, req.body.password, function(err, user){ 539 | // if (err) { 540 | // console.log(err); 541 | // res.redirect('/register'); 542 | // } else { 543 | // passport.authenticate('local')(req, res, function(){ 544 | // res.redirect('/secrets'); 545 | // }); 546 | // } 547 | // }); 548 | 549 | // }); 550 | 551 | // app.post('/login', function(req, res){ 552 | 553 | // const user = new User({ 554 | // username: req.body.username, 555 | // password: req.body.password 556 | // }); 557 | 558 | // req.login(user, function(err){ 559 | // if (err) { 560 | // console.log(err); 561 | // } else { 562 | // passport.authenticate('local')(req, res, function(){ 563 | // res.redirect('/secrets'); 564 | // }); 565 | // } 566 | // }); 567 | // }); 568 | 569 | // app.listen(3000, function(){ 570 | // console.log('server started on port 3000.') 571 | // }); 572 | 573 | // npm i passport passport-local passport-local-mongoose express-session 574 | // nodemon app.js 575 | 576 | 577 | 578 | // 387 Level 6 - OAuth 2.0 & How to implement Sign in with google 579 | // require('dotenv').config(); 580 | // const express = require('express'); 581 | // const bodyParser = require('body-parser'); 582 | // const ejs = require('ejs'); 583 | // const mongoose = require('mongoose'); 584 | // const session = require('express-session'); 585 | // const passport = require('passport'); 586 | // const passportLocalMongoose = require('passport-local-mongoose'); 587 | // const GoogleStrategy = require('passport-google-oauth20').Strategy; 588 | // const findOrCreate = require('mongoose-findorcreate'); 589 | 590 | // const app = express(); 591 | 592 | // app.use(express.static('public')); 593 | // app.set('view engine', 'ejs'); 594 | // app.use(bodyParser.urlencoded({ 595 | // extended: true 596 | // })); 597 | 598 | // app.use(session({ 599 | // secret: 'Our little secret.', 600 | // resave: false, 601 | // saveUninitialized: false 602 | // })); 603 | 604 | // app.use(passport.initialize()); 605 | // app.use(passport.session()); 606 | 607 | // mongoose.connect('mongodb://localhost:27017/userDB', {useNewUrlParser: true}); 608 | 609 | // const userSchema = new mongoose.Schema ({ 610 | // email: String, 611 | // password: String, 612 | // googleId: String 613 | // }); 614 | 615 | // userSchema.plugin(passportLocalMongoose); 616 | // userSchema.plugin(findOrCreate); 617 | 618 | // const User = new mongoose.model('User', userSchema); 619 | 620 | // passport.use(User.createStrategy()); 621 | 622 | // passport.serializeUser(function(user, done) { 623 | // done(null, user.id); 624 | // }); 625 | 626 | // passport.deserializeUser(function(id, done) { 627 | // User.findById(id, function(err, user) { 628 | // done(err, user); 629 | // }); 630 | // }); 631 | 632 | // passport.use(new GoogleStrategy({ 633 | // clientID: process.env.CLIENT_ID, 634 | // clientSecret: process.env.CLIENT_SECRET, 635 | // callbackURL: 'http://localhost:3000/auth/google/secrets' 636 | // }, 637 | // function(accessToken, refreshToken, profile, cb) { 638 | // console.log(profile); 639 | 640 | // User.findOrCreate({ googleId: profile.id }, function (err, user) { 641 | // return cb(err, user); 642 | // }); 643 | // } 644 | // )); 645 | 646 | // app.get('/', function(req, res) { 647 | // res.render('home'); 648 | // }); 649 | 650 | // app.get("/auth/google", 651 | // passport.authenticate('google', { scope: ["profile"] }) 652 | // ); 653 | 654 | // app.get("/auth/google/secrets", 655 | // passport.authenticate('google', { failureRedirect: "/login" }), 656 | // function(req, res) { 657 | 658 | // res.redirect("/secrets"); 659 | // }); 660 | 661 | // app.get('/login', function(req, res) { 662 | // res.render('login'); 663 | // }); 664 | 665 | // app.get('/register', function(req, res) { 666 | // res.render('register'); 667 | // }); 668 | 669 | // app.get('/secrets', function(req, res){ 670 | // if (req.isAuthenticated()){ 671 | // res.render('secrets'); 672 | // } else { 673 | // res.redirect('/login'); 674 | // } 675 | // }); 676 | 677 | // app.get('/logout', function(req, res){ 678 | // res.redirect('/'); 679 | // }); 680 | 681 | 682 | // app.post('/register', function(req, res){ 683 | 684 | // User.register({username: req.body.username}, req.body.password, function(err, user){ 685 | // if (err) { 686 | // console.log(err); 687 | // res.redirect('/register'); 688 | // } else { 689 | // passport.authenticate('local')(req, res, function(){ 690 | // res.redirect('/secrets'); 691 | // }); 692 | // } 693 | // }); 694 | 695 | // }); 696 | 697 | // app.post('/login', function(req, res){ 698 | 699 | // const user = new User({ 700 | // username: req.body.username, 701 | // password: req.body.password 702 | // }); 703 | 704 | // req.login(user, function(err){ 705 | // if (err) { 706 | // console.log(err); 707 | // } else { 708 | // passport.authenticate('local')(req, res, function(){ 709 | // res.redirect('/secrets'); 710 | // }); 711 | // } 712 | // }); 713 | // }); 714 | 715 | // app.listen(3000, function(){ 716 | // console.log('server started on port 3000.') 717 | // }); 718 | 719 | // npm install passport-google-oauth20 720 | // npm install mongoose-findorcreate 721 | // nodemon app.js 722 | 723 | 724 | 725 | // 388 726 | require('dotenv').config(); 727 | const express = require('express'); 728 | const bodyParser = require('body-parser'); 729 | const ejs = require('ejs'); 730 | const mongoose = require('mongoose'); 731 | const session = require('express-session'); 732 | const passport = require('passport'); 733 | const passportLocalMongoose = require('passport-local-mongoose'); 734 | const GoogleStrategy = require('passport-google-oauth20').Strategy; 735 | const findOrCreate = require('mongoose-findorcreate'); 736 | 737 | const app = express(); 738 | 739 | app.use(express.static('public')); 740 | app.set('view engine', 'ejs'); 741 | app.use(bodyParser.urlencoded({ 742 | extended: true 743 | })); 744 | 745 | app.use(session({ 746 | secret: 'Our little secret.', 747 | resave: false, 748 | saveUninitialized: false 749 | })); 750 | 751 | app.use(passport.initialize()); 752 | app.use(passport.session()); 753 | 754 | mongoose.connect('mongodb://localhost:27017/userDB', {useNewUrlParser: true}); 755 | 756 | const userSchema = new mongoose.Schema ({ 757 | email: String, 758 | password: String, 759 | googleId: String, 760 | secret: String 761 | }); 762 | 763 | userSchema.plugin(passportLocalMongoose); 764 | userSchema.plugin(findOrCreate); 765 | 766 | const User = new mongoose.model('User', userSchema); 767 | 768 | passport.use(User.createStrategy()); 769 | 770 | passport.serializeUser(function(user, done) { 771 | done(null, user.id); 772 | }); 773 | 774 | passport.deserializeUser(function(id, done) { 775 | User.findById(id, function(err, user) { 776 | done(err, user); 777 | }); 778 | }); 779 | 780 | passport.use(new GoogleStrategy({ 781 | clientID: process.env.CLIENT_ID, 782 | clientSecret: process.env.CLIENT_SECRET, 783 | callbackURL: 'http://localhost:3000/auth/google/secrets' 784 | }, 785 | function(accessToken, refreshToken, profile, cb) { 786 | console.log(profile); 787 | 788 | User.findOrCreate({ googleId: profile.id }, function (err, user) { 789 | return cb(err, user); 790 | }); 791 | } 792 | )); 793 | 794 | app.get('/', function(req, res) { 795 | res.render('home'); 796 | }); 797 | 798 | app.get("/auth/google", 799 | passport.authenticate('google', { scope: ["profile"] }) 800 | ); 801 | 802 | app.get("/auth/google/secrets", 803 | passport.authenticate('google', { failureRedirect: "/login" }), 804 | function(req, res) { 805 | 806 | res.redirect("/secrets"); 807 | }); 808 | 809 | app.get('/login', function(req, res) { 810 | res.render('login'); 811 | }); 812 | 813 | app.get('/register', function(req, res) { 814 | res.render('register'); 815 | }); 816 | 817 | app.get('/secrets', function(req, res){ 818 | User.find({'secret': {$ne: null}}, function(err, foundUser){ 819 | if (err){ 820 | console.log(err); 821 | } else { 822 | if (foundUser) { 823 | res.render('secrets', {usersWithSecrets: foundUser}); 824 | } 825 | } 826 | }); 827 | }); 828 | 829 | app.get('/submit', function(req, res){ 830 | if (req.isAuthenticated()){ 831 | res.render('submit'); 832 | } else { 833 | res.redirect('/login'); 834 | } 835 | }); 836 | 837 | app.post('/submit', function(req, res){ 838 | const submittedSecret = req.body.secret; 839 | 840 | console.log(req.user.id); 841 | 842 | User.findById(req.user.id, function(err, foundUser){ 843 | if (err) { 844 | console.log(err); 845 | } else { 846 | if (foundUser) { 847 | foundUser.secret = submittedSecret; 848 | foundUser.save(function(){ 849 | res.redirect('/secrets'); 850 | }); 851 | } 852 | } 853 | }); 854 | }); 855 | 856 | app.get('/logout', function(req, res){ 857 | res.redirect('/'); 858 | }); 859 | 860 | 861 | app.post('/register', function(req, res){ 862 | 863 | User.register({username: req.body.username}, req.body.password, function(err, user){ 864 | if (err) { 865 | console.log(err); 866 | res.redirect('/register'); 867 | } else { 868 | passport.authenticate('local')(req, res, function(){ 869 | res.redirect('/secrets'); 870 | }); 871 | } 872 | }); 873 | 874 | }); 875 | 876 | app.post('/login', function(req, res){ 877 | 878 | const user = new User({ 879 | username: req.body.username, 880 | password: req.body.password 881 | }); 882 | 883 | req.login(user, function(err){ 884 | if (err) { 885 | console.log(err); 886 | } else { 887 | passport.authenticate('local')(req, res, function(){ 888 | res.redirect('/secrets'); 889 | }); 890 | } 891 | }); 892 | }); 893 | 894 | app.listen(3000, function(){ 895 | console.log('server started on port 3000.') 896 | }); 897 | 898 | // nodemon app.js -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "secrets", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "secrets", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "bcrypt": "^5.0.1", 13 | "body-parser": "^1.20.0", 14 | "dotenv": "^16.0.1", 15 | "ejs": "^3.1.8", 16 | "express": "^4.18.1", 17 | "express-session": "^1.17.3", 18 | "md5": "^2.3.0", 19 | "mongoose": "^6.5.3", 20 | "mongoose-encryption": "^2.1.2", 21 | "mongoose-findorcreate": "^3.0.0", 22 | "passport": "^0.6.0", 23 | "passport-google-oauth20": "^2.0.0", 24 | "passport-local": "^1.0.0", 25 | "passport-local-mongoose": "^7.1.2" 26 | } 27 | }, 28 | "node_modules/@mapbox/node-pre-gyp": { 29 | "version": "1.0.9", 30 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", 31 | "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", 32 | "dependencies": { 33 | "detect-libc": "^2.0.0", 34 | "https-proxy-agent": "^5.0.0", 35 | "make-dir": "^3.1.0", 36 | "node-fetch": "^2.6.7", 37 | "nopt": "^5.0.0", 38 | "npmlog": "^5.0.1", 39 | "rimraf": "^3.0.2", 40 | "semver": "^7.3.5", 41 | "tar": "^6.1.11" 42 | }, 43 | "bin": { 44 | "node-pre-gyp": "bin/node-pre-gyp" 45 | } 46 | }, 47 | "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { 48 | "version": "7.3.7", 49 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", 50 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", 51 | "dependencies": { 52 | "lru-cache": "^6.0.0" 53 | }, 54 | "bin": { 55 | "semver": "bin/semver.js" 56 | }, 57 | "engines": { 58 | "node": ">=10" 59 | } 60 | }, 61 | "node_modules/@types/node": { 62 | "version": "18.7.13", 63 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", 64 | "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==" 65 | }, 66 | "node_modules/@types/webidl-conversions": { 67 | "version": "6.1.1", 68 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", 69 | "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" 70 | }, 71 | "node_modules/@types/whatwg-url": { 72 | "version": "8.2.2", 73 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 74 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 75 | "dependencies": { 76 | "@types/node": "*", 77 | "@types/webidl-conversions": "*" 78 | } 79 | }, 80 | "node_modules/abbrev": { 81 | "version": "1.1.1", 82 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 83 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 84 | }, 85 | "node_modules/accepts": { 86 | "version": "1.3.8", 87 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 88 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 89 | "dependencies": { 90 | "mime-types": "~2.1.34", 91 | "negotiator": "0.6.3" 92 | }, 93 | "engines": { 94 | "node": ">= 0.6" 95 | } 96 | }, 97 | "node_modules/agent-base": { 98 | "version": "6.0.2", 99 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 100 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 101 | "dependencies": { 102 | "debug": "4" 103 | }, 104 | "engines": { 105 | "node": ">= 6.0.0" 106 | } 107 | }, 108 | "node_modules/agent-base/node_modules/debug": { 109 | "version": "4.3.4", 110 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 111 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 112 | "dependencies": { 113 | "ms": "2.1.2" 114 | }, 115 | "engines": { 116 | "node": ">=6.0" 117 | }, 118 | "peerDependenciesMeta": { 119 | "supports-color": { 120 | "optional": true 121 | } 122 | } 123 | }, 124 | "node_modules/agent-base/node_modules/ms": { 125 | "version": "2.1.2", 126 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 127 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 128 | }, 129 | "node_modules/ansi-regex": { 130 | "version": "5.0.1", 131 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 132 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 133 | "engines": { 134 | "node": ">=8" 135 | } 136 | }, 137 | "node_modules/ansi-styles": { 138 | "version": "4.3.0", 139 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 140 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 141 | "dependencies": { 142 | "color-convert": "^2.0.1" 143 | }, 144 | "engines": { 145 | "node": ">=8" 146 | }, 147 | "funding": { 148 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 149 | } 150 | }, 151 | "node_modules/aproba": { 152 | "version": "2.0.0", 153 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", 154 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" 155 | }, 156 | "node_modules/are-we-there-yet": { 157 | "version": "2.0.0", 158 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", 159 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", 160 | "dependencies": { 161 | "delegates": "^1.0.0", 162 | "readable-stream": "^3.6.0" 163 | }, 164 | "engines": { 165 | "node": ">=10" 166 | } 167 | }, 168 | "node_modules/array-flatten": { 169 | "version": "1.1.1", 170 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 171 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 172 | }, 173 | "node_modules/async": { 174 | "version": "3.2.4", 175 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 176 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" 177 | }, 178 | "node_modules/balanced-match": { 179 | "version": "1.0.2", 180 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 181 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 182 | }, 183 | "node_modules/base64-js": { 184 | "version": "1.5.1", 185 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 186 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 187 | "funding": [ 188 | { 189 | "type": "github", 190 | "url": "https://github.com/sponsors/feross" 191 | }, 192 | { 193 | "type": "patreon", 194 | "url": "https://www.patreon.com/feross" 195 | }, 196 | { 197 | "type": "consulting", 198 | "url": "https://feross.org/support" 199 | } 200 | ] 201 | }, 202 | "node_modules/base64url": { 203 | "version": "3.0.1", 204 | "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", 205 | "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", 206 | "engines": { 207 | "node": ">=6.0.0" 208 | } 209 | }, 210 | "node_modules/bcrypt": { 211 | "version": "5.0.1", 212 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", 213 | "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", 214 | "hasInstallScript": true, 215 | "dependencies": { 216 | "@mapbox/node-pre-gyp": "^1.0.0", 217 | "node-addon-api": "^3.1.0" 218 | }, 219 | "engines": { 220 | "node": ">= 10.0.0" 221 | } 222 | }, 223 | "node_modules/body-parser": { 224 | "version": "1.20.0", 225 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 226 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 227 | "dependencies": { 228 | "bytes": "3.1.2", 229 | "content-type": "~1.0.4", 230 | "debug": "2.6.9", 231 | "depd": "2.0.0", 232 | "destroy": "1.2.0", 233 | "http-errors": "2.0.0", 234 | "iconv-lite": "0.4.24", 235 | "on-finished": "2.4.1", 236 | "qs": "6.10.3", 237 | "raw-body": "2.5.1", 238 | "type-is": "~1.6.18", 239 | "unpipe": "1.0.0" 240 | }, 241 | "engines": { 242 | "node": ">= 0.8", 243 | "npm": "1.2.8000 || >= 1.4.16" 244 | } 245 | }, 246 | "node_modules/brace-expansion": { 247 | "version": "1.1.11", 248 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 249 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 250 | "dependencies": { 251 | "balanced-match": "^1.0.0", 252 | "concat-map": "0.0.1" 253 | } 254 | }, 255 | "node_modules/bson": { 256 | "version": "4.7.0", 257 | "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz", 258 | "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==", 259 | "dependencies": { 260 | "buffer": "^5.6.0" 261 | }, 262 | "engines": { 263 | "node": ">=6.9.0" 264 | } 265 | }, 266 | "node_modules/buffer": { 267 | "version": "5.7.1", 268 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 269 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 270 | "funding": [ 271 | { 272 | "type": "github", 273 | "url": "https://github.com/sponsors/feross" 274 | }, 275 | { 276 | "type": "patreon", 277 | "url": "https://www.patreon.com/feross" 278 | }, 279 | { 280 | "type": "consulting", 281 | "url": "https://feross.org/support" 282 | } 283 | ], 284 | "dependencies": { 285 | "base64-js": "^1.3.1", 286 | "ieee754": "^1.1.13" 287 | } 288 | }, 289 | "node_modules/buffer-equal-constant-time": { 290 | "version": "1.0.1", 291 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 292 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" 293 | }, 294 | "node_modules/bytes": { 295 | "version": "3.1.2", 296 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 297 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 298 | "engines": { 299 | "node": ">= 0.8" 300 | } 301 | }, 302 | "node_modules/call-bind": { 303 | "version": "1.0.2", 304 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 305 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 306 | "dependencies": { 307 | "function-bind": "^1.1.1", 308 | "get-intrinsic": "^1.0.2" 309 | }, 310 | "funding": { 311 | "url": "https://github.com/sponsors/ljharb" 312 | } 313 | }, 314 | "node_modules/chalk": { 315 | "version": "4.1.2", 316 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 317 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 318 | "dependencies": { 319 | "ansi-styles": "^4.1.0", 320 | "supports-color": "^7.1.0" 321 | }, 322 | "engines": { 323 | "node": ">=10" 324 | }, 325 | "funding": { 326 | "url": "https://github.com/chalk/chalk?sponsor=1" 327 | } 328 | }, 329 | "node_modules/charenc": { 330 | "version": "0.0.2", 331 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 332 | "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", 333 | "engines": { 334 | "node": "*" 335 | } 336 | }, 337 | "node_modules/chownr": { 338 | "version": "2.0.0", 339 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 340 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 341 | "engines": { 342 | "node": ">=10" 343 | } 344 | }, 345 | "node_modules/color-convert": { 346 | "version": "2.0.1", 347 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 348 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 349 | "dependencies": { 350 | "color-name": "~1.1.4" 351 | }, 352 | "engines": { 353 | "node": ">=7.0.0" 354 | } 355 | }, 356 | "node_modules/color-name": { 357 | "version": "1.1.4", 358 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 359 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 360 | }, 361 | "node_modules/color-support": { 362 | "version": "1.1.3", 363 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 364 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 365 | "bin": { 366 | "color-support": "bin.js" 367 | } 368 | }, 369 | "node_modules/concat-map": { 370 | "version": "0.0.1", 371 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 372 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 373 | }, 374 | "node_modules/console-control-strings": { 375 | "version": "1.1.0", 376 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 377 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" 378 | }, 379 | "node_modules/content-disposition": { 380 | "version": "0.5.4", 381 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 382 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 383 | "dependencies": { 384 | "safe-buffer": "5.2.1" 385 | }, 386 | "engines": { 387 | "node": ">= 0.6" 388 | } 389 | }, 390 | "node_modules/content-type": { 391 | "version": "1.0.4", 392 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 393 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 394 | "engines": { 395 | "node": ">= 0.6" 396 | } 397 | }, 398 | "node_modules/cookie": { 399 | "version": "0.5.0", 400 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 401 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 402 | "engines": { 403 | "node": ">= 0.6" 404 | } 405 | }, 406 | "node_modules/cookie-signature": { 407 | "version": "1.0.6", 408 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 409 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 410 | }, 411 | "node_modules/crypt": { 412 | "version": "0.0.2", 413 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 414 | "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", 415 | "engines": { 416 | "node": "*" 417 | } 418 | }, 419 | "node_modules/debug": { 420 | "version": "2.6.9", 421 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 422 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 423 | "dependencies": { 424 | "ms": "2.0.0" 425 | } 426 | }, 427 | "node_modules/delegates": { 428 | "version": "1.0.0", 429 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 430 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" 431 | }, 432 | "node_modules/denque": { 433 | "version": "2.1.0", 434 | "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", 435 | "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", 436 | "engines": { 437 | "node": ">=0.10" 438 | } 439 | }, 440 | "node_modules/depd": { 441 | "version": "2.0.0", 442 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 443 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 444 | "engines": { 445 | "node": ">= 0.8" 446 | } 447 | }, 448 | "node_modules/destroy": { 449 | "version": "1.2.0", 450 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 451 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 452 | "engines": { 453 | "node": ">= 0.8", 454 | "npm": "1.2.8000 || >= 1.4.16" 455 | } 456 | }, 457 | "node_modules/detect-libc": { 458 | "version": "2.0.1", 459 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", 460 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", 461 | "engines": { 462 | "node": ">=8" 463 | } 464 | }, 465 | "node_modules/dotenv": { 466 | "version": "16.0.1", 467 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", 468 | "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", 469 | "engines": { 470 | "node": ">=12" 471 | } 472 | }, 473 | "node_modules/dotty": { 474 | "version": "0.1.2", 475 | "resolved": "https://registry.npmjs.org/dotty/-/dotty-0.1.2.tgz", 476 | "integrity": "sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ==" 477 | }, 478 | "node_modules/ee-first": { 479 | "version": "1.1.1", 480 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 481 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 482 | }, 483 | "node_modules/ejs": { 484 | "version": "3.1.8", 485 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", 486 | "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", 487 | "dependencies": { 488 | "jake": "^10.8.5" 489 | }, 490 | "bin": { 491 | "ejs": "bin/cli.js" 492 | }, 493 | "engines": { 494 | "node": ">=0.10.0" 495 | } 496 | }, 497 | "node_modules/emoji-regex": { 498 | "version": "8.0.0", 499 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 500 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 501 | }, 502 | "node_modules/encodeurl": { 503 | "version": "1.0.2", 504 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 505 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 506 | "engines": { 507 | "node": ">= 0.8" 508 | } 509 | }, 510 | "node_modules/escape-html": { 511 | "version": "1.0.3", 512 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 513 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 514 | }, 515 | "node_modules/etag": { 516 | "version": "1.8.1", 517 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 518 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 519 | "engines": { 520 | "node": ">= 0.6" 521 | } 522 | }, 523 | "node_modules/express": { 524 | "version": "4.18.1", 525 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 526 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 527 | "dependencies": { 528 | "accepts": "~1.3.8", 529 | "array-flatten": "1.1.1", 530 | "body-parser": "1.20.0", 531 | "content-disposition": "0.5.4", 532 | "content-type": "~1.0.4", 533 | "cookie": "0.5.0", 534 | "cookie-signature": "1.0.6", 535 | "debug": "2.6.9", 536 | "depd": "2.0.0", 537 | "encodeurl": "~1.0.2", 538 | "escape-html": "~1.0.3", 539 | "etag": "~1.8.1", 540 | "finalhandler": "1.2.0", 541 | "fresh": "0.5.2", 542 | "http-errors": "2.0.0", 543 | "merge-descriptors": "1.0.1", 544 | "methods": "~1.1.2", 545 | "on-finished": "2.4.1", 546 | "parseurl": "~1.3.3", 547 | "path-to-regexp": "0.1.7", 548 | "proxy-addr": "~2.0.7", 549 | "qs": "6.10.3", 550 | "range-parser": "~1.2.1", 551 | "safe-buffer": "5.2.1", 552 | "send": "0.18.0", 553 | "serve-static": "1.15.0", 554 | "setprototypeof": "1.2.0", 555 | "statuses": "2.0.1", 556 | "type-is": "~1.6.18", 557 | "utils-merge": "1.0.1", 558 | "vary": "~1.1.2" 559 | }, 560 | "engines": { 561 | "node": ">= 0.10.0" 562 | } 563 | }, 564 | "node_modules/express-session": { 565 | "version": "1.17.3", 566 | "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", 567 | "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", 568 | "dependencies": { 569 | "cookie": "0.4.2", 570 | "cookie-signature": "1.0.6", 571 | "debug": "2.6.9", 572 | "depd": "~2.0.0", 573 | "on-headers": "~1.0.2", 574 | "parseurl": "~1.3.3", 575 | "safe-buffer": "5.2.1", 576 | "uid-safe": "~2.1.5" 577 | }, 578 | "engines": { 579 | "node": ">= 0.8.0" 580 | } 581 | }, 582 | "node_modules/express-session/node_modules/cookie": { 583 | "version": "0.4.2", 584 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 585 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", 586 | "engines": { 587 | "node": ">= 0.6" 588 | } 589 | }, 590 | "node_modules/filelist": { 591 | "version": "1.0.4", 592 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 593 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 594 | "dependencies": { 595 | "minimatch": "^5.0.1" 596 | } 597 | }, 598 | "node_modules/filelist/node_modules/brace-expansion": { 599 | "version": "2.0.1", 600 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 601 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 602 | "dependencies": { 603 | "balanced-match": "^1.0.0" 604 | } 605 | }, 606 | "node_modules/filelist/node_modules/minimatch": { 607 | "version": "5.1.0", 608 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", 609 | "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", 610 | "dependencies": { 611 | "brace-expansion": "^2.0.1" 612 | }, 613 | "engines": { 614 | "node": ">=10" 615 | } 616 | }, 617 | "node_modules/finalhandler": { 618 | "version": "1.2.0", 619 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 620 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 621 | "dependencies": { 622 | "debug": "2.6.9", 623 | "encodeurl": "~1.0.2", 624 | "escape-html": "~1.0.3", 625 | "on-finished": "2.4.1", 626 | "parseurl": "~1.3.3", 627 | "statuses": "2.0.1", 628 | "unpipe": "~1.0.0" 629 | }, 630 | "engines": { 631 | "node": ">= 0.8" 632 | } 633 | }, 634 | "node_modules/forwarded": { 635 | "version": "0.2.0", 636 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 637 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 638 | "engines": { 639 | "node": ">= 0.6" 640 | } 641 | }, 642 | "node_modules/fresh": { 643 | "version": "0.5.2", 644 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 645 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 646 | "engines": { 647 | "node": ">= 0.6" 648 | } 649 | }, 650 | "node_modules/fs-minipass": { 651 | "version": "2.1.0", 652 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 653 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 654 | "dependencies": { 655 | "minipass": "^3.0.0" 656 | }, 657 | "engines": { 658 | "node": ">= 8" 659 | } 660 | }, 661 | "node_modules/fs.realpath": { 662 | "version": "1.0.0", 663 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 664 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 665 | }, 666 | "node_modules/function-bind": { 667 | "version": "1.1.1", 668 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 669 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 670 | }, 671 | "node_modules/gauge": { 672 | "version": "3.0.2", 673 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", 674 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", 675 | "dependencies": { 676 | "aproba": "^1.0.3 || ^2.0.0", 677 | "color-support": "^1.1.2", 678 | "console-control-strings": "^1.0.0", 679 | "has-unicode": "^2.0.1", 680 | "object-assign": "^4.1.1", 681 | "signal-exit": "^3.0.0", 682 | "string-width": "^4.2.3", 683 | "strip-ansi": "^6.0.1", 684 | "wide-align": "^1.1.2" 685 | }, 686 | "engines": { 687 | "node": ">=10" 688 | } 689 | }, 690 | "node_modules/generaterr": { 691 | "version": "1.5.0", 692 | "resolved": "https://registry.npmjs.org/generaterr/-/generaterr-1.5.0.tgz", 693 | "integrity": "sha512-JgcGRv2yUKeboLvvNrq9Bm90P4iJBu7/vd5wSLYqMG5GJ6SxZT46LAAkMfNhQ+EK3jzC+cRBm7P8aUWYyphgcQ==" 694 | }, 695 | "node_modules/get-intrinsic": { 696 | "version": "1.1.2", 697 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 698 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 699 | "dependencies": { 700 | "function-bind": "^1.1.1", 701 | "has": "^1.0.3", 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-symbols": { 747 | "version": "1.0.3", 748 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 749 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 750 | "engines": { 751 | "node": ">= 0.4" 752 | }, 753 | "funding": { 754 | "url": "https://github.com/sponsors/ljharb" 755 | } 756 | }, 757 | "node_modules/has-unicode": { 758 | "version": "2.0.1", 759 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 760 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" 761 | }, 762 | "node_modules/http-errors": { 763 | "version": "2.0.0", 764 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 765 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 766 | "dependencies": { 767 | "depd": "2.0.0", 768 | "inherits": "2.0.4", 769 | "setprototypeof": "1.2.0", 770 | "statuses": "2.0.1", 771 | "toidentifier": "1.0.1" 772 | }, 773 | "engines": { 774 | "node": ">= 0.8" 775 | } 776 | }, 777 | "node_modules/https-proxy-agent": { 778 | "version": "5.0.1", 779 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 780 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 781 | "dependencies": { 782 | "agent-base": "6", 783 | "debug": "4" 784 | }, 785 | "engines": { 786 | "node": ">= 6" 787 | } 788 | }, 789 | "node_modules/https-proxy-agent/node_modules/debug": { 790 | "version": "4.3.4", 791 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 792 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 793 | "dependencies": { 794 | "ms": "2.1.2" 795 | }, 796 | "engines": { 797 | "node": ">=6.0" 798 | }, 799 | "peerDependenciesMeta": { 800 | "supports-color": { 801 | "optional": true 802 | } 803 | } 804 | }, 805 | "node_modules/https-proxy-agent/node_modules/ms": { 806 | "version": "2.1.2", 807 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 808 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 809 | }, 810 | "node_modules/iconv-lite": { 811 | "version": "0.4.24", 812 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 813 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 814 | "dependencies": { 815 | "safer-buffer": ">= 2.1.2 < 3" 816 | }, 817 | "engines": { 818 | "node": ">=0.10.0" 819 | } 820 | }, 821 | "node_modules/ieee754": { 822 | "version": "1.2.1", 823 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 824 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 825 | "funding": [ 826 | { 827 | "type": "github", 828 | "url": "https://github.com/sponsors/feross" 829 | }, 830 | { 831 | "type": "patreon", 832 | "url": "https://www.patreon.com/feross" 833 | }, 834 | { 835 | "type": "consulting", 836 | "url": "https://feross.org/support" 837 | } 838 | ] 839 | }, 840 | "node_modules/inflight": { 841 | "version": "1.0.6", 842 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 843 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 844 | "dependencies": { 845 | "once": "^1.3.0", 846 | "wrappy": "1" 847 | } 848 | }, 849 | "node_modules/inherits": { 850 | "version": "2.0.4", 851 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 852 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 853 | }, 854 | "node_modules/ip": { 855 | "version": "2.0.0", 856 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 857 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 858 | }, 859 | "node_modules/ipaddr.js": { 860 | "version": "1.9.1", 861 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 862 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 863 | "engines": { 864 | "node": ">= 0.10" 865 | } 866 | }, 867 | "node_modules/is-buffer": { 868 | "version": "1.1.6", 869 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 870 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 871 | }, 872 | "node_modules/is-fullwidth-code-point": { 873 | "version": "3.0.0", 874 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 875 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 876 | "engines": { 877 | "node": ">=8" 878 | } 879 | }, 880 | "node_modules/jake": { 881 | "version": "10.8.5", 882 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", 883 | "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", 884 | "dependencies": { 885 | "async": "^3.2.3", 886 | "chalk": "^4.0.2", 887 | "filelist": "^1.0.1", 888 | "minimatch": "^3.0.4" 889 | }, 890 | "bin": { 891 | "jake": "bin/cli.js" 892 | }, 893 | "engines": { 894 | "node": ">=10" 895 | } 896 | }, 897 | "node_modules/json-stable-stringify": { 898 | "version": "1.0.1", 899 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 900 | "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", 901 | "dependencies": { 902 | "jsonify": "~0.0.0" 903 | } 904 | }, 905 | "node_modules/jsonify": { 906 | "version": "0.0.0", 907 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 908 | "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", 909 | "engines": { 910 | "node": "*" 911 | } 912 | }, 913 | "node_modules/kareem": { 914 | "version": "2.4.1", 915 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.4.1.tgz", 916 | "integrity": "sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA==" 917 | }, 918 | "node_modules/lodash": { 919 | "version": "4.17.21", 920 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 921 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 922 | }, 923 | "node_modules/lru-cache": { 924 | "version": "6.0.0", 925 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 926 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 927 | "dependencies": { 928 | "yallist": "^4.0.0" 929 | }, 930 | "engines": { 931 | "node": ">=10" 932 | } 933 | }, 934 | "node_modules/make-dir": { 935 | "version": "3.1.0", 936 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 937 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 938 | "dependencies": { 939 | "semver": "^6.0.0" 940 | }, 941 | "engines": { 942 | "node": ">=8" 943 | }, 944 | "funding": { 945 | "url": "https://github.com/sponsors/sindresorhus" 946 | } 947 | }, 948 | "node_modules/make-dir/node_modules/semver": { 949 | "version": "6.3.0", 950 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 951 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 952 | "bin": { 953 | "semver": "bin/semver.js" 954 | } 955 | }, 956 | "node_modules/md5": { 957 | "version": "2.3.0", 958 | "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", 959 | "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", 960 | "dependencies": { 961 | "charenc": "0.0.2", 962 | "crypt": "0.0.2", 963 | "is-buffer": "~1.1.6" 964 | } 965 | }, 966 | "node_modules/media-typer": { 967 | "version": "0.3.0", 968 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 969 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 970 | "engines": { 971 | "node": ">= 0.6" 972 | } 973 | }, 974 | "node_modules/memory-pager": { 975 | "version": "1.5.0", 976 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 977 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 978 | "optional": true 979 | }, 980 | "node_modules/merge-descriptors": { 981 | "version": "1.0.1", 982 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 983 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 984 | }, 985 | "node_modules/methods": { 986 | "version": "1.1.2", 987 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 988 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 989 | "engines": { 990 | "node": ">= 0.6" 991 | } 992 | }, 993 | "node_modules/mime": { 994 | "version": "1.6.0", 995 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 996 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 997 | "bin": { 998 | "mime": "cli.js" 999 | }, 1000 | "engines": { 1001 | "node": ">=4" 1002 | } 1003 | }, 1004 | "node_modules/mime-db": { 1005 | "version": "1.52.0", 1006 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1007 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1008 | "engines": { 1009 | "node": ">= 0.6" 1010 | } 1011 | }, 1012 | "node_modules/mime-types": { 1013 | "version": "2.1.35", 1014 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1015 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1016 | "dependencies": { 1017 | "mime-db": "1.52.0" 1018 | }, 1019 | "engines": { 1020 | "node": ">= 0.6" 1021 | } 1022 | }, 1023 | "node_modules/minimatch": { 1024 | "version": "3.1.2", 1025 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1026 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1027 | "dependencies": { 1028 | "brace-expansion": "^1.1.7" 1029 | }, 1030 | "engines": { 1031 | "node": "*" 1032 | } 1033 | }, 1034 | "node_modules/minipass": { 1035 | "version": "3.3.4", 1036 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", 1037 | "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", 1038 | "dependencies": { 1039 | "yallist": "^4.0.0" 1040 | }, 1041 | "engines": { 1042 | "node": ">=8" 1043 | } 1044 | }, 1045 | "node_modules/minizlib": { 1046 | "version": "2.1.2", 1047 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 1048 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 1049 | "dependencies": { 1050 | "minipass": "^3.0.0", 1051 | "yallist": "^4.0.0" 1052 | }, 1053 | "engines": { 1054 | "node": ">= 8" 1055 | } 1056 | }, 1057 | "node_modules/mkdirp": { 1058 | "version": "1.0.4", 1059 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1060 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1061 | "bin": { 1062 | "mkdirp": "bin/cmd.js" 1063 | }, 1064 | "engines": { 1065 | "node": ">=10" 1066 | } 1067 | }, 1068 | "node_modules/mongodb": { 1069 | "version": "4.8.1", 1070 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.8.1.tgz", 1071 | "integrity": "sha512-/NyiM3Ox9AwP5zrfT9TXjRKDJbXlLaUDQ9Rg//2lbg8D2A8GXV0VidYYnA/gfdK6uwbnL4FnAflH7FbGw3TS7w==", 1072 | "dependencies": { 1073 | "bson": "^4.6.5", 1074 | "denque": "^2.0.1", 1075 | "mongodb-connection-string-url": "^2.5.2", 1076 | "socks": "^2.6.2" 1077 | }, 1078 | "engines": { 1079 | "node": ">=12.9.0" 1080 | }, 1081 | "optionalDependencies": { 1082 | "saslprep": "^1.0.3" 1083 | } 1084 | }, 1085 | "node_modules/mongodb-connection-string-url": { 1086 | "version": "2.5.3", 1087 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz", 1088 | "integrity": "sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ==", 1089 | "dependencies": { 1090 | "@types/whatwg-url": "^8.2.1", 1091 | "whatwg-url": "^11.0.0" 1092 | } 1093 | }, 1094 | "node_modules/mongoose": { 1095 | "version": "6.5.3", 1096 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.5.3.tgz", 1097 | "integrity": "sha512-0L2ZOPzNQ7kcIgpdfpmVXc+/SypdhzcTlaHXYa983u1lrVp7/i3ekwHpPiTXxYBvV6FwBAsFoHI7+Ovf8tp3Mg==", 1098 | "dependencies": { 1099 | "bson": "^4.6.5", 1100 | "kareem": "2.4.1", 1101 | "mongodb": "4.8.1", 1102 | "mpath": "0.9.0", 1103 | "mquery": "4.0.3", 1104 | "ms": "2.1.3", 1105 | "sift": "16.0.0" 1106 | }, 1107 | "engines": { 1108 | "node": ">=12.0.0" 1109 | }, 1110 | "funding": { 1111 | "type": "opencollective", 1112 | "url": "https://opencollective.com/mongoose" 1113 | } 1114 | }, 1115 | "node_modules/mongoose-encryption": { 1116 | "version": "2.1.2", 1117 | "resolved": "https://registry.npmjs.org/mongoose-encryption/-/mongoose-encryption-2.1.2.tgz", 1118 | "integrity": "sha512-whc9ZhN8/UjED3qiQKJvQAx/H1Ml3FUpEiyoHLKl4gzhvWorndnRE0sKuQ3fKzuaZDi/rDBN5AI4L/J2Er8Q9Q==", 1119 | "dependencies": { 1120 | "async": "^2.6.1", 1121 | "buffer-equal-constant-time": "^1.0.1", 1122 | "dotty": "^0.1.2", 1123 | "json-stable-stringify": "^1.0.0", 1124 | "mpath": "^0.8.4", 1125 | "semver": "^5.5.0", 1126 | "underscore": "^1.5.0" 1127 | }, 1128 | "engines": { 1129 | "node": ">=4.4.5" 1130 | }, 1131 | "peerDependencies": { 1132 | "mongoose": ">=5.0.0" 1133 | } 1134 | }, 1135 | "node_modules/mongoose-encryption/node_modules/async": { 1136 | "version": "2.6.4", 1137 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", 1138 | "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", 1139 | "dependencies": { 1140 | "lodash": "^4.17.14" 1141 | } 1142 | }, 1143 | "node_modules/mongoose-encryption/node_modules/mpath": { 1144 | "version": "0.8.4", 1145 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", 1146 | "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", 1147 | "engines": { 1148 | "node": ">=4.0.0" 1149 | } 1150 | }, 1151 | "node_modules/mongoose-findorcreate": { 1152 | "version": "3.0.0", 1153 | "resolved": "https://registry.npmjs.org/mongoose-findorcreate/-/mongoose-findorcreate-3.0.0.tgz", 1154 | "integrity": "sha512-kQhDe5XDj6tMv8kq1wjK+hITGIGUl60rj8oGLupF9poNsqIDkAJBXudZKcCdSyBZ7p6DLK2+0jSBthrb26tSYQ==" 1155 | }, 1156 | "node_modules/mongoose/node_modules/ms": { 1157 | "version": "2.1.3", 1158 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1159 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1160 | }, 1161 | "node_modules/mpath": { 1162 | "version": "0.9.0", 1163 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 1164 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", 1165 | "engines": { 1166 | "node": ">=4.0.0" 1167 | } 1168 | }, 1169 | "node_modules/mquery": { 1170 | "version": "4.0.3", 1171 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", 1172 | "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", 1173 | "dependencies": { 1174 | "debug": "4.x" 1175 | }, 1176 | "engines": { 1177 | "node": ">=12.0.0" 1178 | } 1179 | }, 1180 | "node_modules/mquery/node_modules/debug": { 1181 | "version": "4.3.4", 1182 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1183 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1184 | "dependencies": { 1185 | "ms": "2.1.2" 1186 | }, 1187 | "engines": { 1188 | "node": ">=6.0" 1189 | }, 1190 | "peerDependenciesMeta": { 1191 | "supports-color": { 1192 | "optional": true 1193 | } 1194 | } 1195 | }, 1196 | "node_modules/mquery/node_modules/ms": { 1197 | "version": "2.1.2", 1198 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1199 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1200 | }, 1201 | "node_modules/ms": { 1202 | "version": "2.0.0", 1203 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1204 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1205 | }, 1206 | "node_modules/negotiator": { 1207 | "version": "0.6.3", 1208 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1209 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1210 | "engines": { 1211 | "node": ">= 0.6" 1212 | } 1213 | }, 1214 | "node_modules/node-addon-api": { 1215 | "version": "3.2.1", 1216 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", 1217 | "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" 1218 | }, 1219 | "node_modules/node-fetch": { 1220 | "version": "2.6.7", 1221 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 1222 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 1223 | "dependencies": { 1224 | "whatwg-url": "^5.0.0" 1225 | }, 1226 | "engines": { 1227 | "node": "4.x || >=6.0.0" 1228 | }, 1229 | "peerDependencies": { 1230 | "encoding": "^0.1.0" 1231 | }, 1232 | "peerDependenciesMeta": { 1233 | "encoding": { 1234 | "optional": true 1235 | } 1236 | } 1237 | }, 1238 | "node_modules/node-fetch/node_modules/tr46": { 1239 | "version": "0.0.3", 1240 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1241 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1242 | }, 1243 | "node_modules/node-fetch/node_modules/webidl-conversions": { 1244 | "version": "3.0.1", 1245 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1246 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1247 | }, 1248 | "node_modules/node-fetch/node_modules/whatwg-url": { 1249 | "version": "5.0.0", 1250 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1251 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1252 | "dependencies": { 1253 | "tr46": "~0.0.3", 1254 | "webidl-conversions": "^3.0.0" 1255 | } 1256 | }, 1257 | "node_modules/nopt": { 1258 | "version": "5.0.0", 1259 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 1260 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 1261 | "dependencies": { 1262 | "abbrev": "1" 1263 | }, 1264 | "bin": { 1265 | "nopt": "bin/nopt.js" 1266 | }, 1267 | "engines": { 1268 | "node": ">=6" 1269 | } 1270 | }, 1271 | "node_modules/npmlog": { 1272 | "version": "5.0.1", 1273 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", 1274 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", 1275 | "dependencies": { 1276 | "are-we-there-yet": "^2.0.0", 1277 | "console-control-strings": "^1.1.0", 1278 | "gauge": "^3.0.0", 1279 | "set-blocking": "^2.0.0" 1280 | } 1281 | }, 1282 | "node_modules/oauth": { 1283 | "version": "0.9.15", 1284 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", 1285 | "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" 1286 | }, 1287 | "node_modules/object-assign": { 1288 | "version": "4.1.1", 1289 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1290 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1291 | "engines": { 1292 | "node": ">=0.10.0" 1293 | } 1294 | }, 1295 | "node_modules/object-inspect": { 1296 | "version": "1.12.2", 1297 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 1298 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 1299 | "funding": { 1300 | "url": "https://github.com/sponsors/ljharb" 1301 | } 1302 | }, 1303 | "node_modules/on-finished": { 1304 | "version": "2.4.1", 1305 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1306 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1307 | "dependencies": { 1308 | "ee-first": "1.1.1" 1309 | }, 1310 | "engines": { 1311 | "node": ">= 0.8" 1312 | } 1313 | }, 1314 | "node_modules/on-headers": { 1315 | "version": "1.0.2", 1316 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1317 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 1318 | "engines": { 1319 | "node": ">= 0.8" 1320 | } 1321 | }, 1322 | "node_modules/once": { 1323 | "version": "1.4.0", 1324 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1325 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1326 | "dependencies": { 1327 | "wrappy": "1" 1328 | } 1329 | }, 1330 | "node_modules/parseurl": { 1331 | "version": "1.3.3", 1332 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1333 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1334 | "engines": { 1335 | "node": ">= 0.8" 1336 | } 1337 | }, 1338 | "node_modules/passport": { 1339 | "version": "0.6.0", 1340 | "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", 1341 | "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", 1342 | "dependencies": { 1343 | "passport-strategy": "1.x.x", 1344 | "pause": "0.0.1", 1345 | "utils-merge": "^1.0.1" 1346 | }, 1347 | "engines": { 1348 | "node": ">= 0.4.0" 1349 | }, 1350 | "funding": { 1351 | "type": "github", 1352 | "url": "https://github.com/sponsors/jaredhanson" 1353 | } 1354 | }, 1355 | "node_modules/passport-google-oauth20": { 1356 | "version": "2.0.0", 1357 | "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", 1358 | "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", 1359 | "dependencies": { 1360 | "passport-oauth2": "1.x.x" 1361 | }, 1362 | "engines": { 1363 | "node": ">= 0.4.0" 1364 | } 1365 | }, 1366 | "node_modules/passport-local": { 1367 | "version": "1.0.0", 1368 | "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", 1369 | "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", 1370 | "dependencies": { 1371 | "passport-strategy": "1.x.x" 1372 | }, 1373 | "engines": { 1374 | "node": ">= 0.4.0" 1375 | } 1376 | }, 1377 | "node_modules/passport-local-mongoose": { 1378 | "version": "7.1.2", 1379 | "resolved": "https://registry.npmjs.org/passport-local-mongoose/-/passport-local-mongoose-7.1.2.tgz", 1380 | "integrity": "sha512-hNLIKi/6IhElr/PhOze8wLDh7T4+ZYhc8GFWYApLgG7FrjI55tuGZELPtsUBqODz77OwlUUf+ngPgHN09zxGLg==", 1381 | "dependencies": { 1382 | "generaterr": "^1.5.0", 1383 | "passport-local": "^1.0.0", 1384 | "scmp": "^2.1.0" 1385 | }, 1386 | "engines": { 1387 | "node": ">= 8.0.0" 1388 | } 1389 | }, 1390 | "node_modules/passport-oauth2": { 1391 | "version": "1.6.1", 1392 | "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", 1393 | "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", 1394 | "dependencies": { 1395 | "base64url": "3.x.x", 1396 | "oauth": "0.9.x", 1397 | "passport-strategy": "1.x.x", 1398 | "uid2": "0.0.x", 1399 | "utils-merge": "1.x.x" 1400 | }, 1401 | "engines": { 1402 | "node": ">= 0.4.0" 1403 | }, 1404 | "funding": { 1405 | "type": "github", 1406 | "url": "https://github.com/sponsors/jaredhanson" 1407 | } 1408 | }, 1409 | "node_modules/passport-strategy": { 1410 | "version": "1.0.0", 1411 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", 1412 | "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", 1413 | "engines": { 1414 | "node": ">= 0.4.0" 1415 | } 1416 | }, 1417 | "node_modules/path-is-absolute": { 1418 | "version": "1.0.1", 1419 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1420 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1421 | "engines": { 1422 | "node": ">=0.10.0" 1423 | } 1424 | }, 1425 | "node_modules/path-to-regexp": { 1426 | "version": "0.1.7", 1427 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1428 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1429 | }, 1430 | "node_modules/pause": { 1431 | "version": "0.0.1", 1432 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", 1433 | "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" 1434 | }, 1435 | "node_modules/proxy-addr": { 1436 | "version": "2.0.7", 1437 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1438 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1439 | "dependencies": { 1440 | "forwarded": "0.2.0", 1441 | "ipaddr.js": "1.9.1" 1442 | }, 1443 | "engines": { 1444 | "node": ">= 0.10" 1445 | } 1446 | }, 1447 | "node_modules/punycode": { 1448 | "version": "2.1.1", 1449 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1450 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1451 | "engines": { 1452 | "node": ">=6" 1453 | } 1454 | }, 1455 | "node_modules/qs": { 1456 | "version": "6.10.3", 1457 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 1458 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 1459 | "dependencies": { 1460 | "side-channel": "^1.0.4" 1461 | }, 1462 | "engines": { 1463 | "node": ">=0.6" 1464 | }, 1465 | "funding": { 1466 | "url": "https://github.com/sponsors/ljharb" 1467 | } 1468 | }, 1469 | "node_modules/random-bytes": { 1470 | "version": "1.0.0", 1471 | "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", 1472 | "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", 1473 | "engines": { 1474 | "node": ">= 0.8" 1475 | } 1476 | }, 1477 | "node_modules/range-parser": { 1478 | "version": "1.2.1", 1479 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1480 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1481 | "engines": { 1482 | "node": ">= 0.6" 1483 | } 1484 | }, 1485 | "node_modules/raw-body": { 1486 | "version": "2.5.1", 1487 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 1488 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 1489 | "dependencies": { 1490 | "bytes": "3.1.2", 1491 | "http-errors": "2.0.0", 1492 | "iconv-lite": "0.4.24", 1493 | "unpipe": "1.0.0" 1494 | }, 1495 | "engines": { 1496 | "node": ">= 0.8" 1497 | } 1498 | }, 1499 | "node_modules/readable-stream": { 1500 | "version": "3.6.0", 1501 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1502 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1503 | "dependencies": { 1504 | "inherits": "^2.0.3", 1505 | "string_decoder": "^1.1.1", 1506 | "util-deprecate": "^1.0.1" 1507 | }, 1508 | "engines": { 1509 | "node": ">= 6" 1510 | } 1511 | }, 1512 | "node_modules/rimraf": { 1513 | "version": "3.0.2", 1514 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1515 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1516 | "dependencies": { 1517 | "glob": "^7.1.3" 1518 | }, 1519 | "bin": { 1520 | "rimraf": "bin.js" 1521 | }, 1522 | "funding": { 1523 | "url": "https://github.com/sponsors/isaacs" 1524 | } 1525 | }, 1526 | "node_modules/safe-buffer": { 1527 | "version": "5.2.1", 1528 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1529 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1530 | "funding": [ 1531 | { 1532 | "type": "github", 1533 | "url": "https://github.com/sponsors/feross" 1534 | }, 1535 | { 1536 | "type": "patreon", 1537 | "url": "https://www.patreon.com/feross" 1538 | }, 1539 | { 1540 | "type": "consulting", 1541 | "url": "https://feross.org/support" 1542 | } 1543 | ] 1544 | }, 1545 | "node_modules/safer-buffer": { 1546 | "version": "2.1.2", 1547 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1548 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1549 | }, 1550 | "node_modules/saslprep": { 1551 | "version": "1.0.3", 1552 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 1553 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 1554 | "optional": true, 1555 | "dependencies": { 1556 | "sparse-bitfield": "^3.0.3" 1557 | }, 1558 | "engines": { 1559 | "node": ">=6" 1560 | } 1561 | }, 1562 | "node_modules/scmp": { 1563 | "version": "2.1.0", 1564 | "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz", 1565 | "integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==" 1566 | }, 1567 | "node_modules/semver": { 1568 | "version": "5.7.1", 1569 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1570 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1571 | "bin": { 1572 | "semver": "bin/semver" 1573 | } 1574 | }, 1575 | "node_modules/send": { 1576 | "version": "0.18.0", 1577 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1578 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1579 | "dependencies": { 1580 | "debug": "2.6.9", 1581 | "depd": "2.0.0", 1582 | "destroy": "1.2.0", 1583 | "encodeurl": "~1.0.2", 1584 | "escape-html": "~1.0.3", 1585 | "etag": "~1.8.1", 1586 | "fresh": "0.5.2", 1587 | "http-errors": "2.0.0", 1588 | "mime": "1.6.0", 1589 | "ms": "2.1.3", 1590 | "on-finished": "2.4.1", 1591 | "range-parser": "~1.2.1", 1592 | "statuses": "2.0.1" 1593 | }, 1594 | "engines": { 1595 | "node": ">= 0.8.0" 1596 | } 1597 | }, 1598 | "node_modules/send/node_modules/ms": { 1599 | "version": "2.1.3", 1600 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1601 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1602 | }, 1603 | "node_modules/serve-static": { 1604 | "version": "1.15.0", 1605 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1606 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1607 | "dependencies": { 1608 | "encodeurl": "~1.0.2", 1609 | "escape-html": "~1.0.3", 1610 | "parseurl": "~1.3.3", 1611 | "send": "0.18.0" 1612 | }, 1613 | "engines": { 1614 | "node": ">= 0.8.0" 1615 | } 1616 | }, 1617 | "node_modules/set-blocking": { 1618 | "version": "2.0.0", 1619 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1620 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 1621 | }, 1622 | "node_modules/setprototypeof": { 1623 | "version": "1.2.0", 1624 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1625 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1626 | }, 1627 | "node_modules/side-channel": { 1628 | "version": "1.0.4", 1629 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1630 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1631 | "dependencies": { 1632 | "call-bind": "^1.0.0", 1633 | "get-intrinsic": "^1.0.2", 1634 | "object-inspect": "^1.9.0" 1635 | }, 1636 | "funding": { 1637 | "url": "https://github.com/sponsors/ljharb" 1638 | } 1639 | }, 1640 | "node_modules/sift": { 1641 | "version": "16.0.0", 1642 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", 1643 | "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==" 1644 | }, 1645 | "node_modules/signal-exit": { 1646 | "version": "3.0.7", 1647 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1648 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1649 | }, 1650 | "node_modules/smart-buffer": { 1651 | "version": "4.2.0", 1652 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 1653 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 1654 | "engines": { 1655 | "node": ">= 6.0.0", 1656 | "npm": ">= 3.0.0" 1657 | } 1658 | }, 1659 | "node_modules/socks": { 1660 | "version": "2.7.0", 1661 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", 1662 | "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", 1663 | "dependencies": { 1664 | "ip": "^2.0.0", 1665 | "smart-buffer": "^4.2.0" 1666 | }, 1667 | "engines": { 1668 | "node": ">= 10.13.0", 1669 | "npm": ">= 3.0.0" 1670 | } 1671 | }, 1672 | "node_modules/sparse-bitfield": { 1673 | "version": "3.0.3", 1674 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1675 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 1676 | "optional": true, 1677 | "dependencies": { 1678 | "memory-pager": "^1.0.2" 1679 | } 1680 | }, 1681 | "node_modules/statuses": { 1682 | "version": "2.0.1", 1683 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1684 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1685 | "engines": { 1686 | "node": ">= 0.8" 1687 | } 1688 | }, 1689 | "node_modules/string_decoder": { 1690 | "version": "1.3.0", 1691 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1692 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1693 | "dependencies": { 1694 | "safe-buffer": "~5.2.0" 1695 | } 1696 | }, 1697 | "node_modules/string-width": { 1698 | "version": "4.2.3", 1699 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1700 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1701 | "dependencies": { 1702 | "emoji-regex": "^8.0.0", 1703 | "is-fullwidth-code-point": "^3.0.0", 1704 | "strip-ansi": "^6.0.1" 1705 | }, 1706 | "engines": { 1707 | "node": ">=8" 1708 | } 1709 | }, 1710 | "node_modules/strip-ansi": { 1711 | "version": "6.0.1", 1712 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1713 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1714 | "dependencies": { 1715 | "ansi-regex": "^5.0.1" 1716 | }, 1717 | "engines": { 1718 | "node": ">=8" 1719 | } 1720 | }, 1721 | "node_modules/supports-color": { 1722 | "version": "7.2.0", 1723 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1724 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1725 | "dependencies": { 1726 | "has-flag": "^4.0.0" 1727 | }, 1728 | "engines": { 1729 | "node": ">=8" 1730 | } 1731 | }, 1732 | "node_modules/tar": { 1733 | "version": "6.1.11", 1734 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", 1735 | "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", 1736 | "dependencies": { 1737 | "chownr": "^2.0.0", 1738 | "fs-minipass": "^2.0.0", 1739 | "minipass": "^3.0.0", 1740 | "minizlib": "^2.1.1", 1741 | "mkdirp": "^1.0.3", 1742 | "yallist": "^4.0.0" 1743 | }, 1744 | "engines": { 1745 | "node": ">= 10" 1746 | } 1747 | }, 1748 | "node_modules/toidentifier": { 1749 | "version": "1.0.1", 1750 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1751 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 1752 | "engines": { 1753 | "node": ">=0.6" 1754 | } 1755 | }, 1756 | "node_modules/tr46": { 1757 | "version": "3.0.0", 1758 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1759 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1760 | "dependencies": { 1761 | "punycode": "^2.1.1" 1762 | }, 1763 | "engines": { 1764 | "node": ">=12" 1765 | } 1766 | }, 1767 | "node_modules/type-is": { 1768 | "version": "1.6.18", 1769 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1770 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1771 | "dependencies": { 1772 | "media-typer": "0.3.0", 1773 | "mime-types": "~2.1.24" 1774 | }, 1775 | "engines": { 1776 | "node": ">= 0.6" 1777 | } 1778 | }, 1779 | "node_modules/uid-safe": { 1780 | "version": "2.1.5", 1781 | "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", 1782 | "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", 1783 | "dependencies": { 1784 | "random-bytes": "~1.0.0" 1785 | }, 1786 | "engines": { 1787 | "node": ">= 0.8" 1788 | } 1789 | }, 1790 | "node_modules/uid2": { 1791 | "version": "0.0.4", 1792 | "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", 1793 | "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" 1794 | }, 1795 | "node_modules/underscore": { 1796 | "version": "1.13.4", 1797 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", 1798 | "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==" 1799 | }, 1800 | "node_modules/unpipe": { 1801 | "version": "1.0.0", 1802 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1803 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 1804 | "engines": { 1805 | "node": ">= 0.8" 1806 | } 1807 | }, 1808 | "node_modules/util-deprecate": { 1809 | "version": "1.0.2", 1810 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1811 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1812 | }, 1813 | "node_modules/utils-merge": { 1814 | "version": "1.0.1", 1815 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1816 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 1817 | "engines": { 1818 | "node": ">= 0.4.0" 1819 | } 1820 | }, 1821 | "node_modules/vary": { 1822 | "version": "1.1.2", 1823 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1824 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 1825 | "engines": { 1826 | "node": ">= 0.8" 1827 | } 1828 | }, 1829 | "node_modules/webidl-conversions": { 1830 | "version": "7.0.0", 1831 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1832 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 1833 | "engines": { 1834 | "node": ">=12" 1835 | } 1836 | }, 1837 | "node_modules/whatwg-url": { 1838 | "version": "11.0.0", 1839 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 1840 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 1841 | "dependencies": { 1842 | "tr46": "^3.0.0", 1843 | "webidl-conversions": "^7.0.0" 1844 | }, 1845 | "engines": { 1846 | "node": ">=12" 1847 | } 1848 | }, 1849 | "node_modules/wide-align": { 1850 | "version": "1.1.5", 1851 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 1852 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 1853 | "dependencies": { 1854 | "string-width": "^1.0.2 || 2 || 3 || 4" 1855 | } 1856 | }, 1857 | "node_modules/wrappy": { 1858 | "version": "1.0.2", 1859 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1860 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1861 | }, 1862 | "node_modules/yallist": { 1863 | "version": "4.0.0", 1864 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1865 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1866 | } 1867 | }, 1868 | "dependencies": { 1869 | "@mapbox/node-pre-gyp": { 1870 | "version": "1.0.9", 1871 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", 1872 | "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", 1873 | "requires": { 1874 | "detect-libc": "^2.0.0", 1875 | "https-proxy-agent": "^5.0.0", 1876 | "make-dir": "^3.1.0", 1877 | "node-fetch": "^2.6.7", 1878 | "nopt": "^5.0.0", 1879 | "npmlog": "^5.0.1", 1880 | "rimraf": "^3.0.2", 1881 | "semver": "^7.3.5", 1882 | "tar": "^6.1.11" 1883 | }, 1884 | "dependencies": { 1885 | "semver": { 1886 | "version": "7.3.7", 1887 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", 1888 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", 1889 | "requires": { 1890 | "lru-cache": "^6.0.0" 1891 | } 1892 | } 1893 | } 1894 | }, 1895 | "@types/node": { 1896 | "version": "18.7.13", 1897 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", 1898 | "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==" 1899 | }, 1900 | "@types/webidl-conversions": { 1901 | "version": "6.1.1", 1902 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", 1903 | "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" 1904 | }, 1905 | "@types/whatwg-url": { 1906 | "version": "8.2.2", 1907 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", 1908 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", 1909 | "requires": { 1910 | "@types/node": "*", 1911 | "@types/webidl-conversions": "*" 1912 | } 1913 | }, 1914 | "abbrev": { 1915 | "version": "1.1.1", 1916 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 1917 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 1918 | }, 1919 | "accepts": { 1920 | "version": "1.3.8", 1921 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 1922 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 1923 | "requires": { 1924 | "mime-types": "~2.1.34", 1925 | "negotiator": "0.6.3" 1926 | } 1927 | }, 1928 | "agent-base": { 1929 | "version": "6.0.2", 1930 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 1931 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 1932 | "requires": { 1933 | "debug": "4" 1934 | }, 1935 | "dependencies": { 1936 | "debug": { 1937 | "version": "4.3.4", 1938 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1939 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1940 | "requires": { 1941 | "ms": "2.1.2" 1942 | } 1943 | }, 1944 | "ms": { 1945 | "version": "2.1.2", 1946 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1947 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1948 | } 1949 | } 1950 | }, 1951 | "ansi-regex": { 1952 | "version": "5.0.1", 1953 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1954 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 1955 | }, 1956 | "ansi-styles": { 1957 | "version": "4.3.0", 1958 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1959 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1960 | "requires": { 1961 | "color-convert": "^2.0.1" 1962 | } 1963 | }, 1964 | "aproba": { 1965 | "version": "2.0.0", 1966 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", 1967 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" 1968 | }, 1969 | "are-we-there-yet": { 1970 | "version": "2.0.0", 1971 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", 1972 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", 1973 | "requires": { 1974 | "delegates": "^1.0.0", 1975 | "readable-stream": "^3.6.0" 1976 | } 1977 | }, 1978 | "array-flatten": { 1979 | "version": "1.1.1", 1980 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 1981 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 1982 | }, 1983 | "async": { 1984 | "version": "3.2.4", 1985 | "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", 1986 | "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" 1987 | }, 1988 | "balanced-match": { 1989 | "version": "1.0.2", 1990 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1991 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 1992 | }, 1993 | "base64-js": { 1994 | "version": "1.5.1", 1995 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1996 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1997 | }, 1998 | "base64url": { 1999 | "version": "3.0.1", 2000 | "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", 2001 | "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" 2002 | }, 2003 | "bcrypt": { 2004 | "version": "5.0.1", 2005 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", 2006 | "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", 2007 | "requires": { 2008 | "@mapbox/node-pre-gyp": "^1.0.0", 2009 | "node-addon-api": "^3.1.0" 2010 | } 2011 | }, 2012 | "body-parser": { 2013 | "version": "1.20.0", 2014 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", 2015 | "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", 2016 | "requires": { 2017 | "bytes": "3.1.2", 2018 | "content-type": "~1.0.4", 2019 | "debug": "2.6.9", 2020 | "depd": "2.0.0", 2021 | "destroy": "1.2.0", 2022 | "http-errors": "2.0.0", 2023 | "iconv-lite": "0.4.24", 2024 | "on-finished": "2.4.1", 2025 | "qs": "6.10.3", 2026 | "raw-body": "2.5.1", 2027 | "type-is": "~1.6.18", 2028 | "unpipe": "1.0.0" 2029 | } 2030 | }, 2031 | "brace-expansion": { 2032 | "version": "1.1.11", 2033 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2034 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2035 | "requires": { 2036 | "balanced-match": "^1.0.0", 2037 | "concat-map": "0.0.1" 2038 | } 2039 | }, 2040 | "bson": { 2041 | "version": "4.7.0", 2042 | "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz", 2043 | "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==", 2044 | "requires": { 2045 | "buffer": "^5.6.0" 2046 | } 2047 | }, 2048 | "buffer": { 2049 | "version": "5.7.1", 2050 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 2051 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 2052 | "requires": { 2053 | "base64-js": "^1.3.1", 2054 | "ieee754": "^1.1.13" 2055 | } 2056 | }, 2057 | "buffer-equal-constant-time": { 2058 | "version": "1.0.1", 2059 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 2060 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" 2061 | }, 2062 | "bytes": { 2063 | "version": "3.1.2", 2064 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 2065 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 2066 | }, 2067 | "call-bind": { 2068 | "version": "1.0.2", 2069 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 2070 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 2071 | "requires": { 2072 | "function-bind": "^1.1.1", 2073 | "get-intrinsic": "^1.0.2" 2074 | } 2075 | }, 2076 | "chalk": { 2077 | "version": "4.1.2", 2078 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2079 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2080 | "requires": { 2081 | "ansi-styles": "^4.1.0", 2082 | "supports-color": "^7.1.0" 2083 | } 2084 | }, 2085 | "charenc": { 2086 | "version": "0.0.2", 2087 | "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", 2088 | "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" 2089 | }, 2090 | "chownr": { 2091 | "version": "2.0.0", 2092 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 2093 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" 2094 | }, 2095 | "color-convert": { 2096 | "version": "2.0.1", 2097 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2098 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2099 | "requires": { 2100 | "color-name": "~1.1.4" 2101 | } 2102 | }, 2103 | "color-name": { 2104 | "version": "1.1.4", 2105 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2106 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2107 | }, 2108 | "color-support": { 2109 | "version": "1.1.3", 2110 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 2111 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" 2112 | }, 2113 | "concat-map": { 2114 | "version": "0.0.1", 2115 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2116 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 2117 | }, 2118 | "console-control-strings": { 2119 | "version": "1.1.0", 2120 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 2121 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" 2122 | }, 2123 | "content-disposition": { 2124 | "version": "0.5.4", 2125 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 2126 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 2127 | "requires": { 2128 | "safe-buffer": "5.2.1" 2129 | } 2130 | }, 2131 | "content-type": { 2132 | "version": "1.0.4", 2133 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 2134 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 2135 | }, 2136 | "cookie": { 2137 | "version": "0.5.0", 2138 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 2139 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" 2140 | }, 2141 | "cookie-signature": { 2142 | "version": "1.0.6", 2143 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 2144 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 2145 | }, 2146 | "crypt": { 2147 | "version": "0.0.2", 2148 | "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", 2149 | "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" 2150 | }, 2151 | "debug": { 2152 | "version": "2.6.9", 2153 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2154 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2155 | "requires": { 2156 | "ms": "2.0.0" 2157 | } 2158 | }, 2159 | "delegates": { 2160 | "version": "1.0.0", 2161 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 2162 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" 2163 | }, 2164 | "denque": { 2165 | "version": "2.1.0", 2166 | "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", 2167 | "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" 2168 | }, 2169 | "depd": { 2170 | "version": "2.0.0", 2171 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 2172 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 2173 | }, 2174 | "destroy": { 2175 | "version": "1.2.0", 2176 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 2177 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" 2178 | }, 2179 | "detect-libc": { 2180 | "version": "2.0.1", 2181 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", 2182 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" 2183 | }, 2184 | "dotenv": { 2185 | "version": "16.0.1", 2186 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", 2187 | "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" 2188 | }, 2189 | "dotty": { 2190 | "version": "0.1.2", 2191 | "resolved": "https://registry.npmjs.org/dotty/-/dotty-0.1.2.tgz", 2192 | "integrity": "sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ==" 2193 | }, 2194 | "ee-first": { 2195 | "version": "1.1.1", 2196 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 2197 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 2198 | }, 2199 | "ejs": { 2200 | "version": "3.1.8", 2201 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", 2202 | "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", 2203 | "requires": { 2204 | "jake": "^10.8.5" 2205 | } 2206 | }, 2207 | "emoji-regex": { 2208 | "version": "8.0.0", 2209 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2210 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 2211 | }, 2212 | "encodeurl": { 2213 | "version": "1.0.2", 2214 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 2215 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 2216 | }, 2217 | "escape-html": { 2218 | "version": "1.0.3", 2219 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 2220 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 2221 | }, 2222 | "etag": { 2223 | "version": "1.8.1", 2224 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 2225 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" 2226 | }, 2227 | "express": { 2228 | "version": "4.18.1", 2229 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", 2230 | "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", 2231 | "requires": { 2232 | "accepts": "~1.3.8", 2233 | "array-flatten": "1.1.1", 2234 | "body-parser": "1.20.0", 2235 | "content-disposition": "0.5.4", 2236 | "content-type": "~1.0.4", 2237 | "cookie": "0.5.0", 2238 | "cookie-signature": "1.0.6", 2239 | "debug": "2.6.9", 2240 | "depd": "2.0.0", 2241 | "encodeurl": "~1.0.2", 2242 | "escape-html": "~1.0.3", 2243 | "etag": "~1.8.1", 2244 | "finalhandler": "1.2.0", 2245 | "fresh": "0.5.2", 2246 | "http-errors": "2.0.0", 2247 | "merge-descriptors": "1.0.1", 2248 | "methods": "~1.1.2", 2249 | "on-finished": "2.4.1", 2250 | "parseurl": "~1.3.3", 2251 | "path-to-regexp": "0.1.7", 2252 | "proxy-addr": "~2.0.7", 2253 | "qs": "6.10.3", 2254 | "range-parser": "~1.2.1", 2255 | "safe-buffer": "5.2.1", 2256 | "send": "0.18.0", 2257 | "serve-static": "1.15.0", 2258 | "setprototypeof": "1.2.0", 2259 | "statuses": "2.0.1", 2260 | "type-is": "~1.6.18", 2261 | "utils-merge": "1.0.1", 2262 | "vary": "~1.1.2" 2263 | } 2264 | }, 2265 | "express-session": { 2266 | "version": "1.17.3", 2267 | "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", 2268 | "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", 2269 | "requires": { 2270 | "cookie": "0.4.2", 2271 | "cookie-signature": "1.0.6", 2272 | "debug": "2.6.9", 2273 | "depd": "~2.0.0", 2274 | "on-headers": "~1.0.2", 2275 | "parseurl": "~1.3.3", 2276 | "safe-buffer": "5.2.1", 2277 | "uid-safe": "~2.1.5" 2278 | }, 2279 | "dependencies": { 2280 | "cookie": { 2281 | "version": "0.4.2", 2282 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 2283 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" 2284 | } 2285 | } 2286 | }, 2287 | "filelist": { 2288 | "version": "1.0.4", 2289 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", 2290 | "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", 2291 | "requires": { 2292 | "minimatch": "^5.0.1" 2293 | }, 2294 | "dependencies": { 2295 | "brace-expansion": { 2296 | "version": "2.0.1", 2297 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 2298 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 2299 | "requires": { 2300 | "balanced-match": "^1.0.0" 2301 | } 2302 | }, 2303 | "minimatch": { 2304 | "version": "5.1.0", 2305 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", 2306 | "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", 2307 | "requires": { 2308 | "brace-expansion": "^2.0.1" 2309 | } 2310 | } 2311 | } 2312 | }, 2313 | "finalhandler": { 2314 | "version": "1.2.0", 2315 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 2316 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 2317 | "requires": { 2318 | "debug": "2.6.9", 2319 | "encodeurl": "~1.0.2", 2320 | "escape-html": "~1.0.3", 2321 | "on-finished": "2.4.1", 2322 | "parseurl": "~1.3.3", 2323 | "statuses": "2.0.1", 2324 | "unpipe": "~1.0.0" 2325 | } 2326 | }, 2327 | "forwarded": { 2328 | "version": "0.2.0", 2329 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 2330 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 2331 | }, 2332 | "fresh": { 2333 | "version": "0.5.2", 2334 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 2335 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" 2336 | }, 2337 | "fs-minipass": { 2338 | "version": "2.1.0", 2339 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 2340 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 2341 | "requires": { 2342 | "minipass": "^3.0.0" 2343 | } 2344 | }, 2345 | "fs.realpath": { 2346 | "version": "1.0.0", 2347 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2348 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 2349 | }, 2350 | "function-bind": { 2351 | "version": "1.1.1", 2352 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2353 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 2354 | }, 2355 | "gauge": { 2356 | "version": "3.0.2", 2357 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", 2358 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", 2359 | "requires": { 2360 | "aproba": "^1.0.3 || ^2.0.0", 2361 | "color-support": "^1.1.2", 2362 | "console-control-strings": "^1.0.0", 2363 | "has-unicode": "^2.0.1", 2364 | "object-assign": "^4.1.1", 2365 | "signal-exit": "^3.0.0", 2366 | "string-width": "^4.2.3", 2367 | "strip-ansi": "^6.0.1", 2368 | "wide-align": "^1.1.2" 2369 | } 2370 | }, 2371 | "generaterr": { 2372 | "version": "1.5.0", 2373 | "resolved": "https://registry.npmjs.org/generaterr/-/generaterr-1.5.0.tgz", 2374 | "integrity": "sha512-JgcGRv2yUKeboLvvNrq9Bm90P4iJBu7/vd5wSLYqMG5GJ6SxZT46LAAkMfNhQ+EK3jzC+cRBm7P8aUWYyphgcQ==" 2375 | }, 2376 | "get-intrinsic": { 2377 | "version": "1.1.2", 2378 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", 2379 | "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", 2380 | "requires": { 2381 | "function-bind": "^1.1.1", 2382 | "has": "^1.0.3", 2383 | "has-symbols": "^1.0.3" 2384 | } 2385 | }, 2386 | "glob": { 2387 | "version": "7.2.3", 2388 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2389 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2390 | "requires": { 2391 | "fs.realpath": "^1.0.0", 2392 | "inflight": "^1.0.4", 2393 | "inherits": "2", 2394 | "minimatch": "^3.1.1", 2395 | "once": "^1.3.0", 2396 | "path-is-absolute": "^1.0.0" 2397 | } 2398 | }, 2399 | "has": { 2400 | "version": "1.0.3", 2401 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2402 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2403 | "requires": { 2404 | "function-bind": "^1.1.1" 2405 | } 2406 | }, 2407 | "has-flag": { 2408 | "version": "4.0.0", 2409 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2410 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 2411 | }, 2412 | "has-symbols": { 2413 | "version": "1.0.3", 2414 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2415 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" 2416 | }, 2417 | "has-unicode": { 2418 | "version": "2.0.1", 2419 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 2420 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" 2421 | }, 2422 | "http-errors": { 2423 | "version": "2.0.0", 2424 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 2425 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 2426 | "requires": { 2427 | "depd": "2.0.0", 2428 | "inherits": "2.0.4", 2429 | "setprototypeof": "1.2.0", 2430 | "statuses": "2.0.1", 2431 | "toidentifier": "1.0.1" 2432 | } 2433 | }, 2434 | "https-proxy-agent": { 2435 | "version": "5.0.1", 2436 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 2437 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 2438 | "requires": { 2439 | "agent-base": "6", 2440 | "debug": "4" 2441 | }, 2442 | "dependencies": { 2443 | "debug": { 2444 | "version": "4.3.4", 2445 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2446 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2447 | "requires": { 2448 | "ms": "2.1.2" 2449 | } 2450 | }, 2451 | "ms": { 2452 | "version": "2.1.2", 2453 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2454 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2455 | } 2456 | } 2457 | }, 2458 | "iconv-lite": { 2459 | "version": "0.4.24", 2460 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 2461 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 2462 | "requires": { 2463 | "safer-buffer": ">= 2.1.2 < 3" 2464 | } 2465 | }, 2466 | "ieee754": { 2467 | "version": "1.2.1", 2468 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 2469 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 2470 | }, 2471 | "inflight": { 2472 | "version": "1.0.6", 2473 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2474 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2475 | "requires": { 2476 | "once": "^1.3.0", 2477 | "wrappy": "1" 2478 | } 2479 | }, 2480 | "inherits": { 2481 | "version": "2.0.4", 2482 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2483 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2484 | }, 2485 | "ip": { 2486 | "version": "2.0.0", 2487 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", 2488 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" 2489 | }, 2490 | "ipaddr.js": { 2491 | "version": "1.9.1", 2492 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 2493 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 2494 | }, 2495 | "is-buffer": { 2496 | "version": "1.1.6", 2497 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 2498 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 2499 | }, 2500 | "is-fullwidth-code-point": { 2501 | "version": "3.0.0", 2502 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2503 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 2504 | }, 2505 | "jake": { 2506 | "version": "10.8.5", 2507 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", 2508 | "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", 2509 | "requires": { 2510 | "async": "^3.2.3", 2511 | "chalk": "^4.0.2", 2512 | "filelist": "^1.0.1", 2513 | "minimatch": "^3.0.4" 2514 | } 2515 | }, 2516 | "json-stable-stringify": { 2517 | "version": "1.0.1", 2518 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 2519 | "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", 2520 | "requires": { 2521 | "jsonify": "~0.0.0" 2522 | } 2523 | }, 2524 | "jsonify": { 2525 | "version": "0.0.0", 2526 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 2527 | "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" 2528 | }, 2529 | "kareem": { 2530 | "version": "2.4.1", 2531 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.4.1.tgz", 2532 | "integrity": "sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA==" 2533 | }, 2534 | "lodash": { 2535 | "version": "4.17.21", 2536 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2537 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 2538 | }, 2539 | "lru-cache": { 2540 | "version": "6.0.0", 2541 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2542 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2543 | "requires": { 2544 | "yallist": "^4.0.0" 2545 | } 2546 | }, 2547 | "make-dir": { 2548 | "version": "3.1.0", 2549 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 2550 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 2551 | "requires": { 2552 | "semver": "^6.0.0" 2553 | }, 2554 | "dependencies": { 2555 | "semver": { 2556 | "version": "6.3.0", 2557 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2558 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 2559 | } 2560 | } 2561 | }, 2562 | "md5": { 2563 | "version": "2.3.0", 2564 | "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", 2565 | "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", 2566 | "requires": { 2567 | "charenc": "0.0.2", 2568 | "crypt": "0.0.2", 2569 | "is-buffer": "~1.1.6" 2570 | } 2571 | }, 2572 | "media-typer": { 2573 | "version": "0.3.0", 2574 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2575 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" 2576 | }, 2577 | "memory-pager": { 2578 | "version": "1.5.0", 2579 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 2580 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 2581 | "optional": true 2582 | }, 2583 | "merge-descriptors": { 2584 | "version": "1.0.1", 2585 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 2586 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 2587 | }, 2588 | "methods": { 2589 | "version": "1.1.2", 2590 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 2591 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" 2592 | }, 2593 | "mime": { 2594 | "version": "1.6.0", 2595 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 2596 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 2597 | }, 2598 | "mime-db": { 2599 | "version": "1.52.0", 2600 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2601 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" 2602 | }, 2603 | "mime-types": { 2604 | "version": "2.1.35", 2605 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2606 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2607 | "requires": { 2608 | "mime-db": "1.52.0" 2609 | } 2610 | }, 2611 | "minimatch": { 2612 | "version": "3.1.2", 2613 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2614 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2615 | "requires": { 2616 | "brace-expansion": "^1.1.7" 2617 | } 2618 | }, 2619 | "minipass": { 2620 | "version": "3.3.4", 2621 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", 2622 | "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", 2623 | "requires": { 2624 | "yallist": "^4.0.0" 2625 | } 2626 | }, 2627 | "minizlib": { 2628 | "version": "2.1.2", 2629 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 2630 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 2631 | "requires": { 2632 | "minipass": "^3.0.0", 2633 | "yallist": "^4.0.0" 2634 | } 2635 | }, 2636 | "mkdirp": { 2637 | "version": "1.0.4", 2638 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 2639 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" 2640 | }, 2641 | "mongodb": { 2642 | "version": "4.8.1", 2643 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.8.1.tgz", 2644 | "integrity": "sha512-/NyiM3Ox9AwP5zrfT9TXjRKDJbXlLaUDQ9Rg//2lbg8D2A8GXV0VidYYnA/gfdK6uwbnL4FnAflH7FbGw3TS7w==", 2645 | "requires": { 2646 | "bson": "^4.6.5", 2647 | "denque": "^2.0.1", 2648 | "mongodb-connection-string-url": "^2.5.2", 2649 | "saslprep": "^1.0.3", 2650 | "socks": "^2.6.2" 2651 | } 2652 | }, 2653 | "mongodb-connection-string-url": { 2654 | "version": "2.5.3", 2655 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz", 2656 | "integrity": "sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ==", 2657 | "requires": { 2658 | "@types/whatwg-url": "^8.2.1", 2659 | "whatwg-url": "^11.0.0" 2660 | } 2661 | }, 2662 | "mongoose": { 2663 | "version": "6.5.3", 2664 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.5.3.tgz", 2665 | "integrity": "sha512-0L2ZOPzNQ7kcIgpdfpmVXc+/SypdhzcTlaHXYa983u1lrVp7/i3ekwHpPiTXxYBvV6FwBAsFoHI7+Ovf8tp3Mg==", 2666 | "requires": { 2667 | "bson": "^4.6.5", 2668 | "kareem": "2.4.1", 2669 | "mongodb": "4.8.1", 2670 | "mpath": "0.9.0", 2671 | "mquery": "4.0.3", 2672 | "ms": "2.1.3", 2673 | "sift": "16.0.0" 2674 | }, 2675 | "dependencies": { 2676 | "ms": { 2677 | "version": "2.1.3", 2678 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2679 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 2680 | } 2681 | } 2682 | }, 2683 | "mongoose-encryption": { 2684 | "version": "2.1.2", 2685 | "resolved": "https://registry.npmjs.org/mongoose-encryption/-/mongoose-encryption-2.1.2.tgz", 2686 | "integrity": "sha512-whc9ZhN8/UjED3qiQKJvQAx/H1Ml3FUpEiyoHLKl4gzhvWorndnRE0sKuQ3fKzuaZDi/rDBN5AI4L/J2Er8Q9Q==", 2687 | "requires": { 2688 | "async": "^2.6.1", 2689 | "buffer-equal-constant-time": "^1.0.1", 2690 | "dotty": "^0.1.2", 2691 | "json-stable-stringify": "^1.0.0", 2692 | "mpath": "^0.8.4", 2693 | "semver": "^5.5.0", 2694 | "underscore": "^1.5.0" 2695 | }, 2696 | "dependencies": { 2697 | "async": { 2698 | "version": "2.6.4", 2699 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", 2700 | "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", 2701 | "requires": { 2702 | "lodash": "^4.17.14" 2703 | } 2704 | }, 2705 | "mpath": { 2706 | "version": "0.8.4", 2707 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", 2708 | "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" 2709 | } 2710 | } 2711 | }, 2712 | "mongoose-findorcreate": { 2713 | "version": "3.0.0", 2714 | "resolved": "https://registry.npmjs.org/mongoose-findorcreate/-/mongoose-findorcreate-3.0.0.tgz", 2715 | "integrity": "sha512-kQhDe5XDj6tMv8kq1wjK+hITGIGUl60rj8oGLupF9poNsqIDkAJBXudZKcCdSyBZ7p6DLK2+0jSBthrb26tSYQ==" 2716 | }, 2717 | "mpath": { 2718 | "version": "0.9.0", 2719 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", 2720 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" 2721 | }, 2722 | "mquery": { 2723 | "version": "4.0.3", 2724 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", 2725 | "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", 2726 | "requires": { 2727 | "debug": "4.x" 2728 | }, 2729 | "dependencies": { 2730 | "debug": { 2731 | "version": "4.3.4", 2732 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2733 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2734 | "requires": { 2735 | "ms": "2.1.2" 2736 | } 2737 | }, 2738 | "ms": { 2739 | "version": "2.1.2", 2740 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2741 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2742 | } 2743 | } 2744 | }, 2745 | "ms": { 2746 | "version": "2.0.0", 2747 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2748 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 2749 | }, 2750 | "negotiator": { 2751 | "version": "0.6.3", 2752 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 2753 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 2754 | }, 2755 | "node-addon-api": { 2756 | "version": "3.2.1", 2757 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", 2758 | "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" 2759 | }, 2760 | "node-fetch": { 2761 | "version": "2.6.7", 2762 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 2763 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 2764 | "requires": { 2765 | "whatwg-url": "^5.0.0" 2766 | }, 2767 | "dependencies": { 2768 | "tr46": { 2769 | "version": "0.0.3", 2770 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2771 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 2772 | }, 2773 | "webidl-conversions": { 2774 | "version": "3.0.1", 2775 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 2776 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 2777 | }, 2778 | "whatwg-url": { 2779 | "version": "5.0.0", 2780 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 2781 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 2782 | "requires": { 2783 | "tr46": "~0.0.3", 2784 | "webidl-conversions": "^3.0.0" 2785 | } 2786 | } 2787 | } 2788 | }, 2789 | "nopt": { 2790 | "version": "5.0.0", 2791 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 2792 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 2793 | "requires": { 2794 | "abbrev": "1" 2795 | } 2796 | }, 2797 | "npmlog": { 2798 | "version": "5.0.1", 2799 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", 2800 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", 2801 | "requires": { 2802 | "are-we-there-yet": "^2.0.0", 2803 | "console-control-strings": "^1.1.0", 2804 | "gauge": "^3.0.0", 2805 | "set-blocking": "^2.0.0" 2806 | } 2807 | }, 2808 | "oauth": { 2809 | "version": "0.9.15", 2810 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", 2811 | "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==" 2812 | }, 2813 | "object-assign": { 2814 | "version": "4.1.1", 2815 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2816 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" 2817 | }, 2818 | "object-inspect": { 2819 | "version": "1.12.2", 2820 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 2821 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" 2822 | }, 2823 | "on-finished": { 2824 | "version": "2.4.1", 2825 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 2826 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 2827 | "requires": { 2828 | "ee-first": "1.1.1" 2829 | } 2830 | }, 2831 | "on-headers": { 2832 | "version": "1.0.2", 2833 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 2834 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" 2835 | }, 2836 | "once": { 2837 | "version": "1.4.0", 2838 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2839 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2840 | "requires": { 2841 | "wrappy": "1" 2842 | } 2843 | }, 2844 | "parseurl": { 2845 | "version": "1.3.3", 2846 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 2847 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 2848 | }, 2849 | "passport": { 2850 | "version": "0.6.0", 2851 | "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", 2852 | "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", 2853 | "requires": { 2854 | "passport-strategy": "1.x.x", 2855 | "pause": "0.0.1", 2856 | "utils-merge": "^1.0.1" 2857 | } 2858 | }, 2859 | "passport-google-oauth20": { 2860 | "version": "2.0.0", 2861 | "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", 2862 | "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", 2863 | "requires": { 2864 | "passport-oauth2": "1.x.x" 2865 | } 2866 | }, 2867 | "passport-local": { 2868 | "version": "1.0.0", 2869 | "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", 2870 | "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", 2871 | "requires": { 2872 | "passport-strategy": "1.x.x" 2873 | } 2874 | }, 2875 | "passport-local-mongoose": { 2876 | "version": "7.1.2", 2877 | "resolved": "https://registry.npmjs.org/passport-local-mongoose/-/passport-local-mongoose-7.1.2.tgz", 2878 | "integrity": "sha512-hNLIKi/6IhElr/PhOze8wLDh7T4+ZYhc8GFWYApLgG7FrjI55tuGZELPtsUBqODz77OwlUUf+ngPgHN09zxGLg==", 2879 | "requires": { 2880 | "generaterr": "^1.5.0", 2881 | "passport-local": "^1.0.0", 2882 | "scmp": "^2.1.0" 2883 | } 2884 | }, 2885 | "passport-oauth2": { 2886 | "version": "1.6.1", 2887 | "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.1.tgz", 2888 | "integrity": "sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ==", 2889 | "requires": { 2890 | "base64url": "3.x.x", 2891 | "oauth": "0.9.x", 2892 | "passport-strategy": "1.x.x", 2893 | "uid2": "0.0.x", 2894 | "utils-merge": "1.x.x" 2895 | } 2896 | }, 2897 | "passport-strategy": { 2898 | "version": "1.0.0", 2899 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", 2900 | "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" 2901 | }, 2902 | "path-is-absolute": { 2903 | "version": "1.0.1", 2904 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2905 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" 2906 | }, 2907 | "path-to-regexp": { 2908 | "version": "0.1.7", 2909 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 2910 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 2911 | }, 2912 | "pause": { 2913 | "version": "0.0.1", 2914 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", 2915 | "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" 2916 | }, 2917 | "proxy-addr": { 2918 | "version": "2.0.7", 2919 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 2920 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 2921 | "requires": { 2922 | "forwarded": "0.2.0", 2923 | "ipaddr.js": "1.9.1" 2924 | } 2925 | }, 2926 | "punycode": { 2927 | "version": "2.1.1", 2928 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2929 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 2930 | }, 2931 | "qs": { 2932 | "version": "6.10.3", 2933 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 2934 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 2935 | "requires": { 2936 | "side-channel": "^1.0.4" 2937 | } 2938 | }, 2939 | "random-bytes": { 2940 | "version": "1.0.0", 2941 | "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", 2942 | "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==" 2943 | }, 2944 | "range-parser": { 2945 | "version": "1.2.1", 2946 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 2947 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 2948 | }, 2949 | "raw-body": { 2950 | "version": "2.5.1", 2951 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 2952 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 2953 | "requires": { 2954 | "bytes": "3.1.2", 2955 | "http-errors": "2.0.0", 2956 | "iconv-lite": "0.4.24", 2957 | "unpipe": "1.0.0" 2958 | } 2959 | }, 2960 | "readable-stream": { 2961 | "version": "3.6.0", 2962 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2963 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2964 | "requires": { 2965 | "inherits": "^2.0.3", 2966 | "string_decoder": "^1.1.1", 2967 | "util-deprecate": "^1.0.1" 2968 | } 2969 | }, 2970 | "rimraf": { 2971 | "version": "3.0.2", 2972 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2973 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2974 | "requires": { 2975 | "glob": "^7.1.3" 2976 | } 2977 | }, 2978 | "safe-buffer": { 2979 | "version": "5.2.1", 2980 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2981 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 2982 | }, 2983 | "safer-buffer": { 2984 | "version": "2.1.2", 2985 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2986 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2987 | }, 2988 | "saslprep": { 2989 | "version": "1.0.3", 2990 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 2991 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 2992 | "optional": true, 2993 | "requires": { 2994 | "sparse-bitfield": "^3.0.3" 2995 | } 2996 | }, 2997 | "scmp": { 2998 | "version": "2.1.0", 2999 | "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz", 3000 | "integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==" 3001 | }, 3002 | "semver": { 3003 | "version": "5.7.1", 3004 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 3005 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 3006 | }, 3007 | "send": { 3008 | "version": "0.18.0", 3009 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 3010 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 3011 | "requires": { 3012 | "debug": "2.6.9", 3013 | "depd": "2.0.0", 3014 | "destroy": "1.2.0", 3015 | "encodeurl": "~1.0.2", 3016 | "escape-html": "~1.0.3", 3017 | "etag": "~1.8.1", 3018 | "fresh": "0.5.2", 3019 | "http-errors": "2.0.0", 3020 | "mime": "1.6.0", 3021 | "ms": "2.1.3", 3022 | "on-finished": "2.4.1", 3023 | "range-parser": "~1.2.1", 3024 | "statuses": "2.0.1" 3025 | }, 3026 | "dependencies": { 3027 | "ms": { 3028 | "version": "2.1.3", 3029 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 3030 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 3031 | } 3032 | } 3033 | }, 3034 | "serve-static": { 3035 | "version": "1.15.0", 3036 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 3037 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 3038 | "requires": { 3039 | "encodeurl": "~1.0.2", 3040 | "escape-html": "~1.0.3", 3041 | "parseurl": "~1.3.3", 3042 | "send": "0.18.0" 3043 | } 3044 | }, 3045 | "set-blocking": { 3046 | "version": "2.0.0", 3047 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 3048 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 3049 | }, 3050 | "setprototypeof": { 3051 | "version": "1.2.0", 3052 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 3053 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 3054 | }, 3055 | "side-channel": { 3056 | "version": "1.0.4", 3057 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 3058 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 3059 | "requires": { 3060 | "call-bind": "^1.0.0", 3061 | "get-intrinsic": "^1.0.2", 3062 | "object-inspect": "^1.9.0" 3063 | } 3064 | }, 3065 | "sift": { 3066 | "version": "16.0.0", 3067 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", 3068 | "integrity": "sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ==" 3069 | }, 3070 | "signal-exit": { 3071 | "version": "3.0.7", 3072 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 3073 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 3074 | }, 3075 | "smart-buffer": { 3076 | "version": "4.2.0", 3077 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 3078 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" 3079 | }, 3080 | "socks": { 3081 | "version": "2.7.0", 3082 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", 3083 | "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", 3084 | "requires": { 3085 | "ip": "^2.0.0", 3086 | "smart-buffer": "^4.2.0" 3087 | } 3088 | }, 3089 | "sparse-bitfield": { 3090 | "version": "3.0.3", 3091 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 3092 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", 3093 | "optional": true, 3094 | "requires": { 3095 | "memory-pager": "^1.0.2" 3096 | } 3097 | }, 3098 | "statuses": { 3099 | "version": "2.0.1", 3100 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 3101 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" 3102 | }, 3103 | "string_decoder": { 3104 | "version": "1.3.0", 3105 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 3106 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 3107 | "requires": { 3108 | "safe-buffer": "~5.2.0" 3109 | } 3110 | }, 3111 | "string-width": { 3112 | "version": "4.2.3", 3113 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3114 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3115 | "requires": { 3116 | "emoji-regex": "^8.0.0", 3117 | "is-fullwidth-code-point": "^3.0.0", 3118 | "strip-ansi": "^6.0.1" 3119 | } 3120 | }, 3121 | "strip-ansi": { 3122 | "version": "6.0.1", 3123 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3124 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3125 | "requires": { 3126 | "ansi-regex": "^5.0.1" 3127 | } 3128 | }, 3129 | "supports-color": { 3130 | "version": "7.2.0", 3131 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3132 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3133 | "requires": { 3134 | "has-flag": "^4.0.0" 3135 | } 3136 | }, 3137 | "tar": { 3138 | "version": "6.1.11", 3139 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", 3140 | "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", 3141 | "requires": { 3142 | "chownr": "^2.0.0", 3143 | "fs-minipass": "^2.0.0", 3144 | "minipass": "^3.0.0", 3145 | "minizlib": "^2.1.1", 3146 | "mkdirp": "^1.0.3", 3147 | "yallist": "^4.0.0" 3148 | } 3149 | }, 3150 | "toidentifier": { 3151 | "version": "1.0.1", 3152 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 3153 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 3154 | }, 3155 | "tr46": { 3156 | "version": "3.0.0", 3157 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 3158 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 3159 | "requires": { 3160 | "punycode": "^2.1.1" 3161 | } 3162 | }, 3163 | "type-is": { 3164 | "version": "1.6.18", 3165 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 3166 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 3167 | "requires": { 3168 | "media-typer": "0.3.0", 3169 | "mime-types": "~2.1.24" 3170 | } 3171 | }, 3172 | "uid-safe": { 3173 | "version": "2.1.5", 3174 | "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", 3175 | "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", 3176 | "requires": { 3177 | "random-bytes": "~1.0.0" 3178 | } 3179 | }, 3180 | "uid2": { 3181 | "version": "0.0.4", 3182 | "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", 3183 | "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" 3184 | }, 3185 | "underscore": { 3186 | "version": "1.13.4", 3187 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.4.tgz", 3188 | "integrity": "sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==" 3189 | }, 3190 | "unpipe": { 3191 | "version": "1.0.0", 3192 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3193 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 3194 | }, 3195 | "util-deprecate": { 3196 | "version": "1.0.2", 3197 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3198 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 3199 | }, 3200 | "utils-merge": { 3201 | "version": "1.0.1", 3202 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3203 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 3204 | }, 3205 | "vary": { 3206 | "version": "1.1.2", 3207 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3208 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 3209 | }, 3210 | "webidl-conversions": { 3211 | "version": "7.0.0", 3212 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 3213 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" 3214 | }, 3215 | "whatwg-url": { 3216 | "version": "11.0.0", 3217 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 3218 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 3219 | "requires": { 3220 | "tr46": "^3.0.0", 3221 | "webidl-conversions": "^7.0.0" 3222 | } 3223 | }, 3224 | "wide-align": { 3225 | "version": "1.1.5", 3226 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 3227 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 3228 | "requires": { 3229 | "string-width": "^1.0.2 || 2 || 3 || 4" 3230 | } 3231 | }, 3232 | "wrappy": { 3233 | "version": "1.0.2", 3234 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3235 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 3236 | }, 3237 | "yallist": { 3238 | "version": "4.0.0", 3239 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3240 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 3241 | } 3242 | } 3243 | } 3244 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "secrets", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "bcrypt": "^5.0.1", 14 | "body-parser": "^1.20.0", 15 | "dotenv": "^16.0.1", 16 | "ejs": "^3.1.8", 17 | "express": "^4.18.1", 18 | "express-session": "^1.17.3", 19 | "md5": "^2.3.0", 20 | "mongoose": "^6.5.3", 21 | "mongoose-encryption": "^2.1.2", 22 | "mongoose-findorcreate": "^3.0.0", 23 | "passport": "^0.6.0", 24 | "passport-google-oauth20": "^2.0.0", 25 | "passport-local": "^1.0.0", 26 | "passport-local-mongoose": "^7.1.2" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /public/css/bootstrap-social.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Social Buttons for Bootstrap 3 | * 4 | * Copyright 2013-2016 Panayiotis Lipiridis 5 | * Licensed under the MIT License 6 | * 7 | * https://github.com/lipis/bootstrap-social 8 | */ 9 | 10 | .btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} 11 | .btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em} 12 | .btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em} 13 | .btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em} 14 | .btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)} 15 | .btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em} 16 | .btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em} 17 | .btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em} 18 | .btn-social-icon>:first-child{border:none;text-align:center;width:100% !important} 19 | .btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0} 20 | .btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0} 21 | .btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0} 22 | .btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} 23 | .btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)} 24 | .btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active:hover,.btn-adn.active:hover,.open>.dropdown-toggle.btn-adn:hover,.btn-adn:active:focus,.btn-adn.active:focus,.open>.dropdown-toggle.btn-adn:focus,.btn-adn:active.focus,.btn-adn.active.focus,.open>.dropdown-toggle.btn-adn.focus{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,0.2)} 25 | .btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none} 26 | .btn-adn.disabled:hover,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn:hover,.btn-adn.disabled:focus,.btn-adn[disabled]:focus,fieldset[disabled] .btn-adn:focus,.btn-adn.disabled.focus,.btn-adn[disabled].focus,fieldset[disabled] .btn-adn.focus{background-color:#d87a68;border-color:rgba(0,0,0,0.2)} 27 | .btn-adn .badge{color:#d87a68;background-color:#fff} 28 | .btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} 29 | .btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)} 30 | .btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active:hover,.btn-bitbucket.active:hover,.open>.dropdown-toggle.btn-bitbucket:hover,.btn-bitbucket:active:focus,.btn-bitbucket.active:focus,.open>.dropdown-toggle.btn-bitbucket:focus,.btn-bitbucket:active.focus,.btn-bitbucket.active.focus,.open>.dropdown-toggle.btn-bitbucket.focus{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,0.2)} 31 | .btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none} 32 | .btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled.focus,.btn-bitbucket[disabled].focus,fieldset[disabled] .btn-bitbucket.focus{background-color:#205081;border-color:rgba(0,0,0,0.2)} 33 | .btn-bitbucket .badge{color:#205081;background-color:#fff} 34 | .btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} 35 | .btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)} 36 | .btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active:hover,.btn-dropbox.active:hover,.open>.dropdown-toggle.btn-dropbox:hover,.btn-dropbox:active:focus,.btn-dropbox.active:focus,.open>.dropdown-toggle.btn-dropbox:focus,.btn-dropbox:active.focus,.btn-dropbox.active.focus,.open>.dropdown-toggle.btn-dropbox.focus{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,0.2)} 37 | .btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none} 38 | .btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled.focus,.btn-dropbox[disabled].focus,fieldset[disabled] .btn-dropbox.focus{background-color:#1087dd;border-color:rgba(0,0,0,0.2)} 39 | .btn-dropbox .badge{color:#1087dd;background-color:#fff} 40 | .btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} 41 | .btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)} 42 | .btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active:hover,.btn-facebook.active:hover,.open>.dropdown-toggle.btn-facebook:hover,.btn-facebook:active:focus,.btn-facebook.active:focus,.open>.dropdown-toggle.btn-facebook:focus,.btn-facebook:active.focus,.btn-facebook.active.focus,.open>.dropdown-toggle.btn-facebook.focus{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,0.2)} 43 | .btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none} 44 | .btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled.focus,.btn-facebook[disabled].focus,fieldset[disabled] .btn-facebook.focus{background-color:#3b5998;border-color:rgba(0,0,0,0.2)} 45 | .btn-facebook .badge{color:#3b5998;background-color:#fff} 46 | .btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} 47 | .btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)} 48 | .btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active:hover,.btn-flickr.active:hover,.open>.dropdown-toggle.btn-flickr:hover,.btn-flickr:active:focus,.btn-flickr.active:focus,.open>.dropdown-toggle.btn-flickr:focus,.btn-flickr:active.focus,.btn-flickr.active.focus,.open>.dropdown-toggle.btn-flickr.focus{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,0.2)} 49 | .btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none} 50 | .btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled.focus,.btn-flickr[disabled].focus,fieldset[disabled] .btn-flickr.focus{background-color:#ff0084;border-color:rgba(0,0,0,0.2)} 51 | .btn-flickr .badge{color:#ff0084;background-color:#fff} 52 | .btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} 53 | .btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)} 54 | .btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active:hover,.btn-foursquare.active:hover,.open>.dropdown-toggle.btn-foursquare:hover,.btn-foursquare:active:focus,.btn-foursquare.active:focus,.open>.dropdown-toggle.btn-foursquare:focus,.btn-foursquare:active.focus,.btn-foursquare.active.focus,.open>.dropdown-toggle.btn-foursquare.focus{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,0.2)} 55 | .btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none} 56 | .btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled.focus,.btn-foursquare[disabled].focus,fieldset[disabled] .btn-foursquare.focus{background-color:#f94877;border-color:rgba(0,0,0,0.2)} 57 | .btn-foursquare .badge{color:#f94877;background-color:#fff} 58 | .btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} 59 | .btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)} 60 | .btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active:hover,.btn-github.active:hover,.open>.dropdown-toggle.btn-github:hover,.btn-github:active:focus,.btn-github.active:focus,.open>.dropdown-toggle.btn-github:focus,.btn-github:active.focus,.btn-github.active.focus,.open>.dropdown-toggle.btn-github.focus{color:#fff;background-color:#191919;border-color:rgba(0,0,0,0.2)} 61 | .btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none} 62 | .btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled.focus,.btn-github[disabled].focus,fieldset[disabled] .btn-github.focus{background-color:#444;border-color:rgba(0,0,0,0.2)} 63 | .btn-github .badge{color:#444;background-color:#fff} 64 | .btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} 65 | .btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)} 66 | .btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active:hover,.btn-google.active:hover,.open>.dropdown-toggle.btn-google:hover,.btn-google:active:focus,.btn-google.active:focus,.open>.dropdown-toggle.btn-google:focus,.btn-google:active.focus,.btn-google.active.focus,.open>.dropdown-toggle.btn-google.focus{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,0.2)} 67 | .btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none} 68 | .btn-google.disabled:hover,.btn-google[disabled]:hover,fieldset[disabled] .btn-google:hover,.btn-google.disabled:focus,.btn-google[disabled]:focus,fieldset[disabled] .btn-google:focus,.btn-google.disabled.focus,.btn-google[disabled].focus,fieldset[disabled] .btn-google.focus{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)} 69 | .btn-google .badge{color:#dd4b39;background-color:#fff} 70 | .btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} 71 | .btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)} 72 | .btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active:hover,.btn-instagram.active:hover,.open>.dropdown-toggle.btn-instagram:hover,.btn-instagram:active:focus,.btn-instagram.active:focus,.open>.dropdown-toggle.btn-instagram:focus,.btn-instagram:active.focus,.btn-instagram.active.focus,.open>.dropdown-toggle.btn-instagram.focus{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,0.2)} 73 | .btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none} 74 | .btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled.focus,.btn-instagram[disabled].focus,fieldset[disabled] .btn-instagram.focus{background-color:#3f729b;border-color:rgba(0,0,0,0.2)} 75 | .btn-instagram .badge{color:#3f729b;background-color:#fff} 76 | .btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} 77 | .btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)} 78 | .btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active:hover,.btn-linkedin.active:hover,.open>.dropdown-toggle.btn-linkedin:hover,.btn-linkedin:active:focus,.btn-linkedin.active:focus,.open>.dropdown-toggle.btn-linkedin:focus,.btn-linkedin:active.focus,.btn-linkedin.active.focus,.open>.dropdown-toggle.btn-linkedin.focus{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,0.2)} 79 | .btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none} 80 | .btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled.focus,.btn-linkedin[disabled].focus,fieldset[disabled] .btn-linkedin.focus{background-color:#007bb6;border-color:rgba(0,0,0,0.2)} 81 | .btn-linkedin .badge{color:#007bb6;background-color:#fff} 82 | .btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} 83 | .btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)} 84 | .btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active:hover,.btn-microsoft.active:hover,.open>.dropdown-toggle.btn-microsoft:hover,.btn-microsoft:active:focus,.btn-microsoft.active:focus,.open>.dropdown-toggle.btn-microsoft:focus,.btn-microsoft:active.focus,.btn-microsoft.active.focus,.open>.dropdown-toggle.btn-microsoft.focus{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,0.2)} 85 | .btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none} 86 | .btn-microsoft.disabled:hover,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft:hover,.btn-microsoft.disabled:focus,.btn-microsoft[disabled]:focus,fieldset[disabled] .btn-microsoft:focus,.btn-microsoft.disabled.focus,.btn-microsoft[disabled].focus,fieldset[disabled] .btn-microsoft.focus{background-color:#2672ec;border-color:rgba(0,0,0,0.2)} 87 | .btn-microsoft .badge{color:#2672ec;background-color:#fff} 88 | .btn-odnoklassniki{color:#fff;background-color:#f4731c;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:focus,.btn-odnoklassniki.focus{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)} 89 | .btn-odnoklassniki:hover{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)} 90 | .btn-odnoklassniki:active,.btn-odnoklassniki.active,.open>.dropdown-toggle.btn-odnoklassniki{color:#fff;background-color:#d35b0a;border-color:rgba(0,0,0,0.2)}.btn-odnoklassniki:active:hover,.btn-odnoklassniki.active:hover,.open>.dropdown-toggle.btn-odnoklassniki:hover,.btn-odnoklassniki:active:focus,.btn-odnoklassniki.active:focus,.open>.dropdown-toggle.btn-odnoklassniki:focus,.btn-odnoklassniki:active.focus,.btn-odnoklassniki.active.focus,.open>.dropdown-toggle.btn-odnoklassniki.focus{color:#fff;background-color:#b14c09;border-color:rgba(0,0,0,0.2)} 91 | .btn-odnoklassniki:active,.btn-odnoklassniki.active,.open>.dropdown-toggle.btn-odnoklassniki{background-image:none} 92 | .btn-odnoklassniki.disabled:hover,.btn-odnoklassniki[disabled]:hover,fieldset[disabled] .btn-odnoklassniki:hover,.btn-odnoklassniki.disabled:focus,.btn-odnoklassniki[disabled]:focus,fieldset[disabled] .btn-odnoklassniki:focus,.btn-odnoklassniki.disabled.focus,.btn-odnoklassniki[disabled].focus,fieldset[disabled] .btn-odnoklassniki.focus{background-color:#f4731c;border-color:rgba(0,0,0,0.2)} 93 | .btn-odnoklassniki .badge{color:#f4731c;background-color:#fff} 94 | .btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} 95 | .btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)} 96 | .btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active:hover,.btn-openid.active:hover,.open>.dropdown-toggle.btn-openid:hover,.btn-openid:active:focus,.btn-openid.active:focus,.open>.dropdown-toggle.btn-openid:focus,.btn-openid:active.focus,.btn-openid.active.focus,.open>.dropdown-toggle.btn-openid.focus{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,0.2)} 97 | .btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none} 98 | .btn-openid.disabled:hover,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid:hover,.btn-openid.disabled:focus,.btn-openid[disabled]:focus,fieldset[disabled] .btn-openid:focus,.btn-openid.disabled.focus,.btn-openid[disabled].focus,fieldset[disabled] .btn-openid.focus{background-color:#f7931e;border-color:rgba(0,0,0,0.2)} 99 | .btn-openid .badge{color:#f7931e;background-color:#fff} 100 | .btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} 101 | .btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)} 102 | .btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active:hover,.btn-pinterest.active:hover,.open>.dropdown-toggle.btn-pinterest:hover,.btn-pinterest:active:focus,.btn-pinterest.active:focus,.open>.dropdown-toggle.btn-pinterest:focus,.btn-pinterest:active.focus,.btn-pinterest.active.focus,.open>.dropdown-toggle.btn-pinterest.focus{color:#fff;background-color:#801419;border-color:rgba(0,0,0,0.2)} 103 | .btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none} 104 | .btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled.focus,.btn-pinterest[disabled].focus,fieldset[disabled] .btn-pinterest.focus{background-color:#cb2027;border-color:rgba(0,0,0,0.2)} 105 | .btn-pinterest .badge{color:#cb2027;background-color:#fff} 106 | .btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} 107 | .btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)} 108 | .btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active:hover,.btn-reddit.active:hover,.open>.dropdown-toggle.btn-reddit:hover,.btn-reddit:active:focus,.btn-reddit.active:focus,.open>.dropdown-toggle.btn-reddit:focus,.btn-reddit:active.focus,.btn-reddit.active.focus,.open>.dropdown-toggle.btn-reddit.focus{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,0.2)} 109 | .btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none} 110 | .btn-reddit.disabled:hover,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit:hover,.btn-reddit.disabled:focus,.btn-reddit[disabled]:focus,fieldset[disabled] .btn-reddit:focus,.btn-reddit.disabled.focus,.btn-reddit[disabled].focus,fieldset[disabled] .btn-reddit.focus{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)} 111 | .btn-reddit .badge{color:#eff7ff;background-color:#000} 112 | .btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} 113 | .btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)} 114 | .btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active:hover,.btn-soundcloud.active:hover,.open>.dropdown-toggle.btn-soundcloud:hover,.btn-soundcloud:active:focus,.btn-soundcloud.active:focus,.open>.dropdown-toggle.btn-soundcloud:focus,.btn-soundcloud:active.focus,.btn-soundcloud.active.focus,.open>.dropdown-toggle.btn-soundcloud.focus{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,0.2)} 115 | .btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none} 116 | .btn-soundcloud.disabled:hover,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud[disabled]:focus,fieldset[disabled] .btn-soundcloud:focus,.btn-soundcloud.disabled.focus,.btn-soundcloud[disabled].focus,fieldset[disabled] .btn-soundcloud.focus{background-color:#f50;border-color:rgba(0,0,0,0.2)} 117 | .btn-soundcloud .badge{color:#f50;background-color:#fff} 118 | .btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} 119 | .btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)} 120 | .btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active:hover,.btn-tumblr.active:hover,.open>.dropdown-toggle.btn-tumblr:hover,.btn-tumblr:active:focus,.btn-tumblr.active:focus,.open>.dropdown-toggle.btn-tumblr:focus,.btn-tumblr:active.focus,.btn-tumblr.active.focus,.open>.dropdown-toggle.btn-tumblr.focus{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,0.2)} 121 | .btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none} 122 | .btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled.focus,.btn-tumblr[disabled].focus,fieldset[disabled] .btn-tumblr.focus{background-color:#2c4762;border-color:rgba(0,0,0,0.2)} 123 | .btn-tumblr .badge{color:#2c4762;background-color:#fff} 124 | .btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} 125 | .btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)} 126 | .btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active:hover,.btn-twitter.active:hover,.open>.dropdown-toggle.btn-twitter:hover,.btn-twitter:active:focus,.btn-twitter.active:focus,.open>.dropdown-toggle.btn-twitter:focus,.btn-twitter:active.focus,.btn-twitter.active.focus,.open>.dropdown-toggle.btn-twitter.focus{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,0.2)} 127 | .btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none} 128 | .btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled.focus,.btn-twitter[disabled].focus,fieldset[disabled] .btn-twitter.focus{background-color:#55acee;border-color:rgba(0,0,0,0.2)} 129 | .btn-twitter .badge{color:#55acee;background-color:#fff} 130 | .btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} 131 | .btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)} 132 | .btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active:hover,.btn-vimeo.active:hover,.open>.dropdown-toggle.btn-vimeo:hover,.btn-vimeo:active:focus,.btn-vimeo.active:focus,.open>.dropdown-toggle.btn-vimeo:focus,.btn-vimeo:active.focus,.btn-vimeo.active.focus,.open>.dropdown-toggle.btn-vimeo.focus{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,0.2)} 133 | .btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none} 134 | .btn-vimeo.disabled:hover,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo:hover,.btn-vimeo.disabled:focus,.btn-vimeo[disabled]:focus,fieldset[disabled] .btn-vimeo:focus,.btn-vimeo.disabled.focus,.btn-vimeo[disabled].focus,fieldset[disabled] .btn-vimeo.focus{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)} 135 | .btn-vimeo .badge{color:#1ab7ea;background-color:#fff} 136 | .btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} 137 | .btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)} 138 | .btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active:hover,.btn-vk.active:hover,.open>.dropdown-toggle.btn-vk:hover,.btn-vk:active:focus,.btn-vk.active:focus,.open>.dropdown-toggle.btn-vk:focus,.btn-vk:active.focus,.btn-vk.active.focus,.open>.dropdown-toggle.btn-vk.focus{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,0.2)} 139 | .btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none} 140 | .btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled.focus,.btn-vk[disabled].focus,fieldset[disabled] .btn-vk.focus{background-color:#587ea3;border-color:rgba(0,0,0,0.2)} 141 | .btn-vk .badge{color:#587ea3;background-color:#fff} 142 | .btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} 143 | .btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)} 144 | .btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active:hover,.btn-yahoo.active:hover,.open>.dropdown-toggle.btn-yahoo:hover,.btn-yahoo:active:focus,.btn-yahoo.active:focus,.open>.dropdown-toggle.btn-yahoo:focus,.btn-yahoo:active.focus,.btn-yahoo.active.focus,.open>.dropdown-toggle.btn-yahoo.focus{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,0.2)} 145 | .btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none} 146 | .btn-yahoo.disabled:hover,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo:hover,.btn-yahoo.disabled:focus,.btn-yahoo[disabled]:focus,fieldset[disabled] .btn-yahoo:focus,.btn-yahoo.disabled.focus,.btn-yahoo[disabled].focus,fieldset[disabled] .btn-yahoo.focus{background-color:#720e9e;border-color:rgba(0,0,0,0.2)} 147 | .btn-yahoo .badge{color:#720e9e;background-color:#fff} 148 | -------------------------------------------------------------------------------- /public/css/styles.css: -------------------------------------------------------------------------------- 1 | 2 | body { 3 | background-color: #E8ECEF; 4 | } 5 | 6 | .centered { 7 | padding-top: 200px; 8 | text-align: center; 9 | } 10 | 11 | .secret-text { 12 | text-align: center; 13 | font-size: 2rem; 14 | color: #fff; 15 | background-color: #000; 16 | } 17 | -------------------------------------------------------------------------------- /views/home.ejs: -------------------------------------------------------------------------------- 1 | <%- include('partials/header') %> 2 | 3 | 4 |